package netmanager.lib.netmanager;

import java.util.List;
import java.util.Arrays;

import com.sun.jna.NativeLong;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;

import netmanager.lib.LLONG;
import netmanager.lib.LONG;

public class NetStructs {

    //////////////////////////////////////////////////////////////////////////////////////
    //图形元素相关结构

    //尺寸
    public static class STU_SIZE extends Structure {
        public int nWidth;                     // 宽度
        public int nHeight;                    // 高度

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nWidth", "nHeight"});
        }

        public static class ByReference extends STU_SIZE implements Structure.ByReference {
        }

        public static class ByValue extends STU_SIZE implements Structure.ByValue {
        }
    }


    // 二进制数据
    public static class STU_BIN_DATA extends Structure {
        public int dwSize;
        public Pointer pInBinBuf;                      // 二进制输入数据缓冲, char*
        public int dwInBinBufSize;                 // 二进制输入数据长度

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "pInBinBuf", "dwInBinBufSize"});
        }

        public static class ByReference extends STU_BIN_DATA implements Structure.ByReference {
        }

        public static class ByValue extends STU_BIN_DATA implements Structure.ByValue {
        }
    }


    //二维空间点
    public static class STU_POINT extends Structure {
        public short nX;
        public short nY;

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nX", "nY"});
        }

        public static class ByReference extends STU_POINT implements Structure.ByReference {
        }

        public static class ByValue extends STU_POINT implements Structure.ByValue {
        }
    }


    //一对坐标点
    public static class STU_POINT_PAIR extends Structure {
        public STU_POINT[] stuPoints = new STU_POINT[2];

        public STU_POINT_PAIR() {
            for (int i = 0; i < stuPoints.length; i++) {
                stuPoints[i] = new STU_POINT();
            }
        }

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stuPoints"});
        }

        public static class ByReference extends STU_POINT_PAIR implements Structure.ByReference {
        }

        public static class ByValue extends STU_POINT_PAIR implements Structure.ByValue {
        }
    }

    //区域或曲线顶点信息
    public static class STU_POLY_POINTS extends Structure {
        public int nPointNum;                            // 顶点数
        public STU_POINT[] stuPoints = new STU_POINT[NetDefs.MAX_POLY_POINT_COUNT];        // 顶点信息

        public STU_POLY_POINTS() {
            for (int i = 0; i < stuPoints.length; i++) {
                stuPoints[i] = new STU_POINT();
            }
        }

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nPointNum", "stuPoints"});
        }

        public static class ByReference extends STU_POLY_POINTS implements Structure.ByReference {
        }

        public static class ByValue extends STU_POLY_POINTS implements Structure.ByValue {
        }
    }

    ;

    //区域
    public static class STU_RECT_L extends Structure {
        // 类型特殊处理为 LONG
        public LONG nLeft;
        public LONG nTop;
        public LONG nRight;
        public LONG nBottom;

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nLeft", "nTop", "nRight", "nBottom"});
        }

        public static class ByReference extends STU_RECT_L implements Structure.ByReference {
        }

        public static class ByValue extends STU_RECT_L implements Structure.ByValue {
        }
    }

    ;

    public static class STU_RECT_I extends Structure {
        public int nLeft;
        public int nTop;
        public int nRight;
        public int nBottom;

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nLeft", "nTop", "nRight", "nBottom"});
        }

        public static class ByReference extends STU_RECT_I implements Structure.ByReference {
        }

        public static class ByValue extends STU_RECT_I implements Structure.ByValue {
        }
    }

    ;

    public static class STU_RECT_F extends Structure {
        public float fLeft;
        public float fTop;
        public float fRight;
        public float fBottom;

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"fLeft", "fTop", "fRight", "fBottom"});
        }

        public static class ByReference extends STU_RECT_F implements Structure.ByReference {
        }

        public static class ByValue extends STU_RECT_F implements Structure.ByValue {
        }
    }

    ;

    public static class STU_RECT_D extends Structure {
        double dLeft;
        double dRight;
        double dTop;
        double dBottom;

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dLeft", "dRight", "dTop", "dBottom"});
        }

        public static class ByReference extends STU_RECT_D implements Structure.ByReference {
        }

        public static class ByValue extends STU_RECT_D implements Structure.ByValue {
        }
    }

    ;

    //图片分辨率
    public static class STU_RESOLUTION extends Structure {
        public short snWidth;            // 宽
        public short snHeight;        // 高

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"snWidth", "snHeight"});
        }

        public static class ByReference extends STU_RESOLUTION implements Structure.ByReference {
        }

        public static class ByValue extends STU_RESOLUTION implements Structure.ByValue {
        }
    }

    ;

    //颜色RGBA
    public static class STU_COLOR_RGBA extends Structure {
        public int nRed;                       // 红
        public int nGreen;                     // 绿
        public int nBlue;                      // 蓝
        public int nAlpha;                     // 透明

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRed", "nGreen", "nBlue", "nAlpha"});
        }

        public static class ByReference extends STU_COLOR_RGBA implements Structure.ByReference {
        }

        public static class ByValue extends STU_COLOR_RGBA implements Structure.ByValue {
        }
    }

    ;

    //颜色BCSH
    public static class STU_COLOR_BCSH extends Structure {
        public int nBirghtness;                // 亮度
        public int nContrast;                  // 对比度
        public int nSaturation;                // 饱和度
        public int nHue;                       // 色调

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nBirghtness", "nContrast", "nSaturation", "nHue"});
        }

        public static class ByReference extends STU_COLOR_BCSH implements Structure.ByReference {
        }

        public static class ByValue extends STU_COLOR_BCSH implements Structure.ByValue {
        }
    }

    ;

    //范围
    public static class STU_RANGE_I extends Structure {
        public int nLowValue;
        public int nHighValue;

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nLowValue", "nHighValue"});
        }

        public static class ByReference extends STU_RANGE_I implements Structure.ByReference {
        }

        public static class ByValue extends STU_RANGE_I implements Structure.ByValue {
        }
    }

    ;

    //////////////////////////////////////////////////////////////////////////////////////
    //时间元素相关结构

    // 日期
    public static class STU_DATE_I extends Structure {
        public int nYear;
        public int nMonth;
        public int nDay;
        public int[] reserved = new int[2];

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nYear", "nMonth", "nDay", "reserved"});
        }

        public static class ByReference extends STU_DATE_I implements Structure.ByReference {
        }

        public static class ByValue extends STU_DATE_I implements Structure.ByValue {
        }
    }

    ;

    // 日期段
    public static class STU_DATE_SECTION_I extends Structure {
        public int nStartYear;
        public int nStartMonth;
        public int nStartDay;
        public int nEndYear;
        public int nEndMonth;
        public int nEndDay;
        public int[] reserved = new int[2];

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nStartYear", "nStartMonth", "nStartDay",
                    "nEndYear", "nEndMonth", "nEndDay", "reserved"});
        }

        public static class ByReference extends STU_DATE_SECTION_I implements Structure.ByReference {
        }

        public static class ByValue extends STU_DATE_SECTION_I implements Structure.ByValue {
        }
    }

    ;

    // 单指时间段
    public static class STU_TIME_SECTION_I extends Structure {
        public int nStartHour;
        public int nStartMinute;
        public int nStartSecond;
        public int nEndHour;
        public int nEndMinute;
        public int nEndSecond;
        public int[] reserved = new int[2];

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nStartHour", "nStartMinute", "nStartSecond",
                    "nEndHour", "nEndMinute", "nEndSecond", "reserved"});
        }

        public static class ByReference extends STU_TIME_SECTION_I implements Structure.ByReference {
        }

        public static class ByValue extends STU_TIME_SECTION_I implements Structure.ByValue {
        }
    }

    ;

    public static class STU_TIME_SECTION extends Structure {
        // 当表示录像时间段时，按位表示四个使能
        public int bEnable;
        public int nStartHour;
        public int nStartMinute;
        public int nStartSecond;
        public int nEndHour;
        public int nEndMinute;
        public int nEndSecond;

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable",
                    "nStartHour", "nStartMinute", "nStartSecond",
                    "nEndHour", "nEndMinute", "nEndSecond"});
        }

        public static class ByReference extends STU_TIME_SECTION implements Structure.ByReference {
        }

        public static class ByValue extends STU_TIME_SECTION implements Structure.ByValue {
        }
    }

    ;

    public static class STU_TIME_SECTION_SCHEDULE extends Structure {
        public byte bValue;                // 该时段是否有效， 1 有效， 0 无效
        public byte[] reserved = new byte[3];
        public int nStartHour;            // 开始时间-小时
        public int nStartMinute;        // 开始时间-分钟
        public int nStartSecond;        // 开始时间-秒
        public int nEndHour;            // 结束时间-小时
        public int nEndMinute;            // 结束时间-分钟
        public int nEndSecond;            // 结束时间-秒

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nValue", "reserved",
                    "nStartHour", "nStartMinute", "nStartSecond",
                    "nEndHour", "nEndMinute", "nEndSecond"});
        }

        public static class ByReference extends STU_TIME_SECTION_SCHEDULE implements Structure.ByReference {
        }

        public static class ByValue extends STU_TIME_SECTION_SCHEDULE implements Structure.ByValue {
        }
    }

    ;

    public static class STU_TIME extends Structure {
        public int nYear;                  // 年
        public int nMonth;                 // 月
        public int nDay;                   // 日
        public int nHour;                  // 时
        public int nMinute;                // 分
        public int nSecond;                // 秒

        @Override
        public String toString() {
            return String.format("%04d/%02d/%02d %02d:%02d:%02d", nYear, nMonth, nDay, nHour, nMinute, nSecond);
        }

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nYear", "nMonth", "nDay", "nHour", "nMinute", "nSecond"});
        }

        public static class ByReference extends STU_TIME implements Structure.ByReference {
        }

        public static class ByValue extends STU_TIME implements Structure.ByValue {
        }
    }

    ;

    public static class STU_TIME_EX extends Structure {
        public int nYear;                  // 年
        public int nMonth;                 // 月
        public int nDay;                   // 日
        public int nHour;                  // 时
        public int nMinute;                // 分
        public int nSecond;                // 秒
        public int nMillisecond;           // 毫秒
        public int[] nReserved = new int[2];    // 保留字段

        @Override
        public String toString() {
            return String.format("%04d/%02d/%02d %02d:%02d:%02d %03d", nYear, nMonth, nDay, nHour, nMinute, nSecond, nMillisecond);
        }

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nYear", "nMonth", "nDay",
                    "nHour", "nMinute", "nSecond", "nMillisecond", "nReserved"});
        }

        public static class ByReference extends STU_TIME_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_TIME_EX implements Structure.ByValue {
        }
    }

    ;

    //////////////////////////////////////////////////////////////////////////////////////
    //设备系统信息

    // 设备信息
    public static class STU_SYS_DEVICE_INFO extends Structure {
        public byte[] szDeviceType = new byte[128];            // 设备类型
        public byte[] szDeviceClass = new byte[64];            // 设备类别
        public byte[] szSerialNumber = new byte[64];            // 设备序列号
        public byte[] reserved = new byte[1152];                // 保留位

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szDeviceType", "szDeviceClass", "szSerialNumber", "reserved"});
        }

        public static class ByReference extends STU_SYS_DEVICE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_SYS_DEVICE_INFO implements Structure.ByValue {
        }
    }

    ;

    // 软件版本信息
    public static class STU_SYS_SOFTWARE_VERSION extends Structure {
        public byte[] szVersion = new byte[32];                // 软件版本信息
        public byte[] szBuildDate = new byte[32];                // 版本发布时间
        public byte[] reserved = new byte[256];                // 保留位

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szVersion", "szBuildDate", "reserved"});
        }

        public static class ByReference extends STU_SYS_SOFTWARE_VERSION implements Structure.ByReference {
        }

        public static class ByValue extends STU_SYS_SOFTWARE_VERSION implements Structure.ByValue {
        }
    }

    ;

    // 硬件版本信息
    public static class STU_SYS_HARDWARE_VERSION extends Structure {
        public byte[] szVersion = new byte[32];                // 硬件版本信息
        public byte[] szModel = new byte[32];                    // model
        public byte[] reserved = new byte[256];                // 保留位

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szVersion", "szModel", "reserved"});
        }

        public static class ByReference extends STU_SYS_HARDWARE_VERSION implements Structure.ByReference {
        }

        public static class ByValue extends STU_SYS_HARDWARE_VERSION implements Structure.ByValue {
        }
    }

    ;

    // 处理器信息
    public static class STU_SYS_PROCESSOR_INFO extends Structure {
        public byte[] szModel = new byte[32];                    // 处理器信息
        public byte[] szFrequency = new byte[16];                // 处理器频率
        public byte nUsage;                                    // 处理器利用率（%）
        public byte nTemperature;                            // 处理器温度(摄氏度)
        public byte[] reserved1 = new byte[2];                // 字节对齐
        public byte[] reserved2 = new byte[60];                // 保留位

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szModel", "szFrequency", "nUsage",
                    "nTemperature", "reserved1", "reserved2"});
        }

        public static class ByReference extends STU_SYS_PROCESSOR_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_SYS_PROCESSOR_INFO implements Structure.ByValue {
        }
    }

    ;

    // 内存信息
    public static class STU_SYS_MEMORY_INFO extends Structure {
        public int nTotalSize;                                // 总大小（字节）
        public int nFreeSize;                                // 空余大小(字节)
        public byte[] reserved = new byte[64];                // 预留位

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nTotalSize", "nFreeSize", "reserved"});
        }

        public static class ByReference extends STU_SYS_MEMORY_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_SYS_MEMORY_INFO implements Structure.ByValue {
        }
    }

    ;

    // 系统信息
    public static class STU_SYS_INFO extends Structure {
        public int bAppAutoStart;                // 应用程序是否自启动
        public int nSupportLangNum;            // 支持的语言种数
        // 语言字符串,","分隔，如“SimpleChinese,English”，最大支持 32 种语言
        public byte[] szLanguages = new byte[NetDefs.MAX_LANGUAGE_LENGTH * NetDefs.MAX_LANGUAGE_NUM];
        public int nProcessorNum;                // 处理器个数
        // 处理器信息数组(最大16个处理器信息)
        public STU_SYS_PROCESSOR_INFO[] stuProcessorInfoArray = new STU_SYS_PROCESSOR_INFO[16];
        public STU_SYS_DEVICE_INFO stuDeviceInfo;                // 设备信息
        public STU_SYS_SOFTWARE_VERSION stuSoftWareVer;                // 软件信息
        public STU_SYS_HARDWARE_VERSION stuHardWareVer;                // 硬件信息
        public STU_SYS_MEMORY_INFO stuMemoryInfo;                // 内存信息
        public byte[] reserved = new byte[2048];    // 保留位

        public STU_SYS_INFO() {
            for (int i = 0; i < stuProcessorInfoArray.length; i++) {
                stuProcessorInfoArray[i] = new STU_SYS_PROCESSOR_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bAppAutoStart", "nSupportLangNum", "szLanguages", "nProcessorNum",
                    "stuProcessorInfoArray", "stuDeviceInfo", "stuSoftWareVer", "stuHardWareVer", "stuMemoryInfo", "reserved"});
        }

        public static class ByReference extends STU_SYS_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_SYS_INFO implements Structure.ByValue {
        }
    }

    // 云加密套件配置信息
    public static class STU_CLOUD_CIPHER_SUITES extends Structure {
        public int nCipherType;                    // 加密算法类型
        public byte[] szSalt = new byte[128];            // 加密盐
        public int nCipherLength;                    // 加密数据长度
        public byte[] reserved = new byte[1024];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nCipherType", "szSalt", "nCipherLength", "reserved"});
        }

        public static class ByReference extends STU_CLOUD_CIPHER_SUITES implements Structure.ByReference {
        }

        public static class ByValue extends STU_CLOUD_CIPHER_SUITES implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 新零售商品/货柜信息

    // 货品信息
    public static class STU_GOODS_INFO extends Structure {
        // 货品类型
        public byte[] szGoodType = new byte[32];
        // 货品编号
        public int nGoodsNo;
        // 货品名
        public byte[] szGoodsName = new byte[128];
        // 预留参数
        public byte[] reserved = new byte[128];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szGoodType", "nGoodsNo", "szGoodsName", "reserved"});
        }

        public static class ByReference extends STU_GOODS_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_GOODS_INFO implements Structure.ByValue {
        }
    }

    // 货品信息集合
    public static class STU_GOODS_INFOS extends Structure {
        // 货格内货品数量，最大 MAX_GOODS_IN_CONTAINER_COUNT 个
        public int nGoodsCount;
        // 货格内货品信息数组
        public STU_GOODS_INFO[] stGoodsInfos = new STU_GOODS_INFO[NetDefs.MAX_GOODS_IN_CONTAINER_COUNT];

        public STU_GOODS_INFOS() {
            for (int i = 0; i < stGoodsInfos.length; i++) {
                stGoodsInfos[i] = new STU_GOODS_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nGoodsCount", "stGoodsInfos"});
        }

        public static class ByReference extends STU_GOODS_INFOS implements Structure.ByReference {
        }

        public static class ByValue extends STU_GOODS_INFOS implements Structure.ByValue {
        }
    }

    // 货格位置信息
    public static class STU_GOODS_CONTAINER_POSITION extends Structure {
        // 货格行号，0表示未正确摆放在货格内
        public int nRow;
        // 货格列号，0表示未正确摆放在货格内
        public int nColumn;
        // 货格位置，不规则区块，相对坐标，uint取值范围：0~8191
        public STU_POLY_POINTS stPolyPos = new STU_POLY_POINTS();

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRow", "nColumn", "stPolyPos"});
        }

        public static class ByReference extends STU_GOODS_CONTAINER_POSITION implements Structure.ByReference {
        }

        public static class ByValue extends STU_GOODS_CONTAINER_POSITION implements Structure.ByValue {
        }
    }

    // 货柜信息
    public static class STU_GOODS_CONTAINER_INFO extends Structure {
        // 货格位置信息
        public STU_GOODS_CONTAINER_POSITION stPosition = new STU_GOODS_CONTAINER_POSITION();
        // 货品信息集合
        public STU_GOODS_INFOS stGoodsInfos = new STU_GOODS_INFOS();
        // 预留参数
        public byte[] reserved = new byte[128];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stPosition", "stGoodsInfos", "reserved"});
        }

        public static class ByReference extends STU_GOODS_CONTAINER_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_GOODS_CONTAINER_INFO implements Structure.ByValue {
        }
    }

    // 货柜内物品替换信息
    public static class STU_GOODS_CONTAINER_REPLACEMENT_INFO extends Structure {
        // 货格位置信息
        public STU_GOODS_CONTAINER_POSITION stPosition = new STU_GOODS_CONTAINER_POSITION();
        // 新货品信息集合
        public STU_GOODS_INFOS stNewGoodsInfos = new STU_GOODS_INFOS();
        // 旧货品信息集合
        public STU_GOODS_INFOS stOldGoodsInfos = new STU_GOODS_INFOS();
        // 预留参数
        public byte[] reserved = new byte[128];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stPosition", "stNewGoodsInfos", "stOldGoodsInfos", "reserved"});
        }

        public static class ByReference extends STU_GOODS_CONTAINER_REPLACEMENT_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_GOODS_CONTAINER_REPLACEMENT_INFO implements Structure.ByValue {
        }
    }

    // 货品未正确完整摆放在货格内时上报信息
    public static class STU_GOODS_OUT_OF_REGION_INFO extends Structure {
        // 货品信息
        public STU_GOODS_INFO stGoodsInfo = new STU_GOODS_INFO();
        // 货品位置，不规则区块，相对坐标，uint取值范围：0~8191
        public STU_POLY_POINTS stPolyPos = new STU_POLY_POINTS();
        // 与货品区域有相交的货格数量，最多与 MAX_GOODS_OUT_OF_REGION_COUNT 个相交
        public int nOverlapContainerCount;
        // 与货品区域有相交的货格位置信息
        public STU_GOODS_CONTAINER_POSITION[] stPositions = new STU_GOODS_CONTAINER_POSITION[NetDefs.MAX_GOODS_OUT_OF_REGION_COUNT];
        // 预留参数
        public byte[] reserved = new byte[128];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stGoodsInfo", "stPolyPos", "nOverlapContainerCount",
                    "stPositions", "reserved"});
        }

        public static class ByReference extends STU_GOODS_OUT_OF_REGION_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_GOODS_OUT_OF_REGION_INFO implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //事件/报警结构体定义
    public static class STU_EVENT_COMMON_INFO extends Structure {
        public byte nPicType;                                // 图片类型 1、普通；2、合成；3、抠图
        public byte[] reserved1 = new byte[3];                // 保留字段
        public STU_RESOLUTION stuResolution;                            // 分辨率信息
        public byte[] szMachineAddress = new byte[256];        // 事件/报警发生地点
        public byte[] szSerialNumber = new byte[128];            // 设备序列号
        public byte[] reserved = new byte[632];                // 保留字段

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nPicType", "reserved1", "stuResolution",
                    "szMachineAddress", "szSerialNumber", "reserved"});
        }

        public static class ByReference extends STU_EVENT_COMMON_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_COMMON_INFO implements Structure.ByValue {
        }
    }

    ;

    // 门禁访问信息（门禁产品专用）
    public static class STU_EVENT_DOOR_ACCESS_INFO extends Structure {
        public byte nPassResult;                    // 通行结果
        // 0 : 未知错误
        // 1 : 通行成功。
        // 2 : 访客时段不符。
        // 3 : 未配置权限组。
        // 4 : 未配置时段。
        // 9 : 黑名单。
        // 14 : 门处常开状态。
        // 15 : 门处常闭状态。
        // 16 : 陌生人
        // 20 ：体温异常
        public byte[] reserved = new byte[63];        // 预留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nPassResult", "reserved"});
        }

        public static class ByReference extends STU_EVENT_DOOR_ACCESS_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_DOOR_ACCESS_INFO implements Structure.ByValue {
        }
    }

    ;

    public static class STU_EVENT_FACE_INFO extends Structure {
        public int nObjcetID;                                // 物体唯一标识 ID
        public byte[] szObjectType = new byte[32];            // 物体类型描述
        public STU_RECT_L stuBoundingBox;                            // 包围盒
        public byte nBelief;                                // 清晰度[0-255]	 值越大表示清晰
        public byte nQuality;                                // 质量度[0-255] 值越大质量越好
        public byte[] reserved1 = new byte[2];                // 字节对齐
        public float fBlur;                                    // 模糊度, 0 表示最清晰，值越大越模糊
        public float fPosePitch;                                // 上下俯仰角度
        public float fPoseRoll;                                // 左右摇摆角度
        public float fPoseYaw;                                // 水平旋转角度
        public int emSexType;                                // 性别类型,EM_SEX_TYPE
        public int emMinorityType;                            // 民族类型,EM_MINORITY_TYPE
        public int nAge;                                    // 年龄
        public byte nWearMask;                                // 是否戴口罩 0-未知 1-戴口罩 2-不戴口罩
        public byte nWearHat;                                // 是否戴帽子 0-未知 1-戴帽子 2-不戴帽子
        public byte nWearGlasses;                            // 是否戴眼镜 0-未知 1-戴眼镜 2-不戴眼镜
        public byte nExpression;                            // 表情 0-未知 1-正常 2-微笑 3-大笑
        public byte nTrackStatus;                            // 物体跟踪状态 0-未知 1-新建 2-更新 3-消失
        public int nBase64FeatureLen;                        // 人脸特征值字符串长度
        public Pointer pszBase64Feature;                        // 人脸特征值  String，base64编码格式，最优模式下，选择抽取特征值时，有该字段；主要在人脸大图和人脸抠图事件中使用
        public byte[] szFeatureVersion = new byte[64];        // 人脸特征值版本号   最优模式下，选择抽取特征值时，有该字段，主要在人脸大图和人脸抠图中有该字段
        public float fTemperature;                            // 体温
        public int iTemperatureAlarm;                        // 体温报警状态，0-未布控，1-体温正常，2-高体温报警
        public byte[] reserved2 = new byte[1016];                // 保留字段

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nObjcetID", "szObjectType", "stuBoundingBox", "nBelief", "nQuality",
                    "reserved1", "fBlur", "fPosePitch", "fPoseRoll", "fPoseYaw", "emSexType", "emMinorityType", "nAge",
                    "nWearMask", "nWearHat", "nWearGlasses", "nExpression", "nTrackStatus", "nBase64FeatureLen",
                    "pszBase64Feature", "szFeatureVersion", "fTemperature", "iTemperatureAlarm", "reserved2"});
        }

        public static class ByReference extends STU_EVENT_FACE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_FACE_INFO implements Structure.ByValue {
        }
    }

    ;

    public static class STU_EVENT_FACE_INFO_EX extends Structure {
        public int nObjcetID;                            // 物体唯一标识 ID
        public byte[] szObjectType = new byte[32];        // 物体类型描述
        public STU_RECT_I stuBoundingBox;                        // 包围盒
        public byte nBelief;                            // 清晰度[0-255]	 值越大表示清晰
        public byte nQuality;                            // 质量度[0-255] 值越大质量越好
        public byte[] reserved1 = new byte[2];            // 字节对齐
        public float fBlur;                                // 模糊度, 0 表示最清晰，值越大越模糊
        public float fPosePitch;                            // 上下俯仰角度
        public float fPoseRoll;                            // 左右摇摆角度
        public float fPoseYaw;                            // 水平旋转角度
        public int emSex;                                // 性别类型,EM_SEX_TYPE
        public int emMinority;                            // 民族类型,EM_MINORITY_TYPE
        public int nAge;                                // 年龄
        public byte nWearMask;                            // 是否戴口罩 0-未知 1-戴口罩 2-不戴口罩
        public byte nWearHat;                            // 是否戴帽子 0-未知 1-戴帽子 2-不戴帽子
        public byte nWearGlasses;                        // 是否戴眼镜 0-未知 1-戴眼镜 2-不戴眼镜
        public byte nExpression;                        // 表情 0-未知 1-正常 2-微笑 3-大笑
        public byte nTrackStatus;                        // 物体跟踪状态 0-未知 1-新建 2-更新 3-消失
        public int nBase64FeatureLen;                    // 人脸特征值字符串长度
        public Pointer pszBase64Feature;                    // 人脸特征值  String，base64编码格式，最优模式下，选择抽取特征值时，有该字段；主要在人脸大图和人脸抠图事件中使用
        public byte[] szFeatureVersion = new byte[64];    // 人脸特征值版本号   最优模式下，选择抽取特征值时，有该字段，主要在人脸大图和人脸抠图中有该字段
        public float fTemperature;                        // 体温
        public int iTemperatureAlarm;                    // 体温报警状态，0-未布控，1-体温正常，2-高体温报警
        public byte[] reserved2 = new byte[171];            // 保留字段

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nObjcetID", "szObjectType", "stuBoundingBox",
                    "nBelief", "nQuality", "reserved1", "fBlur", "fPosePitch", "fPoseRoll", "fPoseYaw",
                    "emSex", "emMinority", "nAge", "nWearMask", "nWearHat", "nWearGlasses",
                    "nExpression", "nTrackStatus", "nBase64FeatureLen", "pszBase64Feature", "szFeatureVersion",
                    "fTemperature", "iTemperatureAlarm", "reserved2"});
        }

        public static class ByReference extends STU_EVENT_FACE_INFO_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_FACE_INFO_EX implements Structure.ByValue {
        }
    }

    ;


    public static class STU_EVENT_PERSON_INFO extends Structure {
        public int nPersonID;                                // 人员 ID
        public byte[] szName = new byte[128];                    // 人脸图别名
        public int emSexType;                                // 性别,EM_SEX_TYPE
        public STU_TIME stBirthday;                                // 生日
        public byte[] szCertificateType = new byte[64];        // 证件类型
        public byte[] szID = new byte[128];                    // 证件 ID
        public byte[] reserved1 = new byte[32];                // 保留参数1
        public byte[] szCountry = new byte[64];                // 国别
        public byte[] szProvince = new byte[64];                // 省份
        public byte[] szCity = new byte[128];                    // 所在城市

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nPersonID", "szName", "emSexType", "stBirthday",
                    "szCertificateType", "szID", "reserved1", "szCountry", "szProvince", "szCity"});
        }

        public static class ByReference extends STU_EVENT_PERSON_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_PERSON_INFO implements Structure.ByValue {
        }
    }

    ;

    public static class STU_EVENT_FACE_RECOGNIZE_INFO extends Structure {
        public byte[] szFaceToken = new byte[64];                // 人脸标识符
        public float fSearchScore;                            // 人脸识别评分 [0-100]
        public float fSearchThreshold;                        // 人脸识别阈值 [0-100]
        public STU_EVENT_PERSON_INFO stPersonInfo;                            // 人脸相关的人员信息
        public float fLivenessScore;                            // 活体得分
        public float fLivenessThreshold;                        // 活体阈值
        public byte[] reserved = new byte[56];                // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szFaceToken", "fSearchScore",
                    "fSearchThreshold", "stPersonInfo", "fLivenessScore", "fLivenessThreshold",
                    "reserved"});
        }

        public static class ByReference extends STU_EVENT_FACE_RECOGNIZE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_FACE_RECOGNIZE_INFO implements Structure.ByValue {
        }
    }

    ;

    public static class STU_EVENT_FACE_RECOGNIZE_GROUP extends Structure {
        public byte[] szGroupAlias = new byte[128];            // 组别名
        public int nGroupType;                            // 底库类别， 0-白名单； 1-灰名单； 2-黑名单
        public byte[] reserved = new byte[124];                // 预留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szGroupAlias", "nGroupType", "reserved"});
        }

        public static class ByReference extends STU_EVENT_FACE_RECOGNIZE_GROUP implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_FACE_RECOGNIZE_GROUP implements Structure.ByValue {
        }
    }

    ;

    public static class STU_EVENT_FACE_RECOGNIZE_RECORD extends Structure {
        public int nPass;                            // 是否识别通过，0-不通过，1-通过
        public STU_EVENT_FACE_RECOGNIZE_GROUP stuFaceGroup;                    // 人脸识别相关底库信息
        public int nFaceRecognizeInfoCount;        // 实际人脸识别结果数目
        // 人脸识别结果数组
        public STU_EVENT_FACE_RECOGNIZE_INFO[] stFaceRecognizeInfoArr = new STU_EVENT_FACE_RECOGNIZE_INFO[NetDefs.MAX_FACE_REC_INFO_NUM];

        public STU_EVENT_FACE_RECOGNIZE_RECORD() {
            for (int i = 0; i < stFaceRecognizeInfoArr.length; i++) {
                stFaceRecognizeInfoArr[i] = new STU_EVENT_FACE_RECOGNIZE_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nPass", "stuFaceGroup", "nFaceRecognizeInfoCount", "stFaceRecognizeInfoArr"});
        }

        public static class ByReference extends STU_EVENT_FACE_RECOGNIZE_RECORD implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_FACE_RECOGNIZE_RECORD implements Structure.ByValue {
        }
    }

    ;

    // 人脸识别身份证信息
    public static class STU_EVENT_FACE_IDCARD_INFO extends Structure {
        public byte[] szName = new byte[128];            // 人员姓名
        public byte[] szCode = new byte[128];            // 证件编号

        public byte[] szNation = new byte[64];        // 民族
        public byte[] szAddress = new byte[128];        // 地址描述
        public byte[] szOffice = new byte[128];        // 签发机关描述

        public byte[] reserved1 = new byte[512];        // 保留位

        public int emSex;                            // 性别, EM_SEX_TYPE

        public STU_TIME_EX stuStartTime;                    // 证件有效期开始时间
        public STU_TIME_EX stuEndTime;                        // 证件有效期结束时间

        public int nWidth;                            // 证件图片宽度
        public int nHeight;                        // 证件图片高度
        public Pointer pProfilePic;                    // 证件图片 base64 编码的字符串数据
        public int nProfilePicLen;                    // 证件图片数据大小

        public STU_TIME stuBirthday;                    // 生日信息

        public byte[] reserved = new byte[488];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szName", "szCode", "szNation",
                    "szAddress", "szOffice", "reserved1", "emSex", "stuStartTime",
                    "stuEndTime", "nWidth", "nHeight", "pProfilePic", "nProfilePicLen",
                    "stuBirthday", "reserved"});
        }

        public static class ByReference extends STU_EVENT_FACE_IDCARD_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_FACE_IDCARD_INFO implements Structure.ByValue {
        }
    }

    ;

    // 人体信息
    public static class STU_EVENT_BODY_INFO extends Structure {
        public int nObjectID;                            // 人体 ID
        public byte[] szObjectType = new byte[32];        // 物体类型
        public STU_RECT_I stuBoundingBox;                        // 包围盒
        public byte nClothesUpSleeve;                    // 上衣特征 0-未知 1-短袖 2-长袖
        public byte nClothesUpColor;                    // 上衣颜色
        // 0-未知		1-黑色		2-白色		3-灰色
        // 4-红色		5-橙色		6-黄色		7-绿色
        // 8-深蓝色		9-浅蓝色		10-紫色		11-粉红色
        // 12-棕色		13-彩色
        public byte nPaintsLen;                            // 裤子特征 0-未知 1-短裤 2-长裤
        public byte nPaintsColor;                        // 裤子颜色
        // 0-未知		1-黑色		2-白色		3-灰色
        // 4-红色		5-橙色		6-黄色		7-绿色
        // 8-深蓝色		9-浅蓝色		10-紫色		11-粉红色
        // 12-棕色		13-彩色
        public byte nRideBike;                            // 骑自行车状态 0-未知 1-骑车 2-不骑车
        public byte nBagCarry;                            // 背包状态 0-未知 1-背包 2-未背包
        public byte nHatWore;                            // 戴帽子状态 0-未知 1-戴帽子 2-不戴帽子
        public byte[] reserved = new byte[1017];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nObjectID", "szObjectType", "stuBoundinBox",
                    "nClothesUpSleeve", "nClothesUpColor", "nPaintsLen", "nPaintsColor", "nRideBike",
                    "nBagCarry", "nHatWore", "reserved"});
        }

        public static class ByReference extends STU_EVENT_BODY_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_BODY_INFO implements Structure.ByValue {
        }
    }

    ;

    // 门禁刷卡事件 - 身份证信息
    public static class STU_DOOR_CARD_DETECT_ID_CARD_INFO extends Structure {
        public byte[] szName = new byte[128];            // 人员姓名
        public int emSex;                            // 性别,EM_SEX_TYPE
        public byte[] szNation = new byte[128];        // 民族
        public STU_TIME stuBirthday;                    // 生日
        public byte[] szAddress = new byte[128];        // 地址
        public byte[] szOffice = new byte[128];        // 签发机关
        public STU_TIME stuValidTimeStart;                // 有效期 开始日期
        public STU_TIME stuValidTimeStop;                // 有效期 结束日期
        public byte[] reserved = new byte[512];        // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szName", "emSex", "szNation",
                    "stuBirthday", "szAddress", "szOffice", "stuValidTimeStart",
                    "stuValidTimeStop", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CARD_DETECT_ID_CARD_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CARD_DETECT_ID_CARD_INFO implements Structure.ByValue {
        }
    }

    // 刷卡信息
    public static class STU_EVENT_CARD_DETECT_INFO extends Structure {
        public byte[] szCardType = new byte[64];        // IC: 普通卡，ID：身份证
        public byte[] szCardNo = new byte[128];        // 卡号
        public byte[] szCode = new byte[128];            // 此卡绑定的人员ID
        public int nAccessRecord;                    // 通行结果
        // 0 : 未知错误
        // 1 : 通行成功
        // 2 : 访客时段不符
        // 3 : 未配置权限组
        // 4 : 未配置时段
        // 5 : 时段检验失败
        // 8 : 通行操作超时
        // 9 : 黑名单
        // 10 : 无效卡
        // 11 : 通行时段不符
        // 12 : 通行方式不符
        // 14 : 门处常开状态
        // 15 : 门处常闭状态
        // 17 : 通行成功（未佩戴安全帽）
        // 18 : 通行失败（未佩戴安全帽）
        // 19 : 无匹配卡
        public STU_DOOR_CARD_DETECT_ID_CARD_INFO stIDInfo;                // 身份证信息, szCardType为ID时有效
        public byte[] reserved = new byte[1024];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szCardType", "szCardNo", "szCode",
                    "nAccessRecord", "stIDInfo", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CARD_DETECT_ID_CARD_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CARD_DETECT_ID_CARD_INFO implements Structure.ByValue {
        }
    }

    ;

    /////////////////////////////////////////////////////////////////////////////////////////////////////
    //FACE
    /////////////////////////////////////////////////////////////////////////////////////////////////////

    // 手动抓拍参数
    public static class STU_MANUALSNAP_IN_PARAM extends Structure {
        // 分辨率, EM_VIDEO_STREAM_RESOLUTION_TYPE
        public int emResolution;
        // 抓拍张数，目前只支持1张，<=0时，按默认1张抓拍
        public int nSnapTimes;
        // 多张图片的帧间隔，Times大于1时有效
        public int nFramePeriod;
        // 分辨率宽高是否互换，如D1对应的分辨率是704*576，互换后为576*704
        public int bExchange;
        // 保留字段
        public byte[] reserved = new byte[256];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emResolution", "nSnapTimes",
                    "nFramePeriod", "bExchange", "reserved"});
        }

        public static class ByReference extends STU_MANUALSNAP_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_MANUALSNAP_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    //手动抓拍
    public static class STU_EVENT_MANUAL_SNAP extends Structure {
        public int nChannel;                    // 通道号
        public int nGroupID;                    // 组编号
        public int nIndexInGroup;                // 组内序号
        public int nCountInGroup;                // 组包含的图片数目
        public byte[] szEvent = new byte[64];        // 事件类型
        public byte[] szClass = new byte[64];        // 大类类型
        public byte[] szAction = new byte[64];    // 动作类型
        public double dPTS;                        // PTS
        public int nUTC;                        // UTC
        public short nUTCMS;                        // UTCMS
        public byte[] szTimeZone = new byte[16];    // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                    // 事件时间
        public byte[] reserved1 = new byte[64];    // 保留字节1
        public STU_EVENT_COMMON_INFO stuCommInfo;                // 公共信息描述
        public byte[] reserved2 = new byte[256];    // 保留字段2

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "szTimeZone", "nTimeZoneMS", "stuTime",
                    "reserved1", "stuCommInfo", "reserved2"});
        }

        public static class ByReference extends STU_EVENT_MANUAL_SNAP implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_MANUAL_SNAP implements Structure.ByValue {
        }
    }

    ;

    //N-人脸检测-背景全图
    public static class STU_EVENT_FACE_SNAP_WHOLE extends Structure {
        public int nChannel;                                // 通道号
        public int nGroupID;                                // 组编号
        public int nIndexInGroup;                            // 组内序号
        public int nCountInGroup;                            // 组包含的图片数目
        public byte[] szEvent = new byte[64];                    // 事件类型
        public byte[] szClass = new byte[64];                    // 大类类型
        public byte[] szAction = new byte[64];                // 动作类型
        public double dPTS;                                    // PTS
        public int nUTC;                                    // UTC
        public short nUTCMS;                                    // UTCMS
        public byte[] szTimeZone = new byte[16];                // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                            // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public short nFaceCount;                                // 大图内的人脸个数
        // 人脸抠图信息数组,每次背景图只对应一张人脸图
        public STU_EVENT_FACE_INFO.ByReference[] stuFaceInfoArray = new STU_EVENT_FACE_INFO.ByReference[1];
        public STU_TIME_EX stuTime;                                // 事件时间
        public int nFirstObjectID;                            // 第一个抠图的物体 ID 号
        public int nLastObjectID;                            // 最后一个抠图的物体 ID 号
        public byte[] reserved1 = new byte[212];                // 保留字节1
        public STU_EVENT_COMMON_INFO stuCommInfo;                            // 公共信息描述
        public byte[] reserved2 = new byte[1024];                // 保留字段2

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "szTimeZone", "nTimeZoneMS", "nFaceCount",
                    "pstuFaceInfoArray", "stuTime", "nFirstObjectID", "nLastObjectID", "reserved1", "stuCommInfo", "reserved2"});
        }

        public static class ByReference extends STU_EVENT_FACE_SNAP_WHOLE implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_FACE_SNAP_WHOLE implements Structure.ByValue {
        }
    }

    ;

    //N-人脸检测-人脸抠图
    public static class STU_EVENT_FACE_SNAP_PART extends Structure {
        public int nChannel;                                // 通道号
        public int nGroupID;                                // 组编号
        public int nIndexInGroup;                            // 组内序号
        public int nCountInGroup;                            // 组包含的图片数目
        public byte[] szEvent = new byte[64];                    // 事件类型
        public byte[] szClass = new byte[64];                    // 大类类型
        public byte[] szAction = new byte[64];                // 动作类型
        public double dPTS;                                    // PTS
        public int nUTC;                                    // UTC
        public short nUTCMS;                                    // UTCMS
        public byte[] reserved1 = new byte[2];                // 保留字段1(字节对齐)
        public byte[] szTimeZone = new byte[16];                // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                            // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                                // 事件时间
        public byte[] reserved2 = new byte[220];                // 保留字节2
        public STU_EVENT_FACE_INFO stuFaceInfo;                            // 人脸信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                            // 公共信息描述
        public byte[] reserved3 = new byte[1024];                // 保留字段3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuFaceInfo", "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_FACE_SNAP_PART implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_FACE_SNAP_PART implements Structure.ByValue {
        }
    }

    ;

    //N-人脸识别-人脸背景图 EventFaceRecognizeWhole
    public static class STU_EVENT_FACE_RECOGNIZE_WHOLE extends Structure {
        public int nChannel;                                // 通道号
        public int nGroupID;                                // 组编号
        public int nIndexInGroup;                            // 组内序号
        public int nCountInGroup;                            // 组包含的图片数目
        public byte[] szEvent = new byte[64];                    // 事件类型
        public byte[] szClass = new byte[64];                    // 大类类型
        public byte[] szAction = new byte[64];                // 动作类型
        public double dPTS;                                    // PTS
        public int nUTC;                                    // UTC
        public short nUTCMS;                                    // UTCMS
        public byte[] reserved1 = new byte[2];                // 保留字段1(字节对齐)
        public byte[] szTimeZone = new byte[16];                // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                            // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                                // 事件时间
        public int nObjectID;                                // 物体 ID
        public int nFaceRecognizeRecCount;                    // 人脸识别记录信息数组大小
        // 人脸识别记录数组
        public STU_EVENT_FACE_RECOGNIZE_RECORD[] stuFaceRecognizeRecArr = new STU_EVENT_FACE_RECOGNIZE_RECORD[NetDefs.MAX_FACE_GROUP_NUM];
        public STU_EVENT_COMMON_INFO stuCommInfo;                            // 公共信息描述
        public int nPass;                                    // 人脸识别是否通过, -1 表示获取异常 0-正常比对不通过 1-正常比对通过 2-活体比对不通过
        public STU_EVENT_FACE_INFO_EX stuFaceInfo;                            // 人脸信息
        public STU_EVENT_DOOR_ACCESS_INFO stuDoorAccessInfo;                    // 门禁访问信息（门禁产品专用）
        public byte[] reserved = new byte[104];                // 保留位

        public STU_EVENT_FACE_RECOGNIZE_WHOLE() {
            for (int i = 0; i < stuFaceRecognizeRecArr.length; i++) {
                stuFaceRecognizeRecArr[i] = new STU_EVENT_FACE_RECOGNIZE_RECORD();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS",
                    "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "nObjectID", "nFaceRecognizeRecCount",
                    "stuFaceRecognizeRecArr", "stuCommInfo", "nPass", "stuFaceInfo",
                    "stuDoorAccessInfo", "reserved"});
        }

        public static class ByReference extends STU_EVENT_FACE_RECOGNIZE_WHOLE implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_FACE_RECOGNIZE_WHOLE implements Structure.ByValue {
        }
    }

    ;

    //N-人脸识别-人脸抠图
    public static class STU_EVENT_FACE_RECOGNIZE_CUTOUT extends Structure {
        public int nChannel;                                // 通道号
        public int nGroupID;                                // 组编号
        public int nIndexInGroup;                            // 组内序号
        public int nCountInGroup;                            // 组包含的图片数目
        public byte[] szEvent = new byte[64];                    // 事件类型
        public byte[] szClass = new byte[64];                    // 大类类型
        public byte[] szAction = new byte[64];                // 动作类型
        public double dPTS;                                    // PTS
        public int nUTC;                                    // UTC
        public short nUTCMS;                                    // UTCMS
        public byte[] reserved1 = new byte[2];                // 保留字段1(字节对齐)
        public byte[] szTimeZone = new byte[16];                // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                            // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                                // 事件时间
        public int nObjectID;                                // 物体 ID
        public byte[] szFaceGroupAlias = new byte[128];        // 人脸库别名
        public int nPass;                                    // 人脸识别是否通过 -1 表示获取异常 0-正常比对不通过 1-正常比对通过 2-活体比对不通过
        public int nGroupType;                            // 人脸库类型 0-白名单； 1-灰名单； 2-黑名单
        public byte[] reserved2 = new byte[60];                // 保留字节2
        public int nFaceRecognizeInfoCount;                // 实际人脸识别结果数目
        // 人脸识别结果数组
        public STU_EVENT_FACE_RECOGNIZE_INFO[] stFaceRecognizeInfoArr = new STU_EVENT_FACE_RECOGNIZE_INFO[NetDefs.MAX_FACE_REC_INFO_NUM];
        public STU_EVENT_COMMON_INFO stuCommInfo;                            // 公共信息描述
        public STU_EVENT_FACE_INFO_EX stuFaceInfo;                            // 人脸信息
        public STU_EVENT_DOOR_ACCESS_INFO stuDoorAccessInfo;                    // 门禁访问信息（门禁产品专用）
        public byte[] reserved3 = new byte[620];                // 保留字段3

        public STU_EVENT_FACE_RECOGNIZE_CUTOUT() {
            for (int i = 0; i < stFaceRecognizeInfoArr.length; i++) {
                stFaceRecognizeInfoArr[i] = new STU_EVENT_FACE_RECOGNIZE_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS",
                    "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "nObjectID", "szFaceGroupAlias", "nPass",
                    "nGroupType", "reserved2", "nFaceRecognizeInfoCount", "stFaceRecognizeInfoArr",
                    "stuCommInfo", "stuFaceInfo", "stuDoorAccessInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_FACE_RECOGNIZE_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_FACE_RECOGNIZE_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    // N-身份证上报事件
    public static class STU_EVENT_FACE_IDCARD_RECOGNIZE extends Structure {
        public int nChannel;                    // 通道号
        public int nGroupID;                    // 组编号
        public int nIndexInGroup;                // 组内序号
        public int nCountInGroup;                // 组包含的图片数目
        public byte[] szEvent = new byte[64];        // 事件类型
        public byte[] szClass = new byte[64];        // 大类类型
        public byte[] szAction = new byte[64];    // 动作类型
        public byte[] reserved1 = new byte[128];    // 预留位1
        public STU_TIME_EX stuTime;                    // 事件时间
        public int nObjectID;                    // 物体 ID
        public int nPass;                        // 人脸识别是否通过 -1 表示获取异常 0-正常比对不通过 1-正常比对通过 2-活体比对不通过
        public float fSearchScore;                // 人脸识别评分
        public byte[] reserved2 = new byte[128];    // 保留字节2
        public STU_EVENT_FACE_INFO_EX stuFaceInfo;                // 人脸信息
        public STU_EVENT_FACE_IDCARD_INFO stuIDCardInfo;                // ID 卡号信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                // 公共信息描述
        public byte[] reserved3 = new byte[1024];    // 保留字段3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup",
                    "nCountInGroup", "szEvent", "szClass", "szAction", "reserved1",
                    "stuTime", "nObjectID", "nPass", "fSearchScore", "reserved2",
                    "stuFaceInfo", "stuIDCardInfo", "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_FACE_IDCARD_RECOGNIZE implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_FACE_IDCARD_RECOGNIZE implements Structure.ByValue {
        }
    }

    ;

    // N-身份证上报事件Ex
    public static class STU_EVENT_FACE_AND_CARDS_COMPARE extends Structure {
        public int nChannel;                    // 通道号
        public int nGroupID;                    // 组编号
        public int nIndexInGroup;                // 组内序号
        public int nCountInGroup;                // 组包含的图片数目
        public byte[] szEvent = new byte[64];        // 事件类型
        public byte[] szClass = new byte[64];        // 大类类型
        public byte[] szAction = new byte[64];    // 动作类型
        public byte[] reserved1 = new byte[128];    // 预留位1
        public STU_TIME_EX stuTime;                    // 事件时间
        public int nObjectID;                    // 物体 ID
        public int nPass;                        // 人脸识别是否通过 -1 表示获取异常 0-正常比对不通过 1-正常比对通过 2-活体比对不通过
        public float fSearchScore;                // 人脸识别评分
        public byte[] reserved2 = new byte[128];    // 保留字节2
        public STU_EVENT_FACE_INFO_EX stuFaceInfo;                // 人脸信息
        public STU_EVENT_FACE_IDCARD_INFO stuCardInfo;                // ID 卡号信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                // 公共信息描述
        public byte[] reserved3 = new byte[1024];    // 保留字段3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup",
                    "nCountInGroup", "szEvent", "szClass", "szAction", "reserved1",
                    "stuTime", "nObjectID", "nPass", "fSearchScore", "reserved2",
                    "stuFaceInfo", "stuCardInfo", "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_FACE_AND_CARDS_COMPARE implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_FACE_AND_CARDS_COMPARE implements Structure.ByValue {
        }
    }

    ;

    // 人形抓拍抠图
    public static class STU_EVENT_BODY_SNAP_COUOUT extends Structure {
        public int nChannel;                            // 通道号
        public int nGroupID;                            // 组编号
        public int nIndexInGroup;                        // 组内序号
        public int nCountInGroup;                        // 组包含的图片数目
        public byte[] szEvent = new byte[64];                // 事件类型
        public byte[] szClass = new byte[64];                // 大类类型
        public byte[] szAction = new byte[64];            // 动作类型
        public byte[] reserved1 = new byte[128];            // 预留位1
        public STU_TIME_EX stuTime;                            // 事件时间
        public byte[] reserved2 = new byte[128];            // 保留字节2
        public STU_EVENT_BODY_INFO stuBodyInfo;                        // 人体信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                        // 公共信息描述
        public byte[] reserved3 = new byte[1024];            // 保留字段3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup",
                    "nCountInGroup", "szEvent", "szClass", "szAction", "reserved1",
                    "stuTime", "reserved2", "stuBodyInfo", "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_BODY_SNAP_COUOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_BODY_SNAP_COUOUT implements Structure.ByValue {
        }
    }

    ;

    // 刷卡抓拍事件
    public static class STU_EVENT_CARD_DETECT_SNAPSHOT extends Structure {
        public int nChannel;                    // 通道号
        public int nGroupID;                    // 组编号
        public int nIndexInGroup;                // 组内序号
        public int nCountInGroup;                // 组包含的图片数目
        public byte[] szEvent = new byte[64];        // 事件类型
        public byte[] szClass = new byte[64];        // 大类类型
        public byte[] szAction = new byte[64];    // 动作类型
        public byte[] reserved1 = new byte[128];    // 预留位1
        public STU_TIME_EX stuTime;                    // 事件时间
        public byte[] reserved2 = new byte[128];    // 保留字节2
        public STU_EVENT_CARD_DETECT_INFO stuCardDetectInfo;            // 刷卡检测信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                // 公共信息描述
        public byte[] reserved3 = new byte[1024];    // 保留字段3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup",
                    "nCountInGroup", "szEvent", "szClass", "szAction", "reserved1",
                    "stuTime", "reserved2", "stuCardDetectInfo", "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_CARD_DETECT_SNAPSHOT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_CARD_DETECT_SNAPSHOT implements Structure.ByValue {
        }
    }

    ;

    /////////////////////////////////////////////////////////////////////////////////////////////////////
    //Traffic
    /////////////////////////////////////////////////////////////////////////////////////////////////////

    //交通公共信息
    public static class STU_TRAFFIC_COMMON_INFO extends Structure {
        // 车道号（设备中的自定义车道号）
        public int nLane;
        // 速度    单位Km/h
        public int nSpeed;
        // 车道方向,EM_TRAFFIC_LANE_DIRECTION
        public int emDirection;
        // 限速下限 Km/h
        public int nSpeedLowLimit;
        // 限速上限 Km/h
        public int nSpeedUpLimit;
        // 保留位
        public byte[] reserved = new byte[2548];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nLane", "nSpeed", "emDirection",
                    "nSpeedLowLimit", "nSpeedUpLimit", "reserved"});
        }

        public static class ByReference extends STU_TRAFFIC_COMMON_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_TRAFFIC_COMMON_INFO implements Structure.ByValue {
        }
    }

    ;

    //交通物体信息
    public static class STU_TRAFFIC_OBJECT_INFO extends Structure {
        public int nObjectID;                            // 物体ID
        public int nRelatedID;                            // 关联物体ID
        // 如果物体ID是车牌，关联物体ID是车辆；反则关联物体ID是车牌
        public byte[] szObjectType = new byte[32];        // 物体类别（车牌 - "Plate" / 车辆 - "Car"）
        public byte[] szObjectSubType = new byte[32];        // 物体子类型（车牌 - 车牌类型 / 车辆 - 车辆类型）
        public byte[] szLabel = new byte[32];                // 标识（物体是车牌表示车牌号码，物体是车辆表示车标）
        public byte[] szColor = new byte[32];                // 颜色（物体是车牌表示车牌颜色，物体是车辆表示车身颜色）
        public STU_RECT_L stuBoundingBox;                        // 包围盒
        public byte[] reserved = new byte[2080];            // 保留字段

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nObjectID", "nRelatedID", "szObjectType",
                    "szObjectSubType", "szLabel", "szColor", "stuBoundingBox", "reserved"});
        }

        public static class ByReference extends STU_TRAFFIC_OBJECT_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_TRAFFIC_OBJECT_INFO implements Structure.ByValue {
        }
    }

    ;

    // 交通车牌信息
    public static class STU_TRAFFIC_PLATE_INFO extends Structure {
        public int nObjectID;                                                    // 物体ID
        public int nRelatedID;                                                    // 关联物体ID
        public byte[] szObjectType = new byte[32];                                // 车牌 - "Plate"
        public byte[] szObjectSubType = new byte[32];                                // 车牌 - 车牌类型
        public byte[] szLabel = new byte[32];                                        // 车牌号码
        public byte[] szColor = new byte[32];                                        // 颜色（物体是车牌表示车牌颜色，物体是车辆表示车身颜色）
        public STU_RECT_L stuBoundingBox;                                                // 包围盒
        public byte nBelief;                                                    // 置信度
        public int nBWListRealCount;                                            // 车牌所属名单实际数量
        public int[] emBWTypes = new int[NetDefs.MAX_TRAFFIC_PLATE_BWLIST_NUM];    // 车牌所属名单，支持多名单, EM_TRAFFIC_BWLIST_TYPE
        public byte[] reserved = new byte[2063];                                    // 保留字段

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nObjectID", "nRelatedID", "szObjectType",
                    "szObjectSubType", "szLabel", "szColor", "stuBoundingBox", "nBelief",
                    "nBWListRealCount", "emBWTypes", "reserved"});
        }

        public static class ByReference extends STU_TRAFFIC_PLATE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_TRAFFIC_PLATE_INFO implements Structure.ByValue {
        }
    }

    ;

    // 交通车辆信息
    public static class STU_TRAFFIC_VEHICLE_INFO extends Structure {
        public int nObjectID;                            // 物体ID
        public int nRelatedID;                            // 关联物体ID
        public byte[] szObjectType = new byte[32];        //车辆 - "Car"
        public byte[] szObjectSubType = new byte[32];        // 车牌 - 车牌类型
        public byte[] szLabel = new byte[32];                // 车牌号码
        public byte[] szColor = new byte[32];                // 颜色（物体是车牌表示车牌颜色，物体是车辆表示车身颜色）
        public STU_RECT_L stuBoundingBox;                        // 包围盒
        public byte[] szLabelSubType = new byte[64];        // 车辆子品牌
        public byte[] szYearModel = new byte[64];            // 车辆年款
        public byte nBelief;                            // 置信度
        public byte[] reserved = new byte[1951];            // 保留字段

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nObjectID", "nRelatedID", "szObjectType",
                    "szObjectSubType", "szLabel", "szColor", "stuBoundingBox", "nBelief", "reserved"});
        }

        public static class ByReference extends STU_TRAFFIC_VEHICLE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_TRAFFIC_VEHICLE_INFO implements Structure.ByValue {
        }
    }

    ;

    // 交通综合信息
    public static class STU_TRAFFIC_TRANSPORT extends Structure {
        public STU_TRAFFIC_PLATE_INFO stPlate;                    // 车牌信息
        public STU_TRAFFIC_VEHICLE_INFO stVehicle;                    // 车辆信息
        public byte[] reserved = new byte[2560];    // 预留信息

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stPlate", "stVehicle", "reserved"});
        }

        public static class ByReference extends STU_TRAFFIC_TRANSPORT implements Structure.ByReference {
        }

        public static class ByValue extends STU_TRAFFIC_TRANSPORT implements Structure.ByValue {
        }
    }

    ;

    // 交通行人结构化信息
    public static class STU_TRAFFIC_PASSER extends Structure {
        public STU_EVENT_FACE_INFO_EX stFace;                                // 人脸信息
        public STU_EVENT_BODY_INFO stBody;                                // 人体信息
        public byte[] reserved = new byte[1024];            // 预留信息

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stFace", "stBody", "reserved"});
        }

        public static class ByReference extends STU_TRAFFIC_PASSER implements Structure.ByReference {
        }

        public static class ByValue extends STU_TRAFFIC_PASSER implements Structure.ByValue {
        }
    }

    ;

    //交通 - 卡口信息
    public static class STU_EVENT_TRAFFIC_PASS extends Structure {
        public int nChannel;                            // 通道号
        public int nGroupID;                            // 组编号
        public int nIndexInGroup;                        // 组内序号
        public int nCountInGroup;                        // 组包含的图片数目
        public byte[] szEvent = new byte[64];                // 事件类型
        public byte[] szClass = new byte[64];                // 大类类型
        public byte[] szAction = new byte[64];            // 动作类型
        public double dPTS;                                // PTS
        public int nUTC;                                // UTC
        public short nUTCMS;                                // UTCMS
        public byte[] reserved1 = new byte[2];            // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];            // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                        // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                            // 事件时间
        public byte[] reserved2 = new byte[220];            // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                    // 交通公共信息
        public STU_TRAFFIC_OBJECT_INFO stuPlateInfo;                        // 车牌信息
        public STU_TRAFFIC_OBJECT_INFO stuVehicleInfo;                        // 车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                        // 公共信息
        public byte[] reserved3 = new byte[1280];            // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuPlateInfo", "stuVehicleInfo",
                    "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_PASS implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_PASS implements Structure.ByValue {
        }
    }

    ;

    //交通 - 卡口抠图信息
    public static class STU_EVENT_TRAFFIC_PASS_CUTOUT extends Structure {
        public int nChannel;                            // 通道号
        public int nGroupID;                            // 组编号
        public int nIndexInGroup;                        // 组内序号
        public int nCountInGroup;                        // 组包含的图片数目
        public byte[] szEvent = new byte[64];                // 事件类型
        public byte[] szClass = new byte[64];                // 大类类型
        public byte[] szAction = new byte[64];            // 动作类型
        public double dPTS;                                // PTS
        public int nUTC;                                // UTC
        public short nUTCMS;                                // UTCMS
        public byte[] reserved1 = new byte[2];            // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];            // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                        // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                            // 事件时间
        public byte[] reserved2 = new byte[220];            // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                    // 交通公共信息
        public STU_TRAFFIC_OBJECT_INFO stuObjectInfo;                        // 车牌/车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                        // 公共信息
        public byte[] reserved3 = new byte[1280];            // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuObjectInfo", "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_PASS_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_PASS_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    // 交通黑白名单事件
    public static class STU_EVENT_TRAFFIC_BWLIST extends Structure {
        public int nChannel;                    // 通道号
        public int nGroupID;                    // 组编号
        public int nIndexInGroup;                // 组内序号
        public int nCountInGroup;                // 组包含的图片数目
        public byte[] szEvent = new byte[64];        // 事件类型
        public byte[] szClass = new byte[64];        // 大类类型
        public byte[] szAction = new byte[64];    // 动作类型
        public double dPTS;                        // PTS
        public int nUTC;                        // UTC
        public short nUTCMS;                        // UTCMS
        public byte[] reserved1 = new byte[2];    // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];    // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                    // 事件时间
        public byte[] reserved2 = new byte[128];    // 保留字节2
        public STU_TRAFFIC_OBJECT_INFO stuPlateInfo;                // 车牌信息
        public STU_TRAFFIC_OBJECT_INFO stuVehicleInfo;                // 车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                // 公共信息
        public byte[] reserved3 = new byte[1024];    // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuPlateInfo", "stuVehicleInfo", "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_BWLIST implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_BWLIST implements Structure.ByValue {
        }
    }

    ;

    // 交通黑白名单抠图事件
    public static class STU_EVENT_TRAFFIC_BWLIST_CUTOUT extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuObjectInfo;                    // 车牌信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuObjectInfo", "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_BWLIST_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_BWLIST_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    // 交通逆行事件
    public static class STU_EVENT_TRAFFIC_RETROGRADE extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuPlateInfo;                    // 车牌信息
        public STU_TRAFFIC_VEHICLE_INFO stuVehicleInfo;                    // 车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuPlateInfo", "stuVehicleInfo",
                    "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_RETROGRADE implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_RETROGRADE implements Structure.ByValue {
        }
    }

    ;

    // 交通逆行抠图事件
    public static class STU_EVENT_TRAFFIC_RETROGRADE_CUTOUT extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuObjectInfo;                    // 车牌信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuObjectInfo", "stuCommInfo",
                    "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_RETROGRADE_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_RETROGRADE_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    // 交通压线事件
    public static class STU_EVENT_TRAFFIC_OVER_WHITE_LINE extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuPlateInfo;                    // 车牌信息
        public STU_TRAFFIC_VEHICLE_INFO stuVehicleInfo;                    // 车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuPlateInfo", "stuVehicleInfo",
                    "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_OVER_WHITE_LINE implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_OVER_WHITE_LINE implements Structure.ByValue {
        }
    }

    ;

    // 交通压线抠图事件
    public static class STU_EVENT_TRAFFIC_OVER_WHITE_LINE_CUTOUT extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuObjectInfo;                    // 车牌信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuObjectInfo", "stuCommInfo",
                    "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_OVER_WHITE_LINE_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_OVER_WHITE_LINE_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    // 交通压黄线事件
    public static class STU_EVENT_TRAFFIC_OVER_YELLOW_LINE extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuPlateInfo;                    // 车牌信息
        public STU_TRAFFIC_VEHICLE_INFO stuVehicleInfo;                    // 车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuPlateInfo", "stuVehicleInfo",
                    "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_OVER_YELLOW_LINE implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_OVER_YELLOW_LINE implements Structure.ByValue {
        }
    }

    ;

    // 交通压黄线抠图事件
    public static class STU_EVENT_TRAFFIC_OVER_YELLOW_LINE_CUTOUT extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuObjectInfo;                    // 车牌信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuObjectInfo", "stuCommInfo",
                    "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_OVER_YELLOW_LINE_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_OVER_YELLOW_LINE_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    // 交通违章变道事件
    public static class STU_EVENT_TRAFFIC_CROSS_LANE extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuPlateInfo;                    // 车牌信息
        public STU_TRAFFIC_VEHICLE_INFO stuVehicleInfo;                    // 车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuPlateInfo", "stuVehicleInfo",
                    "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_CROSS_LANE implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_CROSS_LANE implements Structure.ByValue {
        }
    }

    ;

    // 交通违章变道抠图事件
    public static class STU_EVENT_TRAFFIC_CROSS_LANE_CUTOUT extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuObjectInfo;                    // 车牌信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuObjectInfo", "stuCommInfo",
                    "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_CROSS_LANE_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_CROSS_LANE_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    // 交通欠速事件
    public static class STU_EVENT_TRAFFIC_UNDER_SPEED extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuPlateInfo;                    // 车牌信息
        public STU_TRAFFIC_VEHICLE_INFO stuVehicleInfo;                    // 车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuPlateInfo", "stuVehicleInfo",
                    "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_UNDER_SPEED implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_UNDER_SPEED implements Structure.ByValue {
        }
    }

    ;

    // 交通欠速抠图事件
    public static class STU_EVENT_TRAFFIC_UNDER_SPEED_CUTOUT extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuObjectInfo;                    // 车牌信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuObjectInfo", "stuCommInfo",
                    "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_UNDER_SPEED_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_UNDER_SPEED_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    // 交通超速事件
    public static class STU_EVENT_TRAFFIC_OVER_SPEED extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuPlateInfo;                    // 车牌信息
        public STU_TRAFFIC_VEHICLE_INFO stuVehicleInfo;                    // 车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuPlateInfo", "stuVehicleInfo",
                    "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_OVER_SPEED implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_OVER_SPEED implements Structure.ByValue {
        }
    }

    ;

    // 交通超速抠图事件
    public static class STU_EVENT_TRAFFIC_OVER_SPEED_CUTOUT extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuObjectInfo;                    // 车牌信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuObjectInfo", "stuCommInfo",
                    "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_OVER_SPEED_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_OVER_SPEED_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    // 交通黄牌占道事件
    public static class STU_EVENT_TRAFFIC_YELLOW_PLATE_IN_LANE extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuPlateInfo;                    // 车牌信息
        public STU_TRAFFIC_VEHICLE_INFO stuVehicleInfo;                    // 车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuPlateInfo", "stuVehicleInfo",
                    "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_YELLOW_PLATE_IN_LANE implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_YELLOW_PLATE_IN_LANE implements Structure.ByValue {
        }
    }

    ;

    // 交通黄牌占道抠图事件
    public static class STU_EVENT_TRAFFIC_YELLOW_PLATE_IN_LANE_CUTOUT extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuObjectInfo;                    // 车牌信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuObjectInfo", "stuCommInfo",
                    "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_YELLOW_PLATE_IN_LANE_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_YELLOW_PLATE_IN_LANE_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    // 交通机动车占用非机动车道事件
    public static class STU_EVENT_TRAFFIC_CAR_IN_LANE extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuPlateInfo;                    // 车牌信息
        public STU_TRAFFIC_VEHICLE_INFO stuVehicleInfo;                    // 车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuPlateInfo", "stuVehicleInfo",
                    "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_CAR_IN_LANE implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_CAR_IN_LANE implements Structure.ByValue {
        }
    }

    ;

    // 交通机动车占用非机动车道抠图事件
    public static class STU_EVENT_TRAFFIC_CAR_IN_LANE_CUTOUT extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuObjectInfo;                    // 车牌信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuObjectInfo", "stuCommInfo",
                    "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_CAR_IN_LANE_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_CAR_IN_LANE_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    // 交通占用公交车道事件
    public static class STU_EVENT_TRAFFIC_OCCUPY_BUS_LANE extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuPlateInfo;                    // 车牌信息
        public STU_TRAFFIC_VEHICLE_INFO stuVehicleInfo;                    // 车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuPlateInfo", "stuVehicleInfo",
                    "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_OCCUPY_BUS_LANE implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_OCCUPY_BUS_LANE implements Structure.ByValue {
        }
    }

    ;

    // 交通占用公交车道抠图事件
    public static class STU_EVENT_TRAFFIC_OCCUPY_BUS_LANE_CUTOUT extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuObjectInfo;                    // 车牌信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuObjectInfo", "stuCommInfo",
                    "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_OCCUPY_BUS_LANE_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_OCCUPY_BUS_LANE_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    // 交通驾驶不系安全带事件
    public static class STU_EVENT_TRAFFIC_WITHOUT_BELT extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuPlateInfo;                    // 车牌信息
        public STU_TRAFFIC_VEHICLE_INFO stuVehicleInfo;                    // 车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuPlateInfo", "stuVehicleInfo",
                    "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_WITHOUT_BELT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_WITHOUT_BELT implements Structure.ByValue {
        }
    }

    ;

    // 交通驾驶不系安全带抠图事件
    public static class STU_EVENT_TRAFFIC_WITHOUT_BELT_CUTOUT extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuObjectInfo;                    // 车牌信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuObjectInfo", "stuCommInfo",
                    "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_WITHOUT_BELT_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_WITHOUT_BELT_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    // 交通驾驶抽烟事件
    public static class STU_EVENT_TRAFFIC_DRIVER_SMOKING extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuPlateInfo;                    // 车牌信息
        public STU_TRAFFIC_VEHICLE_INFO stuVehicleInfo;                    // 车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuPlateInfo", "stuVehicleInfo",
                    "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_DRIVER_SMOKING implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_DRIVER_SMOKING implements Structure.ByValue {
        }
    }

    ;

    // 交通驾驶抽烟抠图事件
    public static class STU_EVENT_TRAFFIC_DRIVER_SMOKING_CUTOUT extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuObjectInfo;                    // 车牌信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuObjectInfo", "stuCommInfo",
                    "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_DRIVER_SMOKING_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_DRIVER_SMOKING_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    // 交通驾驶打电话事件
    public static class STU_EVENT_TRAFFIC_DRIVER_CALLING extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuPlateInfo;                    // 车牌信息
        public STU_TRAFFIC_VEHICLE_INFO stuVehicleInfo;                    // 车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuPlateInfo", "stuVehicleInfo",
                    "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_DRIVER_CALLING implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_DRIVER_CALLING implements Structure.ByValue {
        }
    }

    ;

    // 交通驾驶打电话抠图事件
    public static class STU_EVENT_TRAFFIC_DRIVER_CALLING_CUTOUT extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuObjectInfo;                    // 车牌信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuObjectInfo", "stuCommInfo",
                    "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_DRIVER_CALLING_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_DRIVER_CALLING_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    // 交通行人禁入事件
    public static class STU_EVENT_TRAFFIC_HUMAN_WANDER extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuPlateInfo;                    // 车牌信息
        public STU_TRAFFIC_VEHICLE_INFO stuVehicleInfo;                    // 车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuPlateInfo", "stuVehicleInfo",
                    "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_HUMAN_WANDER implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_HUMAN_WANDER implements Structure.ByValue {
        }
    }

    ;

    // 交通行人禁入抠图事件
    public static class STU_EVENT_TRAFFIC_HUMAN_WANDER_CUTOUT extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuObjectInfo;                    // 车牌信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuObjectInfo", "stuCommInfo",
                    "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_HUMAN_WANDER_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_HUMAN_WANDER_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    // 交通违停事件
    public static class STU_EVENT_TRAFFIC_PARKING extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuPlateInfo;                    // 车牌信息
        public STU_TRAFFIC_VEHICLE_INFO stuVehicleInfo;                    // 车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuPlateInfo", "stuVehicleInfo",
                    "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_PARKING implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_PARKING implements Structure.ByValue {
        }
    }

    ;

    // 交通违停抠图事件
    public static class STU_EVENT_TRAFFIC_PARKING_CUTOUT extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuObjectInfo;                    // 车牌信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuObjectInfo", "stuCommInfo",
                    "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_PARKING_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_PARKING_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    // 交通鸣笛事件
    public static class STU_EVENT_TRAFFIC_WHISTLE extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuPlateInfo;                    // 车牌信息
        public STU_TRAFFIC_VEHICLE_INFO stuVehicleInfo;                    // 车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuPlateInfo", "stuVehicleInfo",
                    "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_WHISTLE implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_WHISTLE implements Structure.ByValue {
        }
    }

    ;

    // 交通鸣笛抠图事件
    public static class STU_EVENT_TRAFFIC_WHISTLE_CUTOUT extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuObjectInfo;                    // 车牌信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuObjectInfo", "stuCommInfo",
                    "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_WHISTLE_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_WHISTLE_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    // 结构化事件
    public static class STU_EVENT_TRAFFIC_STRUCTURATION extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[220];        // 保留字节2
        public int nTransportCount;                // 交通综合信息数组元素个数
        public Pointer pstTransportArr;                // 交通综合信息数组, STU_TRAFFIC_TRANSPORT
        public int nPasserCount;                    // 交通行人数组元素个数
        public Pointer pstPasserArr;                    // 交通行人数组, STU_TRAFFIC_PASSER
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[2048];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "nTransportCount", "pstTransportArr", "nPasserCount",
                    "pstPasserArr", "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_STRUCTURATION implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_STRUCTURATION implements Structure.ByValue {
        }
    }

    ;

    // 结构化抠图事件
    public static class STU_EVENT_TRAFFIC_STRUCTURATION_CUTOUT extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[224];        // 保留字节2
        public Pointer pstFace;                        // 交通行人人脸信息，为 NULL 说明不存在, STU_EVENT_FACE_INFO_EX
        public Pointer pstBody;                        // 交通行人人体信息，为 NULL 说明不存在, STU_EVENT_BODY_INFO
        public Pointer pstPlateInfo;                    // 车牌信息，为 NULL 说明不存在, STU_TRAFFIC_PLATE_INFO
        public Pointer pstVehicleInfo;                    // 车辆信息，为 NULL 说明不存在, STU_TRAFFIC_VEHICLE_INFO
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[2048];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "pstFace", "pstBody", "pstPlateInfo", "pstVehicleInfo",
                    "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_STRUCTURATION_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_STRUCTURATION_CUTOUT implements Structure.ByValue {
        }
    }

    ;

    /////////////////////////////////////////////////////////////////////////////////////////////////////
    // 球机交通违停事件
    public static class STU_EVENT_SD_TRAFFIC_PARKING extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public int emShapShotType;                    // 抓拍类,EM_SD_TRAFFIC_SNAPSHOT_TYPE
        public STU_TIME_EX stuEndTime;                        // 事件结束时间
        public int bPeopleAround;                    // 车附近是否有人
        public byte[] reserved2 = new byte[176];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_PLATE_INFO stuPlateInfo;                    // 车牌信息
        public STU_TRAFFIC_VEHICLE_INFO stuVehicleInfo;                    // 车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "emShapShotType", "stuEndTime", "reserved2", "stuTrafficCommInfo",
                    "stuPlateInfo", "stuVehicleInfo", "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_SD_TRAFFIC_PARKING implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_SD_TRAFFIC_PARKING implements Structure.ByValue {
        }
    }

    ;

    // 球机交通横穿马路事件
    public static class STU_EVENT_SD_TRAFFIC_ROADING_CROSSING extends Structure {
        public int nChannel;                        // 通道号
        public int nGroupID;                        // 组编号
        public int nIndexInGroup;                    // 组内序号
        public int nCountInGroup;                    // 组包含的图片数目
        public byte[] szEvent = new byte[64];            // 事件类型
        public byte[] szClass = new byte[64];            // 大类类型
        public byte[] szAction = new byte[64];        // 动作类型
        public double dPTS;                            // PTS
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] reserved1 = new byte[2];        // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved2 = new byte[176];        // 保留字节2
        public STU_TRAFFIC_COMMON_INFO stuTrafficCommInfo;                // 交通公共信息
        public STU_TRAFFIC_VEHICLE_INFO stuVehicleInfo;                    // 非机动车辆信息
        public STU_EVENT_COMMON_INFO stuCommInfo;                    // 公共信息
        public byte[] reserved3 = new byte[1280];        // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuTrafficCommInfo", "stuVehicleInfo", "stuCommInfo",
                    "reserved3"});
        }

        public static class ByReference extends STU_EVENT_SD_TRAFFIC_ROADING_CROSSING implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_SD_TRAFFIC_ROADING_CROSSING implements Structure.ByValue {
        }
    }

    ;

    /////////////////////////////////////////////////////////////////////////////////////////////////////
    // Universal
    /////////////////////////////////////////////////////////////////////////////////////////////////////

    // 遗留物检测事件信息
    public static class STU_EVENT_UNIVERSAL_LEFT_DETECT extends Structure {
        public int nChannel;                    // 通道号
        public int nGroupID;                    // 组编号
        public int nIndexInGroup;                // 组内序号
        public int nCountInGroup;                // 组包含的图片数目
        public byte[] szEvent = new byte[64];                // 事件类型
        public byte[] szClass = new byte[64];                // 大类类型
        public byte[] szAction = new byte[64];                // 动作类型
        public double dPTS;                        // PTS
        public int nUTC;                        // UTC
        public short nUTCMS;                        // UTCMS
        public byte[] reserved1 = new byte[2];                // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];                // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                    // 事件时间
        public byte[] reserved2 = new byte[256];                // 保留字节2
        public STU_EVENT_COMMON_INFO stuCommInfo;                // 公共信息
        public byte[] reserved3 = new byte[1024];            // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_UNIVERSAL_LEFT_DETECT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_UNIVERSAL_LEFT_DETECT implements Structure.ByValue {
        }
    }

    ;

    // 移出物检测事件信息
    public static class STU_EVENT_UNIVERSAL_REMOVE_DETECT extends Structure {
        public int nChannel;                    // 通道号
        public int nGroupID;                    // 组编号
        public int nIndexInGroup;                // 组内序号
        public int nCountInGroup;                // 组包含的图片数目
        public byte[] szEvent = new byte[64];                // 事件类型
        public byte[] szClass = new byte[64];                // 大类类型
        public byte[] szAction = new byte[64];                // 动作类型
        public double dPTS;                        // PTS
        public int nUTC;                        // UTC
        public short nUTCMS;                        // UTCMS
        public byte[] reserved1 = new byte[2];                // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];                // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                    // 事件时间
        public byte[] reserved2 = new byte[256];                // 保留字节2
        public STU_EVENT_COMMON_INFO stuCommInfo;                // 公共信息
        public byte[] reserved3 = new byte[1024];            // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_UNIVERSAL_REMOVE_DETECT implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_UNIVERSAL_REMOVE_DETECT implements Structure.ByValue {
        }
    }

    ;

    // 区域入侵事件信息
    public static class STU_EVENT_UNIVERSAL_REGION_INVADE extends Structure {
        public int nChannel;                    // 通道号
        public int nGroupID;                    // 组编号
        public int nIndexInGroup;                // 组内序号
        public int nCountInGroup;                // 组包含的图片数目
        public byte[] szEvent = new byte[64];                // 事件类型
        public byte[] szClass = new byte[64];                // 大类类型
        public byte[] szAction = new byte[64];                // 动作类型
        public double dPTS;                        // PTS
        public int nUTC;                        // UTC
        public short nUTCMS;                        // UTCMS
        public byte[] reserved1 = new byte[2];                // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];                // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                    // 事件时间
        public byte[] reserved2 = new byte[256];                // 保留字节2
        public STU_EVENT_COMMON_INFO stuCommInfo;                // 公共信息
        public byte[] reserved3 = new byte[1024];            // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_UNIVERSAL_REGION_INVADE implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_UNIVERSAL_REGION_INVADE implements Structure.ByValue {
        }
    }

    ;

    // 拌线入侵事件信息
    public static class STU_EVENT_UNIVERSAL_LINE_INVADE extends Structure {
        public int nChannel;                    // 通道号
        public int nGroupID;                    // 组编号
        public int nIndexInGroup;                // 组内序号
        public int nCountInGroup;                // 组包含的图片数目
        public byte[] szEvent = new byte[64];                // 事件类型
        public byte[] szClass = new byte[64];                // 大类类型
        public byte[] szAction = new byte[64];                // 动作类型
        public double dPTS;                        // PTS
        public int nUTC;                        // UTC
        public short nUTCMS;                        // UTCMS
        public byte[] reserved1 = new byte[2];                // 保留位1（字节对齐）
        public byte[] szTimeZone = new byte[16];                // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                    // 事件时间
        public byte[] reserved2 = new byte[256];                // 保留字节2
        public STU_EVENT_COMMON_INFO stuCommInfo;                // 公共信息
        public byte[] reserved3 = new byte[1024];            // 保留字节3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nGroupID", "nIndexInGroup", "nCountInGroup",
                    "szEvent", "szClass", "szAction", "dPTS", "nUTC", "nUTCMS", "reserved1", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved2", "stuCommInfo", "reserved3"});
        }

        public static class ByReference extends STU_EVENT_UNIVERSAL_LINE_INVADE implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_UNIVERSAL_LINE_INVADE implements Structure.ByValue {
        }
    }

    ;

    /////////////////////////////////////////////////////////////////////////////////////////////////////
    //other
    /////////////////////////////////////////////////////////////////////////////////////////////////////
    //二维码分析事件信息
    public static class STU_EVENT_OTHER_QRCODE_ANALYZE extends Structure {
        public byte[] szQRResult = new byte[128];        // 二维码识别结果
        public int nUTC;                            // UTC
        public short nUTCMS;                            // UTCMS
        public byte[] szTimeZone = new byte[16];        // 时区字符串（GMT+08:00）
        public int nTimeZoneMS;                    // 与UTC时区毫秒差（东八区 = -8*60*60*1000）
        public STU_TIME_EX stuTime;                        // 事件时间
        public byte[] reserved = new byte[256];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szQRResult", "nUTC", "nUTCMS", "szTimeZone",
                    "nTimeZoneMS", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_EVENT_OTHER_QRCODE_ANALYZE implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_OTHER_QRCODE_ANALYZE implements Structure.ByValue {
        }
    }

    ;

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //音视频
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////

    //回调视频数据帧的帧参数结构体
    public static class STU_VIDEO_FRAME_PARAM extends Structure {
        public byte encode;                        // 编码类型
        public byte frametype;                    // I = 0, P = 1, B = 2...
        public byte format;                        // PAL - 0, NTSC - 1
        public byte size;                        // CIF - 0, HD1 - 1, 2CIF - 2, D1 - 3, VGA - 4, QCIF - 5, QVGA - 6 ,
        // SVCD - 7,QQVGA - 8, SVGA - 9, XVGA - 10,WXGA - 11,SXGA - 12,WSXGA - 13,UXGA - 14,WUXGA - 15, LFT - 16, 720 - 17, 1080 - 18
        public int fourcc;                        // 如果是H264编码则总为0，MPEG4这里总是填写FOURCC('X','V','I','D');
        public byte[] reserved1 = new byte[4];    // 保留位 1
        public STU_TIME struTime;                    // 时间信息
        public byte[] reserved2 = new byte[16];    // 保留位 2

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"encode", "frametype", "format", "size",
                    "fourcc", "reserved1", "struTime", "reserved2"});
        }

        public static class ByReference extends STU_VIDEO_FRAME_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEO_FRAME_PARAM implements Structure.ByValue {
        }
    }

    ;

    // 回调音频数据帧的帧参数结构体
    public static class STU_CBPCM_DATA_PARAM extends Structure {
        public byte channels;                    // 声道数
        public byte samples;                    // 采样
        // 例:  0 - 8000,   1 - 11025,	 2 - 16000,   3 - 22050,
        //      4 - 32000,  5 - 44100,  6 - 48000
        public byte depth;                        // 采样深度 取值8或者16等。直接表示
        public byte param1;                        // 0 - 指示无符号，1-指示有符号
        public byte[] reserved = new byte[16];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"channels", "samples", "depth", "param1", "reserved"});
        }

        public static class ByReference extends STU_CBPCM_DATA_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CBPCM_DATA_PARAM implements Structure.ByValue {
        }
    }

    ;

    //回调YUV数据的参数结构体
    public static class STU_CBYUV_DATA_PARAM extends Structure {
        public int nWidth;                        // 图像的宽
        public int nHeight;                    // 图像的高
        public byte[] reserved = new byte[32];                // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nWidth", "nHeight", "reserved"});
        }

        public static class ByReference extends STU_CBYUV_DATA_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CBYUV_DATA_PARAM implements Structure.ByValue {
        }
    }

    ;

    // 音频格式信息
    public static class STU_AUDIO_FORMAT_INFO extends Structure {
        public int emEncodeFormat;                // 编码格式, EM_AUDIO_ENCODE_COMPRESS_TYPE
        public int nFrequency;                    // 采样率
        public int nDepth;                        // 采样深度
        public int nVoiceLevel;                // 对讲音量等级
        // [-2， - 1， 0， 1， 2, 3, 4] 等级越高音量越大
        // 0 表示正常音量
        public NetDelegates.fTalkBackDataCallBack cbRealData;                    // 语音对讲数据回调
        public int dwUser;                        // 用户自定义回调参数

        public byte[] reserved = new byte[64];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emEncodeFormat", "nFrequency", "nDepth",
                    "nVoiceLevel", "cbRealData", "dwUser", "reserved"});
        }

        public static class ByReference extends STU_AUDIO_FORMAT_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_AUDIO_FORMAT_INFO implements Structure.ByValue {
        }
    }

    ;

    public static class STU_REAL_AUDIO_FORMAT_INFO extends Structure {
        public int emEncodeFormat;                    // 编码格式, EM_AUDIO_ENCODE_COMPRESS_TYPE
        public int nBitsPerSample;                // 采样深度
        public int nSamplesPerSec;                // 采样率
        public byte[] reserved = new byte[64];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emEncodeFormat", "nBitsPerSample", "nSamplesPerSec", "reserved"});
        }

        public static class ByReference extends STU_REAL_AUDIO_FORMAT_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_REAL_AUDIO_FORMAT_INFO implements Structure.ByValue {
        }
    }

    ;

    //////////////////////////////////////////////////////////////////////////////////////
    // 人脸抓拍机人脸抓拍图和背景图处理的数据类型
    // 图片订阅参数
    public static class NetPicParamCV1 extends Structure {
        public int nSize;
        public int nChannel;
        public NetDelegates.fNetPicStreamCallBackCV1 cbNetPicStream;
        public Pointer ptrUser;

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nSize", "nChannel", "cbNetPicStream", "ptrUser"});
        }

        public static class ByReference extends NetPicParamCV1 implements Structure.ByReference {
        }

        public static class ByValue extends NetPicParamCV1 implements Structure.ByValue {
        }
    }

    ;

    // 图片抓拍时间
    public static class PicTimeCV1 extends Structure {
        public int nYear;
        public int nMonth;
        public int nDay;
        public int nHour;
        public int nMinute;
        public int nSecond;
        public int nMillisecond;

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nYear", "nMonth", "nDay", "nHour", "nMinute", "nSecond", "nMillisecond"});
        }

        public static class ByReference extends PicTimeCV1 implements Structure.ByReference {
        }

        public static class ByValue extends PicTimeCV1 implements Structure.ByValue {
        }
    }

    ;

    // 全景图数据
    public static class PicDataCV1 extends Structure {
        public int nWidth;
        public int nHeight;
        public int nDataLen;
        public Pointer ptrPicData;

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nWidth", "nHeight", "nDataLen", "ptrPicData"});
        }

        public static class ByReference extends PicDataCV1 implements Structure.ByReference {
        }

        public static class ByValue extends PicDataCV1 implements Structure.ByValue {
        }
    }

    ;

    // 人脸属性
    public static class FaceAttributeCV1 extends Structure {
        // 0x00-未知；	0x01-清晰度；	0x02-质量度；	0x03-模糊度；
        // 0x04-性别；	0x05-年龄；		0x06-民族；		0x07-戴口罩；
        // 0x08-戴帽子；	0x09-戴眼镜；	0x0A-表情；		0x0B-物体跟踪状态；
        public int nType;
        // 置信度[0-255]；
        // 清晰度[0-255]；
        // 质量度[0-255]；
        // 模糊度[0-255]；
        // 性别[0-男|1-女|2-其它]；
        // 年龄	[0-n]；
        // 民族[0-未知，1-非少数民族，2-少数民族]；
        // 戴口罩[0-未知，1-戴口罩，2-未戴口罩]；
        // 戴帽子[0-未知，1-戴帽子，2-未戴帽子]；
        // 戴眼镜[0-未知，1-戴眼镜，2-未戴眼镜]；
        // 表情[0-未知，1-正常，2-微笑，3-大笑]；
        // 物体跟踪状态 [0-未知，1-新建，2-更新，3-消失]；
        public int nValue;            // 属性值

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nType", "nValue"});
        }

        public static class ByReference extends FaceAttributeCV1 implements Structure.ByReference {
        }

        public static class ByValue extends FaceAttributeCV1 implements Structure.ByValue {
        }
    }

    ;

    // 人脸检测-人脸抠图数据
    public static class FacePicDataCV1 extends Structure {
        public int nFaceId;                                        // 人脸物体ID
        public int nDrop;                                            // 物体跟踪状态为‘消失’时，值为1，其它时候为0
        public int nFacelevel;                                        // 暂时不用
        public STU_RECT_L stuFaceRect;                                    // 图片矩形框 （8192 * 8192 坐标系）
        public int nWidth;                                            // 图片像素宽度
        public int nHeight;                                        // 图片像素高度
        public int nFaceAttrCount;                                    // 实际属性个数
        public int nFaceAttrStructSize;                            // 所有属性大小
        // 属性数组, FaceAttributeCV1
        public Pointer[] pstFaceAttr = new Pointer[NetDefs.MAX_FACE_ATTRIBUTE_NUM_CV1];
        public int nDataLen;                                        // 图片数据大小
        public Pointer ptrPicData;                                        // 图片数据, char*
        public int nBase64FeatureLen;                                // 人脸特征值字符串长度
        public Pointer pszBase64Feature;                                // 人脸特征值  String，base64编码格式，最优模式下，选择抽取特征值时，有该字段；主要在人脸大图和人脸抠图事件中使用
        public byte[] szFeatureVersion = new byte[64];                // 人脸特征值版本号  最优模式下，选择抽取特征值时，有该字段，主要在人脸大图和人脸抠图中有该字段
        public float fTemperature;                                    // 体温
        public int iTemperatureAlarm;                                // 体温报警状态，0-未布控，1-体温正常，2-高体温报警
        public byte[] reserved = new byte[504];                        // 保留数据

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nFaceId", "nDrop", "nFacelevel", "stuFaceRect", "nWidth",
                    "nHeight", "nFaceAttrCount", "nFaceAttrStructSize", "pstFaceAttr", "nDataLen", "ptrPicData",
                    "nBase64FeatureLen", "pszBase64Feature", "szFeatureVersion", "fTemperature", "iTemperatureAlarm",
                    "reserved"});
        }

        public static class ByReference extends FacePicDataCV1 implements Structure.ByReference {

        }

        public static class ByValue extends FacePicDataCV1 implements Structure.ByValue {

        }
    }

    ;

    // 人脸检测-人形抠图数据
    public static class BodySnapPicDataCV1 extends Structure {
        public int iBodyId;                    // 人形物体ID
        public STU_RECT_I tBodyRect;                    // 图片矩形框 （8192 * 8192 坐标系）

        public byte nClothesUpSleeve;            // 上衣特征 0-未知 1-短袖 2-长袖
        public byte nClothesUpColor;            // 上衣颜色
        // 0-未知		1-黑色		2-白色		3-灰色
        // 4-红色		5-橙色		6-黄色		7-绿色
        // 8-深蓝色		9-浅蓝色		10-紫色		11-粉红色
        // 12-棕色		13-彩色

        public byte nPaintsLen;                    // 裤子特征 0-未知 1-短裤 2-长裤
        public byte nPaintsColor;                // 裤子颜色
        // 0-未知		1-黑色		2-白色		3-灰色
        // 4-红色		5-橙色		6-黄色		7-绿色
        // 8-深蓝色		9-浅蓝色		10-紫色		11-粉红色
        // 12-棕色		13-彩色

        public byte nRideBike;                    // 骑自行车状态 0-未知 1-骑车 2-不骑车
        public byte nBagCarry;                    // 背包状态 0-未知 1-背包 2-未背包
        public byte nHatWore;                    // 戴帽子状态 0-未知 1-戴帽子 2-不戴帽子

        public Pointer pstPicData;                    // 图片数据, PicDataCV1*
        public byte[] reserved = new byte[512];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"iBodyId", "tBodyRect", "nClothesUpSleeve",
                    "nClothesUpColor", "nPaintsLen", "nPaintsColor", "nRideBike", "nBagCarry",
                    "nHatWore", "pstPicData", "reserved"});
        }

        public static class ByReference extends BodySnapPicDataCV1 implements Structure.ByReference {

        }

        public static class ByValue extends BodySnapPicDataCV1 implements Structure.ByValue {

        }
    }

    ;

    // 人脸识别-人脸抠图数据
    public static class FaceRecgPicDataCV1 extends Structure {
        public int iFaceId;                    // 人脸物体ID
        public STU_RECT_L tFaceRect;                    // 图片矩形框 （8192 * 8192 坐标系）
        public int iWidth;                        // 图片像素宽度
        public int iHeight;                    // 图片像素高度
        public int iFaceAttrCount;                // 暂时不用
        public int iFaceAttrStructSize;        // 暂时不用
        // 属性数组, FaceAttributeCV1
        public Pointer[] pstFaceAttr = new Pointer[NetDefs.MAX_FACE_ATTRIBUTE_NUM_CV1];
        public int iDataLen;                    // 图片数据大小
        public Pointer ptrPicData;                    // 图片数据
        public int nBase64FeatureLen;            // 人脸特征值字符串长度
        public Pointer pszBase64Feature;            // 人脸特征值  String，base64编码格式，最优模式下，选择抽取特征值时，有该字段；主要在人脸大图和人脸抠图事件中使用
        public byte[] szFeatureVersion = new byte[64];    // 人脸特征值版本号  最优模式下，选择抽取特征值时，有该字段，主要在人脸大图和人脸抠图中有该字段
        public float fTemperature;                // 体温
        public int iTemperatureAlarm;            // 体温报警状态，0-未布控，1-体温正常，2-高体温报警
        public byte[] reserved = new byte[176];    // 保留数据

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"iFaceId", "tFaceRect", "iWidth", "iHeight", "iFaceAttrCount",
                    "iFaceAttrStructSize", "pstFaceAttr", "iDataLen", "ptrPicData", "nBase64FeatureLen",
                    "pszBase64Feature", "szFeatureVersion", "fTemperature", "iTemperatureAlarm", "reserved"});
        }

        public static class ByReference extends FaceRecgPicDataCV1 implements Structure.ByReference {

        }

        public static class ByValue extends FaceRecgPicDataCV1 implements Structure.ByValue {

        }
    }

    ;

    // 手动抓拍相关图片数据流
    public static class ManualSnapPicStreamCV1 extends Structure {
        public int nStructSize;                            // ManualSnapPicStreamCV1结构体大小
        public PicTimeCV1 tPicTime;                                // 抓图时间
        public int nFullPicSize;                            // PicDataCV1 结构体大小
        // 背景图数据, PicDataCV1
        public PicDataCV1.ByReference pstFullPicData = new PicDataCV1.ByReference();
        public byte[] szMachineAddress = new byte[128];        // 事件/报警发生地点
        public byte[] szSerialNumber = new byte[64];            // 设备序列号
        public byte[] reserved = new byte[64];                // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nStructSize", "tPicTime", "nFullPicSize", "pstFullPicData",
                    "szMachineAddress", "szSerialNumber", "reserved"});
        }

        public static class ByReference extends ManualSnapPicStreamCV1 implements Structure.ByReference {

        }

        public static class ByValue extends ManualSnapPicStreamCV1 implements Structure.ByValue {

        }
    }

    ;

    // 人脸抓拍相关图片数据流
    public static class FacePicStreamCV1 extends Structure {
        public int nStructSize;            // FacePicStreamCV1结构体大小
        public PicTimeCV1 stuPicTime;                // 抓图时间
        public int nFullPicSize;            // PicDataCV1结构体大小
        // 背景图数据，STU_PIC_DATA_CV1类型
        public PicDataCV1.ByReference ptrRefFullPicData = new PicDataCV1.ByReference();
        //  一张背景图对应一张/多张人脸抠图，当前为一张
        public int nFaceCount;                // 人脸抠图张数
        public int nFacePicSize;            // STU_FACE_PIC_DATA_CV1  数组总大小
        // 人脸抠图数据数组, STU_FACE_PIC_DATA_CV1 类型。只有一张图片
        public FacePicDataCV1.ByReference[] ptrRefFaceDataArr = new FacePicDataCV1.ByReference[NetDefs.MAX_NET_PIC_STRERAM_FACE_NUM];
        public byte[] szMachineAddress = new byte[128];        // 事件/报警发生地点
        public byte[] szSerialNumber = new byte[64];            // 设备序列号

        // 一张背景图对应一张/多张人形抠图，当前为一张
        public int nBodySnapCount;                // 人形抠图张数
        public int nBodySnapPicSize;            // BodySnapPicDataCV1 数组总大小
        public Pointer pstBodySnapDataArr;            // 人形抠图数据数组, BodySnapPicDataCV1*

        public byte[] reserved = new byte[52];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nStructSize", "stuPicTime", "nFullPicSize",
                    "ptrRefFullPicData", "nFaceCount", "nFacePicSize", "ptrRefFaceDataArr",
                    "szMachineAddress", "szSerialNumber", "nBodySnapCount", "nBodySnapPicSize",
                    "pstBodySnapData", "reserved"});
        }

        public static class ByReference extends FacePicStreamCV1 implements Structure.ByReference {
        }

        public static class ByValue extends FacePicStreamCV1 implements Structure.ByValue {
        }
    }

    ;

    // 人脸识别相关图片数据流
    public static class FaceRecgPicStreamCV1 extends Structure {
        public int nStructSize;                            // FaceRecgPicStreamCV1结构体大小
        public PicTimeCV1 tPicTime;                                // 抓图时间
        public int nFullPicSize;                            // PicDataCV1结构体大小
        public Pointer pstFullPicData;                            // 背景图数据, PicDataCV1
        // 一张背景图对应一张/多张人脸抠图，当前为一张
        public int nFaceCount;
        public int nFacePicSize;                            // FaceRecgPicDataCV1 数组总大小
        // 图片数据, FaceRecgPicDataCV1
        public FaceRecgPicDataCV1.ByReference[] ptrFaceData = new FaceRecgPicDataCV1.ByReference[NetDefs.MAX_NET_PIC_STRERAM_FACE_NUM];
        public byte[] szMachineAddress = new byte[128];        // 事件/报警发生地点
        public byte[] szSerialNumber = new byte[64];            // 设备序列号
        public int nFaceRecognizeRecCount;                    // 人脸识别记录信息数组大小
        // 人脸识别记录数组
        public STU_EVENT_FACE_RECOGNIZE_RECORD[] stuFaceRecognizeRecArr = new STU_EVENT_FACE_RECOGNIZE_RECORD[NetDefs.MAX_FACE_GROUP_NUM];
        public byte[] reserved = new byte[64];                // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nStructSize", "tPicTime", "nFullPicSize", "pstFullPicData",
                    "nFaceCount", "nFacePicSize", "pstFaceData", "szMachineAddress", "szSerialNumber",
                    "nFaceRecognizeRecCount", "stuFaceRecognizeRecArr", "reserved"});
        }

        public static class ByReference extends FaceRecgPicStreamCV1 implements Structure.ByReference {
        }

        public static class ByValue extends FaceRecgPicStreamCV1 implements Structure.ByValue {
        }
    }

    ;

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    public static class STU_FACE_GROUP_INFO extends Structure {
        public int bEnable;                        // 使能标志位
        public int nGroupID;                        // 人脸组ID
        public byte[] szGroupName = new byte[128];    // 人脸组名称，创建底库时指定，创建后不可更改
        public byte[] szAlias = new byte[128];        // 人脸组别名
        public byte[] szGUID = new byte[64];            // 人脸组唯一ID
        public int nFaceCount;                        // 人脸组在库人脸数(不启用)
        public float fSearchThreshold;                // 识别比对阈值 [0.0-100.0]
        public STU_TIME stCreateTime;                    // 人脸组创建时间
        public int nTopRank;                        // 上报识别得分超过阈值的排名靠前的底库人脸个数
        public int nGroupType;                    // 底库类别， 0 - 白名单； 1 - 灰名单； 2 - 黑名单
        public byte[] reserved = new byte[248];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "nGroupID",
                    "szGroupName", "szAlias", "szGUID", "nFaceCount",
                    "fSearchThreshold", "stCreateTime", "nTopRank",
                    "nGroupType", "reserved"});
        }

        public static class ByReference extends STU_FACE_GROUP_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_GROUP_INFO implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_GROUP_CREATE_IN_PARAM extends Structure {
        public int bEnable;                    // 使能标志位
        public float fSearchThreshold;            // 识别比对阈值 [0.0-100.0]
        public byte[] szAlias = new byte[128];    // 人脸组别名（不能包含特殊字符）
        public int nTopRank;                    // 上报识别得分超过阈值的排名靠前的底库人脸个数
        public int nGroupType;                    // 0-白名单； 1-灰名单； 2-黑名单
        public byte[] reserved = new byte[120];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "fSearchThreshold",
                    "szAlias", "nTopRank", "nGroupType", "reserved"});
        }

        public static class ByReference extends STU_FACE_GROUP_CREATE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_GROUP_CREATE_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_GROUP_CREATE_OUT_PARAM extends Structure {
        public int dwSize;                        // 结构体大小
        public int nError;                        // 错误码，0-无错误
        public STU_FACE_GROUP_INFO stFaceGroupInfo;            // 人脸组信息
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nError",
                    "stFaceGroupInfo", "reserved"});
        }

        public static class ByReference extends STU_FACE_GROUP_CREATE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_GROUP_CREATE_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_GROUP_DELETE_IN_PARAM extends Structure {
        public int nGroupID;                        // 人脸组 ID
        public int bDelBindFace;                    // 是否同步删掉绑定到改组的人脸图片
        public byte[] reserved = new byte[16];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nGroupID", "bDelBindFace", "reserved"});
        }

        public static class ByReference extends STU_FACE_GROUP_DELETE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_GROUP_DELETE_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_GROUP_DELETE_OUT_PARAM extends Structure {
        public int dwSize;                        // 结构体大小
        public int nError;                        // 错误码， 0 为无错误
        public byte[] reserved = new byte[16];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nError", "reserved"});
        }

        public static class ByReference extends STU_FACE_GROUP_DELETE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_GROUP_DELETE_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_GROUP_EDIT_INFO extends Structure {
        public int bEnable;                    // 使能标志位，非 0 或 1 则不配置
        public float fSearchThreshold;            // 识别比对阈值 [0.0 - 100.0], -1 则不配置
        public byte[] szAlias = new byte[128];    // 人脸组别名, 为空则不修改
        public byte[] szGUID = new byte[64];        // 全局 ID，为空则不修改
        public int nTopRank;                    // 上报识别得分超过阈值的排名靠前的底库人脸个数 [1-5]
        public byte[] reserved = new byte[124];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "fSearchThreshold",
                    "szAlias", "szGUID", "nTopRank", "reserved"});
        }

        public static class ByReference extends STU_FACE_GROUP_EDIT_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_GROUP_EDIT_INFO implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_GROUP_EDIT_IN_PARAM extends Structure {
        public int nGroupID;                        // 浜鸿劯缁� ID锛堜笉鏇存敼锛�
        public STU_FACE_GROUP_EDIT_INFO stFaceGroupEditInfo;            // 鍙慨鏀圭殑浜鸿劯缁勪俊鎭�
        public byte[] reserved = new byte[64];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nGroupID", "stFaceGroupEditInfo", "reserved"});
        }

        public static class ByReference extends STU_FACE_GROUP_EDIT_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_GROUP_EDIT_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_GROUP_EDIT_OUT_PARAM extends Structure {
        public int dwSize;                        // 人脸组 ID（不更改）
        public int nError;                        // 可修改的人脸组信息
        public byte[] reserved = new byte[16];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nError", "reserved"});
        }

        public static class ByReference extends STU_FACE_GROUP_EDIT_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_GROUP_EDIT_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_GROUP_DELETE_SCHEDULE_INFO extends Structure {
        public int nTotalCount;                    // 需要删除的总人脸数
        public int nSuccessCount;                    // 已成功删除的人脸数
        public int nFailCount;                        // 已删除失败的人脸数
        public int nState;                            // 人脸库删除状态
        // 0-未做人脸库删除操作
        // 1-正在删除人脸库
        // 2-已完成人脸库删除
        public byte[] reserved = new byte[64];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nTotalCount", "nSuccessCount", "nFailCount", "nState", "reserved"});
        }

        public static class ByReference extends STU_FACE_GROUP_DELETE_SCHEDULE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_GROUP_DELETE_SCHEDULE_INFO implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_GROUP_ARRAY_INFO extends Structure {
        // 人脸组实际数目
        public short nFaceGroupNum;
        // 字节对齐
        public byte[] reserved = new byte[2];
        // 人脸组信息
        public STU_FACE_GROUP_INFO[] stFaceGroupArr = new STU_FACE_GROUP_INFO[NetDefs.MAX_FACE_GROUP_NUM];

        public STU_FACE_GROUP_ARRAY_INFO() {
            for (int i = 0; i < stFaceGroupArr.length; i++) {
                stFaceGroupArr[i] = new STU_FACE_GROUP_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nFaceGroupNum", "reserved", "stFaceGroupArr"});
        }

        public static class ByReference extends STU_FACE_GROUP_ARRAY_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_GROUP_ARRAY_INFO implements Structure.ByValue {
        }
    }

    ;

    public static class STU_PERSON_INFO extends Structure {
        public int nPersonID;                            // 人员 ID，当添加人员时，PersonID 还未产生，是无效的，不用设置；
        // 人员 ID 由设备自动生成，不用维护该字段
        public byte[] szName = new byte[128];                // 人脸图别名，当添加人员时，选填，不能有特殊字符；
        public int emSexType;                            // 性别，当添加人员时，选填；EM_SEX_TYPE
        public STU_TIME stBirthday;                            // 生日，当添加人员时，选填；
        public byte[] szCertificateType = new byte[64];    // 证件类型
        // 当添加人员时，必填，默认为 IC（身份证)；
        // 当更新人员时，选填，默认为 IC
        public byte[] szID = new byte[128];                // 证件 ID
        // 当添加人员时，必填；
        // 当更新人员时，必填，用于人员检索，不更新 ID
        public byte[] reserved1 = new byte[32];            // 保留参数1
        public byte[] szCountry = new byte[64];            // 国别，当添加人员时，选填；
        public byte[] szProvince = new byte[64];            // 省份，当添加人员时，选填；
        public byte[] szCity = new byte[128];                // 所在城市，当添加人员时，选填；


        public byte[] szCustom = new byte[128];            // 自定义描述字段，字符串，配合人脸识别能力（STU_CAPS_FACE_RECOGNIZE）中的uCustomDescriptionFunc字段使用；
        // uCustomDescriptionFunc为0时，为NULL
        // uCustomDescriptionFunc表示梯控时：
        // "0" - 所有楼层；
        // "1,2,3" - 非全楼层时，指定具体楼层号，中间用","分割，不可带空格

        public byte[] reserved2 = new byte[896];            // 保留参数2

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nPersonID", "szName", "emSexType",
                    "stBirthday", "szCertificateType", "szID",
                    "reserved1", "szCountry", "szProvince",
                    "szCity", "szCustom", "reserved2"});
        }

        public static class ByReference extends STU_PERSON_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_PERSON_INFO implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_ADD_IN_PARAM extends Structure {
        public int nGroupID;                    // 人脸组 ID
        public STU_PERSON_INFO stPersonInfo;                // 人员信息
        public int nImageCount;                // 人脸图片张数, 不超过 MAX_PERSON_FACE_NUM
        public Pointer lpszImageFiles;                // 人脸图片本地路径（如果是多张，以 "|" 分隔路径）
        public int bNoCreate;                    // 拒绝创建（不必设置，不启用）
        public int bEncSend;                    // TRUE - 加密发送；FALSE - 非加密发送
        // 需要设备支持加减密发送
        public byte[] reserved = new byte[248];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nGroupID", "stPersonInfo", "nImageCount",
                    "lpszImageFiles", "bNoCreate", "bEncSend", "reserved"});
        }

        public static class ByReference extends STU_FACE_ADD_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_ADD_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_ADD_OUT_PARAM extends Structure {
        public int dwSize;                            // 结构体大小
        public int nError;                            // 错误码，0 - 无错误
        public int nFaceTokenCount;                // 添加人脸图片成功后，返回的 facetoken 个数
        // 添加人脸图片成功后，返回的人脸图片对应的 facetoken 字符串
        // 如果是多张，以 "|" 分隔，顺序与添加图片的顺序相同
        public byte[] szFaceTokens = new byte[68 * NetDefs.MAX_PERSON_FACE_NUM];
        public byte[] reserved = new byte[16];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "dwSize", "nError", "nFaceTokenCount",
                    "szFaceTokens", "reserved"});
        }

        public static class ByReference extends STU_FACE_ADD_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_ADD_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_EXTRACT_SCHEDULE_INFO extends Structure {
        public int nTotalCount;                    // 需要建模的总人脸数
        public int nSuccessCount;                    // 已建模成功的人脸数
        public int nFailCount;                        // 已建模失败的人脸数
        public int nState;                            // 库建模状态
        // 0-未做建模操作
        // 1-正在建模
        // 2-已完成建模
        public int bNoCreate;                        // 拒绝创建（不必设置，不启用）
        public byte[] reserve = new byte[60];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nTotalCount", "nSuccessCount", "nFailCount",
                    "nState", "bNoCreate", "reserve"});
        }

        public static class ByReference extends STU_FACE_EXTRACT_SCHEDULE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_EXTRACT_SCHEDULE_INFO implements Structure.ByValue {
        }
    }

    ;

    // 人脸建模结果信息
    public static class STU_FACE_EXTRACT_FEATURE_DETAIL extends Structure {
        public int nIndex;                                // 序号
        public byte[] szFaceToken = new byte[64];            // 人脸标识符
        public int nResultCode;                        // 错误码 为0表示成功，非0为错误
        public byte[] reserved = new byte[60];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nIndex", "szFaceToken", "nResultCode", "reserved"});
        }

        public static class ByReference extends STU_FACE_EXTRACT_FEATURE_DETAIL implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_EXTRACT_FEATURE_DETAIL implements Structure.ByValue {
        }
    }

    ;

    // 人脸建模结果详情
    public static class STU_FACE_EXTRACT_FEATURE_DETAILS extends Structure {
        // 已获取详情总数
        public int nTotalCount;
        // 人脸建模结果详情数组
        public STU_FACE_EXTRACT_FEATURE_DETAIL[] stDetailArray = new STU_FACE_EXTRACT_FEATURE_DETAIL[NetDefs.MAX_EXTRACT_FEATURE_DETAIL_NUM];
        // 数组中详情数量
        public int nDetailsCount;
        // 是否已获取到所有的建模结果
        public int bComplete;
        // 保留参数
        public byte[] reserved = new byte[128];

        public STU_FACE_EXTRACT_FEATURE_DETAILS() {
            for (int i = 0; i < stDetailArray.length; i++) {
                stDetailArray[i] = new STU_FACE_EXTRACT_FEATURE_DETAIL();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nTotalCount", "stDetailArray", "nDetailsCount",
                    "bComplete", "reserved"});
        }

        public static class ByReference extends STU_FACE_EXTRACT_FEATURE_DETAILS implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_EXTRACT_FEATURE_DETAILS implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_IMAGE extends Structure {
        public Pointer pBuffer;                        // 人脸图片数据
        public int nBufSize;                        // 人脸图片数据大小
        public byte[] reserved = new byte[64];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "pBuffer", "nBufSize", "reserved"});
        }

        public static class ByReference extends STU_FACE_IMAGE implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_IMAGE implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_ADD_IN_PARAM_EX extends Structure {
        public int nGroupID;                    // 人脸组 ID
        public STU_PERSON_INFO stPersonInfo;                // 人员信息
        public int nImageCount;                // 人脸图片张数, 不超过 MAX_PERSON_FACE_NUM
        public STU_FACE_IMAGE[] stFaceImageArray = new STU_FACE_IMAGE[NetDefs.MAX_PERSON_FACE_NUM];    // 人脸图片数组, 请按顺序填写人脸图片数据
        public int bNoCreate;                    // 拒绝创建（不必设置，不启用）
        public int bEncSend;                    // TRUE - 加密发送；FALSE - 非加密发送
        // 需要设备支持加减密发送
        public byte[] reserved = new byte[124];    // 保留参数

        public STU_FACE_ADD_IN_PARAM_EX() {
            for (int i = 0; i < stFaceImageArray.length; i++) {
                stFaceImageArray[i] = new STU_FACE_IMAGE();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nGroupID", "stPersonInfo", "nImageCount",
                    "stFaceImageArray", "bNoCreate", "bEncSend", "reserved"});
        }

        public static class ByReference extends STU_FACE_ADD_IN_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_ADD_IN_PARAM_EX implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_TOKEN extends Structure {
        public int bValid;                        // 是否有效，有效则人脸添加成功
        public byte[] szToken = new byte[64];
        ;    // 人脸 token
        public byte[] reserved = new byte[64];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "bValid", "szToken", "reserved"});
        }

        public static class ByReference extends STU_FACE_TOKEN implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_TOKEN implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_ADD_OUT_PARAM_EX extends Structure {
        public int dwSize;                        // 结构体大小
        public int nError;                        // 错误码，0 - 无错误
        public int nFaceTokenCount;            // 添加人脸图片成功后，返回的 facetoken 个数
        public STU_FACE_TOKEN[] stFacTokenArray = new STU_FACE_TOKEN[NetDefs.MAX_PERSON_FACE_NUM];    // 人脸图片 Token 信息
        public byte[] reserved = new byte[16];    // 保留参数

        public STU_FACE_ADD_OUT_PARAM_EX() {
            for (int i = 0; i < stFacTokenArray.length; i++) {
                stFacTokenArray[i] = new STU_FACE_TOKEN();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "dwSize", "nError", "nFaceTokenCount",
                    "stFacTokenArray", "reserved"});
        }

        public static class ByReference extends STU_FACE_ADD_OUT_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_ADD_OUT_PARAM_EX implements Structure.ByValue {
        }
    }

    ;

    public static class STU_PERSON_INFO_ADD_IN_PARAM extends Structure {
        public STU_PERSON_INFO stPersonInfo;                    // 人员信息
        // 人员信息添加时， PersonID 不必赋值
        public int bNoCreate;                        // 拒绝创建（不必设置，不启用）
        public int bEncSend;                        // TRUE - 加密发送；FALSE - 非加密发送
        // 需要设备支持加减密发送
        public byte[] reserved = new byte[60];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stPersonInfo", "bNoCreate", "bEncSend", "reserved"});
        }

        public static class ByReference extends STU_PERSON_INFO_ADD_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PERSON_INFO_ADD_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_PERSON_INFO_ADD_OUT_PARAM extends Structure {
        public int dwSize;                        // 结构体大小
        public int nError;                        // 错误码，0 - 无错误
        public int nPersonID;                    // 人员 ID
        public byte[] reserved = new byte[16];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "dwSize", "nError", "nPersonID", "reserved"});
        }

        public static class ByReference extends STU_PERSON_INFO_ADD_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PERSON_INFO_ADD_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_PERSON_INFO_UPDATE_IN_PARAM extends Structure {
        public STU_PERSON_INFO stPersonInfo;                // 人脸信息
        public int bNoCreate;                    // 拒绝创建（不必设置，不启用）
        public int bEncSend;                    // TRUE - 加密发送；FALSE - 非加密发送
        // 需要设备支持加减密发送
        public byte[] reserved = new byte[120];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stPersonInfo", "bNoCreate", "bEncSend", "reserved"});
        }

        public static class ByReference extends STU_PERSON_INFO_UPDATE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PERSON_INFO_UPDATE_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_PERSON_INFO_UPDATE_OUT_PARAM extends Structure {
        public int dwSize;                        // 结构体大小
        public int nError;                        // 错误码， 0-无错误
        public byte[] reserved = new byte[16];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nError", "reserved"});
        }

        public static class ByReference extends STU_PERSON_INFO_UPDATE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PERSON_INFO_UPDATE_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    // 人员删除参数
    public static class STU_PERSON_DELETE_INFO_PARAM extends Structure {
        public int bNoCreate;                        // 拒绝创建（不必设置，不启用）
        public byte[] reserved = new byte[256];        // 预留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bNoCreate", "reserved"});
        }

        public static class ByReference extends STU_PERSON_DELETE_INFO_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PERSON_DELETE_INFO_PARAM implements Structure.ByValue {
        }
    }

    ;

    // 添加人脸图片操作输入参数
    public static class STU_FACE_IMAGE_ADD_IN_PARAM extends Structure {
        public int nGroupID;                        // 人脸组ID
        public int nPersonID;                        // 人员ID
        public byte[] szImageFile = new byte[260];    // 本地图片路径
        public int bNoCreate;                        // 拒绝创建（不必设置，不启用）
        public int bEncSend;                        // TRUE - 加密发送；FALSE - 非加密发送
        // 需要设备支持加减密发送
        public byte[] reserved = new byte[56];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nGroupID", "nPersonID",
                    "szImageFile", "bNoCreate", "bEncSend", "reserved"});
        }

        public static class ByReference extends STU_FACE_IMAGE_ADD_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_IMAGE_ADD_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    // 添加人脸图片操作输出参数
    public static class STU_FACE_IMAGE_ADD_OUT_PARAM extends Structure {
        public int dwSize;                            // 结构体大小
        public int nError;                            // 错误码 0 - 无错误
        public byte[] szFaceToken = new byte[64];        // 新的人脸标识码
        public byte[] reserved = new byte[64];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nError",
                    "szFaceToken", "reserved"});
        }

        public static class ByReference extends STU_FACE_IMAGE_ADD_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_IMAGE_ADD_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    // 添加人脸图片操作输入参数
    public static class STU_FACE_IMAGE_ADD_IN_PARAM_EX extends Structure {
        public int nGroupID;                        // 人脸组ID
        public int nPersonID;                        // 人员ID
        public STU_FACE_IMAGE stuFaceImage;                    // 人脸图片
        public int bNoCreate;                        // 拒绝创建（不必设置，不启用）
        public int bEncSend;                        // TRUE - 加密发送；FALSE - 非加密发送
        // 需要设备支持加减密发送
        public byte[] reserved = new byte[56];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nGroupID", "nPersonID",
                    "stuFaceImage", "bNoCreate", "bEncSend", "reserved"});
        }

        public static class ByReference extends STU_FACE_IMAGE_ADD_IN_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_IMAGE_ADD_IN_PARAM_EX implements Structure.ByValue {
        }
    }

    ;

    // 添加人脸图片操作输出参数
    public static class STU_FACE_IMAGE_ADD_OUT_PARAM_EX extends Structure {
        public int dwSize;                            // 结构体大小
        public int nError;                            // 错误码 0 - 无错误
        public byte[] szFaceToken = new byte[64];        // 新的人脸标识码
        public byte[] reserved = new byte[64];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nError", "szFaceToken", "reserved"});
        }

        public static class ByReference extends STU_FACE_IMAGE_ADD_OUT_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_IMAGE_ADD_OUT_PARAM_EX implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_IMAGE_DELETE_IN_PARAM extends Structure {
        public byte[] szFaceToken = new byte[64];        // 人脸标识码
        public int bNoCreate;                        // 拒绝创建（不必设置，不启用）
        public byte[] reserved = new byte[60];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szFaceToken", "bNoCreate", "reserved"});
        }

        public static class ByReference extends STU_FACE_IMAGE_DELETE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_IMAGE_DELETE_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_IMAGE_DELETE_OUT_PARAM extends Structure {
        public int dwSize;                            // 结构体大小
        public int nError;                            // 错误码，0-无错误
        public byte[] reserved = new byte[16];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nError", "reserved"});
        }

        public static class ByReference extends STU_FACE_IMAGE_DELETE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_IMAGE_DELETE_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_IMAGE_UPDATE_IN_PARAM extends Structure {
        public byte[] szFaceToken = new byte[64];        // 人脸标识码
        public byte[] szImageFile = new byte[260];    // 需更新的人脸图片路径
        public int bNoCreate;                        // 拒绝创建（不必设置，不启用）
        public int bEncSend;                        // TRUE - 加密发送；FALSE - 非加密发送
        // 需要设备支持加减密发送
        public byte[] reserved = new byte[56];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szFaceToken", "szImageFile", "bNoCreate",
                    "bEncSend", "reserved"});
        }

        public static class ByReference extends STU_FACE_IMAGE_UPDATE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_IMAGE_UPDATE_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_IMAGE_UPDATE_OUT_PARAM extends Structure {
        public int dwSize;                            // 结构体大小
        public int nError;                            // 错误码，0-无错误
        public byte[] szFaceToken = new byte[64];        // 新的人脸标识码
        public byte[] reserved = new byte[64];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nError",
                    "szImageFile", "reserved"});
        }

        public static class ByReference extends STU_FACE_IMAGE_UPDATE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_IMAGE_UPDATE_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_IMAGE_UPDATE_IN_PARAM_EX extends Structure {
        public byte[] szFaceToken = new byte[64];        // 人脸标识码
        public STU_FACE_IMAGE stuFaceImage;                    // 需要更新的人脸图片
        public int bNoCreate;                        // 拒绝创建（不必设置，不启用）
        public int bEncSend;                        // TRUE - 加密发送；FALSE - 非加密发送
        // 需要设备支持加减密发送
        public byte[] reserved = new byte[56];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szFaceToken", "stuFaceImage", "bNoCreate",
                    "bEncSend", "reserved"});
        }

        public static class ByReference extends STU_FACE_IMAGE_UPDATE_IN_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_IMAGE_UPDATE_IN_PARAM_EX implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_IMAGE_UPDATE_OUT_PARAM_EX extends Structure {
        public int dwSize;                            // 结构体大小
        public int nError;                            // 错误码，0-无错误
        public byte[] szFaceToken = new byte[64];        // 新的人脸标识码
        public byte[] reserved = new byte[64];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nError", "szFaceToken", "reserved"});
        }

        public static class ByReference extends STU_FACE_IMAGE_UPDATE_OUT_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_IMAGE_UPDATE_OUT_PARAM_EX implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_BIND_GROUP_IN_PARAM extends Structure {
        public int nGroupID;                        // 绑定人脸组的ID
        public byte[] szFaceToken = new byte[64];        // 人脸标识码
        public int bNoCreate;                        // 拒绝创建（不必设置，不启用）
        public int bEncrypt;                        // 数据是否加密收发
        public byte[] reserved = new byte[56];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nGroupID", "szFaceToken", "bNoCreate", "bEncrypt", "reserved"});
        }

        public static class ByReference extends STU_FACE_BIND_GROUP_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_BIND_GROUP_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_BIND_GROUP_OUT_PARAM extends Structure {
        public int dwSize;                        // 结构体大小
        public int nError;                        // 错误码 0 - 无错误
        public byte[] reserved = new byte[16];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nError", "reserved"});
        }

        public static class ByReference extends STU_FACE_BIND_GROUP_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_BIND_GROUP_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_UNBIND_GROUP_IN_PARAM extends Structure {
        public int nGroupID;                        // 人脸组ID
        public byte[] szFaceToken = new byte[64];        // 人脸标识码
        public int bNoCreate;                        // 拒绝创建（不必设置，不启用）
        public int bEncrypt;                        // 数据是否加密收发
        public byte[] reserved = new byte[60];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nGroupID", "szFaceToken", "bNoCreate", "bEncrypt", "reserved"});
        }

        public static class ByReference extends STU_FACE_UNBIND_GROUP_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_UNBIND_GROUP_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_UNBIND_GROUP_OUT_PARAM extends Structure {
        public int dwSize;                        // 结构体大小
        public int nError;                        // 错误码，0-无错误
        public byte[] reserved = new byte[16];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nError", "reserved"});
        }

        public static class ByReference extends STU_FACE_UNBIND_GROUP_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_UNBIND_GROUP_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    // 根据人员证件信息删除人员输入参数
    public static class STU_PERSON_DELETE_BYID_IN_PARAM extends Structure {
        public byte[] szCertificateType = new byte[64];    // 证件类型
        public byte[] szID = new byte[128];                // 证件号码
        public int bNoCreate;                            // 拒绝创建（不必设置，不启用）
        public byte[] reserved = new byte[60];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szCertificateType", "szID", "bNoCreate", "reserved"});
        }

        public static class ByReference extends STU_PERSON_DELETE_BYID_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PERSON_DELETE_BYID_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    // 根据人员证件信息删除人员输出参数
    public static class STU_PERSON_DELETE_BYID_OUT_PARAM extends Structure {
        public int dwSize;                            // 结构体大小
        public int nError;                            // 错误码，0-无错误
        public byte[] reserved = new byte[16];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nError", "reserved"});
        }

        public static class ByReference extends STU_PERSON_DELETE_BYID_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PERSON_DELETE_BYID_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    // 根据人员证件信息删除指定人脸组中人员输入参数
    public static class STU_PERSON_DELETE_BYID_FROM_GROUP_IN_PARAM extends Structure {
        public byte[] szGroupName = new byte[128];                // 人脸组名称
        public byte[] szCertificateType = new byte[64];            // 证件类型
        public byte[] szID = new byte[128];                        // 证件号
        public int bNoCreate;                                    // 拒绝创建（不必设置，不启用）
        public byte[] reserved = new byte[60];                    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szGroupName", "szCertificateType", "szID", "bNoCreate", "reserved"});
        }

        public static class ByReference extends STU_PERSON_DELETE_BYID_FROM_GROUP_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PERSON_DELETE_BYID_FROM_GROUP_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    // 根据人员证件信息删除指定人脸组中人员输出参数
    public static class STU_PERSON_DELETE_BYID_FROM_GROUP_OUT_PARAM extends Structure {
        public int dwSize;                            // 结构体大小
        public int nError;                            // 错误码，0-无错误
        public byte[] reserved = new byte[16];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nError", "reserved"});
        }

        public static class ByReference extends STU_PERSON_DELETE_BYID_FROM_GROUP_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PERSON_DELETE_BYID_FROM_GROUP_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_INFO_FIND_CONDITON extends Structure {
        public int bEnable;                    // 是否启用查询条件, 如果不启用则查询所有
        public int nPersonID;                    // 人员ID, -1 表示无效
        public byte[] szName = new byte[128];        // 人员名, 空表示无效
        public int emSexType;                    // 人员性别，-1（UNKNOWN）表示无效,EM_SEX_TYPE
        public STU_TIME stMinBirthday;                // 人员生日范围下限, 年份为 0 时无效
        public STU_TIME stMaxBirthday;                // 人员生日范围上限, 年份为 0 时无效
        public byte[] szCertificateType = new byte[64];        // 人员证件类型，空表示无效
        public byte[] szID = new byte[128];                    // 人员证件 ID，空表示无效
        public byte[] reserved1 = new byte[32];                // 保留参数1
        public byte[] szCountry = new byte[64];                // 国别，空表示无效
        public byte[] szProvince = new byte[64];                // 省份，空表示无效
        public byte[] szCity = new byte[128];                // 城市，控表示无效
        public byte[] reserved2 = new byte[1024];            // 保留参数2

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "bEnable", "nPersonID", "szName",
                    "emSexType", "stMinBirthday", "stMaxBirthday",
                    "szCertificateType", "szID", "reserved1",
                    "szCountry", "szProvince", "szCity", "reserved2"});
        }

        public static class ByReference extends STU_FACE_INFO_FIND_CONDITON implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_INFO_FIND_CONDITON implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_INFO_FIND_IN_PARAM extends Structure {
        public int nFindInstance;    // 查找实例
        public int nGroupID;        // 人脸组 ID
        public STU_FACE_INFO_FIND_CONDITON stCondition;    // 人脸信息查询条件

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nFindInstance", "nGroupID", "stCondition"});
        }

        public static class ByReference extends STU_FACE_INFO_FIND_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_INFO_FIND_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_INFO_FIND_OUT_PARAM extends Structure {
        public int dwSize;                        // 结构体大小
        public int nError;                        // 错误码，0-无错误
        public byte[] reserved = new byte[16];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nError", "reserved"});
        }

        public static class ByReference extends STU_FACE_INFO_FIND_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_INFO_FIND_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_INFO_FIND_RESULT_IN_PARAM extends Structure {
        public int nFindInstance;                // 查找实例
        public short nOffset;                    // 查询结果偏移，
        public short nCount;                        // 希望获取的查询条数, 不大于 MAX_ONCE_QUERY_PERSON_NUM
        public int bEncSend;                    // TRUE - 加密发送；FALSE - 非加密发送
        // 需要设备支持加减密发送
        public byte[] reserved = new byte[28];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nFindInstance", "nOffset", "nCount", "bEncSend", "reserved"});
        }

        public static class ByReference extends STU_FACE_INFO_FIND_RESULT_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_INFO_FIND_RESULT_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    // 人脸图片和特征值数据
    public static class STU_FACE_FEATURE_DATA extends Structure {
        public int nImageSize;                        // 图片数据大小
        public Pointer pImageBuffer;                    // 图片数据，外部申请和释放
        public int nFeatureSize;                    // 特征值数据大小
        public Pointer pFeatureBuffer;                    // 特征值数据，外部申请和释放

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nImageSize", "pImageBuffer", "nFeatureSize", "pFeatureBuffer"});
        }

        public static class ByReference extends STU_FACE_FEATURE_DATA implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_FEATURE_DATA implements Structure.ByValue {
        }
    }

    ;

    // 人员信息&人脸图片&特征值信息
    public static class STU_PERSON_FACE_FEATURE_INFO extends Structure {
        public byte[] szCertificateType = new byte[64];            // 证件类型
        public byte[] szID = new byte[128];                        // 证件编号
        public int nFaceCount;                                    // 人脸图片数量
        // 人脸图片&特征值数据
        public STU_FACE_FEATURE_DATA[] stuFaceFeatureData = new STU_FACE_FEATURE_DATA[NetDefs.MAX_PERSON_FACE_NUM];
        // 人脸特征值编码类型，0：binary， 1：base64，缺省默认二进， EM_FACE_FEATURE_ENCODE_TYPE
        public int emFeatDataEncodeType;
        public byte[] reserved = new byte[124];                    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szCertificateType", "szID", "nFaceCount",
                    "stuFaceFeatureData", "emFeatDataEncodeType", "reserved"});
        }

        public static class ByReference extends STU_PERSON_FACE_FEATURE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_PERSON_FACE_FEATURE_INFO implements Structure.ByValue {
        }
    }

    ;

    // 人脸 Token 结果
    public static class STU_FACE_TOKEN_RESULT extends Structure {
        public int nResult;                        // 0x00000000 - 入库成功；
        // 0x00090007 - 人员信息导入失败；
        // 0x00090008 - 图片信息导入失败；
        // 0x0009000d - 特征值导入失败；
        // 0x00090009 - 人脸绑定失败；
        // 0x00090001 - 未知错误
        public byte[] szToken = new byte[64];            // 人脸 Token 值
        public byte[] reserved = new byte[16];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nResult", "szToken", "reserved"});
        }

        public static class ByReference extends STU_FACE_TOKEN_RESULT implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_TOKEN_RESULT implements Structure.ByValue {
        }
    }

    ;

    // 人脸图片&特征值信息添加结果信息
    public static class STU_FACE_FEATURE_RESULT extends Structure {
        public int nPersonID;                                // 设备内部生成的人员ID号
        public byte[] szCertificateType = new byte[64];        // 证件类型
        public byte[] szID = new byte[128];                    // 证件编号
        public int nTokenCount;                            // 人脸 Token 数量
        public STU_FACE_TOKEN_RESULT[] stuTokenArr = new STU_FACE_TOKEN_RESULT[NetDefs.MAX_PERSON_FACE_NUM];        // Token 结果
        public byte[] reserved = new byte[128];                // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nPersonID", "szCertificateType", "szID",
                    "nTokenCount", "stuTokenArr", "reserved"});
        }

        public static class ByReference extends STU_FACE_FEATURE_RESULT implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_FEATURE_RESULT implements Structure.ByValue {
        }
    }

    ;

    // 多个人脸图&对应特征值添加输入参数
    public static class STU_MULTI_FACE_FEATURE_ADD_IN_PARAM extends Structure {
        public byte[] szGroupName = new byte[128];    // 底库组名称, 即底库组别名
        public byte[] szVersion = new byte[64];        // 版本信息
        public int nPersonNumber;                    // 添加的人员数量，不能超过
        // 人员信息&人脸图片&特征值信息数组
        public STU_PERSON_FACE_FEATURE_INFO[] stuInfo = new STU_PERSON_FACE_FEATURE_INFO[NetDefs.MAX_PERSON_FACE_FEATURE_NUM];
        public int bNoCreate;                        // 拒绝创建（不必设置，不启用）
        public byte[] reserved = new byte[64];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szGroupName", "szVersion", "nPersonNumber",
                    "stuInfo", "bNoCreate", "reserved"});
        }

        public static class ByReference extends STU_MULTI_FACE_FEATURE_ADD_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_MULTI_FACE_FEATURE_ADD_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    // 多个人脸图&对应特征值添加输出参数
    public static class STU_MULTI_FACE_FEATURE_ADD_OUT_PARAM extends Structure {
        public int nError;                            // 错误码 0-无错误
        public int nResultCount;                    // 实际结果个数
        // 人脸图片&特征值添加结果
        public STU_FACE_FEATURE_RESULT[] stuResult = new STU_FACE_FEATURE_RESULT[NetDefs.MAX_PERSON_FACE_FEATURE_NUM];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nError", "nResultCount", "stuResult"});
        }

        public static class ByReference extends STU_MULTI_FACE_FEATURE_ADD_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_MULTI_FACE_FEATURE_ADD_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    // 7020-多个人脸图&对应特征值添加提交结束参数
    public static class STU_ADD_FEACE_FEATURE_COMMIT_PARAM extends Structure {
        public int bNoCreate;                        // 拒绝创建（不必设置，不启用）
        public byte[] reserved = new byte[64];        // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bNoCreate", "reserved"});
        }

        public static class ByReference extends STU_ADD_FEACE_FEATURE_COMMIT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_ADD_FEACE_FEATURE_COMMIT_PARAM implements Structure.ByValue {
        }
    }

    ;

    //////////////////////////////////////////////////////////////////////////////////////////
    public static class STU_FACE_IMAGE_INFO extends Structure {
        public int nGroupID;                        // 绑定的人脸组ID
        public int nPersonID;                        // 人员ID
        public byte[] szFaceToken = new byte[64];        // 人脸标识符
        public int nState;                            // 人脸状态，0-异常，1-正常, 2-建模失败
        public STU_TIME stTime;                            // 人脸入库时间
        public byte[] reserved = new byte[256];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nGroupID", "nPersonID", "szFaceToken",
                    "nState", "stTime", "reserved"});
        }

        public static class ByReference extends STU_FACE_IMAGE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_IMAGE_INFO implements Structure.ByValue {
        }
    }

    ;

    public static class STU_PERSON_FACE_INFO extends Structure {
        // 人员信息
        public STU_PERSON_INFO stPersonInfo;
        // 人脸图像实际数目，不大于 MAX_PERSON_FACE_NUM
        public int nFaceImageCount;
        // 人脸图像信息数组
        public STU_FACE_IMAGE_INFO[] stFaceImageInfoArr = new STU_FACE_IMAGE_INFO[NetDefs.MAX_PERSON_FACE_NUM];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "stPersonInfo", "nFaceImageCount", "stFaceImageInfoArr"});
        }

        public static class ByReference extends STU_PERSON_FACE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_PERSON_FACE_INFO implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_INFO_FIND_RESULT_OUT_PARAM extends Structure {
        // 结构体大小
        public int dwSize;
        // 错误码，0-无错误
        public int nError;
        // 人员人脸信息数组实际大小，不大于 MAX_ONCE_QUERY_PERSON_NUM
        public int nPersonFaceInfoArrSize;
        // 人员人脸信息数组
        public STU_PERSON_FACE_INFO[] stPersonFaceInfoArr = new STU_PERSON_FACE_INFO[NetDefs.MAX_ONCE_QUERY_PERSON_NUM];

        public STU_FACE_INFO_FIND_RESULT_OUT_PARAM() {
            for (int i = 0; i < stPersonFaceInfoArr.length; i++) {
                stPersonFaceInfoArr[i] = new STU_PERSON_FACE_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "dwSize", "nError", "nPersonFaceInfoArrSize", "stPersonFaceInfoArr"});
        }

        public static class ByReference extends STU_FACE_INFO_FIND_RESULT_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_INFO_FIND_RESULT_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_IMAGE_GET_IN_PARAM extends Structure {
        public int nFindInstance;                    // 查找实例
        public byte[] szFaceToken = new byte[64];        // 人脸标识码
        public byte[] szImageFile = new byte[260];    // 本地图片路径
        public int bEncSend;                        // TRUE - 加密发送；FALSE - 非加密发送
        // 需要设备支持加减密发送
        public byte[] reserved = new byte[56];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nFindInstance", "szFaceToken", "szImageFile", "bEncSend", "reserved"});
        }

        public static class ByReference extends STU_FACE_IMAGE_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_IMAGE_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_IMAGE_GET_OUT_PARAM extends Structure {
        public int dwSize;                            // 结构体大小
        public int nError;                            // 错误码 0-无错误
        public int nImageLength;                    // 人脸图片大小
        public byte[] szImageFile = new byte[260];    // 人脸图片本地路径
        public byte[] reserved = new byte[64];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "dwSize", "nError", "nImageLength", "szImageFile", "reserved"});
        }

        public static class ByReference extends STU_FACE_IMAGE_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_IMAGE_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    // 查找获取人脸库人脸图片输入参数
    public static class STU_FACE_IMAGE_GET_IN_PARAM_EX extends Structure {
        public int nFindInstance;                    // 查找实例
        public byte[] szFaceToken = new byte[64];        // 人脸标识码
        public int nInBufSize;                        // 申请的图片缓存大小，不超过1M
        public int bEncSend;                        // TRUE - 加密发送；FALSE - 非加密发送
        // 需要设备支持加减密发送
        public byte[] reserved = new byte[64];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nFindInstance", "szFaceToken",
                    "nInBufSize", "bEncSend", "reserved"});
        }

        public static class ByReference extends STU_FACE_IMAGE_GET_IN_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_IMAGE_GET_IN_PARAM_EX implements Structure.ByValue {
        }
    }

    ;

    // 查找获取人脸库人脸图片输出参数
    public static class STU_FACE_IMAGE_GET_OUT_PARAM_EX extends Structure {
        public int dwSize;                            // 结构体大小
        public int nError;                            // 错误码 0-无错误
        public Pointer lpOutBuffer;                    // 人脸图片二进制数据，图片缓存需外部申请，大小为nInBufSize
        public int nOutBufSize;                    // 人脸图片数据大小
        public byte[] reserved = new byte[256];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nError",
                    "lpOutBuffer", "nOutBufSize", "reserved"});
        }

        public static class ByReference extends STU_FACE_IMAGE_GET_OUT_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_IMAGE_GET_OUT_PARAM_EX implements Structure.ByValue {
        }
    }

    ;

    public static class STU_PERSON_INFO_GET_BYTOKEN_IN_PARAM extends Structure {
        public int nFindInstance;                    // 查找实例
        public byte[] szFaceToken = new byte[64];        // 人脸标识码
        public int bEncSend;                        // TRUE - 加密发送；FALSE - 非加密发送
        // 需要设备支持加减密发送
        public byte[] reserved = new byte[60];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nFindInstance", "szFaceToken", "bEncSend", "reserved"});
        }

        public static class ByReference extends STU_PERSON_INFO_GET_BYTOKEN_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PERSON_INFO_GET_BYTOKEN_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_PERSON_INFO_GET_BYTOKEN_OUT_PARAM extends Structure {
        public int dwSize;                        // 结构体大小
        public int nError;                        // 错误码 0-无错误
        public STU_PERSON_INFO stPersonInfo;    // 人员信息

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nError", "stPersonInfo"});
        }

        public static class ByReference extends STU_PERSON_INFO_GET_BYTOKEN_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PERSON_INFO_GET_BYTOKEN_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_PERSON_INFO_GET_BYID_IN_PARAM extends Structure {
        public int nFindInstance;                        // 查找实例
        public byte[] szCertificateType = new byte[64];    // 人员证件类型
        public byte[] szID = new byte[128];                // 人员证件号
        public int bEncSend;                            // TRUE - 加密发送；FALSE - 非加密发送
        // 需要设备支持加减密发送
        public byte[] reserved = new byte[12];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nFindInstance", "szCertificateType", "szID",
                    "bEncSend", "reserved"});
        }

        public static class ByReference extends STU_PERSON_INFO_GET_BYID_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PERSON_INFO_GET_BYID_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_PERSON_INFO_GET_BYID_OUT_PARAM extends Structure {
        public int dwSize;                        // 结构体大小
        public int nError;                        // 错误码 0-无错误
        public STU_PERSON_INFO stPersonInfo;    // 人员信息

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nError", "stPersonInfo"});
        }

        public static class ByReference extends STU_PERSON_INFO_GET_BYID_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PERSON_INFO_GET_BYID_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_IMAGE_INFO_GET_IN_PARAM extends Structure {
        public int nFindInstance;                        // 查找实例
        public int nPersonID;                            // 人员ID
        public int bEncSend;                            // TRUE - 加密发送；FALSE - 非加密发送
        // 需要设备支持加减密发送
        public byte[] reserved = new byte[12];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nFindInstance", "nPersonID", "reserved", "reserved"});
        }

        public static class ByReference extends STU_FACE_IMAGE_INFO_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_IMAGE_INFO_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_IMAGE_INFO_GET_OUT_PARAM extends Structure {
        // 结构体大小
        public int dwSize;
        // 错误码，0-无错误
        public int nError;
        // 人脸图像实际数目
        public int nFaceImageCount;
        // 人脸图像信息数组
        public STU_FACE_IMAGE_INFO[] stFaceImageInfoArr = new STU_FACE_IMAGE_INFO[NetDefs.MAX_PERSON_FACE_NUM];

        public STU_FACE_IMAGE_INFO_GET_OUT_PARAM() {
            for (int i = 0; i < stFaceImageInfoArr.length; i++) {
                stFaceImageInfoArr[i] = new STU_FACE_IMAGE_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "dwSize", "nError", "nFaceImageCount", "stFaceImageInfoArr"});
        }

        public static class ByReference extends STU_FACE_IMAGE_INFO_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_IMAGE_INFO_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_PERSON_NAME_CHECK_IN_PARAM extends Structure {
        public int nFindInstance;                // 查找实例
        public byte[] szName = new byte[128];    // 人员名称（不允许带数字后缀）
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nFindInstance", "szName", "reserved"});
        }

        public static class ByReference extends STU_PERSON_NAME_CHECK_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PERSON_NAME_CHECK_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_PERSON_NAME_CHECK_OUT_PARAM extends Structure {
        public int dwSize;        // 结构体大小
        public int nError;        // 错误码，0-无错误
        public int nSuffix;    // 0 表示无重名，其它表示建议后缀
        // 如果 WH,WH1,WH2, 1和2就是建议后缀

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "dwSize", "nError", "nSuffix"});
        }

        public static class ByReference extends STU_PERSON_NAME_CHECK_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PERSON_NAME_CHECK_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_RECOGNIZE_STATIC_IN_PARAM extends Structure {
        public int nGroupID;                            // 比对的人脸底库 ID
        public byte[] szFaceImagePath = new byte[260];    // 需比对的人脸图路径
        public byte[] reserved = new byte[256];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nGroupID", "szFaceImagePath", "reserved"});
        }

        public static class ByReference extends STU_FACE_RECOGNIZE_STATIC_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_RECOGNIZE_STATIC_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_REC_STATIC_DETAIL extends Structure {
        public float fSearchScore;                    // 人脸相似度 [0-100], 值越大相似度越高
        public float fSearchThreshold;                // 人脸相似度阈值 [0-100]
        public float fLivenessScore;                // 活体检测得分 [0-100]
        public float fLivenessThreshold;            // 活体检测阈值 [0-100]
        public byte[] szFaceToken = new byte[64];    // 比对成功的底库人脸图片标识码
        public byte[] reseved1 = new byte[64];        // 保留位1
        public STU_PERSON_INFO stPersonInfo;        // 人员信息
        public byte[] reseved2 = new byte[256];        // 保留位2

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "fSearchScore", "fSearchThreshold", "fLivenessScore",
                    "fLivenessThreshold", "szFaceToken", "reseved1",
                    "stPersonInfo", "reseved2"});
        }

        public static class ByReference extends STU_FACE_REC_STATIC_DETAIL implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_REC_STATIC_DETAIL implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_RECOGNIZE_STATIC_OUT_PARAM extends Structure {
        public int dwSize;                            // 结构体大小
        public int nError;                            // 错误码，0-无错误
        public int bResult;                        // 比对结果, TRUE-成功；FALSE-失败
        public int nRealDetailCount;                // 实际详细信息数
        // 璇︾粏淇℃伅缁撴灉鏁扮粍
        public STU_FACE_REC_STATIC_DETAIL[] stDetails = new STU_FACE_REC_STATIC_DETAIL[NetDefs.MAX_FACE_REC_STATIC_DETAIL_NUM];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "dwSize", "nError", "bResult", "nRealDetailCount", "stDetails"});
        }

        public static class ByReference extends STU_FACE_RECOGNIZE_STATIC_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_RECOGNIZE_STATIC_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_REC_REC_FIND_CONDITION extends Structure {
        public int nGroupID;                        // 人脸组 ID, 0 表示无效
        public int nRecNo;                            // 人脸比对数据库主键号， -1 表示无效
        public short nPass;                            // 人脸识别通过标志位
        // -1 表示查询所有
        // 0 表示查询识别不通过的类型
        // 1 表示查询识别通过的类型
        public byte[] reserved1 = new byte[2];        // 保留参数1
        public int nObjectID;                        // 物体 ID, 0 表示无效
        public STU_TIME stMinTime;                        // 查询时间范围下限，年份为 0 时无效
        public STU_TIME stMaxTime;                        // 查询时间范围上限，年份为 0 时无效
        byte[] reserved2 = new byte[16];        // 保留参数2

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nGroupID", "nRecNo", "nPass", "reserved1", "nObjectID",
                    "stMinTime", "stMaxTime", "reserved2"});
        }

        public static class ByReference extends STU_FACE_REC_REC_FIND_CONDITION implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_REC_REC_FIND_CONDITION implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_REC_REC_FIND_IN_PARAM extends Structure {
        public int nFindInstance;                    // 记录查找实例
        public STU_FACE_REC_REC_FIND_CONDITION stCondition;    // 查询条件
        public byte[] reserved = new byte[64];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nFindInstance", "stCondition", "reserved"});
        }

        public static class ByReference extends STU_FACE_REC_REC_FIND_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_REC_REC_FIND_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_REC_REC_FIND_OUT_PARAM extends Structure {
        public int dwSize;                    // 结构体大小
        public int nError;                    // 错误码，0-无错误
        public int nFindHandle;            // 人脸识别记录查找句柄
        public byte[] reserved = new byte[16];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "dwSize", "nError", "nFindHandle", "reserved"});
        }

        public static class ByReference extends STU_FACE_REC_REC_FIND_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_REC_REC_FIND_OUT_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_REC_REC_FIND_RESULT_IN_PARAM extends Structure {
        public int nFindInstance;                // 记录查找实例
        public short nOffset;                    // 查询结果偏移
        public short nCount;                        // 期望查询到的结果条数
        // 不超过 128
        public byte[] reserved = new byte[16];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nFindInstance", "nOffset", "nCount", "reserved"});
        }

        public static class ByReference extends STU_FACE_REC_REC_FIND_RESULT_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_REC_REC_FIND_RESULT_IN_PARAM implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_RECOGNIZE_RESULT extends Structure {
        public int nResultRecNo;                        // 人脸比对结果记录编号
        public float fSearchScore;                        // 人脸相似度 [0-100], 值越大相似度越高
        public float fSearchThreshold;                    // 人脸相似度阈值 [0-100]
        public float fLivenessScore;                        // 活体检测得分 [0-100]
        public float fLivenessThreshold;                    // 活体检测阈值 [0-100]
        public byte[] szFaceToken = new byte[64];            // 比对成功的底库人脸图片标识码
        public byte[] szCertificateType = new byte[64];    // 证件类型
        public byte[] szID = new byte[128];                // 证件 ID
        public byte[] reserved = new byte[128];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nResultRecNo", "fSearchScore", "fSearchThreshold",
                    "fLivenessScore", "fLivenessThreshold", "szFaceToken",
                    "szCertificateType", "szID", "reserved"});
        }

        public static class ByReference extends STU_FACE_RECOGNIZE_RESULT implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_RECOGNIZE_RESULT implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_RECOGNIZE_RECORD_INFO extends Structure {
        public int nRecNo;                            // 识别记录编号
        public int nGroupID;                        // 人脸组 ID
        public short nPass;                            // 是否识别通过 -1 表示获取异常 0-正常比对不通过 1-正常比对通过 2-活体比对不通过
        public byte[] reserved1 = new byte[2];        // 保留参数1
        public byte[] szImagePath = new byte[260];    // 设备端识别图片存储路径
        public STU_TIME stTime;                            // 识别比对时间
        public int nObjectID;                        // 物体 ID
        public byte[] reserved2 = new byte[60];        // 保留参数2
        public int nResultCount;                    // 人脸比对结果数目
        public STU_FACE_RECOGNIZE_RESULT[] stResultArr = new STU_FACE_RECOGNIZE_RESULT[NetDefs.MAX_FACE_REC_RESULT_NUM];    // 人脸识别结果信息数组
        public byte[] reserved3 = new byte[128];        // 保留参数3

        public STU_FACE_RECOGNIZE_RECORD_INFO() {
            for (int i = 0; i < stResultArr.length; i++) {
                stResultArr[i] = new STU_FACE_RECOGNIZE_RESULT();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nRecNo", "nGroupID", "nPass",
                    "reserved1", "szImagePath", "stTime",
                    "nObjectID", "reserved2", "nResultCount",
                    "stResultArr", "reserved3"});
        }

        public static class ByReference extends STU_FACE_RECOGNIZE_RECORD_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_RECOGNIZE_RECORD_INFO implements Structure.ByValue {
        }
    }

    ;

    public static class STU_FACE_REC_REC_FIND_RESULT_OUT_PARAM extends Structure {
        // 结构体大小
        public int dwSize;
        // 错误码，0-无错误
        public int nError;
        // 实际查询到的记录条数
        public short nRecordCount;
        // 人脸比对记录信息数组
        public STU_FACE_RECOGNIZE_RECORD_INFO[] stRecordInfoArr = new STU_FACE_RECOGNIZE_RECORD_INFO[NetDefs.MAX_ONCE_QUERY_FACE_REC_REC_NUM];

        public STU_FACE_REC_REC_FIND_RESULT_OUT_PARAM() {
            for (int i = 0; i < stRecordInfoArr.length; i++) {
                stRecordInfoArr[i] = new STU_FACE_RECOGNIZE_RECORD_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "dwSize", "nError", "nRecordCount", "stRecordInfoArr"});
        }

        public static class ByReference extends STU_FACE_REC_REC_FIND_RESULT_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FACE_REC_REC_FIND_RESULT_OUT_PARAM implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //文件信息
    public static class STU_FILE_DOWNLOAD_PARAM extends Structure {
        public int dwSize;
        public int dwFileID;                            // 文件ID
        public int nFileSize;                            // 查询到的文件大小
        public byte[] szSourceFilePath = new byte[260];    // 查询到的文件路径
        public byte[] szSavedFileName = new byte[260];    // 文件保存路径

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "dwSize", "dwFileID", "nFileSize", "szSourceFilePath", "szSavedFileName"});
        }

        public static class ByReference extends STU_FILE_DOWNLOAD_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_FILE_DOWNLOAD_PARAM implements Structure.ByValue {
        }
    }

    // 按文件下载输入参数
    public static class STU_IN_MULTI_FILE_DOWNLOAD_PARAM extends Structure {
        public int dwSize;
        public int nFileCount;                // 待下载文件数
        public Pointer pFileInfos;                // 待下载文件信息, STU_FILE_DOWNLOAD_PARAM
        public NetDelegates.fMultiFileDownLoadPosCallBack cbPosCallBack;            // 进度回调函数
        public LLONG dwUserData;                // 用户数据

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "dwSize", "nFileCount", "pFileInfos", "cbPosCallBack", "dwUserData"});
        }

        public static class ByReference extends STU_IN_MULTI_FILE_DOWNLOAD_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_IN_MULTI_FILE_DOWNLOAD_PARAM implements Structure.ByValue {
        }
    }

    // 按文件下载输出参数
    public static class STU_OUT_MULTI_FILE_DOWNLOAD_PARAM extends Structure {
        public int dwSize;
        public LLONG lDownLoadHandle;    // 下载句柄

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "dwSize", "lDownLoadHandle"});
        }

        public static class ByReference extends STU_OUT_MULTI_FILE_DOWNLOAD_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_OUT_MULTI_FILE_DOWNLOAD_PARAM implements Structure.ByValue {
        }
    }

    // 按时间下载输入参数
    public static class STU_IN_MULTI_FILE_DOWNLOAD_BY_TIME_PARAM extends Structure {
        public int nChannel;                                                    // 通道号
        public STU_TIME stStartTime;                                                // 开始时间
        public STU_TIME stEndTime;                                                    // 结束时间
        public int emVStreamType;                                                // 码流类型, EM_VIDEO_STREAM_TYPE
        public int nVRecTypeCount;                                                // 实际需要查询的类型数量，最大MAX_V_REC_TYPE_COUNT个
        public int[] emVRecTypes = new int[NetDefs.MAX_V_REC_TYPE_COUNT];        // 录像文件类型，每种类型指定一次即可, EM_VIDEO_RECORD_TYPE
        public NetDelegates.fMultiFileDownLoadByTimePosCallBack cbPosCallBack;                                                // 进度回调函数
        public byte[] szSavePath = new byte[NetDefs.MAX_PATH];                    // 录像文件保存路径，需结合 'bMultiDownload' 字段使用
        // 多文件下载时 - 指定到文件夹，需保证文件夹路径存在
        // 单文件下载时 - 指定到文件名，文件自动创建
        public NativeLong dwUserData;                                                    // 用户数据
        public int bMultiDownload;                                                // 是否按多文件下载，TRUE-多文件，FALSE-单文件
        public byte[] reserved = new byte[128];                                    // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "stStartTime", "stEndTime",
                    "emVStreamType", "nVRecTypeCount", "emVRecTypes", "cbPosCallBack",
                    "szSavePath", "dwUserData", "bMultiDownload", "reserved"});
        }

        public static class ByReference extends STU_IN_MULTI_FILE_DOWNLOAD_BY_TIME_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_IN_MULTI_FILE_DOWNLOAD_BY_TIME_PARAM implements Structure.ByValue {
        }
    }

    // 按时间下载输出参数
    public static class STU_OUT_MULTI_FILE_DOWNLOAD_BY_TIME_PARAM extends Structure {
        public int dwSize;
        public LLONG lDownLoadHandle;                    // 下载句柄

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "lDownLoadHandle"});
        }

        public static class ByReference extends STU_OUT_MULTI_FILE_DOWNLOAD_BY_TIME_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_OUT_MULTI_FILE_DOWNLOAD_BY_TIME_PARAM implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 当前下载文件结构化信息
    public static class STU_MULTI_DOWNLOAD_PROC_FILE_INFO extends Structure {
        // 当前正在下载的文件的索引，从0开始
        public int dwFileID;
        // 当前正在下载的文件的总数据大小
        public int dwFileTotalSize;
        // 当前正在下载的文件已下载的数据大小
        public int dwDownLoadSize;
        // 当前数据，回调结束buffer会被清除，请注意保存, BYTE*
        public Pointer lpBuffer;
        // 当前数据大小
        public int nBufLen;
        // 保留字节
        public byte[] reserved = new byte[1024];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwFileID", "dwFileTotalSize", "dwDownLoadSize",
                    "lpBuffer", "nBufLen", "reserved"});
        }

        public static class ByReference extends STU_MULTI_DOWNLOAD_PROC_FILE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_MULTI_DOWNLOAD_PROC_FILE_INFO implements Structure.ByValue {
        }
    }

    // 录像下载Ex
    // 文件信息Ex
    public static class STU_FILE_DOWNLOAD_PARAM_EX extends Structure {
        public int dwSize;
        public int dwFileID;                            // 文件ID
        public int nFileSize;                            // 查询到的文件大小
        public byte[] szSourceFilePath = new byte[NetDefs.MAX_PATH];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "dwFileID", "nFileSize", "szSourceFilePath"});
        }

        public static class ByReference extends STU_FILE_DOWNLOAD_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_FILE_DOWNLOAD_PARAM_EX implements Structure.ByValue {
        }
    }

    // 按文件下载输入参数Ex
    public static class STU_IN_MULTI_FILE_DOWNLOAD_PARAM_EX extends Structure {
        public int dwSize;
        public int nFileCount;                // 待下载文件数
        public Pointer pFileInfos;                // 待下载文件信息, STU_FILE_DOWNLOAD_PARAM_EX*
        public NetDelegates.fMultiFileDownLoadPosCallBackEx cbPosCallBack;            // 进度回调函数
        public LLONG dwUserData;                // 用户数据

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nFileCount", "pFileInfos", "cbPosCallBack", "dwUserData"});
        }

        public static class ByReference extends STU_IN_MULTI_FILE_DOWNLOAD_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_IN_MULTI_FILE_DOWNLOAD_PARAM_EX implements Structure.ByValue {
        }
    }

    // 按文件下载输出参数Ex
    public static class STU_OUT_MULTI_FILE_DOWNLOAD_PARAM_EX extends Structure {
        public int dwSize;
        public LLONG lDownLoadHandle;    // 下载句柄

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "lDownLoadHandle"});
        }

        public static class ByReference extends STU_OUT_MULTI_FILE_DOWNLOAD_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_OUT_MULTI_FILE_DOWNLOAD_PARAM_EX implements Structure.ByValue {
        }
    }

    // 按时间下载输入参数Ex
    public static class STU_IN_MULTI_FILE_DOWNLOAD_BY_TIME_PARAM_EX extends Structure {
        public int nChannel;                                                    // 通道号
        public STU_TIME stStartTime;                                                // 开始时间
        public STU_TIME stEndTime;                                                    // 结束时间
        public int emVStreamType;                                                // 码流类型, EM_VIDEO_STREAM_TYPE
        public int nVRecTypeCount;                                                // 实际需要查询的类型数量，最大MAX_V_REC_TYPE_COUNT个
        public int[] emVRecTypes = new int[NetDefs.MAX_V_REC_TYPE_COUNT];        // 录像文件类型，每种类型指定一次即可, EM_VIDEO_RECORD_TYPE
        public NetDelegates.fMultiFileDownLoadByTimePosCallBackEx cbPosCallBack;                                                // 进度回调函数
        public NativeLong dwUserData;                                                    // 用户数据
        public byte[] reserved = new byte[128];                                    // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "stStartTime", "stEndTime",
                    "emVStreamType", "nVRecTypeCount", "emVRecTypes", "cbPosCallBack",
                    "dwUserData", "reserved"});
        }

        public static class ByReference extends STU_IN_MULTI_FILE_DOWNLOAD_BY_TIME_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_IN_MULTI_FILE_DOWNLOAD_BY_TIME_PARAM_EX implements Structure.ByValue {
        }
    }

    // 按时间下载输出参数Ex
    public static class STU_OUT_MULTI_FILE_DOWNLOAD_BY_TIME_PARAM_EX extends Structure {
        public int dwSize;
        public LLONG lDownLoadHandle;    // 下载句柄

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "lDownLoadHandle"});
        }

        public static class ByReference extends STU_OUT_MULTI_FILE_DOWNLOAD_BY_TIME_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_OUT_MULTI_FILE_DOWNLOAD_BY_TIME_PARAM_EX implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 单个文件上传参数
    public static class STU_UPLOAD_FILE_PARAM extends Structure {
        // 文件上传路径, 必须为"/mnt/mtd/Advertisement/", "/mnt/facedb/standby/picture/", "/mnt/facedb/standby/movie/"三个目录之一
        public byte[] szDirPath = new byte[NetDefs.MAX_PATH];
        // 文件名
        public byte[] szFileName = new byte[128];
        // 文件缓存
        public Pointer lpBuffer;
        // 文件缓存字节数
        public int nBufferLen;

        // 进度回调函数
        public NetDelegates.fFileUploadPosCallBack cbPosCallBack;
        // 用户数据
        public LONG dwUserData;

        // 保留参数
        public byte[] reserved = new byte[256];

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szDirPath", "szFileName", "szFileName",
                    "nBufferLen", "cbPosCallBack", "dwUserData", "reserved"});
        }

        public static class ByReference extends STU_UPLOAD_FILE_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_UPLOAD_FILE_PARAM implements Structure.ByValue {
        }
    }

    // 删除文件参数
    public static class STU_REMOVE_FILE_PARAM extends Structure {
        // 需要删除的文件信息条件, STU_FILE_INFO[]数组
        public Pointer pFileInfos;
        // 需要删除的文件数量
        public int nFileCount;
        // 保留参数
        public byte[] reserved = new byte[256];

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"pFileInfos", "nFileCount", "reserved"});
        }

        public static class ByReference extends STU_REMOVE_FILE_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_REMOVE_FILE_PARAM implements Structure.ByValue {
        }
    }

    // 文件类型筛选
    public static class STU_FILE_FILTER extends Structure {
        // 后缀名 .jpg, .h264
        public byte[] szExt = new byte[32];
        // 保留参数
        public byte[] reserved = new byte[256];

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szExt", "reserved"});
        }

        public static class ByReference extends STU_FILE_FILTER implements Structure.ByReference {
        }

        public static class ByValue extends STU_FILE_FILTER implements Structure.ByValue {
        }
    }

    // 文件预查找输入参数
    public static class STU_PRE_FIND_FILES_IN_PARAM extends Structure {
        // 文件目录
        public byte[] szDirPath = new byte[NetDefs.MAX_PATH];
        // 文件筛选信息
        public STU_FILE_FILTER[] stFilters = new STU_FILE_FILTER[NetDefs.MAX_FILE_FILTER_COUNT];
        // 保留参数
        public byte[] reserved = new byte[256];

        public STU_PRE_FIND_FILES_IN_PARAM() {
            for (int i = 0; i < stFilters.length; i++) {
                stFilters[i] = new STU_FILE_FILTER();
            }
        }

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szDirPath", "stFilters", "reserved"});
        }

        public static class ByReference extends STU_PRE_FIND_FILES_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PRE_FIND_FILES_IN_PARAM implements Structure.ByValue {
        }
    }

    // 文件预查找输出参数
    public static class STU_PRE_FIND_FILES_OUT_PARAM extends Structure {
        // 查找到的文件数量
        public int nFileCount;
        // 保留参数
        public byte[] reserved = new byte[256];

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nFileCount", "reserved"});
        }

        public static class ByReference extends STU_PRE_FIND_FILES_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PRE_FIND_FILES_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 单个文件下载信息
    public static class STU_DOWNLOAD_FILE_PARAM extends Structure {
        // 文件名 - 全路径
        public byte[] szFileName = new byte[NetDefs.MAX_PATH];
        // 本地保存路径 - 路径为空时不保存
        public byte[] szSaveName = new byte[NetDefs.MAX_PATH];
        // 进度回调函数 - 返回接收到的数据
        public NetDelegates.fFileDownloadPosCallBack cbPosCallBack;
        // 用户数据
        public LONG dwUserData;
        // 保留参数
        public byte[] reserved = new byte[128];

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szFileName", "szSaveName", "cbPosCallBack",
                    "dwUserData", "reserved"});
        }

        public static class ByReference extends STU_DOWNLOAD_FILE_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOWNLOAD_FILE_PARAM implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //修改用户时.只支持修改备注信息和用户级别,不支持修改用户名和密码
    public static class STU_CFG_USER_INFO extends Structure {
        public int nUserLevel;                    // 用户级别，0是管理员,1是操作者,2是普通用户,管理员无法删除
        public byte[] cUserName = new byte[32];    // 用户名
        public byte[] cPassword = new byte[32];    // 密码
        public byte[] cComment = new byte[32];    // 备注信息
        public byte[] reserved = new byte[16];

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nUserLevel", "cUserName", "cPassword", "cComment", "reserved"});
        }

        public static class ByReference extends STU_CFG_USER_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_USER_INFO implements Structure.ByValue {
        }
    }

    // 获取用户信息
    public static class STU_CFG_USER_GET extends Structure {
        public int uCount;                                            // 需要获取的个数
        public int uOffset;                                        // 查询起始偏移
        public int uActualCount;                                    // 实际获取到的数量
        public STU_CFG_USER_INFO[] stuUserInfo = new STU_CFG_USER_INFO[NetDefs.MAX_DEVICE_USER_ACCOUNT_NUM];        // 信息列表，一次最多可查找10个

        public STU_CFG_USER_GET() {
            for (int i = 0; i < stuUserInfo.length; i++) {
                stuUserInfo[i] = new STU_CFG_USER_INFO();
            }
        }

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uCount", "uOffset", "uActualCount", "stuUserInfo"});
        }

        public static class ByReference extends STU_CFG_USER_GET implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_USER_GET implements Structure.ByValue {
        }
    }

    //用于设置用户
    public static class STU_CFG_USER_SET extends Structure {
        public byte bOperType;                    // 1:增加,2:删除,3:修改
        public byte[] reserved = new byte[3];        // 保留位
        public STU_CFG_USER_INFO stuUserInfo;

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "bOperType", "reserved", "stuUserInfo"});
        }

        public static class ByReference extends STU_CFG_USER_SET implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_USER_SET implements Structure.ByValue {
        }
    }

    // 用于增加用户
    public static class STU_CFG_ADD_USER extends Structure {
        public int nUserLevel;                    // 用户级别，0是管理员,1是操作者,2是普通用户,管理员无法删除
        public byte[] cUserName = new byte[32];    // 用户名
        public byte[] cPassword = new byte[32];    // 密码
        public byte[] cComment = new byte[32];    // 备注信息
        public byte[] reserved = new byte[64];    // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nUserLevel", "cUserName", "cPassword", "cComment", "reserved"});
        }

        public static class ByReference extends STU_CFG_ADD_USER implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ADD_USER implements Structure.ByValue {
        }
    }

    // 用于删除用户
    public static class STU_CFG_DELETE_USER extends Structure {
        public byte[] cUserName = new byte[32];    // 用户名
        public byte[] reserved = new byte[32];    // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"cUserName", "reserved"});
        }

        public static class ByReference extends STU_CFG_DELETE_USER implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_DELETE_USER implements Structure.ByValue {
        }
    }

    // 用于修改用户
    public static class STU_CFG_MODIFY_USER extends Structure {
        public int nUserLevel;                        // 用户级别，0是管理员,1是操作者,2是普通用户,管理员无法删除
        public byte[] cComment = new byte[32];        // 备注信息
        public byte[] cUserName = new byte[32];        // 用户名
        public byte[] cOldPassword = new byte[32];    // 密码
        public byte[] cNewPassword = new byte[32];    // 新的密码
        public byte[] reserved = new byte[64];        // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nUserLevel", "cComment", "cUserName", "cOldPassword", "cNewPassword", "reserved"});
        }

        public static class ByReference extends STU_CFG_MODIFY_USER implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_MODIFY_USER implements Structure.ByValue {
        }
    }

    // 单条在线用户信息
    public static class STU_CFG_USER_ONLINE_ITEM extends Structure {
        public int nUserLevel;
        public byte[] cClientAddr = new byte[64];
        public byte[] cClientType = new byte[32];
        public byte[] cLoginTime = new byte[32];
        public byte[] cUserName = new byte[32];
        public byte[] reserved = new byte[16];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{
                    "nUserLevel", "cClientAddr", "cClientType", "cLoginTime", "cUserName", "reserved"});
        }

        public static class ByReference extends STU_CFG_USER_ONLINE_ITEM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_USER_ONLINE_ITEM implements Structure.ByValue {
        }
    }

    // 所有在线用户信息
    public static class STU_CFG_USER_ONLINE_ITEMS extends Structure {
        public int uCount;                                                // 需要获取的个数
        public int uOffset;                                            // 查询起始偏移
        public int uActualCount;                                        // 实际获取到的数量
        public STU_CFG_USER_ONLINE_ITEM[] stuUserInfo = new STU_CFG_USER_ONLINE_ITEM[NetDefs.MAX_DEVICE_ONLINE_USER_NUM];        // 信息列表，一次最多可查找10个

        public STU_CFG_USER_ONLINE_ITEMS() {
            for (int i = 0; i < stuUserInfo.length; i++) {
                stuUserInfo[i] = new STU_CFG_USER_ONLINE_ITEM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uCount", "uOffset", "uActualCount", "stuUserInfo"});
        }

        public static class ByReference extends STU_CFG_USER_ONLINE_ITEMS implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_USER_ONLINE_ITEMS implements Structure.ByValue {
        }
    }

    // 文件信息
    public static class STU_T_FILE extends Structure {
        // 通道号
        public int channel;
        // 文件名
        public byte[] filename = new byte[240];
        // 文件大小
        public int size;
        // 开始时间
        public STU_TIME starttime;
        // 结束时间
        public STU_TIME endtime;
        // 抓拍时间
        public STU_TIME snaptime;
        // 文件类型,EM_ST_FILE_TYPE
        public int filetype;
        // 视频码流类型,EM_VIDEO_STREAM_TYPE
        public int emVStreamType;
        // 事件信息，Json格式数组
        public Pointer pEvents;
        // 预留位
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"channel", "filename",
                    "size", "starttime", "endtime", "snaptime",
                    "filetype", "emVStreamType", "pEvents", "reserved"});
        }

        public static class ByReference extends STU_T_FILE implements Structure.ByReference {
        }

        public static class ByValue extends STU_T_FILE implements Structure.ByValue {
        }
    }

    // 按时间回放
    public static class STU_RECORD_BY_TIME extends Structure {
        // 通道号
        public int channel;
        // 开始时间
        public STU_TIME starttime;
        // 结束时间
        public STU_TIME endtime;
        // 视频码流类型, EM_VIDEO_STREAM_TYPE
        public int emVStreamType;
        // 事件信息数量
        public int nEventCount;
        // 事件信息, EM_VIDEO_RECORD_TYPE
        public int[] emEventTypes = new int[NetDefs.MAX_V_REC_TYPE_COUNT];
        // 预留位
        public byte[] reserved = new byte[256];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"channel", "starttime", "endtime",
                    "emVStreamType", "nEventCount", "emEventTypes", "reserved"});
        }

        public static class ByReference extends STU_RECORD_BY_TIME implements Structure.ByReference {
        }

        public static class ByValue extends STU_RECORD_BY_TIME implements Structure.ByValue {
        }
    }

    // 回放进度信息
    public static class STU_PLAY_BACK_POS_INFO extends Structure {
        // 回放总时长，单位s
        public int nTotalPlaybackTime;
        // 当前回放秒数，单位s，-1表示结束
        public int nCurPlaybackTime;
        // 保留字节
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nTotalPlaybackTime", "nCurPlaybackTime", "reserved"});
        }

        public static class ByReference extends STU_PLAY_BACK_POS_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_PLAY_BACK_POS_INFO implements Structure.ByValue {
        }
    }

    public static class STU_UPGRADE_PROGRESS_INFO extends Structure {
        // 设备端升级的进度
        public int nProgress;
        // 设备状态描述
        public byte[] szStatus = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nProgress", "szStatus"});
        }

        public static class ByReference extends STU_UPGRADE_PROGRESS_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_UPGRADE_PROGRESS_INFO implements Structure.ByValue {
        }
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////
    public static class STU_CB_AUTO_REGISTER_INFO extends Structure {
        public int dwSize;
        public byte[] szDevSerial = new byte[64];                        // 序列号
        public byte[] szToken = new byte[NetDefs.MAX_PATH];             // 令牌

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "szDevSerial", "szToken"});
        }

        public static class ByReference extends STU_CB_AUTO_REGISTER_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_CB_AUTO_REGISTER_INFO implements Structure.ByValue {
        }
    }

    // 公网代理注册相关结构体
    public static class STU_CLOUD_SERVICE_CONNECT_PARAM extends Structure {
        public int dwSize;
        public byte[] szDstIp = new byte[64];                    // 服务器IP
        public int nDstPort;                                    // 服务器端口号
        public int dwConnectType;                            // 连接类型：0 主连接
        public byte[] szToken = new byte[NetDefs.MAX_PATH];        // 设备通道唯一ID令牌

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "szDstIp", "nDstPort", "dwConnectType", "szToken"});
        }

        public static class ByReference extends STU_CLOUD_SERVICE_CONNECT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CLOUD_SERVICE_CONNECT_PARAM implements Structure.ByValue {
        }
    }

    public static class STU_CLOUD_SERVICE_CONNECT_RESULT extends Structure {
        public int dwSize;
        public int dwConnectState;                        // 当前连接状态：1成功，0失败
        public byte[] szMessage = new byte[128];            // 连接状态信息

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "dwConnectState", "szMessage"});
        }

        public static class ByReference extends STU_CLOUD_SERVICE_CONNECT_RESULT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CLOUD_SERVICE_CONNECT_RESULT implements Structure.ByValue {
        }
    }

    // 设备信息
    public static class STU_DEVICE_INFO extends Structure {
        public byte[] szSerialNumber = new byte[64];            // 序列号
        public byte[] reserved = new byte[532];                // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szSerialNumber", "reserved"});
        }

        public static class ByReference extends STU_DEVICE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_DEVICE_INFO implements Structure.ByValue {
        }
    }

    // 修改设备配置返回信息
    public static class STU_DEVICE_SET_RESULT extends Structure {
        public int nType;                        // 类型
        public int nResultCode;                // 返回码；0：成功，1：失败，2：数据不合法，3：暂时无法设置，4：没有权限
        public int nRebootFlag;                // 重启标志；0：不需要重启，1：需要重启才生效
        public byte[] reserved = new byte[16];    // 保留

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nType", "nResultCode", "nRebootFlag", "reserved"});
        }

        public static class ByReference extends STU_DEVICE_SET_RESULT implements Structure.ByReference {
        }

        public static class ByValue extends STU_DEVICE_SET_RESULT implements Structure.ByValue {
        }
    }

    // 请求监视或回放的错误返回信息
    public static class STU_DEVICE_PLAY_RESULT extends Structure {
        public int dwResultCode;               // 错误返回码
        public LLONG lPlayHandle;                // 相应句柄值
        public byte[] reserved = new byte[64];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwResultCode", "lPlayHandle", "reserved"});
        }

        public static class ByReference extends STU_DEVICE_PLAY_RESULT implements Structure.ByReference {
        }

        public static class ByValue extends STU_DEVICE_PLAY_RESULT implements Structure.ByValue {
        }
    }

    // 请求语音对讲的错误返回信息
    public static class STU_DEVICE_TALK_RESULT extends Structure {
        public int dwResultCode;               // 错误返回码
        public LLONG lTalkHandle;                // 相应句柄值
        public byte[] reserved = new byte[64];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwResultCode", "lTalkHandle", "reserved"});
        }

        public static class ByReference extends STU_DEVICE_TALK_RESULT implements Structure.ByReference {
        }

        public static class ByValue extends STU_DEVICE_TALK_RESULT implements Structure.ByValue {
        }
    }

    // 串口基本属性
    public static class STU_SERIAL_PORT_ATTRIBUTE extends Structure {
        public int nType;
        public byte[] szName = new byte[32];
        public int nDataBit;                    // 数据位；0：5，1：6，2：7，3：8
        public int nStopBit;                    // 停止位；0：1位，1：1.5位，2：2位
        public int nParity;                    // 校验位；0：无校验，1：奇校验；2：偶校验; 3:标志校验; 4:空校验
        public int nBaudRate;                    // 波特率
        public byte[] reserved = new byte[32];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nType", "szName", "nDataBit",
                    "nStopBit", "nParity", "nBaudRate", "reserved"});
        }

        public static class ByReference extends STU_SERIAL_PORT_ATTRIBUTE implements Structure.ByReference {
        }

        public static class ByValue extends STU_SERIAL_PORT_ATTRIBUTE implements Structure.ByValue {
        }
    }

    // 网络登入参数
    public static class STU_NET_PARAM extends Structure {
        public int nNetworkType;                           // 网络类型, 0-LAN, 1-WAN
        public int nLoginTimeout;                            // 登入时的等待超时时间(ms)，默认 5000 ms
        public int nConnectTimeout;                        // 连接等待超时时间(ms)，默认 2000 ms
        public int nConnectTryNum;                         // 连接尝试次数，默认1次
        public int nSubConnectTimespan;                    // 子连接之间的等待时间(ms)，默认 10 ms
        public int nGetDevInfoTimeout;                        // 获取设备信息超时时间(ms)，默认 2000 ms
        public int nGetSubConnInfoTimeout;                    // 获取子连接信息超时时间(ms)，为 0 默认 1000 ms
        public int nSearchRecordTimeout;                    // 按时间查询录像文件的超时时间(ms),为0默认为 3000 ms
        public int nDetectSubDisconnTimespan;                // 检测子链接断线等待时间(ms)，为0默认为 60 * 1000 ms
        public int nConnectBufSize;                        // 每个连接接收数据缓冲大小(Byte)，为 0 默认 1 * 1024 * 1024
        public int nPicBufSize;                            // 实时图片接收缓冲大小(Byte)，为 0 默认为 2 * 1024 * 1024
        public int nPlaybackBufSize;                        // 回放数据接收缓冲大小(MB)，为 0 默认为 2M
        public byte[] reserved = new byte[128];                // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nNetworkType", "nLoginTimeout", "nConnectTimeout",
                    "nConnectTryNum", "nSubConnectTimespan", "nGetDevInfoTimeout", "nGetSubConnInfoTimeout",
                    "nSearchRecordTimeout", "nDetectSubDisconnTimespan", "nConnectBufSize", "nPicBufSize",
                    "nPlaybackBufSize", "reserved"});
        }

        public static class ByReference extends STU_NET_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_NET_PARAM implements Structure.ByValue {
        }
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////
    public static class STU_SEARCH_NETCARD extends Structure {
        public int valid;                                    // 是否有效
        public byte[] szName = new byte[32];                    // 网卡名称
        public byte[] szMac = new byte[40];                    // 网卡物理Mac地址
        public byte[] reserved1 = new byte[64];                // 保留位
        public byte[] IPv4_Address = new byte[16];            // IPv4 地址
        public byte[] IPv4_SubnetMask = new byte[16];            // IPv4 子网掩码
        public byte[] IPv4_DefaultGateway = new byte[16];        // IPv4 默认网关
        public int IPv4_DhcpEnable;                        // IPv4 DHCP 使能位
        public byte[] IPv6_Address = new byte[64];            // IPv6 地址
        public byte[] IPv6_SubnetMask = new byte[64];            // IPv6 子网掩码
        public byte[] IPv6_DefaultGateway = new byte[64];        // IPv6 默认网关
        public int IPv6_DhcpEnable;                        // IPv6 DHCP 使能位
        public byte[] reserved2 = new byte[128];                // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"valid", "szName", "szMac",
                    "reserved1", "IPv4_Address", "IPv4_SubnetMask", "IPv4_SubnetMask", "IPv4_DefaultGateway",
                    "IPv4_DhcpEnable", "IPv6_Address", "IPv6_SubnetMask", "IPv6_DefaultGateway", "IPv6_DhcpEnable",
                    "reserved2"});
        }

        public static class ByReference extends STU_SEARCH_NETCARD implements Structure.ByReference {
        }

        public static class ByValue extends STU_SEARCH_NETCARD implements Structure.ByValue {
        }
    }

    public static class STU_DEVICE_SEARCH_INFO extends Structure {
        public int nProtocolType;                                // 搜索协议类型
        // 0 - 第一代； 1 - 第二代
        public int bActivated;                                    // 是否已激活，1 true，0 false
        public byte[] szDeviceClass = new byte[64];                // 设备类别
        public byte[] szDeviceType = new byte[64];                // 设备型号
        public byte[] szSerialNumber = new byte[64];                // 设备序列号
        public byte[] szSoftVersion = new byte[32];                // 软件版本号
        public byte[] szVendorName = new byte[64];                // 厂商名称
        public byte[] szMac = new byte[40];                        // 当前网卡 MAC
        public int nCurNetCardIndex;                            // 当前的网卡索引
        public int nDtsPort;                                    // DTS 端口
        public int nHttpPort;                                    // HTTP 端口
        public byte[] szDefaultNetCard = new byte[16];            // 默认网卡
        public STU_SEARCH_NETCARD[] stuNetCardArr = new STU_SEARCH_NETCARD[NetDefs.MAX_NETCARD_NUM];    // 网卡数组
        public byte[] reserved = new byte[256];                    // 保留位

        public STU_DEVICE_SEARCH_INFO() {
            for (int i = 0; i < stuNetCardArr.length; i++) {
                stuNetCardArr[i] = new STU_SEARCH_NETCARD();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nProtocolType", "bActivated", "szDeviceClass",
                    "szDeviceType", "szSerialNumber", "szSoftVersion", "szVendorName", "szMac",
                    "nCurNetCardIndex", "nDtsPort", "nHttpPort", "szDefaultNetCard", "stuNetCardArr",
                    "reserved"});
        }

        public static class ByReference extends STU_DEVICE_SEARCH_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_DEVICE_SEARCH_INFO implements Structure.ByValue {
        }
    }

    public static class STU_DEVICE_IP_SEARCH_INFO extends Structure {
        public int dwSize;
        public int nIpNum;          // 当前搜索的IP个数
        public byte[] szIPs = new byte[256 * 64];     // 具体待搜索的IP信息

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "nIpNum", "szIP"});
        }

        public static class ByReference extends STU_DEVICE_IP_SEARCH_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_DEVICE_IP_SEARCH_INFO implements Structure.ByValue {
        }
    }

    public static class STU_DEVICE_SEARCH_CONDITION_INFO extends Structure {
        public int dwSize;
        // 是否具有 MAC 搜索条件，1 true，2 false
        public int bMac;
        public byte[] szMac = new byte[40];
        // 是否具有 IPv4 搜索条件，1 true，2 false
        public int bIPv4;
        public byte[] szStartIPv4 = new byte[16];
        public byte[] szEndIPv4 = new byte[16];
        public byte[] reserved1 = new byte[64];
        // 是否具有 IPv6 搜索条件，1 true，2 false
        public int bIPv6;
        public byte[] szStartIPv6 = new byte[64];
        public byte[] szEndIPv6 = new byte[64];
        public byte[] reserved2 = new byte[128];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "bMac", "szMac",
                    "bIPv4", "szStartIPv4", "szEndIPv4", "reserved1",
                    "bIPv6", "szStartIPv6", "szEndIPv6", "reserved2"});
        }

        public static class ByReference extends STU_DEVICE_SEARCH_CONDITION_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_DEVICE_SEARCH_CONDITION_INFO implements Structure.ByValue {
        }
    }

    // 设备激活条件
    public static class STU_DEVICE_ACTIVATE_INFO extends Structure {
        public int dwSize;
        public byte[] szMac = new byte[40];                // 设备 MAC 地址
        public byte[] szPassword = new byte[64];            // 激活的设备密码
        public byte[] szEncType = new byte[32];            // 加密类型
        public byte[] szDeviceIpv4 = new byte[16];        // 单播时有效，设备 Ipv4 地址
        // 如果存在多个设备 IP 地址相同，则需要组播激活，该地址需要为空
        public byte[] szContactInfo = new byte[128];        // 联系方式，手机号或email地址
        public byte[] reserved = new byte[112];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "szMac", "szPassword",
                    "szEncType", "szDeviceIpv4", "szContactInfo", "reserved"});
        }

        public static class ByReference extends STU_DEVICE_ACTIVATE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_DEVICE_ACTIVATE_INFO implements Structure.ByValue {
        }
    }

    // UDP单播/组播获取公钥输入参数
    public static class STU_RSA_PUBLICKEY_IN_PARAM extends Structure {
        // 结构体大小
        public int dwSize;
        // mac 地址十六进制字符串
        public byte[] szMac = new byte[40];
        // Ipv4 地址，单播时有效，如果存在多个设备 IP 地址相同，则需要组播获取，该地址需要为空
        public byte[] szDeviceIpv4 = new byte[16];
        // 保留参数
        public byte[] reserved = new byte[112];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "szMac", "szDeviceIpv4", "reserved"});
        }

        public static class ByReference extends STU_RSA_PUBLICKEY_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_RSA_PUBLICKEY_IN_PARAM implements Structure.ByValue {
        }
    }

    // UDP单播/组播获取公钥输出参数
    public static class STU_RSA_PUBLICKEY_OUT_PARAM extends Structure {
        // 结构体大小
        public int dwSize;
        // mac 地址十六进制字符串
        public byte[] szMac = new byte[40];
        // RSA modules 十六进制字符串
        public byte[] szModules = new byte[1024];
        // RSA exponent 十六进制字符串
        public byte[] szExponent = new byte[64];
        // 保留参数
        public byte[] reserved = new byte[256];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "szMac", "szModules", "szExponent", "reserved"});
        }

        public static class ByReference extends STU_RSA_PUBLICKEY_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_RSA_PUBLICKEY_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 设备网络修改参数
    public static class STU_DEVICE_NETCFG_MODIFY_INFO extends Structure {
        // 一般只修改指定网卡的网络参数
        public byte[] szEthname = new byte[64];                // 网卡名称
        public byte[] szMac = new byte[40];                    // 网卡物理Mac地址
        public byte[] szUser = new byte[64];                    // 用户名
        public byte[] szPassword = new byte[64];                // 用户密码
        public byte[] reserved1 = new byte[64];                // 保留位1
        public short nDtsPort;                                // 服务端口
        public short nHttpPort;                                // HTTP 端口
        public short nHttpsPort;                                // HTTPS 端口
        public short nRtspPort;                                // RTSP 端口
        public byte[] reserved2 = new byte[64];                // 保留位2
        public byte[] IPv4_Address = new byte[16];            // IPv4 地址
        public byte[] IPv4_SubnetMask = new byte[16];            // IPv4 子网掩码
        public byte[] IPv4_DefaultGateway = new byte[16];        // IPv4 默认网关
        public int IPv4_DhcpEnable;                        // IPv4 DHCP 使能位
        public byte[] IPv6_Address = new byte[64];            // IPv6 地址
        public byte[] IPv6_SubnetMask = new byte[64];            // IPv6 子网掩码
        public byte[] IPv6_DefaultGateway = new byte[64];        // IPv6 默认网关
        public int IPv6_DhcpEnable;                        // IPv6 DHCP 使能位
        public byte[] szDeviceIpv4 = new byte[16];            // 单播时有效，单播的设备 Ipv4 地址；
        // 如果多个设备 IP 存在重复，则需要组播修改，该地址为空；
        public byte[] reserved3 = new byte[112];                // 保留位3

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szEthname", "szMac", "szUser", "szPassword", "reserved1",
                    "nDtsPort", "nHttpPort", "nHttpsPort", "nRtspPort", "reserved2", "IPv4_Address", "IPv4_SubnetMask",
                    "IPv4_DefaultGateway", "IPv4_DhcpEnable", "IPv6_Address", "IPv6_SubnetMask", "IPv6_DefaultGateway",
                    "IPv6_DhcpEnable", "szDeviceIpv4", "reserved3"});
        }

        public static class ByReference extends STU_DEVICE_NETCFG_MODIFY_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_DEVICE_NETCFG_MODIFY_INFO implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////
    // 主动注册参数配置
    public static class STU_SERVER_INFO extends Structure {
        public byte[] szServerIp = new byte[64];          // 注册服务器IP
        public int nServerPort;                        // 端口号
        public byte[] reserved = new byte[3];                // 对齐
        public byte bServerIpExEn;                    // 注册服务器IP扩展使能,0-表示无效, 1-表示有效
        public byte[] szServerIpEx = new byte[60];        // 注册服务器IP扩展，支持ipv4,ipv6,域名等类型的IP
        public byte[] reserved2 = new byte[512];            // 预留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szServerIp", "nServerPort", "reserved",
                    "bServerIpExEn", "szServerIpEx", "reserved2"});
        }

        public static class ByReference extends STU_SERVER_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_SERVER_INFO implements Structure.ByValue {
        }
    }

    // 主动注册服务器信息
    public static class STU_REGISTER_SERVER_INFO extends Structure {
        public int dwSize;
        public byte bServerNum;                            // 支持的最大ip数
        public STU_SERVER_INFO[] lstServer = new STU_SERVER_INFO[12];    // 服务器信息
        public byte bEnable;                                // 使能
        public byte[] szDeviceID = new byte[64];                // 设备 ID
        public byte[] reserved = new byte[256];                // 保留位

        public STU_REGISTER_SERVER_INFO() {
            for (int i = 0; i < lstServer.length; i++) {
                lstServer[i] = new STU_SERVER_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "bServerNum", "lstServer",
                    "bEnable", "szDeviceID", "reserved"});
        }

        public static class ByReference extends STU_REGISTER_SERVER_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_REGISTER_SERVER_INFO implements Structure.ByValue {
        }
    }

    // 文件信息
    public static class STU_FILE_INFO extends Structure {
        // 文件名
        public byte[] szFileName = new byte[256];
        // 保留参数
        public byte[] reserved = new byte[896];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szFileName", "reserved"});
        }

        public static class ByReference extends STU_FILE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_FILE_INFO implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    //报警信息结构体
    public static class STU_ALARM_EVENT_INFO extends Structure {
        public int nAlarmType;                        // 报警类型
        public int nChannelID;                        // 设备通道号
        public byte[] cAlarmTime = new byte[32];        // 报警发生时间

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"eAlarmType", "iChannelID", "cAlarmTime"});
        }

        public static class ByReference extends STU_ALARM_EVENT_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_INFO implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 回调数据(异步接口)
    public static class STU_CALLBACK_DATA extends Structure {
        public int nResultCode;                    // 返回码；0：成功
        public Pointer pBuf;                            // 接收数据, 缓冲是由用户开辟的，从接口形参传入
        public int nRetLen;                        // 接收长度
        public LLONG lOperateHandle;                // 操作句柄
        public Pointer userdata;                    // 操作对应用户参数
        public byte[] reserved = new byte[16];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uMaxMajorStreamBitrate",
                    "uMinMajorStreamBitrate", "uMaxExtraStreams", "uSupportedStandarsMask"});
        }

        public static class ByReference extends STU_CALLBACK_DATA implements Structure.ByReference {
        }

        public static class ByValue extends STU_CALLBACK_DATA implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 视频编码能力
    public static class STU_CAPS_ENCODE extends Structure {
        public int uMaxMajorStreamBitrate;        // 设备支持的最大主码流码率，单位 kbps
        public int uMinMajorStreamBitrate;        // 设备支持的最小主码流码率，单位 kbps
        public int uMaxExtraStreams;            // 最大辅码流路数
        public int uSupportedStandarsMask;        // 支持的视频制式掩码
        // 从低位到高位，1 表示支持 PAL, NTSC, SECAM

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uMaxMajorStreamBitrate",
                    "uMinMajorStreamBitrate", "uMaxExtraStreams", "uSupportedStandarsMask"});
        }

        public static class ByReference extends STU_CAPS_ENCODE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_ENCODE implements Structure.ByValue {
        }
    }

    // 录像能力集
    public static class STU_CAPS_RECORD extends Structure {
        public int uPreMaxTime;                // 最大预录时间
        public STU_RANGE_I stuPackTimeRange;            // 录像打包时间长度范围，单位 s
        public STU_RANGE_I stuPackSizeRange;            // 按文件长度打包的范围，单位 kb
        public int uSupportPackTypeMask;        // 支持的录像打包方式掩码，从低位到高位，1表示支持 按时间长度打包，按文件大小打包

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uPreMaxTime",
                    "stuPackTimeRange", "stuPackSizeRange", "uSupportPackTypeMask"});
        }

        public static class ByReference extends STU_CAPS_RECORD implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_RECORD implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////
    public static class STU_CAPS_VIDEOIN_GLOBAL extends Structure {
        public byte[] szPlatform = new byte[16];    // 平台类型
        public byte byCoverCount;                // 支持最多的区域覆盖个数
        public byte byCoverType;                // 是否支持区域覆盖。0-不支持，1-支持实时的区域覆盖，2-支持非实时的区域覆盖
        public byte byTitleCount;                // 支持最多的标题叠加的个数
        public byte byFormatCount;                // 前端支持输出分辨率数目
        public int bDownScaling;                // 是否支持画面缩小，非 binning 模式
        public int bUpScaling;                    // 是否支持画面放大
        public int bGain;                        // 是否支持增益控制
        public int bGainAuto;                    // 是否支持自动增益
        public int bSetColor;                    // 是否支持视频颜色设置
        public int bAutoSyncPhase;                // 是否支持自动相位调节
        public int bBrightnessCompensation;    // 是否支持亮度补偿调节
        public int bElectricFocus;                // 是否支持电动调节
        public int bIrisAdjust;                // 是否支持光圈调节
        public int bIrisAutoAdjust;            // 是否支持光圈自动调节
        public int bExternalSyncInput;            // 是否支持HD信号外同步
        public int bReferenceLevel;            // 是否支持参考电平设置
        public int bFlashAdjust;                // 是否支持闪光灯设置
        public int bGamma;                        // 是否支持 Gamma
        public float fMaxPicOccupy;                // 最大图片占空比
        public int nMaxWidth;                    // 视频输入传感器最大水平感光分辨率宽度
        public int nMaxHeight;                    // 视频输入传感器最大垂直感光分辨率高度
        public int nLadenBitrate;                // 视频输入支持的最高视频负载码流 kbps, 非 banning 模式
        public int nHorizontalBinning;            // 水平像素叠加功能掩码
        public int nVerticalBinning;            // 垂直像素叠加功能掩码
        public int nEEModeRange;                // 锐度可调节的最大等级
        public int nMaxGammaLevel;                // 支持最大 Gamma 基表加权调节值
        public int nuSignalFormatsMask;        // 输入源格式掩码，从低位到高位，逐位为 1 时依次表示
        // "Inside"-内部输入 "BT656"-BT656标准 "720p"-720逐行高清标准 "1080p"-1080隔行高清标准
        // "1080i"-1080逐行高清标准 "1080sF"-1080sF高清标准 "1_3M"-1080*960格式

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szPlatform", "byCoverCount", "byCoverType",
                    "byTitleCount", "byFormatCount", "bDownScaling", "bUpScaling", "bGain",
                    "bGainAuto", "bSetColor", "bAutoSyncPhase", "bBrightnessCompensation",
                    "bElectricFocus", "bIrisAdjust", "bIrisAutoAdjust", "bExternalSyncInput",
                    "bReferenceLevel", "bFlashAdjust", "bGamma", "fMaxPicOccupy",
                    "nMaxWidth", "nMaxHeight", "nLadenBitrate", "nHorizontalBinning",
                    "nVerticalBinning", "nEEModeRange", "nMaxGammaLevel", "nuSignalFormatsMask"});
        }

        public static class ByReference extends STU_CAPS_VIDEOIN_GLOBAL implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_VIDEOIN_GLOBAL implements Structure.ByValue {
        }
    }

    public static class STU_IRIS_TYPE extends Structure {
        public byte[] szType = new byte[16];        // 光圈类型
        public int uMax;                        // 光圈最大值
        public int uMin;                        // 光圈最小值

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szType", "uMax", "uMin"});
        }

        public static class ByReference extends STU_IRIS_TYPE implements Structure.ByReference {
        }

        public static class ByValue extends STU_IRIS_TYPE implements Structure.ByValue {
        }
    }

    public static class STU_CAPS_VIDEOIN_IRIS extends Structure {
        public int bSupport;                    // 是否支持精确光圈配置
        public int uRealIrisTypeNum;            // 实际光圈类型个数
        // 光圈类别数组
        public STU_IRIS_TYPE[] stuIrisTypeArr = new STU_IRIS_TYPE[NetDefs.MAX_IRIS_TYPE_NUM];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bSupport", "uRealIrisTypeNum", "stuIrisTypeArr"});
        }

        public static class ByReference extends STU_CAPS_VIDEOIN_IRIS implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_VIDEOIN_IRIS implements Structure.ByValue {
        }
    }

    public static class STU_CAPS_VIDEOIN_HALOCUT extends Structure {
        public int uMaxCutHaloRegion;            // 支持的最大减光晕区域个数
        public int uMinCutHaloLevel;            // 最小减光晕等级
        public int uMaxCutHaloLevel;            // 最大减光晕等级

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uMaxCutHaloRegion", "uMinCutHaloLevel", "uMaxCutHaloLevel"});
        }

        public static class ByReference extends STU_CAPS_VIDEOIN_HALOCUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_VIDEOIN_HALOCUT implements Structure.ByValue {
        }
    }

    public static class STU_CAPS_VIDEOIN_METERING extends Structure {
        public int uSupportModeMask;        // 支持的模式掩码
        // 从低位到高位，位为 1 依次表示支持 "Average"-全局测光, "Partial"-局部测光，
        // "Backlight"-背光补偿，"LightInhibition"-强光抑制，"FaceExposure"-人脸曝光
        public int uPartialRegionNum;        // 支持的局部测光区域的个数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uSupportModeMask", "uPartialRegionNum"});
        }

        public static class ByReference extends STU_CAPS_VIDEOIN_METERING implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_VIDEOIN_METERING implements Structure.ByValue {
        }
    }

    public static class STU_CAPS_VIDEOIN_IMAGE_CTRL extends Structure {
        public int bMirror;                    // 是否支持画面镜像功能
        public int bFlip;                        // 是否支持画面 180 翻转
        public int bRotate90;                    // 是否支持画面90/270度旋转

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bMirror", "bFlip", "bRotate90"});
        }

        public static class ByReference extends STU_CAPS_VIDEOIN_IMAGE_CTRL implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_VIDEOIN_IMAGE_CTRL implements Structure.ByValue {
        }
    }

    public static class STU_CAPS_VIDEOIN_EXPOSURE extends Structure {
        public int uDoubleExposureMask;    // 支持快门方式的掩码
        // bit0-支持双快门全帧率，bit1-支持双快门半帧率，bit2-支持三快门半帧率
        public int uExposure;                // 曝光等级。0-不支持曝光控制
        public int uExposureMode;            // 支持的自动曝光模式
        // 0-默认自动 1-低噪声 2-防拖影 4-手动区间
        // 5-光圈优先 6-手动固定 7-增益优先 8-快门优先 9-闪光灯匹配模式
        public int uWideDynamicRangeMask;    // 是否支持宽动态
        // 0-不支持，bit0-支持数字宽动态，bit1-支持真实宽动态，bit2-支持自动数字宽动态，bit3-支持自动宽动态(真实宽动态自适应)
        public float fMinExposureTime;        // 支持的最小曝光时间，单位：ms
        public float fMaxExposureTime;        // 支持的最大曝光时间，单位：ms
        public float fMinExposureTime1;        // 抓拍支持的最小曝光时间，单位：ms
        public float fMaxExposureTime1;        // 抓拍支持的最大曝光时间，单位：ms
        public int bGain;                    // 是否支持增益控制
        public int bGainAuto;                // 是否支持自动增益
        public int bSnapshotExposure;        // 是否支持抓图单独曝光
        public int bLimitedAutoExposure;    // 是否支持带时间上下限的自动曝光
        public int bCustomManualExposure;    // 是否支持用户自动以手动曝光时间

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uDoubleExposureMask", "uExposure", "uExposureMode",
                    "uWideDynamicRangeMask", "fMinExposureTime", "fMaxExposureTime",
                    "fMinExposureTime1", "fMaxExposureTime1", "bGain", "bGainAuto",
                    "bSnapshotExposure", "bLimitedAutoExposure", "bCustomManualExposure"});
        }

        public static class ByReference extends STU_CAPS_VIDEOIN_EXPOSURE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_VIDEOIN_EXPOSURE implements Structure.ByValue {
        }
    }

    public static class STU_CAPS_VIDEOIN_DAY_NIGHT extends Structure {
        public int bDayNightColor;                // 是否支持日夜颜色自动转换
        public int bMultiOptions;                // 是否支持多套选项
        public int bNightOptions;                // 是否支持夜晚特殊选项

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bDayNightColor", "bMultiOptions", "bNightOptions"});
        }

        public static class ByReference extends STU_CAPS_VIDEOIN_DAY_NIGHT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_VIDEOIN_DAY_NIGHT implements Structure.ByValue {
        }
    }

    public static class STU_CAPS_VIDEOIN_WHITE_BALANCE extends Structure {
        public int uWhiteBalance;                // 支持自动白平衡标志位 0-不支持，1-支持自动白平衡，2-支持自动和预置白平衡，3-支持自动、预置、自定义白平衡
        public int uMaxPartWhiteBalanceCount;    // 最大支持局部白平衡区域的数量

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uWhiteBalance", "uMaxPartWhiteBalanceCount"});
        }

        public static class ByReference extends STU_CAPS_VIDEOIN_WHITE_BALANCE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_VIDEOIN_WHITE_BALANCE implements Structure.ByValue {
        }
    }

    public static class STU_CAPS_VIDEOIN_IR extends Structure {
        public int bSupportIRPlateMode;        // 是否支持红外车牌模式
        public int bInfraRed;                    // 是否支持红外补偿
        public int bSmartIRExposure;            // 是否支持智能红外曝光

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bSupportIRPlateMode", "bInfraRed", "bSmartIRExposure"});
        }

        public static class ByReference extends STU_CAPS_VIDEOIN_IR implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_VIDEOIN_IR implements Structure.ByValue {
        }
    }

    public static class STU_CAPS_VIDEOIN_DENOISE extends Structure {
        public int uSourceMask;                // 支持3D降噪源掩码 bit0-视频， bit1-图片

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uSourceMask"});
        }

        public static class ByReference extends STU_CAPS_VIDEOIN_DENOISE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_VIDEOIN_DENOISE implements Structure.ByValue {
        }
    }

    public static class STU_CAPS_VIDEOIN_DEFOG extends Structure {
        public int uMaxManualValue;                // 手动模式下最大强度值

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uMaxManualValue"});
        }

        public static class ByReference extends STU_CAPS_VIDEOIN_DEFOG implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_VIDEOIN_DEFOG implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////
    public static class STU_CAPS_VIDEO_ENCODE extends Structure {
        public int uEncodeTypes;                // 视频压缩格式。bit0-"MJPG", bit1-"H.264", bit2-"H.265"
        public int uMaxROICount;                // 最大 ROI 个数
        public int bROIDynamicTrack;            // 是否支持动态跟踪 ROI 区域
        public int uMaxCoverCount;                // 支持最多的区域覆盖个数
        public int uMaxTitleCount;                // 支持最多的标题叠加的个数
        public int bSnapByOtherSize;            // 是否有独立的主图分辨率，否则使用主码流分辨率
        public int uMaxSnapFps;                // 抓图最大帧率
        public int uMaxSVCTLevel;                // 最大 SVC-T 支持层数，0-不支持SVC
        public int uSvcEncodeTypes;            // 支持SVC编码的视频格式。bit0-"MJPG", bit1-"H.264", bit2-"H.265"
        public int uMaxBlankHeight;            // 支持的最大黑边高度
        public int uSmart264;                    // 支持的 Smart 编码策略，当仅对 H264/H265 有效

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uEncodeTypes", "uMaxROICount", "bROIDynamicTrack",
                    "uMaxCoverCount", "uMaxCoverCount", "uMaxTitleCount", "bSnapByOtherSize",
                    "uMaxSnapFps", "uMaxSVCTLevel", "uMaxSVCTLevel", "uSvcEncodeTypes",
                    "uMaxBlankHeight", "uSmart264"});
        }

        public static class ByReference extends STU_CAPS_VIDEO_ENCODE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_VIDEO_ENCODE implements Structure.ByValue {
        }
    }

    public static class STU_CAPS_PICTURE_OSD extends Structure {
        public int bSupport;                        // 是否支持
        public byte[] szElements = new byte[512];        // 支持的元素列表，元素以 '|' 分隔

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bSupport", "szElements"});
        }

        public static class ByReference extends STU_CAPS_PICTURE_OSD implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_PICTURE_OSD implements Structure.ByValue {
        }
    }

    public static class STU_CAPS_OSD extends Structure {
        public int uPicOSDCount;            // Picture OSD 数组实际长度
        // Picture OSD 数组
        public STU_CAPS_PICTURE_OSD[] stuPicOSDCapsArr = new STU_CAPS_PICTURE_OSD[NetDefs.MAX_CAPS_PICTURE_OSD_NUM];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uPicOSDCount", "stuPicOSDCapsArr"});
        }

        public static class ByReference extends STU_CAPS_OSD implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_OSD implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////
    public static class STU_CAPS_AUDIO_IN extends Structure {
        public int nLineInChannels;            // 线性输入通道数
        public int nLineInSupportSetVolume;    // 线性输入是否支持设置音量，0-不支持 1-支持
        public int nMicChannels;                // Mic 输入通道数
        public int nMicSupportSetVolume;        // Mic 是否支持设置音量，0-不支持，1-支持

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nLineInChannels", "nLineInSupportSetVolume",
                    "nMicChannels", "nMicSupportSetVolume"});
        }

        public static class ByReference extends STU_CAPS_AUDIO_IN implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_AUDIO_IN implements Structure.ByValue {
        }
    }

    public static class STU_CAPS_AUDIO_OUT extends Structure {
        public int nMixing;                    // 是否支持混音。0-不支持 1-支持

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMixing"});
        }

        public static class ByReference extends STU_CAPS_AUDIO_OUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_AUDIO_OUT implements Structure.ByValue {
        }
    }

    public static class STU_CAPS_VIDEO_DETECT extends Structure {
        public int bMovingDetect;                // 是否支持动检

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bMovingDetect"});
        }

        public static class ByReference extends STU_CAPS_VIDEO_DETECT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_VIDEO_DETECT implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////
    public static class STU_CAPS_INTER_PROTOCOL_ITEM extends Structure {
        public byte[] szProtocol = new byte[64];                // 协议名称
        public byte[] szCfgTable = new byte[64];                // 配置表名称

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szProtocol", "szCfgTable"});
        }

        public static class ByReference extends STU_CAPS_INTER_PROTOCOL_ITEM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_INTER_PROTOCOL_ITEM implements Structure.ByValue {
        }
    }

    public static class STU_CAPS_INTER_PROTOCOL extends Structure {
        public int nItemCount;            // Item 数组大小
        public STU_CAPS_INTER_PROTOCOL_ITEM[] stuItemArray = new STU_CAPS_INTER_PROTOCOL_ITEM[16];    // Item 数组

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nItemCount", "stuItemArray"});
        }

        public static class ByReference extends STU_CAPS_INTER_PROTOCOL implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_INTER_PROTOCOL implements Structure.ByValue {
        }
    }

    public static class STU_CAPS_VIDEO_ANALYSE extends Structure {
        public int nSupportedSceneCount;            // 支持的业务大类个数
        // 支持的业务大类列表
        public byte[] szSupportedScenes = new byte[NetDefs.MAX_VIDEO_ANALYSE_SCENE_NUM * 64];
        public byte[] reserved = new byte[256];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nSupportedSceneCount", "szSupportedScenes", "reserved"});
        }

        public static class ByReference extends STU_CAPS_VIDEO_ANALYSE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_VIDEO_ANALYSE implements Structure.ByValue {
        }
    }

    // 人脸识别能力
    public static class STU_CAPS_FACE_RECOGNIZE extends Structure {
        public byte byMaxGroup;                    // 最大人脸底库数
        public byte byMaxFaceOnePerson;            // 单人人脸底库图上限
        public byte bySupportImageMask;            // 支持的图片格式掩码 低位到高位为 1 时依次表示支持图片格式 JPG、JPEG、PNG
        public byte byUploadFaceImage;            // 设备是否上传底图，否的话只上传特征值信息; 0-不上传；1-上传
        public int uMaxFaceSize;                // 人脸底库图上限字节数
        public int uMinFaceSize;                // 人脸底库图下限字节数
        public int uMaxFaceCount;                // 底图总张数上限
        public short wMaxResolutionWidth;        // 底图最大分辨率宽度
        public short wMaxResolutionHeight;        // 底图最大分辨率高度
        public short wMinResolutionWidth;        // 底图最小分辨率宽度
        public short wMinResolutionHeight;        // 底图最小分辨率高度
        public int bPersonManagerIndividual;    // 是否人员信息分开管理， TRUE-分开管理；FALSE-一起管理
        public int bSupportBWGList;            // 是否支持黑白灰名单
        public float fWhiteListSearchThreshold;    // 白名单推荐识别阈值
        public float fGrayListSearchThreshold;    // 灰名单推荐识别阈值
        public float fBlackListSearchThreshold;    // 黑名单推荐识别阈值
        public int uCustomDescriptionFunc;        // 人员信息自定义描述， 0 - 未明确，1 - 梯控
        public byte[] reserved = new byte[44];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"byMaxGroup", "byMaxFaceOnePerson", "bySupportImageMask",
                    "byUploadFaceImage", "uMaxFaceSize", "uMinFaceSize", "uMaxFaceCount", "wMaxResolutionWidth",
                    "wMaxResolutionHeight", "wMinResolutionWidth", "wMinResolutionHeight",
                    "bPersonManagerIndividual", "bSupportBWGList", "fWhiteListSearchThreshold", "fGrayListSearchThreshold",
                    "fBlackListSearchThreshold", "uCustomDescriptionFunc", "reserved"});
        }

        public static class ByReference extends STU_CAPS_FACE_RECOGNIZE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_FACE_RECOGNIZE implements Structure.ByValue {
        }
    }

    // 二维码识别能力
    public static class STU_CAPS_QRCODE_ANALYZE extends Structure {
        public int bSupported;                    // 是否支持二维码识别
        public byte[] reserved = new byte[64];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bSupported", "reserved"});
        }

        public static class ByReference extends STU_CAPS_QRCODE_ANALYZE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_QRCODE_ANALYZE implements Structure.ByValue {
        }
    }

    // 设备数据加减密能力
    public static class STU_CAPS_DATA_ENC_DEC extends Structure {
        public int bSupportEncSingleCall;            // 设备是否支持 sdk 端数据加密发送
        public byte[] reserved = new byte[128];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bSupportEncSingleCall", "reserved"});
        }

        public static class ByReference extends STU_CAPS_DATA_ENC_DEC implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_DATA_ENC_DEC implements Structure.ByValue {
        }
    }

    // 交通黑白名单表信息（不带记录编号）
    public static class STU_TRAFFIC_BW_TABLE extends Structure {
        public int emType;                            // 黑白名单类型
        public byte[] szOwner = new byte[64];            // 车主
        public byte[] szPlateNumber = new byte[32];    // 车牌号码
        public byte[] szPlateColor = new byte[32];    // 车牌颜色
        public byte[] szVehicleColor = new byte[32];    // 车身颜色
        public byte[] reserved = new byte[512];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emType", "szOwner", "szPlateNumber",
                    "szPlateColor", "szVehicleColor", "reserved"});
        }

        public static class ByReference extends STU_TRAFFIC_BW_TABLE implements Structure.ByReference {
        }

        public static class ByValue extends STU_TRAFFIC_BW_TABLE implements Structure.ByValue {
        }
    }

    // 交通黑白名单表信息（带记录编号）
    public static class STU_TRAFFIC_BW_TABLE_EX extends Structure {
        public int nRecNo;                            // 记录编号（只读）
        public int emType;                            // 黑白名单类型,EM_TRAFFIC_BWLIST_TYPE
        public byte[] szOwner = new byte[64];            // 车主
        public byte[] szPlateNumber = new byte[32];    // 车牌号码
        public byte[] szPlateColor = new byte[32];    // 车牌颜色
        public byte[] szVehicleColor = new byte[32];    // 车身颜色
        public byte[] reserved = new byte[512];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRecNo", "emType", "szOwner",
                    "szPlateNumber", "szPlateColor", "szVehicleColor", "reserved"});
        }

        public static class ByReference extends STU_TRAFFIC_BW_TABLE_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_TRAFFIC_BW_TABLE_EX implements Structure.ByValue {
        }
    }

    // 交通黑白名单查找条件
    public static class STU_TRAFFIC_BW_TABLE_FIND_CONDITION extends Structure {
        public int emType;                            // 黑白名单类型,EM_TRAFFIC_BWLIST_TYPE
        public byte[] szOwne = new byte[64];            // 车主，为空时表示不以该条件查找
        public byte[] szPlateNumber = new byte[32];    // 车牌，为空时表示不以该条件查找
        public byte[] reserved = new byte[128];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emType", "szOwne", "szPlateNumber", "reserved"});
        }

        public static class ByReference extends STU_TRAFFIC_BW_TABLE_FIND_CONDITION implements Structure.ByReference {
        }

        public static class ByValue extends STU_TRAFFIC_BW_TABLE_FIND_CONDITION implements Structure.ByValue {
        }
    }

    // 一次查询黑白名单输入参数
    public static class STU_TRAFFIC_BW_TABLE_FIND_RESULT_IN_PARAM extends Structure {
        public int nFindInstance;        // 查询实例
        public int nOffset;            // 查询偏移
        public int nCount;                // 一次查询数目（不超过 MAX_TRAFFIC_BWLIST_RECODE_NUM）

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nFindInstance", "nOffset", "nCount"});
        }

        public static class ByReference extends STU_TRAFFIC_BW_TABLE_FIND_RESULT_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_TRAFFIC_BW_TABLE_FIND_RESULT_IN_PARAM implements Structure.ByValue {
        }
    }

    // 一次查询黑白名单输出参数
    public static class STU_TRAFFIC_BW_TABLE_FIND_RESULT_OUT_PARAM extends Structure {
        public int nResultCount;        // 查询到的结果个数
        // 黑白名单列表
        public STU_TRAFFIC_BW_TABLE_EX[] stTables = new STU_TRAFFIC_BW_TABLE_EX[NetDefs.MAX_TRAFFIC_BWLIST_RECODE_NUM];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nResultCount", "stTables"});
        }

        public static class ByReference extends STU_TRAFFIC_BW_TABLE_FIND_RESULT_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_TRAFFIC_BW_TABLE_FIND_RESULT_OUT_PARAM implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 获取4G信号强度输入参数
    public static class STU_GET_4G_RSSI_IN_PARAM extends Structure {
        public byte[] szModuleName = new byte[64];            // 4G模块名，为空时默认“ppp0”
        public byte[] reserved = new byte[128];                // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szModuleName", "reserved"});
        }

        public static class ByReference extends STU_GET_4G_RSSI_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_GET_4G_RSSI_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取4G信号强度输出参数
    public static class STU_GET_4G_RSSI_OUT_PARAM extends Structure {
        public byte[] szWorkMode = new byte[64];                // 工作模式名
        public int nRssiLevel;                                // RSSI信号强度, 0 - 100
        public byte[] reserved = new byte[256];                // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szWorkMode", "nRssiLevel", "reserved"});
        }

        public static class ByReference extends STU_GET_4G_RSSI_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_GET_4G_RSSI_OUT_PARAM implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // IPv4 地址配置
    public static class STU_CFG_IPV4_INFO extends Structure {
        // 是否有效，无效时不用配置（获取后不能设置）
        public int bValid;
        // DHCP 使能
        public int bDhcpEnable;
        // IPv4 地址
        public byte[] szIpAddress = new byte[16];
        // 子网掩码
        public byte[] szSubnetMask = new byte[16];
        // 默认网关
        public byte[] szDefaultGateway = new byte[16];
        // 首选 DNS 服务地址
        public byte[] szMainDnsServer = new byte[16];
        // 备用 DNS 服务地址
        public byte[] szExtraDnsServer = new byte[16];
        // 保留位
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bValid", "bDhcpEnable", "szIpAddress",
                    "szSubnetMask", "szDefaultGateway", "szMainDnsServer", "szExtraDnsServer", "reserved"});
        }

        public static class ByReference extends STU_CFG_IPV4_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_IPV4_INFO implements Structure.ByValue {
        }
    }

    public static class STU_CFG_IPV6_INFO extends Structure {
        // 是否有效，无效时不用配置（获取后不能设置）
        public int bValid;
        // DHCP 使能（不支持设置）
        public int bDhcpEnable;
        // 系统自动分配的IPv6本地链路地址, 该地址只能直联,不需要Gateway（获取后不能设置）
        public byte[] szIpLinkLocalAddress = new byte[64];
        // 网络前缀
        public byte[] szPrefix = new byte[16];
        // IPv6 地址
        public byte[] szIpAddress = new byte[64];
        // 子网掩码
        public byte[] szSubnetMask = new byte[64];
        // 默认网关
        public byte[] szDefaultGateway = new byte[64];
        // 首选 DNS 服务地址
        public byte[] szMainDnsServer = new byte[64];
        // 备用 DNS 服务地址
        public byte[] szExtraDnsServer = new byte[64];
        // 保留位
        public byte[] reserved = new byte[128];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bValid", "bDhcpEnable", "szIpLinkLocalAddress",
                    "szPrefix", "szIpAddress", "szSubnetMask", "szDefaultGateway", "szMainDnsServer",
                    "szExtraDnsServer", "reserved"});
        }

        public static class ByReference extends STU_CFG_IPV6_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_IPV6_INFO implements Structure.ByValue {
        }
    }

    // 单张网卡配置
    public static class STU_CFG_ONE_NETCARD extends Structure {
        public int bValid;                            // 网卡是否有效，无效说明不存在（获取后不能设置）
        public int nMTU;                            // MTU（获取后不能设置）
        public byte[] szNetCardName = new byte[32];    // 网卡名 "eth0","wlan0","ppp0"（获取后不能设置）
        public byte[] szMacAddress = new byte[40];    // MAC 地址（获取后不能设置）
        public STU_CFG_IPV4_INFO stuCfgIpv4;                        // IPv4 配置信息
        public STU_CFG_IPV6_INFO stuCfgIpv6;                        // IPv6 配置信息
        public byte[] reserved = new byte[64];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bValid", "nMTU", "szNetCardName",
                    "szMacAddress", "stuCfgIpv4", "stuCfgIpv6", "reserved"});
        }

        public static class ByReference extends STU_CFG_ONE_NETCARD implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ONE_NETCARD implements Structure.ByValue {
        }
    }

    public static class STU_CFG_ALL_NETCARD extends Structure {
        // 真实的网卡数量
        public int uNetCardNum;
        // 默认网卡名称
        public byte[] szDefaultNetCard = new byte[32];
        // 网卡配置信息
        public STU_CFG_ONE_NETCARD[] stuNetCardsInfo = new STU_CFG_ONE_NETCARD[NetDefs.MAX_NETCARD_NUM];
        // 保留位
        public byte[] reserved = new byte[64];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uNetCardNum", "szDefaultNetCard", "stuNetCardsInfo"});
        }

        public static class ByReference extends STU_CFG_ALL_NETCARD implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ALL_NETCARD implements Structure.ByValue {
        }
    }

    // 夏令时时间
    public static class STU_DST_TIME extends Structure {
        public int iMouth;
        public int iWeek;
        public int iDay;
        public int iHour;
        public byte[] reserved = new byte[16];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"iMouth", "iWeek", "iDay", "iHour", "reserved"});
        }

        public static class ByReference extends STU_DST_TIME implements Structure.ByReference {
        }

        public static class ByValue extends STU_DST_TIME implements Structure.ByValue {
        }
    }

    // 夏令时配置
    public static class STU_CFG_DST extends Structure {
        public int dwSize;                // 结构体大小
        public int bEnable;            // 使能
        public int iTimeZone;            // 正数标示东，负数标示西，[-12 - 13]
        public STU_DST_TIME stuDstStartTime;
        public STU_DST_TIME stuDstEndTime;
        public byte[] reserved = new byte[64];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "bEnable", "iTimeZone",
                    "stuDstStartTime", "stuDstEndTime", "reserved"});
        }

        public static class ByReference extends STU_CFG_DST implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_DST implements Structure.ByValue {
        }
    }

    // NTP配置
    public static class STU_CFG_NTP extends Structure {
        public int dwSize;                // 结构体大小
        public int bEnable;
        public byte[] szDomainName = new byte[256];
        public int uInterval;
        public int uPort;
        public byte[] reserved = new byte[64];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "bEnable", "szDomainName",
                    "uInterval", "uPort", "reserved"});
        }

        public static class ByReference extends STU_CFG_NTP implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_NTP implements Structure.ByValue {
        }
    }

    public static class STU_CFG_RECORD_PLAN extends Structure {
        // 录像模式 0-自动，1-手动,2-关闭
        public byte bControlMode;
        public byte[] reserved1 = new byte[3];        // 保留位

        // 布防时间 - begin
        public STU_WEEK_TIME_SECTION_SCHEDULE stuWeekTimeSection;
        // 假日信息
        public int bHolidayEnable;
        public STU_TIME_SECTION_SCHEDULE[] stHolidaySchedule = new STU_TIME_SECTION_SCHEDULE[NetDefs.TIME_SECTION];
        // 布防时间 - end

        public byte[] reserved2 = new byte[64];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bControlMode", "reserved1", "stuWeekTimeSection",
                    "bHolidayEnable", "stHolidaySchedule", "reserved2"});
        }

        public static class ByReference extends STU_CFG_RECORD_PLAN implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_RECORD_PLAN implements Structure.ByValue {
        }
    }

    public static class STU_CFG_RECORD_OPTIONS extends Structure {
        public int uPackSize;            // 录像打包长度
        public int uPackTime;            // 录像打包时间
        public int uPreRecordTime;        // 预录时间
        public byte bPackType;            // 录像打包类型	0是按时间录像
        public byte bStreamType;        // 码流类型,0是主码流，1是副码流1,2是副码流2
        public byte[] reserved = new byte[34];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uPackSize", "uPackTime", "uPreRecordTime",
                    "bPackType", "bStreamType", "reserved"});
        }

        public static class ByReference extends STU_CFG_RECORD_OPTIONS implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_RECORD_OPTIONS implements Structure.ByValue {
        }
    }

    //存储-录像配置
    public static class STU_CFG_RECORD extends Structure {
        public int dwSize;                        // 结构体大小
        public STU_CFG_RECORD_PLAN stuRecordPlan;                // 录像计划参数
        public STU_CFG_RECORD_OPTIONS stuRecordOptions;            // 录像选项
        public byte[] reserved = new byte[256];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "stuRecordPlan", "stuRecordOptions", "reserved"});
        }

        public static class ByReference extends STU_CFG_RECORD implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_RECORD implements Structure.ByValue {
        }
    }

    // 串口属性
    public static class STU_CFG_COM_ATTRIBUTE extends Structure {
        public int uBaudRate;                    // 波特率,取值为1200, 2400 ,4800, 9600, 19200, 38400, 57600, 115200
        public int nDataBits;                    // 数据位,取值为5, 6, 7, 8
        public int emParity;                    // 校验模式，EM_COM_PARITY_TYPE
        public int emStopBit;                    // 停止位，EM_COM_STOP_BIT_TYPE
        public byte[] reserved = new byte[4];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uBaudRate", "nDataBits", "emParity",
                    "emStopBit", "reserved"});
        }

        public static class ByReference extends STU_CFG_COM_ATTRIBUTE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_COM_ATTRIBUTE implements Structure.ByValue {
        }
    }

    // 串口配置项
    public static class STU_CFG_COM_ITEM extends Structure {
        public int bEnable;                    // 串口使能
        public int emComType;                    // 串口类型
        public STU_CFG_COM_ATTRIBUTE stuAttribute;                // 串口属性
        public int emTransComProtoMask;        // 如果串口是透明串口，则表示当前的支持协议项,EM_TRANS_COM_PROTOCOL_MASK
        public byte[] reserved = new byte[32];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "emComType", "stuAttribute",
                    "emTransComProtoMask", "reserved"});
        }

        public static class ByReference extends STU_CFG_COM_ITEM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_COM_ITEM implements Structure.ByValue {
        }
    }

    // 串口能力集
    public static class STU_CFG_COM extends Structure {
        // 串口数目
        public int uNums;
        // 串口配置
        public STU_CFG_COM_ITEM[] stuComItems = new STU_CFG_COM_ITEM[NetDefs.MAX_DEVICE_COM_NUM];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uNums", "stuComItems"});
        }

        public static class ByReference extends STU_CFG_COM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_COM implements Structure.ByValue {
        }
    }

    // 串口参数
    public static class STU_CAPS_COM_PARAM extends Structure {
        public int bSupportConsole;    // 是否支持调试串口
        public int bSupportNormal;        // 是否支持普通串口
        public int bSupportTrans;        // 是否支持透明串口
        public byte[] reserved1 = new byte[8];        // 保留参数1

        // 基于透明串口模式的特殊协议支持, 掩码类型参考 EM_TRANS_COM_PROTOCOL_MASK
        public int nTranscomProtocolMask;
        public byte[] reserved2 = new byte[16];        // 保留参数

        public int emBusType;            // Bus 总线类型,EM_COM_BUS_TYPE
        public int emComType;            // 通信方式,EM_COM_COMM_TYPE
        public byte[] reserved3 = new byte[32];        // 保留参数2

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bSupportConsole", "bSupportNormal", "bSupportTrans",
                    "reserved1", "nTranscomProtocolMask", "reserved2", "emBusType",
                    "emComType", "reserved3"});
        }

        public static class ByReference extends STU_CAPS_COM_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_COM_PARAM implements Structure.ByValue {
        }
    }

    // 串口能力集
    public static class STU_CAPS_COM extends Structure {
        // 设备所支持的串口数目
        public int uComCount;
        // 串口能力集参数
        public STU_CAPS_COM_PARAM[] stuItems = new STU_CAPS_COM_PARAM[NetDefs.MAX_DEVICE_COM_NUM];

        public STU_CAPS_COM() {
            for (int i = 0; i < stuItems.length; i++) {
                stuItems[i] = new STU_CAPS_COM_PARAM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uComCount", "stuItems"});
        }

        public static class ByReference extends STU_CAPS_COM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_COM implements Structure.ByValue {
        }
    }

    // 外设能力集
    public static class STU_CAPS_DEV_PERIPHERAL extends Structure {
        public int uAlarmInSlots;                                                // 报警输入的通道总数
        public int uAlarmOutSlots;                                                // 报警输出的通道总数
        public int bICR;                                                        // 是否支持ICR（IRCut）控制
        public int uPhotoSensitiveCount;                                        // 光敏传感器个数
        public int uWieGandSlots;                                                // 韦根口个数，0表示不支持
        public int nRealIOItemCount;                                            // 设备实际支持的UIIO功能数量
        public int[] emIOItems = new int[NetDefs.MAX_DEV_PREI_IO_CFG_NUM];        // 设备支持的IO功能，"Alarm"报警必有,EM_DEV_PREI_IO_MODE
        public int uScreenNum;                                                    // 屏幕个数
        public byte[] reserved = new byte[64];                                    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uAlarmInSlots", "uAlarmOutSlots", "bICR",
                    "uPhotoSensitiveCount", "uWieGandSlots", "nRealIOItemCount", "emIOItems",
                    "uScreenNum", "reserved"});
        }

        public static class ByReference extends STU_CAPS_DEV_PERIPHERAL implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAPS_DEV_PERIPHERAL implements Structure.ByValue {
        }
    }

    // 自动重启配置
    public static class STU_CFG_AUTO_MAINTAIN extends Structure {
        public int dwSize;                            // 结构体大小
        public int bEnable;
        public int uWeekDay;                        // 周几重启,[0-6],0代表周日，6代表周六
        public int uHour;                            // 几点重启,[0-23]
        public byte[] reserved = new byte[64];        // 保留参数2

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "bEnable", "uWeekDay", "uHour", "reserved"});
        }

        public static class ByReference extends STU_CFG_AUTO_MAINTAIN implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_AUTO_MAINTAIN implements Structure.ByValue {
        }
    }

    // 事件联动
    public static class STU_EVENT_HANDLER extends Structure {
        public int bRecordEnable;                    // 录像使能
        public int nRecordLatch;                    // 预录时间 [10s-300s]，单位：秒
        public int nRecordChannelNum;                // 实际录像通道个数
        // 录像通道数组
        public int[] nRecordChannels = new int[NetDefs.MAX_RECORD_CHANNEL_NUM];
        public int bAlarmOutEnable;                // 报警输出使能
        public int nAlarmOutLatch;                    // 报警输入停止后，输出延时时间 [1s,300s]，单位：秒
        public int nAlarmOutChannelNum;            // 实际报警输出通道个数
        // 报警输出通道数组
        public int[] nAlarmOutChannels = new int[NetDefs.MAX_ALARM_OUT_CHANNEL_NUM];
        public int bCaptureEnable;                    // 抓图使能
        public int nCapturePreRecordTime;            // 图片关联录像的预录时间，不能大于通用的预录时间，单位：秒
        public int nCaptureChannelNum;                // 实际抓图通道数
        // 抓图通道数组
        public int[] nCaptureChannels = new int[NetDefs.MAX_CAPTURE_CHANNEL_NUM];
        // 时段信息
        public STU_WEEK_TIME_SECTION_SCHEDULE stuWeekTimeSection;
        // 假日信息
        public int bHolidayEnable;
        public STU_TIME_SECTION_SCHEDULE[] stHolidaySchedule = new STU_TIME_SECTION_SCHEDULE[NetDefs.TIME_SECTION];
        // 韦根掩码 0表示不使能，大于0则按位使能通道
        public int nWieGandMask;
        // 报输入停止后，输出延时时间（秒）,有此字段表示韦根复用为IO，范围[1,60]
        public int nWieGandOutLatch;

        public int bAudioOutEnable;                // 音频输出是否使能
        public byte[] szAudioOutName = new byte[64];    // 输出音频文件名称

        public int nLinkageStatus;                    // 联动们状态，0 - 关门，1 - 开门，2 - 禁用
        public int bLogEnable;                        // 存储到报警日志使能
        public int bUpAlarmEnable;                    // 报警上传使能

        public byte[] reserved = new byte[940];        // 保留参数

        public STU_EVENT_HANDLER() {
            for (int i = 0; i < stHolidaySchedule.length; i++) {
                stHolidaySchedule[i] = new STU_TIME_SECTION_SCHEDULE();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bRecordEnable", "nRecordLatch", "nRecordChannelNum",
                    "nRecordChannels", "bAlarmOutEnable", "nAlarmOutLatch", "nAlarmOutChannelNum",
                    "nAlarmOutChannels", "bCaptureEnable", "nCapturePreRecordTime", "nCaptureChannelNum",
                    "nCaptureChannels", "stuWeekTimeSection", "bHolidayEnable", "stHolidaySchedule",
                    "nWieGandMask", "nWieGandOutLatch", "bAudioOutEnable", "szAudioOutName", "nLinkageStatus",
                    "bLogEnable", "bUpAlarmEnable", "reserved"});
        }

        public static class ByReference extends STU_EVENT_HANDLER implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_HANDLER implements Structure.ByValue {
        }
    }

    // 单个人脸识别联动配置
    public static class STU_CFG_FACE_GROUP_RECOGNIZE_RULE extends Structure {
        // 人脸组 ID
        public int nGroupID;
        // 识别通过的联动事件
        public STU_EVENT_HANDLER stEventHandler;
        // 识别不通过的联动事件
        public STU_EVENT_HANDLER stEventHandlerNoPass;

        // 布防时间 begin
        // 时段信息
        public STU_WEEK_TIME_SECTION_SCHEDULE stuWeekTimeSection;        // 一周的时间段

        // 假日信息
        public int bHolidayEnable;
        public STU_TIME_SECTION_SCHEDULE[] stHolidaySchedule = new STU_TIME_SECTION_SCHEDULE[NetDefs.TIME_SECTION];
        // 布防时间 end

        // 识别对比阈值
        public int nSearchThreshold;            // 门禁产品专用

        // 保留参数
        public byte[] reserved = new byte[508];

        public STU_CFG_FACE_GROUP_RECOGNIZE_RULE() {
            for (int i = 0; i < stHolidaySchedule.length; i++) {
                stHolidaySchedule[i] = new STU_TIME_SECTION_SCHEDULE();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nGroupID", "stEventHandler", "stEventHandlerNoPass",
                    "stuWeekTimeSection", "bHolidayEnable", "stHolidaySchedule", "nSearchThreshold", "reserved"});
        }

        public static class ByReference extends STU_CFG_FACE_GROUP_RECOGNIZE_RULE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_FACE_GROUP_RECOGNIZE_RULE implements Structure.ByValue {
        }
    }

    // 所有人脸识别联动配置
    public static class STU_CFG_FACE_GROUP_RECOGNIZE_RULES extends Structure {
        // 人脸识别规则实际数目
        public int nRuleCount;
        // 人脸识别联动配置信息
        public STU_CFG_FACE_GROUP_RECOGNIZE_RULE[] stRuleArray = new STU_CFG_FACE_GROUP_RECOGNIZE_RULE[NetDefs.MAX_FACE_GROUP_NUM];

        public STU_CFG_FACE_GROUP_RECOGNIZE_RULES() {
            for (int i = 0; i < stRuleArray.length; i++) {
                stRuleArray[i] = new STU_CFG_FACE_GROUP_RECOGNIZE_RULE();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRuleCount", "stRuleArray"});
        }

        public static class ByReference extends STU_CFG_FACE_GROUP_RECOGNIZE_RULES implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_FACE_GROUP_RECOGNIZE_RULES implements Structure.ByValue {
        }
    }

    // 识别不通过快速推出策略人脸库配置
    public static class STU_NO_PASS_QUICK_PUSH_STRATEGY_CFG extends Structure {
        // 人脸库组ID
        public int nGroupID;
        // 是否使能
        public int bEnable;
        // 识别比对快速判定不通过低阈值, 范围0~100, 需小于SearchThreshold
        public float fLowSearchThreshold;
        // 保留字节
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nGroupID", "bEnable", "fLowSearchThreshold", "reserved"});
        }

        public static class ByReference extends STU_NO_PASS_QUICK_PUSH_STRATEGY_CFG implements Structure.ByReference {
        }

        public static class ByValue extends STU_NO_PASS_QUICK_PUSH_STRATEGY_CFG implements Structure.ByValue {
        }
    }

    // 识别不通过快速推出策略配置
    public static class STU_CFG_RECOG_NO_PASS_QUICK_PUSH_STRATEGY extends Structure {
        // 人脸库实际数量
        public int nGroupCount;
        // 人脸库配置数组
        public STU_NO_PASS_QUICK_PUSH_STRATEGY_CFG[] stStrategyCfgs = new STU_NO_PASS_QUICK_PUSH_STRATEGY_CFG[NetDefs.MAX_FACE_GROUP_NUM];

        public STU_CFG_RECOG_NO_PASS_QUICK_PUSH_STRATEGY() {
            for (int i = 0; i < stStrategyCfgs.length; i++) {
                stStrategyCfgs[i] = new STU_NO_PASS_QUICK_PUSH_STRATEGY_CFG();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nGroupCount", "stStrategyCfgs"});
        }

        public static class ByReference extends STU_CFG_RECOG_NO_PASS_QUICK_PUSH_STRATEGY implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_RECOG_NO_PASS_QUICK_PUSH_STRATEGY implements Structure.ByValue {
        }
    }

    // 单个人脸识别联动配置
    public static class STU_CFG_FACE_GROUP_RECOGNIZE_CONFIG extends Structure {
        // 抓拍间隔, 单位秒
        public int nRecogniseCircleInterval;
        // 抓拍距离最低限
        public int nRecogniseDistanceRangeLow;
        // 抓拍距离最高限
        public int nRecogniseDistanceRangeHigh;
        // 同一个人员最小重复识别间隔, 单位秒
        // 即间隔内应用针对同一人只上报一次识别结果,规避算法误检测导致id一直变化,不断上报识别结果
        public int nRepetitionRecInterval;
        // 安全帽检测模式：0关闭（默认）1提示模式 2严格模式
        public int nRecogniseSafetyHelmetMode;
        // 保留位
        public byte[] reserved = new byte[504];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRecogniseCircleInterval", "nRecogniseDistanceRangeLow", "nRecogniseDistanceRangeHigh",
                    "nRepetitionRecInterval", "nRecogniseSafetyHelmetMode", "reserved"});
        }

        public static class ByReference extends STU_CFG_FACE_GROUP_RECOGNIZE_CONFIG implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_FACE_GROUP_RECOGNIZE_CONFIG implements Structure.ByValue {
        }
    }

    // 人脸识别配置集合
    public static class STU_CFG_FACE_GROUP_RECOGNIZE_CONFIGS extends Structure {
        // 人脸识别配置实际数目
        public int nCfgCount;
        // 人脸识别配置信息数组
        public STU_CFG_FACE_GROUP_RECOGNIZE_CONFIG[] stCfgArray = new STU_CFG_FACE_GROUP_RECOGNIZE_CONFIG[NetDefs.MAX_FACE_GROUP_NUM];

        public STU_CFG_FACE_GROUP_RECOGNIZE_CONFIGS() {
            for (int i = 0; i < stCfgArray.length; i++) {
                stCfgArray[i] = new STU_CFG_FACE_GROUP_RECOGNIZE_CONFIG();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRecogniseCircleInterval", "nRecogniseDistanceRangeLow",
                    "nRecogniseDistanceRangeHigh", "reserved"});
        }

        public static class ByReference extends STU_CFG_FACE_GROUP_RECOGNIZE_CONFIGS implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_FACE_GROUP_RECOGNIZE_CONFIGS implements Structure.ByValue {
        }
    }

    // 人脸注册策略配置
    public static class STU_CFG_FACE_REGISTER_STRATEGY extends Structure {
        public int bPauseFaceDetect;                // 是否停止算法检测, TRUE - 提升入库效率, FALSE - 识别并行, 入库效率下降
        public byte[] reserved = new byte[512];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bPauseFaceDetect", "reserved"});
        }

        public static class ByReference extends STU_CFG_FACE_REGISTER_STRATEGY implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_FACE_REGISTER_STRATEGY implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 抓拍模式配置
    public static class STU_CFG_CAPTURE_MODE extends Structure {
        public int nMatchMode;                    // 抓拍匹配模式
        // 0-非实时匹配方式，先报警后抓拍，抓拍帧不是报警帧
        // 1-实时匹配模式，报警帧和抓拍帧是同一帧
        public byte[] szMode = new byte[32];        // 抓拍模式,"Auto":自动模式 | "Best":最优模式 | "Fast":快速模式 | "Custom":自定义模式 | "Monitor":监控模式
        public int nRecognizeMode;                // 识别模式，-1 - 未知； 0 - 人脸识别门禁模式； 1 - 人脸识别自动模式
        public byte[] reserved = new byte[64];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMatchMode", "szMode", "nRecognizeMode", "reserved"});
        }

        public static class ByReference extends STU_CFG_CAPTURE_MODE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_CAPTURE_MODE implements Structure.ByValue {
        }
    }

    // 抓拍张数配置
    public static class STU_CFG_SNAP_TIMES extends Structure {
        public int nRuleFaceDetectCapNum;                // 人脸检测抓拍张数，-1 表示不设置
        public int nRuleTrafficPassCapNum;                // 交通卡口抓拍张数，-1 表示不设置
        public byte[] reserved = new byte[128];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRuleFaceDetectCapNum", "nRuleTrafficPassCapNum", "reserved"});
        }

        public static class ByReference extends STU_CFG_SNAP_TIMES implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_SNAP_TIMES implements Structure.ByValue {
        }
    }

    // 体温监控配置
    public static class STU_CFG_TEMPERATURE_MONITOR extends Structure {
        public int bEnable;                            // 是否使能
        public float fThreshold;                            // 高温阈值, 需落在测温范围内
        public STU_RECT_I stuRect;                            // 报警区域，报警区域温度异常才报警
        public int iCofirmTime;                        // 正常体温确认时间：1000，2000，3000，4000，5000，6000
        public int iUploadMode;                        // 正常体温事件上报模式：0-确认即上报， 1-确认即上报+二次确认
        public float fMeasureLowerLimit;                    // 测温下限
        public float fMeasureUpperLimit;                    // 测温上限
        public byte[] reserved = new byte[240];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "fThreshold", "stuRect",
                    "iCofirmTime", "iUploadMode", "fMeasureLowerLimit", "fMeasureUpperLimit", "reserved"});
        }

        public static class ByReference extends STU_CFG_TEMPERATURE_MONITOR implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_TEMPERATURE_MONITOR implements Structure.ByValue {
        }
    }

    // WEB 端口配置
    public static class STU_CFG_NET_WEB extends Structure {
        public int uHttpEnable;                    // 使能开关，0 - 禁用；1 - 开启
        public int uHttpPort;                        // http 端口
        public int uHttpsEnable;                    // 使能开关，0 - 禁用；1 - 开启
        public int uHttpsPort;                        // https 端口
        public byte[] reserved = new byte[64];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uHttpEnable", "uHttpPort", "uHttpsEnable", "uHttpsPort", "reserved"});
        }

        public static class ByReference extends STU_CFG_NET_WEB implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_NET_WEB implements Structure.ByValue {
        }
    }

    // RTP 配置
    public static class STU_CFG_NET_RTP extends Structure {
        public int uStartPort;                        // 起始端口
        public int uEndPort;                        // 结束端口
        public byte[] reserved = new byte[64];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uStartPort", "uEndPort", "reserved"});
        }

        public static class ByReference extends STU_CFG_NET_RTP implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_NET_RTP implements Structure.ByValue {
        }
    }

    // RTSP 配置
    public static class STU_CFG_NET_RTSP extends Structure {
        public int nEnable;                        // 使能开关，0 - 禁用；1 - 开启
        public int nRtspPort;                        // rtsp  端口
        public int nMaxConnectNum;                    // 最大连接数
        public STU_CFG_NET_RTP stuRtp;                            // rtp 配置信息
        public byte[] reserved = new byte[256];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uEnable", "uRtspPort", "uMaxConnectNum", "stuRtp", "reserved"});
        }

        public static class ByReference extends STU_CFG_NET_RTSP implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_NET_RTSP implements Structure.ByValue {
        }
    }

    // NetService 配置
    public static class STU_CFG_NET_SERVICE extends Structure {
        public int uTcpPort;                        // 数据传输服务 TCP 端口
        public int uUdpPort;                        // 数据传输服务 UDP 端口
        public int uMaxConnectNum;                    // 最大连接数
        public byte[] reserved = new byte[64];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uTcpPort", "uUdpPort", "uMaxConnectNum", "reserved"});
        }

        public static class ByReference extends STU_CFG_NET_SERVICE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_NET_SERVICE implements Structure.ByValue {
        }
    }

    // 端口配置(端口设置后设备会重启)
    public static class STU_CFG_NET_PORT extends Structure {
        public int uHttpPort;
        public int uHttpsPort;
        public int uRtspPort;
        public int uServerPort;
        public byte[] reserved = new byte[64];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uHttpPort", "uHttpsPort", "uRtspPort", "uServerPort", "reserved"});
        }

        public static class ByReference extends STU_CFG_NET_PORT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_NET_PORT implements Structure.ByValue {
        }
    }

    // wifi使能配置
    public static class STU_CFG_WIFI_CONFIG extends Structure {
        public int bEnable;                    // wifi使能
        public byte[] reserved = new byte[64];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "reserved"});
        }

        public static class ByReference extends STU_CFG_WIFI_CONFIG implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_WIFI_CONFIG implements Structure.ByValue {
        }
    }

    // wifi 配置信息
    public static class STU_CFG_WIFI_INFO extends Structure {
        public byte[] cSsidName = new byte[64];    // ssid名称
        public byte[] cSsidPasswd = new byte[64];    // ssid密码
        public int uAuthMode;                    // 认证模式
        public int uencType;                    // 加密类型
        public int irssiQuality;                // 信号强度,单位是dBM
        public int uConnectedStatus;            // 链接状态, 0是未连接; 1是链接
        public byte[] reserved = new byte[64];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"cSsidName", "cSsidPasswd", "uAuthMode",
                    "uencType", "irssiQuality", "uConnectedStatus", "reserved"});
        }

        public static class ByReference extends STU_CFG_WIFI_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_WIFI_INFO implements Structure.ByValue {
        }
    }

    // wifi操作配置
    public static class STU_CFG_WIFI_OPER_CONFIG extends Structure {
        public int uOperType;                    // 0:扫描; 1是链接指定wifi; 2是断开指定wifi
        public int uNums;                        // 指定wifi数目
        public Pointer stuInfos;                    // wifi信息,内存由用户进行内存申请和释放

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uOperType", "uNums", "stuInfos"});
        }

        public static class ByReference extends STU_CFG_WIFI_OPER_CONFIG implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_WIFI_OPER_CONFIG implements Structure.ByValue {
        }
    }

    // 视频通道水印参数配置
    public static class STU_CFG_WATER_MARK extends Structure {
        public int bEnable;                        // 是否添加水印
        public byte[] szData = new byte[256];            // 水印信息
        public byte[] szKey = new byte[128];            // 水印密钥
        public byte[] reserved = new byte[256];        // 保留信息

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szData", "szKey", "reserved"});
        }

        public static class ByReference extends STU_CFG_WATER_MARK implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_WATER_MARK implements Structure.ByValue {
        }
    }

    // 日夜模式配置参数
    public static class STU_CAMERA_DAY_NIGHT_PARAM extends Structure {
        public byte byMode;                        // 色彩切换模式；0-总是彩色，1-根据亮度或时间自动切换，2-总是黑白
        public byte byDayNightSensitivity;        // 日夜模式切换灵敏度，范围1-3
        public byte byDayNightSwitchDelay;        // 日夜模式切换延迟时间	单位秒，范围2-10
        public byte[] reserved = new byte[5];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"byMode", "byDayNightSensitivity", "byDayNightSwitchDelay", "reserved"});
        }

        public static class ByReference extends STU_CAMERA_DAY_NIGHT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAMERA_DAY_NIGHT_PARAM implements Structure.ByValue {
        }
    }

    // 视频颜色配置
    public static class STU_CAMERA_COLOR extends Structure {
        public byte byBrightness;                // 亮度
        public byte byContrast;                // 对比度
        public byte bySaturation;                // 饱和度
        public byte byHue;                        // 色调

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"byBrightness", "byContrast", "bySaturation", "byHue"});
        }

        public static class ByReference extends STU_CAMERA_COLOR implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAMERA_COLOR implements Structure.ByValue {
        }
    }

    // 图像3D降噪相关参数
    public static class STU_CAMERA_3D_DENOISE extends Structure {
        public byte byTridimDenoise;                            // 是否开启3D降噪，0-关闭，1-开启，2-只开启视频，3-只开启图片
        public byte[] reserved = new byte[3];
        public byte[] byTridimIntensity = new byte[2];            // 三维降噪时域降噪强度，下标表示视频、图片，范围0~100
        public byte[] byTridimIntensitySpatial = new byte[2];        // 三维降噪空域降噪强度，下标表示视频、图片，范围0~100
        public byte[] reserved2 = new byte[32];                    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"byBrightness", "byContrast", "bySaturation", "byHue", "reserved2"});
        }

        public static class ByReference extends STU_CAMERA_3D_DENOISE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAMERA_3D_DENOISE implements Structure.ByValue {
        }
    }

    // 曝光和增益参数
    public static class STU_CAMERA_EXPOSURE extends Structure {
        public byte bGainAuto;                    // 自动增益
        public byte byGainMin;                    // 自动增益下限	范围0~100，小于GainMax
        public byte byGainMax;                    // 自动增益上限	范围0~100
        public byte byGain;                        // 固定增益调节	0~100
        public byte[] reserved = new byte[32];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bGainAuto", "byGainMin", "byGainMax", "byGain", "reserved"});
        }

        public static class ByReference extends STU_CAMERA_EXPOSURE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAMERA_EXPOSURE implements Structure.ByValue {
        }
    }

    // 光圈调节参数
    public static class STU_CAMERA_IRIS extends Structure {
        public byte bIrisAuto;                    // 自动光圈使能
        public byte byIrisType;                    // 光圈类型	0-正序光圈P90，1-反序光圈P90，2-DC光圈，3-固定光圈
        public byte[] reserved1 = new byte[2];    // 保留位
        public int dwIris;                        // 精确的手动光圈大小
        public byte[] reserved2 = new byte[32];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bIrisAuto", "byIrisType", "reserved1", "dwIris", "reserved2"});
        }

        public static class ByReference extends STU_CAMERA_IRIS implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAMERA_IRIS implements Structure.ByValue {
        }
    }

    // 白平衡模式调节参数
    public static class STU_CAMERA_WHITE_BALANCE extends Structure {
        public int emWhiteBalance;                // 白平衡模式,EM_WHITE_BALANCE
        public byte byColorTemperatureLevel;    // 色温等级调节，白平衡为"WHITEBALANCE_CT_CUSTOM"模式下有效	0~255
        public byte byGainRed;                    // 红色增益调节，白平衡为"Custom"模式下有效	0~100
        public byte byGainBlue;                    // 蓝色增益调节，白平衡为"Custom"模式下有效	0~100
        public byte byGainGreen;                // 绿色增益调节，白平衡为"Custom"模式下有效	0~100
        public byte byPartWhiteBalanceWeight;    // 权重参数，用来调整局部白平衡和全局白平衡的权重比例	范围0-100
        public byte[] reserved = new byte[19];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emWhiteBalance", "byColorTemperatureLevel", "byGainRed",
                    "byGainBlue", "byGainGreen", "byPartWhiteBalanceWeight", "reserved"});
        }

        public static class ByReference extends STU_CAMERA_WHITE_BALANCE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAMERA_WHITE_BALANCE implements Structure.ByValue {
        }
    }

    // 去雾模式参数
    public static class STU_CAMERA_DEFOG extends Structure {
        public byte byMode;                        // 透雾模式	0-关闭,1-自动,2-手动
        public byte[] reserved1 = new byte[3];    // 保留位
        public int nValue;                        // 手动模式强度
        public byte[] reserved2 = new byte[18];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"byMode", "reserved1", "wValue", "reserved2"});
        }

        public static class ByReference extends STU_CAMERA_DEFOG implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAMERA_DEFOG implements Structure.ByValue {
        }
    }

    // 测光模式
    public static class STU_CAMERA_METERING extends Structure {
        public byte byMode;                        // 测光类型 0-全局测光，1-局部测光，2-背光补偿，3-强光抑制
        public byte byIntensity;                // 测光强度	0-关闭，1-弱，2-中，3-强
        public byte[] reserved = new byte[18];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"byMode", "byIntensity", "reserved"});
        }

        public static class ByReference extends STU_CAMERA_METERING implements Structure.ByReference {
        }

        public static class ByValue extends STU_CAMERA_METERING implements Structure.ByValue {
        }
    }

    // 摄像头参数配置
    public static class STU_CFG_CAMERA extends Structure {
        public int dwSize;                                        // 结构体大小
        public STU_CAMERA_DAY_NIGHT_PARAM stuDayNightParam;                            // 日夜模式参数[VideoInDayNightParam]
        public STU_CAMERA_COLOR[] stuColor = new STU_CAMERA_COLOR[3];            // 颜色配置[VideoInColor] 下标：0-白天，1-晚上，2-其它
        public STU_CAMERA_IRIS[] stuIris = new STU_CAMERA_IRIS[3];            // 光圈配置[VideoInIrisEx] 下标：0-白天，1-晚上，2-其它
        public STU_CAMERA_3D_DENOISE stu3DDenoise;                                // 图像3D降噪相关参数	 VideoInPre3DDenoise
        public STU_CAMERA_EXPOSURE[] stueExposure = new STU_CAMERA_EXPOSURE[3];    // 增益调节[VideoInExposure] 下标：视频、图片流、抓拍帧
        public STU_CAMERA_WHITE_BALANCE[] stuWhiteBalance = new STU_CAMERA_WHITE_BALANCE[3];    // 白平衡参数[VideoInWhiteBalance] 下标：视频、图片流、抓拍帧
        public STU_CAMERA_DEFOG[] stuDefog = new STU_CAMERA_DEFOG[3];            // 去雾配置[VideoInDefog] 下标：0-白天，1-黑夜，2-其它
        public STU_CAMERA_METERING stuMetering;                                // 测光配置[VideoInMetering]
        public byte[] reserved = new byte[256];                    // 保留位

        public STU_CFG_CAMERA() {
            for (int i = 0; i < stuColor.length; i++) {
                stuColor[i] = new STU_CAMERA_COLOR();
            }

            for (int i = 0; i < stuIris.length; i++) {
                stuIris[i] = new STU_CAMERA_IRIS();
            }

            for (int i = 0; i < stueExposure.length; i++) {
                stueExposure[i] = new STU_CAMERA_EXPOSURE();
            }

            for (int i = 0; i < stuWhiteBalance.length; i++) {
                stuWhiteBalance[i] = new STU_CAMERA_WHITE_BALANCE();
            }

            for (int i = 0; i < stuDefog.length; i++) {
                stuDefog[i] = new STU_CAMERA_DEFOG();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "stuDayNightParam", "stuColor",
                    "stuIris", "stu3DDenoise", "stueExposure", "stuWhiteBalance", "stuDefog", "stuMetering", "reserved"});
        }

        public static class ByReference extends STU_CFG_CAMERA implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_CAMERA implements Structure.ByValue {
        }
    }

    // 视频时间 OSD 参数配置
    public static class STU_CFG_VIDEO_OSD_TIME extends Structure {
        public int bEnable;                        // 使能
        public int bShowWeek;                        // 是否显示星期
        public STU_RECT_I stuRect;                        // 显示位置【0-8192】坐标系
        public byte[] reserved = new byte[64];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "bShowWeek", "stuRect", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEO_OSD_TIME implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEO_OSD_TIME implements Structure.ByValue {
        }
    }

    // 视频通道 OSD 参数配置
    public static class STU_CFG_VIDEO_OSD_CHANNEL extends Structure {
        public int bEnable;                        // 使能
        public STU_RECT_I stuRect;                        // 显示位置【0-8192】坐标系
        public byte[] szText = new byte[256];            // 标题内容
        public byte[] reserved = new byte[256];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "stuRect", "szText", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEO_OSD_CHANNEL implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEO_OSD_CHANNEL implements Structure.ByValue {
        }
    }

    // 视频自定义 OSD 参数配置
    public static class STU_CFG_VIDEO_OSD_CUSTOM extends Structure {
        public int bEnable;                        // 使能
        public STU_RECT_I stuRect;                        // 显示位置【0-8192】坐标系
        public byte[] szText = new byte[256];            // 标题内容
        public byte[] reserved = new byte[256];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "stuRect", "szText", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEO_OSD_CUSTOM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEO_OSD_CUSTOM implements Structure.ByValue {
        }
    }

    // 视频 OSD 参数配置
    public static class STU_CFG_VIDEO_OSD extends Structure {
        public byte byFontSize;                        // 字体大小 24/32/48...
        public byte byFontType;                        // 字体类型 0-宋体 1-楷体 2-雅黑
        public byte[] reserved1 = new byte[6];                    // 保留参数
        public STU_CFG_VIDEO_OSD_CHANNEL stuChannelOsd;                    // 通道OSD
        public STU_CFG_VIDEO_OSD_TIME stuTimeOsd;                        // 时间OSD
        public int nRealCustomOsdCount;            // 实际自定义OSD个数
        // 自定义OSD
        public STU_CFG_VIDEO_OSD_CUSTOM[] stuCustomOsdArray = new STU_CFG_VIDEO_OSD_CUSTOM[NetDefs.MAX_VIDEO_OSD_CUSTOM_NUM];
        public byte[] reserved2 = new byte[512];        // 保留位

        public STU_CFG_VIDEO_OSD() {
            for (int i = 0; i < stuCustomOsdArray.length; i++) {
                stuCustomOsdArray[i] = new STU_CFG_VIDEO_OSD_CUSTOM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"byFontSize", "byFontType", "reserved1",
                    "stuChannelOsd", "stuTimeOsd", "nRealCustomOsdCount", "stuCustomOsdArray", "reserved2"});
        }

        public static class ByReference extends STU_CFG_VIDEO_OSD implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEO_OSD implements Structure.ByValue {
        }
    }

    //存储点
    public static class STU_CFG_STORAGE_POINT extends Structure {
        public int bSupportFtp;
        public int bSupportLocal;
        public int bSupportUsb;
        public byte[] reserved = new byte[32];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bSupportFtp", "bSupportLocal", "bSupportUsb", "reserved"});
        }

        public static class ByReference extends STU_CFG_STORAGE_POINT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_STORAGE_POINT implements Structure.ByValue {
        }
    }

    //存储策略
    public static class STU_CFG_STORAGE_POLICY extends Structure {
        public int bOverWrite;                        // 存储空间是否满覆盖
        public int bEmergenceStorage;                // 是否紧急存储，true 启动紧急存储；false 使用本地存储
        public byte[] reserved = new byte[32];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bOverWrite", "bEmergenceStorage", "reserved"});
        }

        public static class ByReference extends STU_CFG_STORAGE_POLICY implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_STORAGE_POLICY implements Structure.ByValue {
        }
    }

    // 存储配置
    public static class STU_CFG_STORAGE extends Structure {
        public int dwSize;                                            // 结构体大小
        public STU_CFG_STORAGE_POINT[] stuStorPoint = new STU_CFG_STORAGE_POINT[2];    // [0]是录像，1是抓图
        public STU_CFG_STORAGE_POLICY stuStoragePolicy;
        public byte[] reserved = new byte[256];                        // 保留位

        public STU_CFG_STORAGE() {
            for (int i = 0; i < stuStorPoint.length; i++) {
                stuStorPoint[i] = new STU_CFG_STORAGE_POINT();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "stuStorPoint", "stuStoragePolicy", "reserved"});
        }

        public static class ByReference extends STU_CFG_STORAGE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_STORAGE implements Structure.ByValue {
        }
    }

    // 网络服务 FTP 参数
    public static class STU_CFG_NET_STORAGE_FTP extends Structure {
        public int uFtpPort;                        // Ftp 服务器端口
        public int bRealtimeEnable;                // 实时上传图片使能
        public byte[] szUserName = new byte[64];        // Ftp 用户名
        public byte[] szPassword = new byte[64];        // Ftp 用户密码
        public byte[] szPathRule = new byte[160];        // Ftp 上传图片路径规则，目录级匹配符
        // 路径匹配符：
        // Y: 年			M: 月			D: 日			h: 时			m: 分			s: 秒
        // c: 通道			n: 设备ID		i: 设备IP		e: 事件代码		u: 毫秒时间戳	x: 强制附加信息，用户不可配
        // 如规则 "/%c_%e/%Y%M%D%h%m%s.jpg" => /通道_事件代码/年月日时分秒.jpg
        public int emPathEncodeType;                // 路径编码类型 UTF8 / GB2312 ..., EM_FTP_PATH_ENCODE_TYPE
        public byte[] reserved = new byte[256];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uFtpPort", "bRealtimeEnable", "szUserName",
                    "szPassword", "szPathRule", "emPathEncodeType", "reserved"});
        }

        public static class ByReference extends STU_CFG_NET_STORAGE_FTP implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_NET_STORAGE_FTP implements Structure.ByValue {
        }
    }

    // 网络存储配置项
    public static class STU_CFG_NET_STORAGE_TRANS_ITEM extends Structure {
        public byte[] szProtocol = new byte[16];        // 协议名称 Sdk / Ftp / ThirdpartPlatform；当为空时无效
        public byte[] szAddress = new byte[64];        // 服务地址, IP 或 域名
        public int bOfflineEnable;                    // 断网续传使能
        public STU_CFG_NET_STORAGE_FTP stuFtpParams;                    // Ftp 设置参数,当Protocol为"Ftp"时有效
        public byte[] reserved = new byte[256];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szProtocol", "szAddress", "bOfflineEnable", "stuFtpParams", "reserved"});
        }

        public static class ByReference extends STU_CFG_NET_STORAGE_TRANS_ITEM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_NET_STORAGE_TRANS_ITEM implements Structure.ByValue {
        }
    }

    // 所有网络存储配置项
    public static class STU_CFG_NET_STORAGE_TRANS extends Structure {
        public int uItemCount;
        public STU_CFG_NET_STORAGE_TRANS_ITEM[] stuItemArray = new STU_CFG_NET_STORAGE_TRANS_ITEM[NetDefs.MAX_NET_STORAGE_ITEM_NUM];

        public STU_CFG_NET_STORAGE_TRANS() {
            for (int i = 0; i < stuItemArray.length; i++) {
                stuItemArray[i] = new STU_CFG_NET_STORAGE_TRANS_ITEM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uItemCount", "stuItemArray"});
        }

        public static class ByReference extends STU_CFG_NET_STORAGE_TRANS implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_NET_STORAGE_TRANS implements Structure.ByValue {
        }
    }

    // Telenet 配置
    public static class STU_CFG_TELNET extends Structure {
        public int dwSize;                    // 结构体大小
        public int bEnable;                    // telnet使能

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"dwSize", "bEnale"});
        }

        public static class ByReference extends STU_CFG_TELNET implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_TELNET implements Structure.ByValue {
        }
    }

    // 日志查询条件
    public static class STU_CFG_LOG_CONDITION extends Structure {
        public byte[] cStartTime = new byte[32];            // 日志查询开始时间
        public byte[] cEndTime = new byte[32];            // 日志查询结束时间
        public byte[] cMainType = new byte[32];            // 主日志类型，空则查询所有主类型
        public byte[] cSubType = new byte[32];            // 次日志类型，空则查询所有子类型
        public byte[] reserved = new byte[64];            // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"cStartTime", "cEndTime", "cMainType", "cSubType", "reserved"});
        }

        public static class ByReference extends STU_CFG_LOG_CONDITION implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_LOG_CONDITION implements Structure.ByValue {
        }
    }

    // 系统自检结果
    public static class STU_CFG_LOG_DETAIL_SYS_SELF_CHECK extends Structure {
        public int bValid;                        // 是否有效
        public int bStorageCheck;                // 存储自检结果
        public int bNetworkCheck;                // 网络自检结果
        public int bMemCheck;                    // 内存自检结果
        public int bDataBaseCheck;                // 数据库自检结果

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bValid", "bStorageCheck", "bNetworkCheck",
                    "bMemCheck", "bDataBaseCheck"});
        }

        public static class ByReference extends STU_CFG_LOG_DETAIL_SYS_SELF_CHECK implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_LOG_DETAIL_SYS_SELF_CHECK implements Structure.ByValue {
        }
    }

    // 日志详细信息
    public static class STU_CFG_LOG_DETAIL extends Structure {
        public int iChannel;                            // 通道号
        public byte[] cRemoteIP = new byte[64];            // 远程登录IP
        public byte[] cConfigName = new byte[32];            // 配置名称
        public byte[] cNetAdapter = new byte[32];            // 网卡名称
        public byte[] cClientType = new byte[32];            // 客户端类型
        public int nRebootError;                        // 重启错误码信息
        public STU_CFG_LOG_DETAIL_SYS_SELF_CHECK stSysSelfCheckResult;                // 系统自检结果，当次日志类型（cSubType）为"SystemSelfCheck"时有效
        public byte[] reserved = new byte[40];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"iChannel", "cRemoteIP", "cConfigName",
                    "cNetAdapter", "cClientType", "nRebootError", "stSysSelfCheckResult", "reserved"});
        }

        public static class ByReference extends STU_CFG_LOG_DETAIL implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_LOG_DETAIL implements Structure.ByValue {
        }
    }

    // 日志查询结果
    public static class STU_CFG_LOG_INFO extends Structure {
        public byte[] cLogTime = new byte[32];                // 该日志记录时间
        public byte[] cOperUserName = new byte[32];            // 操作用户名
        public byte[] cMainType = new byte[32];                // 主日志类型
        public byte[] cSubType = new byte[32];                // 次日志类型
        public STU_CFG_LOG_DETAIL stuLogDetail;                            // 日志详细信息

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"cLogTime", "cOperUserName", "cMainType", "cSubType", "stuLogDetail"});
        }

        public static class ByReference extends STU_CFG_LOG_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_LOG_INFO implements Structure.ByValue {
        }
    }

    public static class STU_CFG_LOG_RESULT extends Structure {
        public int uTotal;                        // 查询到的总共的日志条数
        public int uCurAmount;                    // 当前返回的日志条数
        public STU_CFG_LOG_INFO[] stuResult = new STU_CFG_LOG_INFO[NetDefs.MAX_LOG_AMOUNT];    // 一次最多查询MAX_LOG_AMOUNT条日志信息						// 日志详细信息

        public STU_CFG_LOG_RESULT() {
            for (int i = 0; i < stuResult.length; i++) {
                stuResult[i] = new STU_CFG_LOG_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"cLogTime", "cOperUserName", "cMainType", "cSubType", "stuLogDetail"});
        }

        public static class ByReference extends STU_CFG_LOG_RESULT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_LOG_RESULT implements Structure.ByValue {
        }
    }

    // 日志查询,支持多次查询
    public static class STU_CFG_LOG extends Structure {
        public STU_CFG_LOG_CONDITION stuSearchCondition;            // 日志查询条件
        public STU_CFG_LOG_RESULT stuLogResult;                // 日志查询结果

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stuSearchCondition", "stuLogResult"});
        }

        public static class ByReference extends STU_CFG_LOG implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_LOG implements Structure.ByValue {
        }
    }

    // 黑白名单条目信息
    public static class STU_CFG_NET_WB_ITEM extends Structure {
        public byte bIPType;                        // ip地址类型: 0代表单个 IP 地址, 1代表 IP 范围
        public byte[] reserved = new byte[3];            // 保留位
        public byte[] cBeginIPAddr = new byte[64];    // 起始 IP 地址, 用于bIPType为0和1的情况
        // 起始 IP 为空则条目无效
        public byte[] cEndIPAddr = new byte[64];        // 终止 IP 地址, 仅用于bIPType为1情况
        // 终止 IP 为空，则该条目只是单 IP 地址

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bIPType", "reserved", "cBeginIPAddr", "cEndIPAddr"});
        }

        public static class ByReference extends STU_CFG_NET_WB_ITEM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_NET_WB_ITEM implements Structure.ByValue {
        }
    }

    // 黑白名单配置信息
    public static class STU_CFG_NET_WB_INFO extends Structure {
        public byte bType;                        // 黑白名单类型:0-无;1-黑名单,2-白名单
        public byte[] reserved = new byte[3];                // 保留位

        public int uIPv4Count;                    // 实际 IPv4 黑白名单信息个数，不超过 MAX_NET_WBLIST_NUM
        // 获取时是实际的黑白名单数目；设置时可以不填写
        // IPv4 黑白名单信息
        public STU_CFG_NET_WB_ITEM[] stuIPv4WBInfoArray = new STU_CFG_NET_WB_ITEM[NetDefs.MAX_NET_WB_ITEM_NUM];

        public int uIPv6Count;                    // 实际 IPv6 黑白名单信息个数，不超过 MAX_NET_WBLIST_NUM
        // 获取时是实际的黑白名单数目；设置时可以不填写
        // IPv6 黑白名单信息,内存由外部申请和释放
        public STU_CFG_NET_WB_ITEM[] stuIPv6WBInfoArray = new STU_CFG_NET_WB_ITEM[NetDefs.MAX_NET_WB_ITEM_NUM];

        public STU_CFG_NET_WB_INFO() {
            for (int i = 0; i < stuIPv4WBInfoArray.length; i++) {
                stuIPv4WBInfoArray[i] = new STU_CFG_NET_WB_ITEM();
            }

            for (int i = 0; i < stuIPv6WBInfoArray.length; i++) {
                stuIPv6WBInfoArray[i] = new STU_CFG_NET_WB_ITEM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bType", "reserved", "uIPv4Count",
                    "stuIPv4WBInfoArray", "uIPv6Count", "stuIPv6WBInfoArray"});
        }

        public static class ByReference extends STU_CFG_NET_WB_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_NET_WB_INFO implements Structure.ByValue {
        }
    }

    //抠图配置结构体
    public static class STU_CFG_SNAP_CUTOUT extends Structure {
        public int bEnable;
        public int nType;            // -1 表示无效，0是人脸抠图; 1是半身抠图; 2是全身抠图; 3是车牌抠图
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "nType", "reserved"});
        }

        public static class ByReference extends STU_CFG_SNAP_CUTOUT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_SNAP_CUTOUT implements Structure.ByValue {
        }
    }

    // 叠加配置
    public static class STU_CFG_OVERLAP extends Structure {
        // 是否叠加跟踪信息
        public int bMajorStreamIntelliTrack;
        // 是否叠加调试信息
        public int bMajorStreamDebug;
        // 保留字节
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bMajorStreamIntelliTrack", "bMajorStreamDebug", "reserved"});
        }

        public static class ByReference extends STU_CFG_OVERLAP implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_OVERLAP implements Structure.ByValue {
        }
    }

    // 抓图配置
    public static class STU_CFG_GRAP_PIC extends Structure {
        // 是否叠加跟踪信息
        public int bPictureUpload;
        // 保留字节
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bPictureUpload", "reserved"});
        }

        public static class ByReference extends STU_CFG_GRAP_PIC implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_GRAP_PIC implements Structure.ByValue {
        }
    }

    // 叠加与抓图配置
    public static class STU_CFG_OVERLAP_PIC extends Structure {
        public STU_CFG_OVERLAP stuOverLap;
        public STU_CFG_GRAP_PIC stuGrapPic;
        public byte[] reserved = new byte[256];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stuOverLap", "stuGrapPic", "reserved"});
        }

        public static class ByReference extends STU_CFG_OVERLAP_PIC implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_OVERLAP_PIC implements Structure.ByValue {
        }
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // 人脸过滤参数使用区间值
    public static class STU_CFG_INTELLI_SCENE_SECTION_CONFIG_PARAM extends Structure {
        public int nMaxFaceSize;                        // 最大人脸像素，构成区间[nFaceSize, nMaxFaceSize]
        public float fMinBlurThreshold;                    // 最小模糊度，构成区间[fMinBlurThreshold, fBlurThreshold]
        public float fMinPoseRoll;                        // 最小roll角度，构成区间[fMinPoseRoll, fPoseRoll]
        public float fMinPosePitch;                        // 最小pitch角度，构成区间[fMinPosePitch,fPosePitch]
        public float fMinPoseYaw;                        // 最小yaw角度，构成区间[fMinPoseYaw, fPoseYaw]
        public byte[] reserved = new byte[64];            // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMaxFaceSize", "fMinBlurThreshold", "fMinPoseRoll",
                    "fMinPosePitch", "fMinPoseYaw", "reserved"});
        }

        public static class ByReference extends STU_CFG_INTELLI_SCENE_SECTION_CONFIG_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_SCENE_SECTION_CONFIG_PARAM implements Structure.ByValue {
        }
    }

    // 识别参数
    public static class STU_CFG_INTELLI_SCENE_DOOR_RECOGNIZE_PARAM extends Structure {
        public int nRecogniseInterval;                        // 人脸推送识别间隔
        public int nRecogniseCount;                        // 识别结果推送次数
        public int nRecogniseMinFaceSize;                    // 识别的最小人脸像素
        public byte[] reserved = new byte[64];                // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRecogniseInterval", "nRecogniseCount",
                    "nRecogniseMinFaceSize", "reserved"});
        }

        public static class ByReference extends STU_CFG_INTELLI_SCENE_DOOR_RECOGNIZE_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_SCENE_DOOR_RECOGNIZE_PARAM implements Structure.ByValue {
        }
    }

    // 人脸检测场景全局参数
    public static class STU_CFG_INTELLI_SCENE_FACE_DETECT_GLOBAL_PARAM extends Structure {
        public int nFaceSize;                            // 抓拍人脸的最小像素
        public int nAnalyseInterval;                    // 算法处理间隔, 单位 ms，范围 0-2000，0 表示不作限制
        // 间隔越短算法分析的帧越多，检测率越高，耗时越大
        public int nAnalyseCount;                        // 满足过滤阈值的最大处理次数,范围 0-20
        // 算法分析同一人脸达到次数后，不再分析此人脸
        public float fPoseRoll;                            // 最大转头角度；roll 角度
        public float fPosePitch;                            // 最大点头角度；picth 角度
        public float fPoseYaw;                            // 最大摇头角度；yaw 角度
        public float fBlurThreshold;                        // 抓拍人脸的模糊程度约束

        public STU_RECT_I stuDetectRect;                        // 人脸检测区域 [0-8192]坐标系

        public float fLandMarkConfidence;                // landMark置信度，区间范围[0-1]，越大越好，小于该值不做抓拍和识别

        public int bStaticFaceFilterEnable;            // 静态人脸过滤使能
        public int nStaticFaceFilterSensitive;            // 静态人脸过滤灵敏度[1,99]值越大越灵敏

        public int bDoFeature;                            // 是否支持只抽取特征值、写入图片冗余信息功能
        public int bRecogniseAttribute;                // 人脸属性上报使能开关

        public int bMeetSafeLimit;                        // 是否使用安全边界，STU_CFG_CAPTURE_MODE.szMode = "BEST" 时使用

        public int bSectionConfigEnable;                // 抓拍是否使用人脸过滤参数参数区间，STU_CFG_CAPTURE_MODE.szMode = "AUTO" 时使用
        public STU_CFG_INTELLI_SCENE_SECTION_CONFIG_PARAM stuSectionConfig;                    // 人脸过滤参数参数区间，STU_CFG_CAPTURE_MODE.szMode = "AUTO" 时使用

        public STU_CFG_INTELLI_SCENE_DOOR_RECOGNIZE_PARAM stuDoorRecognizsParam;                // 识别参数，STU_CFG_CAPTURE_MODE.nRecognizeMode = 0 - 人脸识别门禁模式 时使用

        public byte[] reserved = new byte[324];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nFaceSize", "nAnalyseInterval", "nAnalyseCount",
                    "fPoseRoll", "fPosePitch", "fPoseYaw", "fBlurThreshold", "stuDetectRect",
                    "fLandMarkConfidence", "bStaticFaceFilterEnable", "nStaticFaceFilterSensitive",
                    "bDoFeature", "bRecogniseAttribute", "bMeetSafeLimit", "bSectionConfigEnable",
                    "stuSectionConfig", "stuDoorRecognizsParam", "reserved"});
        }

        public static class ByReference extends STU_CFG_INTELLI_SCENE_FACE_DETECT_GLOBAL_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_SCENE_FACE_DETECT_GLOBAL_PARAM implements Structure.ByValue {
        }
    }

    // 本机语言配置
    public static class STU_CFG_LANGUAGE extends Structure {
        // 简体中文 SimpChinese , 英文 English
        public byte[] szLanguage = new byte[NetDefs.MAX_LANGUAGE_LENGTH];
        // 保留字节
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szLanguage", "reserved"});
        }

        public static class ByReference extends STU_CFG_LANGUAGE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_LANGUAGE implements Structure.ByValue {
        }
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////
    //联网业务配置
    public static class STU_CFG_WIRELESS_PPP_CONFIG extends Structure {
        // 是否启用ppp拨号连接
        public int bEnable;
        // IMEI，此字段暂为只读，设置无效，Read only
        public byte[] szIMEI = new byte[64];
        // 保留字节
        public byte[] reserved = new byte[448];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szIMEI", "reserved"});
        }

        public static class ByReference extends STU_CFG_WIRELESS_PPP_CONFIG implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_WIRELESS_PPP_CONFIG implements Structure.ByValue {
        }
    }

    // 手机4G网络配置
    public static class STU_CFG_MOBILE_NET_CONFIG extends Structure {
        // 联网业务配置实际数量，最大 MAX_MOBILE_WIRELESS_PPP_CONFIG_COUINT 个
        public int nWirelessPPPCfgCount;
        // 联网业务配置
        public STU_CFG_WIRELESS_PPP_CONFIG[] stWirelessPPPCfgs = new STU_CFG_WIRELESS_PPP_CONFIG[NetDefs.MAX_MOBILE_WIRELESS_PPP_CFG_COUINT];
        // 保留字节
        public byte[] reserved = new byte[1024];

        public STU_CFG_MOBILE_NET_CONFIG() {
            for (int i = 0; i < stWirelessPPPCfgs.length; i++) {
                stWirelessPPPCfgs[i] = new STU_CFG_WIRELESS_PPP_CONFIG();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nWirelessPPPCfgCount", "stWirelessPPPCfgs", "reserved"});
        }

        public static class ByReference extends STU_CFG_MOBILE_NET_CONFIG implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_MOBILE_NET_CONFIG implements Structure.ByValue {
        }
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // 人脸检测智能场景配置
    public static class STU_CFG_INTELLI_SCENE_FACE_DETECT extends Structure {
        public byte[] szClass = new byte[32];                                // 业务大类, 不可设置
        public byte[] szAlgorithm = new byte[32];                            // 算法版本，不可设置
        public STU_CFG_INTELLI_SCENE_FACE_DETECT_GLOBAL_PARAM stuParam;                // 人脸检测场景全局参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szClass", "szAlgorithm", "stuParam"});
        }

        public static class ByReference extends STU_CFG_INTELLI_SCENE_FACE_DETECT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_SCENE_FACE_DETECT implements Structure.ByValue {
        }
    }

    // 人脸检测抓拍具体配置
    public static class STU_CFG_INTELLI_RULE_FD_CFG extends Structure {
        public int bRecogniseFace;                    // 是否需要识别属性（年龄、性别等），需要SupportedRules能力支持
        public int nSnapInterval;                    // 抓拍间隔，单位 ms
        // 抓拍模式为 Auto 或 Custom 时使用
        public int nQualityThreshold;                // 质量阈值 [0-100]，小于阈值的图片会被过滤
        // 抓拍模式为 Custom 是使用
        public byte[] reserved = new byte[64];        // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bRecogniseFace", "nSnapInterval", "nQualityThreshold", "reserved"});
        }

        public static class ByReference extends STU_CFG_INTELLI_RULE_FD_CFG implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_RULE_FD_CFG implements Structure.ByValue {
        }
    }

    // 人脸检测抓拍规则配置
    public static class STU_CFG_INTELLI_RULE_FACE_DETECT extends Structure {
        public int bEnable;                        // 规则使能
        public byte[] szClass = new byte[32];            // 业务大类, 不可设置
        public byte[] szType = new byte[32];            // 业务小类, 不可设置
        public byte[] szName = new byte[32];            // 规则名称, 不可设置
        public STU_CFG_INTELLI_RULE_FD_CFG stuConfig;                        // 检测配置信息
        public STU_EVENT_HANDLER stuEventHandler;                // 视频分析联动
        public byte[] reserved = new byte[64];        // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szClass", "szType",
                    "szName", "stuConfig", "stuEventHandler", "reserved"});
        }

        public static class ByReference extends STU_CFG_INTELLI_RULE_FACE_DETECT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_RULE_FACE_DETECT implements Structure.ByValue {
        }
    }

    // 人脸检测识别规则配置
    public static class STU_CFG_INTELLI_RULE_FACE_RECOGNIZE extends Structure {
        public int bEnable;                        // 规则使能
        public byte[] szClass = new byte[32];            // 业务大类, 不可设置
        public byte[] szType = new byte[32];            // 业务小类, 不可设置
        public byte[] szNam = new byte[32];            // 规则名称, 不可设置
        public STU_EVENT_HANDLER stuEventHandler;                // 视频分析联动
        public byte[] reserved = new byte[512];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szClass", "szType",
                    "szName", "stuConfig", "stuEventHandler", "reserved"});
        }

        public static class ByReference extends STU_CFG_INTELLI_RULE_FACE_RECOGNIZE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_RULE_FACE_RECOGNIZE implements Structure.ByValue {
        }
    }

    // 人脸检测统计具体配置
    public static class STU_CFG_INTELLI_RULE_FD_STAT_CFG extends Structure {
        public int nInterval;                        // 统计周期, 单位 s
        public byte[] reserved = new byte[64];        // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nInterval", "reserved"});
        }

        public static class ByReference extends STU_CFG_INTELLI_RULE_FD_STAT_CFG implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_RULE_FD_STAT_CFG implements Structure.ByValue {
        }
    }

    // 人脸检测统计规则配置
    public static class STU_CFG_INTELLI_RULE_FACE_STATISTIC extends Structure {
        public int bEnable;                        // 规则使能
        public byte[] szClass = new byte[32];            // 业务大类, 不可设置
        public byte[] szType = new byte[32];            // 业务小类, 不可设置
        public byte[] szName = new byte[32];            // 规则名称, 不可设置
        public STU_CFG_INTELLI_RULE_FD_STAT_CFG stuConfig;            // 统计配置信息
        public byte[] reserved = new byte[256];        // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szClass", "szType", "szName", "stuConfig", "reserved"});
        }

        public static class ByReference extends STU_CFG_INTELLI_RULE_FACE_STATISTIC implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_RULE_FACE_STATISTIC implements Structure.ByValue {
        }
    }

    public static class STU_CFG_PTZ_CALIBRATE_AREA_POS_PARAM extends Structure {
        public short nx;
        public short ny;
        public byte nz;
        public byte[] reserved = new byte[3];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nx", "ny", "nz", "reserved"});
        }

        public static class ByReference extends STU_CFG_PTZ_CALIBRATE_AREA_POS_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_PTZ_CALIBRATE_AREA_POS_PARAM implements Structure.ByValue {
        }
    }

    // 球机智能场景校正区域参数
    public static class STU_CFG_INTELLI_SCENE_SD_TRAFFIC_CALIBRATE_AREA_PARAM extends Structure {
        public STU_POLY_POINTS stArea;                        // 车牌标定区域
        // 多边形中每个顶点的坐标坐标归一化到[0,8192)区间
        // P 0~3600，T -1800~1800，Z 0~127
        public STU_CFG_PTZ_CALIBRATE_AREA_POS_PARAM stCaliPosition;
        public int nCalibratePixel;            // 违停球，设置车牌定位时，相机二次变倍的车牌像素大小
        // 80~200（像素），表示变倍到指定的车牌像素大小

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stArea", "stCaliPosition", "nCalibratePixel"});
        }

        public static class ByReference extends STU_CFG_INTELLI_SCENE_SD_TRAFFIC_CALIBRATE_AREA_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_SCENE_SD_TRAFFIC_CALIBRATE_AREA_PARAM implements Structure.ByValue {
        }
    }

    // 球机智能场景全局参数
    public static class STU_CFG_INTELLI_SCENE_SD_TRAFFIC_PARAM extends Structure {
        public int bEnable;                            // 使能
        public int nPresetID;                            // 场景编号，0表示单场景
        public byte[] szName = new byte[16];                // 场景名称
        public STU_POLY_POINTS stDetectRegion;                        // 检测区域，多边形中每个顶点的坐标坐标归一化到[0,8192)区间
        public int nSensitivity;                        // 区域检测物体灵敏度，取值1~10，值越小灵敏度越低
        public STU_CFG_INTELLI_SCENE_SD_TRAFFIC_CALIBRATE_AREA_PARAM stCalibrateArea;    // 标定区域
        public byte[] reserved = new byte[512];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "nPresetID", "szName",
                    "stDetectRegion", "nSensitivity", "stCalibrateArea", "reserved"});
        }

        public static class ByReference extends STU_CFG_INTELLI_SCENE_SD_TRAFFIC_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_SCENE_SD_TRAFFIC_PARAM implements Structure.ByValue {
        }
    }

    // 球机智能场景配置
    public static class STU_CFG_INTELLI_SCENE_SD_TRAFFIC extends Structure {
        public byte[] szClass = new byte[32];                        // 业务大类, 不可设置
        public byte[] szAlgorithm = new byte[32];                    // 算法版本，不可设置
        public STU_CFG_INTELLI_SCENE_SD_TRAFFIC_PARAM stuParam;                // 球机智能场景全局参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szClass", "szAlgorithm", "stuParam"});
        }

        public static class ByReference extends STU_CFG_INTELLI_SCENE_SD_TRAFFIC implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_SCENE_SD_TRAFFIC implements Structure.ByValue {
        }
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 违停抓拍设置
    public static class STU_CFG_INTELLI_RULE_SD_TRAFFIC_RULE_PARAM extends Structure {
        public int[] emSnapshotType = new int[NetDefs.MAX_SD_TRAFFIC_SETTING_SNAPSHOT_COUNT];            // 抓拍类型数组，4次抓拍
        public int[] nSnapshotInterval = new int[NetDefs.MAX_SD_TRAFFIC_SETTING_SNAPSHOT_COUNT];        // 抓拍时间间隔，4次抓拍
        public int emShanpshotMode;                                                                    // 抓拍模式

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emSnapshotType", "nSnapshotInterval", "emShanpshotMode"});
        }

        public static class ByReference extends STU_CFG_INTELLI_RULE_SD_TRAFFIC_RULE_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_RULE_SD_TRAFFIC_RULE_PARAM implements Structure.ByValue {
        }
    }

    // 违停规则配置
    public static class STU_CFG_INTELLI_RULE_SD_TRAFFIC_CFG extends Structure {
        public int nPresetID;                        // 场景编号，0表示单场景
        public int nSnapInterval;                    // 不重复抓拍的时间，单位小时，范围1~24
        public int nFeatureRatio;                    // 特写抠图比例
        // 单位：%，范围30-90；当值为30，则抠图以车牌中心为中心，宽度为图片宽度的30%
        public STU_CFG_INTELLI_RULE_SD_TRAFFIC_RULE_PARAM stSnapshotWithRule;                // 抓拍设置

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nPresetID", "nSnapInterval", "nFeatureRatio", "stSnapshotWithRule"});
        }

        public static class ByReference extends STU_CFG_INTELLI_RULE_SD_TRAFFIC_CFG implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_RULE_SD_TRAFFIC_CFG implements Structure.ByValue {
        }
    }

    // 球机智能场景违停规则配置
    public static class STU_CFG_INTELLI_RULE_SD_TRAFFIC extends Structure {
        public int bEnable;                                                    // 规则使能
        public byte[] szClass = new byte[32];                                        // 业务大类, 不可设置
        public byte[] szType = new byte[32];                                        // 业务小类, 不可设置
        public byte[] szName = new byte[32];                                        // 规则名称, 不可设置
        public STU_CFG_INTELLI_RULE_SD_TRAFFIC_CFG stuConfig = new STU_CFG_INTELLI_RULE_SD_TRAFFIC_CFG();        // 检测配置信息
        public STU_EVENT_HANDLER stuEventHandler = new STU_EVENT_HANDLER();                    // 视频分析联动
        public byte[] reserved = new byte[64];                                    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szClass", "szType",
                    "szName", "stuConfig", "stuEventHandler", "reserved"});
        }

        public static class ByReference extends STU_CFG_INTELLI_RULE_SD_TRAFFIC implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_RULE_SD_TRAFFIC implements Structure.ByValue {
        }
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 非机动车横穿马路规则
    public static class STU_RULE_SD_TRAFFIC_ROAD_CROSSING extends Structure {
        // 场景编号，0表示单场景
        public int nPresetID;
        // 超时时间，单位秒
        public int nTimeOut;
        // 特写抠图比例
        // 单位 %，范围30-90
        // 当值为30，则抠图以非机动车中心为中心，宽度为图片宽度的30%
        // 当值为90，则抠图为以图片中心为中心，宽度为目标宽度的90%
        public int nFeatureRatio;
        // 抓拍张数
        public int nSnapShotTimes;
        // 检测线信息数组，最大长度8数组，数组的下标表示各条检测线，从0开
        public STU_POLY_POINTS[] stuDetectLanes = new STU_POLY_POINTS[NetDefs.MAX_ROAD_CROSSING_DETECT_LANE_MAX_NUM];
        // 保留位
        public byte[] reserved = new byte[512];

        public STU_RULE_SD_TRAFFIC_ROAD_CROSSING() {
            for (int i = 0; i < stuDetectLanes.length; i++) {
                stuDetectLanes[i] = new STU_POLY_POINTS();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nPresetID", "nTimeOut", "nFeatureRatio",
                    "nSnapShotTimes", "stuDetectLanes", "reserved"});
        }

        public static class ByReference extends STU_RULE_SD_TRAFFIC_ROAD_CROSSING implements Structure.ByReference {
        }

        public static class ByValue extends STU_RULE_SD_TRAFFIC_ROAD_CROSSING implements Structure.ByValue {
        }
    }

    // 球机智能场景非机动车横穿马路规则
    public static class STU_CFG_INTELLI_RULE_SD_TRAFFIC_ROAD_CROSSING extends Structure {
        public int bEnable;                                                // 规则使能
        public byte[] szClass = new byte[32];                                    // 业务大类, 不可设置
        public byte[] szType = new byte[32];                                    // 业务小类, 不可设置
        public byte[] szName = new byte[32];                                    // 规则名称, 不可设置
        public STU_RULE_SD_TRAFFIC_ROAD_CROSSING stuConfig = new STU_RULE_SD_TRAFFIC_ROAD_CROSSING();    // 检测配置信息
        public STU_EVENT_HANDLER stuEventHandler = new STU_EVENT_HANDLER();                // 视频分析联动
        public byte[] reserved = new byte[64];                                // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szClass", "szType",
                    "szName", "stuConfig", "stuEventHandler", "reserved"});
        }

        public static class ByReference extends STU_CFG_INTELLI_RULE_SD_TRAFFIC_ROAD_CROSSING implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_RULE_SD_TRAFFIC_ROAD_CROSSING implements Structure.ByValue {
        }
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 卡口规则具体配置
    public static class STU_CFG_INTELLI_RULE_TRAFFIC_PASS_CFG extends Structure {
        public int nLaneNumber;                    // 车道编号
        public byte nForward;                        // 相对车道抓拍的车辆行驶方向 正向行驶 0-不设置 1-设置
        public byte nBackward;                        // 相对车道抓拍的车辆行驶方向 逆向行驶 0-不设置 1-设置
        // 如果正向、逆向都不设置，默认设置为正向
        public byte[] reserved1 = new byte[2];        // 字节对齐
        public byte[] reserved2 = new byte[512];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nLaneNumber", "nForward", "nBackward", "reserved1", "reserved2"});
        }

        public static class ByReference extends STU_CFG_INTELLI_RULE_TRAFFIC_PASS_CFG implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_RULE_TRAFFIC_PASS_CFG implements Structure.ByValue {
        }
    }

    // 卡口规则配置
    public static class STU_CFG_INTELLI_RULE_TRAFFIC_PASS extends Structure {
        public int bEnable;                        // 规则使能
        public byte[] szClass = new byte[32];            // 业务大类, 不可设置
        public byte[] szType = new byte[32];            // 业务小类, 不可设置
        public byte[] szName = new byte[32];            // 规则名称, 不可设置
        public STU_CFG_INTELLI_RULE_TRAFFIC_PASS_CFG stuConfig;                        // 卡口配置信息
        public byte[] reserved = new byte[64];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szClass", "szType", "szName", "stuConfig", "reserved"});
        }

        public static class ByReference extends STU_CFG_INTELLI_RULE_TRAFFIC_PASS implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_RULE_TRAFFIC_PASS implements Structure.ByValue {
        }
    }

    //报警输入参数
    public static class STU_CFG_ALARM_IN_PARAM extends Structure {
        public int bEnable;                    // 报警输入使能
        public byte bSensorType;                // 传感器类型, 0是常开, 1是常闭
        public STU_EVENT_HANDLER stuAlarmHandle;                // 报警联动参数
        public byte[] reserved = new byte[64];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "bSensorType", "stuAlarmHandle", "reserved"});
        }

        public static class ByReference extends STU_CFG_ALARM_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ALARM_IN_PARAM implements Structure.ByValue {
        }
    }

    //报警输出参数
    public static class STU_CFG_ALARM_OUT_PARAM extends Structure {
        // 输出模式, 0是自动输出, 1是强制开启报警, 2是强制关闭报警
        public byte bMode;
        public byte[] reserved = new byte[35];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bMode", "reserved"});
        }

        public static class ByReference extends STU_CFG_ALARM_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ALARM_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 报警输入输出参数
    public static class STU_CFG_ALARM_PARAM extends Structure {
        public int uAlarmInChannels;                // 实际报警输入通道数，获取后不能修改
        public STU_CFG_ALARM_IN_PARAM[] stuAlarmInParams = new STU_CFG_ALARM_IN_PARAM[NetDefs.MAX_ALARM_IN_CHANNEL_NUM];            // 报警输入参数
        public int uAlarmOutChannels;                // 实际报警输出通道数，获取后不能修改
        public STU_CFG_ALARM_OUT_PARAM[] stuAlarmOutParams = new STU_CFG_ALARM_OUT_PARAM[NetDefs.MAX_ALARM_OUT_CHANNEL_NUM];        // 报警输出参数

        public STU_CFG_ALARM_PARAM() {
            for (int i = 0; i < stuAlarmInParams.length; i++) {
                stuAlarmInParams[i] = new STU_CFG_ALARM_IN_PARAM();
            }

            for (int i = 0; i < stuAlarmOutParams.length; i++) {
                stuAlarmOutParams[i] = new STU_CFG_ALARM_OUT_PARAM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uAlarmInChannels", "stuAlarmInParams", "uAlarmOutChannels", "stuAlarmOutParams"});
        }

        public static class ByReference extends STU_CFG_ALARM_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ALARM_PARAM implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 音频输入参数
    public static class STU_CFG_AUDIO_IN_PARAM extends Structure {
        public int emMode;                        // 音频输入设备模式, EM_AUDIO_IN_DEVICE_MODE_TYPE
        public int nVolumeIn;                    // 音频输入音量，取值0-100，0表示静音
        public byte[] reserved = new byte[64];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emMode", "nVolumeIn", "reserved"});
        }

        public static class ByReference extends STU_CFG_AUDIO_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_AUDIO_IN_PARAM implements Structure.ByValue {
        }
    }

    // 音频输出参数
    public static class STU_CFG_AUDIO_OUT_PARAM extends Structure {
        public int nVolumeOut;                    // 音频输出音量，取值0-100，0表示静音
        public byte[] reserved = new byte[64];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nVolumeOut", "reserved"});
        }

        public static class ByReference extends STU_CFG_AUDIO_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_AUDIO_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 音频输入输出参数
    public static class STU_CFG_AUDIO_PARAM extends Structure {
        // 实际报警输入通道数
        public int nAudioInChannels;
        // 报警输入参数,内存由外部申请和释放
        public STU_CFG_AUDIO_IN_PARAM[] stuAudioInParams = new STU_CFG_AUDIO_IN_PARAM[NetDefs.MAX_AUDIO_IN_CHANNEL_NUM];
        // 实际报警输出通道数
        public int nAudioOutChannels;
        // 报警输出参数,内存由外部申请和释放
        public STU_CFG_AUDIO_OUT_PARAM[] stuAudioOutParams = new STU_CFG_AUDIO_OUT_PARAM[NetDefs.MAX_AUDIO_OUT_CHANNEL_NUM];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nAudioInChannels", "stuAudioInParams", "nAudioOutChannels", "stuAudioOutParams"});
        }

        public static class ByReference extends STU_CFG_AUDIO_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_AUDIO_PARAM implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 编码能力集
    public static class STU_CFG_ENCODE_CAPS extends Structure {
        public int uMinMajorStreamBitrate;                        // 设备支持的最小码率
        public int uMaxMajorStreamBitrate;                        // 设备支持的最大码率
        public int uMaxExtraStreams;                            // 设备支持的最大辅码流数
        public int uSupportedStandardNums;                        // 设备最大支持的视频制式数,最大支持4个
        public byte[] bSupportedStandardValues = new byte[4];        // EM_STANDARD_TYPE 类型
        public byte[] reserved = new byte[128];                    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uMinMajorStreamBitrate", "uMaxMajorStreamBitrate", "uMaxExtraStreams",
                    "uSupportedStandardNums", "bSupportedStandardValues", "reserved"});
        }

        public static class ByReference extends STU_CFG_ENCODE_CAPS implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ENCODE_CAPS implements Structure.ByValue {
        }
    }

    // 视频配置能力
    public static class STU_CFG_VIDEOCONFIG_CAPS extends Structure {
        public int uMiniBitRate;
        public int uMaxBitRate;

        public int uCompressionTypeNums;                        // 最多10个 EM_VIDEO_STREAM_CODE_TYPE
        public byte[] nCompressionTypeValus = new byte[10];
        public byte[] reserved1 = new byte[6];                    // 保留位1

        public int uH264ProfilesTypeNums;                        // 最多10个
        public byte[] bH264ProfilesTypeValues = new byte[10];        // EM_H264_ENCODE_LEVEL
        public byte[] reserved2 = new byte[6];                    // 保留位2

        public int uMaxFps;
        public int uMaxRoiCount;

        public int uResolutionTypeNums;                        // 最多10个
        public byte[] nResolutionTypeValus = new byte[10];        // EM_VIDEO_STREAM_RESOLUTION_TYPE
        public byte[] reserved3 = new byte[6];                    // 保留位3

        public byte[] reserved4 = new byte[64];                    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uMiniBitRate", "uMaxBitRate", "uCompressionTypeNums",
                    "nCompressionTypeValus", "reserved1", "uH264ProfilesTypeNums", "bH264ProfilesTypeValues", "reserved2",
                    "uMaxFps", "uMaxRoiCount", "uResolutionTypeNums", "nResolutionTypeValus", "reserved3", "reserved4"});
        }

        public static class ByReference extends STU_CFG_VIDEOCONFIG_CAPS implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOCONFIG_CAPS implements Structure.ByValue {
        }
    }

    // 编码配置能力集
    public static class STU_CFG_CONFIG_CAPS extends Structure {
        public int iMainStreamCapsCount;            // 最大3个
        public STU_CFG_VIDEOCONFIG_CAPS[] stuMainStreamVideoCaps = new STU_CFG_VIDEOCONFIG_CAPS[NetDefs.MAX_MAIN_STREAM_ENCODE_COUNT];
        public int iExtraStreamCapsCount;            // 最大3个
        public STU_CFG_VIDEOCONFIG_CAPS[] stuExtraStreamVideoCaps = new STU_CFG_VIDEOCONFIG_CAPS[NetDefs.MAX_EXTRA_STREAM_ENCODE_COUNT];
        public int iCaptureStreamCapsCount;        // 最大3个
        public STU_CFG_VIDEOCONFIG_CAPS[] stuCaptureStreamCaps = new STU_CFG_VIDEOCONFIG_CAPS[NetDefs.MAX_CAPTURE_STREAM_ENCODE_COUNT];
        public byte[] reserved = new byte[1024];        // 保留位

        public STU_CFG_CONFIG_CAPS() {
            for (int i = 0; i < stuMainStreamVideoCaps.length; i++) {
                stuMainStreamVideoCaps[i] = new STU_CFG_VIDEOCONFIG_CAPS();
            }

            for (int i = 0; i < stuExtraStreamVideoCaps.length; i++) {
                stuExtraStreamVideoCaps[i] = new STU_CFG_VIDEOCONFIG_CAPS();
            }

            for (int i = 0; i < stuCaptureStreamCaps.length; i++) {
                stuCaptureStreamCaps[i] = new STU_CFG_VIDEOCONFIG_CAPS();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"iMainStreamCapsCount", "stuMainStreamVideoCaps", "iExtraStreamCapsCount",
                    "stuExtraStreamVideoCaps", "iCaptureStreamCapsCount", "stuCaptureStreamCaps", "reserved"});
        }

        public static class ByReference extends STU_CFG_CONFIG_CAPS implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_CONFIG_CAPS implements Structure.ByValue {
        }
    }

    // 货柜能力参数
    public static class STU_GOODS_SHELVE_CAP extends Structure {
        public int nMaxRow;                        // 货柜最大行数
        public int nMaxColumn;                        // 货柜最大列数
        public byte[] reserved = new byte[512];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMaxRow", "nMaxColumn", "reserved"});
        }

        public static class ByReference extends STU_GOODS_SHELVE_CAP implements Structure.ByReference {
        }

        public static class ByValue extends STU_GOODS_SHELVE_CAP implements Structure.ByValue {
        }
    }

    // 新零售货柜能力
    public static class STU_CFG_GOODS_SHELVE_CAPS extends Structure {
        // 最大监控货柜数，最大MAX_GOODS_CONTAINER_COUNT个
        public int nMaxShelveCount;
        // 货柜能力集
        public STU_GOODS_SHELVE_CAP[] stContainerCaps = new STU_GOODS_SHELVE_CAP[NetDefs.MAX_GOODS_SHELVE_COUNT];
        // 保留位
        public byte[] reserved = new byte[1024];

        public STU_CFG_GOODS_SHELVE_CAPS() {
            for (int i = 0; i < stContainerCaps.length; i++) {
                stContainerCaps[i] = new STU_GOODS_SHELVE_CAP();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMaxShelveCount", "stContainerCaps", "reserved"});
        }

        public static class ByReference extends STU_CFG_GOODS_SHELVE_CAPS implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_GOODS_SHELVE_CAPS implements Structure.ByValue {
        }
    }

    // 编码参数能力集合
    public static class STU_CFG_ENCODECAPS_PARAM extends Structure {
        public STU_CFG_CONFIG_CAPS stuCfgConfigCaps;
        public STU_CFG_ENCODE_CAPS stuCfgEncodeCaps;
        public byte[] reserved = new byte[1024];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stuCfgConfigCaps", "stuCfgEncodeCaps", "reserved"});
        }

        public static class ByReference extends STU_CFG_ENCODECAPS_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ENCODECAPS_PARAM implements Structure.ByValue {
        }
    }

    // 视频编码配置参数
    public static class STU_CFG_ENCODE_VIDEO_CONFIG_PARAM extends Structure {
        public int nCompressionType;                // 编码类型,取值为 EM_VIDEO_STREAM_CODE_TYPE
        public int nCtrlType;                        // 码流控制类型,取值为 EM_VIDEO_FORMA_CTRL_TYPE
        public int nResolutionType;                // 分辨率类型,取值为 EM_VIDEO_STREAM_RESOLUTION_TYPE
        public int nFPS;                            // 帧率
        public int nBitRate;                        // 码率大小
        public int nGop;                            // I 帧间隔
        public int nQuality;                        // 图像质量,取值[1-6]
        public int nH264SVCTLayer;                    // h264的svc层数,仅在h264编码时有效
        public int nH264EncodeLevel;                // h264编码级别,仅用于h264编码,取值为枚举  EM_H264_ENCODE_LEVEL
        public int nSize;                            // 编码后文件大小(bytes),只支持图片码流，固定码流模式("CBR")下有效
        public int bWidthHeightExchange;            // 分辨率宽高是否互换，TRUE - 互换，FALSE - 不互换或无效
        // 此字段目前只针对面板机辅码流有效
        public byte[] reserved = new byte[248];        // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nCompressionType", "nCtrlType", "nResolutionType", "nFPS",
                    "nBitRate", "nGop", "nQuality", "nH264SVCTLayer", "nH264EncodeLevel", "nSize",
                    "bWidthHeightExchange", "reserved"});
        }

        public static class ByReference extends STU_CFG_ENCODE_VIDEO_CONFIG_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ENCODE_VIDEO_CONFIG_PARAM implements Structure.ByValue {
        }
    }

    // 编码配置参数
    public static class STU_CFG_ENCODE_CONFIG_PARAM extends Structure {
        public int bEnable;                    // 使能
        public STU_CFG_ENCODE_VIDEO_CONFIG_PARAM stuEncodeVideoConfig;
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "stuEncodeVideoConfig", "reserved"});
        }

        public static class ByReference extends STU_CFG_ENCODE_CONFIG_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ENCODE_CONFIG_PARAM implements Structure.ByValue {
        }
    }

    // 编码配置信息
    public static class STU_CFG_ENCODE_CONFIG extends Structure {
        // 主码流个数
        public int uMainStreamNums;
        // 主码流配置信息，对应能力最大支持数MAX_EXTRA_STREAM_ENCODE_COUNT,数组下标0-普通编码，1-动检编码，2-报警编码
        public STU_CFG_ENCODE_CONFIG_PARAM[] stuMainStreamEncodeConfig = new STU_CFG_ENCODE_CONFIG_PARAM[NetDefs.MAX_MAIN_STREAM_ENCODE_COUNT];
        // 辅码流个数
        public int uExtraStreamNums;
        // 辅码流配置信息，对应能力最大支持数MAX_EXTRA_STREAM_ENCODE_COUNT,数组下标0-辅码流1，1-辅码流2，2-辅码流3
        public STU_CFG_ENCODE_CONFIG_PARAM[] stuExtraStreamEncodeConfig = new STU_CFG_ENCODE_CONFIG_PARAM[NetDefs.MAX_EXTRA_STREAM_ENCODE_COUNT];
        // 抓图码流个数
        public int uCaptureStreamNums;
        // 图片码流配置信息，对应能力最大支持数MAX_EXTRA_STREAM_ENCODE_COUNT,数组下标0-普通编码，1-动检编码，2-报警编码
        public STU_CFG_ENCODE_CONFIG_PARAM[] stuCaptureStreamEncodeConfig = new STU_CFG_ENCODE_CONFIG_PARAM[NetDefs.MAX_CAPTURE_STREAM_ENCODE_COUNT];
        // 保留字节
        public byte[] reserved = new byte[2048];

        public STU_CFG_ENCODE_CONFIG() {
            for (int i = 0; i < stuMainStreamEncodeConfig.length; i++) {
                stuMainStreamEncodeConfig[i] = new STU_CFG_ENCODE_CONFIG_PARAM();
            }

            for (int i = 0; i < stuExtraStreamEncodeConfig.length; i++) {
                stuExtraStreamEncodeConfig[i] = new STU_CFG_ENCODE_CONFIG_PARAM();
            }

            for (int i = 0; i < stuCaptureStreamEncodeConfig.length; i++) {
                stuCaptureStreamEncodeConfig[i] = new STU_CFG_ENCODE_CONFIG_PARAM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uMainStreamNums", "stuMainStreamEncodeConfig", "reserved1", "uExtraStreamNums",
                    "stuExtraStreamEncodeConfig", "reserved2", "uCaptureStreamNums", "stuCaptureStreamEncodeConfig", "reserved3"});
        }

        public static class ByReference extends STU_CFG_ENCODE_CONFIG implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ENCODE_CONFIG implements Structure.ByValue {
        }
    }

    // 编码参数配置
    public static class STU_CFG_ENCODE_PARAM extends Structure {
        public int iChannelNo;                        // 通道号, 从 0 开始
        public STU_CFG_ENCODE_CONFIG stuEncodeConfig;                // 编码参数配置
        public byte[] reserved = new byte[64];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"iChannelNo", "stuEncodeConfig", "reserved"});
        }

        public static class ByReference extends STU_CFG_ENCODE_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ENCODE_PARAM implements Structure.ByValue {
        }
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // 单种压缩格式参数
    public static class STU_AUDIO_ENCODE_SUPPORTED_COMPRESS_ITEM extends Structure {
        public int nFrequency;                    // 音频采样频率
        public int nDepth;                        // 采样深度
        public int nPacketPeriod;                // 打包周期，单位ms，0表示使用默认周期
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nFrequency", "nDepth", "nPacketPeriod", "reserved"});
        }

        public static class ByReference extends STU_AUDIO_ENCODE_SUPPORTED_COMPRESS_ITEM implements Structure.ByReference {
        }

        public static class ByValue extends STU_AUDIO_ENCODE_SUPPORTED_COMPRESS_ITEM implements Structure.ByValue {
        }
    }

    // 压缩格式能力配置
    public static class STU_AUDIO_ENCODE_SUPPORTED_COMPRESS_ITEMS extends Structure {
        // 支持的音频压缩格式, EM_AUDIO_ENCODE_COMPRESS_TYPE
        public int emCompressType;
        // 实际元素数量，不超过MAX_AUDIO_ENCODE_COMPRESS_ITEM_COUNT
        public int nItemCount;
        // 压缩格式数组
        public STU_AUDIO_ENCODE_SUPPORTED_COMPRESS_ITEM[] stCompressItemArr = new STU_AUDIO_ENCODE_SUPPORTED_COMPRESS_ITEM[NetDefs.MAX_AUDIO_ENCODE_COMPRESS_ITEM_COUNT];

        public STU_AUDIO_ENCODE_SUPPORTED_COMPRESS_ITEMS() {
            for (int i = 0; i < stCompressItemArr.length; i++) {
                stCompressItemArr[i] = new STU_AUDIO_ENCODE_SUPPORTED_COMPRESS_ITEM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emCompressType", "nItemCount", "stCompressItemArr"});
        }

        public static class ByReference extends STU_AUDIO_ENCODE_SUPPORTED_COMPRESS_ITEMS implements Structure.ByReference {
        }

        public static class ByValue extends STU_AUDIO_ENCODE_SUPPORTED_COMPRESS_ITEMS implements Structure.ByValue {
        }
    }

    // 音频配置能力
    public static class STU_CFG_AUDIOCONFIG_CAPS extends Structure {
        // 实际支持的音频压缩格式数量，不超过MAX_AUDIO_ENCODE_COMPRESS_TYPE_COUNT
        public int uCompressCount;
        // 音频压缩格式支持种类数组
        public STU_AUDIO_ENCODE_SUPPORTED_COMPRESS_ITEMS[] stSupportCompressArr = new STU_AUDIO_ENCODE_SUPPORTED_COMPRESS_ITEMS[NetDefs.MAX_AUDIO_ENCODE_COMPRESS_TYPE_COUNT];

        public STU_CFG_AUDIOCONFIG_CAPS() {
            for (int i = 0; i < stSupportCompressArr.length; i++) {
                stSupportCompressArr[i] = new STU_AUDIO_ENCODE_SUPPORTED_COMPRESS_ITEMS();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uCompressCount", "stSupportCompressArr"});
        }

        public static class ByReference extends STU_CFG_AUDIOCONFIG_CAPS implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_AUDIOCONFIG_CAPS implements Structure.ByValue {
        }
    }

    // 音频编码能力集
    public static class STU_CFG_AUDIO_ENCODE_CAPS extends Structure {
        // 指定需要获取的码流类型（目前只支持主码流），默认EM_AUDIO_ENCODE_MASTER, 枚举类型：EM_AUDIO_ENCODE_CFG_STREAM_TYPE
        public int emAudioStreamType;
        // 最大MAX_AUDIO_STREAM_ENCODE_COUNT个
        public int nStreamAudioCapsCount;
        // 音频配置能力数组
        public STU_CFG_AUDIOCONFIG_CAPS[] stuAudioStreamCapsArr = new STU_CFG_AUDIOCONFIG_CAPS[NetDefs.MAX_AUDIO_STREAM_ENCODE_COUNT];

        public STU_CFG_AUDIO_ENCODE_CAPS() {
            for (int i = 0; i < stuAudioStreamCapsArr.length; i++) {
                stuAudioStreamCapsArr[i] = new STU_CFG_AUDIOCONFIG_CAPS();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emAudioStreamType", "nStreamAudioCapsCount", "stuAudioStreamCapsArr"});
        }

        public static class ByReference extends STU_CFG_AUDIO_ENCODE_CAPS implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_AUDIO_ENCODE_CAPS implements Structure.ByValue {
        }
    }

    // 音频编码配置参数
    public static class STU_CFG_ENCODE_AUDIO_CONFIG_PARAM extends Structure {
        // 当前音频压缩格式，支持的压缩格式，可通过对应能力获取, EM_AUDIO_ENCODE_COMPRESS_TYPE
        public int emCompressType;

        // 音频采样频率, 8K~192K
        public int nFrequency;
        // 采样深度, 8, 16, 24位
        public int nDepth;

        // 编码码率
        // 不同编码类型定义不同：
        // AMR编码码率0:4.75kbps, 1:5.15 kbps, 2:5.9 kbps, 3:6.7 kbps, 4:7.4 kbps, 5:7.95 kbps, 6:10.2 kbps, 7:12.2 kbps
        // G726编码码率0:40kbps(默认), 1:16kbps, 2:24kbps, 3:32kbps
        // 其他: 暂无定义
        public int nMode;

        // 打包周期, 单位ms, 0表示使用默认周期
        public int nPacketPeriod;
        // 打包类型, 目前支持AL和PS, EM_AUDIO_ENCODE_PACK_TYPE
        public int emPackType;

        // 保留字节
        public byte[] reserved = new byte[256];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emCompressType", "nFrequency", "nDepth",
                    "nMode", "nPacketPeriod", "emPackType", "reserved"});
        }

        public static class ByReference extends STU_CFG_ENCODE_AUDIO_CONFIG_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ENCODE_AUDIO_CONFIG_PARAM implements Structure.ByValue {
        }
    }

    // 音频编码配置参数
    public static class STU_CFG_AUDIO_ENCODE_CONFIG_PARAM extends Structure {
        // 使能
        public int bEnable;
        // 音频编码配置参数
        public STU_CFG_ENCODE_AUDIO_CONFIG_PARAM stuEncodeAudioConfig = new STU_CFG_ENCODE_AUDIO_CONFIG_PARAM();
        // 保留字节
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "stuEncodeAudioConfig", "reserved"});
        }

        public static class ByReference extends STU_CFG_AUDIO_ENCODE_CONFIG_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_AUDIO_ENCODE_CONFIG_PARAM implements Structure.ByValue {
        }
    }

    // 音频编码参数配置
    public static class STU_CFG_AUDIO_ENCODE_PARAM extends Structure {
        // 指定码流类型（目前只支持主码流），默认EM_AUDIO_ENCODE_MASTER, 枚举类型：EM_AUDIO_ENCODE_CFG_STREAM_TYPE
        public int emAudioStreamType;
        // 通道号
        public int iChannelNo;
        // 实际码流个数
        public int nAudioStreamCount;
        // 码流配置信息，下标0-普通编码，1-动检编码，2-报警编码
        public STU_CFG_AUDIO_ENCODE_CONFIG_PARAM[] stuMainAudioEncodeConfig = new STU_CFG_AUDIO_ENCODE_CONFIG_PARAM[NetDefs.MAX_MAIN_STREAM_ENCODE_COUNT];
        // 保留参数
        public byte[] reserved = new byte[64];

        public STU_CFG_AUDIO_ENCODE_PARAM() {
            for (int i = 0; i < stuMainAudioEncodeConfig.length; i++) {
                stuMainAudioEncodeConfig[i] = new STU_CFG_AUDIO_ENCODE_CONFIG_PARAM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emAudioStreamType", "iChannelNo", "nAudioStreamCount",
                    "stuMainAudioEncodeConfig", "reserved"});
        }

        public static class ByReference extends STU_CFG_AUDIO_ENCODE_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_AUDIO_ENCODE_PARAM implements Structure.ByValue {
        }
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // 韦根配置
    public static class STU_CFG_WIE_GAND_ITEM extends Structure {
        public int uType;                            // 0-韦根26, 1-韦根34
        public byte[] szCtrlCode = new byte[16];        // 韦根控制码
        public byte[] reserve = new byte[64];            // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uType", "szCtrlCode", "reserve"});
        }

        public static class ByReference extends STU_CFG_WIE_GAND_ITEM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_WIE_GAND_ITEM implements Structure.ByValue {
        }
    }

    // 韦根参数
    public static class STU_CFG_WIE_GAND_PARAM extends Structure {
        public int nRealCount;                                // 实际配置数量，此数量可通过能力获取
        // 韦根配置列表
        public STU_CFG_WIE_GAND_ITEM[] stWirGandItem = new STU_CFG_WIE_GAND_ITEM[NetDefs.MAX_WIE_GAND_CFG_NUM];
        public byte[] reserve = new byte[64];                    // 保留字节

        public STU_CFG_WIE_GAND_PARAM() {
            for (int i = 0; i < stWirGandItem.length; i++) {
                stWirGandItem[i] = new STU_CFG_WIE_GAND_ITEM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRealCount", "stWirGandItem", "reserve"});
        }

        public static class ByReference extends STU_CFG_WIE_GAND_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_WIE_GAND_PARAM implements Structure.ByValue {
        }
    }

    // 外设IO口功能功能
    public static class STU_CFG_DEV_PREI_IO_ITEM extends Structure {
        public int emMode;                                    // IO口功能,EM_DEV_PREI_IO_MODE
        public byte[] reserve = new byte[64];                    // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emMode", "reserve"});
        }

        public static class ByReference extends STU_CFG_DEV_PREI_IO_ITEM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_DEV_PREI_IO_ITEM implements Structure.ByValue {
        }
    }

    // 外设IO配置参数
    public static class STU_CFG_DEV_PREI_IO_PARAM extends Structure {
        public int nRealCount;                        // 实际配置数量，此数量可通过能力获取
        // IO配置列表
        public STU_CFG_DEV_PREI_IO_ITEM[] stIOItem = new STU_CFG_DEV_PREI_IO_ITEM[NetDefs.MAX_DEV_PREI_IO_CFG_NUM];
        public byte[] reserve = new byte[64];            // 保留字节

        public STU_CFG_DEV_PREI_IO_PARAM() {
            for (int i = 0; i < stIOItem.length; i++) {
                stIOItem[i] = new STU_CFG_DEV_PREI_IO_ITEM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRealCount", "stIOItem", "reserve"});
        }

        public static class ByReference extends STU_CFG_DEV_PREI_IO_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_DEV_PREI_IO_PARAM implements Structure.ByValue {
        }
    }

    // 补光灯配置
    public static class STU_CFG_SUPPLEMENT_LIGHT_ITEM extends Structure {
        public int emMode;                                    // 工作模式, EM_DEV_SUP_LIGHT_MODE
        public int uBrightness;                            // 补光灯亮度，范围[0, 100]
        public byte[] reserve = new byte[64];                    // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emMode", "uBrightness", "reserve"});
        }

        public static class ByReference extends STU_CFG_SUPPLEMENT_LIGHT_ITEM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_SUPPLEMENT_LIGHT_ITEM implements Structure.ByValue {
        }
    }

    // 外设补光灯配置参数
    public static class STU_CFG_SUPPLEMENT_LIGHT_PARAM extends Structure {
        public int nRealCount;                        // 实际配置数量，此数量可通过能力获取
        // IO配置列表
        public STU_CFG_SUPPLEMENT_LIGHT_ITEM[] stSupLightItem = new STU_CFG_SUPPLEMENT_LIGHT_ITEM[NetDefs.MAX_DEV_SUPPLEMENT_LIGHT_CFG_NUM];
        public byte[] reserve = new byte[64];            // 保留字节

        public STU_CFG_SUPPLEMENT_LIGHT_PARAM() {
            for (int i = 0; i < stSupLightItem.length; i++) {
                stSupLightItem[i] = new STU_CFG_SUPPLEMENT_LIGHT_ITEM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRealCount", "stSupLightItem", "reserve"});
        }

        public static class ByReference extends STU_CFG_SUPPLEMENT_LIGHT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_SUPPLEMENT_LIGHT_PARAM implements Structure.ByValue {
        }
    }

    // 485补光灯配置
    public static class STU_CFG_485SUPPLEMENT_LIGHT_ITEM extends Structure {
        public int emMode;                                    // 工作模式,EM_DEV_SUP_LIGHT_MODE
        public int uBrightness;                            // 补光灯亮度，范围[0, 255]
        public int uPreValue;                                // 亮度预设值，范围为0~100
        public byte[] reserve = new byte[64];                    // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emMode", "uBrightness", "uPreValue", "reserve"});
        }

        public static class ByReference extends STU_CFG_485SUPPLEMENT_LIGHT_ITEM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_485SUPPLEMENT_LIGHT_ITEM implements Structure.ByValue {
        }
    }

    // 外设485补光灯配置参数
    public static class STU_CFG_485SUPPLEMENT_LIGHT_PARAM extends Structure {
        public int nRealCount;                        // 实际配置数量，此数量可通过能力获取
        // IO配置列表
        public STU_CFG_485SUPPLEMENT_LIGHT_ITEM[] stSupLightItem = new STU_CFG_485SUPPLEMENT_LIGHT_ITEM[NetDefs.MAX_DEV_SUPPLEMENT_LIGHT_CFG_NUM];
        public byte[] reserve = new byte[64];            // 保留字节

        public STU_CFG_485SUPPLEMENT_LIGHT_PARAM() {
            for (int i = 0; i < stSupLightItem.length; i++) {
                stSupLightItem[i] = new STU_CFG_485SUPPLEMENT_LIGHT_ITEM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRealCount", "stSupLightItem", "reserve"});
        }

        public static class ByReference extends STU_CFG_485SUPPLEMENT_LIGHT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_485SUPPLEMENT_LIGHT_PARAM implements Structure.ByValue {
        }
    }

    // 球机补光灯配置细节
    public static class STU_PTZ_SUPPLEMENT_LIGHT_DETAIL extends Structure {
        // 角度，int,灯光角度归一化值
        public int nAngle;
        // 亮度，int,灯光亮度百分比值，0：关闭 (1~100)灯光亮度百分比
        public int nLight;
        // 保留字节
        public byte[] reserve = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nAngle", "nLight", "reserve"});
        }

        public static class ByReference extends STU_PTZ_SUPPLEMENT_LIGHT_DETAIL implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_SUPPLEMENT_LIGHT_DETAIL implements Structure.ByValue {
        }
    }

    // 球机补光灯配置
    public static class STU_PTZ_SUPPLEMENT_LIGHT_CFG extends Structure {
        // 控制模式
        // -1 - "Off" : 关闭
        // 0 - "Manual" :手动模式
        // 1 - "Auto" :自动模式
        // 2 - "ZoomPrio" : 倍率优先
        public int nMode;

        // 远光灯/中光灯/近光灯配置，Mode为Manual下使用
        // 远光灯实际数量
        public int nFarLightCount;
        // 远光灯配置
        public STU_PTZ_SUPPLEMENT_LIGHT_DETAIL[] stFarLightDetails = new STU_PTZ_SUPPLEMENT_LIGHT_DETAIL[NetDefs.MAX_PTZ_SUPPLEMENT_LIGHT_DETAIL_NUM];

        // 中光灯实际数量
        public int nMidLightCount;
        // 中光灯配置
        public STU_PTZ_SUPPLEMENT_LIGHT_DETAIL[] stMidLightDetails = new STU_PTZ_SUPPLEMENT_LIGHT_DETAIL[NetDefs.MAX_PTZ_SUPPLEMENT_LIGHT_DETAIL_NUM];

        // 近光灯实际数量
        public int nNearLightCount;
        // 近光灯配置
        public STU_PTZ_SUPPLEMENT_LIGHT_DETAIL[] stNearLightDetails = new STU_PTZ_SUPPLEMENT_LIGHT_DETAIL[NetDefs.MAX_PTZ_SUPPLEMENT_LIGHT_DETAIL_NUM];

        // 灯光补偿，Mode为ZoomPrio下使用
        public int nCorrection;

        // 保留字节
        public byte[] reserve = new byte[256];

        public STU_PTZ_SUPPLEMENT_LIGHT_CFG() {
            for (int i = 0; i < stFarLightDetails.length; i++) {
                stFarLightDetails[i] = new STU_PTZ_SUPPLEMENT_LIGHT_DETAIL();
            }

            for (int i = 0; i < stMidLightDetails.length; i++) {
                stMidLightDetails[i] = new STU_PTZ_SUPPLEMENT_LIGHT_DETAIL();
            }

            for (int i = 0; i < stNearLightDetails.length; i++) {
                stNearLightDetails[i] = new STU_PTZ_SUPPLEMENT_LIGHT_DETAIL();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMode", "nFarLightCount", "stFarLightDetails",
                    "nMidLightCount", "stMidLightDetails", "nNearLightCount", "stNearLightDetails",
                    "nCorrection", "reserve"});
        }

        public static class ByReference extends STU_PTZ_SUPPLEMENT_LIGHT_CFG implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_SUPPLEMENT_LIGHT_CFG implements Structure.ByValue {
        }
    }

    // 球机补光灯配置集合
    public static class STU_CFG_PTZ_SUPPLEMENT_LIGHT_PARAM extends Structure {
        // 实际灯个数
        public int nRealCount;
        // 配置列表
        public STU_PTZ_SUPPLEMENT_LIGHT_CFG[] stPtzSupLightCfgs = new STU_PTZ_SUPPLEMENT_LIGHT_CFG[NetDefs.MAX_PTZ_SUPPLEMENT_LIGHT_CFG_NUM];
        // 保留字节
        public byte[] reserve = new byte[64];

        public STU_CFG_PTZ_SUPPLEMENT_LIGHT_PARAM() {
            for (int i = 0; i < stPtzSupLightCfgs.length; i++) {
                stPtzSupLightCfgs[i] = new STU_PTZ_SUPPLEMENT_LIGHT_CFG();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRealCount", "stPtzSupLightCfgs", "reserve"});
        }

        public static class ByReference extends STU_CFG_PTZ_SUPPLEMENT_LIGHT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_PTZ_SUPPLEMENT_LIGHT_PARAM implements Structure.ByValue {
        }
    }

    // 圆偏振镜配置
    public static class STU_CFG_CPL_PARAM extends Structure {
        // 工作模式
        // 0 - 强制关闭(CPL没有效果)
        // 1 - 强制开启(CPL偏振镜起效果)
        // 2 - 自动
        public int nMode;
        // 保留字节
        public byte[] reserve = new byte[1024];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMode", "reserve"});
        }

        public static class ByReference extends STU_CFG_CPL_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_CPL_PARAM implements Structure.ByValue {
        }
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // SOC红外灯
    public static class STU_CFG_SOC_CONSTANT_RED_LAMP_ITEM extends Structure {
        public int emMode;                                // 工作模式,EM_DEV_SUP_LIGHT_MODE
        public int nSensitivity;                        // 灵敏度，范围1-3，有光敏时使用，值越小灵敏度越高
        public byte[] reserve = new byte[512];            // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emMode", "nSensitivity", "reserve"});
        }

        public static class ByReference extends STU_CFG_SOC_CONSTANT_RED_LAMP_ITEM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_SOC_CONSTANT_RED_LAMP_ITEM implements Structure.ByValue {
        }
    }

    // SOC红外灯配置参数
    public static class STU_CFG_SOC_CONSTANT_RED_LAMP_PARAM extends Structure {
        public int nRealCount;                                    // 实际配置数量，此数量可通过能力获取
        // SOC红外灯列表
        public STU_CFG_SOC_CONSTANT_RED_LAMP_ITEM[] stSOCRedLamps = new STU_CFG_SOC_CONSTANT_RED_LAMP_ITEM[NetDefs.MAX_SOC_CONSTANT_RED_LAMP_NUM];
        public byte[] reserve = new byte[64];                        // 保留字节

        public STU_CFG_SOC_CONSTANT_RED_LAMP_PARAM() {
            for (int i = 0; i < stSOCRedLamps.length; i++) {
                stSOCRedLamps[i] = new STU_CFG_SOC_CONSTANT_RED_LAMP_ITEM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRealCount", "stSOCRedLamps", "reserve"});
        }

        public static class ByReference extends STU_CFG_SOC_CONSTANT_RED_LAMP_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_SOC_CONSTANT_RED_LAMP_PARAM implements Structure.ByValue {
        }
    }

    // SOC白光灯
    public static class STU_CFG_SOC_CONSTANT_LAMP_ITEM extends Structure {
        // 工作模式,EM_DEV_SUP_LIGHT_MODE
        public int emMode;
        // 亮度预设值，取值范围为0~100，无光敏时使用
        public int nPreValue;
        // 常亮灯亮度，范围[0, 100]
        public int nBrightness;
        // 时段信息
        public STU_WEEK_TIME_SECTION_SCHEDULE stuWeekTimeSection;
        // 保留字节
        public byte[] reserve = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emMode", "nPreValue", "nBrightness", "stuWeekTimeSection", "reserve"});
        }

        public static class ByReference extends STU_CFG_SOC_CONSTANT_LAMP_ITEM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_SOC_CONSTANT_LAMP_ITEM implements Structure.ByValue {
        }
    }

    // SOC白光灯配置参数
    public static class STU_CFG_SOC_CONSTANT_LAMP_PARAM extends Structure {
        // 实际配置数量，此数量可通过能力获取
        public int nRealCount;
        // SOC红外灯列表
        public STU_CFG_SOC_CONSTANT_LAMP_ITEM[] stSOCLamps = new STU_CFG_SOC_CONSTANT_LAMP_ITEM[NetDefs.MAX_SOC_CONSTANT_LAMP_NUM];
        // 保留字节
        public byte[] reserve = new byte[64];

        public STU_CFG_SOC_CONSTANT_LAMP_PARAM() {
            for (int i = 0; i < stSOCLamps.length; i++) {
                stSOCLamps[i] = new STU_CFG_SOC_CONSTANT_LAMP_ITEM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRealCount", "stSOCLamps", "reserve"});
        }

        public static class ByReference extends STU_CFG_SOC_CONSTANT_LAMP_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_SOC_CONSTANT_LAMP_PARAM implements Structure.ByValue {
        }
    }

    // 爆闪灯
    public static class STU_CFG_TRAFFIC_FLASH_LAMP_ITEM extends Structure {
        public int emMode;                                        // 工作模式,EM_DEV_SUP_LIGHT_MODE
        public int emPole;                                        // 触发模式,EM_TRAFFIC_FLASH_LAMP_MODE
        public int nThreshold;                                    // 常亮灯亮度，范围[0, 100]

        public int nRealTimeCount;                                // 实际爆闪灯时长数量，不超过 MAX_TRAFFIC_FLASH_LIGHT_TIME_NUM
        // 自定义爆闪灯时长，范围0-5000 us
        public int[] nTimes = new int[NetDefs.MAX_TRAFFIC_FLASH_LAMP_TIME_NUM];

        public int nDelayTime;                                    // 延时闪光时间，单位us，负数表示提前闪光

        public int nRealPortCount;                                // 实际爆闪灯端口号数量，不超过 MAX_FLASH_LIGHT_PORT_NUM
        // 端口号，灯组内可能包含多个灯，端口号从1开始，同一端口号与频闪灯互斥
        public int[] nPorts = new int[NetDefs.MAX_FLASH_LAMP_PORT_NUM];

        public byte[] reserve = new byte[512];                    // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emMode", "emPole", "nThreshold",
                    "nRealTimeCount", "nTimes", "nDelayTime", "nRealPortCount", "nPorts", "reserve"});
        }

        public static class ByReference extends STU_CFG_TRAFFIC_FLASH_LAMP_ITEM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_TRAFFIC_FLASH_LAMP_ITEM implements Structure.ByValue {
        }
    }

    // 爆闪灯配置参数
    public static class STU_CFG_TRAFFIC_FLASH_LAMP_PARAM extends Structure {
        public int nRealCount;                                    // 实际配置数量，此数量可通过能力获取
        // 爆闪灯列表
        public STU_CFG_TRAFFIC_FLASH_LAMP_ITEM[] stFlashLamps = new STU_CFG_TRAFFIC_FLASH_LAMP_ITEM[NetDefs.MAX_TRAFFIC_FLASH_LAMP_NUM];
        public byte[] reserve = new byte[64];                        // 保留字节

        public STU_CFG_TRAFFIC_FLASH_LAMP_PARAM() {
            for (int i = 0; i < stFlashLamps.length; i++) {
                stFlashLamps[i] = new STU_CFG_TRAFFIC_FLASH_LAMP_ITEM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRealCount", "stFlashLamps", "reserve"});
        }

        public static class ByReference extends STU_CFG_TRAFFIC_FLASH_LAMP_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_TRAFFIC_FLASH_LAMP_PARAM implements Structure.ByValue {
        }
    }

    // 频闪灯
    public static class STU_CFG_TRAFFIC_STROBOSCOPIC_LAMP_ITEM extends Structure {
        public int emMode;                                        // 工作模式,EM_DEV_SUP_LIGHT_MODE
        public int nThreshold;                                    // 常亮灯亮度，范围[0, 100]
        public int nDelayTime;                                    // 延时闪光时间，单位us，负数表示提前闪光
        public int nTime;                                        // 脉宽，范围0-5000 us
        public int nDutyCycle;                                    // 占空比，范围0~100
        public int nFrequency;                                    // 工作频率，单位HZ，譬如50HZ,100HZ
        public int nMultiFrequency;                            // 倍频，范围0~10
        public int nRealPortCount;                                // 实际爆闪灯端口号数量，不超过 MAX_FLASH_LIGHT_PORT_NUM
        public int[] nPorts = new int[NetDefs.MAX_FLASH_LAMP_PORT_NUM];    // 端口号，灯组内可能包含多个灯，端口号从1开始，同一端口号与爆闪灯互斥
        public byte[] reserve = new byte[512];                    // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emMode", "emPole", "nThreshold",
                    "nRealTimeCount", "nTimes", "nDelayTime", "nRealPortCount", "nPorts", "reserve"});
        }

        public static class ByReference extends STU_CFG_TRAFFIC_STROBOSCOPIC_LAMP_ITEM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_TRAFFIC_STROBOSCOPIC_LAMP_ITEM implements Structure.ByValue {
        }
    }

    // 频闪灯配置参数
    public static class STU_CFG_TRAFFIC_STROBOSCOPIC_LAMP_PARAM extends Structure {
        public int nRealCount;                                    // 实际配置数量，此数量可通过能力获取
        // 频闪灯列表
        public STU_CFG_TRAFFIC_STROBOSCOPIC_LAMP_ITEM[] stStrobLamps = new STU_CFG_TRAFFIC_STROBOSCOPIC_LAMP_ITEM[NetDefs.MAX_TRAFFIC_STROBOSCOPIC_LAMP_NUM];
        public byte[] reserve = new byte[64];                        // 保留字节

        public STU_CFG_TRAFFIC_STROBOSCOPIC_LAMP_PARAM() {
            for (int i = 0; i < stStrobLamps.length; i++) {
                stStrobLamps[i] = new STU_CFG_TRAFFIC_STROBOSCOPIC_LAMP_ITEM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRealCount", "stStrobLamps", "reserve"});
        }

        public static class ByReference extends STU_CFG_TRAFFIC_STROBOSCOPIC_LAMP_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_TRAFFIC_STROBOSCOPIC_LAMP_PARAM implements Structure.ByValue {
        }
    }

    // GB28181 配置参数
    public static class STU_CFG_GB28181_PARAM extends Structure {
        public int bEnable;                                // 28181 使能
        public int uAlarmInChannelNum;                        // 报警输入通道数
        public byte[] cAlarmInId = new byte[32];                // 报警输入通道编号
        public int uChannelNum;                            // 通道总数
        public byte[] cChannelId = new byte[32];                // 通道编号
        public byte[] cCivilCode = new byte[16];                // 行政区识别码
        public byte[] cUserName = new byte[32];                // 用户名,即设备id
        public byte[] cPassword = new byte[32];                // 注册密码
        public int uKeepAliveInterval;                        // 心跳时间间隔
        public int uLocalSipPort;                            // 本地sip端口号
        public int uMaxTimeoutCount;                        // 最大心跳超时时间
        public byte[] cSipDomain = new byte[32];                // 域名
        public byte[] cSipServerId = new byte[32];            // SIP 服务器 ID
        public byte[] cSipServerIP = new byte[64];            // SIP 服务器 IP
        public int uSipServerPort;                            // SIP 服务器端口
        public byte[] reserved = new byte[512];                // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "uAlarmInChannelNum", "cAlarmInId",
                    "uChannelNum", "cChannelId", "cCivilCode", "cUserName", "cPassword",
                    "uKeepAliveInterval", "uLocalSipPort", "uMaxTimeoutCount", "cSipDomain",
                    "cSipServerId", "cSipServerIP", "uSipServerPort", "reserved"});
        }

        public static class ByReference extends STU_CFG_GB28181_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_GB28181_PARAM implements Structure.ByValue {
        }
    }

    // ONVIF 配置
    public static class STU_CFG_ONVIF extends Structure {
        public int bEnable;                    // ONVIF 使能

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable"});
        }

        public static class ByReference extends STU_CFG_ONVIF implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ONVIF implements Structure.ByValue {
        }
    }

    // 我司云服务
    public static class STU_CFG_CLOUD_SERVICE extends Structure {
        public int bEnable;                                // 使能
        public int uPort;                                    // 服务端口
        public byte[] szAddress = new byte[128];                // 服务地址、域名
        public byte[] reserved = new byte[512];                // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "uPort", "szAddress", "reserved"});
        }

        public static class ByReference extends STU_CFG_CLOUD_SERVICE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_CLOUD_SERVICE implements Structure.ByValue {
        }
    }

    // ZK服务配置项
    public static class STU_CFG_ZK_SERVICE_ITEM extends Structure {
        public int bEnable;                    // 是否使能
        public int uPort;                        // 服务端口号
        public byte[] szIpAddr = new byte[64];    // 服务 IP 地址
        public byte[] szName = new byte[64];        // 服务名称
        public byte[] reserved = new byte[128];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "uPort", "szIpAddr", "szName", "reserved"});
        }

        public static class ByReference extends STU_CFG_ZK_SERVICE_ITEM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ZK_SERVICE_ITEM implements Structure.ByValue {
        }
    }

    // ZK服务配置信息
    public static class STU_CFG_ZK_SERVICE extends Structure {
        public int uRealCount;            // 实际配置个数
        // 服务配置项数组，注意在外部释放
        public STU_CFG_ZK_SERVICE_ITEM[] pstItems = new STU_CFG_ZK_SERVICE_ITEM[NetDefs.MAX_CFG_SERVICE_ITEM_NUM];

        public STU_CFG_ZK_SERVICE() {
            for (int i = 0; i < pstItems.length; i++) {
                pstItems[i] = new STU_CFG_ZK_SERVICE_ITEM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uRealCount", "pstItems"});
        }

        public static class ByReference extends STU_CFG_ZK_SERVICE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ZK_SERVICE implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 羚羊云平台
    public static class STU_CFG_LY_CLOUD_PARAM extends Structure {
        public int bEnable;                        // 使能控制，0：禁用，1：启用
        public byte[] szSignature = new byte[64];        // 签名验证码，由羚羊云提供，与设备序列号绑定
        public byte[] reserved = new byte[64];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szSignature", "reserved"});
        }

        public static class ByReference extends STU_CFG_LY_CLOUD_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_LY_CLOUD_PARAM implements Structure.ByValue {
        }
    }

    // GAT1400服务器信息
    public static class STU_CFG_GAT1400_SERVICE extends Structure {
        public int emPlatformType;                        // 当前连接的平台类型,EM_GAT1400_SERVICE_CONN_TYPE
        public byte[] szServerIP = new byte[16];            // 服务器IP
        public int nServerPort;                        // 服务器端口
        public byte[] szDeviceID = new byte[20];            // 设备编号
        public byte[] szVIID = new byte[20];                // 视图库编号
        public byte[] szUserName = new byte[32];            // 登陆服务器的用户名
        public byte[] szPassword = new byte[32];            // 登陆服务器的密码
        public byte[] reserved = new byte[64];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emPlatformType", "szServerIP", "nServerPort",
                    "szDeviceID", "szVIID", "szUserName", "szPassword", "reserved"});
        }

        public static class ByReference extends STU_CFG_GAT1400_SERVICE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_GAT1400_SERVICE implements Structure.ByValue {
        }
    }

    // GAT1400
    public static class STU_CFG_GAT1400_PARAM extends Structure {
        public int bEnable;                                // 使能控制，0：禁用，1：启用
        public int nKeepAliveInterval;                        // 签名验证码，由羚羊云提供，与设备序列号绑定
        public int nServiceCount;                            // 服务器信息实际数目
        // 服务器信息
        public STU_CFG_GAT1400_SERVICE[] stServiceAry = new STU_CFG_GAT1400_SERVICE[NetDefs.MAX_GAT1400_SERVICE_NUM];
        public byte[] reserved = new byte[64];                // 保留位

        public STU_CFG_GAT1400_PARAM() {
            for (int i = 0; i < stServiceAry.length; i++) {
                stServiceAry[i] = new STU_CFG_GAT1400_SERVICE();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "nKeepAliveInterval", "nServiceCount",
                    "stServiceAry", "reserved"});
        }

        public static class ByReference extends STU_CFG_GAT1400_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_GAT1400_PARAM implements Structure.ByValue {
        }
    }

    // YN平台注册机信息
    public static class STU_PLAT_YN_REGISTER_INFO extends Structure {
        public byte[] szUrlAddress = new byte[128];            // 注册地址
        public byte[] szUrlToken = new byte[128];                // 地址Token
        public byte[] szUserID = new byte[64];                // 注册ID
        public byte[] szUserKey = new byte[64];                // 注册密钥
        public byte[] reserved = new byte[256];                // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szUrlAddress", "szUrlToken", "szUserID",
                    "szUserKey", "reserved"});
        }

        public static class ByReference extends STU_PLAT_YN_REGISTER_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_PLAT_YN_REGISTER_INFO implements Structure.ByValue {
        }
    }

    // YN平台人脸认证信息
    public static class STU_PLAT_YN_FACE_AUTH_INFO extends Structure {
        public byte[] szUrlAddress = new byte[128];                // 认证地址
        public byte[] szUrlToken = new byte[128];                    // 地址Token
        public byte[] szFaceID = new byte[64];                    // 认证ID
        public byte[] szFaceKey = new byte[64];                    // 认证秘钥
        public byte[] reserved = new byte[256];                    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szUrlAddress", "szUrlToken", "szFaceID",
                    "szFaceKey", "reserved"});
        }

        public static class ByReference extends STU_PLAT_YN_FACE_AUTH_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_PLAT_YN_FACE_AUTH_INFO implements Structure.ByValue {
        }
    }

    // YN平台继电器操作指令
    public static class STU_PLAT_YN_RELAY_ORDER extends Structure {
        public byte[] szOpen = new byte[32];                // iPv4地址
        public byte[] szClose = new byte[32];                // 端口
        public byte[] reserved = new byte[64];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szOpen", "szClose", "reserved"});
        }

        public static class ByReference extends STU_PLAT_YN_RELAY_ORDER implements Structure.ByReference {
        }

        public static class ByValue extends STU_PLAT_YN_RELAY_ORDER implements Structure.ByValue {
        }
    }

    // YN平台继电器参数
    public static class STU_PLAT_YN_RELAY_INFO extends Structure {
        public byte[] szIP = new byte[128];                    // iPv4地址
        public int nPort;                                    // 端口
        public int nRelayCount;                            // 继电器个数
        // 继电器信息
        public STU_PLAT_YN_RELAY_ORDER[] stRelayOrder = new STU_PLAT_YN_RELAY_ORDER[NetDefs.MAX_PLAT_YN_RELAY_NUM];
        public byte[] reserved = new byte[256];                // 保留位

        public STU_PLAT_YN_RELAY_INFO() {
            for (int i = 0; i < stRelayOrder.length; i++) {
                stRelayOrder[i] = new STU_PLAT_YN_RELAY_ORDER();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szIP", "nPort", "nRelayCount", "stRelayOrder", "reserved"});
        }

        public static class ByReference extends STU_PLAT_YN_RELAY_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_PLAT_YN_RELAY_INFO implements Structure.ByValue {
        }
    }

    // YN平台配置
    public static class STU_CFG_PLATFORM_YN_PARAM extends Structure {
        public int bEnable;                                // 使能控制，0：禁用，1：启用
        public int nConfidenceThreshold;                    // 相似度阈值，范围0-100
        public STU_PLAT_YN_REGISTER_INFO stRegisterInfo;                            // 注册机信息
        public STU_PLAT_YN_FACE_AUTH_INFO stFaceAuthInfo;                            // 人脸认证信息
        public STU_PLAT_YN_RELAY_INFO stRelayInfo;                            // 继电器参数
        public byte[] reserved = new byte[64];                // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "nConfidenceThreshold", "stRegisterInfo",
                    "stFaceAuthInfo", "stRelayInfo", "reserved"});
        }

        public static class ByReference extends STU_CFG_PLATFORM_YN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_PLATFORM_YN_PARAM implements Structure.ByValue {
        }
    }

    // SPPP
    public static class STU_CFG_SPPP_PARAM extends Structure {
        public int bEnable;                                // 使能控制，0：禁用，1：启用
        public byte[] szDomainName = new byte[128];            // 服务器域名
        public byte[] szParkId = new byte[128];                // 停车场 ID
        public byte[] szCameraId = new byte[128];                // 抓拍相机 ID
        public int bNeedWholePic;                            // 是否上传抓拍全景大图，true – 上传大图，false – 不上传大图
        public int bNeedProperty;                            // 是否上传属性信息，true – 上传，false – 不上传
        public byte[] reserved = new byte[256];                // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szDomainName", "szParkId",
                    "szCameraId", "bNeedWholePic", "bNeedProperty", "reserved"});
        }

        public static class ByReference extends STU_CFG_SPPP_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_SPPP_PARAM implements Structure.ByValue {
        }
    }

    // FRPPP
    public static class STU_CFG_FRPPP_PARAM extends Structure {
        public int bEnable;                                // 使能控制，0：禁用，1：启用
        public byte[] szBaseAddr = new byte[256];                // 基地址,API所在IP或域名和基础上下文路径
        public int nHeartbeatInterval;                        // 心跳间隔，单位秒
        public byte[] reserved = new byte[256];                // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szBaseAddr", "nHeartbeatInterval", "reserved"});
        }

        public static class ByReference extends STU_CFG_FRPPP_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_FRPPP_PARAM implements Structure.ByValue {
        }
    }

    // BFGAS
    public static class STU_CFG_BFGAS_PARAM extends Structure {
        public int bEnable;                                // 使能控制，0：禁用，1：启用
        public byte[] szDomainName = new byte[128];            // 服务器域名
        public byte[] szToken = new byte[32];                    // 标识一个抓拍机型号，token值和activeKey保持一致，抓拍机生产时此字段必填并固定不变
        public byte[] szActiveKey = new byte[32];                // 激活字符串，抓拍机配置用于人脸采集平台鉴权，例如：I3GZ-KKQE-ZJNR-R0M1
        // 抓拍机使用者在接入平台中申请后填写至抓拍机控制台
        public byte[] reserved = new byte[256];                // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szDomainName", "szToken",
                    "szActiveKey", "reserved"});
        }

        public static class ByReference extends STU_CFG_BFGAS_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_BFGAS_PARAM implements Structure.ByValue {
        }
    }

    // Tuya
    public static class STU_CFG_TUYA_PARAM extends Structure {
        public int bEnable;                            // 使能控制，0：禁用，1：启用
        public byte[] szPID = new byte[64];                // 涂鸦平台产品ID
        public byte[] szUUID = new byte[64];                // 每个设备唯一的标识，一机一号。开发、生产时请向涂鸦申请
        public byte[] szAuthKey = new byte[64];            // 鉴权码，一机一码，与UUID配对。开发、生产时请向涂鸦申请
        public byte[] reserved = new byte[256];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szPID", "szUUID",
                    "szAuthKey", "reserved"});
        }

        public static class ByReference extends STU_CFG_TUYA_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_TUYA_PARAM implements Structure.ByValue {
        }
    }

    // Aliyun
    public static class STU_CFG_ALIYUN_PARAM extends Structure {
        public int bEnable;                                // 使能控制，0：禁用，1：启用
        public byte[] szProductKey = new byte[20];            // 产品码
        public byte[] szDeviceName = new byte[32];            // 设备名
        public byte[] szDeviceSecret = new byte[64];            // 设备密码
        public byte[] reserved = new byte[256];                // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szProductKey", "szDeviceName",
                    "szDeviceSecret", "reserved"});
        }

        public static class ByReference extends STU_CFG_ALIYUN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ALIYUN_PARAM implements Structure.ByValue {
        }
    }

    // XMPPP
    public static class STU_CFG_XMPPP_PARAM extends Structure {
        public int bEnable;                            // 使能控制，0：禁用，1：启用
        public byte[] szDomainName = new byte[128];        // 服务器域名
        public byte[] szParkId = new byte[128];            // 停车场 ID
        public byte[] szCameraId = new byte[128];            // 抓拍相机 ID
        public int bNeedWholePic;                        // 是否上传抓拍全景大图，true – 上传大图，false – 不上传大图
        public int bNeedProperty;                        // 是否上传属性信息，true – 上传，false – 不上传
        public byte[] szKeepaliveUrl = new byte[128];        // 保活的url地址
        public int nKeepAliveInterval;                    // 保活周期,单位分钟,可选值为[2,5,10,15,30]
        public byte[] reserved = new byte[512];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szDomainName", "szParkId",
                    "szCameraId", "bNeedWholePic", "bNeedProperty", "szKeepaliveUrl",
                    "nKeepAliveInterval", "reserved"});
        }

        public static class ByReference extends STU_CFG_XMPPP_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_XMPPP_PARAM implements Structure.ByValue {
        }
    }

    // 中威-900W鸣笛
    public static class STU_CFG_ZW_WHISTLE extends Structure {
        public int bEnable;                        // 使能控制，0：禁用，1：启用
        public byte[] szHost = new byte[256];            // 云平台服务器地址
        public int nPort;                            // 云平台端口
        public int nKeepAliveInterval;                // 与云平台的心跳周期, 单位秒
        public int nListenPort;                    // 监听端口
        public byte[] szRtspUrl = new byte[265];        // 取流的rtsp的url
        public byte[] szRtspUsername = new byte[32];    // Rtsp的用户名
        public byte[] szRtspPassword = new byte[32];    // Rtsp的登录密码

        // 本身场景下标定区域信息, 8192坐标系, 固定为 MAX_ZW_WHISTLE_AREA_CALIB_PTS_NUM 个点组成
        public STU_POINT[] stSelfAreaCalibPts = new STU_POINT[NetDefs.MAX_ZW_WHISTLE_CALIB_AREA_PTS_NUM];
        // 鸣笛系统场景下标定区域信息, 8192坐标系, 固定为 MAX_ZW_WHISTLE_AREA_CALIB_PTS_NUM 个点组成
        public STU_POINT[] stWhistleAreaCalibPts = new STU_POINT[NetDefs.MAX_ZW_WHISTLE_CALIB_AREA_PTS_NUM];

        public int nFontColor;                        // 字体颜色, 0-默认色, 1 - 红, 2 - 绿, 3 - 黄
        public int nBrightness;                    // 亮度,取值范围[0, 15]，值越大就越亮

        public byte[] reserved = new byte[512];        // 保留位

        public STU_CFG_ZW_WHISTLE() {
            for (int i = 0; i < stSelfAreaCalibPts.length; i++) {
                stSelfAreaCalibPts[i] = new STU_POINT();
            }

            for (int i = 0; i < stWhistleAreaCalibPts.length; i++) {
                stWhistleAreaCalibPts[i] = new STU_POINT();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szHost", "nPort",
                    "nKeepAliveInterval", "nListenPort", "szRtspUrl", "szRtspUsername", "szRtspPassword",
                    "stSelfAreaCalibPts", "stWhistleAreaCalibPts", "nFontColor", "nBrightness", "reserved"});
        }

        public static class ByReference extends STU_CFG_ZW_WHISTLE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ZW_WHISTLE implements Structure.ByValue {
        }
    }

    // 磊盛平台
    public static class STU_CFG_LS_PLATFORM extends Structure {
        public int bEnable;                                    // 使能控制，0：禁用，1：启用
        public int nHttpPort;                                    // http端口	默认8090
        public byte[] szPassword = new byte[32];                    // 内部使用字段
        public byte[] szIdentifyCbAddr = new byte[256];            // 识别回调地址
        public byte[] reserved = new byte[512];                    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "nHttpPort", "szPassword",
                    "szIdentifyCbAddr", "reserved"});
        }

        public static class ByReference extends STU_CFG_LS_PLATFORM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_LS_PLATFORM implements Structure.ByValue {
        }
    }

    // 普天视智慧工地IPC接入
    public static class STU_CFG_MQTT_PLATFORM extends Structure {
        public int bEnable;                                    // 使能控制，0：禁用，1：启用
        public int nFlag;                                        // 进出状态	1:进门 2:出门
        public byte[] szIdNumber = new byte[128];                    // 工地标识
        public byte[] szMqttIP = new byte[64];                    // Mqtt服务器地址
        public int nMqttPort;                                    // Mqtt服务器端口
        public byte[] szMqttUsername = new byte[32];                // Mqtt用户名
        public byte[] szMqttPassword = new byte[32];                // Mqtt密码
        public byte[] reserved = new byte[512];                    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "nFlag", "szMqttIP",
                    "nMqttPort", "szMqttUsername", "szMqttPassword", "reserved"});
        }

        public static class ByReference extends STU_CFG_MQTT_PLATFORM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_MQTT_PLATFORM implements Structure.ByValue {
        }
    }

    // 楼层信息
    public static class STU_FLOOR_INFO extends Structure {
        public byte[] szFloorAlias = new byte[16];                // 楼层别名
        public byte[] reserved = new byte[128];                    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szFloorAlias", "reserved"});
        }

        public static class ByReference extends STU_FLOOR_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_FLOOR_INFO implements Structure.ByValue {
        }
    }

    // 跃天梯控楼显监控
    public static class STU_CFG_YT_ELEVATOR extends Structure {
        public int bEnable;                        // 使能控制，0：禁用，1：启用
        public byte[] szServerIP = new byte[64];                    // 服务器Ip
        public int nServerPort;                    // 服务器端口
        public int nCurrentFloors;                    // 当前楼层，为FloorAlias的数组下标，web需显示对于的别名
        public int nKeepAlive;                        // 保活周期 单位s
        public int nFloorsNumber;                    // 实际楼层数
        public STU_FLOOR_INFO[] stFloorInfos = new STU_FLOOR_INFO[NetDefs.MAX_PLAT_YT_ELEVATOR_FLOOR_NUM];        // 楼层信息
        public int bAlarmEnable;                    // 电梯故障告警推送使能, 0：禁用, 1：启用
        public int nElevatorSpeed;                    // 电梯每层之间最快运行时间  单位s
        public int nElevatorTimerDay;                // 白天超时停运时间 单位min
        public int nElevatorTimerNight;            // 晚上超时停运时间 单位min
        public byte[] szKey = new byte[64];            // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx (8-4-4-4-12)
        // 其中每个  x  是  0-9  或  a-f  范围内的一个十六进制的数字,其中a-f支持大写。可以省略”-”
        public STU_TIME szAllowUseStartTime;            // 电梯停运时间设置, 白天开始时间, 目前只有 时分 有效
        public STU_TIME szAllowUseEndTime;                // 电梯停运时间设置, 白天开始结束, 目前只有 时分 有效
        public int nStopTime;                        // 默认停运时间 单位s
        public byte[] reserved = new byte[512];        // 保留位

        public STU_CFG_YT_ELEVATOR() {
            for (int i = 0; i < stFloorInfos.length; i++) {
                stFloorInfos[i] = new STU_FLOOR_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szServerIP", "nServerPort", "nCurrentFloors",
                    "nKeepAlive", "nFloorsNumber", "stFloorInfos", "bAlarmEnable", "nElevatorSpeed",
                    "nElevatorTimerDay", "nElevatorTimerNight", "szKey", "szAllowUseStartTime",
                    "szAllowUseEndTime", "nStopTime", "reserved"});
        }

        public static class ByReference extends STU_CFG_YT_ELEVATOR implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_YT_ELEVATOR implements Structure.ByValue {
        }
    }

    // 泥蜂平台
    public static class STU_CFG_NI_FENG extends Structure {
        public int bEnable;                        // 使能控制，0：禁用，1：启用
        public byte[] szServerIP = new byte[64];        // 服务器Ip
        public int nServerPort;                    // 服务器端口
        public byte[] reserved = new byte[512];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szServerIP", "nServerPort", "reserved"});
        }

        public static class ByReference extends STU_CFG_NI_FENG implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_NI_FENG implements Structure.ByValue {
        }
    }

    // KS Active
    public static class STU_CFG_KS_ACTIVE extends Structure {
        public int bEnable;                                // 使能控制，0：禁用，1：启用
        public byte[] szServerIP = new byte[64];                // 服务器Ip
        public int nServerPort;                            // 服务器端口
        public byte[] szAppID = new byte[32];                    // 服务器分配的Id号相当于账号
        public byte[] szAppKey = new byte[32];                // 服务器分配的Key相当于密码
        public byte[] szDeviceSN = new byte[32];                // 设备编号全局唯一，所有设备唯一（web只显示不能修改）
        public byte[] szDeviceName = new byte[128];            // 设备名称
        public byte[] szInfo = new byte[768];                    // 备注
        public byte[] reserved = new byte[512];                // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szServerIP", "nServerPort",
                    "szAppID", "szAppKey", "szDeviceSN", "szDeviceName", "szInfo", "reserved"});
        }

        public static class ByReference extends STU_CFG_KS_ACTIVE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_KS_ACTIVE implements Structure.ByValue {
        }
    }

    // 鑫博平台
    public static class STU_CFG_GEN_PLATFORM extends Structure {
        public byte[] szUrl = new byte[64];                // 服务器Ip
        public byte[] reserved = new byte[512];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szUrl", "reserved"});
        }

        public static class ByReference extends STU_CFG_GEN_PLATFORM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_GEN_PLATFORM implements Structure.ByValue {
        }
    }

    // 高锦采集器
    public static class STU_CFG_GOGEN_COLLECTOR extends Structure {
        public int bEnable;                        // 使能控制，0：禁用，1：启用
        public byte[] szHost = new byte[64];                // 服务器Ip
        public int nHeartbeatInterval;                // 心跳间隔，单位秒
        public int nReconnectInterval;                // 重连间隔，单位秒
        public byte[] reserved = new byte[512];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szHost", "nHeartbeatInterval", "nReconnectInterval", "reserved"});
        }

        public static class ByReference extends STU_CFG_GOGEN_COLLECTOR implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_GOGEN_COLLECTOR implements Structure.ByValue {
        }
    }

    // 梯控配置
    public static class STU_CFG_ELEVATOR_CONTROL extends Structure {
        public int nControlMode;                            // 控制方式，0 - 不控制；1 - RS485
        public byte[] szPublicFloors = new byte[128];            // 公共楼层，用","区分楼层，不可带空格
        public int nDurationInterval;                        // 持续时间（秒）
        public byte[] reserved = new byte[508];                // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nControlMode", "szPublicFloors", "nDurationInterval", "reserved"});
        }

        public static class ByReference extends STU_CFG_ELEVATOR_CONTROL implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ELEVATOR_CONTROL implements Structure.ByValue {
        }
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // 主动注册配置
    public static class STU_CFG_AUTO_REGISTER_PARAM extends Structure {
        public int bEnable;                            // 使能控制，0：禁用，1：启用
        public byte[] szServerAddress = new byte[64];        // 服务器地址
        public int nPort;                                // 服务器端口号
        public byte[] reserved = new byte[256];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szServerAddress", "nPort", "reserved"});
        }

        public static class ByReference extends STU_CFG_AUTO_REGISTER_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_AUTO_REGISTER_PARAM implements Structure.ByValue {
        }
    }

    // Websocket主动注册配置
    public static class STU_CFG_WS_REGISTER_PARAM extends Structure {
        public int bEnable;                        // 使能控制，0：禁用，1：启用
        public byte[] szServerURL = new byte[256];    // 服务器地址
        public byte[] szPushPicURL = new byte[256];    // 推图地址
        public byte[] szSercKey = new byte[128];        // 秘钥
        public int nHeartbeatInterval;                // websocket的ping-pong心跳的间隔,单位秒
        public int nHeartbeatType;                    // ping-pong心跳的实现方式
        // 0-使用websocket协议层的ping-pong机制
        // 1-使用明文(text)的ping-pong
        public int nReconnectInterval;                // websocket的重连间隔,单位秒
        public byte[] reserved = new byte[1024];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szServerURL", "szPushPicURL",
                    "szSercKey", "nHeartbeatInterval", "nHeartbeatType", "nReconnectInterval", "reserved"});
        }

        public static class ByReference extends STU_CFG_WS_REGISTER_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_WS_REGISTER_PARAM implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 获取视频分析通道数目
    public static class STU_CFG_GET_ANALYSE_CAHNNELS extends Structure {
        public int nChannelNumber;                    // 通道数
        public byte[] reserved = new byte[256];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannelNumber", "reserved"});
        }

        public static class ByReference extends STU_CFG_GET_ANALYSE_CAHNNELS implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_GET_ANALYSE_CAHNNELS implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // PTZ 线性扫描使能信息
    public static class STU_CFG_PTZ_AUTO_SCAN_ENABLE_INFO extends Structure {
        // 按bit，低位到高位分别表示32条线路，0 - 未使能，1 - 使能
        public int uAutoScanEnableMask;
        public byte[] reserved = new byte[32];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uAutoScanEnableMask", "reserved"});
        }

        public static class ByReference extends STU_CFG_PTZ_AUTO_SCAN_ENABLE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_PTZ_AUTO_SCAN_ENABLE_INFO implements Structure.ByValue {
        }
    }

    // PTZ 巡迹使能信息
    public static class STU_CFG_PTZ_AUTO_PATTERN_ENABLE_INFO extends Structure {
        // 按bit，低位到高位分别表示32条线路，0 - 未使能，1 - 使能
        public int uAutoPatternEnableMask;
        public byte[] reserved = new byte[32];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"uAutoPatternEnableMask", "reserved"});
        }

        public static class ByReference extends STU_CFG_PTZ_AUTO_PATTERN_ENABLE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_PTZ_AUTO_PATTERN_ENABLE_INFO implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 自定义车道参数
    public static class STU_TRAFFIC_CUSTOM_LANE_INFO extends Structure {
        public int nCustomLaneNo;                    // 车道号
        public int emDirection;                    // 方向,EM_TRAFFIC_LANE_DIRECTION
        public byte[] reserved = new byte[256];        // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nCustomLaneNo", "emDirection", "reserved"});
        }

        public static class ByReference extends STU_TRAFFIC_CUSTOM_LANE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_TRAFFIC_CUSTOM_LANE_INFO implements Structure.ByValue {
        }
    }

    // 交通自定义的车道参数
    public static class STU_CFG_TRAFFIC_CUSTOM_LANE extends Structure {
        // 实际车道数量，最大不超过MAX_TRAFFIC_CUSTOM_LANE_NUM
        public int nRealLaneCount;
        // 车道信息
        public STU_TRAFFIC_CUSTOM_LANE_INFO[] stTrafficCustomLanes = new STU_TRAFFIC_CUSTOM_LANE_INFO[NetDefs.MAX_TRAFFIC_LANE_NUM];

        public STU_CFG_TRAFFIC_CUSTOM_LANE() {
            for (int i = 0; i < stTrafficCustomLanes.length; i++) {
                stTrafficCustomLanes[i] = new STU_TRAFFIC_CUSTOM_LANE_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRealLaneCount", "stTrafficCustomLanes"});
        }

        public static class ByReference extends STU_CFG_TRAFFIC_CUSTOM_LANE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_TRAFFIC_CUSTOM_LANE implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 限速
    public static class STU_SPEED_LIMIT extends Structure {
        public int nLowLimit;            // 最低限速，km/h
        public int nHighLimit;            // 最高限速，km/h

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nLowLimit", "nHighLimit"});
        }

        public static class ByReference extends STU_SPEED_LIMIT implements Structure.ByReference {
        }

        public static class ByValue extends STU_SPEED_LIMIT implements Structure.ByValue {
        }
    }

    // 分析车道参数
    public static class STU_TRAFFIC_ANALYSE_LANE_INFO extends Structure {
        public int bDiffCar;                        // 是否区分大小车
        // FALSE，只需取stSpeedLimits下标为0的内容，表示小车限速
        // TRUE，stSpeedLimits下标0表示小车限速，下标1表示大车限速
        public STU_SPEED_LIMIT[] stSpeedLimits = new STU_SPEED_LIMIT[2];        // 大小车限速
        public byte[] reserved = new byte[256];        // 保留字节

        public STU_TRAFFIC_ANALYSE_LANE_INFO() {
            for (int i = 0; i < stSpeedLimits.length; i++) {
                stSpeedLimits[i] = new STU_SPEED_LIMIT();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bDiffCar", "stSpeedLimits", "reserved"});
        }

        public static class ByReference extends STU_TRAFFIC_ANALYSE_LANE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_TRAFFIC_ANALYSE_LANE_INFO implements Structure.ByValue {
        }
    }

    // 交通分析车道参数
    public static class STU_CFG_TRAFFIC_ANALYSE_LANE extends Structure {
        // 实际车道数量，最大不超过MAX_TRAFFIC_CUSTOM_LANE_NUM
        public int nRealLaneCount;
        // 车道信息
        public STU_TRAFFIC_ANALYSE_LANE_INFO[] stTrafficAnalyseLanes = new STU_TRAFFIC_ANALYSE_LANE_INFO[NetDefs.MAX_TRAFFIC_LANE_NUM];

        public STU_CFG_TRAFFIC_ANALYSE_LANE() {
            for (int i = 0; i < stTrafficAnalyseLanes.length; i++) {
                stTrafficAnalyseLanes[i] = new STU_TRAFFIC_ANALYSE_LANE_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRealLaneCount", "stTrafficAnalyseLanes"});
        }

        public static class ByReference extends STU_CFG_TRAFFIC_ANALYSE_LANE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_TRAFFIC_ANALYSE_LANE implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 交通黑白名单抓拍使能
    public static class STU_CFG_TRAFFIC_BLACKWHITELIST_ENABLE extends Structure {
        public int bBlackListEnable;        // 黑名单使能
        public int bWhiteListEnable;        // 白名单使能

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bBlackListEnable", "bWhiteListEnable"});
        }

        public static class ByReference extends STU_CFG_TRAFFIC_BLACKWHITELIST_ENABLE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_TRAFFIC_BLACKWHITELIST_ENABLE implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 通用配置
    public static class STU_EVENT_TRAFFIC_COMMON_CFG extends Structure {
        public byte[] szCode = new byte[64];            // 违法代码
        public byte[] szName = new byte[64];            // 违法类型名称
        public byte[] reversed = new byte[256];        // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szCode", "szName", "reversed"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_COMMON_CFG implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_COMMON_CFG implements Structure.ByValue {
        }
    }

    // 超速区间
    public static class STU_OVERSPEED_SECTION_CFG extends Structure {
        public int nOverSpeedPercentageLowLimit;        // 超速百分比区间，最低值,
        public int nOverSpeedPercentageHighLimit;        // 超速百分比区间，最高值，-1表示无穷大
        public byte[] szCode = new byte[64];                // 违法代码
        public byte[] szName = new byte[64];                // 违法类型名称
        public byte[] reversed = new byte[256];            // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nOverSpeedPercentageLowLimit", "nOverSpeedPercentageHighLimit",
                    "szCode", "szName", "reversed"});
        }

        public static class ByReference extends STU_OVERSPEED_SECTION_CFG implements Structure.ByReference {
        }

        public static class ByValue extends STU_OVERSPEED_SECTION_CFG implements Structure.ByValue {
        }
    }

    // 超速配置
    public static class STU_EVENT_TRAFFIC_OVERSPEED_CFG extends Structure {
        // 实际的区间个数，最大不超过MAX_TRAFFIC_OVERSPEED_SECTION_NUM
        public int nRealSectionCount;
        // 不同的超速区间对应不同的配置
        public STU_OVERSPEED_SECTION_CFG[] stOverSpeedSections = new STU_OVERSPEED_SECTION_CFG[NetDefs.MAX_TRAFFIC_OVERSPEED_SECTION_NUM];

        public STU_EVENT_TRAFFIC_OVERSPEED_CFG() {
            for (int i = 0; i < stOverSpeedSections.length; i++) {
                stOverSpeedSections[i] = new STU_OVERSPEED_SECTION_CFG();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRealSectionCount", "stOverSpeedSections"});
        }

        public static class ByReference extends STU_EVENT_TRAFFIC_OVERSPEED_CFG implements Structure.ByReference {
        }

        public static class ByValue extends STU_EVENT_TRAFFIC_OVERSPEED_CFG implements Structure.ByValue {
        }
    }

    // 交通违法代码
    public static class STU_CFG_TRAFFIC_VIOLATION_CODE extends Structure {
        // in（获取/设置配置时）：指定事件类型,EM_EVENT_SP_TYPE
        public int emInEventType;
        // in（设置配置时）/out（获取配置时）：非超速事件，emInEventType不为EVENT_SP_TRAFFIC_OVER_SPEED时使用
        public STU_EVENT_TRAFFIC_COMMON_CFG stEventTrafficCommonCfg;
        // in（设置配置时）/out（获取配置时）：超速事件，emInEventType为EVENT_SP_TRAFFIC_OVER_SPEED时使用
        public STU_EVENT_TRAFFIC_OVERSPEED_CFG stEventTrafficOverSpeed;
        // 保留字节
        public byte[] reserved = new byte[4096];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emInEventType", "stEventTrafficCommonCfg", "stEventTrafficOverSpeed", "reserved"});
        }

        public static class ByReference extends STU_CFG_TRAFFIC_VIOLATION_CODE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_TRAFFIC_VIOLATION_CODE implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 闪光灯闪光规则
    public static class STU_FLASH_LIGHT_SETTING extends Structure {
        public int nRealFlashNoCount;                                                    // 实际需要几个闪光灯，最大不超过MAX_TRAFFIC_FLASH_LIGHT_NUM
        public int[] nFlashLightNo = new int[NetDefs.MAX_TRAFFIC_FLASH_LIGHT_NUM];        // 需要的闪光灯序号
        public byte[] reserved = new byte[64];                                            // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRealFlashNoCount", "nFlashLightNo", "reserved"});
        }

        public static class ByReference extends STU_FLASH_LIGHT_SETTING implements Structure.ByReference {
        }

        public static class ByValue extends STU_FLASH_LIGHT_SETTING implements Structure.ByValue {
        }
    }

    // 闪光灯违章配置
    public static class STU_FLASH_LIGHT_VIO_CFG extends Structure {
        // 违章名称
        public byte[] szVioName = new byte[64];
        // 实际白天的闪光灯抓拍张数，最大不超过nRealFlashDayCount
        public int nRealFlashDayCapCount;
        // 白天闪光灯配置
        public STU_FLASH_LIGHT_SETTING[] stFlashDayCapSettings = new STU_FLASH_LIGHT_SETTING[NetDefs.MAX_TRAFFIC_CAPTURE_NUM];
        // 实际夜晚的闪光灯抓拍张数，最大不超过nRealFlashDayCount
        public int nRealFlashNightCapCount;
        // 夜晚闪光灯配置
        public STU_FLASH_LIGHT_SETTING[] stFlashNightCapSettings = new STU_FLASH_LIGHT_SETTING[NetDefs.MAX_TRAFFIC_CAPTURE_NUM];
        // 保留字节
        public byte[] reserved = new byte[2048];

        public STU_FLASH_LIGHT_VIO_CFG() {
            for (int i = 0; i < stFlashDayCapSettings.length; i++) {
                stFlashDayCapSettings[i] = new STU_FLASH_LIGHT_SETTING();
            }

            for (int i = 0; i < stFlashNightCapSettings.length; i++) {
                stFlashNightCapSettings[i] = new STU_FLASH_LIGHT_SETTING();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szVioName", "nRealFlashDayCapCount", "stFlashDayCapSettings",
                    "nRealFlashNightCapCount", "stFlashNightCapSettings", "reserved"});
        }

        public static class ByReference extends STU_FLASH_LIGHT_VIO_CFG implements Structure.ByReference {
        }

        public static class ByValue extends STU_FLASH_LIGHT_VIO_CFG implements Structure.ByValue {
        }
    }

    // 交通闪光灯
    public static class STU_CFG_TRAFFIC_FLASH_LIGHT extends Structure {
        // in（获取/设置配置时）：规则类型，对应智能场景,EM_INTELLI_RULE_TYPE
        public int emInRuleType;
        // in（设置配置时）/out（获取配置时）：实际车道数，最大不超过MAX_TRAFFIC_LANE_NUM
        public int nRealLaneCount;
        // in（设置配置时）/out（获取配置时）：闪光灯配置
        public STU_FLASH_LIGHT_VIO_CFG[] stFlashLightViolationCfgs = new STU_FLASH_LIGHT_VIO_CFG[NetDefs.MAX_TRAFFIC_LANE_NUM];

        public STU_CFG_TRAFFIC_FLASH_LIGHT() {
            for (int i = 0; i < stFlashLightViolationCfgs.length; i++) {
                stFlashLightViolationCfgs[i] = new STU_FLASH_LIGHT_VIO_CFG();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emInRuleType", "nRealLaneCount", "stFlashLightViolationCfgs"});
        }

        public static class ByReference extends STU_CFG_TRAFFIC_FLASH_LIGHT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_TRAFFIC_FLASH_LIGHT implements Structure.ByValue {
        }
    }

    // 交通抓拍时间段规则
    public static class STU_TRAFFIC_SNAP_RULE_CFG extends Structure {
        // 正常时间段
        public STU_WEEK_TIME_SECTION_SCHEDULE stTimeSchedule = new STU_WEEK_TIME_SECTION_SCHEDULE();

        // 假日时段使能，默认不使能
        public int bHolidayEnable;
        // 假日时间段
        public STU_DAY_TIME_SECTION_SCHEDULE stHolidaySchedule = new STU_DAY_TIME_SECTION_SCHEDULE();

        // 保留字节
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stTimeSchedule", "bHolidayEnable", "stHolidaySchedule", "reserved"});
        }

        public static class ByReference extends STU_TRAFFIC_SNAP_RULE_CFG implements Structure.ByReference {
        }

        public static class ByValue extends STU_TRAFFIC_SNAP_RULE_CFG implements Structure.ByValue {
        }
    }

    // 交通抓拍时间段配置，可多次调用，每次只获取多车道的一种规则
    public static class STU_CFG_TRAFFIC_SNAP_TIME_SCHEDULE extends Structure {
        // 获取或者设置配置时，都需指定规则类型，只使用“交通事件检测场景”部分, EM_INTELLI_RULE_TYPE
        public int emTrafficRuleType;

        // 0：全局，不区分车道，固定使用Lanes[0u]
        //	1：区分车道，每个车道使用各自的Lanes
        public int nMode;

        // 实际抓拍车道数
        public int nRealLaneCount;
        // 抓拍车道规则数组配置，车道最多MAX_TRAFFIC_LANE_NUM个
        public STU_TRAFFIC_SNAP_RULE_CFG[] stTraffceSnapRuleCfgs = new STU_TRAFFIC_SNAP_RULE_CFG[NetDefs.MAX_TRAFFIC_LANE_NUM];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emTrafficRuleType", "nMode", "nRealLaneCount", "stTraffceSnapRuleCfgs"});
        }

        public static class ByReference extends STU_CFG_TRAFFIC_SNAP_TIME_SCHEDULE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_TRAFFIC_SNAP_TIME_SCHEDULE implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 识别推送安全边界配置
    public static class STU_CFG_RECOGNIZE_LIMIT extends Structure {
        public float[] fRoll = new float[2];                // 斜脸角度区间[-180,180]
        public float[] fYaw = new float[2];                // 侧脸角度区间[-180,180]
        public float[] fPitch = new float[2];                // 俯仰角度区间[-180,180]
        public float fBlur;                                // 模糊度[0,1],越小越好,大于该值不推识别
        public float fLandMarkConfidence;                // landMark置信度[0,1],越大越好,小于该值不推识别
        public float fYawConfidence;                        // 水平置信度[0,1],越大越好,小于该值不推识别
        public int nXBoundOffset;                        // 人脸区域距离x方向边界最小像素点[0,8191]（8192坐标系）,小于该值不推识别
        public int nYBoundOffset;                        // 人脸区域距离y方向边界最小像素点[0,8191]（8192坐标系）,小于该值不推识别
        public int[] uFaceSize = new int[2];                // 可识别人脸像素大小范围，最小值50，最大值500
        public byte[] reserved = new byte[512];            // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"fRoll", "fYaw", "fPitch", "fBlur", "fLandMarkConfidence",
                    "fYawConfidence", "nXBoundOffset", "nYBoundOffset", "uFaceSize", "reserved"});
        }

        public static class ByReference extends STU_CFG_RECOGNIZE_LIMIT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_RECOGNIZE_LIMIT implements Structure.ByValue {
        }
    }

    // 检测抓拍安全边界
    public static class STU_CFG_SNAPSHOT_LIMIT extends Structure {
        public float[] fRoll = new float[2];                // 斜脸角度区间[-180,180]
        public float[] fYaw = new float[2];                // 侧脸角度区间[-180,180]
        public float[] fPitch = new float[2];                // 俯仰角度区间[-180,180]
        public float fBlur;                                // 模糊度[0,1],越小越好,大于该值不推识别
        public float fLandMarkConfidence;                // landMark置信度[0,1],越大越好,小于该值不推识别
        public float fYawConfidence;                        // 水平置信度[0,1],越大越好,小于该值不推识别
        public int nXBoundOffset;                        // 人脸区域距离x方向边界最小像素点[0,8191]（8192坐标系）,小于该值不推识别
        public int nYBoundOffset;                        // 人脸区域距离y方向边界最小像素点[0,8191]（8192坐标系）,小于该值不推识别
        public int[] uFaceSize = new int[2];                // 可识别人脸像素大小范围，最小值50，最大值500
        public byte[] reserved = new byte[512];            // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"fRoll", "fYaw", "fPitch", "fBlur", "fLandMarkConfidence",
                    "fYawConfidence", "nXBoundOffset", "nYBoundOffset", "uFaceSize", "reserved"});
        }

        public static class ByReference extends STU_CFG_SNAPSHOT_LIMIT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_SNAPSHOT_LIMIT implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 推图安全边界配置
    public static class STU_CFG_FACE_PUSH_LIMIT extends Structure {
        public STU_CFG_RECOGNIZE_LIMIT stRegconizeLimit;                    // 识别推送安全边界
        public STU_CFG_SNAPSHOT_LIMIT stSnapshotLimit;                    // 检测抓拍安全边界
        public byte[] reserved = new byte[2048];            // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stRegconizeLimit", "stSnapshotLimit", "reserved"});
        }

        public static class ByReference extends STU_CFG_FACE_PUSH_LIMIT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_FACE_PUSH_LIMIT implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 活体配置
    public static class STU_CFG_LIVENESS extends Structure {
        public int bEnable;                    // 使能
        public float fLivenessThreshold;            // 活体阈值[0,100]
        public byte[] reserved = new byte[512];    // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "fLivenessThreshold", "reserved"});
        }

        public static class ByReference extends STU_CFG_LIVENESS implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_LIVENESS implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 人体检测配置
    public static class STU_CFG_HUMAN_BODY_DETECT extends Structure {
        public int bBodyAttriEnable;                // 人体属性使能
        public int bQualityFilter;                    // 人体质量过滤
        public byte[] reserved = new byte[508];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bBodyAttriEnable", "bQualityFilter", "reserved"});
        }

        public static class ByReference extends STU_CFG_HUMAN_BODY_DETECT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_HUMAN_BODY_DETECT implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 智能算法版本
    public static class STU_CFG_INTELLI_ALGORITHM_VERSION extends Structure {
        public byte[] szAlgorithmVersion = new byte[64];        // 智能算法版本
        public byte[] reserved = new byte[64];                // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szAlgorithmVersion", "reserved"});
        }

        public static class ByReference extends STU_CFG_INTELLI_ALGORITHM_VERSION implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_INTELLI_ALGORITHM_VERSION implements Structure.ByValue {
        }
    }

    // 智能算法版本获取
    public static class STU_CFG_ALGORITHM_VERSION_GET extends Structure {
        // 数量
        public int nCount;
        // 智能算法版本列表
        public STU_CFG_INTELLI_ALGORITHM_VERSION[] stuIntelliAlgorithmVersions = new STU_CFG_INTELLI_ALGORITHM_VERSION[NetDefs.MAX_INTELLI_ALGORITHM_VERSION_NUM];

        public STU_CFG_ALGORITHM_VERSION_GET() {
            for (int i = 0; i < stuIntelliAlgorithmVersions.length; i++) {
                stuIntelliAlgorithmVersions[i] = new STU_CFG_INTELLI_ALGORITHM_VERSION();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nCount", "stuIntelliAlgorithmVersions"});
        }

        public static class ByReference extends STU_CFG_ALGORITHM_VERSION_GET implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ALGORITHM_VERSION_GET implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 视频输入制式配置
    public static class STU_CFG_VIDEOIN_STANDARD extends Structure {
        public int nStandardType;                        // 0 - "PAL", 1 - "NTSC", 2 - "SECAM"
        public byte[] reserved = new byte[128];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nStandardType", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_STANDARD implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_STANDARD implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 视频输入色彩设置
    public static class STU_CFG_VIDEOIN_COLOR_SETTING extends Structure {
        // 亮度, 0-100, 默认50
        public int nBrightness;
        // 对比度, 0-100, 默认50
        public int nContrast;
        // 色调, 0-100, 默认50
        public int nHue;
        // 饱和度, 0-100, 默认50
        public int nSaturation;
        // 色度抑制, 0~100, 默认50, 0表示不抑制, 100表示全部抑制
        public int nChomaSuppress;
        // 颜色风格, 0~10, 风格 0-标准, 1-柔和, 2-艳丽
        public int nColortype;
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nBrightness", "nContrast", "nHue",
                    "nSaturation", "nChomaSuppress", "nColortype", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_COLOR_SETTING implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_COLOR_SETTING implements Structure.ByValue {
        }
    }

    // 视频输入gamma设置
    public static class STU_CFG_VIDEOIN_GAMMA_SETTING extends Structure {
        // 伽马模式索引, 0-9
        public int nModeIndex;
        // 伽马校正等级, 0-100,默认50
        public int nLevel;
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nModeIndex", "nLevel", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_GAMMA_SETTING implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_GAMMA_SETTING implements Structure.ByValue {
        }
    }

    // 视频输入色彩参数设置
    public static class STU_CFG_VIDEOIN_COLOR_PARAM extends Structure {
        // 数组下标 0 - 视频, 1 - 图片, 2 - 抓拍
        public STU_CFG_VIDEOIN_COLOR_SETTING[] stColorArr = new STU_CFG_VIDEOIN_COLOR_SETTING[NetDefs.MAX_VIDEO_IN_SETTING_TYPE_COUNT];

        public STU_CFG_VIDEOIN_COLOR_PARAM() {
            for (int i = 0; i < stColorArr.length; i++) {
                stColorArr[i] = new STU_CFG_VIDEOIN_COLOR_SETTING();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stColorArr"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_COLOR_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_COLOR_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入gamma参数参数设置
    public static class STU_CFG_VIDEOIN_GAMMA_PARAM extends Structure {
        // 数组下标 0 - 视频, 1 - 图片, 2 - 抓拍
        public STU_CFG_VIDEOIN_GAMMA_SETTING[] stGammaArr = new STU_CFG_VIDEOIN_GAMMA_SETTING[NetDefs.MAX_VIDEO_IN_SETTING_TYPE_COUNT];

        public STU_CFG_VIDEOIN_GAMMA_PARAM() {
            for (int i = 0; i < stGammaArr.length; i++) {
                stGammaArr[i] = new STU_CFG_VIDEOIN_GAMMA_SETTING();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stGammaArr"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_GAMMA_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_GAMMA_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入图像调节
    public static class STU_CFG_VIDEOIN_IMAGE_ADJUSTMENT extends Structure {
        // 色彩设置, 数组下标 0 - 白天, 1 - 黑夜, 2 - 普通
        public STU_CFG_VIDEOIN_COLOR_PARAM[] stColorParamArr = new STU_CFG_VIDEOIN_COLOR_PARAM[NetDefs.MAX_VIDEO_IN_TIME_SECTION_COUNT];
        // gamma参数, 数组下标 0 - 白天, 1 - 黑夜, 2 - 普通
        public STU_CFG_VIDEOIN_GAMMA_PARAM[] stGammaParamArr = new STU_CFG_VIDEOIN_GAMMA_PARAM[NetDefs.MAX_VIDEO_IN_TIME_SECTION_COUNT];
        // 保留参数
        public byte[] reserved = new byte[1024];

        public STU_CFG_VIDEOIN_IMAGE_ADJUSTMENT() {
            for (int i = 0; i < stColorParamArr.length; i++) {
                stColorParamArr[i] = new STU_CFG_VIDEOIN_COLOR_PARAM();
            }

            for (int i = 0; i < stGammaParamArr.length; i++) {
                stGammaParamArr[i] = new STU_CFG_VIDEOIN_GAMMA_PARAM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stColorParamArr", "stGammaParamArr", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_IMAGE_ADJUSTMENT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_IMAGE_ADJUSTMENT implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 视频输入锐度设置
    public static class STU_CFG_VIDEOIN_SHARPNESS_SETTING extends Structure {
        // 锐度, 0-100, 默认50
        public int nSharpness;
        // 锐度抑制, 0~100, 默认50, 0表示不抑制, 100表示完全抑制
        public int nSharpSuppress;
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nSharpness", "nSharpSuppress", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_SHARPNESS_SETTING implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_SHARPNESS_SETTING implements Structure.ByValue {
        }
    }

    // 视频输入降噪模块参数设置
    public static class STU_CFG_VIDEOIN_KTNF_SETTING extends Structure {
        // 2D降噪使能, FALSE:不使能, TRUE:使能,默认使能
        public int bNr2dEnablel;
        // 2D降噪等级, 0～100, 默认50
        public int nNr2dLevel;
        // 3D降噪使能, FALSE:不使能, TRUE:使能,默认使能
        public int bNr3dEnable;
        // 3D降噪模式, 0 - 普通模式, 1 - 专家模式 , 默认1 - 专家模式
        public int nNr3dOption;
        // 3D降噪普通等级, 范围0～100, 默认50
        public int nNr3dLevel;
        // 3D降噪专家时域等级, 0～100, 默认50
        public int nNr3dTnfLevel;
        // 3D降噪专家空域等级, 0～100, 默认50
        public int nNr3dSnfLevel;
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bNr2dEnablel", "nNr2dLevel", "bNr3dEnable",
                    "nNr3dOption", "nNr3dLevel", "nNr3dTnfLevel", "nNr3dSnfLevel", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_KTNF_SETTING implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_KTNF_SETTING implements Structure.ByValue {
        }
    }

    // 视频输入透雾设置参数设置
    public static class STU_CFG_VIDEOIN_DEFOG_SETTING extends Structure {
        // 透雾模式, 0-关闭,1-自动,2-手动
        public int nMode;
        // 手动模式下强度, 0-低，1-中，2-高, 默认中
        public int nIntensity;
        // 大气光模式, 0-自动，1-手动
        public int nLightIntensityMode;
        // 大气光强值, 0-12
        public int nLightIntensityLevel;
        // 光学去雾使能, FALSE—关 TRUE—开（对应物理上的挡片）
        public int bCamDefogEnable;
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMode", "nIntensity", "nLightIntensityMode",
                    "nLightIntensityLevel", "bCamDefogEnable", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_DEFOG_SETTING implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_DEFOG_SETTING implements Structure.ByValue {
        }
    }

    // 视频输入锐度
    public static class STU_CFG_VIDEOIN_SHARPNESS_PARAM extends Structure {
        // 数组下标 0 - 视频, 1 - 图片, 2 - 抓拍
        public STU_CFG_VIDEOIN_SHARPNESS_SETTING[] stSharpnessArr = new STU_CFG_VIDEOIN_SHARPNESS_SETTING[NetDefs.MAX_VIDEO_IN_SETTING_TYPE_COUNT];

        public STU_CFG_VIDEOIN_SHARPNESS_PARAM() {
            for (int i = 0; i < stSharpnessArr.length; i++) {
                stSharpnessArr[i] = new STU_CFG_VIDEOIN_SHARPNESS_SETTING();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stSharpnessArr"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_SHARPNESS_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_SHARPNESS_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入降噪模块参数
    public static class STU_CFG_VIDEOIN_KTNF_PARAM extends Structure {
        // 数组下标 0 - 视频, 1 - 图片, 2 - 抓拍
        public STU_CFG_VIDEOIN_KTNF_SETTING[] stKtnfArr = new STU_CFG_VIDEOIN_KTNF_SETTING[NetDefs.MAX_VIDEO_IN_SETTING_TYPE_COUNT];

        public STU_CFG_VIDEOIN_KTNF_PARAM() {
            for (int i = 0; i < stKtnfArr.length; i++) {
                stKtnfArr[i] = new STU_CFG_VIDEOIN_KTNF_SETTING();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stKtnfArr"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_KTNF_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_KTNF_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入透雾设置参数
    public static class STU_CFG_VIDEOIN_DEFOG_PARAM extends Structure {
        // 数组下标 0 - 视频, 1 - 图片, 2 - 抓拍
        public STU_CFG_VIDEOIN_DEFOG_SETTING[] stDefogArr = new STU_CFG_VIDEOIN_DEFOG_SETTING[NetDefs.MAX_VIDEO_IN_SETTING_TYPE_COUNT];

        public STU_CFG_VIDEOIN_DEFOG_PARAM() {
            for (int i = 0; i < stDefogArr.length; i++) {
                stDefogArr[i] = new STU_CFG_VIDEOIN_DEFOG_SETTING();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stDefogArr"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_DEFOG_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_DEFOG_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入图像增强
    public static class STU_CFG_VIDEOIN_IMAGE_ENHANCEMENT extends Structure {
        // 数组下标 0 - 视频, 1 - 图片, 2 - 抓拍
        public STU_CFG_VIDEOIN_SHARPNESS_PARAM[] stSharpnessParamArr = new STU_CFG_VIDEOIN_SHARPNESS_PARAM[NetDefs.MAX_VIDEO_IN_SETTING_TYPE_COUNT];
        // 降噪模块, 数组下标 0 - 白天, 1 - 黑夜, 2 - 普通
        public STU_CFG_VIDEOIN_KTNF_PARAM[] stKtnfParamArr = new STU_CFG_VIDEOIN_KTNF_PARAM[NetDefs.MAX_VIDEO_IN_TIME_SECTION_COUNT];
        // 透雾设置, 数组下标 0 - 白天, 1 - 黑夜, 2 - 普通
        public STU_CFG_VIDEOIN_DEFOG_PARAM[] stDefogParamArr = new STU_CFG_VIDEOIN_DEFOG_PARAM[NetDefs.MAX_VIDEO_IN_TIME_SECTION_COUNT];
        // 保留参数
        public byte[] reserved = new byte[1024];

        public STU_CFG_VIDEOIN_IMAGE_ENHANCEMENT() {
            for (int i = 0; i < stSharpnessParamArr.length; i++) {
                stSharpnessParamArr[i] = new STU_CFG_VIDEOIN_SHARPNESS_PARAM();
            }

            for (int i = 0; i < stKtnfParamArr.length; i++) {
                stKtnfParamArr[i] = new STU_CFG_VIDEOIN_KTNF_PARAM();
            }

            for (int i = 0; i < stDefogParamArr.length; i++) {
                stDefogParamArr[i] = new STU_CFG_VIDEOIN_DEFOG_PARAM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stSharpnessParamArr", "stKtnfParamArr", "stDefogParamArr", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_IMAGE_ENHANCEMENT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_IMAGE_ENHANCEMENT implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 视频输入曝光设置
    public static class STU_CFG_VIDEOIN_EXPOSURE_SETTING extends Structure {
        // 曝光模式
        // 0：默认,自动模式, 1：低噪声, 2: 防拖影, 3 : 未定义, 4 : 用于自定义, 5 : 光圈优先，曝光时间和增益自动调整
        // 6 : 手动固定, 7 : 增益优先, 8 : 快门优先, 9 : 闪光灯脉宽模式(卡口小快门模式)
        public int nAeMode;
        // 曝光模式选择
        // 0:自动曝光, 1:手动曝光, 2~8 : 未定义, 9：区间自动, 10：自定义曝光
        public int nExpMode;
        // 曝光上限, 0~40, 默认40ms
        public int nExpMax;
        // 曝光下限, 0~40, 默认0ms
        public int nExpMin;
        // 自定义曝光值, nExpMode为自定义曝光下使用
        public int nExpCustom;
        // 增益上限, 0-100，默认50
        public int nGainMax;
        // 增益下限, 0-100，默认50
        public int nGainMin;
        // 固定增益值, 表示自动增益的上限
        public int nGain;
        // 增益模式, 0-固定增益，大小为Gain, 1 - 自动增益, 2 - 用户自定义增益，范围[GainMin, GainMax]
        public int nGainMode;
        // 防闪烁模式, 0-Outdoor, 1-50Hz防闪烁, 2-60Hz防闪烁，默认0
        public int nAntiFlicker;
        // 曝光响应速度, 0~15, 越大越慢, 默认2
        public int nAeSpeed;
        // 曝光灵敏度, 0~15,越大越慢，默认5
        public int nAeSenstive;
        // 曝光参考亮度(曝光等级), 0~100，默认50
        public int nEvdefault;
        // 自动曝光恢复, 单位为秒，0表示关闭
        public int nRecoveryTime;
        // 自动区间低照使能
        public int bLowLuxAutoEnable;
        // 快门步长等级, 0~10
        public int nShuStep;
        // 光圈步长等级, 0~10
        public int nIrisStep;
        // 增益步长等级, 0~10
        public int nGainStep;
        // 卡警爆闪抓拍小快门, 范围0~20ms
        public int nSnapExpTime;
        // 卡警爆闪抓拍时，白天增益上限, 范围0~20ms
        public int nSnapGainMax;
        // aeMode模式为光圈优先时调节, 范围0~20ms
        public int nExposureIris;
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nAeMode", "nExpMode", "nExpMax", "nExpMin",
                    "nExpCustom", "nGainMax", "nGainMin", "nGain", "nGainMode", "nAntiFlicker",
                    "nAeSpeed", "nAeSenstive", "nEvdefault", "nRecoveryTime", "bLowLuxAutoEnable",
                    "nShuStep", "nIrisStep", "nGainStep", "nSnapExpTime", "nSnapGainMax", "nExposureIris",
                    "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_EXPOSURE_SETTING implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_EXPOSURE_SETTING implements Structure.ByValue {
        }
    }

    // 视频输入宽动态设置
    public static class STU_CFG_VIDEOIN_AE_WDR_SETTING extends Structure {
        // 宽动态模式, 0：宽动态关闭, 1：数字宽动态, 2：真正宽度态, 3：自动数字宽动态
        // 4：自动宽动态(真实宽动态场景自适应)
        public int nMode;
        // 宽动态等级, 0~100 默认50
        public int nLevel;
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMode", "nLevel", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_AE_WDR_SETTING implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_AE_WDR_SETTING implements Structure.ByValue {
        }
    }

    // 背光补偿参数
    public static class STU_VIDEO_IN_ADVANCED_BACK_LIGHT_PARAM extends Structure {
        // 背光补偿等级, 0-关闭, 1-弱，2-中，3-强，4-自定义
        public int nLevel;
        // 保留参数
        public byte[] reserved = new byte[32];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nLevel", "reserved"});
        }

        public static class ByReference extends STU_VIDEO_IN_ADVANCED_BACK_LIGHT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEO_IN_ADVANCED_BACK_LIGHT_PARAM implements Structure.ByValue {
        }
    }

    // 强光抑制参数
    public static class STU_VIDEO_IN_ADVANCED_OLS_PARAM extends Structure {
        // 强光抑制等级, 0-关闭, 1-弱，2-中，3-强
        public int nLevel;
        // 强光抑制模式, 1-FPGA模式 0-普通模式
        public int nGlareInMode;
        // 曝光上限, 0~40, 默认40ms
        public int nExpMaxOLS;
        // 曝光下限, 0~40, 默认0ms
        public int nExpMinOLS;
        // 增益上限, 0~100默认50
        public int nGainMaxOLS;
        // 增益下限, 0~100默认50
        public int nGainMinOLS;
        // 强光抑制灵敏度, 只在强光抑制模式有效
        public int nGlareInSensitivity;
        // 保留参数
        public byte[] reserved = new byte[32];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nLevel", "nGlareInMode", "nExpMaxOLS",
                    "nExpMinOLS", "nGainMaxOLS", "nGainMinOLS", "nGlareInSensitivity", "reserved"});
        }

        public static class ByReference extends STU_VIDEO_IN_ADVANCED_OLS_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEO_IN_ADVANCED_OLS_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入测光设置
    public static class STU_CFG_VIDEOIN_AE_ADVANCED_SETTING extends Structure {
        // 测光模式, 0：全局测光模式, 1：局部测光模式, 2：背光补偿(blc), 3：强光抑制(OLS)
        public int nFlag;
        // 测光区间实际个数
        public int nRegionCount;
        // 测光区间
        public STU_RECT_L[] stRegions = new STU_RECT_L[NetDefs.MAX_VIDEO_IN_AE_ADVANCED_REGION_COUNT];
        // 背光补偿参数
        public STU_VIDEO_IN_ADVANCED_BACK_LIGHT_PARAM stBackLightParam = new STU_VIDEO_IN_ADVANCED_BACK_LIGHT_PARAM();
        // 强光抑制参数
        public STU_VIDEO_IN_ADVANCED_OLS_PARAM stOlsParam = new STU_VIDEO_IN_ADVANCED_OLS_PARAM();
        // 保留参数
        public byte[] reserved = new byte[64];

        public STU_CFG_VIDEOIN_AE_ADVANCED_SETTING() {
            for (int i = 0; i < stRegions.length; i++) {
                stRegions[i] = new STU_RECT_L();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nFlag", "nRegionCount", "stRegions",
                    "stBackLightParam", "stOlsParam", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_AE_ADVANCED_SETTING implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_AE_ADVANCED_SETTING implements Structure.ByValue {
        }
    }

    // 视频输入快门设置
    public static class STU_CFG_VIDEOIN_SHUTTER_MODE_SETTING extends Structure {
        // 快门模式	0: 单快门全帧率, 1: 双快门全帧率, 2 : 双快门半帧率, 3 : 三快门半帧率
        public int nMode;
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMode", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_SHUTTER_MODE_SETTING implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_SHUTTER_MODE_SETTING implements Structure.ByValue {
        }
    }

    // 视频输入自动光圈设置
    public static class STU_CFG_VIDEOIN_IRIS_SETTING extends Structure {
        // 自动光圈的使能, TRUE-启用（自动），FALSE-不启用（手动）
        public int bAutoIrisEnable;
        // 灵敏度, [0-100]
        public int nSensitivity;
        // 光圈调节的上限, [0-100]
        public int nIrisMax;
        // 光圈调节的下限, [0-100]
        public int nIrisMin;
        // 设备类型, 0: 正序PIRIS光圈, 1: 反序PIRIS光圈, 2 : DC光圈, 3 : 固定光圈, 4 : 霍尔光圈
        public int nIrisType;
        // AutoIris在手动情况下控制光圈状态, 1-开启，0-关闭
        public int nIrisManualType;
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bAutoIrisEnable", "nSensitivity", "nIrisMax",
                    "nIrisMin", "nIrisType", "nIrisManualType", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_IRIS_SETTING implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_IRIS_SETTING implements Structure.ByValue {
        }
    }

    // 视频输入自动曝光设置
    public static class STU_CFG_VIDEOIN_AE_SCENE_EXP_SETTING extends Structure {
        // 场景曝光模式, 0:不开启场景曝光模式, 1:人脸 曝光场景模式, 2 : 车牌 曝光场景模式
        public int nMode;
        // 目标亮度, [0-255]
        public int nTargetLuma;
        // 2A人脸曝光间隔检测时间：当前人脸离开画面，画面亮度保持的时间, [0-3600]，单位：秒
        public int nInterval;
        // 调节速度, [0-100]
        public int nSpeed;
        // 是否启用逆光亮度补偿, 0-不开启, 1 - 开启
        public int nBlBcSw;
        // 是否启用顺光亮度补偿, 0-不开启, 1 - 开启
        public int nOlBcSw;
        // 强逆光目标亮度调节阈值1, 要求 nExpBlThr1 < nExpBlThr2 < nExpOlThr1 < nExpOlThr2
        public int nExpBlThr1;
        // 强逆光目标亮度调节阈值2
        public int nExpBlThr2;
        // 强顺光目标亮度调节阈值1
        public int nExpOlThr1;
        // 强顺光目标亮度调节阈值2
        public int nExpOlThr2;
        // 逆光亮度补偿调节等级，范围0~100
        public int nBlBcVal;
        // 顺光亮度补偿调节等级，范围0~100
        public int nOlBcVal;
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMode", "nTargetLuma", "nInterval",
                    "nSpeed", "nBlBcSw", "nOlBcSw", "nExpBlThr1", "nExpBlThr2", "nExpOlThr1",
                    "nExpOlThr2", "nBlBcVal", "nOlBcVal", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_AE_SCENE_EXP_SETTING implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_AE_SCENE_EXP_SETTING implements Structure.ByValue {
        }
    }

    // 视频输入曝光设置参数
    public static class STU_CFG_VIDEOIN_AE_PARAM extends Structure {
        // 数组下标 0 - 视频, 1 - 图片, 2 - 抓拍
        public STU_CFG_VIDEOIN_EXPOSURE_SETTING[] stAeArr = new STU_CFG_VIDEOIN_EXPOSURE_SETTING[NetDefs.MAX_VIDEO_IN_SETTING_TYPE_COUNT];

        public STU_CFG_VIDEOIN_AE_PARAM() {
            for (int i = 0; i < stAeArr.length; i++) {
                stAeArr[i] = new STU_CFG_VIDEOIN_EXPOSURE_SETTING();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stAeArr"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_AE_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_AE_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入宽动态设置参数
    public static class STU_CFG_VIDEOIN_AE_WDR_PARAM extends Structure {
        // 数组下标 0 - 视频, 1 - 图片, 2 - 抓拍
        public STU_CFG_VIDEOIN_AE_WDR_SETTING[] stAeWdrArr = new STU_CFG_VIDEOIN_AE_WDR_SETTING[NetDefs.MAX_VIDEO_IN_SETTING_TYPE_COUNT];

        public STU_CFG_VIDEOIN_AE_WDR_PARAM() {
            for (int i = 0; i < stAeWdrArr.length; i++) {
                stAeWdrArr[i] = new STU_CFG_VIDEOIN_AE_WDR_SETTING();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stAeWdrArr"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_AE_WDR_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_AE_WDR_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入测光设置参数
    public static class STU_CFG_VIDEOIN_AE_ADVANCED_PARAM extends Structure {
        // 数组下标 0 - 视频, 1 - 图片, 2 - 抓拍
        public STU_CFG_VIDEOIN_AE_ADVANCED_SETTING[] stAeAdvanceArr = new STU_CFG_VIDEOIN_AE_ADVANCED_SETTING[NetDefs.MAX_VIDEO_IN_SETTING_TYPE_COUNT];

        public STU_CFG_VIDEOIN_AE_ADVANCED_PARAM() {
            for (int i = 0; i < stAeAdvanceArr.length; i++) {
                stAeAdvanceArr[i] = new STU_CFG_VIDEOIN_AE_ADVANCED_SETTING();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stAeAdvanceArr"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_AE_ADVANCED_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_AE_ADVANCED_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入快门设置参数
    public static class STU_CFG_VIDEOIN_SHUTTER_MODE_PARAM extends Structure {
        // 数组下标 0 - 视频, 1 - 图片, 2 - 抓拍
        public STU_CFG_VIDEOIN_SHUTTER_MODE_SETTING[] stShutterModeArr = new STU_CFG_VIDEOIN_SHUTTER_MODE_SETTING[NetDefs.MAX_VIDEO_IN_SETTING_TYPE_COUNT];

        public STU_CFG_VIDEOIN_SHUTTER_MODE_PARAM() {
            for (int i = 0; i < stShutterModeArr.length; i++) {
                stShutterModeArr[i] = new STU_CFG_VIDEOIN_SHUTTER_MODE_SETTING();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stShutterModeArr"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_SHUTTER_MODE_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_SHUTTER_MODE_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入自动光圈设置参数
    public static class STU_CFG_VIDEOIN_IRIS_PARAM extends Structure {
        // 数组下标 0 - 视频, 1 - 图片, 2 - 抓拍
        public STU_CFG_VIDEOIN_IRIS_SETTING[] stIrisArr = new STU_CFG_VIDEOIN_IRIS_SETTING[NetDefs.MAX_VIDEO_IN_SETTING_TYPE_COUNT];

        public STU_CFG_VIDEOIN_IRIS_PARAM() {
            for (int i = 0; i < stIrisArr.length; i++) {
                stIrisArr[i] = new STU_CFG_VIDEOIN_IRIS_SETTING();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stIrisArr"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_IRIS_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_IRIS_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入自动曝光设置参数
    public static class STU_CFG_VIDEOIN_AE_SCENE_EXP_PARAM extends Structure {
        // 数组下标 0 - 视频, 1 - 图片, 2 - 抓拍
        public STU_CFG_VIDEOIN_AE_SCENE_EXP_SETTING[] stAeSceneExpArr = new STU_CFG_VIDEOIN_AE_SCENE_EXP_SETTING[NetDefs.MAX_VIDEO_IN_SETTING_TYPE_COUNT];

        public STU_CFG_VIDEOIN_AE_SCENE_EXP_PARAM() {
            for (int i = 0; i < stAeSceneExpArr.length; i++) {
                stAeSceneExpArr[i] = new STU_CFG_VIDEOIN_AE_SCENE_EXP_SETTING();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stAeSceneExpArr"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_AE_SCENE_EXP_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_AE_SCENE_EXP_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入曝光
    public static class STU_CFG_VIDEOIN_EXPOSURE extends Structure {
        // 曝光, 数组下标 0 - 白天, 1 - 黑夜, 2 - 普通
        public STU_CFG_VIDEOIN_AE_PARAM[] stAeParamArr = new STU_CFG_VIDEOIN_AE_PARAM[NetDefs.MAX_VIDEO_IN_TIME_SECTION_COUNT];
        // 宽动态, 数组下标 0 - 白天, 1 - 黑夜, 2 - 普通
        public STU_CFG_VIDEOIN_AE_WDR_PARAM[] stAeWdrParamArr = new STU_CFG_VIDEOIN_AE_WDR_PARAM[NetDefs.MAX_VIDEO_IN_TIME_SECTION_COUNT];
        // 测光, 数组下标 0 - 白天, 1 - 黑夜, 2 - 普通
        public STU_CFG_VIDEOIN_AE_ADVANCED_PARAM[] stAeAdvanceParamArr = new STU_CFG_VIDEOIN_AE_ADVANCED_PARAM[NetDefs.MAX_VIDEO_IN_TIME_SECTION_COUNT];
        // 快门, 数组下标 0 - 白天, 1 - 黑夜, 2 - 普通
        public STU_CFG_VIDEOIN_SHUTTER_MODE_PARAM[] stShutterModeParamAr = new STU_CFG_VIDEOIN_SHUTTER_MODE_PARAM[NetDefs.MAX_VIDEO_IN_TIME_SECTION_COUNT];
        // 自动光圈参数, 数组下标 0 - 白天, 1 - 黑夜, 2 - 普通
        public STU_CFG_VIDEOIN_IRIS_PARAM[] stIrisParamArr = new STU_CFG_VIDEOIN_IRIS_PARAM[NetDefs.MAX_VIDEO_IN_TIME_SECTION_COUNT];
        // 自动曝光参数, 数组下标 0 - 白天, 1 - 黑夜, 2 - 普通
        public STU_CFG_VIDEOIN_AE_SCENE_EXP_PARAM[] stAeSceneExpParamArr = new STU_CFG_VIDEOIN_AE_SCENE_EXP_PARAM[NetDefs.MAX_VIDEO_IN_TIME_SECTION_COUNT];
        // 保留参数
        public byte[] reserved = new byte[1024];

        public STU_CFG_VIDEOIN_EXPOSURE() {
            for (int i = 0; i < stAeParamArr.length; i++) {
                stAeParamArr[i] = new STU_CFG_VIDEOIN_AE_PARAM();
            }

            for (int i = 0; i < stAeWdrParamArr.length; i++) {
                stAeWdrParamArr[i] = new STU_CFG_VIDEOIN_AE_WDR_PARAM();
            }

            for (int i = 0; i < stAeAdvanceParamArr.length; i++) {
                stAeAdvanceParamArr[i] = new STU_CFG_VIDEOIN_AE_ADVANCED_PARAM();
            }

            for (int i = 0; i < stShutterModeParamAr.length; i++) {
                stShutterModeParamAr[i] = new STU_CFG_VIDEOIN_SHUTTER_MODE_PARAM();
            }

            for (int i = 0; i < stIrisParamArr.length; i++) {
                stIrisParamArr[i] = new STU_CFG_VIDEOIN_IRIS_PARAM();
            }

            for (int i = 0; i < stAeSceneExpParamArr.length; i++) {
                stAeSceneExpParamArr[i] = new STU_CFG_VIDEOIN_AE_SCENE_EXP_PARAM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stAeParamArr", "stAeWdrParamArr", "stAeAdvanceParamArr",
                    "stShutterModeParamAr", "stIrisParamArr", "stAeSceneExpParamArr", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_EXPOSURE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_EXPOSURE implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 视频输入白平衡设置
    public static class STU_CFG_VIDEOIN_WHITE_BALANCE_SETTING extends Structure {
        // 白平衡模式, 0: 禁止, 1 : 自动, 2 : 晴天, 3 : 阴天, 4 : 家里, 5 : 办公, 6 : 夜晚, 7 : 自定义, 8 : 高色温区间
        // 9 : 低色温区间, 10 : 自动色温区间, 11 : 自定义色温等级, 12 : 室内, 13 : 室外, 14 : 跟踪, 15 : 手动, 16 : 室外自动
        // 17 : 钠灯自动, 18 : 钠灯, 19 : 自定义单区域白平衡, 20 : 自定义多区域白平衡, 21 : 自然光, 22 : 路灯, 254 : 白平衡调试模式
        public int nAwbMode;
        // 卡警抓怕模式, 0:前端带抓拍模式, 1:前端不带抓拍模式
        public int nWbCtrlMode;

        // 自定义白平衡的预制
        // 红色增益值 0-100 默认50
        public int nRCustom;
        // 蓝色增益值 0-100 默认50
        public int nBCustom;

        // 自定义区域白平衡区域框
        // 区域白平衡实际个数
        public int nRoiRectCount;
        // 区域白平衡, 0 - 8191
        public STU_RECT_L[] stRoiRects = new STU_RECT_L[NetDefs.MAX_VIDEO_IN_WHITE_BALANCE_REGION_COUNT];
        // 权重参数	范围0-100
        public int nRoiRatio;

        // 保留参数
        public byte[] reserved = new byte[64];

        public STU_CFG_VIDEOIN_WHITE_BALANCE_SETTING() {
            for (int i = 0; i < stRoiRects.length; i++) {
                stRoiRects[i] = new STU_RECT_L();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nAwbMode", "nWbCtrlMode", "nRCustom",
                    "nBCustom", "nRoiRectCount", "stRoiRects", "nRoiRatio", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_WHITE_BALANCE_SETTING implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_WHITE_BALANCE_SETTING implements Structure.ByValue {
        }
    }

    // 视频输入白平衡设置参数
    public static class STU_CFG_VIDEOIN_WHITE_BALANCE_PARAM extends Structure {
        // 数组下标 0 - 视频, 1 - 图片, 2 - 抓拍
        public STU_CFG_VIDEOIN_WHITE_BALANCE_SETTING[] stWhiteBalanceArr = new STU_CFG_VIDEOIN_WHITE_BALANCE_SETTING[NetDefs.MAX_VIDEO_IN_SETTING_TYPE_COUNT];

        public STU_CFG_VIDEOIN_WHITE_BALANCE_PARAM() {
            for (int i = 0; i < stWhiteBalanceArr.length; i++) {
                stWhiteBalanceArr[i] = new STU_CFG_VIDEOIN_WHITE_BALANCE_SETTING();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stWhiteBalanceArr"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_WHITE_BALANCE_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_WHITE_BALANCE_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入白平衡
    public static class STU_CFG_VIDEOIN_WHITE_BALANCE extends Structure {
        // 曝光, 数组下标 0 - 白天, 1 - 黑夜, 2 - 普通
        public STU_CFG_VIDEOIN_WHITE_BALANCE_PARAM[] stWhiteBalanceParamArr = new STU_CFG_VIDEOIN_WHITE_BALANCE_PARAM[NetDefs.MAX_VIDEO_IN_TIME_SECTION_COUNT];
        // 保留参数
        public byte[] reserved = new byte[1024];

        public STU_CFG_VIDEOIN_WHITE_BALANCE() {
            for (int i = 0; i < stWhiteBalanceParamArr.length; i++) {
                stWhiteBalanceParamArr[i] = new STU_CFG_VIDEOIN_WHITE_BALANCE_PARAM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stWhiteBalanceParamArr", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_WHITE_BALANCE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_WHITE_BALANCE implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 视频输入聚焦设置(SD)设置参数
    public static class STU_CFG_VIDEOIN_FOCUS_PARAM extends Structure {
        // 聚焦模式,
        // 0-关闭
        // 1 - 辅助聚焦(在手动聚焦的基础，会返回当前聚焦峰值，当峰值达到最大值时，表示聚焦完成，比肉眼确认更精确，但因为需要硬件及软件多一个模块，不是所有设备都支持),
        // 2 - 自动聚焦,
        // 3 - 半自动聚焦(定制功能，先自动聚焦，然后聚焦模块锁定。此时不能自动调焦，需要手动调节),
        // 4 - 手动聚焦(人眼确认完成聚焦)
        public int nFocusMode;
        // 近端聚焦极限建议值,单位毫米.
        // 不是镜头真实的聚焦极限值，而是给聚焦库的一个近端物体建议值，提高聚焦速度, uint:100~200001
        public int nFocusLimit;
        // 聚焦灵敏度, 0-高，1-默认，2-低
        public int nFocusSensitivity;
        // 聚焦极限（近端聚焦的极限物距）选取模式, 1-手动, 0-自动
        public int nFocusLimitMode;
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nFocusMode", "nFocusLimit", "nFocusSensitivity",
                    "nFocusLimitMode", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_FOCUS_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_FOCUS_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入变倍设置(SD)设置参数
    public static class STU_CFG_VIDEOIN_ZOOM_PARAM extends Structure {
        // 变倍速率, 取值范围见能力
        public int nSpeed;
        // 数字变倍，数字变倍应该用电子云台
        public int bDigitalZoom;
        // 当前速率下最大变倍上限
        public int nZoomLimit;

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nSpeed", "bDigitalZoom", "nZoomLimit"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_ZOOM_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_ZOOM_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入变倍聚焦(SD)
    public static class STU_CFG_VIDEOIN_ZOOM_FOCUS extends Structure {
        // 聚焦设置配置实际数量
        public int nFocusCount;
        // 聚焦设置(SD)
        public STU_CFG_VIDEOIN_FOCUS_PARAM[] stFocusParamArr = new STU_CFG_VIDEOIN_FOCUS_PARAM[NetDefs.MAX_VIDEO_IN_FOCUS_COUNT];

        // 变倍设置配置实际数量
        public int nZoomCount;
        // 变倍设置(SD)
        public STU_CFG_VIDEOIN_ZOOM_PARAM[] stZoomParamArr = new STU_CFG_VIDEOIN_ZOOM_PARAM[NetDefs.MAX_VIDEO_IN_ZOOM_COUNT];

        // 保留参数
        public byte[] reserved = new byte[1024];

        public STU_CFG_VIDEOIN_ZOOM_FOCUS() {
            for (int i = 0; i < stFocusParamArr.length; i++) {
                stFocusParamArr[i] = new STU_CFG_VIDEOIN_FOCUS_PARAM();
            }

            for (int i = 0; i < stZoomParamArr.length; i++) {
                stZoomParamArr[i] = new STU_CFG_VIDEOIN_ZOOM_PARAM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nFocusCount", "stFocusParamArr", "nZoomCount",
                    "stZoomParamArr", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_ZOOM_FOCUS implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_ZOOM_FOCUS implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    //视频输入日夜模式设置
    public static class STU_CFG_VIDEOIN_DAY_NIGHT_MODE_SETTING extends Structure {
        // 彩黑模式, 0:彩色模式, 1: 黑白模式, 2 : 自动切换, 3 : 根据光敏电阻切换
        public int nMode;
        // IRCUT类型, 0: ircut正常切换,彩色是日片，黑白是夜片, 1: ircut始终是日片, 日夜模式发生改变
        public int nIRcutType;
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMode", "nIRcutType", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_DAY_NIGHT_MODE_SETTING implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_DAY_NIGHT_MODE_SETTING implements Structure.ByValue {
        }
    }

    // 视频输入日夜模式设置参数
    public static class STU_CFG_VIDEOIN_DAY_NIGHT_MODE_PARAM extends Structure {
        // 数组下标 0 - 视频, 1 - 图片, 2 - 抓拍
        public STU_CFG_VIDEOIN_DAY_NIGHT_MODE_SETTING[] stDayNightModeArr = new STU_CFG_VIDEOIN_DAY_NIGHT_MODE_SETTING[NetDefs.MAX_VIDEO_IN_SETTING_TYPE_COUNT];

        public STU_CFG_VIDEOIN_DAY_NIGHT_MODE_PARAM() {
            for (int i = 0; i < stDayNightModeArr.length; i++) {
                stDayNightModeArr[i] = new STU_CFG_VIDEOIN_DAY_NIGHT_MODE_SETTING();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stDayNightModeArr"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_DAY_NIGHT_MODE_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_DAY_NIGHT_MODE_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入日夜模式
    public static class STU_CFG_VIDEOIN_DAY_NIGHT_MODE extends Structure {
        // 日夜模式, 数组下标 0 - 白天, 1 - 黑夜, 2 - 普通
        public STU_CFG_VIDEOIN_DAY_NIGHT_MODE_PARAM[] stDayNightModeParamArr = new STU_CFG_VIDEOIN_DAY_NIGHT_MODE_PARAM[NetDefs.MAX_VIDEO_IN_TIME_SECTION_COUNT];
        // 保留参数
        public byte[] reserved = new byte[1024];

        public STU_CFG_VIDEOIN_DAY_NIGHT_MODE() {
            for (int i = 0; i < stDayNightModeParamArr.length; i++) {
                stDayNightModeParamArr[i] = new STU_CFG_VIDEOIN_DAY_NIGHT_MODE_PARAM();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stDayNightModeParamArr", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_DAY_NIGHT_MODE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_DAY_NIGHT_MODE implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 视频输入图像调整设置参数
    public static class STU_CFG_VIDEOIN_IMAGE_STAB_PARAM extends Structure {
        // 电子防抖, FALSE-关闭，TRUE-开启
        public int bImageStabilization;
        // 画面冻结，FALSE-不冻结, TRUE-冻结
        public int bImageFreeze;
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMode", "nIRcutType", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_IMAGE_STAB_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_IMAGE_STAB_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入图像翻转设置参数
    public static class STU_CFG_VIDEOIN_ROTATE_PARAM extends Structure {
        // 窗口宽度
        public int nWidth;
        // 窗口高度
        public int nHeight;
        // 窗口x起始坐标
        public int nStartX;
        // 窗口y起始坐标
        public int nStartY;
        // 旋转标记, 0: 不旋转, 1: 顺时针旋转90度, 2 : 逆时针旋转90度
        public int nRotate;
        // 镜像标记, FALSE-不开启，TRUE-开启
        public int bMirror;
        // 翻转标记, FALSE-不开启，TRUE-开启
        public int bFlip;
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nWidth", "nHeight", "nStartX",
                    "nStartY", "nRotate", "bMirror", "bFlip", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_ROTATE_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_ROTATE_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入LDC参数设置参数
    public static class STU_CFG_VIDEOIN_LDC_PARAM extends Structure {
        //  Ldc使能
        public int bLdcEnable;
        // 矫正强度,范围[-100, 100]
        public int nLdcLevel;
        // 远端放大等级[0~100], 0 : 关闭, 1~100为远端放大级别
        public int nFarEndZoom;
        // LDC模式, 0：垂直和水平畸变校正, 1：垂直畸变校正
        public int nMode;
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bLdcEnable", "nLdcLevel", "nFarEndZoom",
                    "nMode", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_LDC_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_LDC_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入视频调整
    public static class STU_CFG_VIDEOIN_VIDEO_ADJUSTMENT extends Structure {
        // 图像调整
        public STU_CFG_VIDEOIN_IMAGE_STAB_PARAM stImageStabParam = new STU_CFG_VIDEOIN_IMAGE_STAB_PARAM();
        // 图像翻转
        public STU_CFG_VIDEOIN_ROTATE_PARAM stRotateParam = new STU_CFG_VIDEOIN_ROTATE_PARAM();
        // LDC参数
        public STU_CFG_VIDEOIN_LDC_PARAM stLDCParam = new STU_CFG_VIDEOIN_LDC_PARAM();
        // 保留参数
        public byte[] reserved = new byte[1024];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stImageStabParam", "stRotateParam", "stLDCParam", "reserved"});
        }

        public static class ByReference extends STU_CFG_VIDEOIN_VIDEO_ADJUSTMENT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_VIDEOIN_VIDEO_ADJUSTMENT implements Structure.ByValue {
        }
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // 货格配置
    public static class STU_GOODS_CONTAINER_CFG extends Structure {
        // 货格位置信息
        public STU_GOODS_CONTAINER_POSITION stPosition = new STU_GOODS_CONTAINER_POSITION();
        // 保留参数
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stPosition", "reserved"});
        }

        public static class ByReference extends STU_GOODS_CONTAINER_CFG implements Structure.ByReference {
        }

        public static class ByValue extends STU_GOODS_CONTAINER_CFG implements Structure.ByValue {
        }
    }

    // 货格配置行信息
    public static class STU_GOODS_CONTAINER_CFG_ROW extends Structure {
        // 每行货格实际个数
        public int nCloumnCount;
        // 货柜某行某列的货格信息
        public STU_GOODS_CONTAINER_CFG[] stContainerCfgs = new STU_GOODS_CONTAINER_CFG[NetDefs.MAX_GOODS_CONTAINER_COLUMN_COUNT];
        // 保留参数
        public byte[] reserved = new byte[512];

        public STU_GOODS_CONTAINER_CFG_ROW() {
            for (int i = 0; i < stContainerCfgs.length; i++) {
                stContainerCfgs[i] = new STU_GOODS_CONTAINER_CFG();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nCloumnCount", "stContainerCfgs", "reserved"});
        }

        public static class ByReference extends STU_GOODS_CONTAINER_CFG_ROW implements Structure.ByReference {
        }

        public static class ByValue extends STU_GOODS_CONTAINER_CFG_ROW implements Structure.ByValue {
        }
    }

    // 货柜配置
    public static class STU_GOODS_SHELVE_CFG extends Structure {
        // 货柜编号，默认值填充设备序列号+数组序号
        public byte[] szShelveNo = new byte[64];

        // 货柜起始行
        public int nStartRow;
        // 货柜起始列
        public int nStartColumn;

        // 货格配置实际行数，最大MAX_GOODS_CONTAINER_COUNT个
        public int nRowCount;
        // 每行货格配置信息
        public STU_GOODS_CONTAINER_CFG_ROW[] stContainerRows = new STU_GOODS_CONTAINER_CFG_ROW[NetDefs.MAX_GOODS_CONTAINER_ROW_COUNT];

        // 保留参数
        public byte[] reserved = new byte[256];

        public STU_GOODS_SHELVE_CFG() {
            for (int i = 0; i < stContainerRows.length; i++) {
                stContainerRows[i] = new STU_GOODS_CONTAINER_CFG_ROW();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szShelveNo", "nStartRow", "nStartColumn",
                    "nRowCount", "stContainerRows", "reserved"});
        }

        public static class ByReference extends STU_GOODS_SHELVE_CFG implements Structure.ByReference {
        }

        public static class ByValue extends STU_GOODS_SHELVE_CFG implements Structure.ByValue {
        }
    }

    // 新零售货柜配置
    public static class STU_CFG_GOODS_SHELVES extends Structure {
        // 时间段
        public STU_WEEK_TIME_SECTION_SCHEDULE stTimeSchedule = new STU_WEEK_TIME_SECTION_SCHEDULE();

        // 货柜数量，最大MAX_GOODS_SHELVE_COUNT个
        public int nShelveCount;
        // 货柜配置
        public STU_GOODS_SHELVE_CFG[] stShelveCfgs = new STU_GOODS_SHELVE_CFG[NetDefs.MAX_GOODS_SHELVE_COUNT];

        // 保留参数
        public byte[] reserved = new byte[256];

        public STU_CFG_GOODS_SHELVES() {
            for (int i = 0; i < stShelveCfgs.length; i++) {
                stShelveCfgs[i] = new STU_GOODS_SHELVE_CFG();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stTimeSchedule", "nShelveCount", "stShelveCfgs", "reserved"});
        }

        public static class ByReference extends STU_CFG_GOODS_SHELVES implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_GOODS_SHELVES implements Structure.ByValue {
        }
    }

    //////////////////////////////////////////////////////////////////////////////////////
    // 非法动火配置
    public static class STU_CFG_ILLEGAL_FILE_OPERATION extends Structure {
        // 动火报警使能, 禁用 - FLASE, 使能 - TRUE
        public int bEnable;

        // 动火检测灵敏度，灵敏度越高，动火检测越灵敏。范围：[0,100]
        public int nSensitivity;

        // 动火检测温度阈值。范围：[0,500]
        public int nThreshold;

        // 保留字节
        public byte[] reserved = new byte[128];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "nSensitivity", "nThreshold", "reserved"});
        }

        public static class ByReference extends STU_CFG_ILLEGAL_FILE_OPERATION implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_ILLEGAL_FILE_OPERATION implements Structure.ByValue {
        }
    }

    // 抽烟报警配置
    public static class STU_CFG_SMOKE_ALARM extends Structure {
        // 抽烟报警使能, 禁用 - FLASE, 使能 - TRUE
        public int bEnable;

        // 保留字节
        public byte[] reserved = new byte[128];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "reserved"});
        }

        public static class ByReference extends STU_CFG_SMOKE_ALARM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_SMOKE_ALARM implements Structure.ByValue {
        }
    }

    // 烟雾报警配置
    public static class STU_CFG_SMOG_ALARM extends Structure {
        // 烟雾报警使能, 禁用 - FLASE, 使能 - TRUE
        public int bEnable;

        // 保留字节
        public byte[] reserved = new byte[128];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "reserved"});
        }

        public static class ByReference extends STU_CFG_SMOG_ALARM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_SMOG_ALARM implements Structure.ByValue {
        }
    }

    // 火警报警配置
    public static class STU_CFG_FIRE_ALARM extends Structure {
        // 火警报警使能, 禁用 - FLASE, 使能 - TRUE
        public int bEnable;

        // 保留字节
        public byte[] reserved = new byte[128];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "reserved"});
        }

        public static class ByReference extends STU_CFG_FIRE_ALARM implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_FIRE_ALARM implements Structure.ByValue {
        }
    }

    // 操作人数不合规报警配置
    public static class STU_CFG_OPERATOR_NONCOMPLIANCE extends Structure {
        // 操作人数不合规报警使能, 禁用 - FLASE, 使能 - TRUE
        public int bEnable;

        // 保留字节
        public byte[] reserved = new byte[128];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "reserved"});
        }

        public static class ByReference extends STU_CFG_OPERATOR_NONCOMPLIANCE implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_OPERATOR_NONCOMPLIANCE implements Structure.ByValue {
        }
    }

    // 动火报警检测配置
    public static class STU_CFG_FIRE_ALARM_DETECT extends Structure {
        // 非法动火配置
        public STU_CFG_ILLEGAL_FILE_OPERATION stIllegalFileOption = new STU_CFG_ILLEGAL_FILE_OPERATION();

        // 抽烟报警配置
        public STU_CFG_SMOKE_ALARM stSmokeAlarm = new STU_CFG_SMOKE_ALARM();

        // 烟雾报警配置
        public STU_CFG_SMOG_ALARM stSmogAlarm = new STU_CFG_SMOG_ALARM();

        // 火警报警配置
        public STU_CFG_FIRE_ALARM stFireAlarm = new STU_CFG_FIRE_ALARM();

        // 操作人数不合规报警配置
        public STU_CFG_OPERATOR_NONCOMPLIANCE stOperatorNoncompliance = new STU_CFG_OPERATOR_NONCOMPLIANCE();

        // 保留字节
        public byte[] reserved = new byte[1024];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stIllegalFileOption", "stSmokeAlarm", "stSmogAlarm", "stFireAlarm", "stOperatorNoncompliance", "reserved"});
        }

        public static class ByReference extends STU_CFG_FIRE_ALARM_DETECT implements Structure.ByReference {
        }

        public static class ByValue extends STU_CFG_FIRE_ALARM_DETECT implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    //报警信息结构体

    //系统工作状态信息
    public static class STU_ALARM_EVENT_SYSTEM_WORKING_STATE extends Structure {
        public byte[] szEvent = new byte[64];            // 事件名称
        public int emState;                        // 系统状态,EM_SYSTEM_WORKING_STATE
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[256];        // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szEvent", "emState", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_SYSTEM_WORKING_STATE implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_SYSTEM_WORKING_STATE implements Structure.ByValue {
        }
    }

    // 系统升级状态信息
    public static class STU_ALARM_EVENT_SYSTEM_UPGRADE extends Structure {
        public byte[] szEvent = new byte[64];            // 事件名称
        public int emState;                        // 升级状态,EM_SYS_UPGRADE_STATUS
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[256];        // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szEvent", "emState", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_SYSTEM_UPGRADE implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_SYSTEM_UPGRADE implements Structure.ByValue {
        }
    }

    // 系统恢复默认信息
    public static class STU_ALARM_EVENT_SYSTEM_RESET extends Structure {
        public byte[] szEvent = new byte[64];            // 事件名称
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[256];        // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szEvent", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_SYSTEM_RESET implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_SYSTEM_RESET implements Structure.ByValue {
        }
    }

    // 本地外部报警（开关量输入触发报警）信息
    public static class STU_ALARM_EVENT_ED_SWITCH_IN extends Structure {
        public int nChannel;                        // 外部报警输入通道号
        public byte[] szEvent = new byte[64];            // 事件名称
        public int bStart;                            // FALSE-结束报警；TRUE-开始报警
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[256];        // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "bStart", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_ED_SWITCH_IN implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_ED_SWITCH_IN implements Structure.ByValue {
        }
    }

    // 视频移动侦测报警信息
    public static class STU_ALARM_EVENT_VIDEO_MOVING_DETECT extends Structure {
        public int nChannel;                        // 视频通道号
        public byte[] szEvent = new byte[64];            // 事件名称
        public int bStart;                            // FALSE-结束；TRUE-开始
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[512];        // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "bStart", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_VIDEO_MOVING_DETECT implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_VIDEO_MOVING_DETECT implements Structure.ByValue {
        }
    }

    // 视频遮挡报警信息
    public static class STU_ALARM_EVENT_VIDEO_SHELTER_DETECT extends Structure {
        public int nChannel;                    // 视频通道号
        public byte[] szEvent = new byte[64];        // 事件名称
        public int bStart;                        // FALSE-结束；TRUE-开始
        public STU_TIME_EX stuTime;                    // 事件发生时间
        public byte[] reserved = new byte[512];    // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "bStart", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_VIDEO_SHELTER_DETECT implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_VIDEO_SHELTER_DETECT implements Structure.ByValue {
        }
    }

    // 网络中断报警信息
    public static class STU_ALARM_EVENT_NET_ABORT extends Structure {
        public byte[] szEvent = new byte[64];            // 事件名称
        public int bStart;                            // FALSE-结束；TRUE-开始
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[512];        // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szEvent", "bStart", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_NET_ABORT implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_NET_ABORT implements Structure.ByValue {
        }
    }

    // IP 冲突报警信息
    public static class STU_ALARM_EVENT_NET_IP_CONFLICT extends Structure {
        public byte[] szEvent = new byte[64];            // 事件名称
        public int bStart;                            // FALSE-结束；TRUE-开始
        public byte[] szAdapter = new byte[32];        // 网络适配器名称
        public byte[] szIP = new byte[64];            // 冲突的 IP 地址
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[512];        // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szEvent", "bStart", "szAdapter", "szIP", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_NET_IP_CONFLICT implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_NET_IP_CONFLICT implements Structure.ByValue {
        }
    }

    // MAC 冲突报警信息
    public static class STU_ALARM_EVENT_NET_MAC_CONFLICT extends Structure {
        public byte[] szEvent = new byte[64];            // 事件名称
        public int bStart;                            // FALSE-结束；TRUE-开始
        public byte[] szAdapter = new byte[32];        // 网络适配器名称
        public byte[] szMac = new byte[64];            // 冲突的 MAC 地址
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[512];        // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szEvent", "bStart", "szAdapter", "szMac", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_NET_MAC_CONFLICT implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_NET_MAC_CONFLICT implements Structure.ByValue {
        }
    }

    // 网络配置修改报警信息
    public static class STU_ALARM_EVENT_NET_CFG_CHANGE extends Structure {
        public byte[] szEvent = new byte[64];            // 事件名称
        public byte[] szAdapter = new byte[32];        // 网络适配器名称
        public byte[] szItem = new byte[64];            // 变更类型名称
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[512];        // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szEvent", "szAdapter", "szItem", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_NET_CFG_CHANGE implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_NET_CFG_CHANGE implements Structure.ByValue {
        }
    }

    // 网络切换告警
    public static class STU_ALARM_EVENT_NET_SWITCH_OVER extends Structure {
        public byte[] szEvent = new byte[64];                        // 事件名称
        public byte[] szCurrentNetAdapter = new byte[128];        // 网络适配器名称
        public byte[] szLastNetAdapter = new byte[128];            // 变更类型名称
        public STU_TIME_EX stuTime;                                    // 事件发生时间
        public byte[] reserved = new byte[512];                    // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szEvent", "szCurrentNetAdapter", "szLastNetAdapter", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_NET_SWITCH_OVER implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_NET_SWITCH_OVER implements Structure.ByValue {
        }
    }

    // 存储热插拔报警信息
    public static class STU_ALARM_EVENT_STORAGE_HOTPLUG extends Structure {
        public byte[] szEvent = new byte[64];            // 事件名称
        public int emHotPlugType;                    // 热插拔动作,EM_STORAGE_HOTPLUG_TYPE
        public int nPhysicNo;                        // 物理编号
        public int nLogicNo;                        // 逻辑编号
        public byte[] szDiskName = new byte[64];        // 磁盘名称
        public byte[] szMedia = new byte[32];            // 介质类型
        public byte[] szBus = new byte[32];            // 总线类型
        public double dCapacity;                        // 容量，单位：Byte
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[256];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szEvent", "emHotPlugType", "nPhysicNo", "nLogicNo",
                    "szDiskName", "szMedia", "szBus", "dCapacity", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_STORAGE_HOTPLUG implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_STORAGE_HOTPLUG implements Structure.ByValue {
        }
    }

    // 挂载分区报警信息
    public static class STU_ALARM_EVENT_STORAGE_MOUNT extends Structure {
        public byte[] szEvent = new byte[64];            // 事件名称
        public int bStart;                            // FALSE - 结束挂载； TRUE - 开始挂载
        public int bResult;                        // FLASE - 挂载失败； TRUE - 挂载成功
        // 当且仅当 bStart = FALSE 时有效
        public byte[] szDiskName = new byte[64];        // 磁盘名称
        public byte[] szPartition = new byte[64];        // 分区名称
        public byte[] szMedia = new byte[32];            // 介质类型
        public byte[] szBus = new byte[32];            // 总线类型
        public byte[] szMountOn = new byte[64];        // 挂载点
        public byte[] szFileSystem = new byte[64];    // 挂载的文件系统
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[256];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szEvent", "bStart", "bResult", "szDiskName",
                    "szPartition", "szMedia", "szBus", "szMountOn", "szFileSystem", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_STORAGE_MOUNT implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_STORAGE_MOUNT implements Structure.ByValue {
        }
    }

    // 卸载分区报警信息
    public static class STU_ALARM_EVENT_STORAGE_UMOUNT extends Structure {
        public byte[] szEvent = new byte[64];            // 事件名称
        public int bStart;                            // FALSE - 结束卸载； TRUE - 开始卸载
        public int bResult;                        // FLASE - 卸载失败； TRUE - 卸载成功
        // 当且仅当 bStart = FALSE 时有效
        public byte[] szDiskName = new byte[64];        // 磁盘名称
        public byte[] szPartition = new byte[64];        // 分区名称
        public byte[] szMedia = new byte[32];            // 介质类型
        public byte[] szBus = new byte[32];            // 总线类型
        public byte[] szMountOn = new byte[64];        // 挂载点
        public byte[] szFileSystem = new byte[64];    // 挂载的文件系统
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[256];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szEvent", "bStart", "bResult", "szDiskName",
                    "szPartition", "szMedia", "szBus", "szMountOn", "szFileSystem", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_STORAGE_UMOUNT implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_STORAGE_UMOUNT implements Structure.ByValue {
        }
    }

    // 格式化分区报警信息
    public static class STU_ALARM_EVENT_STORAGE_FORMAT extends Structure {
        public byte[] szEvent = new byte[64];                    // 事件名称
        public int bStart;                                    // FALSE - 结束格式化； TRUE - 开始格式化
        public int bResult;                                // FLASE - 格式化失败； TRUE - 格式化成功
        // 当且仅当 bStart = FALSE 时有效
        public byte[] szDiskName = new byte[64];                // 磁盘名称
        public byte[] szPartition = new byte[64];                // 分区名称
        public byte[] szMountOn = new byte[64];                // 挂载点
        public byte[] szFileSystem = new byte[64];            // 挂载的文件系统
        public STU_TIME_EX stuTime;                                // 事件发生时间
        public byte[] reserved = new byte[256];                // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szEvent", "bStart", "bResult", "szDiskName",
                    "szPartition", "szMountOn", "szFileSystem", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_STORAGE_FORMAT implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_STORAGE_FORMAT implements Structure.ByValue {
        }
    }

    // 存储异常报警信息
    public static class STU_ALARM_EVENT_STORAGE_ABNORMAL extends Structure {
        public byte[] szEvent = new byte[64];            // 事件名称
        public int nAction;                        // 动作类型 0-停止；1-开始；2-进行中
        public int emAbnormalType;                    // 异常类型,EM_STORAGE_ABNORMAL_TYPE
        public byte[] szDiskName = new byte[64];        // 磁盘名称
        public byte[] szWorkDir = new byte[64];        // 工作目录
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[256];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szEvent", "nAction", "emAbnormalType",
                    "szDiskName", "szWorkDir", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_STORAGE_ABNORMAL implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_STORAGE_ABNORMAL implements Structure.ByValue {
        }
    }

    // 存储空间低报警信息
    public static class STU_ALARM_EVENT_STORAGE_LOW_SPACE extends Structure {
        public byte[] szEvent = new byte[64];            // 事件名称
        public byte[] szDiskName = new byte[64];        // 磁盘名称
        public byte[] szWorkDir = new byte[64];        // 工作目录
        public double dTotalSpace;                    // 当前的总容量，单位：Byte
        public double dFreeSpace;                        // 当前剩余容量，单位：Byte
        public double dSafeSpace;                        // 安全空间容量，单位：Byte
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[256];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szEvent", "szDiskName", "szWorkDir",
                    "dTotalSpace", "dFreeSpace", "dSafeSpace", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_STORAGE_LOW_SPACE implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_STORAGE_LOW_SPACE implements Structure.ByValue {
        }
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //门禁访客信息
    public static class STU_DOOR_CFG_GUEST_INFO extends Structure {
        public int bValid;                                // 是否有效，0-无效，1-有效
        public byte[] szHost = new byte[32];                // 被访人员
        public byte[] szCorp = new byte[256];                // 工作单位
        public byte[] szPhone = new byte[64];                // 电话
        public byte[] szPlateNumber = new byte[32];        // 车牌号码
        public byte[] szCause = new byte[256];            // 来访事由
        public short nPartnerNum;                        // 随行人数
        public byte[] reserved1 = new byte[2];            // 字节对齐
        public STU_TIME_EX stuAccessStartTime;                    // 访问开始时间
        public STU_TIME_EX stuAccessEndTime;                    // 访问结束时间
        public byte[] reserved2 = new byte[512];            // 预留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bValid", "szHost", "szCorp",
                    "szPhone", "szPlateNumber", "szCause", "nPartnerNum", "reserved1",
                    "stuAccessStartTime", "stuAccessEndTime", "reserved2"});
        }

        public static class ByReference extends STU_DOOR_CFG_GUEST_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GUEST_INFO implements Structure.ByValue {
        }
    }

    // 门禁关联人员信息
    public static class STU_DOOR_PERSON_INFO extends Structure {
        public byte[] szName = new byte[128];                // 人员姓名
        public byte[] szCode = new byte[128];                // 人员编号，可作为唯一标识
        public byte[] szGroupName = new byte[128];        // 所属组名称
        public int emType;                                // 人员类型,EM_DOOR_PERSON_TYPE
        public int emSex;                                // 性别,EM_SEX_TYPE
        public STU_TIME stuBirthday;                        // 生日
        public byte[] szCertificateType = new byte[64];    // 证件类型，空则默认为 IC
        public byte[] szCountry = new byte[64];            // 国别，选填
        public byte[] szProvince = new byte[64];            // 省份，选填
        public byte[] szCity = new byte[128];                // 所在城市，选填
        public STU_DOOR_CFG_GUEST_INFO stuGuestInfo;                        // 访客信息
        public byte[] szID = new byte[128];                // 身份证号，选填 默认为空
        public byte[] szCustomID = new byte[128];            // 用户自定义编号，选填 默认为空
        public int bDisable;                            // 是否禁用人员，0 - 不禁用，1 - 禁用，不设置则默认启用

        public byte[] szCustom = new byte[128];            // 自定义描述字段，字符串，配合人脸识别能力（STU_CAPS_FACE_RECOGNIZE）中的uCustomDescriptionFunc字段使用；
        // uCustomDescriptionFunc为0时，为NULL
        // uCustomDescriptionFunc为1时表示梯控：
        // "0" - 所有楼层；
        // "1,2,3" - 非全楼层时，指定具体楼层号，中间用","分割，可带空格

        public byte[] reserved = new byte[636];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szName", "szCode", "szGroupName",
                    "emType", "emSex", "stuBirthday", "szCertificateType", "szCountry",
                    "szProvince", "szCity", "stuGuestInfo", "szID", "szCustomID", "bDisable",
                    "szCustom", "reserved"});
        }

        public static class ByReference extends STU_DOOR_PERSON_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_PERSON_INFO implements Structure.ByValue {
        }
    }

    // 门禁防拆报警信息
    public static class STU_ALARM_EVENT_DOOR_TAMPER extends Structure {
        public int nChannel;                        // 门禁通道号
        public byte[] szEvent = new byte[64];            // 事件名称
        public int bStart;                            // FALSE - 停止；TRUE - 开始
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[512];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "bStart", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_DOOR_TAMPER implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_DOOR_TAMPER implements Structure.ByValue {
        }
    }

    // 门禁黑名单检测报警信息
    public static class STU_ALARM_EVENT_DOOR_BLACK_LIST extends Structure {
        public int nChannel;                        // 门禁通道号
        public byte[] szEvent = new byte[64];            // 事件名称
        public int emAccessType;                    // 访问方式,EM_DOOR_ACCESS_TYPE
        public STU_DOOR_PERSON_INFO stuPerson;                        // 人员信息
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[512];        // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "emAccessType",
                    "stuPerson", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_DOOR_BLACK_LIST implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_DOOR_BLACK_LIST implements Structure.ByValue {
        }
    }

    // 门禁胁迫报警信息
    public static class STU_ALARM_EVENT_DOOR_COERCE extends Structure {
        public int nChannel;                        // 门禁通道号
        public byte[] szEvent = new byte[64];            // 事件名称
        public byte[] szCardNo = new byte[128];        // 卡号
        public STU_DOOR_PERSON_INFO stuPerson;                        // 人员信息
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[512];        // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "szCardNo",
                    "stuPerson", "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_DOOR_COERCE implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_DOOR_COERCE implements Structure.ByValue {
        }
    }

    // 门禁门超时未关闭报警
    public static class STU_ALARM_EVENT_DOOR_OPEN_HOLD extends Structure {
        public int nChannel;                        // 门禁通道号
        public byte[] szEvent = new byte[64];            // 事件名称
        public int bStart;                            // FALSE - 停止；TRUE - 开始
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[512];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "bStart",
                    "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_DOOR_OPEN_HOLD implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_DOOR_OPEN_HOLD implements Structure.ByValue {
        }
    }

    // 门禁刷卡事件
    public static class STU_ALARM_EVENT_DOOR_CARD_DETECT extends Structure {
        public int nChannel;                        // 门禁通道号
        public byte[] szEvent = new byte[64];            // 事件名称
        public byte[] szCardType = new byte[64];        // IC: 普通卡，ID：身份证
        public byte[] szCardNo = new byte[128];        // 卡号
        public STU_DOOR_CARD_DETECT_ID_CARD_INFO stIDInfo;                        // 身份证信息
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] szCode = new byte[128];                    // 此卡绑定的人员ID
        public int nAccessRecord;                    // 通行结果
        // 0 : 未知错误
        // 1 : 通行成功
        // 2 : 访客时段不符
        // 3 : 未配置权限组
        // 4 : 未配置时段
        // 5 : 时段检验失败
        // 8 : 通行操作超时
        // 9 : 黑名单
        // 10 : 无效卡
        // 11 : 通行时段不符
        // 12 : 通行方式不符
        // 14 : 门处常开状态
        // 15 : 门处常闭状态
        // 17 : 通行成功（未佩戴安全帽）
        // 18 : 通行失败（未佩戴安全帽）
        // 19 : 无匹配卡
        public byte[] reserved = new byte[380];        // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "szCardType",
                    "szCardNo", "stIDInfo", "stuTime", "szCode", "nAccessRecord", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_DOOR_CARD_DETECT implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_DOOR_CARD_DETECT implements Structure.ByValue {
        }
    }

    // 门禁强制开门报警事件
    public static class STU_ALARM_EVENT_DOOR_ILLEGAL_OPEN extends Structure {
        public int nChannel;                        // 门禁通道号
        public byte[] szEvent = new byte[64];            // 事件名称
        public int bStart;                            // FALSE - 停止；TRUE - 开始
        public STU_TIME_EX stuTime;                        // 事件发生时间
        public byte[] reserved = new byte[512];        // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "bStart",
                    "stuTime", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_DOOR_ILLEGAL_OPEN implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_DOOR_ILLEGAL_OPEN implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 新零售报警事件

    // 货柜内所有货品信息上报
    public static class STU_ALARM_EVENT_GOODS_ALL_NOTIFY extends Structure {
        // 门禁通道号
        public int nChannel;
        // 事件名称
        public byte[] szEvent = new byte[64];

        // 货柜号，单摄像机监控多个货柜时按货柜编号分别上报
        public byte[] szShelveNo = new byte[64];
        // 有货品的货格数量，最大 MAX_GOODS_CONTAINER_COUNT 个
        public int nContainerCount;
        // 货格及内部商品信息数组
        public STU_GOODS_CONTAINER_INFO[] stContainers = new STU_GOODS_CONTAINER_INFO[NetDefs.MAX_GOODS_CONTAINER_COUNT];

        // 事件发生时间
        public STU_TIME_EX stuTime;
        // 时区
        public byte[] szTimeZone = new byte[16];

        // 预留参数
        public byte[] reserved = new byte[512];

        public STU_ALARM_EVENT_GOODS_ALL_NOTIFY() {
            for (int i = 0; i < stContainers.length; i++) {
                stContainers[i] = new STU_GOODS_CONTAINER_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "szShelveNo",
                    "nContainerCount", "stContainers", "stuTime", "szTimeZone", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_GOODS_ALL_NOTIFY implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_GOODS_ALL_NOTIFY implements Structure.ByValue {
        }
    }

    // 货格内商品出现替换时上报信息
    public static class STU_ALARM_EVENT_GOODS_REPLACEMENT extends Structure {
        // 门禁通道号
        public int nChannel;
        // 事件名称
        public byte[] szEvent = new byte[64];

        // 货柜号，单摄像机监控多个货柜时按货柜编号分别上报
        public byte[] szShelveNo = new byte[64];
        // 货格替换数量，最大 MAX_GOODS_CONTAINER_COUNT 个
        public int nReplaceCount;
        // 货格及内部商品替换信息数组
        public STU_GOODS_CONTAINER_REPLACEMENT_INFO[] stContainers = new STU_GOODS_CONTAINER_REPLACEMENT_INFO[NetDefs.MAX_GOODS_CONTAINER_COUNT];

        // 事件发生时间
        public STU_TIME_EX stuTime;
        // 时区
        public byte[] szTimeZone = new byte[16];

        // 预留参数
        public byte[] reserved = new byte[512];

        public STU_ALARM_EVENT_GOODS_REPLACEMENT() {
            for (int i = 0; i < stContainers.length; i++) {
                stContainers[i] = new STU_GOODS_CONTAINER_REPLACEMENT_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "szShelveNo",
                    "nReplaceCount", "stContainers", "stuTime", "szTimeZone", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_GOODS_REPLACEMENT implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_GOODS_REPLACEMENT implements Structure.ByValue {
        }
    }

    // 货格内商品取走时上报信息
    public static class STU_ALARM_EVENT_GOODS_TAKEAWAY extends Structure {
        // 门禁通道号
        public int nChannel;
        // 事件名称
        public byte[] szEvent = new byte[64];

        // 货柜号，单摄像机监控多个货柜时按货柜编号分别上报
        public byte[] szShelveNo = new byte[64];
        // 货格数量，最大 MAX_GOODS_CONTAINER_COUNT 个
        public int nContainerCount;
        // 货格及取走货品信息数组
        public STU_GOODS_CONTAINER_INFO[] stContainers = new STU_GOODS_CONTAINER_INFO[NetDefs.MAX_GOODS_CONTAINER_COUNT];

        // 事件发生时间
        public STU_TIME_EX stuTime;
        // 时区
        public byte[] szTimeZone = new byte[16];

        // 预留参数
        public byte[] reserved = new byte[512];

        public STU_ALARM_EVENT_GOODS_TAKEAWAY() {
            for (int i = 0; i < stContainers.length; i++) {
                stContainers[i] = new STU_GOODS_CONTAINER_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "szShelveNo",
                    "nContainerCount", "stContainers", "stuTime", "szTimeZone", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_GOODS_TAKEAWAY implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_GOODS_TAKEAWAY implements Structure.ByValue {
        }
    }

    // 货格内新商品实物上架时上报信息
    public static class STU_ALARM_EVENT_GOODS_STACKING extends Structure {
        // 门禁通道号
        public int nChannel;
        // 事件名称
        public byte[] szEvent = new byte[64];

        // 货柜号，单摄像机监控多个货柜时按货柜编号分别上报
        public byte[] szShelveNo = new byte[64];
        // 货格数量，最大 MAX_GOODS_CONTAINER_COUNT 个
        public int nContainerCount;
        // 货格及新上架货品信息数组
        public STU_GOODS_CONTAINER_INFO[] stContainers = new STU_GOODS_CONTAINER_INFO[NetDefs.MAX_GOODS_CONTAINER_COUNT];

        // 事件发生时间
        public STU_TIME_EX stuTime;
        // 时区
        public byte[] szTimeZone = new byte[16];

        // 预留参数
        public byte[] reserved = new byte[512];

        public STU_ALARM_EVENT_GOODS_STACKING() {
            for (int i = 0; i < stContainers.length; i++) {
                stContainers[i] = new STU_GOODS_CONTAINER_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "szShelveNo",
                    "nContainerCount", "stContainers", "stuTime", "szTimeZone", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_GOODS_STACKING implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_GOODS_STACKING implements Structure.ByValue {
        }
    }

    // 货柜无货品时上报信息
    public static class STU_ALARM_EVENT_GOODS_EMPTY extends Structure {
        // 门禁通道号
        public int nChannel;
        // 事件名称
        public byte[] szEvent = new byte[64];
        // FALSE - 停止；TRUE - 开始
        public int bStart;

        // 货柜号，单摄像机监控多个货柜时按货柜编号分别上报
        public byte[] szShelveNo = new byte[64];

        // 事件发生时间
        public STU_TIME_EX stuTime;
        // 时区
        public byte[] szTimeZone = new byte[16];

        // 预留参数
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "bStart",
                    "szShelveNo", "stuTime", "szTimeZone", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_GOODS_EMPTY implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_GOODS_EMPTY implements Structure.ByValue {
        }
    }

    // 货品未正确完整摆放在货格内时上报信息
    public static class STU_ALARM_EVENT_GOODS_OUT_OF_REGION extends Structure {
        // 门禁通道号
        public int nChannel;
        // 事件名称
        public byte[] szEvent = new byte[64];
        // FALSE - 停止；TRUE - 开始
        public int bStart;

        // 货柜号，单摄像机监控多个货柜时按货柜编号分别上报
        public byte[] szShelveNo = new byte[64];
        // 未正确摆放在货格内的货品数量，最大 MAX_GOODS_CONTAINER_COUNT * MAX_GOODS_IN_CONTAINER_COUNT 个
        public int nGoodsOutCount;
        // 货格内商品信息数组
        public STU_GOODS_OUT_OF_REGION_INFO[] stGoodsOutOfRegionInfos = new STU_GOODS_OUT_OF_REGION_INFO[NetDefs.MAX_GOODS_CONTAINER_COUNT * NetDefs.MAX_GOODS_IN_CONTAINER_COUNT];

        // 事件发生时间
        public STU_TIME_EX stuTime;
        // 时区
        public byte[] szTimeZone = new byte[16];

        // 预留参数
        public byte[] reserved = new byte[512];

        public STU_ALARM_EVENT_GOODS_OUT_OF_REGION() {
            for (int i = 0; i < stGoodsOutOfRegionInfos.length; i++) {
                stGoodsOutOfRegionInfos[i] = new STU_GOODS_OUT_OF_REGION_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "bStart",
                    "szShelveNo", "nGoodsOutCount", "stGoodsOutOfRegionInfos",
                    "stuTime", "szTimeZone", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_GOODS_OUT_OF_REGION implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_GOODS_OUT_OF_REGION implements Structure.ByValue {
        }
    }

    // 同一货格内商品不一致时上报信息
    public static class STU_ALARM_EVENT_GOODS_DIFFERENT extends Structure {
        // 门禁通道号
        public int nChannel;
        // 事件名称
        public byte[] szEvent = new byte[64];
        // FALSE - 停止；TRUE - 开始
        public int bStart;

        // 货柜号，单摄像机监控多个货柜时按货柜编号分别上报
        public byte[] szShelveNo = new byte[64];
        // 货品不一致的货格数量，最大 MAX_GOODS_CONTAINER_COUNT 个
        public int nContainerCount;
        // 货品不一致的货格及货品信息数组
        public STU_GOODS_CONTAINER_INFO[] stContainers = new STU_GOODS_CONTAINER_INFO[NetDefs.MAX_GOODS_CONTAINER_COUNT];

        // 事件发生时间
        public STU_TIME_EX stuTime;
        // 时区
        public byte[] szTimeZone = new byte[16];

        // 预留参数
        public byte[] reserved = new byte[512];

        public STU_ALARM_EVENT_GOODS_DIFFERENT() {
            for (int i = 0; i < stContainers.length; i++) {
                stContainers[i] = new STU_GOODS_CONTAINER_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "bStart",
                    "szShelveNo", "nContainerCount", "stContainers", "stuTime",
                    "szTimeZone", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_GOODS_DIFFERENT implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_GOODS_DIFFERENT implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    //拨号事件
    public static class STU_ALARM_EVENT_CALL_NUMBER extends Structure {
        // 门禁通道号
        public int nChannel;
        // 事件名称
        public byte[] szEvent = new byte[64];

        // 呼叫的房间号/手机号
        public byte[] szCallNo = new byte[64];
        // 呼叫状态，1 - 开始，2 - 停止呼叫
        public int nCallStatus;

        // 事件发生时间
        public STU_TIME_EX stuTime;
        // 时区
        public byte[] szTimeZone = new byte[16];

        // 预留参数
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "szCallNo",
                    "nCallStatus", "stuTime", "szTimeZone", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_CALL_NUMBER implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_CALL_NUMBER implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 烟雾报警
    public static class STU_ALARM_EVENT_FIRE_SMOKE_ALARM extends Structure {
        // 门禁通道号
        public int nChannel;

        // 事件名称
        public byte[] szEvent = new byte[64];

        // 事件发生时间
        public STU_TIME_EX stuTime;

        // 时区
        public byte[] szTimeZone = new byte[16];

        // 预留参数
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "stuTime", "szTimeZone", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_FIRE_SMOKE_ALARM implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_FIRE_SMOKE_ALARM implements Structure.ByValue {
        }
    }

    // 非法动火
    public static class STU_ALARM_EVENT_FIRE_ILLEGAL_FIRE_OPERATION extends Structure {
        // 门禁通道号
        public int nChannel;

        // 事件名称
        public byte[] szEvent = new byte[64];

        // 事件发生时间
        public STU_TIME_EX stuTime;

        // 时区
        public byte[] szTimeZone = new byte[16];

        // 预留参数
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "stuTime", "szTimeZone", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_FIRE_ILLEGAL_FIRE_OPERATION implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_FIRE_ILLEGAL_FIRE_OPERATION implements Structure.ByValue {
        }
    }

    // 火警
    public static class STU_ALARM_EVENT_FIRE_ALARM extends Structure {
        // 门禁通道号
        public int nChannel;

        // 事件名称
        public byte[] szEvent = new byte[64];

        // 事件发生时间
        public STU_TIME_EX stuTime;

        // 时区
        public byte[] szTimeZone = new byte[16];

        // 预留参数
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "stuTime", "szTimeZone", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_FIRE_ALARM implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_FIRE_ALARM implements Structure.ByValue {
        }
    }

    // 操作人数不合规
    public static class STU_ALARM_EVENT_FIRE_OPERATOR_NONCOMPLIANCE extends Structure {
        // 门禁通道号
        public int nChannel;

        // 事件名称
        public byte[] szEvent = new byte[64];

        // 在场人数
        public int nPeopleNum;

        // 合规在场人数
        public int nRegularPeopleNum;

        // 事件发生时间
        public STU_TIME_EX stuTime;

        // 时区
        public byte[] szTimeZone = new byte[16];

        // 预留参数
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "nPeopleNum", "nRegularPeopleNum", "stuTime", "szTimeZone", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_FIRE_OPERATOR_NONCOMPLIANCE implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_FIRE_OPERATOR_NONCOMPLIANCE implements Structure.ByValue {
        }
    }

    // 烟雾报警
    public static class STU_ALARM_EVENT_FIRE_SMOG_ALARM extends Structure {
        // 门禁通道号
        public int nChannel;

        // 事件名称
        public byte[] szEvent = new byte[64];

        // 事件发生时间
        public STU_TIME_EX stuTime;

        // 时区
        public byte[] szTimeZone = new byte[16];

        // 预留参数
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szEvent", "stuTime", "szTimeZone", "reserved"});
        }

        public static class ByReference extends STU_ALARM_EVENT_FIRE_SMOG_ALARM implements Structure.ByReference {
        }

        public static class ByValue extends STU_ALARM_EVENT_FIRE_SMOG_ALARM implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 云台相关结构体
    // 云台预置点信息，预置点编号唯一，名称可以重复
    public static class STU_PTZ_PRESET extends Structure {
        public int nIndex;                        // 预置点编号，从 1 开始
        public int nType;                        // 预置点类型，0-普通预置点，1-设置过智能规则的预置点
        public byte[] szName = new byte[32];        // 预置点名称
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nIndex", "nType", "szName", "reserved"});
        }

        public static class ByReference extends STU_PTZ_PRESET implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_PRESET implements Structure.ByValue {
        }
    }

    // 巡航线路信息
    public static class STU_PTZ_PRESET_TOUR extends Structure {
        public int nIndex;                        // 巡航线路编号，从 1 开始
        public byte[] szName = new byte[32];        // 巡航线路名称
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nIndex", "szName", "reserved"});
        }

        public static class ByReference extends STU_PTZ_PRESET_TOUR implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_PRESET_TOUR implements Structure.ByValue {
        }
    }

    // 云台巡航线路节点点信息
    public static class STU_PTZ_PRESET_TOUR_NODE extends Structure {
        public int nIndex;                    // 预置点编号，从 1 开始
        public int nDuration;                // 在该预置点停留的事件，单位：秒
        public int emSpeed;                // 到达预置点的转动速度，等级 1-10,EM_PTZ_SPEED_L10

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nIndex", "nDuration", "emSpeed"});
        }

        public static class ByReference extends STU_PTZ_PRESET_TOUR_NODE implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_PRESET_TOUR_NODE implements Structure.ByValue {
        }
    }

    // 云台精确定位参数
    public static class STU_PTZ_MOVE_ABSOLUTE_PARAM extends Structure {
        public short nX;                            // 水平角度 0-360
        public short nY;                            // 垂直角度 -5-90
        public byte nZ;                            // 变倍角度 1-128
        public byte[] reserved = new byte[3];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nX", "nY", "nZ", "reserved"});
        }

        public static class ByReference extends STU_PTZ_MOVE_ABSOLUTE_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_MOVE_ABSOLUTE_PARAM implements Structure.ByValue {
        }
    }

    // 云台划屏定位参数
    public static class STU_PTZ_MOVE_RECT_PARAM extends Structure {
        public STU_POINT stuStartPt;                    // 起始点
        public STU_POINT stuEndPt;                    // 结束点
        public byte[] reserved = new byte[16];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stuStartPt", "stuEndPt", "reserved"});
        }

        public static class ByReference extends STU_PTZ_MOVE_RECT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_MOVE_RECT_PARAM implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////

    // 开始巡航参数
    public static class STU_PTZ_EXP_PRESET_TOUR_START_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 巡航线路编号，从 1 开始
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_EXP_PRESET_TOUR_START_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_EXP_PRESET_TOUR_START_PARAM implements Structure.ByValue {
        }
    }

    // 停止巡航参数
    public static class STU_PTZ_EXP_PRESET_TOUR_STOP_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 巡航线路编号，从 1 开始
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_EXP_PRESET_TOUR_STOP_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_EXP_PRESET_TOUR_STOP_PARAM implements Structure.ByValue {
        }
    }

    // 开始记录巡航轨迹参数
    public static class STU_PTZ_EXP_RECORD_PATTERN_START_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 巡迹线路编号，从 1 开始
        public int emPattern;                    // 巡迹模式,EM_PTZ_EXP_PATTERN
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "emPattern", "reserved"});
        }

        public static class ByReference extends STU_PTZ_EXP_RECORD_PATTERN_START_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_EXP_RECORD_PATTERN_START_PARAM implements Structure.ByValue {
        }
    }

    // 停止记录巡航轨迹参数
    public static class STU_PTZ_EXP_RECORD_PATTERN_STOP_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 巡迹线路编号，从 1 开始
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_EXP_RECORD_PATTERN_STOP_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_EXP_RECORD_PATTERN_STOP_PARAM implements Structure.ByValue {
        }
    }

    // 开始巡迹参数
    public static class STU_PTZ_EXP_PATTERN_START_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 巡迹线路编号，从 1 开始
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_EXP_PATTERN_START_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_EXP_PATTERN_START_PARAM implements Structure.ByValue {
        }
    }

    // 停止巡迹参数
    public static class STU_PTZ_EXP_PATTERN_STOP_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 巡迹线路编号，从 1 开始
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_EXP_PATTERN_STOP_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_EXP_PATTERN_STOP_PARAM implements Structure.ByValue {
        }
    }

    // 设置线性扫描边界参数
    public static class STU_PTZ_EXP_SCAN_RANGE_SET_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 线性扫描编号，从 1 开始
        public int emBorder;                    // 需设置的边界类型,EM_PTZ_SCAN_BORDER
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "emBorder", "reserved"});
        }

        public static class ByReference extends STU_PTZ_EXP_SCAN_RANGE_SET_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_EXP_SCAN_RANGE_SET_PARAM implements Structure.ByValue {
        }
    }

    // 开始线性扫描参数
    public static class STU_PTZ_EXP_SCAN_START_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 线性扫描编号，从 1 开始
        public int emSpeed;                    // 线性扫描速度,EM_PTZ_SPEED_L8
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "emSpeed", "reserved"});
        }

        public static class ByReference extends STU_PTZ_EXP_SCAN_START_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_EXP_SCAN_START_PARAM implements Structure.ByValue {
        }
    }

    // 停止线性扫描参数
    public static class STU_PTZ_EXP_SCAN_STOP_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 线性扫描编号，从 1 开始
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_EXP_SCAN_STOP_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_EXP_SCAN_STOP_PARAM implements Structure.ByValue {
        }
    }

    // 移动到预置点输入参数
    public static class STU_PTZ_EXP_PRESET_GOTO_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 预置点编号，从 1 开始
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_EXP_PRESET_GOTO_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_EXP_PRESET_GOTO_PARAM implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////

    // 获取所有预置点输入参数
    public static class STU_PTZ_CFG_PRESETS_GET_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESETS_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESETS_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取所有预置点输出参数
    public static class STU_PTZ_CFG_PRESETS_GET_OUT_PARAM extends Structure {
        public int nPresetCount;                                // 实际获取的预置点个数
        public STU_PTZ_PRESET[] stuPresetArray = new STU_PTZ_PRESET[NetDefs.MAX_PTZ_PRESET_NUM];    // 预置点信息
        public byte[] reserved = new byte[64];                    // 保留参数

        public STU_PTZ_CFG_PRESETS_GET_OUT_PARAM() {
            for (int i = 0; i < stuPresetArray.length; i++) {
                stuPresetArray[i] = new STU_PTZ_PRESET();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nPresetCount", "stuPresetArray", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESETS_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESETS_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 获取指定编号的预置点信息输入参数
    public static class STU_PTZ_CFG_PRESET_GET_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 需获取信息的预置点编号
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取指定编号的预置点信息输出参数
    public static class STU_PTZ_CFG_PRESET_GET_OUT_PARAM extends Structure {
        public STU_PTZ_PRESET stuPreset;                    // 获取的预置点信息
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stuPreset", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 增加预置点输入参数
    public static class STU_PTZ_CFG_PRESET_ADD_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public byte[] szName = new byte[32];        // 预置点名称
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "szName", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_ADD_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_ADD_IN_PARAM implements Structure.ByValue {
        }
    }

    // 增加预置点输出参数
    public static class STU_PTZ_CFG_PRESET_ADD_OUT_PARAM extends Structure {
        public int nIndex;                        // 追加的预置点编号
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_ADD_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_ADD_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 插入预置点输入参数
    // 如果预置点达到最大值，则失败；
    // 如果不存在预置点，则直接添加；如果已存在预置点，则根据 bOverwrite 是否覆盖原预置点信息，若不覆盖则返回失败；
    public static class STU_PTZ_CFG_PRESET_INSERT_IN_PARAM extends Structure {
        public int bOverwrite;                    // 是否覆盖已存在的预置点
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 需插入的预置点编号
        public byte[] szName = new byte[32];        // 预置点名称
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bOverwrite", "nChannel", "nIndex", "szName", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_INSERT_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_INSERT_IN_PARAM implements Structure.ByValue {
        }
    }

    // 插入预置点输出参数
    public static class STU_PTZ_CFG_PRESET_INSERT_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_INSERT_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_INSERT_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 重置预置点输入参数
    // 预置点编号需存在，不存在则返回失败
    public static class STU_PTZ_CFG_PRESET_RESET_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 需重置的预置点编号
        public byte[] szName = new byte[32];        // 预置点名称
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "szName", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_RESET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_RESET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 重置预置点输出参数
    public static class STU_PTZ_CFG_PRESET_RESET_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_RESET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_RESET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 移除预置点输入参数
    public static class STU_PTZ_CFG_PRESET_REMOVE_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 预置点编号，从 1 开始
        // 预置点编号，从 1 开始
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_REMOVE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_REMOVE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 移除预置点输出参数
    public static class STU_PTZ_CFG_PRESET_REMOVE_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_REMOVE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_REMOVE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 清除所有预置点输入参数
    public static class STU_PTZ_CFG_PRESETS_CLEAR_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESETS_CLEAR_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESETS_CLEAR_IN_PARAM implements Structure.ByValue {
        }
    }

    // 清除所有预置点输出参数
    public static class STU_PTZ_CFG_PRESETS_CLEAR_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESETS_CLEAR_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESETS_CLEAR_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 获取已经设置的巡航线路列表输入参数
    public static class STU_PTZ_CFG_PRESET_TOURS_GET_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOURS_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOURS_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取已经设置的巡航线路列表输出参数
    public static class STU_PTZ_CFG_PRESET_TOURS_GET_OUT_PARAM extends Structure {
        public int nTourCount;                    // 巡航线路数目
        public STU_PTZ_PRESET_TOUR[] stuTourArray = new STU_PTZ_PRESET_TOUR[NetDefs.MAX_PTZ_PRESET_TOUR_NUM];            // 巡航线路信息列表
        public byte[] reserved = new byte[128];    // 保留参数

        public STU_PTZ_CFG_PRESET_TOURS_GET_OUT_PARAM() {
            for (int i = 0; i < stuTourArray.length; i++) {
                stuTourArray[i] = new STU_PTZ_PRESET_TOUR();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nTourCount", "stuTourArray", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOURS_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOURS_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 获取指定编号的已设置的巡航线路输入参数
    public static class STU_PTZ_CFG_PRESET_TOUR_GET_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 巡航线路编号
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取指定编号的已设置的巡航线路输出参数
    public static class STU_PTZ_CFG_PRESET_TOUR_GET_OUT_PARAM extends Structure {
        public STU_PTZ_PRESET_TOUR stuPresetTour;                // 巡航线路信息
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stuPresetTour", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 追加巡航线路输入参数，追加的巡航线路在列表末尾
    public static class STU_PTZ_CFG_PRESET_TOUR_ADD_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public byte[] szName = new byte[32];        // 巡航线路编号
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_ADD_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_ADD_IN_PARAM implements Structure.ByValue {
        }
    }

    // 追加巡航线路输出参数
    public static class STU_PTZ_CFG_PRESET_TOUR_ADD_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_ADD_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_ADD_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 插入巡航线路输入参数
    // 如果巡航线路已存在，如果 bOverwrite == TRUE, 则覆盖原线路；如果 bOverwrite == FALSE, 则返回失败
    // 如果巡航线路不存在，则直接以该编号添加
    public static class STU_PTZ_CFG_PRESET_TOUR_INSERT_IN_PARAM extends Structure {
        public int bOverwrite;                    // 是否覆盖
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 巡航线路编号，从 1 开始
        public byte[] szName = new byte[32];        // 巡航线路名称
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bOverwrite", "nChannel", "nIndex", "szName", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_INSERT_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_INSERT_IN_PARAM implements Structure.ByValue {
        }
    }

    // 插入巡航吸纳路输出参数
    public static class STU_PTZ_CFG_PRESET_TOUR_INSERT_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_INSERT_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_INSERT_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 重置巡航线路输入参数
    // 如果巡航线路不存在则返回失败
    public static class STU_PTZ_CFG_PRESET_TOUR_RESET_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 巡航线路编号，从 1 开始
        public byte[] szName = new byte[32];        // 巡航线路名称
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bOverwrite", "nChannel", "nIndex", "szName", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_RESET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_RESET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 重置巡航线路输出参数
    public static class STU_PTZ_CFG_PRESET_TOUR_RESET_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_RESET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_RESET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 删除指定编号的巡航线路输入参数
    public static class STU_PTZ_CFG_PRESET_TOUR_REMOVE_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 巡航线路编号，从 1 开始
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_REMOVE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_REMOVE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 删除指定编号的巡航线路输入参数
    public static class STU_PTZ_CFG_PRESET_TOUR_REMOVE_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_REMOVE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_REMOVE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 清除所有巡航线路输入参数
    public static class STU_PTZ_CFG_PRESET_TOURS_CLEAR_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOURS_CLEAR_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOURS_CLEAR_IN_PARAM implements Structure.ByValue {
        }
    }

    // 清除所有巡航线路输出参数
    public static class STU_PTZ_CFG_PRESET_TOURS_CLEAR_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOURS_CLEAR_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOURS_CLEAR_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 获取巡航线路的预置点列表输入参数
    public static class STU_PTZ_CFG_PRESET_TOUR_NODES_GET_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nIndex;                        // 巡航线路编号，从 1 开始
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_NODES_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_NODES_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取巡航线路的预置点列表输出参数
    public static class STU_PTZ_CFG_PRESET_TOUR_NODES_GET_OUT_PARAM extends Structure {
        public int nNodeCount;                        // 巡航线路节点点个数
        // 巡航线路节点数组
        public STU_PTZ_PRESET_TOUR_NODE[] stuNodeArray = new STU_PTZ_PRESET_TOUR_NODE[NetDefs.MAX_PTZ_PRESET_TOUR_NODE_NUM];
        public byte[] reserved = new byte[64];        // 保留参数

        public STU_PTZ_CFG_PRESET_TOUR_NODES_GET_OUT_PARAM() {
            for (int i = 0; i < stuNodeArray.length; i++) {
                stuNodeArray[i] = new STU_PTZ_PRESET_TOUR_NODE();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nNodeCount", "stuNodeArray", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_NODES_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_NODES_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 增加巡航预置点输入参数
    // 默认添加到巡航线路上的最后位置
    public static class STU_PTZ_CFG_PRESET_TOUR_NODE_ADD_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nTourIndex;                    // 巡航线路编号，从 1 开始
        public STU_PTZ_PRESET_TOUR_NODE stuNode;                    // 需添加的巡航线路中的预置点信息
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nTourIndex", "stuNode", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_NODE_ADD_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_NODE_ADD_IN_PARAM implements Structure.ByValue {
        }
    }

    // 增加巡航预置点输出参数
    public static class STU_PTZ_CFG_PRESET_TOUR_NODE_ADD_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_NODE_ADD_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_NODE_ADD_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 重置巡航预置点输入参数
    public static class STU_PTZ_CFG_PRESET_TOUR_NODE_RESET_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nTourIndex;                    // 巡航线路编号，从 1 开始
        public int nPosition;                    // 在巡航线路中重置的预置点的位置
        public STU_PTZ_PRESET_TOUR_NODE stuNode;                    // 需重置的巡航线路中的预置点信息
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nTourIndex", "nPosition", "stuNode", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_NODE_RESET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_NODE_RESET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 插入巡航预置点输出参数
    public static class STU_PTZ_CFG_PRESET_TOUR_NODE_RESET_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_NODE_RESET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_NODE_RESET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 删除巡航线路中的预置点输入参数
    public static class STU_PTZ_CFG_PRESET_TOUR_NODE_REMOVE_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nTourIndex;                    // 巡航线路编号，从 1 开始
        public int nPosition;                    // 要删除的线路上点的序号, 是预置点的索引号
        public int nPresetIndex;                // 要删除的预置点编号
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nTourIndex", "nPosition", "nPresetIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_NODE_REMOVE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_NODE_REMOVE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 删除巡航线路中的预置点输出参数
    public static class STU_PTZ_CFG_PRESET_TOUR_NODE_REMOVE_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_NODE_REMOVE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_NODE_REMOVE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 清除巡航线路中的预置点输入参数
    public static class STU_PTZ_CFG_PRESET_TOUR_NODES_CLEAR_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public int nTourIndex;                    // 巡航线路编号，从 1 开始
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nTourIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_NODES_CLEAR_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_NODES_CLEAR_IN_PARAM implements Structure.ByValue {
        }
    }

    // 清除巡航线路中的预置点输出参数
    public static class STU_PTZ_CFG_PRESET_TOUR_NODES_CLEAR_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_PRESET_TOUR_NODES_CLEAR_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_PRESET_TOUR_NODES_CLEAR_OUT_PARAM implements Structure.ByValue {
        }
    }

    /////////////////////////////////////////////
    // 云台守望配置获取输入参数
    public static class STU_PTZ_CFG_KEEP_WATCH_GET_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_KEEP_WATCH_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_KEEP_WATCH_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 云台守望配置获取输出参数
    public static class STU_PTZ_CFG_KEEP_WATCH_GET_OUT_PARAM extends Structure {
        public int bEnable;                // 是否使能
        public int nTimerInterval;            // 定时时间, 单位：分钟
        public int emAction;                // 动作类型,EM_PTZ_KEEP_WATCH_ACTION
        public int nPresetIndex;            // 预置点编号，当 emAction == PTZ_KEEP_WATCH_ACTION_PRESET 有效
        public int nTourIndex;                // 巡航线路编号，当 emAction == PTZ_KEEP_WATCH_ACTION_PRESET_TOUR 有效
        public int nScanIndex;                // 线性扫描编号，当 emAction == PTZ_KEEP_WATHC_ACTION_SCAN 有效
        public int nPatternIndex;            // 巡迹编号，当 emAction == PTZ_KEEP_WATCH_ACTION_PATTERN 有效
        public byte[] reserved = new byte[256];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "nTimerInterval", "emAction",
                    "nPresetIndex", "nTourIndex", "nScanIndex", "nPatternIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_KEEP_WATCH_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_KEEP_WATCH_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 云台守望配置设置输入参数
    public static class STU_PTZ_CFG_KEEP_WATCH_SET_IN_PARAM extends Structure {
        public int nChannel;                // 云台通道号，从 0 开始
        public int bEnable;                // 是否使能
        public int nTimerInterval;            // 定时时间, 单位：分钟
        public int emAction;                // 动作类型,EM_PTZ_KEEP_WATCH_ACTION
        public int nIndex;                    // 当 emAction == PTZ_KEEP_WATCH_ACTION_NONE，无效
        // 当 emAction == PTZ_KEEP_WATCH_ACTION_PRESET，为预置点编号，从 1 开始
        // 当 emAction == PTZ_KEEP_WATCH_ACTION_PRESET_TOUR，为巡航线路编号，从 1 开始
        // 当 emAction == PTZ_KEEP_WATCH_ACTION_SCAN，为线性扫描编号，从 1 开始
        // 当 emAction == PTZ_KEEP_WATCH_ACTION_PATTERN，为巡迹编号，从 1 开始
        public byte[] reserved = new byte[64];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "bEnable", "nTimerInterval",
                    "emAction", "nIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_KEEP_WATCH_SET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_KEEP_WATCH_SET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 云台守望配置设置输出参数
    public static class STU_PTZ_CFG_KEEP_WATCH_SET_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_KEEP_WATCH_SET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_KEEP_WATCH_SET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 一天中的时间段
    public static class STU_DAY_TIME_SECTION_SCHEDULE extends Structure {
        public STU_TIME_SECTION_SCHEDULE[] stuTimeSection = new STU_TIME_SECTION_SCHEDULE[NetDefs.TIME_SECTION];

        public STU_DAY_TIME_SECTION_SCHEDULE() {
            for (int i = 0; i < stuTimeSection.length; i++) {
                stuTimeSection[i] = new STU_TIME_SECTION_SCHEDULE();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stuTimeSection"});
        }

        public static class ByReference extends STU_DAY_TIME_SECTION_SCHEDULE implements Structure.ByReference {
        }

        public static class ByValue extends STU_DAY_TIME_SECTION_SCHEDULE implements Structure.ByValue {
        }
    }

    // 一周中的时间段
    public static class STU_WEEK_TIME_SECTION_SCHEDULE extends Structure {
        public STU_DAY_TIME_SECTION_SCHEDULE[] stuTimeDay = new STU_DAY_TIME_SECTION_SCHEDULE[NetDefs.WEEK_SECTION];

        public STU_WEEK_TIME_SECTION_SCHEDULE() {
            for (int i = 0; i < stuTimeDay.length; i++) {
                stuTimeDay[i] = new STU_DAY_TIME_SECTION_SCHEDULE();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stuTimeDay"});
        }

        public static class ByReference extends STU_WEEK_TIME_SECTION_SCHEDULE implements Structure.ByReference {
        }

        public static class ByValue extends STU_WEEK_TIME_SECTION_SCHEDULE implements Structure.ByValue {
        }
    }

    // 定时任务信息
    public static class STU_PTZ_SCHEDULE_TASK_INFO extends Structure {
        public int bEnable;                // 是否是能定时任务
        public int emAction;                // 任务动作类型,EM_PTZ_SCHEDULE_TASK_ACTION
        public int nPresetIndex;            // 预置点编号，当 emAction == PTZ_SCHEDULE_TASK_ACTION_PRESET 有效
        public int nTourIndex;                // 巡航线路编号，当 emAction == PTZ_SCHEDULE_TASK_ACTION_PRESET_TOUR 有效
        public int nScanIndex;                // 线性扫描编号，当 emAction == PTZ_SCHEDULE_TASK_ACTION_SCAN 有效
        public int nPatternIndex;            // 巡迹编号，当 emAction == PTZ_SCHEDULE_TASK_ACTION_PATTERN 有效
        public int nAutoHomingTime;        // 自动归位时间,单位：秒，范围：5-3600
        public STU_WEEK_TIME_SECTION_SCHEDULE stuWeekTimeSection;        // 一周的时间段
        public byte[] reserved = new byte[128];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "nTimerInterval", "emAction",
                    "nPresetIndex", "nTourIndex", "nScanIndex", "nPatternIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_SCHEDULE_TASK_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_SCHEDULE_TASK_INFO implements Structure.ByValue {
        }
    }

    // 云台定时任务配置获取输入参数
    public static class STU_PTZ_CFG_SCHEDULE_TASKS_GET_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号，从 0 开始
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_SCHEDULE_TASKS_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_SCHEDULE_TASKS_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 云台定时任务配置获取输出参数
    public static class STU_PTZ_CFG_SCHEDULE_TASKS_GET_OUT_PARAM extends Structure {
        // 任务信息
        public STU_PTZ_SCHEDULE_TASK_INFO[] stuTask = new STU_PTZ_SCHEDULE_TASK_INFO[NetDefs.MAX_PTZ_SCHEDULE_TASK_NUM];
        public byte[] reserved = new byte[256];                        // 保留参数

        public STU_PTZ_CFG_SCHEDULE_TASKS_GET_OUT_PARAM() {
            for (int i = 0; i < stuTask.length; i++) {
                stuTask[i] = new STU_PTZ_SCHEDULE_TASK_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stuTask", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_SCHEDULE_TASKS_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_SCHEDULE_TASKS_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 云台定时任务配置设置输入参数
    public static class STU_PTZ_CFG_SCHEDULE_TASKS_SET_IN_PARAM extends Structure {
        public int nChannel;                            // 云台通道号，从 0 开始
        // 定时任务信息
        public STU_PTZ_SCHEDULE_TASK_INFO[] stuTaskInfo = new STU_PTZ_SCHEDULE_TASK_INFO[NetDefs.MAX_PTZ_SCHEDULE_TASK_NUM];
        public byte[] reserved = new byte[128];            // 保留参数

        public STU_PTZ_CFG_SCHEDULE_TASKS_SET_IN_PARAM() {
            for (int i = 0; i < stuTaskInfo.length; i++) {
                stuTaskInfo[i] = new STU_PTZ_SCHEDULE_TASK_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "stuTaskInfo", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_SCHEDULE_TASKS_SET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_SCHEDULE_TASKS_SET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 云台定时任务配置设置输出参数
    public static class STU_PTZ_CFG_SCHEDULE_TASKS_SET_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_SCHEDULE_TASKS_SET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_SCHEDULE_TASKS_SET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 获取线性扫描路径使能信息输入参数
    public static class STU_PTZ_CFG_AUTO_SCAN_ENABLE_GET_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_AUTO_SCAN_ENABLE_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_AUTO_SCAN_ENABLE_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取线性扫描路径使能信息输出参数
    public static class STU_PTZ_CFG_AUTO_SCAN_ENABLE_GET_OUT_PARAM extends Structure {
        public int nEanbleCount;            // 使能位个数
        // 使能信息, 数组下标 + 1 即是线性扫秒路径编号
        public int[] bEnableArr = new int[NetDefs.MAX_PTZ_AUTO_SCAN_NUM];
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nEanbleCount", "bEnableArr", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_AUTO_SCAN_ENABLE_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_AUTO_SCAN_ENABLE_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 移除线性扫描路径输入参数
    public static class STU_PTZ_CFG_AUTO_SCAN_REMOVE_IN_PARAM extends Structure {
        public int nChannel;                // 云台通道号
        public int nIndex;                    // 需移除的线性扫描路径编号，
        // 0-移除所有，1-MAX_PTZ_AUTO_SCAN_NUM 则移除指定编号的线性扫描路径
        public byte[] reserved = new byte[32];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_AUTO_SCAN_REMOVE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_AUTO_SCAN_REMOVE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 移除线性扫描路径输出参数
    public static class STU_PTZ_CFG_AUTO_SCAN_REMOVE_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_AUTO_SCAN_REMOVE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_AUTO_SCAN_REMOVE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 获取巡迹路径使能信息输入参数
    public static class STU_PTZ_CFG_AUTO_PATTERN_ENABLE_GET_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_AUTO_PATTERN_ENABLE_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_AUTO_PATTERN_ENABLE_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取巡迹路径使能信息输出参数
    public static class STU_PTZ_CFG_AUTO_PATTERN_ENABLE_GET_OUT_PARAM extends Structure {
        public int nEanbleCount;            // 使能位个数
        // 使能信息，数组下标 + 1 即是巡迹路径编号
        public int[] bEnableArr = new int[NetDefs.MAX_PTZ_AUTO_PATTERN_NUM];
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nEanbleCount", "bEnableArr", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_AUTO_PATTERN_ENABLE_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_AUTO_PATTERN_ENABLE_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 移除巡迹路径输入参数
    public static class STU_PTZ_CFG_AUTO_PATTERN_REMOVE_IN_PARAM extends Structure {
        public int nChannel;                    // 云台通道号
        public int nIndex;                        // 需移除的线性扫描路径编号，
        // 0-移除所有，1-MAX_PTZ_AUTO_SCAN_NUM 则移除指定编号的巡迹路径
        public byte[] reserved = new byte[32];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "nIndex", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_AUTO_PATTERN_REMOVE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_AUTO_PATTERN_REMOVE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 移除巡迹路径输出参数
    public static class STU_PTZ_CFG_AUTO_PATTERN_REMOVE_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_AUTO_PATTERN_REMOVE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_AUTO_PATTERN_REMOVE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 获取云台状态信息输入参数
    public static class STU_PTZ_CFG_STATUS_GET_IN_PARAM extends Structure {
        public int nChannel;                            // 云台通道号
        public byte[] reserved = new byte[128];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_STATUS_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_STATUS_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取云台状态信息输出参数
    public static class STU_PTZ_CFG_STATUS_GET_OUT_PARAM extends Structure {
        public int nTotalRunTime;                        // 云台总运行时间，单位：分钟
        public int nIcrCount;                            // ICR切换次数
        public int nIrisSwitchCount;                    // IRIS切换次数
        public int nHCircleCount;                        // 云台水平转动圈数
        public int nVCircleCount;                        // 云台垂直转动圈数
        public int nVMotorSwitchCount;                    // 云台垂直电机方向的切换次数
        public int nZoomMotorSwitchCount;                // 变倍马达方向的切换次数
        public int nFocusMotorSwitchCount;                // 变焦马达方向的切换次数
        public byte[] reserved = new byte[1024];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nTotalRunTime", "nIcrCount", "nIrisSwitchCount",
                    "nHCircleCount", "nVCircleCount", "nVMotorSwitchCount", "nZoomMotorSwitchCount",
                    "nFocusMotorSwitchCount", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_STATUS_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_STATUS_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 获取当前云台标定绝对位置信息输入参数
    public static class STU_PTZ_CFG_POSITION_STATUS_GET_IN_PARAM extends Structure {
        public int nChannel;                        // 云台通道号
        public byte[] reserved = new byte[64];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannel", "reserved"});
        }

        public static class ByReference extends STU_PTZ_CFG_POSITION_STATUS_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_POSITION_STATUS_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取当前云台标定绝对位置信息输出参数
    public static class STU_PTZ_CFG_POSITION_STATUS_GET_OUT_PARAM extends Structure {
        public STU_CFG_PTZ_CALIBRATE_AREA_POS_PARAM stCaliPos;

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stCaliPos"});
        }

        public static class ByReference extends STU_PTZ_CFG_POSITION_STATUS_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_PTZ_CFG_POSITION_STATUS_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    //门禁相关结构体

    //////////////////////////////////////////////////////////////
    // 门禁控制通过时间段
    public static class STU_DOOR_CONTROL_PASS_SECTION extends Structure {
        public STU_DATE_I stuDate;                            // 作用日期
        public STU_TIME_SECTION_I stuTimeSection;                        // 作用时间段
        public byte[] reserved = new byte[64];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stuDate", "stuTimeSection", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CONTROL_PASS_SECTION implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CONTROL_PASS_SECTION implements Structure.ByValue {
        }
    }

    // 门禁全局通过时间段
    public static class STU_DOOR_GLOBAL_PASS_SECTION extends Structure {
        public int emAccesType;                // 访问类型,EM_DOOR_ACCESS_TYPE
        public STU_TIME_SECTION_I stuTimeSection;                // 作用时间段
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emAccesType", "stuTimeSection", "reserved"});
        }

        public static class ByReference extends STU_DOOR_GLOBAL_PASS_SECTION implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_GLOBAL_PASS_SECTION implements Structure.ByValue {
        }
    }

    // 单个门禁通道模式配置信息
    public static class STU_DOOR_CFG_SC_MODE extends Structure {
        public int emMode;                            // 门禁模式,EM_DOOR_MODE_TYPE
        public byte[] reserved = new byte[16];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emMode", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_SC_MODE implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_SC_MODE implements Structure.ByValue {
        }
    }

    // 单个门禁通道时间段配置信息
    public static class STU_DOOR_CFG_SC_CONTROL_TIME_SECTION extends Structure {
        public int bEnable;                    // 是否使能
        public byte[] szName = new byte[128];        // 时间段名称
        public int emStatus;                    // 门禁状态,EM_DOOR_STATUS_TYPE
        public int nPassTimeSecCount;            // 通过时间段数目
        // 通过时间段数组
        public STU_DOOR_CONTROL_PASS_SECTION[] stuPassTimeSecArr = new STU_DOOR_CONTROL_PASS_SECTION[NetDefs.MAX_DOOR_PASS_TIME_SEC_NUM];
        public byte[] reserved = new byte[128];    // 保留参数

        public STU_DOOR_CFG_SC_CONTROL_TIME_SECTION() {
            for (int i = 0; i < stuPassTimeSecArr.length; i++) {
                stuPassTimeSecArr[i] = new STU_DOOR_CONTROL_PASS_SECTION();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "szName", "emStatus",
                    "nPassTimeSecCount", "stuPassTimeSecArr", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_SC_CONTROL_TIME_SECTION implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_SC_CONTROL_TIME_SECTION implements Structure.ByValue {
        }
    }

    // 单个门禁通道所有全局时间段信息
    public static class STU_DOOR_CFG_SC_CONTROL_TIME_SECTIONS extends Structure {
        // 有效的时段个数，不能超过 MAX_DOOR_TIME_SEC_NUM
        public int nTimeSecNum;
        // 单个门禁通道全局时间段数组
        public STU_DOOR_CFG_SC_CONTROL_TIME_SECTION[] stuTimeSecArray = new STU_DOOR_CFG_SC_CONTROL_TIME_SECTION[NetDefs.MAX_DOOR_TIME_SEC_NUM];
        // 保留参数
        public byte[] reserved = new byte[128];

        public STU_DOOR_CFG_SC_CONTROL_TIME_SECTIONS() {
            for (int i = 0; i < stuTimeSecArray.length; i++) {
                stuTimeSecArray[i] = new STU_DOOR_CFG_SC_CONTROL_TIME_SECTION();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nTimeSecNum", "stuTimeSecArray", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_SC_CONTROL_TIME_SECTIONS implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_SC_CONTROL_TIME_SECTIONS implements Structure.ByValue {
        }
    }

    // 单个门禁通道全局时间段
    public static class STU_DOOR_CFG_SC_GLOBAL_TIME_SECTION extends Structure {
        public byte[] szName = new byte[128];            // 时间段名称
        public int emType;                            // 通过时间段类型,EM_DOOR_PASS_TIME_TYPE
        public int nPassTimeSecCount;                // 通过时间段数目
        // 通过时间段数组
        public STU_DOOR_GLOBAL_PASS_SECTION[] stuPassTimeSecArr = new STU_DOOR_GLOBAL_PASS_SECTION[NetDefs.MAX_DOOR_PASS_TIME_SEC_NUM];
        public byte[] reserved = new byte[128];        // 保留参数

        public STU_DOOR_CFG_SC_GLOBAL_TIME_SECTION() {
            for (int i = 0; i < stuPassTimeSecArr.length; i++) {
                stuPassTimeSecArr[i] = new STU_DOOR_GLOBAL_PASS_SECTION();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szName", "emType", "nPassTimeSecCount",
                    "stuPassTimeSecArr", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_SC_GLOBAL_TIME_SECTION implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_SC_GLOBAL_TIME_SECTION implements Structure.ByValue {
        }
    }

    // 单个门禁通道所有全局时间段信息
    public static class STU_DOOR_CFG_SC_GLOBAL_TIME_SECTIONS extends Structure {
        // 有效的时段个数，不能超过 MAX_DOOR_TIME_SEC_NUM
        public int nTimeSecNum;
        // 单个门禁通道全局时间段数组
        public STU_DOOR_CFG_SC_GLOBAL_TIME_SECTION[] stuTimeSecArray = new STU_DOOR_CFG_SC_GLOBAL_TIME_SECTION[NetDefs.MAX_DOOR_TIME_SEC_NUM];
        // 保留参数
        public byte[] reserved = new byte[128];

        public STU_DOOR_CFG_SC_GLOBAL_TIME_SECTIONS() {
            for (int i = 0; i < stuTimeSecArray.length; i++) {
                stuTimeSecArray[i] = new STU_DOOR_CFG_SC_GLOBAL_TIME_SECTION();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nTimeSecNum", "stuTimeSecArray", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_SC_GLOBAL_TIME_SECTIONS implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_SC_GLOBAL_TIME_SECTIONS implements Structure.ByValue {
        }
    }

    // 单个门禁通道防拆报警配置
    public static class STU_DOOR_CFG_SC_ALARM_TAMPER extends Structure {
        public int bEnable;                        // 是否使能
        public STU_EVENT_HANDLER stuEventHandler;                // 事件联动项
        public byte[] reserved = new byte[64];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "stuEventHandler", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_SC_ALARM_TAMPER implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_SC_ALARM_TAMPER implements Structure.ByValue {
        }
    }

    // 单个门禁通道黑白名单报警配置
    public static class STU_DOOR_CFG_SC_ALARM_BLACKLIST extends Structure {
        public int bEnable;                        // 是否使能
        public STU_EVENT_HANDLER stuEventHandler;                // 事件联动项
        public byte[] reserved = new byte[64];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "stuEventHandler", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_SC_ALARM_BLACKLIST implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_SC_ALARM_BLACKLIST implements Structure.ByValue {
        }
    }

    // 单个门禁通道胁迫报警配置
    public static class STU_DOOR_CFG_SC_ALARM_COERCE extends Structure {
        public int bEnable;                        // 是否使能
        public STU_EVENT_HANDLER stuEventHandler;                // 事件联动项
        public byte[] reserved = new byte[64];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "stuEventHandler", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_SC_ALARM_COERCE implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_SC_ALARM_COERCE implements Structure.ByValue {
        }
    }

    // 单个门禁通道门超时未关配置
    public static class STU_DOOR_CFG_SC_ALARM_OPENHOLD extends Structure {
        public int bEnable;                            // 是否使能
        public int nHoldSecond;                        // 门未关超时时间，单位：秒
        public STU_EVENT_HANDLER stuEventHandler;                    // 事件联动项
        public byte[] reserved = new byte[64];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "nHoldSecond", "stuEventHandler", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_SC_ALARM_OPENHOLD implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_SC_ALARM_OPENHOLD implements Structure.ByValue {
        }
    }

    // 门禁检测日志模块控制配置
    public static class STU_DOOR_CFG_ACCESS_RECORD extends Structure {
        public int bSavePicture;                        // 日志是否存储图片
        public byte[] reserved = new byte[512];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bSavePicture", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_ACCESS_RECORD implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_ACCESS_RECORD implements Structure.ByValue {
        }
    }

    // 门禁人脸识别通过文字提示自定义配置
    public static class STU_DOOR_CFG_OPENTIPS extends Structure {
        public int nVoiceTipType;                        // 提示音类别
        // 0-默认提示，1-欢迎光临，2-通行成功，3-打卡成功，4-识别成功，5-自定义
        public byte[] szCustomTips = new byte[18];        // 当提示语类别为自定义，设置时，如果该值为空，则不设置；如果不为空则按自定义设置
        public byte[] reserved1 = new byte[2];            // 字节对齐
        public int nTextTipType;                        // 提示语类别
        // 0-提示语为空 1-欢迎光临 2-通行成功 3-打开成功 4-识别成功 5-自定义
        public int nShowTips;                            // 是否显示界面的提示，1 显示，0 不显示
        public int bLivenessEnable;                    // 是否显示活体标签，TREU - 显示，FALSE不显示，默认不显示
        public byte[] reserved2 = new byte[52];            // 保留参数，总大小4字节对齐

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nVoiceTipType", "szCustomTips", "reserved1",
                    "nTextTipType", "nShowTips", "bLivenessEnable", "reserved2"});
        }

        public static class ByReference extends STU_DOOR_CFG_OPENTIPS implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_OPENTIPS implements Structure.ByValue {
        }
    }

    // 门禁访问视图配置信息
    public static class STU_DOOR_CFG_ACCESS_VIEW extends Structure {
        public int bShowName;                            // 是否显示姓名和编号，TRUE-显示，FALSE-不显示
        public int nWorkstateTime;                        // 工作状态时间，无人脸间隔多久进入屏保，单位秒,范围[0, 86400]
        public int nStandbyTime;                        // 进入息屏时间，单位秒[0, 86400], -1 表示未设置
        public int bShowPic;                            // 是否显示识别人员的照片
        public byte[] szCustom = new byte[128];            // 自定义字符串
        public byte[] reserved = new byte[372];            // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bShowName", "nWorkstateTime", "nStandbyTime",
                    "bShowPic", "szCustom", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_ACCESS_VIEW implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_ACCESS_VIEW implements Structure.ByValue {
        }
    }

    // 门禁陌生人提示配置信息
    public static class STU_DOOR_CFG_STRANGER_TIPS extends Structure {
        public int bEnable;                        // 陌生人提示使能
        public int emTipType;                        // 提示信息类型, EM_STRANGER_TIPS_TYPE
        public byte[] szCustomTips = new byte[64];    // 自定义提示，emTipType == EM_STRANGER_TIPS_TYPE_CUSTOM时有效
        public int nVoiceSelect;                    // 语音设置
        // 0 - "人员未注册, 请联系管理员"
        // 1 - "人员未注册"
        public int bVoiceEnable;                    // 陌生人语音是否开启
        public byte[] reserved = new byte[508];        // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "emTipType", "szCustomTips",
                    "nVoiceSelect", "bVoiceEnable", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_STRANGER_TIPS implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_STRANGER_TIPS implements Structure.ByValue {
        }
    }

    // 基础设置细节
    public static class STU_DOOR_GLOBAL_SETTING_DETAIL extends Structure {
        // 无识别时欢迎文字
        public byte[] szWelcomeString = new byte[64];
        // 名称
        public byte[] szName = new byte[64];
        // 保留参数
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szWelcomeString", "szName", "reserved"});
        }

        public static class ByReference extends STU_DOOR_GLOBAL_SETTING_DETAIL implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_GLOBAL_SETTING_DETAIL implements Structure.ByValue {
        }
    }

    // 门禁全局基础设置
    public static class STU_DOOR_CFG_GLOBAL_SETTING extends Structure {
        // 实际数量
        public int nSettingCount;
        // 配置
        public STU_DOOR_GLOBAL_SETTING_DETAIL[] stDetails = new STU_DOOR_GLOBAL_SETTING_DETAIL[NetDefs.MAX_DOOR_GLOBAL_SETTING_NUM];
        // 保留参数
        public byte[] reserved = new byte[128];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nSettingCount", "stDetails", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GLOBAL_SETTING implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GLOBAL_SETTING implements Structure.ByValue {
        }
    }

    // 门禁屏幕配置
    public static class STU_DOOR_CFG_SCREEN extends Structure {
        public int bEnable;                        // 使能
        public int nBrightness;                    // 屏幕亮度，【0-100】
        public byte[] reserved = new byte[256];        // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "nBrightness", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_SCREEN implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_SCREEN implements Structure.ByValue {
        }
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 门禁权限组周计划时段配置
    public static class STU_GROUP_WEEK_PLAN_INFO extends Structure {
        // 索引号，与权限组周计划指定的索引对应
        // 该值不能被修改，只用于指定具体时段
        public int nIndex;
        // 是否启动
        public int bEnable;
        // 周计划名称
        public byte[] szWeekPlanName = new byte[64];
        // 周计划
        public STU_WEEK_TIME_SECTION_SCHEDULE stTimeSchedule = new STU_WEEK_TIME_SECTION_SCHEDULE();
        // 预留参数
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nIndex", "bEnable", "szWeekPlanName", "stTimeSchedule", "reserved"});
        }

        public static class ByReference extends STU_GROUP_WEEK_PLAN_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_GROUP_WEEK_PLAN_INFO implements Structure.ByValue {
        }
    }

    // 门禁权限组周计划时段配置
    public static class STU_DOOR_CFG_GROUP_WEEK_PLAN extends Structure {
        // 时段数量，最大MAX_DOOR_GROUP_WEEK_PLAN_COUNT个
        public int nWeekPlanCount;
        // 周计划数段信息
        public STU_GROUP_WEEK_PLAN_INFO[] stWeekPlanInfos = new STU_GROUP_WEEK_PLAN_INFO[NetDefs.MAX_DOOR_GROUP_WEEK_PLAN_COUNT];

        public STU_DOOR_CFG_GROUP_WEEK_PLAN() {
            for (int i = 0; i < stWeekPlanInfos.length; i++) {
                stWeekPlanInfos[i] = new STU_GROUP_WEEK_PLAN_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nWeekPlanCount", "stWeekPlanInfos"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_WEEK_PLAN implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_WEEK_PLAN implements Structure.ByValue {
        }
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 门禁权限组假日计划时间
    public static class STU_GROUP_HOLIDAY_TIME extends Structure {
        public int nYear;                            // 年
        public int nMonth;                            // 月
        public int nWeek;                            // 第几周
        // 1-first, 2-second, 3-third, 4-fouth, -1-last, 0-按日计算的方法
        public int nDay;                            // nDayFormat == 0，表示几号[1-31]
        // nDayFormat == 1，表示星期几[0-6]，从周天开始
        public byte[] reserved = new byte[16];        // 预留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nYear", "nMonth", "nWeek", "nDay", "reserved"});
        }

        public static class ByReference extends STU_GROUP_HOLIDAY_TIME implements Structure.ByReference {
        }

        public static class ByValue extends STU_GROUP_HOLIDAY_TIME implements Structure.ByValue {
        }
    }

    // 门禁权限组假日计划
    public static class STU_GROUP_HOLIDAY_SCHEDULE extends Structure {
        // 假日名
        public byte[] szHolidayName = new byte[128];
        // 假日时间样式，0 - 按天，1 - 按周，-1 - 未知
        public int nDayFormat;
        // 开始时间，需与nDayFormat配合使用
        public STU_GROUP_HOLIDAY_TIME stStartTime = new STU_GROUP_HOLIDAY_TIME();
        // 结束时间，需与nDayFormat配合使用
        public STU_GROUP_HOLIDAY_TIME stEndTime = new STU_GROUP_HOLIDAY_TIME();
        // 重复方式，0 - 仅一次，1 - 每年，-1 - 未知
        public int nRepeat;
        // 时间段
        public STU_DAY_TIME_SECTION_SCHEDULE stuTimeSectionSchedule;
        // 预留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szHolidayName", "nDayFormat",
                    "stStartTime", "stEndTime", "nRepeat", "stuTimeSectionSchedule", "reserved"});
        }

        public static class ByReference extends STU_GROUP_HOLIDAY_SCHEDULE implements Structure.ByReference {
        }

        public static class ByValue extends STU_GROUP_HOLIDAY_SCHEDULE implements Structure.ByValue {
        }
    }

    // 门禁权限组假日计划时段配置
    public static class STU_GROUP_HOLIDAY_PLAN_INFO extends Structure {
        // 索引号，与权限组假日计划指定的索引对应
        // 该值不能被修改，只用于指定具体时段
        public int nIndex;
        // 是否启动
        public int bEnable;
        // 假日计划名称
        public byte[] szHolidayPlanName = new byte[128];
        // 假日数量，最大MAX_DOOR_GROUP_HOLIDAY_COUNT个
        public int nHolidayCount;
        // 假日计划
        public STU_GROUP_HOLIDAY_SCHEDULE[] stHolidaySchedules = new STU_GROUP_HOLIDAY_SCHEDULE[NetDefs.MAX_DOOR_GROUP_HOLIDAY_COUNT];
        // 预留参数
        public byte[] reserved = new byte[256];

        public STU_GROUP_HOLIDAY_PLAN_INFO() {
            for (int i = 0; i < stHolidaySchedules.length; i++) {
                stHolidaySchedules[i] = new STU_GROUP_HOLIDAY_SCHEDULE();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nIndex", "bEnable", "szHolidayPlanName",
                    "nHolidayCount", "stHolidaySchedules", "reserved"});
        }

        public static class ByReference extends STU_GROUP_HOLIDAY_PLAN_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_GROUP_HOLIDAY_PLAN_INFO implements Structure.ByValue {
        }
    }

    // 门禁权限组假日计划时段配置
    public static class STU_DOOR_CFG_GROUP_HOLIDAY_PLAN extends Structure {
        // 时段数量，最大MAX_DOOR_GROUP_HOLIDAY_PLAN_COUNT个
        public int nHolidayPlanCount;
        // 假日计划数段信息
        public STU_GROUP_HOLIDAY_PLAN_INFO[] stHolidayPlanInfos = new STU_GROUP_HOLIDAY_PLAN_INFO[NetDefs.MAX_DOOR_GROUP_HOLIDAY_PLAN_COUNT];

        public STU_DOOR_CFG_GROUP_HOLIDAY_PLAN() {
            for (int i = 0; i < stHolidayPlanInfos.length; i++) {
                stHolidayPlanInfos[i] = new STU_GROUP_HOLIDAY_PLAN_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nHolidayPlanCount", "stHolidayPlanInfos"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_HOLIDAY_PLAN implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_HOLIDAY_PLAN implements Structure.ByValue {
        }
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 门禁广告工作模式配置
    public static class STU_DOOR_CFG_AD_WORK_MODE_OPTION extends Structure {
        // 当前模式，0 - 默认模式，1 - 广告模式
        public int nMode;
        // "nMode" 为1时有效，0 - 视频播放，1 - 图片播放
        public int nPlayMode;
        // 图片播放时间间隔，"nPlayMode" 为1时有效，单位s，填0时，按默认1秒播放
        public int nPlayInterval;
        // 保留字节
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMode", "nPlayMode", "nPlayInterval", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_AD_WORK_MODE_OPTION implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_AD_WORK_MODE_OPTION implements Structure.ByValue {
        }
    }

    // 文件信息
    public static class STU_STANDBY_FILE_INFO extends Structure {
        // 文件名
        public byte[] szFileName = new byte[128];
        // 保留字节
        public byte[] reserved = new byte[256];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szFileName", "reserved"});
        }

        public static class ByReference extends STU_STANDBY_FILE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_STANDBY_FILE_INFO implements Structure.ByValue {
        }
    }

    // 门禁待机界面模式配置
    public static class STU_DOOR_CFG_STANDBY_MODE extends Structure {
        // 模式  0 - 默认界面， 1 - 图片广告模式， 2 - 视频广告模式
        public int nMode;
        // 视频间隔时间
        public int nMovieInterval;
        // 视频文件数量
        public int nMovieFileCount;
        // 视频文件数组
        public STU_STANDBY_FILE_INFO[] stMovieFileInfos = new STU_STANDBY_FILE_INFO[NetDefs.MAX_DOOR_STANDBY_FILE_COUNT];
        // 图片间隔时间
        public int nPictureInterval;
        // 图片文件数量
        public int nPicFileCount;
        // 图片文件数组
        public STU_STANDBY_FILE_INFO[] stPicFileInfos = new STU_STANDBY_FILE_INFO[NetDefs.MAX_DOOR_STANDBY_FILE_COUNT];
        // 保留字节
        public byte[] reserved = new byte[128];

        public STU_DOOR_CFG_STANDBY_MODE() {
            for (int i = 0; i < stMovieFileInfos.length; i++) {
                stMovieFileInfos[i] = new STU_STANDBY_FILE_INFO();
            }

            for (int i = 0; i < stPicFileInfos.length; i++) {
                stPicFileInfos[i] = new STU_STANDBY_FILE_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMode", "nMovieInterval", "nMovieFileCount",
                    "stMovieFileInfos", "nPictureInterval", "nPicFileCount", "stPicFileInfos", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_STANDBY_MODE implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_STANDBY_MODE implements Structure.ByValue {
        }
    }

    // 体温检测结果提示配置
    public static class STU_TEMPERATURE_DETECT_TIPS extends Structure {
        // 画面提示使能, 0 - 禁用， 1 - 启用
        public int bShowEnable;
        // 画面提示内容
        public byte[] szShowTips = new byte[32];
        // 语音提示使能, 0 - 禁用， 1 - 启用
        public int bVoiceEnable;
        // 语音提示内容
        public byte[] szVoiceTips = new byte[32];
        // 保留参数
        public byte[] reserved = new byte[128];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bShowEnable", "szShowTips", "bVoiceEnable",
                    "szVoiceTips", "reserved"});
        }

        public static class ByReference extends STU_TEMPERATURE_DETECT_TIPS implements Structure.ByReference {
        }

        public static class ByValue extends STU_TEMPERATURE_DETECT_TIPS implements Structure.ByValue {
        }
    }

    // 门禁体温检测配置
    public static class STU_DOOR_CFG_TEMPERATURE_DETECT extends Structure {
        // 检测模式：0 - 仅作属性识别， 1 - 屏蔽体温异常人员
        public int nDetectMode;
        // 正常体温范围-最小值
        public float fNormalMinimum;
        // 正常体温范围-最大值
        public float fNormalMaximum;

        // 体温正常提示配置
        public STU_TEMPERATURE_DETECT_TIPS stNormalTips;
        // 体温异常提示配置
        public STU_TEMPERATURE_DETECT_TIPS stAbnormalTips;
        // 温度补偿, 正数表示增加, 负数表示减小
        public float fCorrection;
        // 识别到人脸后, 开始测温的最小像素
        public int uMinPixel;
        // 测温功能使能
        public int bEnable;
        // 保留参数
        public byte[] reserved = new byte[116];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nDetectMode", "fNormalMinimum", "fNormalMaximum",
                    "stNormalTips", "stAbnormalTips", "fCorrection", "uMinPixel", "bEnable", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_TEMPERATURE_DETECT implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_TEMPERATURE_DETECT implements Structure.ByValue {
        }
    }

    // 门禁口罩检测配置细节
    public static class STU_MASK_DETECT_CFG_DETAIL extends Structure {
        //提示使能
        public int bShowEnable;
        //字体颜色 0 - 蓝, 1 - 绿, 2 - 红
        public int nBackgroundColor;
        // 文字自定义信息
        public byte[] szShowTips = new byte[32];
        // 语音使能
        public int bVoiceEnable;
        // 语音自定义信息
        public byte[] szVoiceTips = new byte[32];
        // 保留参数
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bShowEnable", "nBackgroundColor", "szShowTips",
                    "bVoiceEnable", "szVoiceTips", "reserved"});
        }

        public static class ByReference extends STU_MASK_DETECT_CFG_DETAIL implements Structure.ByReference {
        }

        public static class ByValue extends STU_MASK_DETECT_CFG_DETAIL implements Structure.ByValue {
        }
    }

    // 门禁口罩检测配置
    public static class STU_DOOR_CFG_MASK_DETECT extends Structure {
        //检测模式：0 - 仅作属性识别, 1 - 屏蔽不戴口罩人员, 2 - 屏蔽戴口罩人员
        public int nDetectMode;
        // 已戴口罩配置
        public STU_MASK_DETECT_CFG_DETAIL stWareMaskDetail;
        // 未戴口罩配置
        public STU_MASK_DETECT_CFG_DETAIL stNoMaskDetail;
        // 保留参数
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nDetectMode", "stWareMaskDetail", "stNoMaskDetail", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_MASK_DETECT implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_MASK_DETECT implements Structure.ByValue {
        }
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //门禁配置操作相关结构体
    //门禁关联卡信息
    public static class STU_DOOR_CARD_INFO extends Structure {
        public byte[] szCardID = new byte[128];        // 卡号 ID
        public byte[] szPersonCode = new byte[128];    // 人员编号
        public byte[] szLocation = new byte[256];        // 门禁位置
        public int emCardType;                        // 门禁卡类型,EM_DOOR_CARD_TYPE
        public STU_DATE_SECTION_I stuValidDate;                    // 有效期日期
        public STU_TIME_SECTION_I stuValidTime;                    // 有效期的时间，默认0:0:0 - 23:59:59
        public byte[] reserved = new byte[480];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szCardID", "szPersonCode", "szLocation",
                    "emCardType", "stuValidDate", "stuValidTime", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CARD_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CARD_INFO implements Structure.ByValue {
        }
    }

    //门禁访问记录信息
    public static class STU_DOOR_ACCESS_RECORD_INFO extends Structure {
        public int nRecordID;                            // 记录编号
        public int bPass;                                // 是否允许通行
        public int emAccessType;                        // 访问类型,EM_DOOR_ACCESS_TYPE
        public int emCardType;                            // 卡类型,EM_DOOR_CARD_TYPE
        public byte[] szCardID = new byte[128];            // 卡编号
        public byte[] szPersonCode = new byte[128];        // 人员编号
        public byte[] szPersonName = new byte[128];        // 人员姓名
        public STU_TIME_EX stuTime;                            // 访问时间
        public byte[] szDetail = new byte[512];            // 详细描述,json 字符串,如 {"BoxNo" : "123"}
        public byte[] szCustomID = new byte[128];            // 用户自定义编号
        public int nPassValue;                            // 0 - 对比不通过，1 - 通过，2 - 活体不通过，-1 - 未知/不支持
        public float fSearchScore;                        // 人脸识别评分[0.00 ~ 100.00]，-1 - 未知/不支持
        public float fSearchThreshold;                    // 人脸识别阈值[0.00 ~ 100.00]，-1 - 未知/不支持
        public float fTemperature;                        // 体温
        public int nMask;                                // 是否带口罩，0 - 未知，1 - 戴口罩，2 - 未戴口罩
        public byte[] reserved = new byte[364];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRecordID", "bPass", "emAccessType",
                    "emCardType", "szCardID", "szPersonCode", "szPersonName", "stuTime",
                    "szDetail", "szCustomID", "nPassValue", "fSearchScore", "fSearchThreshold",
                    "fTemperature", "nMask", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_RECORD_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_RECORD_INFO implements Structure.ByValue {
        }
    }

    //门禁通过时段信息
    public static class STU_DOOR_CFG_PASS_TIME extends Structure {
        public int nID;                            // 门禁时段 ID
        public byte[] szName = new byte[128];            // 通过时段名称
        public int emType;                            // 时段类型,EM_DOOR_PASS_TIME_TYPE
        public int nTimeSecCount;                    // 实际时段个数，不超过 MAX_DOOR_PASS_TIME_SEC_NUM
        // 时段数组
        public STU_TIME_SECTION_I[] stuPassTimeSecArr = new STU_TIME_SECTION_I[32];
        public byte[] reserved = new byte[256];        // 保留参数

        public STU_DOOR_CFG_PASS_TIME() {
            for (int i = 0; i < stuPassTimeSecArr.length; i++) {
                stuPassTimeSecArr[i] = new STU_TIME_SECTION_I();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nID", "szName", "emType",
                    "nTimeSecCount", "stuPassTimeSecArr", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PASS_TIME implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PASS_TIME implements Structure.ByValue {
        }
    }

    //门禁权限组信息
    public static class STU_DOOR_CFG_GROUP extends Structure {
        public byte[] szName = new byte[128];            // 门禁权限组名称
        public int nWeekPlanIndex;                    // 周计划时段数组下标，对应配置时段
        public int nHolidayPlanIndex;                // 假日时段数组下标，对应配置时段
        public byte[] reserved = new byte[512];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szName", "nWeekPlanIndex", "nHolidayPlanIndex", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP implements Structure.ByValue {
        }
    }

    // 门禁权限组绑定人员信息
    public static class STU_DOOR_CFG_GROUP_BIND_PERSON_INFO extends Structure {
        public byte[] szCode = new byte[128];            // 人员ID
        public byte[] reserved = new byte[512];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szCode", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_BIND_PERSON_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_BIND_PERSON_INFO implements Structure.ByValue {
        }
    }

    //门禁权限组与通行时段关系信息
    public static class STU_DOOR_CFG_GROUP_PASS_TIME extends Structure {
        public int bEnable;                            // 是否使能
        public int emAccessType;                        // 访问验证方式,EM_DOOR_ACCESS_TYPE
        public int nPassTimeID;                        // 通行时段 ID
        public byte[] szGroupName = new byte[128];        // 权限组名称
        public byte[] szPassTimeName = new byte[128];        // 通行时段名称
        public byte[] reserved = new byte[256];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "emAccessType", "nPassTimeID",
                    "szGroupName", "szPassTimeName", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_PASS_TIME implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_PASS_TIME implements Structure.ByValue {
        }
    }

    // 门禁通道的门磁信号配置
    public static class STU_DOOR_CFG_OPEN_SIGNAL extends Structure {
        public int nSingnal;                            // -1-未知，0-关门，1-开门；默认开门
        public byte[] reserved = new byte[256];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nSingnal", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_OPEN_SIGNAL implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_OPEN_SIGNAL implements Structure.ByValue {
        }
    }

    // 门禁开门时间延迟配置
    public static class STU_DOOR_CFG_OPEN_TIME extends Structure {
        // 延迟时间，单位 ms
        // 注意：此字段和开门控制时所指定的开门延时互斥
        //		 如果开门控制接口（DOOR_CFG_OPT_DOOR_OPEN_ONCE/STU_DOOR_OPEN_ONCE_IN_PARAM）指定了开门延时，则此字段无效
        public int nTime;
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nTime", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_OPEN_TIME implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_OPEN_TIME implements Structure.ByValue {
        }
    }

    //获取门禁通过时间列表输入参数
    public static class STU_DOOR_CFG_PASS_TIMES_GET_IN_PARAM extends Structure {
        public int bCondition;                    // 是否启用条件查询
        public int nID;                        // 启用条件查询-需要查询的通过时段ID（可选）, <=0 不查询
        public int emPassTimeType;                // 启用条件查询-需要查询的通过时段类型（可选），,EM_DOOR_PASS_TIME_TYPE中，DOOR_PASS_TIME_TYPE_UNKNOWN 不查询
        public byte[] szName = new byte[128];        // 启用条件查询-需要查询的人员姓名（可选），为空不查询
        public byte[] reserved = new byte[512];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bCondition", "nID", "emPassTimeType",
                    "szName", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PASS_TIMES_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PASS_TIMES_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    //获取门禁通过时间列表输出参数
    public static class STU_DOOR_CFG_PASS_TIMES_GET_OUT_PARAM extends Structure {
        public int nPassTimeCount;                // 实际时段个数
        // 通过时段数组
        public STU_DOOR_CFG_PASS_TIME[] stuPassTimeArr = new STU_DOOR_CFG_PASS_TIME[NetDefs.MAX_DOOR_PASS_TIME_NUM];
        public byte[] reserved = new byte[64];    // 保留参数

        public STU_DOOR_CFG_PASS_TIMES_GET_OUT_PARAM() {
            for (int i = 0; i < stuPassTimeArr.length; i++) {
                stuPassTimeArr[i] = new STU_DOOR_CFG_PASS_TIME();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nPassTimeCount", "stuPassTimeArr", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PASS_TIMES_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PASS_TIMES_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    //添加门禁通过时间输入参数
    public static class STU_DOOR_CFG_PASS_TIME_ADD_IN_PARAM extends Structure {
        public byte[] szName = new byte[128];        // 通过时间段名称
        public int emPassTimeType;                // 通过时间类型，EM_DOOR_PASS_TIME_TYPE
        public int nTimeSecCount;                // 需要插入的时段个数，不超过 MAX_DOOR_PASS_TIME_SEC_NUM
        // 时段数组
        public STU_TIME_SECTION_I[] stuPassTimeSecArr = new STU_TIME_SECTION_I[32];
        public byte[] reserved = new byte[128];    // 保留参数

        public STU_DOOR_CFG_PASS_TIME_ADD_IN_PARAM() {
            for (int i = 0; i < stuPassTimeSecArr.length; i++) {
                stuPassTimeSecArr[i] = new STU_TIME_SECTION_I();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szName", "emPassTimeType", "nTimeSecCount", "stuPassTimeSecArr", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PASS_TIME_ADD_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PASS_TIME_ADD_IN_PARAM implements Structure.ByValue {
        }
    }

    //添加门禁通过时段输出参数
    public static class STU_DOOR_CFG_PASS_TIME_ADD_OUT_PARAM extends Structure {
        public int nID;                        // 时段 ID
        public byte[] reserved = new byte[256];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nID", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PASS_TIME_ADD_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PASS_TIME_ADD_OUT_PARAM implements Structure.ByValue {
        }
    }

    //更新门禁通过时段输入参数
    public static class STU_DOOR_CFG_PASS_TIME_UPDATE_IN_PARAM extends Structure {
        public int nID;                                // 门禁时段 ID
        public byte[] szName = new byte[128];                // 通过时段名称（可选），如果为空则不更新
        public int emType;                                // 时段类型（可选），EM_DOOR_PASS_TIME_TYPE，如果为 DOOR_PASS_TIME_TYPE_UNKNOWN 则无效
        public int nTimeSecCount;                        // 时段个数（可选），如果 <= 0,则时段不更新
        // 时段数组（可选）
        public STU_TIME_SECTION_I[] stuPassTimeSecArr = new STU_TIME_SECTION_I[32];
        // 如果为 NULL，则不更新
        public byte[] reserved = new byte[256];            // 保留参数

        public STU_DOOR_CFG_PASS_TIME_UPDATE_IN_PARAM() {
            for (int i = 0; i < stuPassTimeSecArr.length; i++) {
                stuPassTimeSecArr[i] = new STU_TIME_SECTION_I();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nID", "szName", "emType",
                    "nTimeSecCount", "stuPassTimeSecArr", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PASS_TIME_UPDATE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PASS_TIME_UPDATE_IN_PARAM implements Structure.ByValue {
        }
    }

    //更新门禁通过时段输出参数
    public static class STU_DOOR_CFG_PASS_TIME_UPDATE_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PASS_TIME_UPDATE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PASS_TIME_UPDATE_OUT_PARAM implements Structure.ByValue {
        }
    }

    //删除门禁通过时间输入参数
    public static class STU_DOOR_CFG_PASS_TIME_REMOVE_IN_PARAM extends Structure {
        public int nID;                            // 门禁通过时间 ID 号
        public byte[] reserved = new byte[64];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nID", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PASS_TIME_REMOVE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PASS_TIME_REMOVE_IN_PARAM implements Structure.ByValue {
        }
    }

    //删除门禁通过时间输出参数
    public static class STU_DOOR_CFG_PASS_TIME_REMOVE_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PASS_TIME_REMOVE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PASS_TIME_REMOVE_OUT_PARAM implements Structure.ByValue {
        }
    }

    //获取门禁权限组列表输入参数
    public static class STU_DOOR_CFG_GROUPS_GET_IN_PARAM extends Structure {
        public byte[] reserved = new byte[512];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUPS_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUPS_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    //获取门禁权限组列表输出参数
    public static class STU_DOOR_CFG_GROUPS_GET_OUT_PARAM extends Structure {
        // 获取的权限组个数，目前最多MAX_DOOR_GROUP_NUM个
        public int nCount;
        // 门禁权限组数组
        public STU_DOOR_CFG_GROUP[] stuGroupArr = new STU_DOOR_CFG_GROUP[NetDefs.MAX_DOOR_GROUP_NUM];
        // 保留参数
        public byte[] reserved = new byte[64];

        public STU_DOOR_CFG_GROUPS_GET_OUT_PARAM() {
            for (int i = 0; i < stuGroupArr.length; i++) {
                stuGroupArr[i] = new STU_DOOR_CFG_GROUP();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nCount", "stuGroupArr", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUPS_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUPS_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    //添加门禁权限组输入参数
    public static class STU_DOOR_CFG_GROUP_ADD_IN_PARAM extends Structure {
        public byte[] szName = new byte[128];        // 门禁权限组名称
        public int nWeekPlanIndex;                // 周计划时段数组下标，对应配置时段
        public int nHolidayPlanIndex;            // 假日时段数组下标，对应配置时段
        public byte[] reserved = new byte[512];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szName", "nWeekPlanIndex", "nHolidayPlanIndex", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_ADD_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_ADD_IN_PARAM implements Structure.ByValue {
        }
    }

    //添加门禁权限组输出参数
    public static class STU_DOOR_CFG_GROUP_ADD_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[512];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_ADD_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_ADD_OUT_PARAM implements Structure.ByValue {
        }
    }

    //更新门禁权限组信息输入参数
    public static class STU_DOOR_CFG_GROUP_UPDATE_IN_PARAM extends Structure {
        public byte[] szOldName = new byte[128];            // 原门禁权限组名称，非空表示有效

        public int bModifyName;                        // 是否修改名称
        public byte[] szNewName = new byte[128];            // 需要更新的权限组名称，选填，bModifyName == TRUE时有效

        public int bModifyWeekPlan;                    // 是否修改周计划时段
        public int nWeekPlanIndex;                        // 周计划时段数组下标，对应配置时段，选填，bModifyWeekPlan == TRUE时有效

        public int bModifyHolidayPlan;                    // 是否修改假日时段
        public int nHolidayPlanIndex;                    // 假日时段数组下标，对应配置时段，选填，bModifyHolidayPlan == TRUE时有效

        public byte[] reserved = new byte[512];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szOldName", "bModifyName", "szNewName",
                    "bModifyWeekPlan", "nWeekPlanIndex", "bModifyHolidayPlan", "nHolidayPlanIndex",
                    "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_UPDATE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_UPDATE_IN_PARAM implements Structure.ByValue {
        }
    }

    //更新门禁权限组信息输出参数
    public static class STU_DOOR_CFG_GROUP_UPDATE_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_UPDATE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_UPDATE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 删除门禁权限组输入参数(不支持含中文名删除)
    public static class STU_DOOR_CFG_GROUP_REMOVE_IN_PARAM extends Structure {
        public int nGroupCount;                    // 需要删除的权限组数量
        public Pointer lpszGroupNames;                    // 需要删除的权限组名称，支持同时删除多个权限组，权限组名之间用‘|’分割
        public byte[] reserved = new byte[512];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nGroupCount", "lpszGroupNames", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_REMOVE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_REMOVE_IN_PARAM implements Structure.ByValue {
        }
    }

    //删除门禁权限组输出参数
    public static class STU_DOOR_CFG_GROUP_REMOVE_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_REMOVE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_REMOVE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 门禁删除权限组信息
    public static class STU_GROUP_REMOVE_INFO extends Structure {
        public byte[] szName = new byte[128];        // 需要删除的权限组名称
        public byte[] reserved = new byte[512];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szName", "reserved"});
        }

        public static class ByReference extends STU_GROUP_REMOVE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_GROUP_REMOVE_INFO implements Structure.ByValue {
        }
    }

    // 删除门禁权限组输入参数Ex(支持含中文名删除)
    public static class STU_DOOR_CFG_GROUP_REMOVE_IN_PARAM_EX extends Structure {
        public int nGroupCount;                // 需要删除的权限组数量
        public Pointer lpstGroupInfoAry;            // 需要删除的权限组信息数组, 外部开辟数组STU_GROUP_REMOVE_INFO*
        public byte[] reserved = new byte[512];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nGroupCount", "lpstGroupInfoAry", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_REMOVE_IN_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_REMOVE_IN_PARAM_EX implements Structure.ByValue {
        }
    }

    // 删除门禁权限组输出参数Ex
    public static class STU_DOOR_CFG_GROUP_REMOVE_OUT_PARAM_EX extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_REMOVE_OUT_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_REMOVE_OUT_PARAM_EX implements Structure.ByValue {
        }
    }

    // 获取权限组绑定的人员输入参数
    public static class STU_DOOR_CFG_GROUP_GET_BIND_PERSON_IN_PARAM extends Structure {
        public byte[] szGroupName = new byte[128];        // 权限组名称
        public int nOffset;                            // 查询起始偏移，从0开始
        public int nCount;                                // 查询数量，最大不超过MAX_DOOR_GROUP_BIND_PERSON_COUNT
        public byte[] reserved = new byte[512];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szGroupName", "nOffset", "nCount", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_GET_BIND_PERSON_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_GET_BIND_PERSON_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取权限组绑定的人员输出参数
    public static class STU_DOOR_CFG_GROUP_GET_BIND_PERSON_OUT_PARAM extends Structure {
        // 查询到的实际人数，单次查询最大MAX_DOOR_GROUP_FIND_BIND_PERSON_COUNT
        public int nPersonCount;
        // 查询到的人员信息数组
        public STU_DOOR_CFG_GROUP_BIND_PERSON_INFO[] stPersonInfos = new STU_DOOR_CFG_GROUP_BIND_PERSON_INFO[NetDefs.MAX_DOOR_GROUP_FIND_BIND_PERSON_COUNT];
        // 保留参数
        public byte[] reserved = new byte[512];

        public STU_DOOR_CFG_GROUP_GET_BIND_PERSON_OUT_PARAM() {
            for (int i = 0; i < stPersonInfos.length; i++) {
                stPersonInfos[i] = new STU_DOOR_CFG_GROUP_BIND_PERSON_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nPersonCount", "stPersonInfos", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_GET_BIND_PERSON_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_GET_BIND_PERSON_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 绑定人员到对应权限组输入参数
    public static class STU_DOOR_CFG_GROUP_BIND_PERSON_IN_PARAM extends Structure {
        // 权限组名称
        public byte[] szGroupName = new byte[128];
        // 需绑定的人数，单次绑定最大MAX_DOOR_GROUP_BIND_PERSON_COUNT
        public int nPersonCount;
        // 绑定人员信息
        public STU_DOOR_CFG_GROUP_BIND_PERSON_INFO[] stPersonInfos = new STU_DOOR_CFG_GROUP_BIND_PERSON_INFO[NetDefs.MAX_DOOR_GROUP_BIND_PERSON_COUNT];
        // 保留参数
        public byte[] reserved = new byte[512];

        public STU_DOOR_CFG_GROUP_BIND_PERSON_IN_PARAM() {
            for (int i = 0; i < stPersonInfos.length; i++) {
                stPersonInfos[i] = new STU_DOOR_CFG_GROUP_BIND_PERSON_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szGroupName", "nPersonCount", "stPersonInfos", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_BIND_PERSON_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_BIND_PERSON_IN_PARAM implements Structure.ByValue {
        }
    }

    // 绑定人员到对应权限组输出参数
    public static class STU_DOOR_CFG_GROUP_BIND_PERSON_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[512];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_BIND_PERSON_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_BIND_PERSON_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 删除权限组中绑定的人员输入参数
    public static class STU_DOOR_CFG_GROUP_UNBIND_PERSON_IN_PARAM extends Structure {
        // 权限组名称
        public byte[] szGroupName = new byte[128];
        // 需绑定的人数，单次绑定最大MAX_DOOR_GROUP_BIND_PERSON_COUNT
        public int nPersonCount;
        // 绑定人员信息
        public STU_DOOR_CFG_GROUP_BIND_PERSON_INFO[] stPersonInfos = new STU_DOOR_CFG_GROUP_BIND_PERSON_INFO[NetDefs.MAX_DOOR_GROUP_BIND_PERSON_COUNT];
        // 保留参数
        public byte[] reserved = new byte[512];

        public STU_DOOR_CFG_GROUP_UNBIND_PERSON_IN_PARAM() {
            for (int i = 0; i < stPersonInfos.length; i++) {
                stPersonInfos[i] = new STU_DOOR_CFG_GROUP_BIND_PERSON_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szGroupName", "nPersonCount", "stPersonInfos", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_UNBIND_PERSON_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_UNBIND_PERSON_IN_PARAM implements Structure.ByValue {
        }
    }

    // 删除权限组中绑定的人员输出参数
    public static class STU_DOOR_CFG_GROUP_UNBIND_PERSON_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[512];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_UNBIND_PERSON_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_UNBIND_PERSON_OUT_PARAM implements Structure.ByValue {
        }
    }

    //获取权限组与通行时段关系信息输入参数
    public static class STU_DOOR_CFG_GROUP_PASS_TIMES_GET_IN_PARAM extends Structure {
        public int bCondition;                            // 是否条件查询
        public byte[] szGroupName = new byte[128];        // 启用条件-按权限组名称（可选）
        public int nPassTimeID;                        // 启用条件-按通行时段ID（可选）
        // 如果两者都启用，已权限组名查询优先
        public byte[] reserved = new byte[256];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bCondition", "szGroupName", "nPassTimeID", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_PASS_TIMES_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_PASS_TIMES_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    //获取权限组与通行时段关系信息输出参数
    public static class STU_DOOR_CFG_GROUP_PASS_TIMES_GET_OUT_PARAM extends Structure {
        public int nCount;                    // 关系信息个数
        // 权限组与通行时段关系数组
        public STU_DOOR_CFG_GROUP_PASS_TIME[] stuGroupPassTimeArr = new STU_DOOR_CFG_GROUP_PASS_TIME[NetDefs.MAX_DOOR_GROUP_PASS_TIME_NUM];
        public byte[] reserved = new byte[64];            // 保留参数

        public STU_DOOR_CFG_GROUP_PASS_TIMES_GET_OUT_PARAM() {
            for (int i = 0; i < stuGroupPassTimeArr.length; i++) {
                stuGroupPassTimeArr[i] = new STU_DOOR_CFG_GROUP_PASS_TIME();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nCount", "stuGroupPassTimeArr", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_PASS_TIMES_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_PASS_TIMES_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    //添加权限组与通行时段关系信息输入参数
    public static class STU_DOOR_CFG_GROUP_PASS_TIME_ADD_IN_PARAM extends Structure {
        public int bEnable;                            // 是否使能
        public int emAccessType;                        // 访问验证方式，EM_DOOR_ACCESS_TYPE
        public byte[] szGroupName = new byte[128];        // 权限组名称，必须存在该组名
        public int nPassTimeID;                        // 通行时段ID，必须存在该时段
        public byte[] reserved = new byte[256];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "emAccessType", "szGroupName", "nPassTimeID", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_PASS_TIME_ADD_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_PASS_TIME_ADD_IN_PARAM implements Structure.ByValue {
        }
    }

    //添加权限组与通行时段关系信息输出参数
    public static class STU_DOOR_CFG_GROUP_PASS_TIME_ADD_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_PASS_TIME_ADD_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_PASS_TIME_ADD_OUT_PARAM implements Structure.ByValue {
        }
    }

    //更新权限组与通行时段关系信息输入参数
    public static class STU_DOOR_CFG_GROUP_PASS_TIME_UPDATE_IN_PARAM extends Structure {
        public int bEnable;                            // 是否使能
        public int emAccessType;                        // 访问验证方式,EM_DOOR_ACCESS_TYPE
        public byte[] szGroupName = new byte[128];        // 权限组名称，必须存在该组名
        public int nPassTimeID;                        // 通行时段ID，必须存在该时段
        public byte[] reserved = new byte[256];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bEnable", "emAccessType", "szGroupName", "nPassTimeID", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_PASS_TIME_UPDATE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_PASS_TIME_UPDATE_IN_PARAM implements Structure.ByValue {
        }
    }

    //更新权限组与通行时段关系信息输出参数
    public static class STU_DOOR_CFG_GROUP_PASS_TIME_UPDATE_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_PASS_TIME_UPDATE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_PASS_TIME_UPDATE_OUT_PARAM implements Structure.ByValue {
        }
    }

    //删除权限组与通行时段关系信息输入参数
    public static class STU_DOOR_CFG_GROUP_PASS_TIME_REMOVE_IN_PARAM extends Structure {
        public byte[] szGroupName = new byte[128];        // 权限组名称，必须存在该组
        public int nPassTimeID;                        // 通行时段ID，必须存在该时段
        public byte[] reserved = new byte[256];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szGroupName", "nPassTimeID", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_PASS_TIME_REMOVE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_PASS_TIME_REMOVE_IN_PARAM implements Structure.ByValue {
        }
    }

    //删除权限组与通行时段关系信息输出参数
    public static class STU_DOOR_CFG_GROUP_PASS_TIME_REMOVE_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_GROUP_PASS_TIME_REMOVE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_GROUP_PASS_TIME_REMOVE_OUT_PARAM implements Structure.ByValue {
        }
    }

    //查询人员信息输入参数
    public static class STU_DOOR_CFG_PERSONS_GET_IN_PARAM extends Structure {
        public int emPersonType;                    // 需查询的人员类型（必选）,EM_DOOR_PERSON_TYPE
        public int nOffset;                        // 一次查询的人员偏移索引，0 则从头开始查询
        public int nCount;                            // 一次查询的人员数目, 查询一次不超过 MAX_ONCE_DOOR_PERSON_GET_NUM 个
        public int bCondition;                        // 是否启用条件查询
        public byte[] szGroupName = new byte[128];    // 启用条件查询有效-所属权限组（可选）
        public byte[] szCodeLike = new byte[128];        // 启用条件查询有效-编号模糊条件（可选）
        public byte[] szNameLike = new byte[128];        // 启用条件查询有效-姓名模糊条件（可选）
        public STU_TIME_EX stuGuestAccessStartTime;        // 访客准入开始时间（可选）
        public STU_TIME_EX stuGuestAccessEndTime;            // 访客准入结束时间（可选）
        public byte[] szCode = new byte[128];         // 启用条件查询有效-编号精确查询条件(可选)
        public byte[] reserved = new byte[352];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emPersonType", "nOffset", "nCount",
                    "bCondition", "szGroupName", "szCodeLike", "szNameLike",
                    "stuGuestAccessStartTime", "stuGuestAccessEndTime", "szCode", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSONS_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSONS_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    //查询人员信息输出参数
    public static class STU_DOOR_CFG_PERSONS_GET_OUT_PARAM extends Structure {
        public int nPersonCount;                    // 人员个数
        // 查询到的人员信息数组
        public STU_DOOR_PERSON_INFO[] stuPersonArr = new STU_DOOR_PERSON_INFO[NetDefs.MAX_DOOR_ONCE_PERSON_GET_NUM];
        public byte[] reserved = new byte[64];        // 保留参数

        public STU_DOOR_CFG_PERSONS_GET_OUT_PARAM() {
            for (int i = 0; i < stuPersonArr.length; i++) {
                stuPersonArr[i] = new STU_DOOR_PERSON_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nPersonCount", "stuPersonArr", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSONS_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSONS_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    //添加人员信息输入参数
    public static class STU_DOOR_CFG_PERSON_ADD_IN_PARAM extends Structure {
        public STU_DOOR_PERSON_INFO stuPerson;                        // 人员信息
        public STU_FACE_IMAGE stuFace;                        // 人员人脸图片，如果有图片数据则添加；
        public int nParams1;                        // 参数 1（暂不启用）

        public int bDisableAddInfo;                // 是否修改人员信息，TRUE - 禁用，FALSE - 不禁用，默认不禁用
        public int bDisableAddImage;                // 是否修改人脸图片，TRUE - 禁用，FALSE - 不禁用，默认不禁用


        public byte[] reserved = new byte[52];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stuPerson", "stuFace", "nParams1",
                    "bDisableAddInfo", "bDisableAddImage", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSON_ADD_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSON_ADD_IN_PARAM implements Structure.ByValue {
        }
    }

    //添加人员信息输出参数
    public static class STU_DOOR_CFG_PERSON_ADD_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSON_ADD_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSON_ADD_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 更新人员信息输入参数，可用于单独修改人员信息/人脸图片，或同时修改
    public static class STU_DOOR_CFG_PERSON_UPDATE_IN_PARAM extends Structure {
        public int bDisableUpdateInfo;            // 是否修改人员信息，TRUE - 禁用，FALSE - 不禁用，默认不禁用
        public STU_DOOR_PERSON_INFO stuPerson;                    // 人员信息
        // 人员编号必须存在，不存在则失败.

        public int bDisableUpdateImage;        // 是否修改人脸图片，TRUE - 禁用，FALSE - 不禁用，默认不禁用
        public STU_FACE_IMAGE stuFace;                    // 人员人脸图片，如果有图片数据则更新

        public int nParams1;                    // 参数 1（暂不启用）
        public byte[] reserved = new byte[244];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bDisableUpdateInfo", "stuPerson",
                    "bDisableUpdateImage", "stuFace", "nParams1", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSON_UPDATE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSON_UPDATE_IN_PARAM implements Structure.ByValue {
        }
    }

    //更新人员信息输出参数
    public static class STU_DOOR_CFG_PERSON_UPDATE_OUT_PARAM extends Structure {
        public int nPersonID;                        // 人员内部 ID，不能设置
        public byte[] szFaceToken = new byte[64];        // 人脸 Token
        public byte[] reserved = new byte[64];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nPersonID", "szFaceToken", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSON_UPDATE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSON_UPDATE_OUT_PARAM implements Structure.ByValue {
        }
    }

    //设置人员类型输入参数
    public static class STU_DOOR_CFG_PERSON_TYPE_SET_IN_PARAM extends Structure {
        public byte[] szCode = new byte[128];        // 人员编号
        public int emType;                        // 人员类型,EM_DOOR_PERSON_TYPE
        // 未知类型默认按黑名单类型
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szCode", "emType", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSON_TYPE_SET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSON_TYPE_SET_IN_PARAM implements Structure.ByValue {
        }
    }

    //设置人员类型输出参数
    public static class STU_DOOR_CFG_PERSON_TYPE_SET_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSON_TYPE_SET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSON_TYPE_SET_OUT_PARAM implements Structure.ByValue {
        }
    }

    //删除指定编号人员信息输入参数
    public static class STU_DOOR_CFG_PERSON_REMOVE_IN_PARAM extends Structure {
        public byte[] szCode = new byte[128];                // 需要删除的人员编号
        public byte[] szCertificateType = new byte[64];    // 证件类型，可选，空则无效
        public int nParams1;                            // 参数 1（暂不启用）
        public byte[] reserved = new byte[64];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szCode", "szCertificateType", "nParams1", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSON_REMOVE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSON_REMOVE_IN_PARAM implements Structure.ByValue {
        }
    }

    //删除指定编号人员信息输出参数
    public static class STU_DOOR_CFG_PERSON_REMOVE_OUT_PARAM extends Structure {
        public int nError;                        // 错误码
        public byte[] szCode = new byte[128];        // 人员编号
        public byte[] reserved = new byte[32];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nError", "szCode", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSON_REMOVE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSON_REMOVE_OUT_PARAM implements Structure.ByValue {
        }
    }

    //获取指定人员编号的人员关联图片输入参数
    public static class STU_DOOR_CFG_PERSON_IMAGE_GET_IN_PARAM extends Structure {
        public byte[] szCode = new byte[128];                // 人员编号
        public byte[] szImagePath = new byte[260];        // 保存到本地的图片路径
        public byte[] szCertificateType = new byte[64];    // 证件类型，可选，空则无效
        public byte[] reserved = new byte[64];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szCode", "szImagePath", "szCertificateType", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSON_IMAGE_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSON_IMAGE_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    //获取指定人员编号的人员关联图片输出参数
    public static class STU_DOOR_CFG_PERSON_IMAGE_GET_OUT_PARAM extends Structure {
        public int nImageLength;                    // 图片大小（字节）
        public byte[] szImagePath = new byte[260];    // 图片路径
        public byte[] reserved = new byte[64];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nImageLength", "szImagePath", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSON_IMAGE_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSON_IMAGE_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 获取指定人员编号的人员关联图片信息输入参数
    public static class STU_DOOR_CFG_PERSON_IMAGE_INFO_GET_IN_PARAM extends Structure {
        public byte[] szCode = new byte[128];                // 人员编号
        public byte[] szCertificateType = new byte[64];    // 证件类型，可选，空则无效
        public int nInBufSize;                            // 申请的图片缓存大小，可选，不填则不获取，不超过1M
        public byte[] reserved = new byte[60];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szCode", "szCertificateType", "nInBufSize", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSON_IMAGE_INFO_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSON_IMAGE_INFO_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取指定人员编号的人员关联图片信息输出参数
    public static class STU_DOOR_CFG_PERSON_IMAGE_INFO_GET_OUT_PARAM extends Structure {
        public int nPersonID;                        // 人员ID
        public byte[] szFaceToken = new byte[64];        // 人脸标识符
        public Pointer lpOutBuffer;                    // 图片二进制数据，需外部申请，大小为nInBufSize
        public int nOutBufSize;                    // 图片数据大小
        public byte[] reserved = new byte[248];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nPersonID", "szFaceToken", "lpOutBuffer",
                    "nOutBufSize", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSON_IMAGE_INFO_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSON_IMAGE_INFO_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 门禁人员查询输入参数
    public static class STU_DOOR_CFG_PERSON_COUNT_GET_IN_PARAM extends Structure {
        public int emType;                                // 人员类型,EM_DOOR_PERSON_TYPE
        public int bCondition;                            // 是否启用条件查询
        public byte[] szGroupName = new byte[128];        // 启用条件查询有效-所属权限组（可选）
        public byte[] szCodeLike = new byte[128];            // 启用条件查询有效-编号模糊条件（可选）
        public byte[] szNameLike = new byte[128];            // 启用条件查询有效-姓名模糊条件（可选）
        public byte[] reserved = new byte[256];            // 预留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emType", "bCondition", "szGroupName",
                    "szCodeLike", "szNameLike", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSON_COUNT_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSON_COUNT_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 门禁人员查询输出参数
    public static class STU_DOOR_CFG_PERSON_COUNT_GET_OUT_PARAM extends Structure {
        public int emType;                        // 人员类型,EM_DOOR_PERSON_TYPE
        public int nPersonCount;                // 人员个数
        public byte[] reserved = new byte[64];    // 预留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emType", "nPersonCount", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSON_COUNT_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSON_COUNT_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    //////////////////////////////////////////////////////////////////////////////////////
    // 人员信息输入参数
    public static class STU_DOOR_CFG_PERSON_MULTI_ADD_INFO extends Structure {
        public STU_DOOR_PERSON_INFO stPersonInfo = new STU_DOOR_PERSON_INFO();        // 人员信息
        public STU_FACE_IMAGE stFaceImage = new STU_FACE_IMAGE();                // 人脸图片
        public int nCardNumber;            // 导入的卡数量，不需要则填0，目前最多支持MAX_DOOR_MULTI_ADD_CARD_NUM个
        public STU_DOOR_CARD_INFO[] stCardInfos = new STU_DOOR_CARD_INFO[NetDefs.MAX_DOOR_MULTI_ADD_CARD_NUM];    // 卡信息数组

        public STU_DOOR_CFG_PERSON_MULTI_ADD_INFO() {
            for (int i = 0; i < stCardInfos.length; i++) {
                stCardInfos[i] = new STU_DOOR_CARD_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stPersonInfo", "stFaceImage", "nCardNumber", "stCardInfos"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSON_MULTI_ADD_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSON_MULTI_ADD_INFO implements Structure.ByValue {
        }
    }

    // 批量添加人员信息输入参数
    public static class STU_DOOR_CFG_PERSON_MULTI_ADD_PARAM extends Structure {
        // 单次批量导入人员数量, 最大MAX_DOOR_MULTI_ADD_PERSON_NUM个
        public int nPersonCount;
        // 单次批量导入人员信息数组
        public STU_DOOR_CFG_PERSON_MULTI_ADD_INFO[] stPersonInfoArray = new STU_DOOR_CFG_PERSON_MULTI_ADD_INFO[NetDefs.MAX_DOOR_MULTI_ADD_PERSON_NUM];
        // 导入模式，0 - 批量添加，1 - 批量修改
        public int nMode;
        // 参数 1（暂不启用）
        public int nParams1;
        // 保留参数
        public byte[] reserved = new byte[64];

        public STU_DOOR_CFG_PERSON_MULTI_ADD_PARAM() {
            for (int i = 0; i < stPersonInfoArray.length; i++) {
                stPersonInfoArray[i] = new STU_DOOR_CFG_PERSON_MULTI_ADD_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nPersonCount", "stPersonInfoArray", "nMode", "nParams1", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSON_MULTI_ADD_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSON_MULTI_ADD_PARAM implements Structure.ByValue {
        }
    }

    // 门禁批量导入人员结果
    public static class STU_DOOR_CFG_PERSON_MULTI_ADD_RESULT extends Structure {
        public int bSuccess;                        // 当前人员导入是否成功
        public int nErrorCode;                        // 当前人员导入错误码

        public byte[] szCode = new byte[128];            // 当前导入的人员ID，与导入时传入的szCode(人员编号)对应
        public byte[] szFaceToken = new byte[64];        // 当前人员导入成功后返回的faceToken

        public int nCurCount;                        // 已导入的人员数量，从1开始，-1表示接口调用失败
        public int nTotal;                            // 批量导入总数，对应导入时指定的数量
        // *注：nCurCount >= （total - 1）表示此次批量导入已完成

        public byte[] reserved = new byte[512];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bSuccess", "nErrorCode", "szCode",
                    "szFaceToken", "nCurCount", "nTotal", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_PERSON_MULTI_ADD_RESULT implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_PERSON_MULTI_ADD_RESULT implements Structure.ByValue {
        }
    }

    //////////////////////////////////////////////////////////////////////////////////////
    //获取门禁卡号信息输入参数
    public static class STU_DOOR_CFG_CARDS_GET_IN_PARAM extends Structure {
        public int nOffset;                            // 查询的偏移位置
        public int nCount;                                // 查询的卡号个数，不超过MAX_DOOR_ONCE_CARD_GET_NUM
        public int bCondition;                            // 是否条件查询
        // 如果不启用条件查询则获取所有卡号信息
        public byte[] szPersonCode = new byte[128];        // 启用条件查询-人员编号（必选）
        public byte[] szCardID = new byte[128];            // 启用条件查询-卡号（可选）
        public byte[] reserved = new byte[256];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nOffset", "nCount", "bCondition",
                    "szPersonCode", "szCardID", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_CARDS_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_CARDS_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    //获取门禁卡号信息输出参数
    public static class STU_DOOR_CFG_CARDS_GET_OUT_PARAM extends Structure {
        public int nCardCount;                    // 实际获取的卡号信息个数
        // 卡号信息数组
        public STU_DOOR_CARD_INFO[] stuCardArr = new STU_DOOR_CARD_INFO[NetDefs.MAX_DOOR_ONCE_CARD_GET_NUM];
        public byte[] reserved = new byte[64];    // 保留参数

        public STU_DOOR_CFG_CARDS_GET_OUT_PARAM() {
            for (int i = 0; i < stuCardArr.length; i++) {
                stuCardArr[i] = new STU_DOOR_CARD_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nCardCount", "stuCardArr", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_CARDS_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_CARDS_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    //添加门禁卡信息输入参数
    public static class STU_DOOR_CFG_CARD_ADD_IN_PARAM extends Structure {
        public STU_DOOR_CARD_INFO stuCard;                    // 卡信息
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stuCard", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_CARD_ADD_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_CARD_ADD_IN_PARAM implements Structure.ByValue {
        }
    }

    //添加门禁卡信息输出参数
    public static class STU_DOOR_CFG_CARD_ADD_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_CARD_ADD_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_CARD_ADD_OUT_PARAM implements Structure.ByValue {
        }
    }

    //更新门禁卡信息输入参数
    public static class STU_DOOR_CFG_CARD_UPDATE_IN_PARAM extends Structure {
        public STU_DOOR_CARD_INFO stuCard;                    // 卡信息
        // 卡编号必须存在
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stuCard", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_CARD_UPDATE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_CARD_UPDATE_IN_PARAM implements Structure.ByValue {
        }
    }

    //更新门禁卡信息输出参数
    public static class STU_DOOR_CFG_CARD_UPDATE_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_CARD_UPDATE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_CARD_UPDATE_OUT_PARAM implements Structure.ByValue {
        }
    }

    //删除门禁卡信息输入参数
    public static class STU_DOOR_CFG_CARD_REMOVE_IN_PARAM extends Structure {
        public byte[] szCardID = new byte[128];    // 卡信息
        public byte[] reserved = new byte[128];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szCardID", "reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_CARD_REMOVE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_CARD_REMOVE_IN_PARAM implements Structure.ByValue {
        }
    }

    //删除门禁卡信息输出参数
    public static class STU_DOOR_CFG_CARD_REMOVE_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_CFG_CARD_REMOVE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_CFG_CARD_REMOVE_OUT_PARAM implements Structure.ByValue {
        }
    }

    //查询访问历史记录输入参数
    public static class STU_DOOR_ACCESS_RECORDS_GET_IN_PARAM extends Structure {
        public int nOffset;                            // 查询偏移索引
        public int nCount;                                // 查询个数, 不能大于 MAX_DOOR_ONCE_ACCESS_RECORD_GET_NUM
        public byte[] szPersonCode = new byte[128];        // 人员编号 ID，为空表示查找所有人员
        public int emType;                                // 访问类型，EM_DOOR_ACCESS_TYPE，当DOOR_ACCESS_TYPE_UNKNOWN 表示查找所有类型
        public STU_TIME_EX stuStartTime;                        // 访问开始时间，0 表示不指定开始时间
        public STU_TIME_EX stuEndTime;                            // 访问结束时间，0 表示不指定结束时间
        public byte[] reserved = new byte[64];            // 保留参数

        public STU_DOOR_ACCESS_RECORDS_GET_IN_PARAM() {
            stuStartTime = new STU_TIME_EX();
            stuEndTime = new STU_TIME_EX();
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nOffset", "nCount", "szPersonCode",
                    "emType", "stuStartTime", "stuEndTime", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_RECORDS_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_RECORDS_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    //查询访问历史记录输出参数
    public static class STU_DOOR_ACCESS_RECORDS_GET_OUT_PARAM extends Structure {
        public int nRecordCount;                // 记录个数
        // 记录信息数组
        public STU_DOOR_ACCESS_RECORD_INFO[] stuRecordArr = new STU_DOOR_ACCESS_RECORD_INFO[NetDefs.MAX_DOOR_ONCE_ACCESS_RECORD_GET_NUM];
        public byte[] reserved = new byte[64];    // 保留参数

        public STU_DOOR_ACCESS_RECORDS_GET_OUT_PARAM() {
            for (int i = 0; i < stuRecordArr.length; i++) {
                stuRecordArr[i] = new STU_DOOR_ACCESS_RECORD_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nRecordCount", "stuRecordArr", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_RECORDS_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_RECORDS_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    //删除指定条件的访问记录输入参数
    public static class STU_DOOR_ACCESS_RECORDS_REMOVE_IN_PARAM extends Structure {
        public byte[] szPersonCode = new byte[128];        // 人员编号，为空表示所有人员
        public int emAccessType;                        // 访问类型，EM_DOOR_ACCESS_TYPE，当DOOR_ACCESS_TYPE_UNKNOWN 时表示所有类型
        public STU_TIME_EX stuStartTime;                        // 需删除的开始时间段，值为 0 不指定开始时间
        public STU_TIME_EX stuEndTime;                            // 需删除的结束时间段，值为 0 不指定结束时间
        public byte[] reserved = new byte[256];            // 保留参数

        public STU_DOOR_ACCESS_RECORDS_REMOVE_IN_PARAM() {
            stuStartTime = new STU_TIME_EX();
            stuEndTime = new STU_TIME_EX();
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szPersonCode", "emAccessType", "stuStartTime", "stuEndTime", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_RECORDS_REMOVE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_RECORDS_REMOVE_IN_PARAM implements Structure.ByValue {
        }
    }

    //删除指定条件的访问记录输出参数
    public static class STU_DOOR_ACCESS_RECORDS_REMOVE_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_RECORDS_REMOVE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_RECORDS_REMOVE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 获取访问记录条数输入参数
    public static class STU_DOOR_ACCESS_RECORDS_COUNT_GET_IN_PARAM extends Structure {
        public int bCondition;                            // 是否启用查询条件
        public byte[] szPersonCode = new byte[128];        // 人员编号，为空则表示查询所有人员的记录
        public int emAccessType;                        // DOOR_ACCESS_TYPE_UNKNOWN 表示查询所有类型, EM_DOOR_ACCESS_TYPE
        public STU_TIME_EX stuStartTime;                        // 查询开始时间，均为 0 表示不限制开始时间查询
        public STU_TIME_EX stuEndTime;                            // 查询结束时间，均为 0 表示不限制结束时间查询
        public byte[] reserved = new byte[128];            // 保留参数

        public STU_DOOR_ACCESS_RECORDS_COUNT_GET_IN_PARAM() {
            stuStartTime = new STU_TIME_EX();
            stuEndTime = new STU_TIME_EX();
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bCondition", "szPersonCode", "emAccessType",
                    "stuStartTime", "stuEndTime", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_RECORDS_COUNT_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_RECORDS_COUNT_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取访问记录条数输出参数
    public static class STU_DOOR_ACCESS_RECORDS_COUNT_GET_OUT_PARAM extends Structure {
        public int nCount;                                // 获取到的访问记录条数
        public byte[] reserved = new byte[16];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nCount", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_RECORDS_COUNT_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_RECORDS_COUNT_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 获取访问记录对应 ID 的抓图图片
    public static class STU_DOOR_ACCESS_RECORDS_IMAGE_GET_IN_PARAM extends Structure {
        public byte[] szImagePath = new byte[NetDefs.MAX_PATH];    // 需要保存的图片路径
        public int nID;                                        // 日志记录 ID
        public byte[] reserved = new byte[256];                    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szImagePath", "nID", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_RECORDS_IMAGE_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_RECORDS_IMAGE_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取访问记录对应 ID 的抓图图片
    public static class STU_DOOR_ACCESS_RECORDS_IMAGE_GET_OUT_PARAM extends Structure {
        public byte[] szImagePath = new byte[NetDefs.MAX_PATH];    // 图片路径
        public int nImageLength;                                // 图片大小, KB
        public byte[] reserved = new byte[64];                    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szImagePath", "nImageLength", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_RECORDS_IMAGE_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_RECORDS_IMAGE_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 获取访问记录对应 ID 的抓图图片Ex
    public static class STU_DOOR_ACCESS_RECORDS_IMAGE_GET_IN_PARAM_EX extends Structure {
        public int nID;                                        // 日志记录 ID
        public byte[] reserved = new byte[256];                    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nID", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_RECORDS_IMAGE_GET_IN_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_RECORDS_IMAGE_GET_IN_PARAM_EX implements Structure.ByValue {
        }
    }

    // 获取访问记录对应 ID 的抓图图片Ex
    public static class STU_DOOR_ACCESS_RECORDS_IMAGE_GET_OUT_PARAM_EX extends Structure {
        public Pointer lpszBinBuffer;                                // 图片数据
        public int nImageLength;                                // 图片大小, KB
        public byte[] reserved = new byte[64];                    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"lpszBinBuffer", "nImageLength", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_RECORDS_IMAGE_GET_OUT_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_RECORDS_IMAGE_GET_OUT_PARAM_EX implements Structure.ByValue {
        }
    }

    //图片数据
    public static class STU_IMAGE_DATA extends Structure {
        public Pointer pBuffer;                        // 图片数据
        public int nBufSize;                        // 图片数据大小
        public byte[] reserved = new byte[64];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"pBuffer", "nBufSize", "reserved"});
        }

        public static class ByReference extends STU_IMAGE_DATA implements Structure.ByReference {
        }

        public static class ByValue extends STU_IMAGE_DATA implements Structure.ByValue {
        }
    }

    //面板机显示-Log图片获取输入参数
    public static class STU_DOOR_ACCESS_VIEW_LOG_GET_IN_PARAM extends Structure {
        public byte[] szImagePath = new byte[260];    // 需获取的图片保存路径
        public byte[] reserved = new byte[256];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szImagePath", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_VIEW_LOG_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_VIEW_LOG_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    //面板机显示-Log图片获取输出参数
    public static class STU_DOOR_ACCESS_VIEW_LOG_GET_OUT_PARAM extends Structure {
        public int nImageLength;                        // 图片大小，单位：byte
        public byte[] szImagePath = new byte[260];        // 需获取的图片保存路径
        public byte[] reserved = new byte[64];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nImageLength", "szImagePath", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_VIEW_LOG_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_VIEW_LOG_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    //面板机显示-Log图片设置输入参数
    public static class STU_DOOR_ACCESS_VIEW_LOG_SET_IN_PARAM extends Structure {
        public STU_IMAGE_DATA stuImageData;                    // 图片数据
        public byte[] reserved = new byte[512];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stuImageData", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_VIEW_LOG_SET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_VIEW_LOG_SET_IN_PARAM implements Structure.ByValue {
        }
    }

    //面板机显示-Log图片设置输出参数
    public static class STU_DOOR_ACCESS_VIEW_LOG_SET_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_VIEW_LOG_SET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_VIEW_LOG_SET_OUT_PARAM implements Structure.ByValue {
        }
    }

    //面板机显示-清除log图片输入参数
    public static class STU_DOOR_ACCESS_VIEW_LOG_CLEAR_IN_PARAM extends Structure {
        public byte[] reserved = new byte[256];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_VIEW_LOG_CLEAR_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_VIEW_LOG_CLEAR_IN_PARAM implements Structure.ByValue {
        }
    }

    //面板机显示-清除log图片输出参数
    public static class STU_DOOR_ACCESS_VIEW_LOG_CLEAR_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_VIEW_LOG_CLEAR_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_VIEW_LOG_CLEAR_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 设置门禁自定义语音输入参数
    public static class STU_DOOR_ACCESS_VIEW_VOICE_SET_IN_PARAM extends Structure {
        public int nSoundBufSize;                // 语音数据大小
        public Pointer pSoundBuf;                    // 语音数据缓存
        public byte[] reserved = new byte[256];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nSoundBufSize", "pSoundBuf", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_VIEW_VOICE_SET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_VIEW_VOICE_SET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 设置门禁自定义语音输出参数
    public static class STU_DOOR_ACCESS_VIEW_VOICE_SET_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_VIEW_VOICE_SET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_VIEW_VOICE_SET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 查询自定义语音信息输入参数
    public static class STU_DOOR_ACCESS_VIEW_VOICE_INFO_GET_IN_PARAM extends Structure {
        public byte[] reserved = new byte[128];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_VIEW_VOICE_INFO_GET_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_VIEW_VOICE_INFO_GET_IN_PARAM implements Structure.ByValue {
        }
    }

    // 查询自定义语音信息输出参数
    public static class STU_DOOR_ACCESS_VIEW_VOICE_INFO_GET_OUT_PARAM extends Structure {
        public int bExist;                            // 是否存在自定义语音
        public byte[] reserved = new byte[256];        // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bExist", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_VIEW_VOICE_INFO_GET_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_VIEW_VOICE_INFO_GET_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 门禁开门一次输入参数
    public static class STU_DOOR_OPEN_ONCE_IN_PARAM extends Structure {
        // 开门后关门的延时秒数
        // 注意：此字段和配置（DEVICE_CFG_DOOR_OPEN_TIME/STU_DOOR_CFG_OPEN_TIME）的开门延时互斥
        //		 如果此字段为0，则开门延时按配置所指定的时间，否则按此字段指定的时间
        public int nMillionSeconds;
        // 保留参数
        public byte[] reserved = new byte[256];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMillionSeconds", "reserved"});
        }

        public static class ByReference extends STU_DOOR_OPEN_ONCE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_OPEN_ONCE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 门禁开门一次输出参数
    public static class STU_DOOR_OPEN_ONCE_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_OPEN_ONCE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_OPEN_ONCE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 门禁获取门状态输入参数
    public static class STU_DOOR_GET_STATUS_IN_PARAM extends Structure {
        public byte[] reserved = new byte[256];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_GET_STATUS_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_GET_STATUS_IN_PARAM implements Structure.ByValue {
        }
    }

    // 门禁获取门状态输出参数
    public static class STU_DOOR_GET_STATUS_OUT_PARAM extends Structure {
        public int emDoorStatus;                        // 当前门状态, EM_DOOR_STATUS_TYPE
        public byte[] reserved = new byte[256];            // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emDoorStatus", "reserved"});
        }

        public static class ByReference extends STU_DOOR_GET_STATUS_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_GET_STATUS_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 触发一次文字/语音提示输入参数
    public static class STU_DOOR_ACCESS_VIEW_SHOW_PROMPT_IN_PARAM extends Structure {
        // 0-显示提示语并播放提示音, 1-只显示提示语, 2-只播放提示音
        public int nType;
        // 自定义提示，请按以下格式填写信息：
        // 至多5行，每行至多26个字节
        // 英文时，每行至多26个字符，包含换行符"\n"
        // 中文时，按utf8编码计算，中文占用3个字节，故每行至多8个汉字 + "\n"
        // 中英混合时，按utf8编码计算，中文占用3个字节，故含换行符总长度不要超过26个字节
        // 例：“中英混合例子：abcd\n”，7 * 3 + 5
        public byte[] szCustomTips = new byte[NetDefs.MAX_DOOR_PROMPT_CUSTOM_TIP_LINES * NetDefs.MAX_DOOR_PROMPT_CUSTOM_TIP_SIZE];
        // 自定义文字显示时间, 单位ms
        public int nTipsTime;
        // （选填）自定义语音文件名，设备支持时可选择传入
        public byte[] szVoiceFileName = new byte[128];
        // 保留参数
        public byte[] reserved = new byte[130];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nType", "szCustomTips", "nTipsTime", "szVoiceFileName", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_VIEW_SHOW_PROMPT_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_VIEW_SHOW_PROMPT_IN_PARAM implements Structure.ByValue {
        }
    }

    // 触发一次文字/语音提示输出参数
    public static class STU_DOOR_ACCESS_VIEW_SHOW_PROMPT_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[64];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_ACCESS_VIEW_SHOW_PROMPT_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ACCESS_VIEW_SHOW_PROMPT_OUT_PARAM implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 开门附加信息 - 1: 开门发起者信息
    public static class STU_DOOR_OPEN_EXT_CALLER_INFO extends Structure {
        // 房间号
        public byte[] szRoomInfo = new byte[128];
        // 保留参数
        public byte[] reserved = new byte[256];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szRoomInfo", "reserved"});
        }

        public static class ByReference extends STU_DOOR_OPEN_EXT_CALLER_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_OPEN_EXT_CALLER_INFO implements Structure.ByValue {
        }
    }

    // 门禁开门一次输入参数Ex
    public static class STU_DOOR_OPEN_ONCE_IN_PARAM_EX extends Structure {
        // 开门后关门的延时秒数
        // 注意：此字段和配置（DEVICE_CFG_DOOR_OPEN_TIME/STU_DOOR_CFG_OPEN_TIME）的开门延时互斥
        //		 如果此字段为0，则开门延时按配置所指定的时间，否则按此字段指定的时间
        public int nMillionSeconds;

        // 根据定制需求指定附加信息
        // 0 - 不启用附加信息，默认
        // 1 - 附加开门发起者信息
        public int nExt;
        // 根据 nExt 指定具体结构体类型, void*
        public Pointer lpstExtInfo;
        // 附加信息结构体长度
        public int nExtInfoSize;

        // 保留参数
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMillionSeconds", "nExt", "lpstExtInfo", "nExtInfoSize", "reserved"});
        }

        public static class ByReference extends STU_DOOR_OPEN_ONCE_IN_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_OPEN_ONCE_IN_PARAM_EX implements Structure.ByValue {
        }
    }

    // 门禁开门一次输出参数Ex
    public static class STU_DOOR_OPEN_ONCE_OUT_PARAM_EX extends Structure {
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_OPEN_ONCE_OUT_PARAM_EX implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_OPEN_ONCE_OUT_PARAM_EX implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 切换显示界面输入参数
    public static class STU_DOOR_ADVERTISING_SET_SHOW_MODE_IN_PARAM extends Structure {
        // 模式：0 - 人脸识别界面，1 - 广告界面，2 - 屏保界面
        public int nMode;

        // 协议类型
        public int nProtocolType;  //  0 - 仅支持设置模式，可切换至屏保界面
        //  1 - 不支持切换到屏保界面, 支持设置窗口区域

        // 窗口ID
        public int nWinId;            // nProtocolType = 1时有效
        // 窗口区域
        public STU_RECT_L stuRect;        // nProtocolType = 1时有效

        // 保留参数
        public byte[] reserved = new byte[232];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMode", "nProtocolType", "nWinId", "stuRect", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ADVERTISING_SET_SHOW_MODE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ADVERTISING_SET_SHOW_MODE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 切换显示界面输出参数
    public static class STU_DOOR_ADVERTISING_SET_SHOW_MODE_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[256];    // 保留参数

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_ADVERTISING_SET_SHOW_MODE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ADVERTISING_SET_SHOW_MODE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 删除广告文件输入参数
    public static class STU_DOOR_ADVERTISING_DELETE_FILE_IN_PARAM extends Structure {
        // 广告文件名，全路径
        public byte[] szFileName = new byte[256];
        // 保留参数
        public byte[] reserved = new byte[256];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szFileName", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ADVERTISING_DELETE_FILE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ADVERTISING_DELETE_FILE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 删除广告文件输出参数
    public static class STU_DOOR_ADVERTISING_DELETE_FILE_OUT_PARAM extends Structure {
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_ADVERTISING_DELETE_FILE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ADVERTISING_DELETE_FILE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 重播所有广告输入参数
    public static class STU_DOOR_ADVERTISING_REPLAY_ALL_IN_PARAM extends Structure {
        // 保留参数
        public byte[] reserved = new byte[256];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_ADVERTISING_REPLAY_ALL_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ADVERTISING_REPLAY_ALL_IN_PARAM implements Structure.ByValue {
        }
    }

    // 重播所有广告输出参数
    public static class STU_DOOR_ADVERTISING_REPLAY_ALL_OUT_PARAM extends Structure {
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_ADVERTISING_REPLAY_ALL_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ADVERTISING_REPLAY_ALL_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 获取广告文件名称输入参数
    public static class STU_DOOR_ADVERTISING_PRE_FIND_FILE_IN_PARAM extends Structure {
        // 广告文件目录
        public byte[] szDirPath = new byte[NetDefs.MAX_PATH];
        // 文件筛选信息
        public STU_FILE_FILTER[] stFilters = new STU_FILE_FILTER[NetDefs.MAX_FILE_FILTER_COUNT];
        // 保留参数
        public byte[] reserved = new byte[256];

        public STU_DOOR_ADVERTISING_PRE_FIND_FILE_IN_PARAM() {
            for (int i = 0; i < stFilters.length; i++) {
                stFilters[i] = new STU_FILE_FILTER();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szDirPath", "stFilters", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ADVERTISING_PRE_FIND_FILE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ADVERTISING_PRE_FIND_FILE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 广告文件预查询输出参数
    public static class STU_DOOR_ADVERTISING_PRE_FIND_FILE_OUT_PARAM extends Structure {
        // 查找到的文件数量
        public int nFileCount;
        // 保留参数
        public byte[] reserved = new byte[256];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nFileCount", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ADVERTISING_PRE_FIND_FILE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ADVERTISING_PRE_FIND_FILE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 获取广告文件名称输入参数
    public static class STU_DOOR_ADVERTISING_GET_FILE_LIST_IN_PARAM extends Structure {
        // 文件查找偏移量
        public int nOffset;
        // 文件查询数量, 单次获取的最大文件数量为 MAX_DOOR_ADVERTISING_FILE_COUNT
        public int nCount;
        // 保留参数
        public byte[] reserved = new byte[64];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nOffset", "nCount", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ADVERTISING_GET_FILE_LIST_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ADVERTISING_GET_FILE_LIST_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取广告文件名称输出参数
    public static class STU_DOOR_ADVERTISING_GET_FILE_LIST_OUT_PARAM extends Structure {
        // 实际获取到的文件数量
        public int nCount;
        // 文件信息缓存地址
        public STU_FILE_INFO[] stFileInfoArray = new STU_FILE_INFO[NetDefs.MAX_DOOR_ADVERTISING_FILE_COUNT];
        // 保留参数
        public byte[] reserved = new byte[256];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nCount", "stFileInfoArray", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ADVERTISING_GET_FILE_LIST_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ADVERTISING_GET_FILE_LIST_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 设置底部控件显示模式输入参数
    public static class STU_DOOR_ADVERTISING_SET_WIDGET_SHOW_IN_PARAM extends Structure {
        // 显示模式 0-自动模式  1-持续显示  2-持续关闭  3-持续一段时间关闭
        public int nMode;
        // 持续时间(s) - nMode为3时生效
        public int nKeepTime;
        // 保留参数
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMode", "nKeepTime", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ADVERTISING_SET_WIDGET_SHOW_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ADVERTISING_SET_WIDGET_SHOW_IN_PARAM implements Structure.ByValue {
        }
    }

    // 设置底部控件显示模式输出参数
    public static class STU_DOOR_ADVERTISING_SET_WIDGET_SHOW_OUT_PARAM extends Structure {
        // 保留参数
        public byte[] reserved = new byte[128];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_ADVERTISING_SET_WIDGET_SHOW_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ADVERTISING_SET_WIDGET_SHOW_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 预查找广告当前播放文件输入参数
    public static class STU_DOOR_ADVERTISING_PRE_FIND_PLAY_LIST_IN_PARAM extends Structure {
        // 文件类型 0-广告  1-图片
        public int nType;
        // 保留参数
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nType", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ADVERTISING_PRE_FIND_PLAY_LIST_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ADVERTISING_PRE_FIND_PLAY_LIST_IN_PARAM implements Structure.ByValue {
        }
    }

    // 预查找广告当前播放文件输出参数
    public static class STU_DOOR_ADVERTISING_PRE_FIND_PLAY_LIST_OUT_PARAM extends Structure {
        // 当前播放文件的总数量
        public int nTotalCount;
        // 保留参数
        public byte[] reserved = new byte[128];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nTotalCount", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ADVERTISING_PRE_FIND_PLAY_LIST_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ADVERTISING_PRE_FIND_PLAY_LIST_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 查找广告当前播放文件列表输入参数
    public static class STU_DOOR_ADVERTISING_GET_PLAY_LIST_IN_PARAM extends Structure {
        // 单次查询起始偏移
        public int nOffset;
        // 单次查询数量，最大 MAX_DOOR_ADVERTISING_PLAY_FILE_COUNT 个
        public int nCount;
        // 保留参数
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nOffset", "nCount", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ADVERTISING_GET_PLAY_LIST_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ADVERTISING_GET_PLAY_LIST_IN_PARAM implements Structure.ByValue {
        }
    }

    // 查找广告当前播放文件列表输出参数
    public static class STU_DOOR_ADVERTISING_GET_PLAY_LIST_OUT_PARAM extends Structure {
        // 当前播放文件实际数量
        public int nCount;
        // 当前播放文件信息列表
        public STU_FILE_INFO[] stFileInfoArray = new STU_FILE_INFO[NetDefs.MAX_DOOR_ADVERTISING_PLAY_FILE_COUNT];
        // 保留参数
        public byte[] reserved = new byte[128];

        public STU_DOOR_ADVERTISING_GET_PLAY_LIST_OUT_PARAM() {
            for (int i = 0; i < stFileInfoArray.length; i++) {
                stFileInfoArray[i] = new STU_FILE_INFO();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nCount", "stFileInfoArray", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ADVERTISING_GET_PLAY_LIST_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ADVERTISING_GET_PLAY_LIST_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 设置广告当前播放文件列表输入参数
    public static class STU_DOOR_ADVERTISING_SET_PLAY_LIST_IN_PARAM extends Structure {
        // 文件类型 0-广告  1-图片
        public int nType;
        // 需要设置的播放文件数量
        public int nCount;
        // 需要设置的播放文件信息列表, STU_FILE_INFO*
        public Pointer pstFileInfoArray;
        // 保留参数
        public byte[] reserved = new byte[512];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nType", "nCount", "pstFileInfoArray", "reserved"});
        }

        public static class ByReference extends STU_DOOR_ADVERTISING_SET_PLAY_LIST_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ADVERTISING_SET_PLAY_LIST_IN_PARAM implements Structure.ByValue {
        }
    }

    // 设置广告当前播放文件列表输入参数
    public static class STU_DOOR_ADVERTISING_SET_PLAY_LIST_OUT_PARAM extends Structure {
        // 保留参数
        public byte[] reserved = new byte[128];

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_DOOR_ADVERTISING_SET_PLAY_LIST_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_DOOR_ADVERTISING_SET_PLAY_LIST_OUT_PARAM implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 设备管理（ldm）

    // 单个设备管理能力
    public static class STU_LDM_PROTOCOL extends Structure {
        public int nDefaultPort;                                    // 默认端口号
        public byte[] szSupportProtocol = new byte[32];                // 协议名称
        public byte[] reserved = new byte[256];                        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nDefaultPort", "szSupportProtocol", "reserved"});
        }

        public static class ByReference extends STU_LDM_PROTOCOL implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_PROTOCOL implements Structure.ByValue {
        }
    }

    // LDM 通道信息
    public static class STU_LDM_UNIQUE_CHANNEL extends Structure {
        public int nUniChannel;                    // 本地通道号
        public int emConnState;                    // 连接状态, EM_CHANNEL_CONNECT_STATE
        public int emConnError;                    // 连接错误信息, EM_CHANNEL_CONNECT_ERROR
        public byte[] reserved = new byte[64];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nUniChannel", "emConnState", "emConnError", "reserved"});
        }

        public static class ByReference extends STU_LDM_UNIQUE_CHANNEL implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_UNIQUE_CHANNEL implements Structure.ByValue {
        }
    }

    // LDM 设备通道信息
    public static class STU_LDM_DEVICE_CHANNEL extends Structure {
        public int nUniChannel;                        // 本地通道号
        public int nDevChannel;                        // 前端设备通道号

        public byte[] szID = new byte[128];                // 设备 ID

        // 前端设备信息
        public int bMap;                                // 是否已映射 LDM 通道
        public byte[] szDevClass = new byte[64];            // 远程设备大类
        public byte[] szDevType = new byte[64];            // 远程设备型号
        public byte[] szDevSN = new byte[64];                // 远程设备序列号
        public byte[] szDevMac = new byte[40];            // 远程设备网卡 MAC
        public byte[] szDevVersion = new byte[32];        // 远程设备软件版本号
        public byte[] szDevAddress = new byte[128];        // 远程设备地址
        public byte[] szProtocol = new byte[32];            // 协议名称
        public byte[] szUser = new byte[32];                // 用户名称
        public int nPort;                                // 远程设备的端口.
        public int nVideoInChannels;                    // 视频通道输入个数
        public int nAudioInChannels;                    // 音频通道输入个数

        public byte[] reserved = new byte[512];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nUniChannel", "nDevChannel", "szID",
                    "bMap", "szDevClass", "szDevType", "szDevSN", "szDevMac", "szDevVersion",
                    "szDevAddress", "szProtocol", "szUser", "nPort", "nVideoInChannels",
                    "nAudioInChannels", "reserved"});
        }

        public static class ByReference extends STU_LDM_DEVICE_CHANNEL implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_DEVICE_CHANNEL implements Structure.ByValue {
        }
    }

    // LDM 通道映射
    public static class STU_LDM_CHANNEL_MAP extends Structure {
        public int nUniChannel;                // 本地通道号
        public int nDevChannel;                // 前端设备通道号
        public byte[] reserved = new byte[16];    // 预留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nUniChannel", "nDevChannel", "reserved"});
        }

        public static class ByReference extends STU_LDM_CHANNEL_MAP implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_CHANNEL_MAP implements Structure.ByValue {
        }
    }

    // LDM 通道映射结果
    public static class STU_LDM_CHANNEL_MAP_RESULT extends Structure {
        public int nResult;                    // 0 - 成功； 1 - 通道不支持设置
        public int nUniChannel;                // 本地通道号
        public byte[] reserved = new byte[64];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nUniChannel", "nDevChannel", "reserved"});
        }

        public static class ByReference extends STU_LDM_CHANNEL_MAP_RESULT implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_CHANNEL_MAP_RESULT implements Structure.ByValue {
        }
    }

    // 设备状态通知信息
    public static class STU_LDM_DEVICE_STATE_INFO extends Structure {
        public int nToken;                            // 订阅 ID
        public int nUniChannel;                    // 本地通道号

        public int emConnState;                    // 通道连接状态, EM_CHANNEL_CONNECT_STATE

        public byte[] reserved = new byte[1024];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nToken", "nUniChannel", "emConnState", "reserved"});
        }

        public static class ByReference extends STU_LDM_DEVICE_STATE_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_DEVICE_STATE_INFO implements Structure.ByValue {
        }
    }

    // LDM设备搜索信息
    public static class STU_LDM_DEVICE extends Structure {
        public byte[] szID = new byte[128];                // 设备 ID 标识

        // 前端设备信息
        public int bEnable;                            // 是否启用
        public byte[] szDevClass = new byte[64];            // 远程设备大类
        public byte[] szDevType = new byte[64];            // 远程设备型号
        public byte[] szDevName = new byte[64];            // 远程设备名称
        public byte[] szDevSN = new byte[64];                // 远程设备序列号
        public byte[] szDevMac = new byte[40];            // 远程设备网卡 MAC
        public byte[] szDevVersion = new byte[32];        // 远程设备软件版本号
        public byte[] szDevAddress = new byte[128];        // 远程设备地址
        public byte[] szProtocol = new byte[32];            // 协议名称
        public byte[] szUser = new byte[32];                // 用户名称
        public int nPort;                                // 远程设备的端口.

        public int nVideoInChannels;                    // 视频通道输入个数
        public int nAudioInChannels;                    // 音频通道输入个数

        public byte[] reserved = new byte[512];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szID", "bEnable", "szDevClass", "szDevType",
                    "szDevName", "szDevSN", "szDevMac", "szDevVersion", "szDevAddress", "szProtocol",
                    "szUser", "nPort", "nVideoInChannels", "nAudioInChannels", "reserved"});
        }

        public static class ByReference extends STU_LDM_DEVICE implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_DEVICE implements Structure.ByValue {
        }
    }

    // 获取设备管理能力输入参数
    public static class STU_LDM_OPT_GET_CAPS_IN_PARAM extends Structure {
        public byte[] reserved = new byte[64];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_GET_CAPS_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_GET_CAPS_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取设备管理能力输出参数
    public static class STU_LDM_OPT_GET_CAPS_OUT_PARAM extends Structure {
        public int nError;                                // 错误码，0-无错误
        public int nProtocolNum;                        // 实际协议数量（不超过 MAX_LDM_PROTOCOL_NUM）
        // 协议数组
        public STU_LDM_PROTOCOL[] stuProtocols = new STU_LDM_PROTOCOL[NetDefs.MAX_LDM_PROTOCOL_NUM];
        public byte[] reserved = new byte[64];            // 保留位

        STU_LDM_OPT_GET_CAPS_OUT_PARAM() {
            for (int i = 0; i < stuProtocols.length; i++) {
                stuProtocols[i] = new STU_LDM_PROTOCOL();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nError", "nProtocolNum", "stuProtocols", "reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_GET_CAPS_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_GET_CAPS_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 获取视频输入通道信息输入参数
    public static class STU_LDM_OPT_GET_VIDEOIN_CHANNEL_IN_PARAM extends Structure {
        public byte[] reserved = new byte[64];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_GET_VIDEOIN_CHANNEL_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_GET_VIDEOIN_CHANNEL_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取视频输入通道信息输出参数
    public static class STU_LDM_OPT_GET_VIDEOIN_CHANNEL_OUT_PARAM extends Structure {
        public int nError;                        // 错误码，0-无错误
        public int nMaxLocal;                    // 最大本地视频通道总数
        public int nCurLocal;                    // 已配置的本地视频通道总数
        public int nMaxRemote;                    // 最大远程视频通道总数
        public int nCurRemote;                    // 已配置的远程视频通道总数
        public byte[] reserve = new byte[512];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nError", "nMaxLocal", "nCurLocal",
                    "nMaxRemote", "nCurRemote", "reserve"});
        }

        public static class ByReference extends STU_LDM_OPT_GET_VIDEOIN_CHANNEL_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_GET_VIDEOIN_CHANNEL_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 获取前端设备通道信息输入参数
    public static class STU_LDM_OPT_GET_DEVICE_CHANNEL_IN_PARAM extends Structure {
        public byte[] szAddress = new byte[128];        // IP / URL 地址
        public byte[] szProtocol = new byte[32];        // 协议名称（通过获取设备管理能力获取支持的协议）
        public byte[] szUser = new byte[32];            // 远程设备的用户名称
        public byte[] szPassword = new byte[128];        // 远程设备的密码
        public int nPort;                            // 远程设备端口号

        public byte[] reserved = new byte[256];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"szAddress", "szProtocol", "szUser",
                    "szPassword", "nPort", "reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_GET_DEVICE_CHANNEL_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_GET_DEVICE_CHANNEL_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取前端设备通道信息输出参数
    public static class STU_LDM_OPT_GET_DEVICE_CHANNEL_OUT_PARAM extends Structure {
        public int nError;                        // 错误码，0-无错误
        public int nMaxChannels;                // 设备通道总数
        public byte[] reserved = new byte[512];    // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nError", "nMaxChannels", "reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_GET_DEVICE_CHANNEL_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_GET_DEVICE_CHANNEL_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 获取前端设备状态输入参数
    public static class STU_LDM_OPT_GET_DEVICE_STATE_IN_PARAM extends Structure {
        public int nChannelNum;                    // 需要获取的通道总数
        // 如果 = 0，表示获取所有通道状态
        // 通道号数组
        public int[] nChannelArr = new int[NetDefs.MAX_LDM_CHANNEL_NUM];
        public byte[] reserved = new byte[512];        // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannelNum", "nChannelArr", "reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_GET_DEVICE_STATE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_GET_DEVICE_STATE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取前端设备状态输出参数
    public static class STU_LDM_OPT_GET_DEVICE_STATE_OUT_PARAM extends Structure {
        public int nError;                            // 错误码，0-无错误
        public int nChannelNum;                    // 实际通道数
        // 通道信息数组
        public STU_LDM_UNIQUE_CHANNEL[] stuChannelArr = new STU_LDM_UNIQUE_CHANNEL[NetDefs.MAX_LDM_CHANNEL_NUM];
        public byte[] reserved = new byte[64];        // 保留位

        STU_LDM_OPT_GET_DEVICE_STATE_OUT_PARAM() {
            for (int i = 0; i < stuChannelArr.length; i++) {
                stuChannelArr[i] = new STU_LDM_UNIQUE_CHANNEL();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nError", "nChannelNum", "stuChannelArr", "reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_GET_DEVICE_STATE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_GET_DEVICE_STATE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 获取前端设备信息输入参数
    public static class STU_LDM_OPT_GET_DEVICE_IN_PARAM extends Structure {
        public int nChannelNum;                        // 需要获取的通道总数
        // 如果 = 0，表示获取所有设备信息
        // 通道号数组
        public int[] nChannelArr = new int[NetDefs.MAX_LDM_CHANNEL_NUM];
        public byte[] reserved = new byte[512];            // 保留位

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannelNum", "nChannelArr", "reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_GET_DEVICE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_GET_DEVICE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 获取前端设备信息输出参数
    public static class STU_LDM_OPT_GET_DEVICE_OUT_PARAM extends Structure {
        public int nError;                            // 错误码，0-无错误
        public int nChannelNum;                    // 实际通道数
        // 通道信息数组
        public STU_LDM_DEVICE_CHANNEL[] stuChannelArr = new STU_LDM_DEVICE_CHANNEL[NetDefs.MAX_LDM_CHANNEL_NUM];
        public byte[] reserved = new byte[64];        // 保留位

        STU_LDM_OPT_GET_DEVICE_OUT_PARAM() {
            for (int i = 0; i < stuChannelArr.length; i++) {
                stuChannelArr[i] = new STU_LDM_DEVICE_CHANNEL();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nError", "nChannelNum", "stuChannelArr", "reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_GET_DEVICE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_GET_DEVICE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 添加前端设备信息输入参数
    public static class STU_LDM_OPT_ADD_DEVICE_IN_PARAM extends Structure {
        public int nChannelMapNum;                        // 通道映射个数
        // 前端设备与如 NVR 通道的映射数组
        // 当 stuChannelMapArr 元素的成员 nUniChannel = -1，表示会选择一个最小的本地设备通道添加
        public STU_LDM_CHANNEL_MAP[] stuChannelMapArr = new STU_LDM_CHANNEL_MAP[NetDefs.MAX_CHANNEL_NUM];

        public byte[] szDevAddress = new byte[128];        // 前端设备远程地址
        public byte[] szProtocol = new byte[32];            // 协议名称
        public byte[] szUser = new byte[32];                // 前端设备登录用户名
        public byte[] szPassword = new byte[128];            // 前端设备登录密码
        public int nPort;                                // 前端设备的端口

        public byte[] reserved = new byte[512];            // 保留位

        STU_LDM_OPT_ADD_DEVICE_IN_PARAM() {
            for (int i = 0; i < stuChannelMapArr.length; i++) {
                stuChannelMapArr[i] = new STU_LDM_CHANNEL_MAP();
            }
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nChannelMapNum", "stuChannelMapArr", "szDevAddress",
                    "szProtocol", "szUser", "szPassword", "nPort", "reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_ADD_DEVICE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_ADD_DEVICE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 添加前端设备信息输出参数
    public static class STU_LDM_OPT_ADD_DEVICE_OUT_PARAM extends Structure {
        public int nError;                            // 错误码，0-无错误
        public int nResultNum;                        // 通道映射结果个数
        // 映射结果数组, 一台前端设备的最大通道数不超过 MAX_CHANNEL_NUM； LDM 的最大接入通道数 MAX_LDM_CHANNEL_NUM
        public STU_LDM_CHANNEL_MAP_RESULT[] stuResultArr = new STU_LDM_CHANNEL_MAP_RESULT[NetDefs.MAX_CHANNEL_NUM];

        public byte[] szID = new byte[128];            // 设备 ID

        public byte[] reserved = new byte[512];        // 保留位

        STU_LDM_OPT_ADD_DEVICE_OUT_PARAM() {
            for (int i = 0; i < stuResultArr.length; i++) {
                stuResultArr[i] = new STU_LDM_CHANNEL_MAP_RESULT();
            }
        }

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nError", "nResultNum", "stuResultArr", "szID", "reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_ADD_DEVICE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_ADD_DEVICE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 修改前端设备信息输入参数
    public static class STU_LDM_OPT_MODIFY_DEVICE_IN_PARAM extends Structure {
        public int nUniChannel;
        public int nDevChannel;

        public byte[] szID = new byte[128];            // 设备 ID 信息,

        public byte[] szDevAddress = new byte[128];    // 前端设备地址
        public byte[] szProtocol = new byte[32];        // 协议名称
        public byte[] szUser = new byte[32];            // 前端设备地址，可输入 IP/URL
        public byte[] szPassword = new byte[128];        // 前端设备密码
        public int nPort;                            // 前端设备的端口

        public byte[] reserved = new byte[512];        // 保留位

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nUniChannel", "nDevChannel", "szID",
                    "szDevAddress", "szProtocol", "szUser", "szPassword", "nPort", "reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_MODIFY_DEVICE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_MODIFY_DEVICE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 修改前端设备信息输出参数
    public static class STU_LDM_OPT_MODIFY_DEVICE_OUT_PARAM extends Structure {
        public int nError;                            // 错误码，0-无错误

        public int nUniChannel;                    // 本地通道号
        public int nDevChannel;                    // 前端设备通道号
        public int nFailedCode;                    // 0 - 表示修改成功； 1 - 表示修改失败；
        public byte[] szID = new byte[128];            // 设备 ID

        public byte[] reserved = new byte[512];        // 保留位

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nError", "nUniChannel", "nDevChannel",
                    "nFailedCode", "szID", "reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_MODIFY_DEVICE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_MODIFY_DEVICE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 删除前端设备信息输入参数
    public static class STU_LDM_OPT_DELETE_DEVICE_IN_PARAM extends Structure {
        public int nUniChannel;                    // 本地化通道号
        public byte[] reserved = new byte[64];        // 保留位

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nUniChannel", "reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_DELETE_DEVICE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_DELETE_DEVICE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 删除前端设备信息输出参数
    public static class STU_LDM_OPT_DELETE_DEVICE_OUT_PARAM extends Structure {
        public int nError;                        // 错误码，0-无错误
        public byte[] reserved = new byte[64];    // 保留位

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nError", "reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_DELETE_DEVICE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_DELETE_DEVICE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 搜索前端设备信息输入参数
    // 该接口会调用时会阻塞，建议在回调中仅做设备信息保存，不要在回调中做过多操作
    public static class STU_LDM_OPT_SEARCH_DEVICE_IN_PARAM extends Structure {
        public NetDelegates.fLdmSearchDeviceCallBack cb;                            // LDM 设备搜索回调
        public Pointer pUser;                        // 回调的用户参数, void*
        public byte[] reserved = new byte[64];    // 预留位

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"cb", "pUser", "reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_SEARCH_DEVICE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_SEARCH_DEVICE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 搜索前端设备信息输出参数
    public static class STU_LDM_OPT_SEARCH_DEVICE_OUT_PARAM extends Structure {
        public int nError;                        // 错误码
        public byte[] reserved = new byte[64];    // 预留位

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nError", "reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_SEARCH_DEVICE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_SEARCH_DEVICE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 订阅前端设备信息输入参数
    public static class STU_LDM_OPT_SUBSCRIBE_DEVICE_STATE_IN_PARAM extends Structure {
        public int nUniChannelNum;                // 本地通道号个数，如果该 = 0，表示订阅所有通道的设备状态信息
        // 订阅的通道号数组，通道号不能重复
        public int[] nUniChannelArr = new int[NetDefs.MAX_LDM_CHANNEL_NUM];

        public NetDelegates.fLdmDeviceStateInfoCallBack cb;                            // 订阅回调
        public int nReservedType;                // 订阅回调的保留参数类型（不使用，默认为 0）
        public Pointer pReserved;                    // 订阅回调的保留参数（不使用，默认为 NULL）, void*
        public Pointer pUser;                        // 订阅回调的用户参数, void*

        public byte[] reserved = new byte[64];    // 保留位

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nUniChannelNum", "nUniChannelArr", "cb",
                    "nReservedType", "pReserved", "pUser", "reserved",});
        }

        public static class ByReference extends STU_LDM_OPT_SUBSCRIBE_DEVICE_STATE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_SUBSCRIBE_DEVICE_STATE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 订阅前端设备信息输出参数
    public static class STU_LDM_OPT_SUBSCRIBE_DEVICE_STATE_OUT_PARAM extends Structure {
        public int nError;                // 错误码，0-无错误
        public LLONG lHandle;            // 订阅句柄，如果 lHandle 为 0，说明订阅失败；不为 0 则订阅成功

        public byte[] reserved = new byte[64];        // 保留位

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nError", "lHandle", "reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_SUBSCRIBE_DEVICE_STATE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_SUBSCRIBE_DEVICE_STATE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 取消订阅设备信息输入参数
    public static class STU_LDM_OPT_UNSUBSCRIBE_DEVICE_STATE_IN_PARAM extends Structure {
        public LLONG lHandle;                        // 订阅句柄，取消订阅时该参数必须不为 0

        public byte[] reserved = new byte[64];        // 保留位

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"lHandle", "reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_UNSUBSCRIBE_DEVICE_STATE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_UNSUBSCRIBE_DEVICE_STATE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 取消订阅设备信息输出参数
    public static class STU_LDM_OPT_UNSUBSCRIBE_DEVICE_STATE_OUT_PARAM extends Structure {
        public int nError;                // 错误码，0-无错误

        public byte[] reserved = new byte[64];        // 保留位

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nError", "reserved"});
        }

        public static class ByReference extends STU_LDM_OPT_UNSUBSCRIBE_DEVICE_STATE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LDM_OPT_UNSUBSCRIBE_DEVICE_STATE_OUT_PARAM implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 重连结果
    public static class STU_RECONNECT_RESULT_PARAM extends Structure {
        // 是否重连成功
        public int bSuccess;
        // 已尝试重连次数
        public int nHaveReconnTimes;
        // 重连总次数
        public int nReconnTotalTimes;
        // 重连类型, EM_VIRTUAL_INTERFACE_TYPE
        public int emInterfaceType;
        // 各业务接口返回的句柄，重连类型不为0或-1时有效
        public LLONG lOperateHandle;
        // 设备IP
        public byte[] szIP = new byte[64];
        // 设备端口号
        public int nPort;
        // 设备序列号
        public byte[] szDevSN = new byte[128];
        // 重连错误码
        public int dwError;
        // 保留字节
        public byte[] reserved = new byte[512];

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"bSuccess", "nHaveReconnTimes", "nReconnTotalTimes", "emInterfaceType",
                    "lOperateHandle", "szIP", "nPort", "szDevSN", "dwError", "reserved"});
        }

        public static class ByReference extends STU_RECONNECT_RESULT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_RECONNECT_RESULT_PARAM implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 网络环境测试结果
    public static class STU_BANDWIDTH_TEST_RESULT extends Structure {
        public float fDuration;                            // 测试已用时间（s）
        public float fBandwidth;                            // 实时上行带宽（Kbps）
        public byte[] reserved = new byte[256];            // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"fDuration", "fBandwidth", "reserved"});
        }

        public static class ByReference extends STU_BANDWIDTH_TEST_RESULT implements Structure.ByReference {
        }

        public static class ByValue extends STU_BANDWIDTH_TEST_RESULT implements Structure.ByValue {
        }
    }

    // 透明串口接口入参信息
    public static class STU_TRANS_COM_IN_PARAM extends Structure {
        public int nTranscomPort;        // 透明串口号，从 1 开始
        public int nBaudRate;            // 波特率
        public int emDataBit;            // 数据位, EM_COM_DATA_BIT_TYPE
        public int emStopBit;            // 停止位, EM_COM_STOP_BIT_TYPE
        public int emParity;            // 校验位, EM_COM_PARITY_TYPE
        public int emTransMode;        // 数据传输方式, EM_TRANS_COM_DATA_TRANS_MODE
        public byte[] reserved = new byte[128];        // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nTranscomPort", "nBaudRate", "emDataBit",
                    "emStopBit", "emParity", "emTransMode", "reserved"});
        }

        public static class ByReference extends STU_TRANS_COM_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_TRANS_COM_IN_PARAM implements Structure.ByValue {
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////
    // 视频输入参数结构体
    // 视频输入-获取状态信息的输入参数
    public static class STU_VIDEONIN_OPT_GET_STATUS_IN_PARAM extends Structure {
        public byte[] reserved = new byte[256];            // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_GET_STATUS_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_GET_STATUS_IN_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入-获取状态信息的输出参数
    public static class STU_VIDEONIN_OPT_GET_STATUS_OUT_PARAM extends Structure {
        public int nBrightnessVideo;            // 视频快门当前亮度值
        public int nBrightnessPic;                // 图片快门当前亮度值
        public int nBrightnessSnap;            // 抓拍快门当前亮度值

        public int nGainVideo;                    // 视频快门当前增益值
        public int nGainPic;                    // 图片快门当前增益值
        public int nGainSnap;                    // 抓拍快门当前增益值

        public float fExposureValueVideo;        // 视频快门曝光时间，单位ms
        public float fExposureValuePic;            // 图片快门曝光时间，单位ms
        public float fExposureValueSnap;            // 抓拍快门曝光时间，单位ms

        public int nExtSyncPhaseMode;            // 当前外同步信号模式 0-白天，1-晚上，2-其他
        public int nPreviewModeVideo;            // 当前视频预处理模式 0-白天，1-晚上，2-其他
        public int nPreviewModeCapture;        // 当前图片预处理模式 0-白天，1-晚上，2-其他

        public int nAfixFlag;                    // 自动校正标志位, 0:关闭状态，1:开启状态。
        public int nIRMode;                    // ir模式标志位, 0-白片，1-夜片
        public int nAdjustState;                // 当前是否在进行图像矫正, 0 -当前未矫正, 1-当前在矫正

        public byte[] reserved = new byte[512];    // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nBrightnessVideo", "nBrightnessPic", "nBrightnessSnap",
                    "nGainVideo", "nGainPic", "nGainSnap", "fExposureValueVideo", "fExposureValuePic",
                    "fExposureValueSnap", "nExtSyncPhaseMode", "nPreviewModeVideo", "nPreviewModeCapture",
                    "nAfixFlag", "nIRMode", "nAdjustState", "reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_GET_STATUS_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_GET_STATUS_OUT_PARAM implements Structure.ByValue {
        }
    }

    //视频输入-获取同步信息状态输入参数
    public static class STU_VIDEONIN_OPT_GET_SYNC_STATE_IN_PARAM extends Structure {
        public byte[] reserved = new byte[256];            // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_GET_SYNC_STATE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_GET_SYNC_STATE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入-获取同步信息状态输出参数
    public static class STU_VIDEONIN_OPT_GET_SYNC_STATE_OUT_PARAM extends Structure {
        public int nStatus;                    // 同步信息状态 0: 内同步 1: 外同步
        public byte[] reserved = new byte[256];    // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nStatus", "reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_GET_SYNC_STATE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_GET_SYNC_STATE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入-测试同步相位点输入参数
    public static class STU_VIDEONIN_OPT_START_SYNCPHASE_TEST_IN_PARAM extends Structure {
        public byte[] reserved = new byte[256];            // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_START_SYNCPHASE_TEST_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_START_SYNCPHASE_TEST_IN_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入-测试同步相位点输出参数
    public static class STU_VIDEONIN_OPT_START_SYNCPHASE_TEST_OUT_PARAM extends Structure {
        public int nMinBrightnessPhase;        // 亮度最小时的相位值
        public int nMaxBrightnessPhase;        // 亮度最大时的相位值
        public byte[] reserved = new byte[256];    // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nMinBrightnessPhase", "nMaxBrightnessPhase", "reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_START_SYNCPHASE_TEST_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_START_SYNCPHASE_TEST_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入-取消测试同步相位点输入参数
    public static class STU_VIDEONIN_OPT_STOP_SYNCPHASE_TEST_IN_PARAM extends Structure {
        public byte[] reserved = new byte[128];            // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_STOP_SYNCPHASE_TEST_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_STOP_SYNCPHASE_TEST_IN_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入-取消测试同步相位点输出参数
    public static class STU_VIDEONIN_OPT_STOP_SYNCPHASE_TEST_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[128];            // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_STOP_SYNCPHASE_TEST_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_STOP_SYNCPHASE_TEST_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入-聚焦调节输入参数
    public static class STU_VIDEONIN_OPT_CONTROL_FOCUS_IN_PARAM extends Structure {
        public float fZoom;                            // 相对变倍率, 范围0~1，-1表示重置
        public float fFocus;                            // 相对聚焦变化, 范围0~1，-1表示重置
        public byte[] reserved = new byte[256];        // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"fZoom", "fFocus", "reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_CONTROL_FOCUS_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_CONTROL_FOCUS_IN_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入-聚焦调节输出参数
    public static class STU_VIDEONIN_OPT_CONTROL_FOCUS_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[256];            // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_CONTROL_FOCUS_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_CONTROL_FOCUS_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入-获取聚焦调节信息输入参数
    public static class STU_VIDEONIN_OPT_GET_FOCUS_STATE_IN_PARAM extends Structure {
        public byte[] reserved = new byte[256];            // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_GET_FOCUS_STATE_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_GET_FOCUS_STATE_IN_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入-获取聚焦调节信息输出参数
    public static class STU_VIDEONIN_OPT_GET_FOCUS_STATE_OUT_PARAM extends Structure {
        public int nStatus;                    // 0 - 正常状态
        // 1 - 正在自动聚焦

        public float fZoom;                        // 放大倍数, 范围0~1
        public float fFocus;                        // 聚焦位置, 范围0~1

        public int nPeakAutofocus;                // 当前AF峰值,辅助聚焦模式下有效。AF峰值最大时，表示达到最佳聚焦效果
        public int nStepZoomMotor;                // 变倍电机总步长，对采用步进电机的设备有效
        public int nStepFocusMotor;            // 变焦电机总步长，对采用步进电机的设备有效

        public byte[] reserved = new byte[256];    // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"nStatus", "fZoom", "fFocus",
                    "nPeakAutofocus", "nStepZoomMotor", "nStepFocusMotor", "reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_GET_FOCUS_STATE_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_GET_FOCUS_STATE_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入-手动调节聚焦输入参数
    public static class STU_VIDEONIN_OPT_CONTINUE_FOCUS_IN_PARAM extends Structure {
        public float fZoom;                        // 放大倍数, 范围0~1
        public float fFocus;                        // 聚焦位置, 范围0~1
        public byte[] reserved = new byte[256];    // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"fZoom", "fFocus", "reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_CONTINUE_FOCUS_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_CONTINUE_FOCUS_IN_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入-手动调节聚焦输出参数
    public static class STU_VIDEONIN_OPT_CONTINUE_FOCUS_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[256];            // 保留字节

        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_CONTINUE_FOCUS_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_CONTINUE_FOCUS_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入-开始自动聚焦输入参数
    public static class STU_VIDEONIN_OPT_START_AUTO_FOCUS_IN_PARAM extends Structure {
        public byte[] reserved = new byte[256];            // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_START_AUTO_FOCUS_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_START_AUTO_FOCUS_IN_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入-开始自动聚焦输出参数
    public static class STU_VIDEONIN_OPT_START_AUTO_FOCUS_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[256];            // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_START_AUTO_FOCUS_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_START_AUTO_FOCUS_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入-停止自动聚焦输入参数
    public static class STU_VIDEONIN_OPT_STOP_AUTO_FOCUS_IN_PARAM extends Structure {
        public byte[] reserved = new byte[256];            // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_STOP_AUTO_FOCUS_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_STOP_AUTO_FOCUS_IN_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入-停止自动聚焦输出参数
    public static class STU_VIDEONIN_OPT_STOP_AUTO_FOCUS_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[256];            // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_STOP_AUTO_FOCUS_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_STOP_AUTO_FOCUS_OUT_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入-区域聚焦输入参数
    public static class STU_VIDEONIN_OPT_SET_FOCUS_REGION_IN_PARAM extends Structure {
        public int emMode;                            // 区域聚焦模式, EM_VIDEO_IN_REGION_FOCUS_MODE
        public STU_RECT_L stuRect = new STU_RECT_L();        // 聚焦区域

        public byte[] reserved = new byte[256];        // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emMode", "stuRect", "reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_SET_FOCUS_REGION_IN_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_SET_FOCUS_REGION_IN_PARAM implements Structure.ByValue {
        }
    }

    // 视频输入-区域聚焦输出参数
    public static class STU_VIDEONIN_OPT_SET_FOCUS_REGION_OUT_PARAM extends Structure {
        public byte[] reserved = new byte[256];            // 保留字节

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"reserved"});
        }

        public static class ByReference extends STU_VIDEONIN_OPT_SET_FOCUS_REGION_OUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEONIN_OPT_SET_FOCUS_REGION_OUT_PARAM implements Structure.ByValue {
        }
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 按组上报数据回调信息结构体
    public static class STU_LOAD_DATA_INFO extends Structure {
        // 智能数据结构体, void*
        public Pointer pEventInfo;
        // 图片数据, BYTE*
        public Pointer pBuffer;
        // 图片数据长度
        public int dwBufSize;
        // 保留字节
        public byte[] reserved = new byte[1024];

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"pEventInfo", "pBuffer", "dwBufSize", "reserved"});
        }

        public static class ByReference extends STU_LOAD_DATA_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_LOAD_DATA_INFO implements Structure.ByValue {
        }
    }

    // 按组上报数据回调信息结构体集合
    public static class STU_LOAD_DATA_PAIR_INFO extends Structure {
        // 大图数据
        public STU_LOAD_DATA_INFO stLoadWholeData;

        // 抠图数量，结合pstLoadCutoutDataAry使用
        public int nCutoutCount;
        // 抠图数据列表，元素数量由 nCount 告知, STU_LOAD_DATA_INFO数组
        public Pointer pstLoadCutoutDataAry;

        // 保留字节
        public byte[] reserved = new byte[512];

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"stLoadWholeData", "nCutoutCount", "pstLoadCutoutDataAry", "reserved"});
        }

        public static class ByReference extends STU_LOAD_DATA_PAIR_INFO implements Structure.ByReference {
        }

        public static class ByValue extends STU_LOAD_DATA_PAIR_INFO implements Structure.ByValue {
        }
    }

    //////////////////////////////////////////////////////////////////////////
    // 设置强制I帧参数
    public static class STU_VIDEO_ENCODE_SET_I_FRAME_PARAM extends Structure {
        // 码流类型, EM_REALPLAY_STREAM_TYPE
        public int rType;
        // 通道号，从0开始
        public int nChannel;
        // 组号，默认0
        public int nGroup;
        // 保留字节
        public byte[] reserved = new byte[512];

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"rType", "nChannel", "nGroup", "reserved"});
        }

        public static class ByReference extends STU_VIDEO_ENCODE_SET_I_FRAME_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_VIDEO_ENCODE_SET_I_FRAME_PARAM implements Structure.ByValue {
        }
    }

    // 按组上报订阅入参
    public static class STU_LOAD_PIC_BY_PAIR_INPUT_PARAM extends Structure {
        // 指定订阅事件类型， EM_EVENT_SP_TYPE
        public int emEventType;
        // 订阅模式，0 - 实时订阅，1 - 离线订阅
        public int nLoadMode;
        // 智能数据回调函数
        public NetDelegates.fAnalyzeDataByPairCallBack cbAnalyzerData;
        // 回调用户自定义参数
        public NativeLong dwUser;
        // 保留字列
        public byte[] reserved = new byte[256];

        @Override
        protected List<String> getFieldOrder() {
            return Arrays.asList(new String[]{"emEventType", "nLoadMode",
                    "cbAnalyzerData", "dwUser", "reserved"});
        }

        public static class ByReference extends STU_LOAD_PIC_BY_PAIR_INPUT_PARAM implements Structure.ByReference {
        }

        public static class ByValue extends STU_LOAD_PIC_BY_PAIR_INPUT_PARAM implements Structure.ByValue {
        }
    }
}

//////////////////////////////////////////////////////////////////////////////////////