diff --git a/src/main/java/com/netsdk/common/Base64.java b/src/main/java/com/netsdk/common/Base64.java
new file mode 100644
index 0000000..630395b
--- /dev/null
+++ b/src/main/java/com/netsdk/common/Base64.java
@@ -0,0 +1,553 @@
+/*
+ * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ */
+
+
+// Base64解码 使用1.8版本源码 鉴于1.8部分特性1.6版本使用不到 故只保留能使用到的代码 其余删除
+package com.netsdk.common;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import java.util.Arrays;
+
+/**
+ * This class consists exclusively of static methods for obtaining
+ * encoders and decoders for the Base64 encoding scheme. The
+ * implementation of this class supports the following types of Base64
+ * as specified in
+ * RFC 4648 and
+ *
+ *
+ * Basic
+ * Uses "The Base64 Alphabet" as specified in Table 1 of
+ * RFC 4648 and RFC 2045 for encoding and decoding operation.
+ * The encoder does not add any line feed (line separator)
+ * character. The decoder rejects data that contains characters
+ * outside the base64 alphabet.
+ *
+ * Unless otherwise noted, passing a {@code null} argument to a
+ * method of this class will cause a {@link java.lang.NullPointerException
+ * NullPointerException} to be thrown.
+ *
+ * @author Xueming Shen
+ * @since 1.8
+ */
+
+public class Base64 {
+
+ private Base64() {}
+
+ /**
+ * Returns a {@link Encoder} that encodes using the
+ * Basic type base64 encoding scheme.
+ *
+ * @return A Base64 encoder.
+ */
+ public static Encoder getEncoder() {
+ return Encoder.RFC4648;
+ }
+
+ /**
+ * This class implements an encoder for encoding byte data using
+ * the Base64 encoding scheme as specified in RFC 4648 and RFC 2045.
+ *
+ *
Instances of {@link Encoder} class are safe for use by
+ * multiple concurrent threads.
+ *
+ *
Unless otherwise noted, passing a {@code null} argument to
+ * a method of this class will cause a
+ * {@link java.lang.NullPointerException NullPointerException} to
+ * be thrown.
+ *
+ * @see Decoder
+ * @since 1.8
+ */
+ public static class Encoder {
+
+ private final byte[] newline;
+ private final int linemax;
+ private final boolean isURL;
+ private final boolean doPadding;
+
+ private Encoder(boolean isURL, byte[] newline, int linemax, boolean doPadding) {
+ this.isURL = isURL;
+ this.newline = newline;
+ this.linemax = linemax;
+ this.doPadding = doPadding;
+ }
+
+ /**
+ * This array is a lookup table that translates 6-bit positive integer
+ * index values into their "Base64 Alphabet" equivalents as specified
+ * in "Table 1: The Base64 Alphabet" of RFC 2045 (and RFC 4648).
+ */
+ private static final char[] toBase64 = {
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+ 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+ 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'
+ };
+
+ /**
+ * It's the lookup table for "URL and Filename safe Base64" as specified
+ * in Table 2 of the RFC 4648, with the '+' and '/' changed to '-' and
+ * '_'. This table is used when BASE64_URL is specified.
+ */
+ private static final char[] toBase64URL = {
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+ 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+ 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '_'
+ };
+
+ static final Encoder RFC4648 = new Encoder(false, null, -1, true);
+
+ private final int outLength(int srclen) {
+ int len = 0;
+ if (doPadding) {
+ len = 4 * ((srclen + 2) / 3);
+ } else {
+ int n = srclen % 3;
+ len = 4 * (srclen / 3) + (n == 0 ? 0 : n + 1);
+ }
+ if (linemax > 0) // line separators
+ len += (len - 1) / linemax * newline.length;
+ return len;
+ }
+
+ /**
+ * Encodes all bytes from the specified byte array into a newly-allocated
+ * byte array using the {@link Base64} encoding scheme. The returned byte
+ * array is of the length of the resulting bytes.
+ *
+ * @param src
+ * the byte array to encode
+ * @return A newly-allocated byte array containing the resulting
+ * encoded bytes.
+ */
+ public byte[] encode(byte[] src) {
+ int len = outLength(src.length); // dst array size
+ byte[] dst = new byte[len];
+ int ret = encode0(src, 0, src.length, dst);
+ if (ret != dst.length)
+ return Arrays.copyOf(dst, ret);
+ return dst;
+ }
+
+ /**
+ * Encodes all bytes from the specified byte array using the
+ * {@link Base64} encoding scheme, writing the resulting bytes to the
+ * given output byte array, starting at offset 0.
+ *
+ *
It is the responsibility of the invoker of this method to make
+ * sure the output byte array {@code dst} has enough space for encoding
+ * all bytes from the input byte array. No bytes will be written to the
+ * output byte array if the output byte array is not big enough.
+ *
+ * @param src
+ * the byte array to encode
+ * @param dst
+ * the output byte array
+ * @return The number of bytes written to the output byte array
+ *
+ * @throws IllegalArgumentException if {@code dst} does not have enough
+ * space for encoding all input bytes.
+ */
+ public int encode(byte[] src, byte[] dst) {
+ int len = outLength(src.length); // dst array size
+ if (dst.length < len)
+ throw new IllegalArgumentException(
+ "Output byte array is too small for encoding all input bytes");
+ return encode0(src, 0, src.length, dst);
+ }
+
+ /**
+ * Encodes the specified byte array into a String using the {@link Base64}
+ * encoding scheme.
+ *
+ *
In other words, an invocation of this method has exactly the same
+ * effect as invoking
+ * {@code new String(encode(src), StandardCharsets.ISO_8859_1)}.
+ *
+ * @param src
+ * the byte array to encode
+ * @return A String containing the resulting Base64 encoded characters
+ */
+ @SuppressWarnings("deprecation")
+ public String encodeToString(byte[] src) {
+ byte[] encoded = encode(src);
+ return new String(encoded, 0, 0, encoded.length);
+ }
+
+ /**
+ * Returns an encoder instance that encodes equivalently to this one,
+ * but without adding any padding character at the end of the encoded
+ * byte data.
+ *
+ *
The encoding scheme of this encoder instance is unaffected by
+ * this invocation. The returned encoder instance should be used for
+ * non-padding encoding operation.
+ *
+ * @return an equivalent encoder that encodes without adding any
+ * padding character at the end
+ */
+ public Encoder withoutPadding() {
+ if (!doPadding)
+ return this;
+ return new Encoder(isURL, newline, linemax, false);
+ }
+
+ private int encode0(byte[] src, int off, int end, byte[] dst) {
+ char[] base64 = isURL ? toBase64URL : toBase64;
+ int sp = off;
+ int slen = (end - off) / 3 * 3;
+ int sl = off + slen;
+ if (linemax > 0 && slen > linemax / 4 * 3)
+ slen = linemax / 4 * 3;
+ int dp = 0;
+ while (sp < sl) {
+ int sl0 = Math.min(sp + slen, sl);
+ for (int sp0 = sp, dp0 = dp ; sp0 < sl0; ) {
+ int bits = (src[sp0++] & 0xff) << 16 |
+ (src[sp0++] & 0xff) << 8 |
+ (src[sp0++] & 0xff);
+ dst[dp0++] = (byte)base64[(bits >>> 18) & 0x3f];
+ dst[dp0++] = (byte)base64[(bits >>> 12) & 0x3f];
+ dst[dp0++] = (byte)base64[(bits >>> 6) & 0x3f];
+ dst[dp0++] = (byte)base64[bits & 0x3f];
+ }
+ int dlen = (sl0 - sp) / 3 * 4;
+ dp += dlen;
+ sp = sl0;
+ if (dlen == linemax && sp < end) {
+ for (byte b : newline){
+ dst[dp++] = b;
+ }
+ }
+ }
+ if (sp < end) { // 1 or 2 leftover bytes
+ int b0 = src[sp++] & 0xff;
+ dst[dp++] = (byte)base64[b0 >> 2];
+ if (sp == end) {
+ dst[dp++] = (byte)base64[(b0 << 4) & 0x3f];
+ if (doPadding) {
+ dst[dp++] = '=';
+ dst[dp++] = '=';
+ }
+ } else {
+ int b1 = src[sp++] & 0xff;
+ dst[dp++] = (byte)base64[(b0 << 4) & 0x3f | (b1 >> 4)];
+ dst[dp++] = (byte)base64[(b1 << 2) & 0x3f];
+ if (doPadding) {
+ dst[dp++] = '=';
+ }
+ }
+ }
+ return dp;
+ }
+ }
+
+ /**
+ * Returns a {@link Decoder} that decodes using the
+ * Basic type base64 encoding scheme.
+ *
+ * @return A Base64 decoder.
+ */
+ public static Decoder getDecoder() {
+ return Decoder.RFC4648;
+ }
+ /**
+ * This class implements a decoder for decoding byte data using the
+ * Base64 encoding scheme as specified in RFC 4648 and RFC 2045.
+ *
+ *
The Base64 padding character {@code '='} is accepted and
+ * interpreted as the end of the encoded byte data, but is not
+ * required. So if the final unit of the encoded byte data only has
+ * two or three Base64 characters (without the corresponding padding
+ * character(s) padded), they are decoded as if followed by padding
+ * character(s). If there is a padding character present in the
+ * final unit, the correct number of padding character(s) must be
+ * present, otherwise {@code IllegalArgumentException} (
+ * {@code IOException} when reading from a Base64 stream) is thrown
+ * during decoding.
+ *
+ *
Instances of {@link Decoder} class are safe for use by
+ * multiple concurrent threads.
+ *
+ *
Unless otherwise noted, passing a {@code null} argument to
+ * a method of this class will cause a
+ * {@link java.lang.NullPointerException NullPointerException} to
+ * be thrown.
+ *
+ * @see Encoder
+ * @since 1.8
+ */
+ public static class Decoder {
+
+ private final boolean isURL;
+ private final boolean isMIME;
+
+ private Decoder(boolean isURL, boolean isMIME) {
+ this.isURL = isURL;
+ this.isMIME = isMIME;
+ }
+
+ /**
+ * Lookup table for decoding unicode characters drawn from the
+ * "Base64 Alphabet" (as specified in Table 1 of RFC 2045) into
+ * their 6-bit positive integer equivalents. Characters that
+ * are not in the Base64 alphabet but fall within the bounds of
+ * the array are encoded to -1.
+ *
+ */
+ private static final int[] fromBase64 = new int[256];
+ static {
+ Arrays.fill(fromBase64, -1);
+ for (int i = 0; i < Encoder.toBase64.length; i++)
+ fromBase64[Encoder.toBase64[i]] = i;
+ fromBase64['='] = -2;
+ }
+
+ /**
+ * Lookup table for decoding "URL and Filename safe Base64 Alphabet"
+ * as specified in Table2 of the RFC 4648.
+ */
+ private static final int[] fromBase64URL = new int[256];
+
+ static {
+ Arrays.fill(fromBase64URL, -1);
+ for (int i = 0; i < Encoder.toBase64URL.length; i++)
+ fromBase64URL[Encoder.toBase64URL[i]] = i;
+ fromBase64URL['='] = -2;
+ }
+
+ static final Decoder RFC4648 = new Decoder(false, false);
+ static final Decoder RFC4648_URLSAFE = new Decoder(true, false);
+ static final Decoder RFC2045 = new Decoder(false, true);
+
+ /**
+ * Decodes all bytes from the input byte array using the {@link Base64}
+ * encoding scheme, writing the results into a newly-allocated output
+ * byte array. The returned byte array is of the length of the resulting
+ * bytes.
+ *
+ * @param src
+ * the byte array to decode
+ *
+ * @return A newly-allocated byte array containing the decoded bytes.
+ *
+ * @throws IllegalArgumentException
+ * if {@code src} is not in valid Base64 scheme
+ */
+ public byte[] decode(byte[] src) {
+ byte[] dst = new byte[outLength(src, 0, src.length)];
+ int ret = decode0(src, 0, src.length, dst);
+ if (ret != dst.length) {
+ dst = Arrays.copyOf(dst, ret);
+ }
+ return dst;
+ }
+
+ public byte[] decode(String src) {
+ return decode(src.getBytes(Charset.forName("ISO-8859-1")));
+ }
+
+ /**
+ * Decodes all bytes from the input byte array using the {@link Base64}
+ * encoding scheme, writing the results into the given output byte array,
+ * starting at offset 0.
+ *
+ *
It is the responsibility of the invoker of this method to make
+ * sure the output byte array {@code dst} has enough space for decoding
+ * all bytes from the input byte array. No bytes will be be written to
+ * the output byte array if the output byte array is not big enough.
+ *
+ *
If the input byte array is not in valid Base64 encoding scheme
+ * then some bytes may have been written to the output byte array before
+ * IllegalargumentException is thrown.
+ *
+ * @param src
+ * the byte array to decode
+ * @param dst
+ * the output byte array
+ *
+ * @return The number of bytes written to the output byte array
+ *
+ * @throws IllegalArgumentException
+ * if {@code src} is not in valid Base64 scheme, or {@code dst}
+ * does not have enough space for decoding all input bytes.
+ */
+ public int decode(byte[] src, byte[] dst) {
+ int len = outLength(src, 0, src.length);
+ if (dst.length < len)
+ throw new IllegalArgumentException(
+ "Output byte array is too small for decoding all input bytes");
+ return decode0(src, 0, src.length, dst);
+ }
+
+ /**
+ * Decodes all bytes from the input byte buffer using the {@link Base64}
+ * encoding scheme, writing the results into a newly-allocated ByteBuffer.
+ *
+ *
Upon return, the source buffer's position will be updated to
+ * its limit; its limit will not have been changed. The returned
+ * output buffer's position will be zero and its limit will be the
+ * number of resulting decoded bytes
+ *
+ *
{@code IllegalArgumentException} is thrown if the input buffer
+ * is not in valid Base64 encoding scheme. The position of the input
+ * buffer will not be advanced in this case.
+ *
+ * @param buffer
+ * the ByteBuffer to decode
+ *
+ * @return A newly-allocated byte buffer containing the decoded bytes
+ *
+ * @throws IllegalArgumentException
+ * if {@code src} is not in valid Base64 scheme.
+ */
+ public ByteBuffer decode(ByteBuffer buffer) {
+ int pos0 = buffer.position();
+ try {
+ byte[] src;
+ int sp, sl;
+ if (buffer.hasArray()) {
+ src = buffer.array();
+ sp = buffer.arrayOffset() + buffer.position();
+ sl = buffer.arrayOffset() + buffer.limit();
+ buffer.position(buffer.limit());
+ } else {
+ src = new byte[buffer.remaining()];
+ buffer.get(src);
+ sp = 0;
+ sl = src.length;
+ }
+ byte[] dst = new byte[outLength(src, sp, sl)];
+ return ByteBuffer.wrap(dst, 0, decode0(src, sp, sl, dst));
+ } catch (IllegalArgumentException iae) {
+ buffer.position(pos0);
+ throw iae;
+ }
+ }
+
+ private int outLength(byte[] src, int sp, int sl) {
+ int[] base64 = isURL ? fromBase64URL : fromBase64;
+ int paddings = 0;
+ int len = sl - sp;
+ if (len == 0)
+ return 0;
+ if (len < 2) {
+ if (isMIME && base64[0] == -1)
+ return 0;
+ throw new IllegalArgumentException(
+ "Input byte[] should at least have 2 bytes for base64 bytes");
+ }
+ if (isMIME) {
+ // scan all bytes to fill out all non-alphabet. a performance
+ // trade-off of pre-scan or Arrays.copyOf
+ int n = 0;
+ while (sp < sl) {
+ int b = src[sp++] & 0xff;
+ if (b == '=') {
+ len -= (sl - sp + 1);
+ break;
+ }
+ if ((b = base64[b]) == -1)
+ n++;
+ }
+ len -= n;
+ } else {
+ if (src[sl - 1] == '=') {
+ paddings++;
+ if (src[sl - 2] == '=')
+ paddings++;
+ }
+ }
+ if (paddings == 0 && (len & 0x3) != 0)
+ paddings = 4 - (len & 0x3);
+ return 3 * ((len + 3) / 4) - paddings;
+ }
+
+ private int decode0(byte[] src, int sp, int sl, byte[] dst) {
+ int[] base64 = isURL ? fromBase64URL : fromBase64;
+ int dp = 0;
+ int bits = 0;
+ int shiftto = 18; // pos of first byte of 4-byte atom
+ while (sp < sl) {
+ int b = src[sp++] & 0xff;
+ if ((b = base64[b]) < 0) {
+ if (b == -2) { // padding byte '='
+ // = shiftto==18 unnecessary padding
+ // x= shiftto==12 a dangling single x
+ // x to be handled together with non-padding case
+ // xx= shiftto==6&&sp==sl missing last =
+ // xx=y shiftto==6 last is not =
+ if (shiftto == 6 && (sp == sl || src[sp++] != '=') ||
+ shiftto == 18) {
+ throw new IllegalArgumentException(
+ "Input byte array has wrong 4-byte ending unit");
+ }
+ break;
+ }
+ if (isMIME) // skip if for rfc2045
+ continue;
+ else
+ throw new IllegalArgumentException(
+ "Illegal base64 character " +
+ Integer.toString(src[sp - 1], 16));
+ }
+ bits |= (b << shiftto);
+ shiftto -= 6;
+ if (shiftto < 0) {
+ dst[dp++] = (byte)(bits >> 16);
+ dst[dp++] = (byte)(bits >> 8);
+ dst[dp++] = (byte)(bits);
+ shiftto = 18;
+ bits = 0;
+ }
+ }
+ // reached end of byte array or hit padding '=' characters.
+ if (shiftto == 6) {
+ dst[dp++] = (byte)(bits >> 16);
+ } else if (shiftto == 0) {
+ dst[dp++] = (byte)(bits >> 16);
+ dst[dp++] = (byte)(bits >> 8);
+ } else if (shiftto == 12) {
+ // dangling single "x", incorrectly encoded.
+ throw new IllegalArgumentException(
+ "Last unit does not have enough valid bits");
+ }
+ // anything left is invalid, if is not MIME.
+ // if MIME, ignore all non-base64 character
+ while (sp < sl) {
+ if (isMIME && base64[src[sp++]] < 0)
+ continue;
+ throw new IllegalArgumentException(
+ "Input byte array has incorrect ending byte at " + sp);
+ }
+ return dp;
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/common/BorderEx.java b/src/main/java/com/netsdk/common/BorderEx.java
new file mode 100644
index 0000000..91dc7f1
--- /dev/null
+++ b/src/main/java/com/netsdk/common/BorderEx.java
@@ -0,0 +1,17 @@
+package com.netsdk.common;
+
+import javax.swing.BorderFactory;
+import javax.swing.JComponent;
+import javax.swing.border.Border;
+
+/*
+ * 边框设置
+ */
+public class BorderEx {
+ public static void set(JComponent object, String title, int width) {
+ Border innerBorder = BorderFactory.createTitledBorder(title);
+ Border outerBorder = BorderFactory.createEmptyBorder(width, width, width, width);
+ object.setBorder(BorderFactory.createCompoundBorder(outerBorder, innerBorder));
+ }
+
+}
diff --git a/src/main/java/com/netsdk/common/CaseMenu.java b/src/main/java/com/netsdk/common/CaseMenu.java
new file mode 100644
index 0000000..7a573ab
--- /dev/null
+++ b/src/main/java/com/netsdk/common/CaseMenu.java
@@ -0,0 +1,93 @@
+package com.netsdk.common;
+
+import java.lang.reflect.Method;
+import java.util.NoSuchElementException;
+import java.util.Scanner;
+import java.util.Vector;
+
+public class CaseMenu {
+
+ public static class Item {
+ private Object object;
+ private String itemName;
+ private String methodName;
+
+ public Item(Object object, String itemName, String methodName) {
+ super();
+ this.object = object;
+ this.itemName = itemName;
+ this.methodName = methodName;
+ }
+
+ public Object getObject() {
+ return object;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public String getMethodName() {
+ return methodName;
+ }
+ }
+
+ private Vector- items;
+
+ public CaseMenu() {
+ super();
+ items = new Vector
- ();
+ }
+
+ public void addItem(Item item) {
+ items.add(item);
+ }
+
+ private void showItem() {
+ final String format = "%2d\t%-20s\n";
+ int index = 0;
+ System.out.printf(format, index++, "exit App");
+ for (Item item : items) {
+ System.out.printf(format, index++, item.getItemName());
+ }
+ System.out.println("Please input a item index to invoke the method:");
+ }
+
+ public void run() {
+ Scanner scanner = new Scanner(System.in);
+ while(true) {
+ showItem();
+ try {
+ int input = Integer.parseInt(scanner.nextLine());
+
+ if (input <= 0 ) {
+ System.err.println("input <= 0 || scanner.nextLine() == null");
+// scanner.close();
+// System.exit(0);
+ break;
+ }
+
+ if (input < 0 || input > items.size()) {
+ System.err.println("Input Error Item Index.");
+ continue;
+ }
+
+ Item item = items.get(input - 1);
+ Class> itemClass = item.getObject().getClass();
+ Method method = itemClass.getMethod(item.getMethodName());
+ method.invoke(item.getObject());
+ } catch (NoSuchElementException e) {
+// scanner.close();
+// System.exit(0);
+ break;
+ } catch (NumberFormatException e) {
+ System.err.println("Input Error NumberFormat.");
+ continue;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ scanner.close();
+ }
+}
diff --git a/src/main/java/com/netsdk/common/DateChooserJButton.java b/src/main/java/com/netsdk/common/DateChooserJButton.java
new file mode 100644
index 0000000..c11c367
--- /dev/null
+++ b/src/main/java/com/netsdk/common/DateChooserJButton.java
@@ -0,0 +1,625 @@
+package com.netsdk.common;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSpinner;
+import javax.swing.SpinnerNumberModel;
+import javax.swing.SwingConstants;
+import javax.swing.UIManager;
+import javax.swing.border.LineBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+/**
+ * 时间选择器, 年月日-时分秒
+ */
+public class DateChooserJButton extends JButton {
+ private static final long serialVersionUID = 1L;
+
+ int startYear = 1980; // 默认【最小】显示年份
+ int lastYear = 2050; // 默认【最大】显示年份
+
+ private DateChooser dateChooser = null;
+ private String preLabel = "";
+ private String originalText = null;
+ private SimpleDateFormat sdf = null;
+
+ private JSpinner yearSpin;
+ private JSpinner monthSpin;
+ private JSpinner daySpin;
+ private JSpinner hourSpin;
+ private JSpinner minuteSpin;
+ private JSpinner secondSpin;
+
+ public DateChooserJButton() {
+ this(getNowDate());
+
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public DateChooserJButton(String dateString) {
+ this();
+
+ setText(getDefaultDateFormat(), dateString);
+ //保存原始是日期时间
+ initOriginalText(dateString);
+ }
+
+ public DateChooserJButton(SimpleDateFormat df, String dateString) {
+ this();
+ setText(df, dateString);
+
+ //记忆当前的日期格式化器
+ this.sdf = df;
+
+ //记忆原始日期时间
+ Date originalDate = null;
+ try {
+ originalDate = df.parse(dateString);
+ } catch (ParseException ex) {
+ originalDate = getNowDate();
+ }
+ initOriginalText(originalDate);
+ }
+
+ public DateChooserJButton(Date date) {
+ this("", date);
+ //记忆原始日期时间
+ initOriginalText(date);
+ }
+
+ public DateChooserJButton(String preLabel, Date date) {
+ if (preLabel != null) {
+ this.preLabel = preLabel;
+ }
+ setDate(date);
+ //记忆原始是日期时间
+ initOriginalText(date);
+
+ setBorder(null);
+ setCursor(new Cursor(Cursor.HAND_CURSOR));
+ super.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if (dateChooser == null) {
+ dateChooser = new DateChooser();
+ }
+
+ dateChooser.showDateChooser();
+ }
+ });
+ }
+
+ public DateChooserJButton(int startYear, int lastYear) {
+ this();
+ this.startYear = startYear;
+ this.lastYear = lastYear;
+ }
+
+ private static Date getNowDate() {
+ return Calendar.getInstance().getTime();
+ }
+
+ private static SimpleDateFormat getDefaultDateFormat() {
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ }
+
+ /**
+ * 得到当前使用的日期格式化器
+ * @return 日期格式化器
+ */
+ public SimpleDateFormat getCurrentSimpleDateFormat(){
+ if(this.sdf != null){
+ return sdf;
+ }else{
+ return getDefaultDateFormat();
+ }
+ }
+
+
+ //保存原始是日期时间
+ private void initOriginalText(String dateString) {
+ this.originalText = dateString;
+ }
+
+ //保存原始是日期时间
+ private void initOriginalText(Date date) {
+ this.originalText = preLabel + getDefaultDateFormat().format(date);
+ }
+
+ /**
+ * 得到当前记忆的原始日期时间
+ * @return 当前记忆的原始日期时间(未修改前的日期时间)
+ */
+ public String getOriginalText() {
+ return originalText;
+ }
+
+ // 覆盖父类的方法
+ @Override
+ public void setText(String s) {
+ Date date;
+ try {
+ date = getDefaultDateFormat().parse(s);
+ } catch (ParseException e) {
+ date = getNowDate();
+ }
+ setDate(date);
+ initOriginalText(date);
+ }
+
+ public void setText(SimpleDateFormat df, String s) {
+ Date date;
+ try {
+ date = df.parse(s);
+ } catch (ParseException e) {
+ date = getNowDate();
+ }
+ setDate(date);
+ initOriginalText(date);
+ }
+
+ public void setDate(Date date) {
+ super.setText(preLabel + getDefaultDateFormat().format(date));
+ }
+
+ public Date getDate() {
+ String dateString = getText().substring(preLabel.length());
+ try {
+ SimpleDateFormat currentSdf = getCurrentSimpleDateFormat();
+ return currentSdf.parse(dateString);
+ } catch (ParseException e) {
+ return getNowDate();
+ }
+ }
+
+ /**
+ * 覆盖父类的方法使之无效
+ * @param listener 响应监听器
+ */
+ @Override
+ public void addActionListener(ActionListener listener) {
+ }
+
+ /**
+ * 内部类,主要是定义一个JPanel,然后把日历相关的所有内容填入本JPanel,
+ * 然后再创建一个JDialog,把本内部类定义的JPanel放入JDialog的内容区
+ */
+ private class DateChooser extends JPanel implements MouseListener, ChangeListener {
+ private static final long serialVersionUID = 1L;
+
+ JLabel yearLabel;
+ JLabel monthLabel;
+ JLabel dayLabel;
+ JLabel hourLabel;
+ JLabel minuteLabel;
+ JLabel secondLabel;
+
+ int width = 485; // 界面宽度
+ int height = 230; // 界面高度
+ Color backGroundColor = Color.gray; // 底色
+ // 月历表格配色----------------//
+ Color palletTableColor = Color.white; // 日历表底色
+ Color todayBackColor = Color.orange; // 今天背景色
+ Color weekFontColor = Color.blue; // 星期文字色
+ Color dateFontColor = Color.black; // 日期文字色
+ Color weekendFontColor = Color.red; // 周末文字色
+ // 控制条配色------------------//
+ Color controlLineColor = Color.pink; // 控制条底色
+ Color controlTextColor = Color.white; // 控制条标签文字色
+
+ /** 点击DateChooserButton时弹出的对话框,日历内容在这个对话框内 */
+ JDialog dialog;
+ JLabel[][] daysLabels = new JLabel[6][7];
+
+ DateChooser() {
+ setLayout(new BorderLayout());
+ setBorder(new LineBorder(backGroundColor, 2));
+ setBackground(backGroundColor);
+
+ JPanel topYearAndMonth = createYearAndMonthPanal();
+ add(topYearAndMonth, BorderLayout.NORTH);
+ JPanel centerWeekAndDay = createWeekAndDayPanal();
+ add(centerWeekAndDay, BorderLayout.CENTER);
+ JPanel buttonBarPanel = createButtonBarPanel();
+ this.add(buttonBarPanel, java.awt.BorderLayout.SOUTH);
+ }
+
+ private JPanel createYearAndMonthPanal() {
+ Calendar c = getCalendar();
+ int currentYear = c.get(Calendar.YEAR);
+ int currentMonth = c.get(Calendar.MONTH) + 1;
+ int currentDay = c.get(Calendar.DAY_OF_MONTH);
+ int currentHour = c.get(Calendar.HOUR_OF_DAY);
+ int currentMinute = c.get(Calendar.MINUTE);
+ int currentSecond = c.get(Calendar.SECOND);
+
+ JPanel result = new JPanel();
+ result.setLayout(new FlowLayout());
+ result.setBackground(controlLineColor);
+
+ yearSpin = new JSpinner(new SpinnerNumberModel(currentYear, startYear, lastYear, 1));
+ yearSpin.setPreferredSize(new Dimension(48, 20));
+ yearSpin.setName("Year");
+ yearSpin.setEditor(new JSpinner.NumberEditor(yearSpin, "####"));
+ yearSpin.addChangeListener(this);
+ result.add(yearSpin);
+
+ yearLabel = new JLabel(Res.string().getYear());
+ yearLabel.setForeground(controlTextColor);
+ result.add(yearLabel);
+
+ monthSpin = new JSpinner(new SpinnerNumberModel(currentMonth, 1, 12, 1));
+ monthSpin.setPreferredSize(new Dimension(35, 20));
+ monthSpin.setName("Month");
+ monthSpin.addChangeListener(this);
+ result.add(monthSpin);
+
+ monthLabel = new JLabel(Res.string().getMonth());
+ monthLabel.setForeground(controlTextColor);
+ result.add(monthLabel);
+
+ //如果这里要能够选择,会要判断很多东西,比如每个月分别由多少日,以及闰年问题.所以,就干脆把Enable设为false
+ daySpin = new JSpinner(new SpinnerNumberModel(currentDay, 1, 31, 1));
+ daySpin.setPreferredSize(new Dimension(35, 20));
+ daySpin.setName("Day");
+ daySpin.addChangeListener(this);
+ daySpin.setEnabled(false);
+ result.add(daySpin);
+
+ dayLabel = new JLabel(Res.string().getDay());
+ dayLabel.setForeground(controlTextColor);
+ result.add(dayLabel);
+
+ hourSpin = new JSpinner(new SpinnerNumberModel(currentHour, 0, 23, 1));
+ hourSpin.setPreferredSize(new Dimension(35, 20));
+ hourSpin.setName("Hour");
+ hourSpin.addChangeListener(this);
+ result.add(hourSpin);
+
+ hourLabel = new JLabel(Res.string().getHour());
+ hourLabel.setForeground(controlTextColor);
+ result.add(hourLabel);
+
+ minuteSpin = new JSpinner(new SpinnerNumberModel(currentMinute, 0, 59, 1));
+ minuteSpin.setPreferredSize(new Dimension(35, 20));
+ minuteSpin.setName("Minute");
+ minuteSpin.addChangeListener(this);
+ result.add(minuteSpin);
+
+ minuteLabel = new JLabel(Res.string().getMinute());
+ minuteLabel.setForeground(controlTextColor);
+ result.add(minuteLabel);
+
+ secondSpin = new JSpinner(new SpinnerNumberModel(currentSecond, 0, 59, 1));
+ secondSpin.setPreferredSize(new Dimension(35, 20));
+ secondSpin.setName("Second");
+ secondSpin.addChangeListener(this);
+ result.add(secondSpin);
+
+ secondLabel = new JLabel(Res.string().getSecond());
+ secondLabel.setForeground(controlTextColor);
+ result.add(secondLabel);
+
+ return result;
+ }
+
+ private JPanel createWeekAndDayPanal() {
+ Res.string().getWeek();
+ JPanel result = new JPanel();
+ // 设置固定字体,以免调用环境改变影响界面美观
+ result.setFont(new Font("宋体", Font.PLAIN, 12));
+ result.setLayout(new GridLayout(7, 7));
+ result.setBackground(Color.white);
+ JLabel cell;
+
+ for (int i = 0; i < 7; i++) {
+ cell = new JLabel(Res.string().getWeek()[i]);
+ cell.setHorizontalAlignment(JLabel.RIGHT);
+ if (i == 0 || i == 6) {
+ cell.setForeground(weekendFontColor);
+ } else {
+ cell.setForeground(weekFontColor);
+ }
+ result.add(cell);
+ }
+
+// int actionCommandId = 0;
+ for (int i = 0; i < 6; i++) {
+ for (int j = 0; j < 7; j++) {
+ JLabel numberLabel = new JLabel();
+ numberLabel.setBorder(null);
+ numberLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+// numberLabel.setActionCommand(String.valueOf(actionCommandId));
+ numberLabel.addMouseListener(this);
+ numberLabel.setBackground(palletTableColor);
+ numberLabel.setForeground(dateFontColor);
+ if (j == 0 || j == 6) {
+ numberLabel.setForeground(weekendFontColor);
+ } else {
+ numberLabel.setForeground(dateFontColor);
+ }
+ daysLabels[i][j] = numberLabel;
+ result.add(numberLabel);
+// actionCommandId++;
+ }
+ }
+
+ return result;
+ }
+
+ /** 得到DateChooserButton的当前text,本方法是为按钮事件匿名类准备的。 */
+ public String getTextOfDateChooserButton() {
+ return getText();
+ }
+
+ /** 恢复DateChooserButton的原始日期时间text,本方法是为按钮事件匿名类准备的。 */
+ public void restoreTheOriginalDate() {
+ String originalText = getOriginalText();
+ setText(originalText);
+ }
+
+ private JPanel createButtonBarPanel() {
+ JPanel panel = new JPanel();
+ panel.setLayout(new java.awt.GridLayout(1, 2));
+
+ JButton ok = new JButton(Res.string().getConfirm());
+ ok.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ //记忆原始日期时间
+ initOriginalText(getTextOfDateChooserButton());
+ //隐藏日历对话框
+ dialog.setVisible(false);
+ }
+ });
+ panel.add(ok);
+
+ JButton cancel = new JButton(Res.string().getCancel());
+ cancel.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ //恢复原始的日期时间
+ restoreTheOriginalDate();
+ //隐藏日历对话框
+ dialog.setVisible(false);
+ }
+ });
+
+ panel.add(cancel);
+ return panel;
+ }
+
+ private JDialog createDialog() {
+ JDialog result = new JDialog();
+ result.setTitle(Res.string().getDateChooser());
+ result.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+ result.getContentPane().add(this, BorderLayout.CENTER);
+ result.pack();
+ result.setSize(width, height);
+ result.setModal(true);
+
+ result.addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ //恢复原始的日期时间
+ restoreTheOriginalDate();
+ //隐藏日历对话框
+ dialog.setVisible(false);
+ }
+ });
+
+ return result;
+ }
+
+ void showDateChooser() {
+ if (dialog == null) {
+ dialog = createDialog();
+ }
+ dialog.setLocationRelativeTo(null);
+ flushWeekAndDay();
+ dialog.setVisible(true);
+ }
+
+ private Calendar getCalendar() {
+ Calendar result = Calendar.getInstance();
+ result.setTime(getDate());
+ return result;
+ }
+
+ private int getSelectedYear() {
+ return ((Integer) yearSpin.getValue()).intValue();
+ }
+
+ private int getSelectedMonth() {
+ return ((Integer) monthSpin.getValue()).intValue();
+ }
+
+ private int getSelectedHour() {
+ return ((Integer) hourSpin.getValue()).intValue();
+ }
+
+ private int getSelectedMinite() {
+ return ((Integer) minuteSpin.getValue()).intValue();
+ }
+
+ private int getSelectedSecond() {
+ return ((Integer) secondSpin.getValue()).intValue();
+ }
+
+ private void dayColorUpdate(boolean isOldDay) {
+ Calendar c = getCalendar();
+ int day = c.get(Calendar.DAY_OF_MONTH);
+ c.set(Calendar.DAY_OF_MONTH, 1);
+ int actionCommandId = day - 2 + c.get(Calendar.DAY_OF_WEEK);
+ int i = actionCommandId / 7;
+ int j = actionCommandId % 7;
+ if (isOldDay) {
+ daysLabels[i][j].setForeground(dateFontColor);
+ } else {
+ daysLabels[i][j].setForeground(todayBackColor);
+ }
+ }
+
+ private void flushWeekAndDay() {
+ Calendar c = getCalendar();
+ c.set(Calendar.DAY_OF_MONTH, 1);
+ int maxDayNo = c.getActualMaximum(Calendar.DAY_OF_MONTH);
+ int dayNo = 2 - c.get(Calendar.DAY_OF_WEEK);
+ for (int i = 0; i < 6; i++) {
+ for (int j = 0; j < 7; j++) {
+ String s = "";
+ if (dayNo >= 1 && dayNo <= maxDayNo) {
+ s = String.valueOf(dayNo);
+ }
+ daysLabels[i][j].setText(s);
+ dayNo++;
+ }
+ }
+
+ // 打开日历时,根据按钮的时间,设置日历的时间
+ String[] date1 = getText().split(" ")[0].split("-");
+ String[] date2 = getText().split(" ")[1].split(":");
+
+ yearSpin.setValue(new Integer(date1[0]));
+ monthSpin.setValue(new Integer(date1[1]));
+ daySpin.setValue(new Integer(date1[2]));
+ hourSpin.setValue(new Integer(date2[0]));
+ minuteSpin.setValue(new Integer(date2[1]));
+ secondSpin.setValue(new Integer(date2[2]));
+
+ // 重置日历天的数字颜色
+ for(int i = 0; i < 6; i++) {
+ for(int j = 0; j < 7; j++) {
+ if(!daysLabels[i][j].getText().equals("")) {
+ daysLabels[i][j].setForeground(Color.BLACK);
+ }
+ }
+ }
+
+ // 重置日历星期六、星期日的数字颜色
+ for(int i = 0; i < 6; i++) {
+ if(!daysLabels[i][0].getText().equals("")) {
+ daysLabels[i][0].setForeground(weekendFontColor);
+ }
+ if(!daysLabels[i][6].getText().equals("")) {
+ daysLabels[i][6].setForeground(weekendFontColor);
+ }
+ }
+
+ // 设置当天的数字颜色
+ for(int i = 0; i < 6; i++) {
+ for(int j = 0; j < 7; j++) {
+ if(daysLabels[i][j].getText().equals(date1[2])) {
+ daysLabels[i][j].setForeground(todayBackColor);
+ }
+ }
+ }
+
+ dayColorUpdate(false);
+ }
+
+ /**
+ * 选择日期时的响应事件
+ */
+ @Override
+ public void stateChanged(ChangeEvent e) {
+ JSpinner source = (JSpinner) e.getSource();
+ Calendar c = getCalendar();
+ if (source.getName().equals("Hour")) {
+ c.set(Calendar.HOUR_OF_DAY, getSelectedHour());
+ setDate(c.getTime());
+ return;
+ }
+ if (source.getName().equals("Minute")) {
+ c.set(Calendar.MINUTE, getSelectedMinite());
+ setDate(c.getTime());
+ return;
+ }
+ if (source.getName().equals("Second")) {
+ c.set(Calendar.SECOND, getSelectedSecond());
+ setDate(c.getTime());
+ return;
+ }
+
+ dayColorUpdate(true);
+
+ if (source.getName().equals("Year")) {
+ c.set(Calendar.YEAR, getSelectedYear());
+ } else if (source.getName().equals("Month")) {
+ c.set(Calendar.MONTH, getSelectedMonth() - 1);
+ }
+ setDate(c.getTime());
+ flushWeekAndDay();
+ }
+
+ /**
+ * 选择日期时的响应事件
+ */
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ JLabel source = (JLabel) e.getSource();
+ if (source.getText().length() == 0) {
+ return;
+ }
+ dayColorUpdate(true);
+ source.setForeground(todayBackColor);
+ int newDay = Integer.parseInt(source.getText());
+ Calendar c = getCalendar();
+ c.set(Calendar.DAY_OF_MONTH, newDay);
+ setDate(c.getTime());
+ //把daySpin中的值也变了
+ daySpin.setValue(Integer.valueOf(newDay));
+ }
+
+ @Override
+ public void mouseEntered(MouseEvent arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void mouseExited(MouseEvent arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void mousePressed(MouseEvent arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent arg0) {
+ // TODO Auto-generated method stub
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/common/DateChooserJButtonEx.java b/src/main/java/com/netsdk/common/DateChooserJButtonEx.java
new file mode 100644
index 0000000..3d842a5
--- /dev/null
+++ b/src/main/java/com/netsdk/common/DateChooserJButtonEx.java
@@ -0,0 +1,587 @@
+package com.netsdk.common;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSpinner;
+import javax.swing.SpinnerNumberModel;
+import javax.swing.SwingConstants;
+import javax.swing.UIManager;
+import javax.swing.border.LineBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+/**
+ * 时间选择器, 年月日
+ */
+public class DateChooserJButtonEx extends JButton {
+ private static final long serialVersionUID = 1L;
+
+ int startYear = 1980; // 默认【最小】显示年份
+ int lastYear = 2050; // 默认【最大】显示年份
+
+ private DateChooser dateChooser = null;
+ private String preLabel = "";
+ private String originalText = null;
+ private SimpleDateFormat sdf = null;
+
+ private JSpinner yearSpin;
+ private JSpinner monthSpin;
+ private JSpinner daySpin;
+ private JSpinner hourSpin;
+ private JSpinner minuteSpin;
+ private JSpinner secondSpin;
+
+ public DateChooserJButtonEx() {
+ this(getNowDate());
+
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public DateChooserJButtonEx(String dateString) {
+ this();
+
+ setText(getDefaultDateFormat(), dateString);
+ //保存原始是日期时间
+ initOriginalText(dateString);
+ }
+
+ public DateChooserJButtonEx(SimpleDateFormat df, String dateString) {
+ this();
+ setText(df, dateString);
+
+ //记忆当前的日期格式化器
+ this.sdf = df;
+
+ //记忆原始日期时间
+ Date originalDate = null;
+ try {
+ originalDate = df.parse(dateString);
+ } catch (ParseException ex) {
+ originalDate = getNowDate();
+ }
+ initOriginalText(originalDate);
+ }
+
+ public DateChooserJButtonEx(Date date) {
+ this("", date);
+ //记忆原始日期时间
+ initOriginalText(date);
+ }
+
+ public DateChooserJButtonEx(String preLabel, Date date) {
+ if (preLabel != null) {
+ this.preLabel = preLabel;
+ }
+ setDate(date);
+ //记忆原始是日期时间
+ initOriginalText(date);
+
+ setBorder(null);
+ setCursor(new Cursor(Cursor.HAND_CURSOR));
+ super.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if (dateChooser == null) {
+ dateChooser = new DateChooser();
+ }
+
+ dateChooser.showDateChooser();
+ }
+ });
+ }
+
+ public void setStartYear(int startYear) {
+ this.startYear = startYear;
+ }
+
+ public void setLastYear(int lastYear) {
+ this.lastYear = lastYear;
+ }
+
+ private static Date getNowDate() {
+ return Calendar.getInstance().getTime();
+ }
+
+ private static SimpleDateFormat getDefaultDateFormat() {
+ return new SimpleDateFormat("yyyy-MM-dd");
+ }
+
+ /**
+ * 得到当前使用的日期格式化器
+ * @return 日期格式化器
+ */
+ public SimpleDateFormat getCurrentSimpleDateFormat(){
+ if(this.sdf != null){
+ return sdf;
+ }else{
+ return getDefaultDateFormat();
+ }
+ }
+
+
+ //保存原始是日期时间
+ private void initOriginalText(String dateString) {
+ this.originalText = dateString;
+ }
+
+ //保存原始是日期时间
+ private void initOriginalText(Date date) {
+ this.originalText = preLabel + getDefaultDateFormat().format(date);
+ }
+
+ /**
+ * 得到当前记忆的原始日期时间
+ * @return 当前记忆的原始日期时间(未修改前的日期时间)
+ */
+ public String getOriginalText() {
+ return originalText;
+ }
+
+ // 覆盖父类的方法
+ @Override
+ public void setText(String s) {
+ Date date;
+ try {
+ date = getDefaultDateFormat().parse(s);
+ } catch (ParseException e) {
+ date = getNowDate();
+ }
+ setDate(date);
+ initOriginalText(date);
+ }
+
+ public void setText(SimpleDateFormat df, String s) {
+ Date date;
+ try {
+ date = df.parse(s);
+ } catch (ParseException e) {
+ date = getNowDate();
+ }
+ setDate(date);
+ initOriginalText(date);
+ }
+
+ public void setDate(Date date) {
+ super.setText(preLabel + getDefaultDateFormat().format(date));
+ }
+
+ public Date getDate() {
+ String dateString = getText().substring(preLabel.length());
+ try {
+ SimpleDateFormat currentSdf = getCurrentSimpleDateFormat();
+ return currentSdf.parse(dateString);
+ } catch (ParseException e) {
+ return getNowDate();
+ }
+ }
+
+ /**
+ * 覆盖父类的方法使之无效
+ * @param listener 响应监听器
+ */
+ @Override
+ public void addActionListener(ActionListener listener) {
+ }
+
+ /**
+ * 内部类,主要是定义一个JPanel,然后把日历相关的所有内容填入本JPanel,
+ * 然后再创建一个JDialog,把本内部类定义的JPanel放入JDialog的内容区
+ */
+ private class DateChooser extends JPanel implements MouseListener, ChangeListener {
+ private static final long serialVersionUID = 1L;
+
+ JLabel yearLabel;
+ JLabel monthLabel;
+ JLabel dayLabel;
+
+ int width = 485; // 界面宽度
+ int height = 230; // 界面高度
+ Color backGroundColor = Color.gray; // 底色
+ // 月历表格配色----------------//
+ Color palletTableColor = Color.white; // 日历表底色
+ Color todayBackColor = Color.orange; // 今天背景色
+ Color weekFontColor = Color.blue; // 星期文字色
+ Color dateFontColor = Color.black; // 日期文字色
+ Color weekendFontColor = Color.red; // 周末文字色
+ // 控制条配色------------------//
+ Color controlLineColor = Color.pink; // 控制条底色
+ Color controlTextColor = Color.white; // 控制条标签文字色
+
+ /** 点击DateChooserButton时弹出的对话框,日历内容在这个对话框内 */
+ JDialog dialog;
+ JLabel[][] daysLabels = new JLabel[6][7];
+
+ DateChooser() {
+ setLayout(new BorderLayout());
+ setBorder(new LineBorder(backGroundColor, 2));
+ setBackground(backGroundColor);
+
+ JPanel topYearAndMonth = createYearAndMonthPanal();
+ add(topYearAndMonth, BorderLayout.NORTH);
+ JPanel centerWeekAndDay = createWeekAndDayPanal();
+ add(centerWeekAndDay, BorderLayout.CENTER);
+ JPanel buttonBarPanel = createButtonBarPanel();
+ this.add(buttonBarPanel, java.awt.BorderLayout.SOUTH);
+ }
+
+ private JPanel createYearAndMonthPanal() {
+ Calendar c = getCalendar();
+ int currentYear = c.get(Calendar.YEAR);
+ int currentMonth = c.get(Calendar.MONTH) + 1;
+ int currentDay = c.get(Calendar.DAY_OF_MONTH);
+
+ JPanel result = new JPanel();
+ result.setLayout(new FlowLayout());
+ result.setBackground(controlLineColor);
+
+ yearSpin = new JSpinner(new SpinnerNumberModel(currentYear, startYear, lastYear, 1));
+ yearSpin.setPreferredSize(new Dimension(48, 20));
+ yearSpin.setName("Year");
+ yearSpin.setEditor(new JSpinner.NumberEditor(yearSpin, "####"));
+ yearSpin.addChangeListener(this);
+ result.add(yearSpin);
+
+ yearLabel = new JLabel(Res.string().getYear());
+ yearLabel.setForeground(controlTextColor);
+ result.add(yearLabel);
+
+ monthSpin = new JSpinner(new SpinnerNumberModel(currentMonth, 1, 12, 1));
+ monthSpin.setPreferredSize(new Dimension(35, 20));
+ monthSpin.setName("Month");
+ monthSpin.addChangeListener(this);
+ result.add(monthSpin);
+
+ monthLabel = new JLabel(Res.string().getMonth());
+ monthLabel.setForeground(controlTextColor);
+ result.add(monthLabel);
+
+ //如果这里要能够选择,会要判断很多东西,比如每个月分别由多少日,以及闰年问题.所以,就干脆把Enable设为false
+ daySpin = new JSpinner(new SpinnerNumberModel(currentDay, 1, 31, 1));
+ daySpin.setPreferredSize(new Dimension(35, 20));
+ daySpin.setName("Day");
+ daySpin.addChangeListener(this);
+ daySpin.setEnabled(false);
+ result.add(daySpin);
+
+ dayLabel = new JLabel(Res.string().getDay());
+ dayLabel.setForeground(controlTextColor);
+ result.add(dayLabel);
+
+ return result;
+ }
+
+ private JPanel createWeekAndDayPanal() {
+ Res.string().getWeek();
+ JPanel result = new JPanel();
+ // 设置固定字体,以免调用环境改变影响界面美观
+ result.setFont(new Font("宋体", Font.PLAIN, 12));
+ result.setLayout(new GridLayout(7, 7));
+ result.setBackground(Color.white);
+ JLabel cell;
+
+ for (int i = 0; i < 7; i++) {
+ cell = new JLabel(Res.string().getWeek()[i]);
+ cell.setHorizontalAlignment(JLabel.RIGHT);
+ if (i == 0 || i == 6) {
+ cell.setForeground(weekendFontColor);
+ } else {
+ cell.setForeground(weekFontColor);
+ }
+ result.add(cell);
+ }
+
+// int actionCommandId = 0;
+ for (int i = 0; i < 6; i++) {
+ for (int j = 0; j < 7; j++) {
+ JLabel numberLabel = new JLabel();
+ numberLabel.setBorder(null);
+ numberLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+// numberLabel.setActionCommand(String.valueOf(actionCommandId));
+ numberLabel.addMouseListener(this);
+ numberLabel.setBackground(palletTableColor);
+ numberLabel.setForeground(dateFontColor);
+ if (j == 0 || j == 6) {
+ numberLabel.setForeground(weekendFontColor);
+ } else {
+ numberLabel.setForeground(dateFontColor);
+ }
+ daysLabels[i][j] = numberLabel;
+ result.add(numberLabel);
+// actionCommandId++;
+ }
+ }
+
+ return result;
+ }
+
+ /** 得到DateChooserButton的当前text,本方法是为按钮事件匿名类准备的。 */
+ public String getTextOfDateChooserButton() {
+ return getText();
+ }
+
+ /** 恢复DateChooserButton的原始日期时间text,本方法是为按钮事件匿名类准备的。 */
+ public void restoreTheOriginalDate() {
+ String originalText = getOriginalText();
+ setText(originalText);
+ }
+
+ private JPanel createButtonBarPanel() {
+ JPanel panel = new JPanel();
+ panel.setLayout(new java.awt.GridLayout(1, 2));
+
+ JButton ok = new JButton(Res.string().getConfirm());
+ ok.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ //记忆原始日期时间
+ initOriginalText(getTextOfDateChooserButton());
+ //隐藏日历对话框
+ dialog.setVisible(false);
+ }
+ });
+ panel.add(ok);
+
+ JButton cancel = new JButton(Res.string().getCancel());
+ cancel.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ //恢复原始的日期时间
+ restoreTheOriginalDate();
+ //隐藏日历对话框
+ dialog.setVisible(false);
+ }
+ });
+
+ panel.add(cancel);
+ return panel;
+ }
+
+ private JDialog createDialog() {
+ JDialog result = new JDialog();
+ result.setTitle(Res.string().getDateChooser());
+ result.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+ result.getContentPane().add(this, BorderLayout.CENTER);
+ result.pack();
+ result.setSize(width, height);
+ result.setModal(true);
+
+ result.addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ //恢复原始的日期时间
+ restoreTheOriginalDate();
+ //隐藏日历对话框
+ dialog.setVisible(false);
+ }
+ });
+
+ return result;
+ }
+
+ void showDateChooser() {
+ if (dialog == null) {
+ dialog = createDialog();
+ }
+ dialog.setLocationRelativeTo(null);
+ flushWeekAndDay();
+ dialog.setVisible(true);
+ }
+
+ private Calendar getCalendar() {
+ Calendar result = Calendar.getInstance();
+ result.setTime(getDate());
+ return result;
+ }
+
+ private int getSelectedYear() {
+ return ((Integer) yearSpin.getValue()).intValue();
+ }
+
+ private int getSelectedMonth() {
+ return ((Integer) monthSpin.getValue()).intValue();
+ }
+
+ private int getSelectedHour() {
+ return ((Integer) hourSpin.getValue()).intValue();
+ }
+
+ private int getSelectedMinite() {
+ return ((Integer) minuteSpin.getValue()).intValue();
+ }
+
+ private int getSelectedSecond() {
+ return ((Integer) secondSpin.getValue()).intValue();
+ }
+
+ private void dayColorUpdate(boolean isOldDay) {
+ Calendar c = getCalendar();
+ int day = c.get(Calendar.DAY_OF_MONTH);
+ c.set(Calendar.DAY_OF_MONTH, 1);
+ int actionCommandId = day - 2 + c.get(Calendar.DAY_OF_WEEK);
+ int i = actionCommandId / 7;
+ int j = actionCommandId % 7;
+ if (isOldDay) {
+ daysLabels[i][j].setForeground(dateFontColor);
+ } else {
+ daysLabels[i][j].setForeground(todayBackColor);
+ }
+ }
+
+ private void flushWeekAndDay() {
+ Calendar c = getCalendar();
+ c.set(Calendar.DAY_OF_MONTH, 1);
+ int maxDayNo = c.getActualMaximum(Calendar.DAY_OF_MONTH);
+ int dayNo = 2 - c.get(Calendar.DAY_OF_WEEK);
+ for (int i = 0; i < 6; i++) {
+ for (int j = 0; j < 7; j++) {
+ String s = "";
+ if (dayNo >= 1 && dayNo <= maxDayNo) {
+ s = String.valueOf(dayNo);
+ }
+ daysLabels[i][j].setText(s);
+ dayNo++;
+ }
+ }
+
+ // 打开日历时,根据按钮的时间,设置日历的时间
+ String[] date1 = getText().split(" ")[0].split("-");
+
+ yearSpin.setValue(new Integer(date1[0]));
+ monthSpin.setValue(new Integer(date1[1]));
+ daySpin.setValue(new Integer(date1[2]));
+
+ // 重置日历天的数字颜色
+ for(int i = 0; i < 6; i++) {
+ for(int j = 0; j < 7; j++) {
+ if(!daysLabels[i][j].getText().equals("")) {
+ daysLabels[i][j].setForeground(Color.BLACK);
+ }
+ }
+ }
+
+ // 重置日历星期六、星期日的数字颜色
+ for(int i = 0; i < 6; i++) {
+ if(!daysLabels[i][0].getText().equals("")) {
+ daysLabels[i][0].setForeground(weekendFontColor);
+ }
+ if(!daysLabels[i][6].getText().equals("")) {
+ daysLabels[i][6].setForeground(weekendFontColor);
+ }
+ }
+
+ // 设置当天的数字颜色
+ for(int i = 0; i < 6; i++) {
+ for(int j = 0; j < 7; j++) {
+ if(daysLabels[i][j].getText().equals(date1[2])) {
+ daysLabels[i][j].setForeground(todayBackColor);
+ }
+ }
+ }
+
+ dayColorUpdate(false);
+ }
+
+ /**
+ * 选择日期时的响应事件
+ */
+ @Override
+ public void stateChanged(ChangeEvent e) {
+ JSpinner source = (JSpinner) e.getSource();
+ Calendar c = getCalendar();
+ if (source.getName().equals("Hour")) {
+ c.set(Calendar.HOUR_OF_DAY, getSelectedHour());
+ setDate(c.getTime());
+ return;
+ }
+ if (source.getName().equals("Minute")) {
+ c.set(Calendar.MINUTE, getSelectedMinite());
+ setDate(c.getTime());
+ return;
+ }
+ if (source.getName().equals("Second")) {
+ c.set(Calendar.SECOND, getSelectedSecond());
+ setDate(c.getTime());
+ return;
+ }
+
+ dayColorUpdate(true);
+
+ if (source.getName().equals("Year")) {
+ c.set(Calendar.YEAR, getSelectedYear());
+ } else if (source.getName().equals("Month")) {
+ c.set(Calendar.MONTH, getSelectedMonth() - 1);
+ }
+ setDate(c.getTime());
+ flushWeekAndDay();
+ }
+
+ /**
+ * 选择日期时的响应事件
+ */
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ JLabel source = (JLabel) e.getSource();
+ if (source.getText().length() == 0) {
+ return;
+ }
+ dayColorUpdate(true);
+ source.setForeground(todayBackColor);
+ int newDay = Integer.parseInt(source.getText());
+ Calendar c = getCalendar();
+ c.set(Calendar.DAY_OF_MONTH, newDay);
+ setDate(c.getTime());
+ //把daySpin中的值也变了
+ daySpin.setValue(Integer.valueOf(newDay));
+ }
+
+ @Override
+ public void mouseEntered(MouseEvent arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void mouseExited(MouseEvent arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void mousePressed(MouseEvent arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent arg0) {
+ // TODO Auto-generated method stub
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/common/DeviceManagerListener.java b/src/main/java/com/netsdk/common/DeviceManagerListener.java
new file mode 100644
index 0000000..a10343c
--- /dev/null
+++ b/src/main/java/com/netsdk/common/DeviceManagerListener.java
@@ -0,0 +1,5 @@
+package com.netsdk.common;
+
+public interface DeviceManagerListener {
+ void onDeviceManager(String deviceId, String username, String password);
+}
diff --git a/src/main/java/com/netsdk/common/ErrorCode.java b/src/main/java/com/netsdk/common/ErrorCode.java
new file mode 100644
index 0000000..28f41b3
--- /dev/null
+++ b/src/main/java/com/netsdk/common/ErrorCode.java
@@ -0,0 +1,872 @@
+package com.netsdk.common;
+
+import com.netsdk.lib.LastError;
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 登录设备设备错误状态
+ */
+public class ErrorCode {
+
+ /**
+ * 登录设备设备错误状态中英文
+ * @param err 接口CLIENT_GetLastError返回, error code: (0x80000000|" + (LoginModule.netsdk.CLIENT_GetLastError() & 0x7fffffff) +")
+ * @return
+ */
+ public static String getErrorCode(int err) {
+ String msg = "";
+ switch(err) {
+ case LastError.NET_NOERROR: // 0 没有错误
+ msg = Res.string().getBundle().getString("NET_ERROR");
+ break;
+ case LastError.NET_ERROR: // -1 未知错误
+ msg = Res.string().getBundle().getString("NET_ERROR");
+ break;
+ case LastError.NET_SYSTEM_ERROR: // (0x80000000|1) Windows系统出错
+ msg = Res.string().getBundle().getString("NET_SYSTEM_ERROR");
+ break;
+ case LastError.NET_NETWORK_ERROR: // (0x80000000|2) 网络错误,可能是因为网络超时
+ msg = Res.string().getBundle().getString("NET_NETWORK_ERROR");
+ break;
+ case LastError.NET_DEV_VER_NOMATCH: // (0x80000000|3) 设备协议不匹配
+ msg = Res.string().getBundle().getString("NET_DEV_VER_NOMATCH");
+ break;
+ case LastError.NET_INVALID_HANDLE: // (0x80000000|4) 句柄无效
+ msg = Res.string().getBundle().getString("NET_INVALID_HANDLE");
+ break;
+ case LastError.NET_OPEN_CHANNEL_ERROR: // (0x80000000|5) 打开通道失败
+ msg = Res.string().getBundle().getString("NET_OPEN_CHANNEL_ERROR");
+ break;
+ case LastError.NET_CLOSE_CHANNEL_ERROR: // (0x80000000|6) 关闭通道失败
+ msg = Res.string().getBundle().getString("NET_CLOSE_CHANNEL_ERROR");
+ break;
+ case LastError.NET_ILLEGAL_PARAM: // (0x80000000|7) 用户参数不合法
+ msg = Res.string().getBundle().getString("NET_ILLEGAL_PARAM");
+ break;
+ case LastError.NET_SDK_INIT_ERROR: // (0x80000000|8) SDK初始化出错
+ msg = Res.string().getBundle().getString("NET_SDK_INIT_ERROR");
+ break;
+ case LastError.NET_SDK_UNINIT_ERROR: // (0x80000000|9) SDK清理出错
+ msg = Res.string().getBundle().getString("NET_SDK_UNINIT_ERROR");
+ break;
+ case LastError.NET_RENDER_OPEN_ERROR: // (0x80000000|10) 申请render资源出错
+ msg = Res.string().getBundle().getString("NET_RENDER_OPEN_ERROR");
+ break;
+ case LastError.NET_DEC_OPEN_ERROR: // (0x80000000|11) 打开解码库出错
+ msg = Res.string().getBundle().getString("NET_DEC_OPEN_ERROR");
+ break;
+ case LastError.NET_DEC_CLOSE_ERROR: // (0x80000000|12) 关闭解码库出错
+ msg = Res.string().getBundle().getString("NET_DEC_CLOSE_ERROR");
+ break;
+ case LastError.NET_MULTIPLAY_NOCHANNEL: // (0x80000000|13) 多画面预览中检测到通道数为0
+ msg = Res.string().getBundle().getString("NET_MULTIPLAY_NOCHANNEL");
+ break;
+ case LastError.NET_TALK_INIT_ERROR: // (0x80000000|14) 录音库初始化失败
+ msg = Res.string().getBundle().getString("NET_TALK_INIT_ERROR");
+ break;
+ case LastError.NET_TALK_NOT_INIT: // (0x80000000|15) 录音库未经初始化
+ msg = Res.string().getBundle().getString("NET_TALK_NOT_INIT");
+ break;
+ case LastError.NET_TALK_SENDDATA_ERROR: // (0x80000000|16) 发送音频数据出错
+ msg = Res.string().getBundle().getString("NET_TALK_SENDDATA_ERROR");
+ break;
+ case LastError.NET_REAL_ALREADY_SAVING: // (0x80000000|17) 实时数据已经处于保存状态
+ msg = Res.string().getBundle().getString("NET_REAL_ALREADY_SAVING");
+ break;
+ case LastError.NET_NOT_SAVING: // (0x80000000|18) 未保存实时数据
+ msg = Res.string().getBundle().getString("NET_NOT_SAVING");
+ break;
+ case LastError.NET_OPEN_FILE_ERROR: // (0x80000000|19) 打开文件出错
+ msg = Res.string().getBundle().getString("NET_OPEN_FILE_ERROR");
+ break;
+ case LastError.NET_PTZ_SET_TIMER_ERROR: // (0x80000000|20) 启动云台控制定时器失败
+ msg = Res.string().getBundle().getString("NET_PTZ_SET_TIMER_ERROR");
+ break;
+ case LastError.NET_RETURN_DATA_ERROR: // (0x80000000|21) 对返回数据的校验出错
+ msg = Res.string().getBundle().getString("NET_RETURN_DATA_ERROR");
+ break;
+ case LastError.NET_INSUFFICIENT_BUFFER: // (0x80000000|22) 没有足够的缓存
+ msg = Res.string().getBundle().getString("NET_INSUFFICIENT_BUFFER");
+ break;
+ case LastError.NET_NOT_SUPPORTED: // (0x80000000|23) 当前SDK未支持该功能
+ msg = Res.string().getBundle().getString("NET_NOT_SUPPORTED");
+ break;
+ case LastError.NET_NO_RECORD_FOUND: // (0x80000000|24) 查询不到录像
+ msg = Res.string().getBundle().getString("NET_NO_RECORD_FOUND");
+ break;
+ case LastError.NET_NOT_AUTHORIZED: // (0x80000000|25) 无操作权限
+ msg = Res.string().getBundle().getString("NET_NOT_AUTHORIZED");
+ break;
+ case LastError.NET_NOT_NOW: // (0x80000000|26) 暂时无法执行
+ msg = Res.string().getBundle().getString("NET_NOT_NOW");
+ break;
+ case LastError.NET_NO_TALK_CHANNEL: // (0x80000000|27) 未发现对讲通道
+ msg = Res.string().getBundle().getString("NET_NO_TALK_CHANNEL");
+ break;
+ case LastError.NET_NO_AUDIO: // (0x80000000|28) 未发现音频
+ msg = Res.string().getBundle().getString("NET_NO_AUDIO");
+ break;
+ case LastError.NET_NO_INIT: // (0x80000000|29) 网络SDK未经初始化
+ msg = Res.string().getBundle().getString("NET_NO_INIT");
+ break;
+ case LastError.NET_DOWNLOAD_END: // (0x80000000|30) 下载已结束
+ msg = Res.string().getBundle().getString("NET_DOWNLOAD_END");
+ break;
+ case LastError.NET_EMPTY_LIST: // (0x80000000|31) 查询结果为空
+ msg = Res.string().getBundle().getString("NET_EMPTY_LIST");
+ break;
+ case LastError.NET_ERROR_GETCFG_SYSATTR: // (0x80000000|32) 获取系统属性配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SYSATTR");
+ break;
+ case LastError.NET_ERROR_GETCFG_SERIAL: // (0x80000000|33) 获取序列号失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SERIAL");
+ break;
+ case LastError.NET_ERROR_GETCFG_GENERAL: // (0x80000000|34) 获取常规属性失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_GENERAL");
+ break;
+ case LastError.NET_ERROR_GETCFG_DSPCAP: // (0x80000000|35) 获取DSP能力描述失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_DSPCAP");
+ break;
+ case LastError.NET_ERROR_GETCFG_NETCFG: // (0x80000000|36) 获取网络配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_NETCFG");
+ break;
+ case LastError.NET_ERROR_GETCFG_CHANNAME: // (0x80000000|37) 获取通道名称失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_CHANNAME");
+ break;
+ case LastError.NET_ERROR_GETCFG_VIDEO: // (0x80000000|38) 获取视频属性失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_VIDEO");
+ break;
+ case LastError.NET_ERROR_GETCFG_RECORD: // (0x80000000|39) 获取录象配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_RECORD");
+ break;
+ case LastError.NET_ERROR_GETCFG_PRONAME: // (0x80000000|40) 获取解码器协议名称失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_PRONAME");
+ break;
+ case LastError.NET_ERROR_GETCFG_FUNCNAME: // (0x80000000|41) 获取232串口功能名称失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_FUNCNAME");
+ break;
+ case LastError.NET_ERROR_GETCFG_485DECODER: // (0x80000000|42) 获取解码器属性失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_485DECODER");
+ break;
+ case LastError.NET_ERROR_GETCFG_232COM: // (0x80000000|43) 获取232串口配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_232COM");
+ break;
+ case LastError.NET_ERROR_GETCFG_ALARMIN: // (0x80000000|44) 获取外部报警输入配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_ALARMIN");
+ break;
+ case LastError.NET_ERROR_GETCFG_ALARMDET: // (0x80000000|45) 获取动态检测报警失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_ALARMDET");
+ break;
+ case LastError.NET_ERROR_GETCFG_SYSTIME: // (0x80000000|46) 获取设备时间失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SYSTIME");
+ break;
+ case LastError.NET_ERROR_GETCFG_PREVIEW: // (0x80000000|47) 获取预览参数失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_PREVIEW");
+ break;
+ case LastError.NET_ERROR_GETCFG_AUTOMT: // (0x80000000|48) 获取自动维护配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_AUTOMT");
+ break;
+ case LastError.NET_ERROR_GETCFG_VIDEOMTRX: // (0x80000000|49) 获取视频矩阵配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_VIDEOMTRX");
+ break;
+ case LastError.NET_ERROR_GETCFG_COVER: // (0x80000000|50) 获取区域遮挡配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_COVER");
+ break;
+ case LastError.NET_ERROR_GETCFG_WATERMAKE: // (0x80000000|51) 获取图象水印配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_WATERMAKE");
+ break;
+ case LastError.NET_ERROR_GETCFG_MULTICAST: // (0x80000000|52) 获取配置失败位置:组播端口按通道配置
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_MULTICAST");
+ break;
+ case LastError.NET_ERROR_SETCFG_GENERAL: // (0x80000000|55) 修改常规属性失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_GENERAL");
+ break;
+ case LastError.NET_ERROR_SETCFG_NETCFG: // (0x80000000|56) 改网络配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_NETCFG");
+ break;
+ case LastError.NET_ERROR_SETCFG_CHANNAME: // (0x80000000|57) 修改通道名称失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_CHANNAME");
+ break;
+ case LastError.NET_ERROR_SETCFG_VIDEO: // (0x80000000|58) 修改视频属性失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_VIDEO");
+ break;
+ case LastError.NET_ERROR_SETCFG_RECORD: // (0x80000000|59) 修改录象配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_RECORD");
+ break;
+ case LastError.NET_ERROR_SETCFG_485DECODER: // (0x80000000|60) 修改解码器属性失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_485DECODER");
+ break;
+ case LastError.NET_ERROR_SETCFG_232COM: // (0x80000000|61) 修改232串口配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_232COM");
+ break;
+ case LastError.NET_ERROR_SETCFG_ALARMIN: // (0x80000000|62) 修改外部输入报警配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_ALARMIN");
+ break;
+ case LastError.NET_ERROR_SETCFG_ALARMDET: // (0x80000000|63) 修改动态检测报警配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_ALARMDET");
+ break;
+ case LastError.NET_ERROR_SETCFG_SYSTIME: // (0x80000000|64) 修改设备时间失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_SYSTIME");
+ break;
+ case LastError.NET_ERROR_SETCFG_PREVIEW: // (0x80000000|65) 修改预览参数失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_PREVIEW");
+ break;
+ case LastError.NET_ERROR_SETCFG_AUTOMT: // (0x80000000|66) 修改自动维护配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_AUTOMT");
+ break;
+ case LastError.NET_ERROR_SETCFG_VIDEOMTRX: // (0x80000000|67) 修改视频矩阵配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_VIDEOMTRX");
+ break;
+ case LastError.NET_ERROR_SETCFG_COVER: // (0x80000000|68) 修改区域遮挡配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_COVER");
+ break;
+ case LastError.NET_ERROR_SETCFG_WATERMAKE: // (0x80000000|69) 修改图象水印配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_WATERMAKE");
+ break;
+ case LastError.NET_ERROR_SETCFG_WLAN: // (0x80000000|70) 修改无线网络信息失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_WLAN");
+ break;
+ case LastError.NET_ERROR_SETCFG_WLANDEV: // (0x80000000|71) 选择无线网络设备失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_WLANDEV");
+ break;
+ case LastError.NET_ERROR_SETCFG_REGISTER: // (0x80000000|72) 修改主动注册参数配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_REGISTER");
+ break;
+ case LastError.NET_ERROR_SETCFG_CAMERA: // (0x80000000|73) 修改摄像头属性配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_CAMERA");
+ break;
+ case LastError.NET_ERROR_SETCFG_INFRARED: // (0x80000000|74) 修改红外报警配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_INFRARED");
+ break;
+ case LastError.NET_ERROR_SETCFG_SOUNDALARM: // (0x80000000|75) 修改音频报警配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_SOUNDALARM");
+ break;
+ case LastError.NET_ERROR_SETCFG_STORAGE: // (0x80000000|76) 修改存储位置配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_STORAGE");
+ break;
+ case LastError.NET_AUDIOENCODE_NOTINIT: // (0x80000000|77) 音频编码接口没有成功初始化
+ msg = Res.string().getBundle().getString("NET_AUDIOENCODE_NOTINIT");
+ break;
+ case LastError.NET_DATA_TOOLONGH: // (0x80000000|78) 数据过长
+ msg = Res.string().getBundle().getString("NET_DATA_TOOLONGH");
+ break;
+ case LastError.NET_UNSUPPORTED: // (0x80000000|79) 备不支持该操作
+ msg = Res.string().getBundle().getString("NET_UNSUPPORTED");
+ break;
+ case LastError.NET_DEVICE_BUSY: // (0x80000000|80) 设备资源不足
+ msg = Res.string().getBundle().getString("NET_DEVICE_BUSY");
+ break;
+ case LastError.NET_SERVER_STARTED: // (0x80000000|81) 服务器已经启动
+ msg = Res.string().getBundle().getString("NET_SERVER_STARTED");
+ break;
+ case LastError.NET_SERVER_STOPPED: // (0x80000000|82) 服务器尚未成功启动
+ msg = Res.string().getBundle().getString("NET_SERVER_STOPPED");
+ break;
+ case LastError.NET_LISTER_INCORRECT_SERIAL: // (0x80000000|83) 输入序列号有误
+ msg = Res.string().getBundle().getString("NET_LISTER_INCORRECT_SERIAL");
+ break;
+ case LastError.NET_QUERY_DISKINFO_FAILED: // (0x80000000|84) 获取硬盘信息失败
+ msg = Res.string().getBundle().getString("NET_QUERY_DISKINFO_FAILED");
+ break;
+ case LastError.NET_ERROR_GETCFG_SESSION: // (0x80000000|85) 获取连接Session信息
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SESSION");
+ break;
+ case LastError.NET_USER_FLASEPWD_TRYTIME: // (0x80000000|86) 输入密码错误超过限制次数
+ msg = Res.string().getBundle().getString("NET_USER_FLASEPWD_TRYTIME");
+ break;
+ case LastError.NET_LOGIN_ERROR_PASSWORD: // (0x80000000|100) 密码不正确
+ msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_PASSWORD");
+ break;
+ case LastError.NET_LOGIN_ERROR_USER: // (0x80000000|101) 帐户不存在
+ msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_USER");
+ break;
+ case LastError.NET_LOGIN_ERROR_TIMEOUT: // (0x80000000|102) 等待登录返回超时
+ msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_TIMEOUT");
+ break;
+ case LastError.NET_LOGIN_ERROR_RELOGGIN: // (0x80000000|103) 帐号已登录
+ msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_RELOGGIN");
+ break;
+ case LastError.NET_LOGIN_ERROR_LOCKED: // (0x80000000|104) 帐号已被锁定
+ msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_LOCKED");
+ break;
+ case LastError.NET_LOGIN_ERROR_BLACKLIST: // (0x80000000|105) 帐号已被列为禁止名单
+ msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_BLACKLIST");
+ break;
+ case LastError.NET_LOGIN_ERROR_BUSY: // (0x80000000|106) 资源不足,系统忙
+ msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_BUSY");
+ break;
+ case LastError.NET_LOGIN_ERROR_CONNECT: // (0x80000000|107) 登录设备超时,请检查网络并重试
+ msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_CONNECT");
+ break;
+ case LastError.NET_LOGIN_ERROR_NETWORK: // (0x80000000|108) 网络连接失败
+ msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_NETWORK");
+ break;
+ case LastError.NET_LOGIN_ERROR_SUBCONNECT: // (0x80000000|109) 登录设备成功,但无法创建视频通道,请检查网
+ msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_SUBCONNECT");
+ break;
+ case LastError.NET_LOGIN_ERROR_MAXCONNECT: // (0x80000000|110) 超过最大连接数
+ msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_MAXCONNECT");
+ break;
+ case LastError.NET_LOGIN_ERROR_PROTOCOL3_ONLY: // (0x80000000|111) 只支持3代协议
+ msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_PROTOCOL3_ONLY");
+ break;
+ case LastError.NET_LOGIN_ERROR_UKEY_LOST: // (0x80000000|112) 插入U盾或U盾信息错误
+ msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_UKEY_LOST");
+ break;
+ case LastError.NET_LOGIN_ERROR_NO_AUTHORIZED: // (0x80000000|113) 客户端IP地址没有登录权限
+ msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_NO_AUTHORIZED");
+ break;
+ case LastError.NET_LOGIN_ERROR_USER_OR_PASSOWRD: // (0x80000000|117) 账号或密码错误
+ msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_USER_OR_PASSOWRD");
+ break;
+ case LastError.NET_LOGIN_ERROR_DEVICE_NOT_INIT: // (0x80000000|118) 设备尚未初始化,不能登录,请先初始化设备
+ msg = Res.string().getBundle().getString("NET_LOGIN_ERROR_DEVICE_NOT_INIT");
+ break;
+ case LastError.NET_RENDER_SOUND_ON_ERROR: // (0x80000000|120) Render库打开音频出错
+ msg = Res.string().getBundle().getString("NET_RENDER_SOUND_ON_ERROR");
+ break;
+ case LastError.NET_RENDER_SOUND_OFF_ERROR: // (0x80000000|121) Render库关闭音频出错
+ msg = Res.string().getBundle().getString("NET_RENDER_SOUND_OFF_ERROR");
+ break;
+ case LastError.NET_RENDER_SET_VOLUME_ERROR: // (0x80000000|122) Render库控制音量出错
+ msg = Res.string().getBundle().getString("NET_RENDER_SET_VOLUME_ERROR");
+ break;
+ case LastError.NET_RENDER_ADJUST_ERROR: // (0x80000000|123) Render库设置画面参数出错
+ msg = Res.string().getBundle().getString("NET_RENDER_ADJUST_ERROR");
+ break;
+ case LastError.NET_RENDER_PAUSE_ERROR: // (0x80000000|124) Render库暂停播放出错
+ msg = Res.string().getBundle().getString("NET_RENDER_PAUSE_ERROR");
+ break;
+ case LastError.NET_RENDER_SNAP_ERROR: // (0x80000000|125) Render库抓图出错
+ msg = Res.string().getBundle().getString("NET_RENDER_SNAP_ERROR");
+ break;
+ case LastError.NET_RENDER_STEP_ERROR: // (0x80000000|126) Render库步进出错
+ msg = Res.string().getBundle().getString("NET_RENDER_STEP_ERROR");
+ break;
+ case LastError.NET_RENDER_FRAMERATE_ERROR: // (0x80000000|127) Render库设置帧率出错
+ msg = Res.string().getBundle().getString("NET_RENDER_FRAMERATE_ERROR");
+ break;
+ case LastError.NET_RENDER_DISPLAYREGION_ERROR: // (0x80000000|128) Render库设置显示区域出错
+ msg = Res.string().getBundle().getString("NET_RENDER_DISPLAYREGION_ERROR");
+ break;
+ case LastError.NET_RENDER_GETOSDTIME_ERROR: // (0x80000000|129) Render库获取当前播放时间出错
+ msg = Res.string().getBundle().getString("NET_RENDER_GETOSDTIME_ERROR");
+ break;
+ case LastError.NET_GROUP_EXIST: // (0x80000000|140) 组名已存在
+ msg = Res.string().getBundle().getString("NET_GROUP_EXIST");
+ break;
+ case LastError.NET_GROUP_NOEXIST: // (0x80000000|141) 组名不存在
+ msg = Res.string().getBundle().getString("NET_GROUP_NOEXIST");
+ break;
+ case LastError.NET_GROUP_RIGHTOVER: // (0x80000000|142) 组的权限超出权限列表范围
+ msg = Res.string().getBundle().getString("NET_GROUP_RIGHTOVER");
+ break;
+ case LastError.NET_GROUP_HAVEUSER: // (0x80000000|143) 组下有用户,不能删除
+ msg = Res.string().getBundle().getString("NET_GROUP_HAVEUSER");
+ break;
+ case LastError.NET_GROUP_RIGHTUSE: // (0x80000000|144) 组的某个权限被用户使用,不能出除
+ msg = Res.string().getBundle().getString("NET_GROUP_RIGHTUSE");
+ break;
+ case LastError.NET_GROUP_SAMENAME: // (0x80000000|145) 新组名同已有组名重复
+ msg = Res.string().getBundle().getString("NET_GROUP_SAMENAME");
+ break;
+ case LastError.NET_USER_EXIST: // (0x80000000|146) 用户已存在
+ msg = Res.string().getBundle().getString("NET_USER_EXIST");
+ break;
+ case LastError.NET_USER_NOEXIST: // (0x80000000|147) 用户不存在
+ msg = Res.string().getBundle().getString("NET_USER_NOEXIST");
+ break;
+ case LastError.NET_USER_RIGHTOVER: // (0x80000000|148) 用户权限超出组权限
+ msg = Res.string().getBundle().getString("NET_USER_RIGHTOVER");
+ break;
+ case LastError.NET_USER_PWD: // (0x80000000|149) 保留帐号,不容许修改密码
+ msg = Res.string().getBundle().getString("NET_USER_PWD");
+ break;
+ case LastError.NET_USER_FLASEPWD: // (0x80000000|150) 密码不正确
+ msg = Res.string().getBundle().getString("NET_USER_FLASEPWD");
+ break;
+ case LastError.NET_USER_NOMATCHING: // (0x80000000|151) 密码不匹配
+ msg = Res.string().getBundle().getString("NET_USER_NOMATCHING");
+ break;
+ case LastError.NET_USER_INUSE: // (0x80000000|152) 账号正在使用中
+ msg = Res.string().getBundle().getString("NET_USER_INUSE");
+ break;
+ case LastError.NET_ERROR_GETCFG_ETHERNET: // (0x80000000|300) 获取网卡配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_ETHERNET");
+ break;
+ case LastError.NET_ERROR_GETCFG_WLAN: // (0x80000000|301) 获取无线网络信息失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_WLAN");
+ break;
+ case LastError.NET_ERROR_GETCFG_WLANDEV: // (0x80000000|302) 获取无线网络设备失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_WLANDEV");
+ break;
+ case LastError.NET_ERROR_GETCFG_REGISTER: // (0x80000000|303) 获取主动注册参数失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_REGISTER");
+ break;
+ case LastError.NET_ERROR_GETCFG_CAMERA: // (0x80000000|304) 获取摄像头属性失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_CAMERA");
+ break;
+ case LastError.NET_ERROR_GETCFG_INFRARED: // (0x80000000|305) 获取红外报警配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_INFRARED");
+ break;
+ case LastError.NET_ERROR_GETCFG_SOUNDALARM: // (0x80000000|306) 获取音频报警配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SOUNDALARM");
+ break;
+ case LastError.NET_ERROR_GETCFG_STORAGE: // (0x80000000|307) 获取存储位置配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_STORAGE");
+ break;
+ case LastError.NET_ERROR_GETCFG_MAIL: // (0x80000000|308) 获取邮件配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_MAIL");
+ break;
+ case LastError.NET_CONFIG_DEVBUSY: // (0x80000000|309) 暂时无法设置
+ msg = Res.string().getBundle().getString("NET_CONFIG_DEVBUSY");
+ break;
+ case LastError.NET_CONFIG_DATAILLEGAL: // (0x80000000|310) 配置数据不合法
+ msg = Res.string().getBundle().getString("NET_CONFIG_DATAILLEGAL");
+ break;
+ case LastError.NET_ERROR_GETCFG_DST: // (0x80000000|311) 获取夏令时配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_DST");
+ break;
+ case LastError.NET_ERROR_SETCFG_DST: // (0x80000000|312) 设置夏令时配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_DST");
+ break;
+ case LastError.NET_ERROR_GETCFG_VIDEO_OSD: // (0x80000000|313) 获取视频OSD叠加配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_VIDEO_OSD");
+ break;
+ case LastError.NET_ERROR_SETCFG_VIDEO_OSD: // (0x80000000|314) 设置视频OSD叠加配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_VIDEO_OSD");
+ break;
+ case LastError.NET_ERROR_GETCFG_GPRSCDMA: // (0x80000000|315) 获取CDMA\GPRS网络配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_GPRSCDMA");
+ break;
+ case LastError.NET_ERROR_SETCFG_GPRSCDMA: // (0x80000000|316) 设置CDMA\GPRS网络配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_GPRSCDMA");
+ break;
+ case LastError.NET_ERROR_GETCFG_IPFILTER: // (0x80000000|317) 获取IP过滤配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_IPFILTER");
+ break;
+ case LastError.NET_ERROR_SETCFG_IPFILTER: // (0x80000000|318) 设置IP过滤配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_IPFILTER");
+ break;
+ case LastError.NET_ERROR_GETCFG_TALKENCODE: // (0x80000000|319) 获取语音对讲编码配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_TALKENCODE");
+ break;
+ case LastError.NET_ERROR_SETCFG_TALKENCODE: // (0x80000000|320) 设置语音对讲编码配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_TALKENCODE");
+ break;
+ case LastError.NET_ERROR_GETCFG_RECORDLEN: // (0x80000000|321) 获取录像打包长度配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_RECORDLEN");
+ break;
+ case LastError.NET_ERROR_SETCFG_RECORDLEN: // (0x80000000|322) 设置录像打包长度配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_RECORDLEN");
+ break;
+ case LastError.NET_DONT_SUPPORT_SUBAREA: // (0x80000000|323) 不支持网络硬盘分区
+ msg = Res.string().getBundle().getString("NET_DONT_SUPPORT_SUBAREA");
+ break;
+ case LastError.NET_ERROR_GET_AUTOREGSERVER: // (0x80000000|324) 获取设备上主动注册服务器信息失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GET_AUTOREGSERVER");
+ break;
+ case LastError.NET_ERROR_CONTROL_AUTOREGISTER: // (0x80000000|325) 主动注册重定向注册错误
+ msg = Res.string().getBundle().getString("NET_ERROR_CONTROL_AUTOREGISTER");
+ break;
+ case LastError.NET_ERROR_DISCONNECT_AUTOREGISTER: // (0x80000000|326) 断开主动注册服务器错误
+ msg = Res.string().getBundle().getString("NET_ERROR_DISCONNECT_AUTOREGISTER");
+ break;
+ case LastError.NET_ERROR_GETCFG_MMS: // (0x80000000|327) 获取mms配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_MMS");
+ break;
+ case LastError.NET_ERROR_SETCFG_MMS: // (0x80000000|328) 设置mms配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_MMS");
+ break;
+ case LastError.NET_ERROR_GETCFG_SMSACTIVATION: // (0x80000000|329) 获取短信激活无线连接配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_SMSACTIVATION");
+ break;
+ case LastError.NET_ERROR_SETCFG_SMSACTIVATION: // (0x80000000|330) 设置短信激活无线连接配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_SMSACTIVATION");
+ break;
+ case LastError.NET_ERROR_GETCFG_DIALINACTIVATION: // (0x80000000|331) 获取拨号激活无线连接配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_DIALINACTIVATION");
+ break;
+ case LastError.NET_ERROR_SETCFG_DIALINACTIVATION: // (0x80000000|332) 设置拨号激活无线连接配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_DIALINACTIVATION");
+ break;
+ case LastError.NET_ERROR_GETCFG_VIDEOOUT: // (0x80000000|333) 查询视频输出参数配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_VIDEOOUT");
+ break;
+ case LastError.NET_ERROR_SETCFG_VIDEOOUT: // (0x80000000|334) 设置视频输出参数配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_VIDEOOUT");
+ break;
+ case LastError.NET_ERROR_GETCFG_OSDENABLE: // (0x80000000|335) 获取osd叠加使能配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_OSDENABLE");
+ break;
+ case LastError.NET_ERROR_SETCFG_OSDENABLE: // (0x80000000|336) 设置osd叠加使能配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_OSDENABLE");
+ break;
+ case LastError.NET_ERROR_SETCFG_ENCODERINFO: // (0x80000000|337) 设置数字通道前端编码接入配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_ENCODERINFO");
+ break;
+ case LastError.NET_ERROR_GETCFG_TVADJUST: // (0x80000000|338) 获取TV调节配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_TVADJUST");
+ break;
+ case LastError.NET_ERROR_SETCFG_TVADJUST: // (0x80000000|339) 设置TV调节配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_TVADJUST");
+ break;
+ case LastError.NET_ERROR_CONNECT_FAILED: // (0x80000000|340) 请求建立连接失败
+ msg = Res.string().getBundle().getString("NET_ERROR_CONNECT_FAILED");
+ break;
+ case LastError.NET_ERROR_SETCFG_BURNFILE: // (0x80000000|341) 请求刻录文件上传失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_BURNFILE");
+ break;
+ case LastError.NET_ERROR_SNIFFER_GETCFG: // (0x80000000|342) 获取抓包配置信息失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SNIFFER_GETCFG");
+ break;
+ case LastError.NET_ERROR_SNIFFER_SETCFG: // (0x80000000|343) 设置抓包配置信息失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SNIFFER_SETCFG");
+ break;
+ case LastError.NET_ERROR_DOWNLOADRATE_GETCFG: // (0x80000000|344) 查询下载限制信息失败
+ msg = Res.string().getBundle().getString("NET_ERROR_DOWNLOADRATE_GETCFG");
+ break;
+ case LastError.NET_ERROR_DOWNLOADRATE_SETCFG: // (0x80000000|345) 设置下载限制信息失败
+ msg = Res.string().getBundle().getString("NET_ERROR_DOWNLOADRATE_SETCFG");
+ break;
+ case LastError.NET_ERROR_SEARCH_TRANSCOM: // (0x80000000|346) 查询串口参数失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SEARCH_TRANSCOM");
+ break;
+ case LastError.NET_ERROR_GETCFG_POINT: // (0x80000000|347) 获取预制点信息错误
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_POINT");
+ break;
+ case LastError.NET_ERROR_SETCFG_POINT: // (0x80000000|348) 设置预制点信息错误
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_POINT");
+ break;
+ case LastError.NET_SDK_LOGOUT_ERROR: // (0x80000000|349) SDK没有正常登出设备
+ msg = Res.string().getBundle().getString("NET_SDK_LOGOUT_ERROR");
+ break;
+ case LastError.NET_ERROR_GET_VEHICLE_CFG: // (0x80000000|350) 获取车载配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GET_VEHICLE_CFG");
+ break;
+ case LastError.NET_ERROR_SET_VEHICLE_CFG: // (0x80000000|351) 设置车载配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SET_VEHICLE_CFG");
+ break;
+ case LastError.NET_ERROR_GET_ATM_OVERLAY_CFG: // (0x80000000|352) 获取atm叠加配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GET_ATM_OVERLAY_CFG");
+ break;
+ case LastError.NET_ERROR_SET_ATM_OVERLAY_CFG: // (0x80000000|353) 设置atm叠加配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SET_ATM_OVERLAY_CFG");
+ break;
+ case LastError.NET_ERROR_GET_ATM_OVERLAY_ABILITY: // (0x80000000|354) 获取atm叠加能力失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GET_ATM_OVERLAY_ABILITY");
+ break;
+ case LastError.NET_ERROR_GET_DECODER_TOUR_CFG: // (0x80000000|355) 获取解码器解码轮巡配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GET_DECODER_TOUR_CFG");
+ break;
+ case LastError.NET_ERROR_SET_DECODER_TOUR_CFG: // (0x80000000|356) 设置解码器解码轮巡配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SET_DECODER_TOUR_CFG");
+ break;
+ case LastError.NET_ERROR_CTRL_DECODER_TOUR: // (0x80000000|357) 控制解码器解码轮巡失败
+ msg = Res.string().getBundle().getString("NET_ERROR_CTRL_DECODER_TOUR");
+ break;
+ case LastError.NET_GROUP_OVERSUPPORTNUM: // (0x80000000|358) 超出设备支持最大用户组数目
+ msg = Res.string().getBundle().getString("NET_GROUP_OVERSUPPORTNUM");
+ break;
+ case LastError.NET_USER_OVERSUPPORTNUM: // (0x80000000|359) 超出设备支持最大用户数目
+ msg = Res.string().getBundle().getString("NET_USER_OVERSUPPORTNUM");
+ break;
+ case LastError.NET_ERROR_GET_SIP_CFG: // (0x80000000|368) 获取SIP配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GET_SIP_CFG");
+ break;
+ case LastError.NET_ERROR_SET_SIP_CFG: // (0x80000000|369) 设置SIP配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SET_SIP_CFG");
+ break;
+ case LastError.NET_ERROR_GET_SIP_ABILITY: // (0x80000000|370) 获取SIP能力失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GET_SIP_ABILITY");
+ break;
+ case LastError.NET_ERROR_GET_WIFI_AP_CFG: // (0x80000000|371) 获取WIFI ap配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GET_WIFI_AP_CFG");
+ break;
+ case LastError.NET_ERROR_SET_WIFI_AP_CFG: // (0x80000000|372) 设置WIFI ap配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SET_WIFI_AP_CFG");
+ break;
+ case LastError.NET_ERROR_GET_DECODE_POLICY: // (0x80000000|373) 获取解码策略配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GET_DECODE_POLICY");
+ break;
+ case LastError.NET_ERROR_SET_DECODE_POLICY: // (0x80000000|374) 设置解码策略配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SET_DECODE_POLICY");
+ break;
+ case LastError.NET_ERROR_TALK_REJECT: // (0x80000000|375) 拒绝对讲
+ msg = Res.string().getBundle().getString("NET_ERROR_TALK_REJECT");
+ break;
+ case LastError.NET_ERROR_TALK_OPENED: // (0x80000000|376) 对讲被其他客户端打开
+ msg = Res.string().getBundle().getString("NET_ERROR_TALK_OPENED");
+ break;
+ case LastError.NET_ERROR_TALK_RESOURCE_CONFLICIT: // (0x80000000|377) 资源冲突
+ msg = Res.string().getBundle().getString("NET_ERROR_TALK_RESOURCE_CONFLICIT");
+ break;
+ case LastError.NET_ERROR_TALK_UNSUPPORTED_ENCODE: // (0x80000000|378) 不支持的语音编码格式
+ msg = Res.string().getBundle().getString("NET_ERROR_TALK_UNSUPPORTED_ENCODE");
+ break;
+ case LastError.NET_ERROR_TALK_RIGHTLESS: // (0x80000000|379) 无权限
+ msg = Res.string().getBundle().getString("NET_ERROR_TALK_RIGHTLESS");
+ break;
+ case LastError.NET_ERROR_TALK_FAILED: // (0x80000000|380) 请求对讲失败
+ msg = Res.string().getBundle().getString("NET_ERROR_TALK_FAILED");
+ break;
+ case LastError.NET_ERROR_GET_MACHINE_CFG: // (0x80000000|381) 获取机器相关配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GET_MACHINE_CFG");
+ break;
+ case LastError.NET_ERROR_SET_MACHINE_CFG: // (0x80000000|382) 设置机器相关配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SET_MACHINE_CFG");
+ break;
+ case LastError.NET_ERROR_GET_DATA_FAILED: // (0x80000000|383) 设备无法获取当前请求数据
+ msg = Res.string().getBundle().getString("NET_ERROR_GET_DATA_FAILED");
+ break;
+ case LastError.NET_ERROR_MAC_VALIDATE_FAILED: // (0x80000000|384) MAC地址验证失败
+ msg = Res.string().getBundle().getString("NET_ERROR_MAC_VALIDATE_FAILED");
+ break;
+ case LastError.NET_ERROR_GET_INSTANCE: // (0x80000000|385) 获取服务器实例失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GET_INSTANCE");
+ break;
+ case LastError.NET_ERROR_JSON_REQUEST: // (0x80000000|386) 生成的json字符串错误
+ msg = Res.string().getBundle().getString("NET_ERROR_JSON_REQUEST");
+ break;
+ case LastError.NET_ERROR_JSON_RESPONSE: // (0x80000000|387) 响应的json字符串错误
+ msg = Res.string().getBundle().getString("NET_ERROR_JSON_RESPONSE");
+ break;
+ case LastError.NET_ERROR_VERSION_HIGHER: // (0x80000000|388) 协议版本低于当前使用的版本
+ msg = Res.string().getBundle().getString("NET_ERROR_VERSION_HIGHER");
+ break;
+ case LastError.NET_SPARE_NO_CAPACITY: // (0x80000000|389) 热备操作失败, 容量不足
+ msg = Res.string().getBundle().getString("NET_SPARE_NO_CAPACITY");
+ break;
+ case LastError.NET_ERROR_SOURCE_IN_USE: // (0x80000000|390) 显示源被其他输出占用
+ msg = Res.string().getBundle().getString("NET_ERROR_SOURCE_IN_USE");
+ break;
+ case LastError.NET_ERROR_REAVE: // (0x80000000|391) 高级用户抢占低级用户资源
+ msg = Res.string().getBundle().getString("NET_ERROR_REAVE");
+ break;
+ case LastError.NET_ERROR_NETFORBID: // (0x80000000|392) 禁止入网
+ msg = Res.string().getBundle().getString("NET_ERROR_NETFORBID");
+ break;
+ case LastError.NET_ERROR_GETCFG_MACFILTER: // (0x80000000|393) 获取MAC过滤配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_MACFILTER");
+ break;
+ case LastError.NET_ERROR_SETCFG_MACFILTER: // (0x80000000|394) 设置MAC过滤配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_MACFILTER");
+ break;
+ case LastError.NET_ERROR_GETCFG_IPMACFILTER: // (0x80000000|395) 获取IP/MAC过滤配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GETCFG_IPMACFILTER");
+ break;
+ case LastError.NET_ERROR_SETCFG_IPMACFILTER: // (0x80000000|396) 设置IP/MAC过滤配置失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SETCFG_IPMACFILTER");
+ break;
+ case LastError.NET_ERROR_OPERATION_OVERTIME: // (0x80000000|397) 当前操作超时
+ msg = Res.string().getBundle().getString("NET_ERROR_OPERATION_OVERTIME");
+ break;
+ case LastError.NET_ERROR_SENIOR_VALIDATE_FAILED: // (0x80000000|398) 高级校验失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SENIOR_VALIDATE_FAILED");
+ break;
+ case LastError.NET_ERROR_DEVICE_ID_NOT_EXIST: // (0x80000000|399) 设备ID不存在
+ msg = Res.string().getBundle().getString("NET_ERROR_DEVICE_ID_NOT_EXIST");
+ break;
+ case LastError.NET_ERROR_UNSUPPORTED: // (0x80000000|400) 不支持当前操作
+ msg = Res.string().getBundle().getString("NET_ERROR_UNSUPPORTED");
+ break;
+ case LastError.NET_ERROR_PROXY_DLLLOAD: // (0x80000000|401) 代理库加载失败
+ msg = Res.string().getBundle().getString("NET_ERROR_PROXY_DLLLOAD");
+ break;
+ case LastError.NET_ERROR_PROXY_ILLEGAL_PARAM: // (0x80000000|402) 代理用户参数不合法
+ msg = Res.string().getBundle().getString("NET_ERROR_PROXY_ILLEGAL_PARAM");
+ break;
+ case LastError.NET_ERROR_PROXY_INVALID_HANDLE: // (0x80000000|403) 代理句柄无效
+ msg = Res.string().getBundle().getString("NET_ERROR_PROXY_INVALID_HANDLE");
+ break;
+ case LastError.NET_ERROR_PROXY_LOGIN_DEVICE_ERROR: // (0x80000000|404) 代理登入前端设备失败
+ msg = Res.string().getBundle().getString("NET_ERROR_PROXY_LOGIN_DEVICE_ERROR");
+ break;
+ case LastError.NET_ERROR_PROXY_START_SERVER_ERROR: // (0x80000000|405) 启动代理服务失败
+ msg = Res.string().getBundle().getString("NET_ERROR_PROXY_START_SERVER_ERROR");
+ break;
+ case LastError.NET_ERROR_SPEAK_FAILED: // (0x80000000|406) 请求喊话失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SPEAK_FAILED");
+ break;
+ case LastError.NET_ERROR_NOT_SUPPORT_F6: // (0x80000000|407) 设备不支持此F6接口调用
+ msg = Res.string().getBundle().getString("NET_ERROR_NOT_SUPPORT_F6");
+ break;
+ case LastError.NET_ERROR_CD_UNREADY: // (0x80000000|408) 光盘未就绪
+ msg = Res.string().getBundle().getString("NET_ERROR_CD_UNREADY");
+ break;
+ case LastError.NET_ERROR_DIR_NOT_EXIST: // (0x80000000|409) 目录不存在
+ msg = Res.string().getBundle().getString("NET_ERROR_DIR_NOT_EXIST");
+ break;
+ case LastError.NET_ERROR_UNSUPPORTED_SPLIT_MODE: // (0x80000000|410) 设备不支持的分割模式
+ msg = Res.string().getBundle().getString("NET_ERROR_UNSUPPORTED_SPLIT_MODE");
+ break;
+ case LastError.NET_ERROR_OPEN_WND_PARAM: // (0x80000000|411) 开窗参数不合法
+ msg = Res.string().getBundle().getString("NET_ERROR_OPEN_WND_PARAM");
+ break;
+ case LastError.NET_ERROR_LIMITED_WND_COUNT: // (0x80000000|412) 开窗数量超过限制
+ msg = Res.string().getBundle().getString("NET_ERROR_LIMITED_WND_COUNT");
+ break;
+ case LastError.NET_ERROR_UNMATCHED_REQUEST: // (0x80000000|413) 请求命令与当前模式不匹配
+ msg = Res.string().getBundle().getString("NET_ERROR_UNMATCHED_REQUEST");
+ break;
+ case LastError.NET_RENDER_ENABLELARGEPICADJUSTMENT_ERROR: // (0x80000000|414) Render库启用高清图像内部调整策略出错
+ msg = Res.string().getBundle().getString("NET_RENDER_ENABLELARGEPICADJUSTMENT_ERROR");
+ break;
+ case LastError.NET_ERROR_UPGRADE_FAILED: // (0x80000000|415) 设备升级失败
+ msg = Res.string().getBundle().getString("NET_ERROR_UPGRADE_FAILED");
+ break;
+ case LastError.NET_ERROR_NO_TARGET_DEVICE: // (0x80000000|416) 找不到目标设备
+ msg = Res.string().getBundle().getString("NET_ERROR_NO_TARGET_DEVICE");
+ break;
+ case LastError.NET_ERROR_NO_VERIFY_DEVICE: // (0x80000000|417) 找不到验证设备
+ msg = Res.string().getBundle().getString("NET_ERROR_NO_VERIFY_DEVICE");
+ break;
+ case LastError.NET_ERROR_CASCADE_RIGHTLESS: // (0x80000000|418) 无级联权限
+ msg = Res.string().getBundle().getString("NET_ERROR_CASCADE_RIGHTLESS");
+ break;
+ case LastError.NET_ERROR_LOW_PRIORITY: // (0x80000000|419) 低优先级
+ msg = Res.string().getBundle().getString("NET_ERROR_LOW_PRIORITY");
+ break;
+ case LastError.NET_ERROR_REMOTE_REQUEST_TIMEOUT: // (0x80000000|420) 远程设备请求超时
+ msg = Res.string().getBundle().getString("NET_ERROR_REMOTE_REQUEST_TIMEOUT");
+ break;
+ case LastError.NET_ERROR_LIMITED_INPUT_SOURCE: // (0x80000000|421) 输入源超出最大路数限制
+ msg = Res.string().getBundle().getString("NET_ERROR_LIMITED_INPUT_SOURCE");
+ break;
+ case LastError.NET_ERROR_SET_LOG_PRINT_INFO: // (0x80000000|422) 设置日志打印失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SET_LOG_PRINT_INFO");
+ break;
+ case LastError.NET_ERROR_PARAM_DWSIZE_ERROR: // (0x80000000|423) 入参的dwsize字段出错
+ msg = Res.string().getBundle().getString("NET_ERROR_PARAM_DWSIZE_ERROR");
+ break;
+ case LastError.NET_ERROR_LIMITED_MONITORWALL_COUNT: // (0x80000000|424) 电视墙数量超过上限
+ msg = Res.string().getBundle().getString("NET_ERROR_LIMITED_MONITORWALL_COUNT");
+ break;
+ case LastError.NET_ERROR_PART_PROCESS_FAILED: // (0x80000000|425) 部分过程执行失败
+ msg = Res.string().getBundle().getString("NET_ERROR_PART_PROCESS_FAILED");
+ break;
+ case LastError.NET_ERROR_TARGET_NOT_SUPPORT: // (0x80000000|426) 该功能不支持转发
+ msg = Res.string().getBundle().getString("NET_ERROR_TARGET_NOT_SUPPORT");
+ break;
+ case LastError.NET_ERROR_VISITE_FILE: // (0x80000000|510) 访问文件失败
+ msg = Res.string().getBundle().getString("NET_ERROR_VISITE_FILE");
+ break;
+ case LastError.NET_ERROR_DEVICE_STATUS_BUSY: // (0x80000000|511) 设备忙
+ msg = Res.string().getBundle().getString("NET_ERROR_DEVICE_STATUS_BUSY");
+ break;
+ case LastError.NET_USER_PWD_NOT_AUTHORIZED: // (0x80000000|512)修改密码无权限
+ msg = Res.string().getBundle().getString("NET_USER_PWD_NOT_AUTHORIZED");
+ break;
+ case LastError.NET_USER_PWD_NOT_STRONG: // (0x80000000|513) 密码强度不够
+ msg = Res.string().getBundle().getString("NET_USER_PWD_NOT_STRONG");
+ break;
+ case LastError.NET_ERROR_NO_SUCH_CONFIG: // (0x80000000|514) 没有对应的配置
+ msg = Res.string().getBundle().getString("NET_ERROR_NO_SUCH_CONFIG");
+ break;
+ case LastError.NET_ERROR_AUDIO_RECORD_FAILED: // (0x80000000|515) 录音失败
+ msg = Res.string().getBundle().getString("NET_ERROR_AUDIO_RECORD_FAILED");
+ break;
+ case LastError.NET_ERROR_SEND_DATA_FAILED: // (0x80000000|516) 数据发送失败
+ msg = Res.string().getBundle().getString("NET_ERROR_SEND_DATA_FAILED");
+ break;
+ case LastError.NET_ERROR_OBSOLESCENT_INTERFACE: // (0x80000000|517) 废弃接口
+ msg = Res.string().getBundle().getString("NET_ERROR_OBSOLESCENT_INTERFACE");
+ break;
+ case LastError.NET_ERROR_INSUFFICIENT_INTERAL_BUF: // (0x80000000|518) 内部缓冲不足
+ msg = Res.string().getBundle().getString("NET_ERROR_INSUFFICIENT_INTERAL_BUF");
+ break;
+ case LastError.NET_ERROR_NEED_ENCRYPTION_PASSWORD: // (0x80000000|519) 修改设备ip时,需要校验密码
+ msg = Res.string().getBundle().getString("NET_ERROR_NEED_ENCRYPTION_PASSWORD");
+ break;
+ case LastError.NET_ERROR_NOSUPPORT_RECORD: // (0x80000000|520) 设备不支持此记录集
+ msg = Res.string().getBundle().getString("NET_ERROR_NOSUPPORT_RECORD");
+ break;
+ case LastError.NET_ERROR_SERIALIZE_ERROR: // (0x80000000|1010) 数据序列化错误
+ msg = Res.string().getBundle().getString("NET_ERROR_SERIALIZE_ERROR");
+ break;
+ case LastError.NET_ERROR_DESERIALIZE_ERROR: // (0x80000000|1011) 数据反序列化错误
+ msg = Res.string().getBundle().getString("NET_ERROR_DESERIALIZE_ERROR");
+ break;
+ case LastError.NET_ERROR_LOWRATEWPAN_ID_EXISTED: // (0x80000000|1012) 该无线ID已存在
+ msg = Res.string().getBundle().getString("NET_ERROR_LOWRATEWPAN_ID_EXISTED");
+ break;
+ case LastError.NET_ERROR_LOWRATEWPAN_ID_LIMIT: // (0x80000000|1013) 无线ID数量已超限
+ msg = Res.string().getBundle().getString("NET_ERROR_LOWRATEWPAN_ID_LIMIT");
+ break;
+ case LastError.NET_ERROR_LOWRATEWPAN_ID_ABNORMAL: // (0x80000000|1014) 无线异常添加
+ msg = Res.string().getBundle().getString("NET_ERROR_LOWRATEWPAN_ID_ABNORMAL");
+ break;
+ case LastError.NET_ERROR_ENCRYPT: // (0x80000000|1015) 加密数据失败
+ msg = Res.string().getBundle().getString("NET_ERROR_ENCRYPT");
+ break;
+ case LastError.NET_ERROR_PWD_ILLEGAL: // (0x80000000|1016) 新密码不合规范
+ msg = Res.string().getBundle().getString("NET_ERROR_PWD_ILLEGAL");
+ break;
+ case LastError.NET_ERROR_DEVICE_ALREADY_INIT: // (0x80000000|1017) 设备已经初始化
+ msg = Res.string().getBundle().getString("NET_ERROR_DEVICE_ALREADY_INIT");
+ break;
+ case LastError.NET_ERROR_SECURITY_CODE: // (0x80000000|1018) 安全码错误
+ msg = Res.string().getBundle().getString("NET_ERROR_SECURITY_CODE");
+ break;
+ case LastError.NET_ERROR_SECURITY_CODE_TIMEOUT: // (0x80000000|1019) 安全码超出有效期
+ msg = Res.string().getBundle().getString("NET_ERROR_SECURITY_CODE_TIMEOUT");
+ break;
+ case LastError.NET_ERROR_GET_PWD_SPECI: // (0x80000000|1020) 获取密码规范失败
+ msg = Res.string().getBundle().getString("NET_ERROR_GET_PWD_SPECI");
+ break;
+ case LastError.NET_ERROR_NO_AUTHORITY_OF_OPERATION: // (0x80000000|1021) 无权限进行该操作
+ msg = Res.string().getBundle().getString("NET_ERROR_NO_AUTHORITY_OF_OPERATION");
+ break;
+ case LastError.NET_ERROR_DECRYPT: // (0x80000000|1022) 解密数据失败
+ msg = Res.string().getBundle().getString("NET_ERROR_DECRYPT");
+ break;
+ case LastError.NET_ERROR_2D_CODE: // (0x80000000|1023) 2D code校验失败
+ msg = Res.string().getBundle().getString("NET_ERROR_2D_CODE");
+ break;
+ case LastError.NET_ERROR_INVALID_REQUEST: // (0x80000000|1024) 非法的RPC请求
+ msg = Res.string().getBundle().getString("NET_ERROR_INVALID_REQUEST");
+ break;
+ case LastError.NET_ERROR_PWD_RESET_DISABLE: // (0x80000000|1025) 密码重置功能已关闭
+ msg = Res.string().getBundle().getString("NET_ERROR_PWD_RESET_DISABLE");
+ break;
+ case LastError.NET_ERROR_PLAY_PRIVATE_DATA: // (0x80000000|1026) 显示私有数据,比如规则框等失败
+ msg = Res.string().getBundle().getString("NET_ERROR_PLAY_PRIVATE_DATA");
+ break;
+ case LastError.NET_ERROR_ROBOT_OPERATE_FAILED: // (0x80000000|1027) 机器人操作失败
+ msg = Res.string().getBundle().getString("NET_ERROR_ROBOT_OPERATE_FAILED");
+ break;
+ case LastError.NET_ERROR_PHOTOSIZE_EXCEEDSLIMIT: // (0x80000000|1028) 图片大小超限
+ msg = Res.string().getBundle().getString("NET_ERROR_PHOTOSIZE_EXCEEDSLIMIT");
+ break;
+ case LastError.NET_ERROR_USERID_INVALID: // (0x80000000|1029) 用户ID不存在
+ msg = Res.string().getBundle().getString("NET_ERROR_USERID_INVALID");
+ break;
+ case LastError.NET_ERROR_EXTRACTFEATURE_FAILED: // (0x80000000|1030) 照片特征值提取失败
+ msg = Res.string().getBundle().getString("NET_ERROR_EXTRACTFEATURE_FAILED");
+ break;
+ case LastError.NET_ERROR_PHOTO_EXIST: // (0x80000000|1031) 照片已存在
+ msg = Res.string().getBundle().getString("NET_ERROR_PHOTO_EXIST");
+ break;
+ case LastError.NET_ERROR_PHOTO_OVERFLOW: // (0x80000000|1032) 照片数量超过上限
+ msg = Res.string().getBundle().getString("NET_ERROR_PHOTO_OVERFLOW");
+ break;
+ case LastError.NET_ERROR_CHANNEL_ALREADY_OPENED: // (0x80000000|1033) 通道已经打开
+ msg = Res.string().getBundle().getString("NET_ERROR_CHANNEL_ALREADY_OPENED");
+ break;
+ case LastError.NET_ERROR_CREATE_SOCKET: // (0x80000000|1034) 创建套接字失败
+ msg = Res.string().getBundle().getString("NET_ERROR_CREATE_SOCKET");
+ break;
+ case LastError.NET_ERROR_CHANNEL_NUM: // (0x80000000|1035) 通道号错误
+ msg = Res.string().getBundle().getString("NET_ERROR_CHANNEL_NUM");
+ break;
+ case LastError.NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_ID_EXCEED: // (0x80000000|1051) 组ID超过最大值
+ msg = Res.string().getBundle().getString("NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_ID_EXCEED");
+ break;
+ default:
+ msg = Res.string().getBundle().getString("NET_ERROR");
+ break;
+ }
+ return msg;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/common/EventTaskCommonQueue.java b/src/main/java/com/netsdk/common/EventTaskCommonQueue.java
new file mode 100644
index 0000000..ed4403c
--- /dev/null
+++ b/src/main/java/com/netsdk/common/EventTaskCommonQueue.java
@@ -0,0 +1,79 @@
+package com.netsdk.common;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.LinkedBlockingDeque;
+
+public class EventTaskCommonQueue {
+
+ // 设置一个队列,容量看情况改
+ private final int MAX_TASK_COUNT = 10000; // 队列容量
+ private final LinkedBlockingDeque
eventTasks = new LinkedBlockingDeque(MAX_TASK_COUNT);
+
+ // 起一个线程池
+ private final int MAX_THREAD_COUNT = 10; // 线程池容量
+ private ExecutorService eventQueueService = Executors.newFixedThreadPool(MAX_THREAD_COUNT);
+
+ // 用于检验服务运行状态
+ private volatile boolean running = true;
+
+ // 用于查看当前线程状态
+ private Future> eventQueueThreadStatus;
+
+ // 初始化
+ public void init() {
+ eventQueueThreadStatus = eventQueueService.submit(new Thread(new Runnable() {
+ @Override
+ public void run() {
+ while (running) {
+ try {
+ EventTaskHandler task = eventTasks.take(); //开始一个任务
+ try {
+ task.eventTaskProcess(); // 主要的运行函数
+ } catch (Exception e) {
+ System.err.println("任务处理发生错误"); // error
+ }
+ } catch (InterruptedException e) {
+ System.err.println("任务已意外停止"); // error
+ running = false;
+ }
+ }
+ }
+ }, "Event call back thread init"));
+ }
+
+ // 向队列添加新的任务
+ public boolean addEvent(EventTaskHandler eventHandler) {
+ if (!running) {
+ System.out.println("任务已停止"); // warning
+ return false;
+ }
+ boolean success = eventTasks.offer(eventHandler);
+ if (!success) {
+ // 队列已满,无法再添加
+ System.out.println("添加到事件队列失败");
+ }
+ return success;
+ }
+
+
+ // 手动启动服务
+ public void activeService() {
+ running = true;
+ if (eventQueueService.isShutdown()) {
+ eventQueueService = Executors.newFixedThreadPool(MAX_THREAD_COUNT);;
+ init();
+ System.out.println("线程池已关闭,重新初始化线程池及任务");
+ }
+ if (eventQueueThreadStatus.isDone()) {
+ init();
+ System.out.println("线程池任务结束,重新初始化任务");
+ }
+ }
+
+ // 手动关闭服务
+ public void destroy() {
+ running = false;
+ eventQueueService.shutdownNow();
+ }
+}
diff --git a/src/main/java/com/netsdk/common/EventTaskHandler.java b/src/main/java/com/netsdk/common/EventTaskHandler.java
new file mode 100644
index 0000000..90c4b1b
--- /dev/null
+++ b/src/main/java/com/netsdk/common/EventTaskHandler.java
@@ -0,0 +1,6 @@
+package com.netsdk.common;
+
+public interface EventTaskHandler {
+
+ void eventTaskProcess();
+}
diff --git a/src/main/java/com/netsdk/common/FunctionList.java b/src/main/java/com/netsdk/common/FunctionList.java
new file mode 100644
index 0000000..1159c21
--- /dev/null
+++ b/src/main/java/com/netsdk/common/FunctionList.java
@@ -0,0 +1,365 @@
+package com.netsdk.common;
+
+import java.awt.BorderLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import javax.swing.border.EmptyBorder;
+import com.netsdk.demo.frame.*;
+import com.netsdk.demo.frame.Attendance.Attendance;
+import com.netsdk.demo.frame.AutoRegister.AutoRegister;
+import com.netsdk.demo.frame.FaceRecognition.NewLatticeScreen;
+import com.netsdk.demo.frame.Gate.Gate;
+import com.netsdk.demo.frame.ThermalCamera.ThermalCamera;
+import com.netsdk.demo.frame.scada.SCADADemo;
+import com.netsdk.demo.frame.vto.VTODemo;
+
+/**
+ * 功能列表界面
+ */
+public class FunctionList extends JFrame {
+ private static final long serialVersionUID = 1L;
+
+ public FunctionList() {
+ setTitle(Res.string().getFunctionList());
+ setLayout(new BorderLayout());
+ pack();
+ setSize(450, 300);
+ setResizable(false);
+ setLocationRelativeTo(null);
+
+ add(new FunctionPanel(), BorderLayout.CENTER);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ dispose();
+ System.exit(0);
+ }
+ });
+ }
+
+ public class FunctionPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public FunctionPanel() {
+ setLayout(new GridLayout(9, 2));
+
+ setBorder(new EmptyBorder(30, 50, 0, 50));
+
+ //faceRecognitionBtn = new JButton(Res.string().getFaceRecognition());
+ gateBtn = new JButton(Res.string().getGate());
+ capturePictureBtn = new JButton(Res.string().getCapturePicture());
+ realPlayBtn = new JButton(Res.string().getRealplay());
+ itsEventBtn = new JButton(Res.string().getITSEvent());
+ downloadBtn = new JButton(Res.string().getDownloadRecord());
+ talkBtn = new JButton(Res.string().getTalk());
+ deviceSearchAndInitBtn = new JButton(Res.string().getDeviceSearchAndInit());
+ ptzBtn = new JButton(Res.string().getPTZ());
+ deviceCtlBtn = new JButton(Res.string().getDeviceControl());
+ alarmListenBtn = new JButton(Res.string().getAlarmListen());
+ autoRegisterBtn = new JButton(Res.string().getAutoRegister());
+ attendanceBtn = new JButton(Res.string().getAttendance());
+ thermalCameraBtn = new JButton(Res.string().getThermalCamera());
+ matrixScreenBtn = new JButton(Res.string().getmatrixScreen());
+ humanNumberStatisticBtn = new JButton(Res.string().getHumanNumberStatistic());
+ vtoBtn = new JButton(Res.string().getVTO());
+
+ SCADABtn = new JButton(Res.string().getSCADA());
+
+ trafficAllowListBtn = new JButton(Res.string().getTrafficAllowList());
+
+
+ add(gateBtn);
+ // add(faceRecognitionBtn);
+ add(deviceSearchAndInitBtn);
+ add(ptzBtn);
+ add(realPlayBtn);
+ add(capturePictureBtn);
+ add(talkBtn);
+ add(itsEventBtn);
+ add(downloadBtn);
+ add(deviceCtlBtn);
+ add(alarmListenBtn);
+ add(autoRegisterBtn);
+ //add(attendanceBtn);
+ add(thermalCameraBtn);
+ add(matrixScreenBtn);
+ add(humanNumberStatisticBtn);
+ add(vtoBtn);
+ add(SCADABtn);
+ add(trafficAllowListBtn);
+ gateBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ dispose();
+ Gate.main(null);
+ }
+ });
+ }
+ });
+
+ /* faceRecognitionBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ dispose();
+ FaceRecognition.main(null);
+ }
+ });
+ }
+ });
+*/
+
+ capturePictureBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ dispose();
+ CapturePicture.main(null);
+ }
+ });
+ }
+ });
+
+ realPlayBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ dispose();
+ RealPlay.main(null);
+ }
+ });
+ }
+ });
+
+ downloadBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ dispose();
+ DownLoadRecord.main(null);
+ }
+ });
+ }
+ });
+
+ talkBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ dispose();
+ Talk.main(null);
+ }
+ });
+ }
+ });
+
+ itsEventBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ dispose();
+ TrafficEvent.main(null);
+ }
+ });
+ }
+ });
+
+ deviceSearchAndInitBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ dispose();
+ DeviceSearchAndInit.main(null);
+ }
+ });
+ }
+ });
+
+ ptzBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ dispose();
+ PTZControl.main(null);
+ }
+ });
+ }
+ });
+
+ deviceCtlBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ dispose();
+ DeviceControl.main(null);
+ }
+ });
+ }
+ });
+
+ alarmListenBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ dispose();
+ AlarmListen.main(null);
+ }
+ });
+ }
+ });
+
+ autoRegisterBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ dispose();
+ AutoRegister.main(null);
+ }
+ });
+ }
+ });
+
+ attendanceBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ dispose();
+ Attendance.main(null);
+ }
+ });
+ }
+ });
+
+ thermalCameraBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ dispose();
+ ThermalCamera.main(null);
+ }
+ });
+ }
+ });
+
+
+ matrixScreenBtn.addActionListener(new ActionListener() {
+ @Override public void actionPerformed(ActionEvent e) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run()
+ {
+ dispose();
+ NewLatticeScreen.main(null);
+ }
+ });
+ }
+ });
+
+
+ humanNumberStatisticBtn.addActionListener(new ActionListener() {
+
+ @Override public void actionPerformed(ActionEvent e) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run()
+ {
+ dispose();
+ HumanNumberStatistic.main(null);
+ }
+ });
+ }
+ });
+ vtoBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ dispose();
+ VTODemo.main(null);
+ }
+ });
+ }
+ });
+
+ SCADABtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ dispose();
+ SCADADemo.main(null);
+ }
+ });
+ }
+ });
+
+ trafficAllowListBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ dispose();
+ TrafficAllowList.main(null);
+ }
+ });
+ }
+ });
+
+
+ }
+
+ /*
+ * 功能列表组件
+ */
+ //private JButton faceRecognitionBtn;
+ private JButton capturePictureBtn;
+ private JButton realPlayBtn;
+ private JButton downloadBtn;
+ private JButton itsEventBtn;
+ private JButton talkBtn;
+ private JButton deviceSearchAndInitBtn;
+ private JButton ptzBtn;
+ private JButton deviceCtlBtn;
+ private JButton alarmListenBtn;
+ private JButton autoRegisterBtn;
+ private JButton attendanceBtn;
+ private JButton gateBtn;
+ private JButton thermalCameraBtn;
+ private JButton matrixScreenBtn;
+ private JButton humanNumberStatisticBtn;
+ private JButton vtoBtn;
+
+ /**
+ * 动环主机按钮
+ */
+ private JButton SCADABtn;
+
+ /**
+ * 允许名单注册
+ */
+ private JButton trafficAllowListBtn;
+ }
+}
diff --git a/src/main/java/com/netsdk/common/ListPictureShowDialog.java b/src/main/java/com/netsdk/common/ListPictureShowDialog.java
new file mode 100644
index 0000000..dd67310
--- /dev/null
+++ b/src/main/java/com/netsdk/common/ListPictureShowDialog.java
@@ -0,0 +1,35 @@
+package com.netsdk.common;
+
+import java.awt.BorderLayout;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.JDialog;
+
+/*
+ * 智能交通列表双击展示图片框架
+ */
+public class ListPictureShowDialog extends JDialog {
+ private static final long serialVersionUID = 1L;
+ public ListPictureShowDialog() {
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(800, 600);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体
+
+
+ listPanel = new PaintPanel();
+ add(listPanel, BorderLayout.CENTER);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ dispose();
+ }
+ });
+ }
+
+ public PaintPanel listPanel;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/common/LoginPanel.java b/src/main/java/com/netsdk/common/LoginPanel.java
new file mode 100644
index 0000000..0bd4c64
--- /dev/null
+++ b/src/main/java/com/netsdk/common/LoginPanel.java
@@ -0,0 +1,115 @@
+package com.netsdk.common;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionListener;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JTextField;
+
+import com.netsdk.lib.ToolKits;
+
+/*
+ * 登陆面板
+ */
+public class LoginPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ //登陆参数
+ private String s_strIp = "192.168.69.142";/*"172.23.12.17";*/ //"192.168.7.61";
+ private Integer s_nPort = new Integer("37777");
+ private String s_strUser = "admin";
+ private String s_strPassword = "yzx123456";
+
+ public LoginPanel() {
+ BorderEx.set(this, Res.string().getLogin(), 2);
+ setLayout(new FlowLayout());
+
+ ////////////////////////////////
+ loginBtn = new JButton(Res.string().getLogin());
+ logoutBtn = new JButton(Res.string().getLogout());
+ ipLabel = new JLabel(Res.string().getDeviceIp());
+ portLabel = new JLabel(" " + Res.string().getPort());
+ nameLabel = new JLabel(" " + Res.string().getUserName());
+ passwordLabel = new JLabel(" " + Res.string().getPassword());
+ ipTextArea = new JTextField(s_strIp);
+ nameTextArea = new JTextField(s_strUser);
+ passwordTextArea = new JPasswordField(s_strPassword);
+ portTextArea = new JTextField(s_nPort.toString());
+
+ add(ipLabel);
+ add(ipTextArea);
+ add(portLabel);
+ add(portTextArea);
+ add(nameLabel);
+ add(nameTextArea);
+ add(passwordLabel);
+ add(passwordTextArea);
+ add(loginBtn);
+ add(logoutBtn);
+
+ ipTextArea.setPreferredSize(new Dimension(90, 20));
+ nameTextArea.setPreferredSize(new Dimension(90, 20));
+ passwordTextArea.setPreferredSize(new Dimension(90, 20));
+ portTextArea.setPreferredSize(new Dimension(90, 20));
+
+ loginBtn.setPreferredSize(new Dimension(80, 20));
+ logoutBtn.setPreferredSize(new Dimension(80, 20));
+ ToolKits.limitTextFieldLength(portTextArea, 6);
+
+ logoutBtn.setEnabled(false);
+ }
+
+ public void addLoginBtnActionListener(ActionListener e) {
+ loginBtn.addActionListener(e);
+ }
+
+ public void addLogoutBtnActionListener(ActionListener e) {
+ logoutBtn.addActionListener(e);
+ }
+
+ public void setButtonEnable(boolean bln) {
+ loginBtn.setEnabled(!bln);
+ logoutBtn.setEnabled(bln);
+ }
+
+ public boolean checkLoginText() {
+ if(ipTextArea.getText().equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getInputDeviceIP(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+
+ if(portTextArea.getText().equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getInputDevicePort(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+
+ if(nameTextArea.getText().equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getInputUsername(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+
+ if(new String(passwordTextArea.getPassword()).equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getInputPassword(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+
+ return true;
+ }
+
+ public JLabel nameLabel;
+ public JLabel passwordLabel;
+ public JLabel ipLabel;
+ public JLabel portLabel;
+
+ public JTextField ipTextArea;
+ public JTextField portTextArea;
+ public JTextField nameTextArea;
+ public JPasswordField passwordTextArea;
+
+ public JButton loginBtn;
+ public JButton logoutBtn;
+}
diff --git a/src/main/java/com/netsdk/common/PaintPanel.java b/src/main/java/com/netsdk/common/PaintPanel.java
new file mode 100644
index 0000000..b431bcb
--- /dev/null
+++ b/src/main/java/com/netsdk/common/PaintPanel.java
@@ -0,0 +1,35 @@
+package com.netsdk.common;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Image;
+
+import javax.swing.JPanel;
+
+/*
+ * 带背景的绘图面板
+ */
+public class PaintPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+ private Image image; //背景图片
+
+ public PaintPanel() {
+ super();
+ setOpaque(true); //非透明
+ setLayout(null);
+ setBackground(Color.GRAY);
+ setForeground(new Color(0, 0, 0));
+ }
+
+ //设置图片的方法
+ public void setImage(Image image) {
+ this.image = image;
+ }
+
+ protected void paintComponent(Graphics g) { //重写绘制组件外观
+ if(image != null) {
+ g.drawImage(image, 0, 0, getWidth(), getHeight(), this);//绘制图片与组件大小相同
+ }
+ super.paintComponent(g); // 执行超类方法
+ }
+}
diff --git a/src/main/java/com/netsdk/common/Res.java b/src/main/java/com/netsdk/common/Res.java
new file mode 100644
index 0000000..a06c46c
--- /dev/null
+++ b/src/main/java/com/netsdk/common/Res.java
@@ -0,0 +1,2882 @@
+package com.netsdk.common;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.*;
+
+public final class Res {
+
+ private static ResourceBundle bundle;
+
+ private Res() {
+ switchLanguage(LanguageType.Chinese);
+ }
+
+ private static class StringBundleHolder {
+ private static Res instance = new Res();
+ }
+
+ public static Res string() {
+ return StringBundleHolder.instance;
+ }
+
+ public static enum LanguageType {
+ English,
+ Chinese
+ }
+
+ public ResourceBundle getBundle() {
+ return bundle;
+ }
+
+ /**
+ * \if ENGLISH_LANG
+ * Switch between Chinese and English
+ * \else
+ * 中英文切换
+ * \endif
+ */
+ public void switchLanguage(LanguageType type) {
+ switch(type) {
+ case Chinese:
+ bundle = ResourceBundle.getBundle("res", new Locale("zh", "CN"));
+ break;
+ case English:
+ bundle = ResourceBundle.getBundle("res", new Locale("en", "US"));
+ break;
+ default:
+ break;
+ }
+ }
+
+ public String getSwitchLanguage() {
+ return bundle.getString("SWITCH_LANGUAGE");
+ }
+
+ public String getRealplay() {
+ return bundle.getString("REALPLAY");
+ }
+
+ public String getMultiRealplay() {
+ return bundle.getString("MULTIREALPLAY");
+ }
+
+ public String getDownloadRecord() {
+ return bundle.getString("DOWNLOAD_RECORD");
+ }
+
+ public String getITSEvent() {
+ return bundle.getString("ITS_EVENT");
+ }
+
+ public String getOnline() {
+ return bundle.getString("ONLINE");
+ }
+
+ public String getDisConnectReconnecting() {
+ return bundle.getString("DISCONNECT_RECONNECTING");
+ }
+
+ public String getDisConnect() {
+ return bundle.getString("DISCONNECT");
+ }
+
+ public String getPromptMessage() {
+ return bundle.getString("PROMPT_MESSAGE");
+ }
+
+ public String getErrorMessage() {
+ return bundle.getString("ERROR_MESSAGE");
+ }
+
+ public String getReconnectSucceed() {
+ return bundle.getString("RECONNECT_SUCCEED");
+ }
+
+ public String getSucceed() {
+ return bundle.getString("SUCCEED");
+ }
+
+ public String getFailed() {
+ return bundle.getString("FAILED");
+ }
+
+ public String getYear() {
+ return bundle.getString("YEAR");
+ }
+
+ public String getMonth() {
+ return bundle.getString("MONTH");
+ }
+
+ public String getDay() {
+ return bundle.getString("DAY");
+ }
+
+ public String getHour() {
+ return bundle.getString("HOUR");
+ }
+
+ public String getMinute() {
+ return bundle.getString("MINUTE");
+ }
+
+ public String getSecond() {
+ return bundle.getString("SECOND");
+ }
+
+ public String getSunday() {
+ return bundle.getString("SUNDAY");
+ }
+
+ public String getMonday() {
+ return bundle.getString("MONDAY");
+ }
+
+ public String getTuesday() {
+ return bundle.getString("TUESDAY");
+ }
+
+ public String getWednesday() {
+ return bundle.getString("WEDNESDAY");
+ }
+
+ public String getThursday() {
+ return bundle.getString("THURSDAY");
+ }
+
+ public String getFriday() {
+ return bundle.getString("FRIDAY");
+ }
+
+ public String getSaturday() {
+ return bundle.getString("SATURDAY");
+ }
+
+ public String[] getWeek() {
+ String[] weekdays = {getSunday(),
+ getMonday(),
+ getTuesday(),
+ getWednesday(),
+ getThursday(),
+ getFriday(),
+ getSaturday()
+ };
+
+ return weekdays;
+ }
+
+ public String getConfirm() {
+ return bundle.getString("CONFIRM");
+ }
+
+ public String getCancel() {
+ return bundle.getString("CANCEL");
+ }
+
+ public String getDateChooser() {
+ return bundle.getString("DATE_CHOOSER");
+ }
+
+ public String getFunctionList() {
+ return bundle.getString("FUNCTIONLIST");
+ }
+
+ public String getLogin() {
+ return bundle.getString("LOGIN");
+ }
+
+ public String getLoginSuccess() {
+ return bundle.getString("LOGIN_SUCCEED");
+ }
+
+ public String getFillingRules() {
+ return bundle.getString("FILLING_RULES");
+ }
+
+ public String getLogout() {
+ return bundle.getString("LOGOUT");
+ }
+
+ public String getDeviceIp() {
+ return bundle.getString("DEVICE_IP");
+ }
+
+ public String getIp() {
+ return bundle.getString("IP");
+ }
+
+ public String getPort() {
+ return bundle.getString("DEVICE_PORT");
+ }
+
+ public String getUserId() {
+ return bundle.getString("USER_ID");
+ }
+
+ public String getTemp() {
+ return bundle.getString("TEMPERATURE");
+ }
+
+ public String getMaskstutas() {
+ return bundle.getString("MASK_STATUS");
+ }
+
+ public String getUserName(boolean space) {
+ return bundle.getString("USER_NAME");
+ }
+
+ public String getCardNo() {
+ return bundle.getString("CARD_NO");
+ }
+
+ public String getUserName() {
+ return bundle.getString("USERNAME");
+ }
+
+ public String getPassword() {
+ return bundle.getString("PASSWORD");
+ }
+
+
+ public String getLoginFailed() {
+ return bundle.getString("LOGIN_FAILED");
+ }
+
+ public String getInputDeviceIP() {
+ return bundle.getString("PLEASE_INPUT_DEVICE_IP");
+ }
+
+ public String getInputDevicePort() {
+ return bundle.getString("PLEASE_INPUT_DEVICE_PORT");
+ }
+
+ public String getInputUsername() {
+ return bundle.getString("PLEASE_INPUT_DEVICE_USERNAME");
+ }
+
+ public String getInputPassword() {
+ return bundle.getString("PLEASE_INPUT_DEVICE_PASSWORD");
+ }
+
+ public String getInputConfirmPassword() {
+ return bundle.getString("PLEASE_INPUT_CONFIRM_PASSWORD");
+ }
+
+ public String getStartRealPlay() {
+ return bundle.getString("START_REALPLAY");
+ }
+
+ public String getStopRealPlay() {
+ return bundle.getString("STOP_REALPLAY");
+ }
+
+ public String getChn() {
+ return bundle.getString("CHN");
+ }
+
+ public String getChannel() {
+ return bundle.getString("CHANNEL");
+ }
+
+ public String getStreamType() {
+ return bundle.getString("STREAM_TYPE");
+ }
+
+ public String getMasterAndSub() {
+ return bundle.getString("MASTER_AND_SUB_STREAM");
+ }
+
+ public String getMasterStream() {
+ return bundle.getString("MASTER_STREAM");
+ }
+
+ public String getSubStream() {
+ return bundle.getString("SUB_STREAM");
+ }
+
+ public String getPTZ() {
+ return bundle.getString("PTZ");
+ }
+
+ public String getPtzControlAndCapture() {
+ return bundle.getString("PTZCONTROL_CAPTURE");
+ }
+
+ public String getCapturePicture() {
+ return bundle.getString("CAPTURE_PICTURE");
+ }
+
+ public String getLocalCapture() {
+ return bundle.getString("LOCAL_CAPTURE");
+ }
+
+ public String getRemoteCapture() {
+ return bundle.getString("REMOTE_CAPTURE");
+ }
+
+ public String getTimerCapture() {
+ return bundle.getString("TIMER_CAPTURE");
+ }
+
+ public String getStopCapture() {
+ return bundle.getString("STOP_CAPTURE");
+ }
+
+ public String getInterval() {
+ return bundle.getString("INTERVAL");
+ }
+
+ public String getTimeIntervalIllegal() {
+ return bundle.getString("TIME_INTERVAL_ILLEGAL");
+ }
+
+ public String getNeedStartRealPlay() {
+ return bundle.getString("PLEASE_START_REALPLAY");
+ }
+
+ public String getPTZControl() {
+ return bundle.getString("PTZ_CONTROL");
+ }
+
+ public String getLeftUp() {
+ return bundle.getString("LEFT_UP");
+ }
+
+ public String getUp() {
+ return bundle.getString("UP");
+ }
+
+ public String getRightUp() {
+ return bundle.getString("RIGHT_UP");
+ }
+
+ public String getLeft() {
+ return bundle.getString("LEFT");
+ }
+
+ public String getRight() {
+ return bundle.getString("RIGHT");
+ }
+
+ public String getLeftDown() {
+ return bundle.getString("LEFT_DOWN");
+ }
+
+ public String getDown() {
+ return bundle.getString("DOWN");
+ }
+
+ public String getRightDown() {
+ return bundle.getString("RIGHT_DOWN");
+ }
+
+ public String getSpeed() {
+ return bundle.getString("SPEED");
+ }
+
+ public String getZoomAdd() {
+ return bundle.getString("ZOOM_ADD");
+ }
+
+ public String getZoomDec() {
+ return bundle.getString("ZOOM_DEC");
+ }
+
+ public String getFocusAdd() {
+ return bundle.getString("FOCUS_ADD");
+ }
+
+ public String getFocusDec() {
+ return bundle.getString("FOCUS_DEC");
+ }
+
+ public String getIrisAdd() {
+ return bundle.getString("IRIS_ADD");
+ }
+
+ public String getIrisDec() {
+ return bundle.getString("IRIS_DEC");
+ }
+
+ public String getIndex() {
+ return bundle.getString("INDEX");
+ }
+
+ public String getEventPicture() {
+ return bundle.getString("EVENT_PICTURE");
+ }
+
+ public String getPlatePicture() {
+ return bundle.getString("PLATE_PICTURE");
+ }
+
+ public String getEventName() {
+ return bundle.getString("EVENT_NAME");
+ }
+
+ public String getLicensePlate() {
+ return bundle.getString("LICENSE_PLATE");
+ }
+
+ public String getEventTime() {
+ return bundle.getString("EVENT_TIME");
+ }
+
+ public String getPlateType() {
+ return bundle.getString("PLATE_TYPE");
+ }
+
+ public String getPlateColor() {
+ return bundle.getString("PLATE_COLOR");
+ }
+
+ public String getVehicleColor() {
+ return bundle.getString("VEHICLE_COLOR");
+ }
+
+ public String getVehicleType() {
+ return bundle.getString("VEHICLE_TYPE");
+ }
+
+ public String getVehicleSize() {
+ return bundle.getString("VEHICLE_SIZE");
+ }
+
+ public String getFileCount() {
+ return bundle.getString("FILE_COUNT");
+ }
+
+ public String getFileIndex() {
+ return bundle.getString("FILE_INDEX");
+ }
+
+ public String getGroupId() {
+ return bundle.getString("GROUP_ID");
+ }
+
+ public String getIllegalPlace() {
+ return bundle.getString("ILLEGAL_PLACE");
+ }
+
+ public String getLaneNumber() {
+ return bundle.getString("LANE_NUMBER");
+ }
+
+ public String getEventInfo() {
+ return bundle.getString("EVENT_INFO");
+ }
+
+ public String getNoPlate() {
+ return bundle.getString("NO_PLATENUMBER");
+ }
+
+ public String[] getTrafficTableName() {
+ String[] name = {getIndex(),
+ getEventName(),
+ getLicensePlate(),
+ getEventTime(),
+ getPlateType(),
+ getPlateColor(),
+ getVehicleColor(),
+ getVehicleType(),
+ getVehicleSize(),
+ getFileCount(),
+ getFileIndex(),
+ getGroupId(),
+ getIllegalPlace(),
+ getLaneNumber()};
+ return name;
+ }
+
+ public String getOperate() {
+ return bundle.getString("OPERATE");
+ }
+
+ public String getAttach() {
+ return bundle.getString("ATTACH");
+ }
+
+ public String getDetach() {
+ return bundle.getString("DETACH");
+ }
+
+ public String getOpenStrobe() {
+ return bundle.getString("OPEN_STROBE");
+ }
+
+ public String getCloseStrobe() {
+ return bundle.getString("CLOSE_STROBE");
+ }
+
+ public String getOpenStrobeFailed() {
+ return bundle.getString("OPEN_STROBE_FAILED");
+ }
+
+ public String getManualCapture() {
+ return bundle.getString("MANUAL_CAPTURE");
+ }
+
+ public String getManualCaptureSucceed() {
+ return bundle.getString("MANUALSNAP_SUCCEED");
+ }
+
+ public String getManualCaptureFailed() {
+ return bundle.getString("MANUALSNAP_FAILED");
+ }
+
+ /*
+ * 车辆大小对照表
+ */
+ public String getTrafficSize(int nVehicleSize) {
+ String vehicleClass = "";
+ for(int i = 0; i < 5; i++) {
+ if( ((byte)nVehicleSize & (1 << i)) > 0 ) {
+ switch (i) {
+ case 0:
+ vehicleClass = bundle.getString("LIGHT_DUTY");
+ break;
+ case 1:
+ vehicleClass = bundle.getString("MEDIUM");
+ break;
+ case 2:
+ vehicleClass = bundle.getString("OVER_SIZE");
+ break;
+ case 3:
+ vehicleClass = bundle.getString("MINI_SIZE");
+ break;
+ case 4:
+ vehicleClass = bundle.getString("LARGE_SIZE");
+ break;
+ }
+ }
+ }
+
+ return vehicleClass;
+ }
+
+ /*
+ * 获取事件名称
+ */
+ public String getEventName(int type) {
+ String name = "";
+ switch (type) {
+ case NetSDKLib.EVENT_IVS_TRAFFICJUNCTION: ///< 交通路口事件
+ name = bundle.getString("EVENT_IVS_TRAFFICJUNCTION");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_RUNREDLIGHT: ///< 闯红灯事件
+ name = bundle.getString("EVENT_IVS_TRAFFIC_RUNREDLIGHT");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_OVERLINE: ///< 压车道线事件
+ name = bundle.getString("EVENT_IVS_TRAFFIC_OVERLINE");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_RETROGRADE: ///< 逆行事件
+ name = bundle.getString("EVENT_IVS_TRAFFIC_RETROGRADE");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_TURNLEFT: ///< 违章左转
+ name = bundle.getString("EVENT_IVS_TRAFFIC_TURNLEFT");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_TURNRIGHT: ///< 违章右转
+ name = bundle.getString("EVENT_IVS_TRAFFIC_TURNRIGHT");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_UTURN: ///< 违章掉头
+ name = bundle.getString("EVENT_IVS_TRAFFIC_UTURN");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_OVERSPEED: ///< 超速
+ name = bundle.getString("EVENT_IVS_TRAFFIC_OVERSPEED");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_UNDERSPEED: ///< 低速
+ name = bundle.getString("EVENT_IVS_TRAFFIC_UNDERSPEED");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_PARKING: ///< 违章停车
+ name = bundle.getString("EVENT_IVS_TRAFFIC_PARKING");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_WRONGROUTE: ///< 不按车道行驶
+ name = bundle.getString("EVENT_IVS_TRAFFIC_WRONGROUTE");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_CROSSLANE: ///< 违章变道
+ name = bundle.getString("EVENT_IVS_TRAFFIC_CROSSLANE");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_OVERYELLOWLINE: ///< 压黄线
+ name = bundle.getString("EVENT_IVS_TRAFFIC_OVERYELLOWLINE");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE: ///< 黄牌车占道事件
+ name = bundle.getString("EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY: ///< 斑马线行人优先事件
+ name = bundle.getString("EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_MANUALSNAP: ///< 交通手动抓拍事件
+ name = bundle.getString("EVENT_IVS_TRAFFIC_MANUALSNAP");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_VEHICLEINROUTE: ///< 有车占道事件
+ name = bundle.getString("EVENT_IVS_TRAFFIC_VEHICLEINROUTE");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE: ///< 占用公交车道事件
+ name = bundle.getString("EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_BACKING: ///< 违章倒车事件
+ name = bundle.getString("EVENT_IVS_TRAFFIC_BACKING");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING: ///< 车位有车事件
+ name = bundle.getString("EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING: ///< 车位无车事件
+ name = bundle.getString("EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING");
+ break;
+ case NetSDKLib.EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT: ///< 交通未系安全带事件
+ name = bundle.getString("EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT");
+ break;
+ default:
+ break;
+ }
+
+ return name;
+ }
+
+ public String getRecordType() {
+ return bundle.getString("RECORD_TYPE");
+ }
+
+ public String getStartTime() {
+ return bundle.getString("START_TIME");
+ }
+
+ public String getEndTime() {
+ return bundle.getString("END_TIME");
+ }
+
+ public String[] getDownloadTableName() {
+ String[] name = {getIndex(),
+ getChannel(),
+ getRecordType(),
+ getStartTime(),
+ getEndTime()};
+ return name;
+ }
+
+ public String getDownloadByFile() {
+ return bundle.getString("DOWNLOAD_RECORD_BYFILE");
+ }
+
+ public String getQuery() {
+ return bundle.getString("QUERY");
+ }
+
+ public String getDownload() {
+ return bundle.getString("DOWNLOAD");
+ }
+
+ public String getStopDownload() {
+ return bundle.getString("STOP_DOWNLOAD");
+ }
+
+ public String getDownloadByTime() {
+ return bundle.getString("DOWNLOAD_RECORD_BYTIME");
+ }
+
+ public String getSelectTimeAgain() {
+ return bundle.getString("PLEASE_SELECT_TIME_AGAIN");
+ }
+
+ public String getSelectRowWithData() {
+ return bundle.getString("PLEASE_FIRST_SELECT_ROW_WITH_DATA");
+ }
+
+ public String getQueryRecord() {
+ return bundle.getString("PLEASE_FIRST_QUERY_RECORD");
+ }
+
+ public String getDownloadCompleted() {
+ return bundle.getString("DOWNLOAD_COMPLETED");
+ }
+
+ /**
+ * 获取录像类型
+ */
+ public String getRecordTypeStr(int nRecordFileType) {
+ String recordTypeStr = "";
+ switch(nRecordFileType) {
+ case 0:
+ recordTypeStr = bundle.getString("GENERAL_RECORD");
+ break;
+ case 1:
+ recordTypeStr = bundle.getString("ALARM_RECORD");
+ break;
+ case 2:
+ recordTypeStr = bundle.getString("MOTION_DETECTION");
+ break;
+ case 3:
+ recordTypeStr = bundle.getString("CARD_NUMBER_RECORD");
+ break;
+ case 5:
+ recordTypeStr = bundle.getString("INTELLIGENT_DETECTION");
+ break;
+ case 19:
+ recordTypeStr = bundle.getString("POS_RECORD");
+ break;
+ default:
+ break;
+ }
+
+ return recordTypeStr;
+ }
+
+ public int getRecordTypeInt(String recordFileStr) {
+ int recordType = -1;
+ if(recordFileStr.equals(bundle.getString("GENERAL_RECORD"))) {
+ recordType = 0;
+ } else if(recordFileStr.equals(bundle.getString("ALARM_RECORD"))) {
+ recordType = 1;
+ } else if(recordFileStr.equals(bundle.getString("MOTION_DETECTION"))) {
+ recordType = 2;
+ } else if(recordFileStr.equals(bundle.getString("CARD_NUMBER_RECORD"))) {
+ recordType = 3;
+ }else if(recordFileStr.equals(bundle.getString("INTELLIGENT_DETECTION"))){
+ recordType=11;
+ }else if(recordFileStr.equals(bundle.getString("POS_RECORD"))){
+ recordType=19;
+ }
+
+
+ return recordType;
+ }
+
+ /**
+ * 语音对讲
+ */
+ public String getTalk() {
+ return bundle.getString("TALK");
+ }
+
+ public String getTransmitType() {
+ return bundle.getString("TRANSMIT_TYPE");
+ }
+
+ public String getLocalTransmitType() {
+ return bundle.getString("LOCAL_TRANSMIT_TYPE");
+ }
+
+ public String getRemoteTransmitType() {
+ return bundle.getString("REMOTE_TRANSMIT_TYPE");
+ }
+
+ public String getTransmitChannel() {
+ return bundle.getString("TRANSMIT_CHANNEL");
+ }
+
+ public String getStartTalk() {
+ return bundle.getString("START_TALK");
+ }
+
+ public String getStopTalk() {
+ return bundle.getString("STOP_TALK");
+ }
+
+ public String getTalkFailed() {
+ return bundle.getString("TALK_FAILED");
+ }
+
+ public String getDeviceSearchAndInit() {
+ return bundle.getString("DEVICESEARCH_DEVICEINIT");
+ }
+
+ public String getDeviceSearchOperate() {
+ return bundle.getString("DEVICESEARCH_OPERATE");
+ }
+
+ public String getDeviceSearchResult() {
+ return bundle.getString("DEVICESEARCH_RESULT");
+ }
+
+ public String getDeviceInit() {
+ return bundle.getString("DEVICEINIT");
+ }
+
+ public String getStartSearch() {
+ return bundle.getString("START_SEARCH");
+ }
+
+ public String getStopSearch() {
+ return bundle.getString("STOP_SEARCH");
+ }
+
+ public String getPleaseSelectInitializedDevice() {
+ return bundle.getString("PLEASE_FIRST_SELECT_INITIALIZED_DEVICE");
+ }
+
+ public String getDeviceSearch() {
+ return bundle.getString("DEVICESEARCH");
+ }
+
+ public String getDevicePointToPointSearch() {
+ return bundle.getString("DEVICE_POINT_TO_POINT_SEARCH");
+ }
+
+ public String getStartIp() {
+ return bundle.getString("START_IP");
+ }
+
+ public String getEndIp() {
+ return bundle.getString("END_IP");
+ }
+
+ public String getControlScope() {
+ return bundle.getString("THE_IP_CONTROL_SCOPE");
+ }
+
+ public String getDeviceType() {
+ return bundle.getString("DEVICE_TYPE");
+ }
+
+ public String getDeviceMac() {
+ return bundle.getString("MAC");
+ }
+
+ public String getDeviceSn() {
+ return bundle.getString("SN");
+ }
+
+ public String getDeviceInitState() {
+ return bundle.getString("DEVICE_INIT_STATE");
+ }
+
+ public String getInitPasswd() {
+ return bundle.getString("INIT_PASSWD");
+ }
+
+ public String[] getDeviceTableName() {
+ String[] name = {getIndex(),
+ getDeviceInitState(),
+ getIpVersion(),
+ getDeviceIp(),
+ getPort(),
+ getSubMask(),
+ getGetway(),
+ getDeviceMac(),
+ getDeviceType(),
+ getDetailType(),
+ getHttpPort()};
+
+ return name;
+ }
+
+ public String getIpVersion() {
+ return bundle.getString("IP_VERSION");
+ }
+
+ public String getSubMask() {
+ return bundle.getString("SUB_MASK");
+ }
+
+ public String getGetway() {
+ return bundle.getString("GETWAY");
+ }
+
+ public String getDetailType() {
+ return bundle.getString("DETAIL_TYPE");
+ }
+
+ public String getHttpPort() {
+ return bundle.getString("HTTP_PORT");
+ }
+
+ public String getLocalIp() {
+ return bundle.getString("LOCAL_IP");
+ }
+
+ public String getInitialized() {
+ return bundle.getString("INITIALIZED");
+ }
+
+ public String getNotInitialized() {
+ return bundle.getString("NOT_INITIALIZED");
+ }
+
+ public String getOldDevice() {
+ return bundle.getString("OLD_DEVICE");
+ }
+
+ public String getNotSupportInitialization() {
+ return bundle.getString("DONOT_SUPPORT_INITIALIZATION");
+ }
+
+ public String getPhone() {
+ return bundle.getString("PHONE");
+ }
+
+ public String getMail() {
+ return bundle.getString("MAIL");
+ }
+
+ public String getInputPhone() {
+ return bundle.getString("PLEASE_INPUT_PHONE");
+ }
+
+ public String getInputMail() {
+ return bundle.getString("PLEASE_INPUT_MAIL");
+ }
+
+ public String getConfirmPassword() {
+ return bundle.getString("CONFIRM_PASSWORD");
+ }
+
+ public String getInconsistent() {
+ return bundle.getString("INCONSISTENT");
+ }
+
+ public String getCheckIp() {
+ return bundle.getString("PLEASE_CHECK_IP");
+ }
+
+ // 0-老设备,没有初始化功能 1-未初始化账号 2-已初始化账户
+ public String getInitStateInfo(int initStatus) {
+ String initStateInfo = "";
+ switch(initStatus) {
+ case 0:
+ initStateInfo = getInitialized();
+ break;
+ case 1:
+ initStateInfo = getNotInitialized();
+ break;
+ case 2:
+ initStateInfo = getInitialized();
+ break;
+ }
+ return initStateInfo;
+ }
+
+ public String getAlarmListen() {
+ return bundle.getString("ALARM_LISTEN");
+ }
+
+ public String getStartListen() {
+ return bundle.getString("START_LISTEN");
+ }
+
+ public String getStopListen() {
+ return bundle.getString("STOP_LISTEN");
+ }
+ public String getStopListenFailed(){
+ return bundle.getString("STOP_LISTEN_FAILED");
+ }
+ public String getShowAlarmEvent() {
+ return bundle.getString("SHOW_ALARM_EVENT");
+ }
+
+ public String getAlarmMessage() {
+ return bundle.getString("ALARM_MESSAGE");
+ }
+
+ public String getExternalAlarm() {
+ return bundle.getString("EXTERNAL_ALARM");
+ }
+
+ public String getMotionAlarm() {
+ return bundle.getString("MOTION_ALARM");
+ }
+
+ public String getVideoLostAlarm() {
+ return bundle.getString("VIDEOLOST_ALARM");
+ }
+
+ public String getShelterAlarm() {
+ return bundle.getString("SHELTER_ALARM");
+ }
+
+ public String getDiskFullAlarm() {
+ return bundle.getString("DISKFULL_ALARM");
+ }
+
+ public String getDiskErrorAlarm() {
+ return bundle.getString("DISKERROR_ALARM");
+ }
+
+ public String getAlarmListenFailed() {
+ return bundle.getString("ALARM_LISTEN_FAILED");
+ }
+
+ public String getStart() {
+ return bundle.getString("START");
+ }
+
+ public String getStop() {
+ return bundle.getString("STOP");
+ }
+
+ public String getDeviceControl() {
+ return bundle.getString("DEVICE_CONTROL");
+ }
+
+ public String getDeviceReboot() {
+ return bundle.getString("DEVICE_REBOOT");
+ }
+
+ public String getSyncTime() {
+ return bundle.getString("SYNCHRONIZE_TIME");
+ }
+
+ public String getCurrentTime() {
+ return bundle.getString("CURRENT_TIME");
+ }
+
+ public String getReboot() {
+ return bundle.getString("REBOOT");
+ }
+
+ public String getRebootTips() {
+ return bundle.getString("REBOOT_TIPS");
+ }
+
+ public String getGetTime() {
+ return bundle.getString("GET_TIME");
+ }
+
+ public String getSetTime() {
+ return bundle.getString("SET_TIME");
+ }
+
+ public String getOperateSuccess() {
+ return bundle.getString("OPERATE_SUCCESS");
+ }
+
+ public String getFaceRecognition() {
+ return bundle.getString("FACERECOGNITION");
+ }
+
+ public String[] getGroupTable() {
+ String[] faceTable = {getFaceGroupId(),
+ getFaceGroupName(),
+ bundle.getString("PERSON_COUNT")};
+ return faceTable;
+ }
+
+ public String getFaceGroupId() {
+ return bundle.getString("FACE_GROUP_ID");
+ }
+
+ public String getFaceGroupName() {
+ return bundle.getString("FACE_GROUP_NAME");
+ }
+
+ public String getGroupOperate() {
+ return bundle.getString("GROUP_OPERATE");
+ }
+
+ public String getPersonOperate() {
+ return bundle.getString("PERSON_OPERATE");
+ }
+
+ public String getGlobalPicture() {
+ return bundle.getString("GLOBAL_PICTURE");
+ }
+
+ public String getPersonPicture() {
+ return bundle.getString("PERSON_PICTURE");
+ }
+
+ public String getCandidatePicture() {
+ return bundle.getString("CANDIDATE_PICTURE");
+ }
+
+ public String getTime() {
+ return bundle.getString("TIME");
+ }
+
+ public String getSex() {
+ return bundle.getString("SEX");
+ }
+
+ public String getAge() {
+ return bundle.getString("AGE");
+ }
+
+
+ public String getColor() {
+ return bundle.getString("COLOR");
+ }
+
+ public String getEye() {
+ return bundle.getString("EYE");
+ }
+
+ public String getMouth() {
+ return bundle.getString("MOUTH");
+ }
+
+ public String getMask() {
+ return bundle.getString("MASK");
+ }
+
+ public String getBeard() {
+ return bundle.getString("BEARD");
+ }
+
+ public String getName() {
+ return bundle.getString("NAME");
+ }
+
+ public String getBirthday() {
+ return bundle.getString("BIRTHDAY");
+ }
+
+ public String getIdNo() {
+ return bundle.getString("ID_NO");
+ }
+
+ public String getIdType() {
+ return bundle.getString("ID_TYPE");
+ }
+
+ public String getSimilarity() {
+ return bundle.getString("SIMILARITY");
+ }
+
+ public String getFaceDetectEvent() {
+ return bundle.getString("FACE_DETECT_EVENT");
+ }
+
+ public String getFaceRecognitionEvent() {
+ return bundle.getString("FACE_RECOGNITION_EVENT");
+ }
+
+ public String getUid() {
+ return bundle.getString("UID");
+ }
+
+ public String getGlasses() {
+ return bundle.getString("GLASSES");
+ }
+
+ public String getPicturePath() {
+ return bundle.getString("PICTURE_PATH");
+ }
+
+ public String getFaceLibraryID() {
+ return bundle.getString("FACE_LIBRARY_ID");
+ }
+
+ public String getFaceLibraryName() {
+ return bundle.getString("FACE_LIBRARY_NAME");
+ }
+
+ public String[] getPersonTable() {
+ String[] personTable = {getUid(), getName(), getSex(), getBirthday(), getIdType(), getIdNo()};
+ return personTable;
+ }
+
+ public String[] getDispositionTable() {
+ String[] dispositionTable = {getChannel(), getSimilarity()};
+ return dispositionTable;
+ }
+
+ public String getUnKnow() {
+ return bundle.getString("UNKNOW");
+ }
+
+ public String getMale() {
+ return bundle.getString("MALE");
+ }
+
+ public String getFemale() {
+ return bundle.getString("FEMALE");
+ }
+
+ public String[] getSexStringsFind() {
+ String[] faceSexStr = {getUnLimited(), getMale(), getFemale()};
+ return faceSexStr;
+ }
+
+ public String[] getIdStringsFind() {
+ String[] idStr = {getUnLimited(), getIdCard(), getPassport(),};
+ return idStr;
+ }
+
+ public String[] getSexStrings() {
+ String[] faceSexStr = {getUnKnow(), getMale(), getFemale()};
+ return faceSexStr;
+ }
+
+ public String[] getIdStrings() {
+ String[] idStr = {getUnKnow(), getIdCard(), getPassport(),};
+ return idStr;
+ }
+
+ public String getIdCard() {
+ return bundle.getString("ID_CARD");
+ }
+
+ public String getPassport() {
+ return bundle.getString("PASSPORT");
+ }
+
+ public String getOfficeCard() {
+ return bundle.getString("OFFICE_CARD");
+ }
+
+ public String getIdType(int idType) {
+ String str = "";
+ switch(idType) {
+ case 0:
+ str = getUnKnow();
+ break;
+ case 1:
+ str = getIdCard();
+ break;
+ case 2:
+ str = getPassport();
+ break;
+ case 3:
+ str = getOfficeCard();
+ break;
+ default :
+ str = getUnKnow();
+ break;
+ }
+ return str;
+ }
+
+ public String getSex(int sex) {
+ String str = "";
+ switch(sex) {
+ case 0:
+ str = getUnKnow();
+ break;
+ case 1:
+ str = getMale();
+ break;
+ case 2:
+ str = getFemale();
+ break;
+ default :
+ str = getUnKnow();
+ break;
+ }
+ return str;
+ }
+
+ public String getUnLimited() {
+ return bundle.getString("UNLIMITED");
+ }
+
+ public String getUnidentified() {
+ return bundle.getString("UNIDENTIFIED");
+ }
+
+ public String getHaveBeard() {
+ return bundle.getString("HAVE_BEARD");
+ }
+
+ public String getNoBeard() {
+ return bundle.getString("NO_BEARD");
+ }
+
+ public String getBeardState(int beard) {
+ String str = "";
+ switch (beard) {
+ case 0:
+ str = getUnKnow();
+ break;
+ case 1:
+ str = getUnidentified();
+ break;
+ case 2:
+ str = getNoBeard();
+ break;
+ case 3:
+ str = getHaveBeard();
+ break;
+ default:
+ str = getUnKnow();
+ break;
+ }
+ return str;
+ }
+
+ public String getOpenMouth() {
+ return bundle.getString("OPEN_MOUTH");
+ }
+
+ public String getCloseMouth() {
+ return bundle.getString("CLOSE_MOUTH");
+ }
+
+ public String getMouthState(int mouth) {
+ String str = "";
+ switch (mouth) {
+ case 0:
+ str = getUnKnow();
+ break;
+ case 1:
+ str = getUnidentified();
+ break;
+ case 2:
+ str = getCloseMouth();
+ break;
+ case 3:
+ str = getOpenMouth();
+ break;
+ default:
+ str = getUnKnow();
+ break;
+ }
+ return str;
+ }
+
+ public String getYellowColor() {
+ return bundle.getString("YELLOW_COLOR");
+ }
+
+ public String getBlackColor() {
+ return bundle.getString("BLACK_COLOR");
+ }
+
+ public String getWhiteColor() {
+ return bundle.getString("WHITE_COLOR");
+ }
+
+ public String getColor(int color) {
+ String str = "";
+ switch (color) {
+ case 0:
+ str = getUnKnow();
+ break;
+ case 1:
+ str = getUnidentified();
+ break;
+ case 2:
+ str = getYellowColor();
+ break;
+ case 3:
+ str = getBlackColor();
+ break;
+ case 4:
+ str = getWhiteColor();
+ break;
+ default:
+ str = getUnKnow();
+ break;
+ }
+ return str;
+ }
+
+ public String getOpenEye() {
+ return bundle.getString("OPEN_EYE");
+ }
+
+ public String getCloseEye() {
+ return bundle.getString("CLOSE_EYE");
+ }
+
+ public String getEyeState(int eye) {
+ String str = getUnidentified();
+ switch (eye) {
+ case 0:
+ str = getUnKnow();
+ break;
+ case 1:
+ str = getUnidentified();
+ break;
+ case 2:
+ str = getCloseEye();
+ break;
+ case 3:
+ str = getOpenEye();
+ break;
+ default:
+ str = getUnKnow();
+ break;
+ }
+ return str;
+ }
+
+ public String getSmile() {
+ return bundle.getString("SMILE");
+ }
+
+ public String getAnger() {
+ return bundle.getString("ANGER");
+ }
+
+ public String getSadness() {
+ return bundle.getString("SADNESS");
+ }
+
+ public String getDisgust() {
+ return bundle.getString("DISGUST");
+ }
+
+ public String getFear() {
+ return bundle.getString("FEAR");
+ }
+
+ public String getSurprise() {
+ return bundle.getString("SURPRISE");
+ }
+
+ public String getNeutral() {
+ return bundle.getString("NEUTRAL");
+ }
+
+ public String getLaugh() {
+ return bundle.getString("LAUGH");
+ }
+
+ public String getFaceFeature(int type) {
+ String str = "";
+ switch (type) {
+ case 0:
+ str = getUnKnow();
+ break;
+ case 1:
+ str = getWearGlasses();
+ break;
+ case 2:
+ str = getSmile();
+ break;
+ case 3:
+ str = getAnger();
+ break;
+ case 4:
+ str = getSadness();
+ break;
+ case 5:
+ str = getDisgust();
+ break;
+ case 6:
+ str = getFear();
+ break;
+ case 7:
+ str = getSurprise();
+ break;
+ case 8:
+ str = getNeutral();
+ break;
+ case 9:
+ str = getLaugh();
+ break;
+ default:
+ str = getUnKnow();
+ break;
+ }
+ return str;
+ }
+
+ public String getWearMask() {
+ return bundle.getString("WEAR_MASK");
+ }
+
+ public String geNoMask() {
+ return bundle.getString("NO_MASK");
+ }
+
+ public String getMaskState(int type) {
+ String maskStateStr = "";
+ switch (type) {
+ case 0:
+ maskStateStr = getUnKnow();
+ break;
+ case 1:
+ maskStateStr = getUnidentified();
+ break;
+ case 2:
+ maskStateStr = geNoMask();
+ break;
+ case 3:
+ maskStateStr = getWearMask();
+ break;
+ default:
+ maskStateStr = getUnKnow();
+ break;
+ }
+ return maskStateStr;
+ }
+
+ public String getWearGlasses() {
+ return bundle.getString("WEAR_GLASSES");
+ }
+
+ public String getNoGlasses() {
+ return bundle.getString("NO_GLASSES");
+ }
+
+ public String getGlasses(int byGlasses) {
+ String glassesStr = "";
+ switch (byGlasses) {
+ case 0:
+ glassesStr = getUnKnow();
+ break;
+ case 1:
+ glassesStr = getNoGlasses();
+ break;
+ case 2:
+ glassesStr = getWearGlasses();
+ break;
+ default:
+ break;
+ }
+ return glassesStr;
+ }
+
+ public String getAdd() {
+ return bundle.getString("ADD");
+ }
+
+ public String getModify() {
+ return bundle.getString("MODIFY");
+ }
+
+ public String getSelectData() {
+ return bundle.getString("SELECT_DATA");
+ }
+
+ public String getDelete() {
+ return bundle.getString("DELETE");
+ }
+
+ public String getFresh() {
+ return bundle.getString("FRESH");
+ }
+
+ public String getAddGroup() {
+ return bundle.getString("ADD_GROUP");
+ }
+
+ public String getModifyGroup() {
+ return bundle.getString("MODIFY_GROUP");
+ }
+
+ public String getDelGroup() {
+ return bundle.getString("DEL_GROUP");
+ }
+
+ public String getDisposition() {
+ return bundle.getString("DISPOSITION");
+ }
+
+ public String getDelDisposition() {
+ return bundle.getString("DEL_DISPOSITION");
+ }
+
+ public String getSimilarityRange() {
+ return bundle.getString("SIMILARITY_RANGE");
+ }
+
+ public String getFindCondition() {
+ return bundle.getString("FIND_CONDITION");
+ }
+
+ public String getFindPerson() {
+ return bundle.getString("FIND_PERSON");
+ }
+
+ public String getAddPerson() {
+ return bundle.getString("ADD_PERSON");
+ }
+
+ public String getModifyPerson() {
+ return bundle.getString("MODIFY_PERSON");
+ }
+
+ public String getDelPerson() {
+ return bundle.getString("DEL_PERSON");
+ }
+
+ public String getPreviousPage() {
+ return bundle.getString("PREVIOUSPAGE");
+ }
+
+ public String getLastPage() {
+ return bundle.getString("LASTPAGE");
+ }
+
+ public String getSelectPicture() {
+ return bundle.getString("SELECT_PICTURE");
+ }
+
+ public String getSearchByPic() {
+ return bundle.getString("SEARCH_BY_PIC");
+ }
+
+ public String getDownloadQueryPicture() {
+ return bundle.getString("DOWNLOAD_QUERY_PICTURE");
+ }
+
+ public String getFaceLibrary() {
+ return bundle.getString("FACE_LIBRARY");
+ }
+
+ public String getChooseFacePic() {
+ return bundle.getString("CHOOSE_FACE_PIC");
+ }
+
+ public String getHistoryLibrary() {
+ return bundle.getString("HISTORY_LIBRARY");
+ }
+
+ public String getEventType() {
+ return bundle.getString("EVENT_TYPE");
+ }
+
+ public String getStranger() {
+ return bundle.getString("STRANGER");
+ }
+
+ public String getInputGroupName() {
+ return bundle.getString("PLEASE_INPUT_GROUPNAME");
+ }
+
+ public String getSelectGroup() {
+ return bundle.getString("PLEASE_SELECT_GROUP");
+ }
+
+ public String getSelectPerson() {
+ return bundle.getString("PLEASE_SELECT_PERSON");
+ }
+
+ public String getAddDispositionInfo() {
+ return bundle.getString("PLEASE_ADD_DISPOSITION_INFO");
+ }
+
+ public String getSelectDelDispositionInfo() {
+ return bundle.getString("PLEASE_SELECT_DEL_DISPOSITION_INFO");
+ }
+
+ public String getPagesNumber() {
+ return bundle.getString("PAGES_NUMBER");
+ }
+
+ public String getAutoRegister() {
+ return bundle.getString("AUTOREGISTER");
+ }
+
+ public String getAutoRegisterListen() {
+ return bundle.getString("AUTOREGISTER_LISTEN");
+ }
+
+ public String getDeviceConfig() {
+ return bundle.getString("DEVICE_CONFIG");
+ }
+
+ public String getDeviceList() {
+ return bundle.getString("DEVICE_LIST");
+ }
+
+ public String getDeviceManager() {
+ return bundle.getString("DEVICE_MANAGER");
+ }
+
+ public String getAddDevice() {
+ return bundle.getString("ADD_DEVICE");
+ }
+
+ public String getModifyDevice() {
+ return bundle.getString("MODIFY_DEVICE");
+ }
+
+ public String getDeleteDevice() {
+ return bundle.getString("DELETE_DEVICE");
+ }
+
+ public String getClearDevice() {
+ return bundle.getString("CLEAR_DEVICE");
+ }
+
+ public String getImportDevice() {
+ return bundle.getString("IMPORT_DEVICE");
+ }
+
+ public String getExportDevice() {
+ return bundle.getString("EXPORT_DEVICE");
+ }
+
+ public String getFunctionOperate() {
+ return bundle.getString("FUNCTION") + bundle.getString("OPERATE");
+ }
+
+ public String getDeviceID() {
+ return bundle.getString("DEVICE_ID");
+ }
+
+ public String getEnable() {
+ return bundle.getString("ENABLE");
+ }
+
+ public String getRegisterAddress() {
+ return bundle.getString("REGISTER_ADDRESS");
+ }
+
+ public String getRegisterPort() {
+ return bundle.getString("REGISTER_PORT");
+ }
+
+ public String getGet() {
+ return bundle.getString("GET");
+ }
+
+ public String getSet() {
+ return bundle.getString("SET");
+ }
+
+ public String getAlreadyExisted() {
+ return bundle.getString("ALREADY_EXISTED");
+ }
+
+ public String getWhetherNoToCover() {
+ return bundle.getString("ALREADY_EXISTED_WHETHER_OR_NOT_TO_COVER");
+ }
+
+ public String getFileOpened(){
+ return bundle.getString("FILE_OPEN_PLEASE_CLOSE_FILE");
+ }
+
+ public String getImportCompletion() {
+ return bundle.getString("IMPORT_COMPLETION");
+ }
+
+ public String getExportCompletion() {
+ return bundle.getString("EXPORT_COMPLETION");
+ }
+
+ public String getFileNotExist() {
+ return bundle.getString("FILE_NOT_EXIST");
+ }
+
+ public String getRecord() {
+ return bundle.getString("RECORD");
+ }
+
+ public String getInput() {
+ return bundle.getString("PLEASE_INPUT");
+ }
+
+ public String getMaximumSupport() {
+ return bundle.getString("MAX_SUPPORT_100");
+ }
+
+ public String getDeviceLogined() {
+ return bundle.getString("DEVICE_LOGIN");
+ }
+
+ public String getAttendance() {
+ return bundle.getString("ATTENDANCE");
+ }
+
+ public String getFingerPrintOperate() {
+ return bundle.getString("FINGERPRINT_OPERATE");
+ }
+
+ public String getUserOperate() {
+ return bundle.getString("USER_OPERATE");
+ }
+
+ public String getOperateByUserId() {
+ return bundle.getString("OPERATE_BY_USER_ID");
+ }
+
+ public String getOperateByFingerPrintId() {
+ return bundle.getString("OPERATE_BY_FINGERPRINT_ID");
+ }
+
+ public String getSearch() {
+ return bundle.getString("SEARCH");
+ }
+
+ public String getQueryCondition() {
+ return bundle.getString("QUERY_CONDITION");
+ }
+
+ public String getFingerPrintId() {
+ return bundle.getString("FINGERPRINT_ID");
+ }
+
+ public String getSearchFingerPrint() {
+ return bundle.getString("SEARCH_FINGERPRINT");
+ }
+
+ public String getAddFingerPrint() {
+ return bundle.getString("ADD_FINGERPRINT");
+ }
+
+ public String getDeleteFingerPrint() {
+ return bundle.getString("DELETE_FINGERPRINT");
+ }
+
+ public String getSubscribe() {
+ return bundle.getString("SUBSCRIBE");
+ }
+
+ public String getUnSubscribe() {
+ return bundle.getString("UNSUBSCRIBE");
+ }
+
+ public String getUserList() {
+ return bundle.getString("USER_LIST");
+ }
+
+ public String getNextPage() {
+ return bundle.getString("NEXT_PAGE");
+ }
+
+ public String getUserInfo() {
+ return bundle.getString("USER_INFO");
+ }
+
+ public String getDoorOpenMethod() {
+ return bundle.getString("DOOROPEN_METHOD");
+ }
+
+ public String getFingerPrint() {
+ return bundle.getString("FINGERPRINT");
+ }
+
+ public String getFingerPrintInfo() {
+ return bundle.getString("FINGERPRINT_INFO");
+ }
+
+ public String getFingerPrintData() {
+ return bundle.getString("FINGERPRINT_DATA");
+ }
+
+ public String getCard() {
+ return bundle.getString("CARD");
+ }
+
+ public String getDeleteFingerPrintPrompt() {
+ return bundle.getString("DELETE_FINGERPRINT_PROMPT");
+ }
+
+ public String getSubscribeFailed() {
+ return bundle.getString("SUBSCRIBE_FAILED");
+ }
+
+ public String getFingerPrintIdIllegal() {
+ return bundle.getString("FINGERPRINT_ID_ILLEGAL");
+ }
+
+ public String getcFingerPrintCollection() {
+ return bundle.getString("FINGERPRINT_COLLECTION");
+ }
+
+ public String getStartCollection() {
+ return bundle.getString("START_COLLECTION");
+ }
+
+ public String getStopCollection() {
+ return bundle.getString("STOP_COLLECTION");
+ }
+
+ public String getInCollection() {
+ return bundle.getString("IN_THE_COLLECTION");
+ }
+
+ public String getcCompleteCollection() {
+ return bundle.getString("COLLECTION_COMPLETED");
+ }
+
+ public String getCollectionFailed() {
+ return bundle.getString("COLLECTION_FAILED");
+ }
+
+ public String getFingerPrintIdNotExist() {
+ return bundle.getString("FINGERPRINT_ID_NOT_EXIST");
+ }
+
+ public String getUserIdExceedLength() {
+ return bundle.getString("USER_ID_EXCEED_LENGTH");
+ }
+
+ public String getUserNameExceedLength() {
+ return bundle.getString("USER_NAME_EXCEED_LENGTH");
+ }
+
+ public String getCardNoExceedLength() {
+ return bundle.getString("CARD_NO_EXCEED_LENGTH");
+ }
+
+ public String getCardNameExceedLength() {
+ return bundle.getString("CARD_NAME_EXCEED_LENGTH");
+ }
+
+ public String getCardPasswdExceedLength() {
+ return bundle.getString("CARD_PASSWD_EXCEED_LENGTH");
+ }
+
+ public String getGate() {
+ return bundle.getString("GATE");
+ }
+
+ public String getCardOperate() {
+ return bundle.getString("CARD_OPERATE");
+ }
+
+ public String getCardInfo() {
+ return bundle.getString("CARD_INFO");
+ }
+
+ public String getCardManager() {
+ return bundle.getString("CARD_MANAGER");
+ }
+
+ public String getClear() {
+ return bundle.getString("CLEAR");
+ }
+
+ public String getOpenStatus() {
+ return bundle.getString("OPEN_STATUS");
+ }
+
+ public String getOpenMethod() {
+ return bundle.getString("OPEN_METHOD");
+ }
+
+ public String getCardName() {
+ return bundle.getString("CARD_NAME");
+ }
+
+ public String getCardStatus() {
+ return bundle.getString("CARD_STATUS");
+ }
+
+ public String getCardPassword() {
+ return bundle.getString("CARD_PASSWORD");
+ }
+
+ public String getCardType() {
+ return bundle.getString("CARD_TYPE");
+ }
+
+ public String getCardNum() {
+ return bundle.getString("CARD_NUM");
+ }
+
+ public String getUseTimes() {
+ return bundle.getString("USE_TIMES");
+ }
+
+ public String getIsFirstEnter() {
+ return bundle.getString("IS_FIRST_ENTER");
+ }
+
+ public String getIsValid() {
+ return bundle.getString("IS_VALID");
+ }
+
+ public String getValidPeriod() {
+ return bundle.getString("VALID_PERIOD");
+ }
+
+ public String getValidStartTime() {
+ return bundle.getString("VALID_START_TIME");
+ }
+
+ public String getValidEndTime() {
+ return bundle.getString("VALID_END_TIME");
+ }
+
+ public String getRecordNo() {
+ return bundle.getString("RECORD_NO");
+ }
+
+ public String getFirstEnter() {
+ return bundle.getString("FIRST_ENTER");
+ }
+
+ public String getNoFirstEnter() {
+ return bundle.getString("NO_FIRST_ENTER");
+ }
+
+ public String getValid() {
+ return bundle.getString("VALID");
+ }
+
+ public String getInValid() {
+ return bundle.getString("INVALID");
+ }
+
+ public String getSelectCard() {
+ return bundle.getString("PLEASE_SELECT_CARD");
+ }
+
+ public String getInputCardNo() {
+ return bundle.getString("PLEASE_INPUT_CARDNO");
+ }
+
+ public String getInputUserId() {
+ return bundle.getString("PLEASE_INPUT_USERID");
+ }
+
+ public String getWantClearAllInfo() {
+ return bundle.getString("WANT_CLEAR_ALL_INFO");
+ }
+
+ public String getFailedAddCard() {
+ return bundle.getString("ADD_CARD_INDO_FAILED");
+ }
+
+ public String getSucceedAddCardAndPerson() {
+ return bundle.getString("ADD_CARD_INFO_AND_PERSON_PICTURE_SUCCEED");
+ }
+
+ public String getSucceedAddCardButFailedAddPerson() {
+ return bundle.getString("ADD_CARD_INFO_SUCCEED_BUT_ADD_PERSON_PICTURE_FAILED");
+ }
+
+ public String getCardExistedSucceedAddPerson() {
+ return bundle.getString("CARD_EXISTED_ADD_PERSON_PICTURE_SUCCEED");
+ }
+
+ public String getSucceedModifyCard() {
+ return bundle.getString("MODIFY_CARD_INFO_SUCCEED");
+ }
+
+ public String getFailedModifyCard() {
+ return bundle.getString("MODIFY_CARD_INFO_FAILED");
+ }
+
+ public String getSucceedModifyCardAndPerson() {
+ return bundle.getString("MODIFY_CARD_INFO_AND_PERSON_PICTURE_SUCCEED");
+ }
+
+ public String getSucceedModifyCardButFailedModifyPerson() {
+ return bundle.getString("MODIFY_CARD_INFO_SUCCEED_BUT_MODIFY_PERSON_PICTURE_FAILED");
+ }
+
+ public String[] getCardTable() {
+ return new String[] {getIndex(),
+ getCardNo(),
+ getCardName(),
+ getRecordNo(),
+ getUserId(),
+ getCardPassword(),
+ getCardStatus(),
+ getCardType(),
+ getUseTimes(),
+ getIsFirstEnter(),
+ getIsValid(),
+ getValidStartTime(),
+ getValidEndTime()};
+ }
+
+ /*
+ * 用于列表显示
+ */
+ public String getCardStatus(int status) {
+ String statusString = "";
+ switch(status) {
+ case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_UNKNOWN: // 未知
+ statusString = bundle.getString("STATE_UNKNOWN");
+ break;
+ case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_NORMAL: // 正常
+ statusString = bundle.getString("STATE_NORMAL");
+ break;
+ case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_LOSE: // 挂失
+ statusString = bundle.getString("STATE_LOSE");
+ break;
+ case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_LOGOFF: // 注销
+ statusString = bundle.getString("STATE_LOGOFF");
+ break;
+ case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_FREEZE: // 冻结
+ statusString = bundle.getString("STATE_FREEZE");
+ break;
+ case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_ARREARAGE: // 欠费
+ statusString = bundle.getString("STATE_ARREARS");
+ break;
+ case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_OVERDUE: // 逾期
+ statusString = bundle.getString("STATE_OVERDUE");
+ break;
+ case NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_PREARREARAGE: // 预欠费
+ statusString = bundle.getString("STATE_PREARREARS");
+ break;
+ default:
+ statusString = bundle.getString("STATE_UNKNOWN");
+ break;
+ }
+
+ return statusString;
+ }
+
+ /*
+ * 根据控件的索引,获取对应的卡状态的Int值, 用于添加 和 修改卡信息
+ */
+ public int getCardStatusInt(int index) {
+ int status = 0;
+ switch(index) {
+ case 1: // 未知
+ status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_UNKNOWN;
+ break;
+ case 0: // 正常
+ status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_NORMAL;
+ break;
+ case 2: // 挂失
+ status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_LOSE;
+ break;
+ case 3: // 注销
+ status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_LOGOFF;
+ break;
+ case 4: // 冻结
+ status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_FREEZE;
+ break;
+ case 5: // 欠费
+ status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_ARREARAGE;
+ break;
+ case 6: // 逾期
+ status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_OVERDUE;
+ break;
+ case 7: // 预欠费
+ status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_PREARREARAGE;
+ break;
+ default:
+ status = NET_ACCESSCTLCARD_STATE.NET_ACCESSCTLCARD_STATE_UNKNOWN;
+ break;
+ }
+
+ return status;
+ }
+
+ /*
+ * 根据字符串,获取控件对应的索引
+ */
+ public int getCardStatusChomBoxIndex(String status) {
+ int index = 0;
+
+ if(status.equals(bundle.getString("STATE_UNKNOWN"))) {
+ index = 1;
+ } else if(status.equals(bundle.getString("STATE_NORMAL"))){
+ index = 0;
+ } else if(status.equals(bundle.getString("STATE_LOSE"))) {
+ index = 2;
+ } else if(status.equals(bundle.getString("STATE_LOGOFF"))) {
+ index = 3;
+ } else if(status.equals(bundle.getString("STATE_FREEZE"))) {
+ index = 4;
+ } else if(status.equals(bundle.getString("STATE_ARREARS"))) {
+ index = 5;
+ } else if(status.equals(bundle.getString("STATE_OVERDUE"))) {
+ index = 6;
+ } else if(status.equals(bundle.getString("STATE_PREARREARS"))) {
+ index = 7;
+ }
+
+ return index;
+ }
+
+ public String[] getCardStatusList() {
+ return new String[]{
+ bundle.getString("STATE_NORMAL"),
+ bundle.getString("STATE_UNKNOWN"),
+ bundle.getString("STATE_LOSE"),
+ bundle.getString("STATE_LOGOFF"),
+ bundle.getString("STATE_FREEZE"),
+ bundle.getString("STATE_ARREARS"),
+ bundle.getString("STATE_OVERDUE"),
+ bundle.getString("STATE_PREARREARS")};
+ }
+
+ /*
+ * 用于列表显示
+ */
+ public String getCardType(int type) {
+ String cardTypeString = "";
+
+ switch(type) {
+ case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_UNKNOWN: // 未知
+ cardTypeString = bundle.getString("CARD_UNKNOW");
+ break;
+ case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_GENERAL: // 一般卡
+ cardTypeString = bundle.getString("CARD_GENERAL");
+ break;
+ case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_VIP: //
+ cardTypeString = bundle.getString("CARD_VIP");
+ break;
+ case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_GUEST: // 来宾卡
+ cardTypeString = bundle.getString("CARD_GUEST");
+ break;
+ case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_PATROL: // 巡逻卡
+ cardTypeString = bundle.getString("CARD_PATROL");
+ break;
+ case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_BLACKLIST: // 禁止名单卡
+ cardTypeString = bundle.getString("CARD_BACKLIST");
+ break;
+ case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_CORCE: // 胁迫卡
+ cardTypeString = bundle.getString("CARD_COERCE");
+ break;
+ case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_POLLING: // 巡检卡
+ cardTypeString = bundle.getString("CARD_POLLING");
+ break;
+ case NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_MOTHERCARD: // 母卡
+ cardTypeString = bundle.getString("CARD_MOTHERCARD");
+ break;
+ default:
+ cardTypeString = bundle.getString("CARD_UNKNOW");
+ break;
+ }
+
+ return cardTypeString;
+ }
+
+ /*
+ * 根据控件索引,获取对应的卡类型Int值
+ */
+ public int getCardTypeInt(int index) {
+ int type = 0;
+
+ switch(index) {
+ case 1:
+ type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_UNKNOWN;
+ break;
+ case 0:
+ type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_GENERAL;
+ break;
+ case 2:
+ type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_VIP;
+ break;
+ case 3:
+ type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_GUEST;
+ break;
+ case 4:
+ type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_PATROL;
+ break;
+ case 5:
+ type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_BLACKLIST;
+ break;
+ case 6:
+ type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_CORCE;
+ break;
+ case 7:
+ type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_POLLING;
+ break;
+ case 8:
+ type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_MOTHERCARD;
+ break;
+ default:
+ type = NET_ACCESSCTLCARD_TYPE.NET_ACCESSCTLCARD_TYPE_UNKNOWN;
+ break;
+ }
+
+ return type;
+ }
+
+ /*
+ * 根据字符串,获取控件的索引
+ */
+ public int getCardTypeChomBoxIndex(String type) {
+ int index = 0;
+
+ if(type.equals(bundle.getString("CARD_UNKNOW"))) {
+ index = 1;
+ } else if(type.equals(bundle.getString("CARD_GENERAL"))){
+ index = 0;
+ } else if(type.equals(bundle.getString("CARD_VIP"))) {
+ index = 2;
+ } else if(type.equals(bundle.getString("CARD_GUEST"))) {
+ index = 3;
+ } else if(type.equals(bundle.getString("CARD_PATROL"))) {
+ index = 4;
+ } else if(type.equals(bundle.getString("CARD_BACKLIST"))) {
+ index = 5;
+ } else if(type.equals(bundle.getString("CARD_COERCE"))) {
+ index = 6;
+ } else if(type.equals(bundle.getString("CARD_POLLING"))) {
+ index = 7;
+ } else if(type.equals(bundle.getString("CARD_MOTHERCARD"))) {
+ index = 8;
+ }
+
+ return index;
+ }
+
+ public String[] getCardTypeList() {
+ return new String[]{
+ bundle.getString("CARD_GENERAL"),
+ bundle.getString("CARD_UNKNOW"),
+ bundle.getString("CARD_VIP"),
+ bundle.getString("CARD_GUEST"),
+ bundle.getString("CARD_PATROL"),
+ bundle.getString("CARD_BACKLIST"),
+ bundle.getString("CARD_COERCE"),
+ bundle.getString("CARD_POLLING"),
+ bundle.getString("CARD_MOTHERCARD")};
+ }
+
+ public String getMaskStatus(int emMaskStatus) {
+ String MaskStatus = "";
+ switch(emMaskStatus) {
+ case EM_MASK_STATE_TYPE.EM_MASK_STATE_UNKNOWN:
+ MaskStatus = bundle.getString("EM_MASK_STATE_UNKNOWN");
+ break;
+ case EM_MASK_STATE_TYPE.EM_MASK_STATE_NODISTI:
+ MaskStatus = bundle.getString("EM_MASK_STATE_NODISTI");
+ break;
+ case EM_MASK_STATE_TYPE.EM_MASK_STATE_NOMASK:
+ MaskStatus = bundle.getString("EM_MASK_STATE_NOMASK");
+ break;
+ case EM_MASK_STATE_TYPE.EM_MASK_STATE_WEAR:
+ MaskStatus = bundle.getString("EM_MASK_STATE_WEAR");
+ break;
+ }
+ return MaskStatus;
+ }
+
+ public String getOpenMethods(int emOpenMethod) {
+ String openMethods = "";
+ switch(emOpenMethod) {
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_UNKNOWN:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_UNKNOWN");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_ONLY:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PWD_ONLY");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_FIRST:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_FIRST");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_FIRST:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PWD_FIRST");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_REMOTE:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_REMOTE");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_BUTTON:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_BUTTON");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_CARD_FINGERPRINT:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PWD_CARD_FINGERPRINT");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PWD_FINGERPRINT:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PWD_FINGERPRINT");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_FINGERPRINT:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_FINGERPRINT");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_PERSONS:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_PERSONS");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_KEY:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_KEY");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_COERCE_PWD:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_COERCE_PWD");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_QRCODE:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_QRCODE");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACE_RECOGNITION:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACE_RECOGNITION");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_AND_IDCARD:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_AND_IDCARD");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_BLUETOOTH:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_BLUETOOTH");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CUSTOM_PASSWORD:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CUSTOM_PASSWORD");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_USERID_AND_PWD:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_USERID_AND_PWD");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACE_AND_PWD:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACE_AND_PWD");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_PWD:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_PWD");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACE_OR_PWD:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACE_OR_PWD");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_PWD:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_PWD");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE_AND_PWD:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE_AND_PWD");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE_AND_PWD:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE_AND_PWD");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_PWD:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_PWD");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_PWD_AND_FACE:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_PWD_AND_FACE");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE_OR_PWD:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE_OR_PWD");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE_OR_PWD:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE_OR_PWD");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE");
+ break;
+ case NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_OR_CARD_OR_FACE:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_OR_CARD_OR_FACE");
+ break;
+ default:
+ openMethods = bundle.getString("NET_ACCESS_DOOROPEN_METHOD_UNKNOWN");
+ break;
+ }
+
+ return openMethods;
+ }
+
+ public String getShowInfo(String tag) {
+ try {
+ return bundle.getString(tag);
+ }catch(Exception e) {
+ return tag;
+ }
+ }
+
+ public String getThermalCamera() {
+ return getShowInfo("THERMAL_CAMERA");
+ }
+
+ public String[] getMeterTypeList() {
+ String[] meterTypes = {getShowInfo("SPOT"), getShowInfo("LINE"), getShowInfo("AREA")};
+
+ return meterTypes;
+ }
+
+ public String[] getTemperUnitList() {
+ return new String[]{getShowInfo("CENTIGRADE"), getShowInfo("FAHRENHEIT")};
+ }
+
+ public String[] getPeriodList() {
+ return new String[] {getShowInfo("FIVE_MINUTES"), getShowInfo("TEN_MINUTES"),
+ getShowInfo("FIFTEEN_MINUTES"), getShowInfo("THIRTY_MINUTES")};
+ }
+
+ public String[] getTemperStatusList() {
+ return new String[]{getShowInfo("IDLE"), getShowInfo("ACQUIRING")};
+ }
+
+ public String getSearchingWait() {
+ return bundle.getString("SEARCHING_WAITING");
+ }
+
+
+
+
+ ///////////// Human Number Statistic ///////////////
+
+ public String getHumanNumberStatistic() {
+ return bundle.getString("HUMAN_NUMBER_STATISTIC_TITLE");
+ }
+
+ public String getHumanNumberStatisticAttach() {
+ return bundle.getString("HUMAN_NUMBER_STATISTIC_CONTROL");
+ }
+
+ public String getHumanNumberStatisticEventTitle() {
+ return bundle.getString("HUMAN_NUMBER_STATISTIC_EVENT_TITLE");
+ }
+
+ public String getHumanNumberStatisticEventChannel() {
+ return bundle.getString("HUMAN_NUMBER_STATISTIC_EVENT_CHANNEL");
+ }
+
+ public String getHumanNumberStatisticEventTime() {
+ return bundle.getString("HUMAN_NUMBER_STATISTIC_EVENT_TIME");
+ }
+
+ public String getHumanNumberStatisticEventHourIn() {
+ return bundle.getString("HUMAN_NUMBER_STATISTIC_EVENT_HOUR_IN");
+ }
+
+ public String getHumanNumberStatisticEventHourOut() {
+ return bundle.getString("HUMAN_NUMBER_STATISTIC_EVENT_HOUR_OUT");
+ }
+
+ public String getHumanNumberStatisticEventTodayIn() {
+ return bundle.getString("HUMAN_NUMBER_STATISTIC_EVENT_TODAY_IN");
+ }
+
+ public String getHumanNumberStatisticEventTodayOut() {
+ return bundle.getString("HUMAN_NUMBER_STATISTIC_EVENT_TODAY_OUT");
+ }
+
+ public String getHumanNumberStatisticEventTotalIn() {
+ return bundle.getString("HUMAN_NUMBER_STATISTIC_EVENT_TOTAL_IN");
+ }
+
+ public String getHumanNumberStatisticEventTotalOut() {
+ return bundle.getString("HUMAN_NUMBER_STATISTIC_EVENT_TOTAL_OUT");
+ }
+
+ public String getHumanNumberStatisticEventClearOSD() {
+ return bundle.getString("HUMAN_NUMBER_STATIC_EVENT_OSD_CLEAR");
+ }
+ public String getVTOAlarmEventRoomNo(){
+ return bundle.getString("VTO_ALARM_EVENT_ROOM_NO");
+ }
+ public String getVTOAlarmEventCardNo(){
+ return bundle.getString("VTO_ALARM_EVENT_CARD_NO");
+ }
+
+ public String getVTOAlarmEventTime(){
+ return bundle.getString("VTO_ALARM_EVENT_TIME");
+ }
+ public String getVTOAlarmEventOpenMethod(){
+ return bundle.getString("VTO_ALARM_EVENT_OPEN_METHOD");
+ }
+ public String getVTOAlarmEventStatus(){
+ return bundle.getString("VTO_ALARM_EVENT_STATUS");
+ }
+ public String getVTORealLoadRoomNO(){
+ return bundle.getString("VTO_REAL_LOAD_ROOM_NO");
+ }
+ public String getVTORealLoadCardNo(){
+ return bundle.getString("VTO_REAL_LOAD_CARD_NO");
+ }
+ public String getVTORealLoadTime(){
+ return bundle.getString("VTO_REAL_LOAD_TIME");
+ }
+ public String getVTORealLoadEventInfo(){
+ return bundle.getString("VTO_REAL_LOAD_EVENT_INFO");
+ }
+ public String getVTOOperateManagerTitle(){
+ return bundle.getString("VTO_OPERATE_MANAGER_TITLE");
+ }
+ public String getInputRoomNo(){
+ return bundle.getString("INPUT_ROOM_NO");
+ }
+ public String getRoomNoExceedLength(){
+ return bundle.getString("ROOM_NO_EXCEED_LENGTH");
+ }
+ public String getVTOOperateManagerRecNo(){
+ return bundle.getString("VTO_OPERATE_MANAGER_REC_NO");
+ }
+ public String getVTOOperateManagerRoomNo(){
+ return bundle.getString("VTO_OPERATE_MANAGER_ROOM_NO");
+ }
+ public String getVTOOperateManagerCardNo(){
+ return bundle.getString("VTO_OPERATE_MANAGER_CARD_NO");
+ }
+ public String getVTOOperateManagerFingerPrintData(){
+ return bundle.getString("VTO_OPERATE_MANAGER_FINGER_PRINT_DATA");
+ }
+ public String getVTOOperateInfoTitle(){
+ return bundle.getString("VTO_OPERATE_INFO_TITLE");
+ }
+ public String getVTOOperateCollectionFingerPrintTitle(){
+ return bundle.getString("VTO_OPERATE_COLLECTION_FINGER_PRINT_TITLE");
+ }
+ public String getDoorOpen(){
+ return bundle.getString("DOOR_OPEN");
+ }
+ public String getDoorClose(){
+ return bundle.getString("DOOR_CLOSE");
+ }
+ public String getEventOperate(){
+ return bundle.getString("EVENT_OPERATE");
+ }
+ public String getStartRealLoad(){
+ return bundle.getString("START_REAL_LOAD_PIC");
+ }
+ public String getStopRealLoad(){
+ return bundle.getString("STOP_REAL_LOAD_PIC");
+ }
+ public String getAlarmEvent(){
+ return bundle.getString("ALARM_EVENT");
+ }
+ public String getRealLoadEvent(){
+ return bundle.getString("REAL_LOAD_EVENT");
+ }
+ public String getCollectionResult(){
+ return bundle.getString("COLLECTION_RESULT");
+ }
+ public String getNeedFingerPrint(){
+ return bundle.getString("NEED_FINGER_PRINT");
+ }
+ public String getFaceInfo(){
+ return bundle.getString("FACE_INFO");
+ }
+ public String getOpen(){
+ return bundle.getString("OPEN");
+ }
+
+///////////////////////////////////点阵屏设置/////////////////////////////////////、
+ public static String getmatrixScreen() {
+ // TODO Auto-generated method stub
+ return bundle.getString("MATRIX_SCREEN");
+ }
+ public String getPassingState(){
+ return bundle.getString("PASSING_STATE");
+ }
+ public String getPassingCar(){
+ return bundle.getString("PASSING_CAR");
+ }
+ public String getNoCar(){
+ return bundle.getString("NO_CAR");
+ }
+ public String getInTime(){
+ return bundle.getString("IN_TIME");
+ }
+ public String getOutTime(){
+ return bundle.getString("OUT_TIME");
+ }
+ public String getPlateNumber(){
+ return bundle.getString("PLATE_NUMBER");
+ }
+ public String getCarOwner(){
+ return bundle.getString("CAR_OWNER");
+ }
+ public String getParkingTime(){
+ return bundle.getString("PARKING_TIME");
+ }
+ public String getUserType(){
+ return bundle.getString("USER_TYPE");
+ }
+ public String getMonthlyCardUser(){
+ return bundle.getString("MONTHLY_CARD_USER");
+ }
+
+ public String getAnnualCardUser(){
+ return bundle.getString("ANNUAL_CARD_USER");
+ }
+
+ public String getLongTermUser(){
+ return bundle.getString("LONG_TERM_USER");
+ }
+
+ public String getTemporaryUser(){
+ return bundle.getString("TEMPORARY_USER");
+ }
+
+ public String getParkingCharge(){
+ return bundle.getString("PARKING_CHARGE");
+ }
+
+ public String getDaysDue(){
+ return bundle.getString("DAYS_DUE");
+ }
+
+ public String getRemainingParkingSpaces(){
+ return bundle.getString("REMAINING_PARKING_SPACES");
+ }
+
+ public String getVehiclesNotAllowedToPass(){
+ return bundle.getString("VEHICLES_NOT_ALLOWED_TO_PASS");
+ }
+
+ public String getAllowedVehiclesToPass(){
+ return bundle.getString("ALLOWED_VEHICLES_TO_PASS");
+ }
+
+ public String getSetUp(){
+ return bundle.getString("SET_UP");
+ }
+
+ public String getSetUpSuccess(){
+ return bundle.getString("SUCCESSFULLY_ISSUED");
+ }
+
+ public String getSetUpFailed(){
+ return bundle.getString("DELIVERY_FAILED");
+ }
+
+ public String getCostomUserInfo(){
+ return bundle.getString("CUSTOM_USER_CLASS");
+ }
+
+ public String getRemarksInfo(){
+ return bundle.getString("REMARKS_INFORMATION");
+ }
+
+ public String getCostomInfo(){
+ return bundle.getString("CUSTOM_INFORMATION");
+ }
+ public String getVTO() {return bundle.getString("VTO");}
+ public String getSCADA() {return bundle.getString("SCADA");}
+ public String getTrafficAllowList(){return bundle.getString("TRAFFIC_ALLOW_LIST");}
+ public String getModifyCardFaceFailed(){
+ return bundle.getString("MODIFY_CARD_FACE_FAILED");
+ }
+ public String getRemoveCardFaceFailed(){
+ return bundle.getString("REMOVE_CARD_FACE_FAILED");
+ }
+ public String getDownLoadPicture(){
+ return bundle.getString("DOWNLOAD_PICTURE");
+ }
+
+ public String getEnterPicturePath(){
+ return bundle.getString("ENTER_PICTURE_PATH");
+ }
+
+ public String getLoading(){
+ return bundle.getString("LOADING");
+ }
+
+ public String getEndSearch(){
+ return bundle.getString("END_SEARCH");
+ }
+ public String getRemoteOpenDoor(){return bundle.getString("REMOTE_OPEN_DOOR");}
+ public String getQueryCardExistFailed(){return bundle.getString("QUERY_CARD_EXIST_FAILED");}
+ public String getFindCardExist(){return bundle.getString("CARD_EXIST");}
+
+
+ public String getSCADADeviceList(){
+ return bundle.getString("SCADA_DEVICE_LIST");
+ }
+
+ public String getSCADAPointList(){
+ return bundle.getString("SCADA_POINT_LIST");
+ }
+
+ public String getSCADAAlarmAttachInfo(){
+ return bundle.getString("SCADA_ATTACH_ALARM");
+ }
+
+ public String getSCADAAttachInfo(){
+ return bundle.getString("SCADA_ATTACH_INFO");
+ }
+
+ public String getSCADAAttach(){
+ return bundle.getString("SCADA_ATTACH");
+ }
+
+ public String getListBtn(){
+ return bundle.getString("BTN_LIST");
+ }
+
+ public String getAllowlistOperation(){
+ return bundle.getString("ALLOWLIST_OPERATION");
+ }
+
+ public String getSingleUpload(){
+ return bundle.getString("SINGLE_UPLOAD");
+ }
+
+ public String getLicensePlateRun(){return bundle.getString("LICENSE_PLATE_RUN"); }
+
+ public String getFuzzyQuery(){return bundle.getString("FUZZY_QUERY"); }
+
+ public String getDeleteAll(){return bundle.getString("DELETE_ALL"); }
+
+ public String getAuthorization(){return bundle.getString("AUTHORIZATION"); }
+
+ public String getBatchUpload(){return bundle.getString("BATCH_UPLOAD"); }
+
+ public String getBrowse(){return bundle.getString("BROWSE"); }
+
+ public String getUpload(){return bundle.getString("UPLOAD"); }
+
+ public String getQueryInformation(){return bundle.getString("QUERY_INFORMATION"); }
+
+ public String getDialog(){return bundle.getString("DIALOG"); }
+
+ public String getLicensePlateNumber(){return bundle.getString("LICENSE_PLATE_NUMBER"); }
+
+ public String getModifyPanel(){return bundle.getString("MODIFY_PANEL"); }
+
+ public String getSerialNumber(){return bundle.getString("SERIAL_NUMBER"); }
+
+ public String getOpenModel(){return bundle.getString("OPEN_MODEL"); }
+
+ public String getLicensePlateLengthTooLong(){return bundle.getString("LICENSE_PLATE_LENGTH_TOO_LONG"); }
+
+ public String getNameTooLong(){return bundle.getString("NAME_TOO_LONG"); }
+
+ public String getDataNumber(){return bundle.getString("DATA_NUMBER"); }
+
+ public String getUnauthorization(){return bundle.getString("UNAUTHORIZATION"); }
+
+ public String getAddSuccess(){return bundle.getString("ADD_SUCCESS"); }
+
+ public String getAddFail(){return bundle.getString("ADD_FAIL"); }
+
+ public String getDeleteSuccess(){return bundle.getString("DELETE_SUCCESS"); }
+
+ public String getDeleteFail(){return bundle.getString("DELETE_FAIL"); }
+
+ public String getModifySuccess(){return bundle.getString("MODIFY_SUCCESS"); }
+
+ public String getModifyFail(){return bundle.getString("MODIFY_FAIL"); }
+
+ public String getUploadSuccess(){return bundle.getString("UPLOAD_SUCCESS"); }
+ public String getUploadFail(){return bundle.getString("UPLOAD_FAIL"); }
+ public String getUploading(){return bundle.getString("UPLOADING"); }
+ public String getSureUpload(){return bundle.getString("SURE_UPLOAD"); }
+
+
+ public String getEnterQueryData(){return bundle.getString("ENTER_QUERY_DATA"); }
+
+ public String getScreenNumber(){return bundle.getString("SCREEN_NUMBER");}
+ public String getContain(){return bundle.getString("TEXT_CONTENT");}
+ public String getContainType(){return bundle.getString("TEXT_CONTENT_TYPE");}
+ public String getContainColor(){return bundle.getString("TEXT_CONTENT_COLOR");}
+ public String getScrollType(){return bundle.getString("SCROLL_TYPE");}
+ public String getScrollSpeed(){return bundle.getString("SCROLL_SPEED");}
+
+ public String getGreen(){return bundle.getString("GREEN");}
+ public String getRed(){return bundle.getString("RED");}
+ public String getYellow(){return bundle.getString("YELLOW");}
+ public String getWhite(){return bundle.getString("WHITE");}
+
+ public String getOrdinary(){return bundle.getString("ORDINARY");}
+ public String getQRCode(){return bundle.getString("QR_CODE");}
+ public String getLocalTime(){return bundle.getString("LOCAL_TIME");}
+ public String getResource(){return bundle.getString("RESOURCE");}
+
+ public String getNoRolling(){return bundle.getString("NOT_ROLLING");}
+ public String getScrollLeftAndRight(){return bundle.getString("SCROLL_LEFT_AND_RIGHT");}
+ public String getScrollTopAndDown(){return bundle.getString("SCROLL_UP_AND_DOWN");}
+ public String getNumericString(){return bundle.getString("NUMBER_STRING");}
+ public String getVoiceText(){return bundle.getString("VOICE_TEXT");}
+ public String getIssued(){return bundle.getString("ISSUED");}
+ public String getPrompt(){return bundle.getString("PROMPT");}
+
+ public String getDeviceName(){return bundle.getString("DEVICE_NAME");}
+ public String getPointID(){return bundle.getString("POINT_ID");}
+ public String getPointName(){return bundle.getString("POINT_NAME");}
+ public String getIfValidSignalPoint(){return bundle.getString("IF_VALID_SIGNAL_POINT");}
+ public String getAlarmDescribe(){return bundle.getString("ALARM_DESCRIBE");}
+ public String getAlarmDelay(){return bundle.getString("ALARM_DELAY");}
+ public String getAlarmLevel(){return bundle.getString("ALARM_LEVEL");}
+ public String getAlarmTime(){return bundle.getString("ALARM_TIME");}
+ public String getAlarmType(){return bundle.getString("ALARM_TYPE");}
+ public String getCollectTime(){return bundle.getString("COLLECT_TIME");}
+
+ public String getJing(){return bundle.getString("JING");}
+
+ public String getJin(){return bundle.getString("JIN");}
+ public String getJi(){return bundle.getString("JI");}
+}
+
+
+
diff --git a/src/main/java/com/netsdk/common/SavePath.java b/src/main/java/com/netsdk/common/SavePath.java
new file mode 100644
index 0000000..beec325
--- /dev/null
+++ b/src/main/java/com/netsdk/common/SavePath.java
@@ -0,0 +1,76 @@
+package com.netsdk.common;
+
+import java.io.File;
+
+import com.netsdk.lib.ToolKits;
+
+public class SavePath {
+ private SavePath() {}
+
+ private static class SavePathHolder {
+ private static SavePath instance = new SavePath();
+ }
+
+ public static SavePath getSavePath() {
+ return SavePathHolder.instance;
+ }
+
+ String s_captureSavePath = "./Capture/" + ToolKits.getDay() + "/"; // 抓拍图片保存路径
+ String s_imageSavePath = "./Image/" + ToolKits.getDay() + "/"; // 图片保存路径
+ String s_recordFileSavePath = "./RecordFile/" + ToolKits.getDay() + "/"; // 录像保存路径
+
+ /*
+ * 设置抓图保存路径
+ */
+ public String getSaveCapturePath() {
+ File path1 = new File("./Capture/");
+ if (!path1.exists()) {
+ path1.mkdir();
+ }
+
+ File path2 = new File(s_captureSavePath);
+ if (!path2.exists()) {
+ path2.mkdir();
+ }
+
+ String strFileName = path2.getAbsolutePath() + "/" + ToolKits.getDate() + ".jpg";
+
+ return strFileName;
+ }
+
+ /*
+ * 设置智能交通图片保存路径
+ */
+ public String getSaveTrafficImagePath() {
+ File path1 = new File("./Image/");
+ if (!path1.exists()) {
+ path1.mkdir();
+ }
+
+ File path = new File(s_imageSavePath);
+ if (!path.exists()) {
+ path.mkdir();
+ }
+
+ return s_imageSavePath;
+ }
+
+
+ /*
+ * 设置录像保存路径
+ */
+ public String getSaveRecordFilePath() {
+ File path1 = new File("./RecordFile/");
+ if (!path1.exists()) {
+ path1.mkdir();
+ }
+
+ File path2 = new File(s_recordFileSavePath);
+ if (!path2.exists()) {
+ path2.mkdir();
+ }
+ String SavedFileName = s_recordFileSavePath + ToolKits.getDate() + ".dav"; // 默认保存路径
+ return SavedFileName;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/common/SwitchLanguage.java b/src/main/java/com/netsdk/common/SwitchLanguage.java
new file mode 100644
index 0000000..4bbebd7
--- /dev/null
+++ b/src/main/java/com/netsdk/common/SwitchLanguage.java
@@ -0,0 +1,105 @@
+package com.netsdk.common;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.Frame;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.border.EmptyBorder;
+
+import com.netsdk.common.Res.LanguageType;
+
+/**
+ * 选择语言界面Demo
+ */
+public class SwitchLanguage extends JFrame{
+ private static final long serialVersionUID = 1L;
+
+ public SwitchLanguage() {
+ setTitle("请选择语言/Please Select Language");
+ setLayout(new BorderLayout());
+ pack();
+ setSize(350, 200);
+ setResizable(false);
+ setLocationRelativeTo(null);
+
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ add(new SwitchLanguagePanel(this), BorderLayout.CENTER);
+
+ this.addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowClosing(WindowEvent e) {
+ dispose();
+ System.exit(0);
+ }
+ });
+ }
+
+ /*
+ * 切换语言面板
+ */
+ public class SwitchLanguagePanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public SwitchLanguagePanel(final Frame frame) {
+ setLayout(new FlowLayout());
+ setBorder(new EmptyBorder(50, 0, 0, 0));
+
+ String[] CnEn = {"简体中文", "English"};
+ jComboBox = new JComboBox(CnEn);
+
+ nextButton = new JButton("下一步");
+
+ add(jComboBox);
+ add(nextButton);
+
+ jComboBox.addItemListener(new ItemListener() {
+ @Override
+ public void itemStateChanged(ItemEvent arg0) {
+ LanguageType type = jComboBox.getSelectedIndex() == 0 ? LanguageType.Chinese : LanguageType.English;
+ Res.string().switchLanguage(type);
+
+ if(jComboBox.getSelectedIndex() == 0) {
+ nextButton.setText("下一步");
+ } else {
+ nextButton.setText("next");
+ }
+ }
+ });
+
+ nextButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.dispose();
+ FunctionList functiondemo = new FunctionList();
+ functiondemo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+
+ private JComboBox jComboBox;
+ private JButton nextButton;
+ }
+}
+
+
diff --git a/src/main/java/com/netsdk/common/WindowCloseListener.java b/src/main/java/com/netsdk/common/WindowCloseListener.java
new file mode 100644
index 0000000..6300781
--- /dev/null
+++ b/src/main/java/com/netsdk/common/WindowCloseListener.java
@@ -0,0 +1,5 @@
+package com.netsdk.common;
+
+public interface WindowCloseListener {
+ void windowClosing();
+}
diff --git a/src/main/java/com/netsdk/demo/BaseDemo.java b/src/main/java/com/netsdk/demo/BaseDemo.java
new file mode 100644
index 0000000..6524563
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/BaseDemo.java
@@ -0,0 +1,116 @@
+package com.netsdk.demo;
+
+import com.netsdk.demo.util.CaseMenu;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.callback.impl.DefaultDisconnectCallback;
+import com.netsdk.lib.callback.impl.DefaultHaveReconnectCallBack;
+import com.netsdk.module.BaseModule;
+import com.netsdk.module.entity.DeviceInfo;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 基础demo,包括一些基础接口如初始化,登录,登出
+ * @date 2020/10/21
+ */
+public class BaseDemo {
+ private NetSDKLib netSdkApi = NetSDKLib.NETSDK_INSTANCE;
+ /** 二次封装模块,包含一些基础接口 */
+ private BaseModule baseModule;
+
+ private long loginHandler;
+ private long attachHandler;
+ private CaseMenu caseMenu;
+
+ public BaseDemo() {
+ baseModule = new BaseModule(netSdkApi);
+ caseMenu = new CaseMenu();
+ }
+
+ public void addItem(CaseMenu.Item item) {
+ caseMenu.addItem(item);
+ }
+
+ public void run() {
+ caseMenu.run();
+ }
+
+ /**
+ * sdk初始化
+ *
+ * @return
+ */
+ public boolean init() {
+ return baseModule.init(
+ DefaultDisconnectCallback.getINSTANCE(), DefaultHaveReconnectCallBack.getINSTANCE(), true);
+ }
+
+ /** 释放sdk资源 */
+ public void clean() {
+ baseModule.clean();
+ }
+
+ /**
+ * 登录设备
+ *
+ * @param ip 设备ip
+ * @param port 设备端口
+ * @param username 用户名
+ * @param password 密码
+ * @return
+ */
+ public boolean login(String ip, int port, String username, String password) {
+ DeviceInfo info = baseModule.login(ip, port, username, password);
+ loginHandler = info.getLoginHandler();
+ return loginHandler != 0;
+ }
+
+ /**
+ * 登出
+ *
+ * @return
+ */
+ public boolean logout() {
+ return baseModule.logout(loginHandler);
+ }
+
+ public NetSDKLib getNetSdkApi() {
+ return netSdkApi;
+ }
+
+ public void setNetSdkApi(NetSDKLib netSdkApi) {
+ this.netSdkApi = netSdkApi;
+ }
+
+ public BaseModule getBaseModule() {
+ return baseModule;
+ }
+
+ public void setBaseModule(BaseModule baseModule) {
+ this.baseModule = baseModule;
+ }
+
+ public long getLoginHandler() {
+ return loginHandler;
+ }
+
+ public void setLoginHandler(long loginHandler) {
+ this.loginHandler = loginHandler;
+ }
+
+ public long getAttachHandler() {
+ return attachHandler;
+ }
+
+ public void setAttachHandler(long attachHandler) {
+ this.attachHandler = attachHandler;
+ }
+
+ public CaseMenu getCaseMenu() {
+ return caseMenu;
+ }
+
+ public void setCaseMenu(CaseMenu caseMenu) {
+ this.caseMenu = caseMenu;
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/DeviceLogDemo.java b/src/main/java/com/netsdk/demo/DeviceLogDemo.java
new file mode 100644
index 0000000..b841656
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/DeviceLogDemo.java
@@ -0,0 +1,133 @@
+package com.netsdk.demo;
+
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.DeviceLogModule;
+import com.netsdk.demo.module.GateModule;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.structure.NET_TIME;
+import com.sun.jna.Pointer;
+
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+
+public class DeviceLogDemo {
+ // 设备断线通知回调
+ private static DisConnect disConnect = new DisConnect();
+
+ // 网络连接恢复
+ private static HaveReConnect haveReConnect = new HaveReConnect();
+
+ // 订阅句柄
+ public static NetSDKLib.LLong m_hAttachHandle = new NetSDKLib.LLong(0);
+
+ private AnalyzerDataCB analyzerCallback = new AnalyzerDataCB();
+
+ public static void main(String[] args) {
+ //初始化
+ LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化
+ //登录
+ login();
+ NET_TIME startTime = new NET_TIME(2023,10,7,0,0,0);
+ NET_TIME endTime = new NET_TIME(2023,10,8,0,0,0);
+ //查询系统日志
+ getAllSystemLog(startTime,endTime);
+ //登出
+ logout();
+ }
+
+
+ /**
+ * 获取开门记录
+ * @param startTime
+ * @param endTime
+ * @return
+ */
+ public static boolean getAllSystemLog(NET_TIME startTime,NET_TIME endTime){
+ DeviceLogModule.getSystemLog(startTime,endTime);
+ return true;
+ }
+
+ private static class DisConnect implements NetSDKLib.fDisConnect {
+ public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+ // 断线提示
+ System.out.println(Res.string().getGate() + " : " + Res.string().getDisConnectReconnecting());
+ }
+ }
+
+ // 网络连接恢复,设备重连成功回调
+ // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数
+ private static class HaveReConnect implements NetSDKLib.fHaveReConnect {
+ public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+
+ // 重连提示
+ System.out.println(Res.string().getGate() + " : " + Res.string().getOnline());
+ }
+ }
+
+ //消息订阅
+ private class AnalyzerDataCB implements NetSDKLib.fAnalyzerDataCallBack {
+ private BufferedImage gateBufferedImage = null;
+
+ public int invoke(NetSDKLib.LLong lAnalyzerHandle, int dwAlarmType,
+ Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize,
+ Pointer dwUser, int nSequence, Pointer reserved)
+ {
+ if (lAnalyzerHandle.longValue() == 0 || pAlarmInfo == null) {
+ return -1;
+ }
+
+ File path = new File("./GateSnapPicture/");
+ if (!path.exists()) {
+ path.mkdir();
+ }
+
+ ///< 门禁事件
+ if(dwAlarmType == NetSDKLib.EVENT_IVS_ACCESS_CTL) {
+ NetSDKLib.DEV_EVENT_ACCESS_CTL_INFO msg = new NetSDKLib.DEV_EVENT_ACCESS_CTL_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ // 保存图片,获取图片缓存
+ String snapPicPath = path + "\\" + System.currentTimeMillis() + "GateSnapPicture.jpg"; // 保存图片地址
+ byte[] buffer = pBuffer.getByteArray(0, dwBufSize);
+ ByteArrayInputStream byteArrInputGlobal = new ByteArrayInputStream(buffer);
+
+ try {
+ gateBufferedImage = ImageIO.read(byteArrInputGlobal);
+ if(gateBufferedImage != null) {
+ ImageIO.write(gateBufferedImage, "jpg", new File(snapPicPath));
+ }
+ } catch (IOException e2) {
+ e2.printStackTrace();
+ }
+ // 图片以及门禁信息界面显示
+ }
+ return 0;
+ }
+ }
+
+ // 登录
+ public static boolean login() {
+ if(LoginModule.login("192.168.69.142",
+ Integer.parseInt("37777"),
+ "admin",
+ "yzx123456")) {
+ // 登陆成功,将通道添加到控件
+ } else {
+ return false;
+ }
+ return true;
+ }
+
+ // 登出
+ public static void logout() {
+ LoginModule.logout();
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/GateDemo.java b/src/main/java/com/netsdk/demo/GateDemo.java
new file mode 100644
index 0000000..53340fc
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/GateDemo.java
@@ -0,0 +1,185 @@
+package com.netsdk.demo;
+
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.GateModule;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+import com.sun.jna.Pointer;
+
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+
+public class GateDemo {
+
+ // 设备断线通知回调
+ private static DisConnect disConnect = new DisConnect();
+
+ // 网络连接恢复
+ private static HaveReConnect haveReConnect = new HaveReConnect();
+
+ // 订阅句柄
+ public static NetSDKLib.LLong m_hAttachHandle = new NetSDKLib.LLong(0);
+
+ private AnalyzerDataCB analyzerCallback = new AnalyzerDataCB();
+
+ public static void main(String[] args) {
+ //初始化
+ LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化
+ //登录
+ login();
+ //查询开门记录
+ NetSDKLib.NET_TIME time = new NetSDKLib.NET_TIME();
+ time.dwYear = 2023;
+ time.dwMonth = 9;
+ time.dwDay = 28;
+ getAllRecord(time);
+ //登出
+ logout();
+ }
+
+
+ /**
+ * 获取开门记录
+ * @param time
+ * @return
+ */
+ public static boolean getAllRecord(NetSDKLib.NET_TIME time){
+ int count = 0;
+ int index = 0;
+ int nFindCount = 10;
+
+ // 日期: 为空,查询所有开门信息
+ // 获取查询句柄
+ if(!GateModule.findRecord(time)) {
+ return false;
+ }
+
+ // 查询具体信息
+ while(true) {
+ NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC[] pstRecord = GateModule.findNextRecord(nFindCount);
+ if(pstRecord == null) {
+ break;
+ }
+
+ for(int i = 0; i < pstRecord.length; i++) {
+ index = i + count * nFindCount;
+
+ try {
+ StringBuilder sb = new StringBuilder();
+ sb.append("位置序号:").append(index).append("\n");// 位置序号
+ sb.append("时间序号:").append(pstRecord[i].stuTime.dwYear)
+ .append(String.format("%02d", pstRecord[i].stuTime.dwMonth))//占位
+ .append(String.format("%02d", pstRecord[i].stuTime.dwDay)).append("\n");//占位
+ sb.append("记录编号:").append(pstRecord[i].nRecNo).append("\n"); // 序号
+ sb.append("卡号:").append(new String(pstRecord[i].szCardNo).trim()).append("\n"); // 卡号
+ sb.append("卡名:").append(new String(pstRecord[i].szCardName, "GBK").trim()).append("\n"); // 卡名 -> employeeName
+ sb.append("用户ID:").append(new String(pstRecord[i].szUserID).trim()).append("\n"); // 用户ID -> employeeNo
+ sb.append("卡密:").append(new String(pstRecord[i].szPwd).trim()).append("\n"); // 卡密码
+ sb.append("刷卡结果:").append(pstRecord[i].bStatus).append("\n"); // 刷卡结果
+ sb.append("开门方式:").append(Res.string().getOpenMethods(pstRecord[i].emMethod)).append("\n"); // 开门方式
+ sb.append("开门方式:").append(pstRecord[i].emMethod).append("\n"); // 开门方式
+ pstRecord[i].stuTime.dwHour = pstRecord[i].stuTime.dwHour + 8;
+ sb.append("刷卡时间:").append(pstRecord[i].stuTime.toStringTimeEx()).append("\n"); // 刷卡时间
+ sb.append("人脸图片地址:").append(new String(pstRecord[i].szSnapFtpUrl).trim()).append("\n"); //人脸图片地址
+ System.out.println("sb = " + sb);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ }
+
+ if (pstRecord.length < nFindCount) {
+ break;
+ } else {
+ count ++;
+ }
+
+ }
+
+ // 关闭查询接口
+ GateModule.findRecordClose();
+ return true;
+ }
+
+ private static class DisConnect implements NetSDKLib.fDisConnect {
+ public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+ // 断线提示
+ System.out.println(Res.string().getGate() + " : " + Res.string().getDisConnectReconnecting());
+ }
+ }
+
+ // 网络连接恢复,设备重连成功回调
+ // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数
+ private static class HaveReConnect implements NetSDKLib.fHaveReConnect {
+ public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+
+ // 重连提示
+ System.out.println(Res.string().getGate() + " : " + Res.string().getOnline());
+ }
+ }
+
+ //消息订阅
+ private class AnalyzerDataCB implements NetSDKLib.fAnalyzerDataCallBack {
+ private BufferedImage gateBufferedImage = null;
+
+ public int invoke(NetSDKLib.LLong lAnalyzerHandle, int dwAlarmType,
+ Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize,
+ Pointer dwUser, int nSequence, Pointer reserved)
+ {
+ if (lAnalyzerHandle.longValue() == 0 || pAlarmInfo == null) {
+ return -1;
+ }
+
+ File path = new File("./GateSnapPicture/");
+ if (!path.exists()) {
+ path.mkdir();
+ }
+
+ ///< 门禁事件
+ if(dwAlarmType == NetSDKLib.EVENT_IVS_ACCESS_CTL) {
+ NetSDKLib.DEV_EVENT_ACCESS_CTL_INFO msg = new NetSDKLib.DEV_EVENT_ACCESS_CTL_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ // 保存图片,获取图片缓存
+ String snapPicPath = path + "\\" + System.currentTimeMillis() + "GateSnapPicture.jpg"; // 保存图片地址
+ byte[] buffer = pBuffer.getByteArray(0, dwBufSize);
+ ByteArrayInputStream byteArrInputGlobal = new ByteArrayInputStream(buffer);
+
+ try {
+ gateBufferedImage = ImageIO.read(byteArrInputGlobal);
+ if(gateBufferedImage != null) {
+ ImageIO.write(gateBufferedImage, "jpg", new File(snapPicPath));
+ }
+ } catch (IOException e2) {
+ e2.printStackTrace();
+ }
+ // 图片以及门禁信息界面显示
+ }
+ return 0;
+ }
+ }
+
+ // 登录
+ public static boolean login() {
+ if(LoginModule.login("192.168.69.142",
+ Integer.parseInt("37777"),
+ "admin",
+ "yzx123456")) {
+ // 登陆成功,将通道添加到控件
+ } else {
+ return false;
+ }
+ return true;
+ }
+
+ // 登出
+ public static void logout() {
+ LoginModule.logout();
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/NetSDKDemo.java b/src/main/java/com/netsdk/demo/NetSDKDemo.java
new file mode 100644
index 0000000..07c6dd4
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/NetSDKDemo.java
@@ -0,0 +1,27 @@
+package com.netsdk.demo;
+
+import com.netsdk.lib.callback.impl.DefaultDisconnectCallback;
+import com.netsdk.lib.callback.impl.DefaultHaveReconnectCallBack;
+import com.netsdk.lib.enumeration.ENUMERROR;
+import com.netsdk.module.BaseModule;
+import com.netsdk.module.entity.DeviceInfo;
+
+public class NetSDKDemo {
+
+ public static void main(String[] args) {
+ BaseModule baseModule = new BaseModule();
+ baseModule.init(
+ DefaultDisconnectCallback.getINSTANCE(), DefaultHaveReconnectCallBack.getINSTANCE(), true);
+ DeviceInfo info = baseModule.login("192.168.69.142", 37777, "admin", "yzx123456");
+ if (info.getLoginHandler() != 0L) {
+ System.out.println("login success.");
+ // 登出
+ if (baseModule.logout(info.getLoginHandler())) {
+ System.out.println("logout success.");
+ } else {
+ System.out.println("logout failed.error is " + ENUMERROR.getErrorMessage());
+ }
+ }
+ baseModule.clean();
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/RealPlayByDataTypeDemo.java b/src/main/java/com/netsdk/demo/RealPlayByDataTypeDemo.java
new file mode 100644
index 0000000..4ea42ef
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/RealPlayByDataTypeDemo.java
@@ -0,0 +1,143 @@
+package com.netsdk.demo;
+
+import com.netsdk.demo.BaseDemo;
+import com.netsdk.demo.callback.RealPlayByDataTypeCallback;
+import com.netsdk.demo.util.CaseMenu;
+import com.netsdk.lib.callback.impl.DefaultRealPlayCallback;
+import com.netsdk.lib.enumeration.EM_AUDIO_DATA_TYPE;
+import com.netsdk.lib.enumeration.EM_REAL_DATA_TYPE;
+import com.netsdk.lib.enumeration.ENUMERROR;
+import com.netsdk.module.PlayModule;
+
+import java.io.File;
+import java.text.SimpleDateFormat;
+import java.util.Scanner;
+import java.util.UUID;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 转码流demo
+ * @date 2021/3/2
+ */
+public class RealPlayByDataTypeDemo extends BaseDemo {
+ private final PlayModule playModule;
+ private long realPlay;
+
+ /**
+ * 生成一个随机文件名称
+ *
+ * @param postfix
+ * @return
+ */
+ private String createFileName(String postfix) {
+ /*String absolutePath = this.getClass().getClassLoader().getResource("").getPath();
+ File file = new File(absolutePath);
+ if (!file.exists()) {
+ file.mkdirs();
+ }*/
+ String uuid = UUID.randomUUID().toString().substring(0, 4).replace(".", "").replace("-", "");
+ SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String date = simpleDate.format(new java.util.Date()).replace(" ", "_").replace(":", "-");
+ /*if (!(absolutePath.endsWith("/") || absolutePath.endsWith("\\"))) {
+ absolutePath += "/";
+ }*/
+ return uuid + "-" + date + "." + postfix;
+ }
+
+ public RealPlayByDataTypeDemo() {
+ playModule = new PlayModule();
+ }
+
+ public void detach() {
+ if (playModule.stopRealPlayByDataType(realPlay)) {
+ realPlay = 0;
+ } else {
+ System.out.println(ENUMERROR.getErrorMessage());
+ }
+ }
+
+ public void attachDav() {
+ // demo同一时间只拉一个流,支持拉多个流
+ if (realPlay != 0) {
+ detach();
+ }
+ realPlay =
+ playModule.realPlayByDataType(
+ getLoginHandler(),
+ 0,
+ EM_REAL_DATA_TYPE.EM_REAL_DATA_TYPE_PRIVATE,
+ EM_AUDIO_DATA_TYPE.EM_AUDIO_DATA_TYPE_AAC,
+ RealPlayByDataTypeCallback.getInstance(),
+ 0,
+ null,
+ createFileName("dav"),
+ 3000);
+ }
+
+ public void attachFlv() {
+ // demo同一时间只拉一个流,支持拉多个流
+ if (realPlay != 0) {
+ detach();
+ }
+ realPlay =
+ playModule.realPlayByDataType(
+ getLoginHandler(),
+ 0,
+ EM_REAL_DATA_TYPE.EM_REAL_DATA_TYPE_FLV_STREAM,
+ EM_AUDIO_DATA_TYPE.EM_AUDIO_DATA_TYPE_AAC,
+ RealPlayByDataTypeCallback.getInstance(),
+ 0,
+ null,
+ createFileName("flv"),
+ 3000);
+ }
+
+ public static void main(String[] args) {
+ String ip = "172.23.12.231";
+ int port = 37777;
+ String username = "admin";
+ String password = "admin123";
+ Scanner scanner = new Scanner(System.in);
+ String defaultConfig = "ip:%s,port:%d,username:%s,password:%s,需要修改吗?(y/n)";
+ defaultConfig = String.format(defaultConfig, ip, port, username, password);
+ System.out.println(defaultConfig);
+ String answer = "";
+ do {
+ answer = scanner.nextLine();
+ if ("y".equalsIgnoreCase(answer) || "yes".equalsIgnoreCase(answer)) {
+ System.out.println("please input ip");
+ ip = scanner.nextLine().trim();
+ System.out.println("please input port:");
+ port = Integer.parseInt(scanner.nextLine());
+ System.out.println("please input username:");
+ username = scanner.nextLine().trim();
+ System.out.println("please input password:");
+ password = scanner.nextLine().trim();
+ break;
+ } else if ("n".equalsIgnoreCase(answer) || "no".equalsIgnoreCase(answer)) {
+ break;
+ }
+ System.out.println("please input the right word.y/yes/n/no,try again.");
+ } while (!(answer.equalsIgnoreCase("y")
+ || answer.equalsIgnoreCase("yes")
+ || answer.equalsIgnoreCase("no")
+ || answer.equalsIgnoreCase("n")));
+
+ RealPlayByDataTypeDemo demo = new RealPlayByDataTypeDemo();
+ // sdk初始化
+ demo.init();
+ demo.addItem(new CaseMenu.Item(demo, "转码flv", "attachFlv"));
+ demo.addItem(new CaseMenu.Item(demo, "私有流", "attachDav"));
+ demo.addItem(new CaseMenu.Item(demo, "停止拉流", "detach"));
+ // 登录设备
+ if (demo.login(ip, port, username, password)) {
+ // 登录成功后
+ demo.run();
+ }
+ // 登出设备
+ demo.logout();
+ // 测试结束,释放sdk资源
+ demo.clean();
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/callback/RealPlayByDataTypeCallback.java b/src/main/java/com/netsdk/demo/callback/RealPlayByDataTypeCallback.java
new file mode 100644
index 0000000..4417f6b
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/callback/RealPlayByDataTypeCallback.java
@@ -0,0 +1,51 @@
+package com.netsdk.demo.callback;
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 数据回调函数
+ * @date 2021/3/9
+ */
+public class RealPlayByDataTypeCallback implements NetSDKLib.fRealDataCallBackEx2 {
+ private static volatile RealPlayByDataTypeCallback instance;
+
+ private RealPlayByDataTypeCallback() {}
+
+ public static RealPlayByDataTypeCallback getInstance() {
+ if (instance == null) {
+ synchronized (RealPlayByDataTypeCallback.class) {
+ if (instance == null) {
+ instance = new RealPlayByDataTypeCallback();
+ }
+ }
+ }
+ return instance;
+ }
+
+ @Override
+ public void invoke(
+ NetSDKLib.LLong lRealHandle,
+ int dwDataType,
+ Pointer pBuffer,
+ int dwBufSize,
+ NetSDKLib.LLong param,
+ Pointer dwUser) {
+ // 依据dwDataType进行码流类型判断
+ // 私有流或mp4,出来的码流均为私有流
+ if (dwDataType == 0 || dwDataType == 1003) {
+ // 私有流
+ } else {
+ // 转码码流
+ int type = dwDataType - 1000;
+ /**
+ * EM_REAL_DATA_TYPE_PRIVATE(0, "私有码流"), EM_REAL_DATA_TYPE_GBPS(1, "国标PS码流"),
+ * EM_REAL_DATA_TYPE_TS(2, "TS码流"), EM_REAL_DATA_TYPE_MP4(3, "MP4文件"),
+ * EM_REAL_DATA_TYPE_H264(4, "裸H264码流"), EM_REAL_DATA_TYPE_FLV_STREAM(5, "流式FLV");
+ */
+ }
+ System.out.println("dwDataType: " + dwDataType);
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/frame/AlarmListen.java b/src/main/java/com/netsdk/demo/frame/AlarmListen.java
new file mode 100644
index 0000000..bb5eaf9
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/AlarmListen.java
@@ -0,0 +1,450 @@
+package com.netsdk.demo.frame;
+
+import java.awt.*;
+import java.awt.event.*;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import javax.swing.*;
+import javax.swing.table.*;
+
+import com.sun.jna.NativeLong;
+import com.sun.jna.Pointer;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.FunctionList;
+import com.netsdk.common.LoginPanel;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.AlarmListenModule;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.ToolKits;
+
+/**
+ * Alarm Listen Demo
+ */
+class AlarmListenFrame extends JFrame{
+ private static final long serialVersionUID = 1L;
+
+ // device disconnect callback instance
+ private DisConnect disConnect = new DisConnect();
+
+ // device reconnect callback instance
+ private static HaveReConnect haveReConnect = new HaveReConnect();
+
+ // alarm listen frame (this)
+ private static JFrame frame = new JFrame();
+
+ private java.awt.Component target = this;
+
+ // alarm event info list
+ Vector data = new Vector();
+
+ public AlarmListenFrame() {
+ setTitle(Res.string().getAlarmListen());
+ setLayout(new BorderLayout());
+ pack();
+ setSize(800, 530);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ LoginModule.init(disConnect, haveReConnect);
+
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ loginPanel = new LoginPanel();
+ alarmListenPanel = new AlarmListenPanel();
+ showAlarmPanel = new ShowAlarmEventPanel();
+
+ JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, loginPanel, alarmListenPanel);
+ splitPane.setDividerSize(0);
+ add(splitPane, BorderLayout.NORTH);
+ add(showAlarmPanel, BorderLayout.CENTER);
+
+ loginPanel.addLoginBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if(loginPanel.checkLoginText()) {
+ if(login()) {
+ frame = ToolKits.getFrame(e);
+ frame.setTitle(Res.string().getAlarmListen() + " : " + Res.string().getOnline());
+ }
+ }
+ }
+ });
+
+ loginPanel.addLogoutBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ frame.setTitle(Res.string().getAlarmListen());
+ logout();
+ }
+ });
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ AlarmListenModule.stopListen();
+ LoginModule.logout();
+ LoginModule.cleanup();
+ dispose();
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+
+ /////////////////function///////////////////
+ // device disconnect callback class
+ // set it's instance by call CLIENT_Init, when device disconnect sdk will call it.
+ private class DisConnect implements NetSDKLib.fDisConnect {
+ public DisConnect() { }
+
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getAlarmListen() + " : " + Res.string().getDisConnectReconnecting());
+ }
+ });
+ }
+ }
+
+ // device reconnect(success) callback class
+ // set it's instance by call CLIENT_SetAutoReconnect, when device reconnect success sdk will call it.
+ private static class HaveReConnect implements NetSDKLib.fHaveReConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getAlarmListen() + " : " + Res.string().getOnline());
+ }
+ });
+ }
+ }
+
+ public boolean login() {
+ if(LoginModule.login(loginPanel.ipTextArea.getText(),
+ Integer.parseInt(loginPanel.portTextArea.getText()),
+ loginPanel.nameTextArea.getText(),
+ new String(loginPanel.passwordTextArea.getPassword()))) {
+
+ loginPanel.setButtonEnable(true);
+ alarmListenPanel.setButtonEnable(true);
+
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ return true;
+ }
+
+ public void logout() {
+ AlarmListenModule.stopListen();
+ LoginModule.logout();
+
+ loginPanel.setButtonEnable(false);
+ alarmListenPanel.initButtonEnable();
+ showAlarmPanel.clean();
+ }
+
+ public Vector convertAlarmEventInfo(AlarmEventInfo alarmEventInfo) {
+ Vector vector = new Vector();
+
+ vector.add(String.valueOf(alarmEventInfo.id));
+ vector.add(formatDate(alarmEventInfo.date));
+ vector.add(String.valueOf(alarmEventInfo.chn));
+ String status = null;
+ if (alarmEventInfo.status == AlarmStatus.ALARM_START) {
+ status = Res.string().getStart();
+ }else {
+ status = Res.string().getStop();
+ }
+ vector.add(alarmMessageMap.get(alarmEventInfo.type) + status);
+
+ return vector;
+ }
+
+ private String formatDate(Date date) {
+ final SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ return simpleDate.format(date);
+ }
+
+ private fAlarmDataCB cbMessage = new fAlarmDataCB();
+ // alarm listen data callback
+ private class fAlarmDataCB implements NetSDKLib.fMessCallBack{
+ private final EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
+
+ @Override
+ public boolean invoke(int lCommand, LLong lLoginID,
+ Pointer pStuEvent, int dwBufLen, String strDeviceIP,
+ NativeLong nDevicePort, Pointer dwUser) {
+
+ switch (lCommand) {
+ case NetSDKLib.NET_ALARM_ALARM_EX:
+ case NetSDKLib.NET_MOTION_ALARM_EX:
+ case NetSDKLib.NET_VIDEOLOST_ALARM_EX:
+ case NetSDKLib.NET_SHELTER_ALARM_EX:
+ case NetSDKLib.NET_DISKFULL_ALARM_EX:
+ case NetSDKLib.NET_DISKERROR_ALARM_EX: {
+ byte []alarm = new byte[dwBufLen];
+ pStuEvent.read(0, alarm, 0, dwBufLen);
+ for (int i = 0; i < dwBufLen; i++) {
+ if (alarm[i] == 1) {
+ AlarmEventInfo alarmEventInfo = new AlarmEventInfo(i, lCommand, AlarmStatus.ALARM_START);
+ if (!data.contains(alarmEventInfo)) {
+ data.add(alarmEventInfo);
+ eventQueue.postEvent(new AlarmListenEvent(target, alarmEventInfo));
+ }
+ }else {
+ AlarmEventInfo alarmEventInfo = new AlarmEventInfo(i, lCommand, AlarmStatus.ALARM_STOP);
+ if (data.remove(alarmEventInfo)) {
+ eventQueue.postEvent(new AlarmListenEvent(target, alarmEventInfo));
+ }
+ }
+ }
+ break;
+ }
+ default:
+ break;
+
+ }
+
+ return true;
+ }
+
+ }
+
+ // alarm listen event
+ class AlarmListenEvent extends AWTEvent {
+ private static final long serialVersionUID = 1L;
+ public static final int EVENT_ID = AWTEvent.RESERVED_ID_MAX + 1;
+
+ private AlarmEventInfo alarmEventInfo;
+
+ public AlarmListenEvent(Object target,
+ AlarmEventInfo alarmEventInfo) {
+ super(target,EVENT_ID);
+
+ this.alarmEventInfo = alarmEventInfo;
+ ++AlarmEventInfo.index;
+ this.alarmEventInfo.id = AlarmEventInfo.index;
+ }
+
+ public AlarmEventInfo getAlarmEventInfo() {
+ return alarmEventInfo;
+ }
+ }
+
+ @Override
+ protected void processEvent( AWTEvent event) {
+ if ( event instanceof AlarmListenEvent) {
+ AlarmEventInfo alarmEventInfo = ((AlarmListenEvent)event).getAlarmEventInfo();
+ showAlarmPanel.insert(alarmEventInfo);
+ } else {
+ super.processEvent(event);
+ }
+ }
+
+ // alarm listen control panel
+ private class AlarmListenPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public AlarmListenPanel() {
+ BorderEx.set(this, Res.string().getAlarmListen(), 2);
+ setLayout(new FlowLayout());
+
+ btnStartListen = new JButton(Res.string().getStartListen());
+ btnStopListen = new JButton(Res.string().getStopListen());
+
+ btnStartListen.setPreferredSize(new Dimension(150, 20));
+ btnStopListen.setPreferredSize(new Dimension(150, 20));
+
+ add(btnStartListen);
+ add(new JLabel(" "));
+ add(btnStopListen);
+
+ initButtonEnable();
+
+ btnStartListen.addActionListener(new ActionListener(){
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if (AlarmListenModule.startListen(cbMessage)) {
+ setButtonEnable(false);
+ }else {
+ JOptionPane.showMessageDialog(null, Res.string().getAlarmListenFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ });
+
+ btnStopListen.addActionListener(new ActionListener(){
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if (AlarmListenModule.stopListen()) {
+ showAlarmPanel.clean();
+ setButtonEnable(true);
+ }else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ });
+ }
+
+ public void setButtonEnable(boolean b) {
+ btnStartListen.setEnabled(b);
+ btnStopListen.setEnabled(!b);
+ }
+
+ public void initButtonEnable() {
+ btnStartListen.setEnabled(false);
+ btnStopListen.setEnabled(false);
+ }
+
+ private JButton btnStartListen;
+ private JButton btnStopListen;
+ }
+
+ // alarm listen event show panel
+ private class ShowAlarmEventPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+ private final static int MIN_SHOW_LINES = 20;
+ private final static int MAX_SHOW_LINES = 100;
+ private int currentRowNums = 0;
+
+ public ShowAlarmEventPanel() {
+ BorderEx.set(this, Res.string().getShowAlarmEvent(), 2);
+ setLayout(new BorderLayout());
+
+ Vector columnNames = new Vector();
+ columnNames.add(Res.string().getIndex()); // index
+ columnNames.add(Res.string().getEventTime()); // event time
+ columnNames.add(Res.string().getChannel()); // channel
+ columnNames.add(Res.string().getAlarmMessage()); // alarm message
+
+ tableModel = new DefaultTableModel(null, columnNames);
+ table = new JTable(tableModel) {
+ private static final long serialVersionUID = 1L;
+
+ public boolean isCellEditable(int rowIndex, int columnIndex) {
+ return false;
+ }
+ };
+
+ tableModel.setRowCount(MIN_SHOW_LINES); // set min show lines
+
+ table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+
+ table.getColumnModel().getColumn(0).setPreferredWidth(90);
+ table.getColumnModel().getColumn(1).setPreferredWidth(200);
+ table.getColumnModel().getColumn(2).setPreferredWidth(80);
+ table.getColumnModel().getColumn(3).setPreferredWidth(400);
+
+ table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+ table.setAutoscrolls(false);
+
+ table.getTableHeader().setReorderingAllowed(false);
+// table.getTableHeader().setResizingAllowed(false);
+
+ JScrollPane scrollPane = new JScrollPane(table);
+ scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+ scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+ add(scrollPane, BorderLayout.CENTER);
+ }
+
+ public void insert(AlarmEventInfo alarmEventInfo) {
+ tableModel.insertRow(0,convertAlarmEventInfo(alarmEventInfo));
+ if (currentRowNums < MAX_SHOW_LINES) {
+ ++currentRowNums;
+ }
+
+ if (currentRowNums <= MIN_SHOW_LINES) {
+ tableModel.setRowCount(MIN_SHOW_LINES);
+ }else if (currentRowNums == MAX_SHOW_LINES) {
+ tableModel.setRowCount(MAX_SHOW_LINES);
+ }
+
+ table.updateUI();
+ }
+
+ public void clean() {
+ currentRowNums = 0;
+ data.clear();
+ AlarmEventInfo.index=0;
+ tableModel.setRowCount(0);
+ tableModel.setRowCount(MIN_SHOW_LINES);
+ table.updateUI();
+ }
+
+ private JTable table = null;
+ private DefaultTableModel tableModel = null;
+ }
+
+ private static HashMap alarmMessageMap = new HashMap() {
+
+ private static final long serialVersionUID = 1L;
+
+ {
+ put(NetSDKLib.NET_ALARM_ALARM_EX, Res.string().getExternalAlarm());
+ put(NetSDKLib.NET_MOTION_ALARM_EX, Res.string().getMotionAlarm());
+ put(NetSDKLib.NET_VIDEOLOST_ALARM_EX, Res.string().getVideoLostAlarm());
+ put(NetSDKLib.NET_SHELTER_ALARM_EX, Res.string().getShelterAlarm());
+ put(NetSDKLib.NET_DISKFULL_ALARM_EX, Res.string().getDiskFullAlarm());
+ put(NetSDKLib.NET_DISKERROR_ALARM_EX, Res.string().getDiskErrorAlarm());
+ }
+ };
+
+ private LoginPanel loginPanel;
+ private AlarmListenPanel alarmListenPanel;
+ private ShowAlarmEventPanel showAlarmPanel;
+
+ enum AlarmStatus {
+ ALARM_START, ALARM_STOP
+ }
+
+ // struct of alarm event
+ static class AlarmEventInfo {
+ public static long index = 0;
+ public long id;
+ public int chn;
+ public int type;
+ public Date date;
+ public AlarmStatus status;
+
+ public AlarmEventInfo(int chn, int type, AlarmStatus status) {
+ this.chn = chn;
+ this.type = type;
+ this.status = status;
+ this.date = new Date();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ AlarmEventInfo showInfo = (AlarmEventInfo) o;
+ return chn == showInfo.chn && type == showInfo.type;
+ }
+ }
+
+}
+
+public class AlarmListen {
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ AlarmListenFrame demo = new AlarmListenFrame();
+ demo.setVisible(true);
+ }
+ });
+ }
+};
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/demo/frame/Attendance/AddFingerPrintDialog.java b/src/main/java/com/netsdk/demo/frame/Attendance/AddFingerPrintDialog.java
new file mode 100644
index 0000000..7c8c132
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/Attendance/AddFingerPrintDialog.java
@@ -0,0 +1,208 @@
+package com.netsdk.demo.frame.Attendance;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.concurrent.locks.ReentrantLock;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.AlarmListenModule;
+import com.netsdk.demo.module.AttendanceModule;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.ALARM_CAPTURE_FINGER_PRINT_INFO;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.NetSDKLib.fMessCallBack;
+import com.netsdk.lib.ToolKits;
+
+import com.sun.jna.NativeLong;
+import com.sun.jna.Pointer;
+
+/**
+ * 添加信息信息
+ */
+public class AddFingerPrintDialog extends JDialog{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ private static final int CHANNEL_ID = 0; // 门禁序号
+ private static final String READER_ID = "1"; // 读卡器ID
+ private static final long TIMER_DELAY = 30000; // 定时器超时时间
+
+ private String userID = null;
+ private byte []collectionData = null;
+ private Timer timer = new Timer(); // 信息采集定时器
+ private ReentrantLock lock = new ReentrantLock();
+
+ public AddFingerPrintDialog(String userId) {
+
+ setTitle(Res.string().getAddFingerPrint());
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(300, 180);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+
+ //////////采集面板 /////////////////
+ JPanel collectionPanel = new JPanel();
+ BorderEx.set(collectionPanel, Res.string().getcFingerPrintCollection(), 4);
+ collectionPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 35, 25));
+ collectionBtn = new JButton(Res.string().getStartCollection());
+ collectionBtn.setPreferredSize(new Dimension(150, 20));
+ promptLabel = new JLabel();
+ promptLabel.setPreferredSize(new Dimension(150, 20));
+ promptLabel.setHorizontalAlignment(JLabel.CENTER);
+
+ collectionPanel.add(collectionBtn);
+ collectionPanel.add(promptLabel);
+
+ //////////功能面板 /////////////////
+ JPanel functionPanel = new JPanel();
+ addBtn = new JButton(Res.string().getAdd());
+ cancelBtn = new JButton(Res.string().getCancel());
+ addBtn.setPreferredSize(new Dimension(100, 20));
+ cancelBtn.setPreferredSize(new Dimension(100, 20));
+
+ functionPanel.add(addBtn);
+ functionPanel.add(cancelBtn);
+
+ add(collectionPanel, BorderLayout.CENTER);
+ add(functionPanel, BorderLayout.SOUTH);
+
+ addBtn.setEnabled(false);
+ userID = userId;
+
+ cbMessage = new fCollectionDataCB();
+
+ collectionBtn.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ collectionFinger();
+ }
+ });
+
+ addBtn.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if (AttendanceModule.insertFingerByUserId(userID, collectionData)) {
+ JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getFailed() , Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ dispose();
+ }
+
+ });
+
+ cancelBtn.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ AlarmListenModule.stopListen();
+ timer.cancel();
+ dispose();
+ }
+ });
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ AlarmListenModule.stopListen();
+ timer.cancel();
+ dispose();
+ }
+ });
+ }
+
+ public void collectionFinger() {
+
+ if (!AlarmListenModule.startListen(cbMessage)) {
+ JOptionPane.showMessageDialog(null, Res.string().getCollectionFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ collectionData = null;
+ if (!AttendanceModule.collectionFinger(CHANNEL_ID, READER_ID)) {
+ JOptionPane.showMessageDialog(null, Res.string().getCollectionFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ promptLabel.setText(Res.string().getInCollection());
+ collectionBtn.setEnabled(false);
+ }
+ });
+
+ timer.schedule(new TimerTask() {
+ public void run() {
+ lock.lock();
+ if (collectionData == null) {
+ AlarmListenModule.stopListen();
+ promptLabel.setText(Res.string().getCollectionFailed());
+ collectionBtn.setEnabled(true);
+ }
+ lock.unlock();
+ }
+
+ }, TIMER_DELAY);
+ }
+
+ /**
+ * 信息采集监听回调
+ **/
+ private class fCollectionDataCB implements fMessCallBack{
+
+ @Override
+ public boolean invoke(int lCommand, LLong lLoginID,
+ Pointer pStuEvent, int dwBufLen, String strDeviceIP,
+ NativeLong nDevicePort, Pointer dwUser) {
+
+ if (lCommand == NetSDKLib.NET_ALARM_FINGER_PRINT) {
+ lock.lock();
+ if (collectionData == null) {
+ timer.cancel();
+ ALARM_CAPTURE_FINGER_PRINT_INFO msg = new ALARM_CAPTURE_FINGER_PRINT_INFO();
+ ToolKits.GetPointerData(pStuEvent, msg);
+ collectionData = new byte[msg.nPacketLen * msg.nPacketNum];
+ msg.szFingerPrintInfo.read(0, collectionData, 0, msg.nPacketLen * msg.nPacketNum);
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ AlarmListenModule.stopListen();
+ promptLabel.setText(Res.string().getcCompleteCollection());
+ addBtn.setEnabled(true);
+ }
+ });
+ }
+ lock.unlock();
+ }
+
+ return true;
+ }
+
+ }
+
+ private fMessCallBack cbMessage; // 信息采集回调
+ private JLabel promptLabel; // 提示信息
+ private JButton collectionBtn; // 采集按钮
+ private JButton addBtn; // 添加按钮
+ private JButton cancelBtn; // 取消按钮
+}
diff --git a/src/main/java/com/netsdk/demo/frame/Attendance/Attendance.java b/src/main/java/com/netsdk/demo/frame/Attendance/Attendance.java
new file mode 100644
index 0000000..d808b27
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/Attendance/Attendance.java
@@ -0,0 +1,166 @@
+package com.netsdk.demo.frame.Attendance;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+import javax.swing.JSplitPane;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+
+import com.sun.jna.Pointer;
+
+import com.netsdk.common.FunctionList;
+import com.netsdk.common.LoginPanel;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.AttendanceModule;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.ToolKits;
+
+/**
+ * 考勤机Demo:包含门禁事件订阅、人员操作、信息操作
+ */
+class AttendanceFrame extends JFrame{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ // 设备断线通知回调
+ private DisConnect disConnect = new DisConnect();
+
+ // 获取界面窗口
+ private static JFrame frame = new JFrame();
+
+ public AttendanceFrame(){
+ setTitle(Res.string().getAttendance());
+ setLayout(new BorderLayout());
+ pack();
+ setSize(800, 555);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体
+
+ LoginModule.init(disConnect, null); // 打开工程,初始化
+
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ loginPanel = new LoginPanel();
+ showPanel = new AttendanceShowPanel();
+ operatePanel = new AttendanceFunctionOperatePanel(showPanel);
+
+ JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, loginPanel, operatePanel);
+ splitPane.setDividerSize(0);
+ splitPane.setBorder(null);
+ add(splitPane, BorderLayout.NORTH);
+ add(showPanel, BorderLayout.CENTER);
+
+ loginPanel.addLoginBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if(loginPanel.checkLoginText()) {
+ if(login()) {
+ frame = ToolKits.getFrame(e);
+ frame.setTitle(Res.string().getAttendance() + " : " + Res.string().getOnline());
+ }
+ }
+ }
+ });
+
+ loginPanel.addLogoutBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ logout();
+ }
+ });
+ }
+ });
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ AttendanceModule.stopRealLoadPicture();
+ LoginModule.logout();
+ LoginModule.cleanup(); // 关闭工程,释放资源
+ dispose();
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+
+ // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数
+ private class DisConnect implements NetSDKLib.fDisConnect {
+ public DisConnect() { }
+
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+ // 断线提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ JOptionPane.showMessageDialog(null, Res.string().getDisConnect(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ logout();
+ }
+ });
+ }
+ }
+
+ // 登录
+ public boolean login() {
+ if(LoginModule.login(loginPanel.ipTextArea.getText(),
+ Integer.parseInt(loginPanel.portTextArea.getText()),
+ loginPanel.nameTextArea.getText(),
+ new String(loginPanel.passwordTextArea.getPassword()))) {
+
+ loginPanel.setButtonEnable(true);
+ operatePanel.setButtonEnable(true);
+
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ return true;
+ }
+
+ // 登出
+ public void logout() {
+ AttendanceModule.stopRealLoadPicture();
+ LoginModule.logout();
+
+ frame.setTitle(Res.string().getAttendance());
+ loginPanel.setButtonEnable(false);
+ operatePanel.setButtonEnable(false);
+ showPanel.clearup();
+ }
+
+ private LoginPanel loginPanel; // 登陆面板
+ private AttendanceFunctionOperatePanel operatePanel; // 操作面板
+ private AttendanceShowPanel showPanel; // 显示面板
+}
+
+public class Attendance {
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ AttendanceFrame demo = new AttendanceFrame();
+ demo.setVisible(true);
+ }
+ });
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/frame/Attendance/AttendanceFunctionOperatePanel.java b/src/main/java/com/netsdk/demo/frame/Attendance/AttendanceFunctionOperatePanel.java
new file mode 100644
index 0000000..296511b
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/Attendance/AttendanceFunctionOperatePanel.java
@@ -0,0 +1,324 @@
+package com.netsdk.demo.frame.Attendance;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+import javax.swing.SwingWorker;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.Res;
+import com.netsdk.demo.frame.Attendance.AttendanceShowPanel.UserInfoShowPanel;
+import com.netsdk.demo.module.AttendanceModule;
+import com.netsdk.demo.module.AttendanceModule.OPERATE_TYPE;
+import com.netsdk.demo.module.AttendanceModule.UserData;
+
+/**
+ * 考勤机操作面板
+ */
+public class AttendanceFunctionOperatePanel extends JPanel{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ public static boolean bLogout = false;
+ public AttendanceShowPanel showPanel; // 显示面板
+ private AttendanceFunctionOperatePanel target = this; // 为了传值
+
+ public AttendanceFunctionOperatePanel(AttendanceShowPanel showPanel) {
+
+ setLayout(new BorderLayout());
+ setPreferredSize(new Dimension(800, 120));
+
+ listener = new UserOperateActionListener();
+
+ userPanel = new FunctionOperatePanel();
+ subscribePanel = new SubscribePanel(showPanel.eventShowPanel);
+
+ JSplitPane splitPane = new JSplitPane();
+ splitPane.setDividerSize(0);
+ splitPane.setBorder(null);
+ splitPane.add(userPanel, JSplitPane.LEFT);
+ splitPane.add(subscribePanel, JSplitPane.RIGHT);
+
+ add(splitPane, BorderLayout.CENTER);
+
+ this.showPanel = showPanel;
+ this.showPanel.userShowPanel.prePageBtn.addActionListener(listener);
+ this.showPanel.userShowPanel.nextPageBtn.addActionListener(listener);
+ }
+
+ public void setButtonEnable(boolean b) {
+ bLogout=!b;
+ userPanel.setButtonEnable(b);
+ subscribePanel.setButtonEnable(b);
+ }
+
+ public void setSearchEnable(boolean b) {
+ showPanel.userShowPanel.setButtonEnable(b);
+ userPanel.searchPersonBtn.setEnabled(b);
+ }
+
+ public void insertData(UserData[] arrUserData) {
+ showPanel.userShowPanel.insertData(arrUserData);
+ }
+
+ public void insertData(UserData userData) {
+ showPanel.userShowPanel.insertData(userData);
+ }
+
+ /**
+ * 总的功能操作面板
+ */
+ public class FunctionOperatePanel extends JPanel{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ public FunctionOperatePanel() {
+// BorderEx.set(this, Res.string().getOperateByUser(), 1);
+ setLayout(new BorderLayout());
+ setPreferredSize(new Dimension(600, 60));
+
+ ////////// 查询条件 /////////////////
+ JLabel userIdLabel = new JLabel(Res.string().getUserId(), JLabel.CENTER);
+ userIdTextField = new JTextField();
+ userIdLabel.setPreferredSize(new Dimension(80, 20));
+ userIdTextField.setPreferredSize(new Dimension(110, 20));
+
+ ////////// 功能面板 /////////////////
+ // 用户功能面板
+ JPanel userFunctionPanel = new JPanel();
+ userFunctionPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
+ BorderEx.set(userFunctionPanel, Res.string().getUserOperate(), 1);
+ searchPersonBtn = new JButton(Res.string().getSearch());
+ addPersonBtn = new JButton(Res.string().getAdd());
+ modifyPersonBtn = new JButton(Res.string().getModify());
+ deletePersonBtn = new JButton(Res.string().getDelete());
+
+ searchPersonBtn.setPreferredSize(new Dimension(90, 20));
+ addPersonBtn.setPreferredSize(new Dimension(90, 20));
+ modifyPersonBtn.setPreferredSize(new Dimension(90, 20));
+ deletePersonBtn.setPreferredSize(new Dimension(90, 20));
+
+ userFunctionPanel.add(userIdLabel);
+ userFunctionPanel.add(userIdTextField);
+ userFunctionPanel.add(searchPersonBtn);
+ userFunctionPanel.add(addPersonBtn);
+ userFunctionPanel.add(modifyPersonBtn);
+ userFunctionPanel.add(deletePersonBtn);
+
+ // 信息功能面板
+ JPanel fingerPrintFunctionPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
+ BorderEx.set(fingerPrintFunctionPanel, Res.string().getFingerPrintOperate(), 1);
+ operateByUserIdBtn = new JButton(Res.string().getOperateByUserId());
+ operateByFingerPrintIdBtn = new JButton(Res.string().getOperateByFingerPrintId());
+
+ operateByUserIdBtn.setPreferredSize(new Dimension(260, 20));
+ operateByFingerPrintIdBtn.setPreferredSize(new Dimension(260, 20));
+ fingerPrintFunctionPanel.add(operateByUserIdBtn);
+ fingerPrintFunctionPanel.add(operateByFingerPrintIdBtn);
+
+ JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
+ splitPane.setDividerSize(0);
+ splitPane.setBorder(null);
+ splitPane.add(userFunctionPanel, JSplitPane.TOP);
+ splitPane.add(fingerPrintFunctionPanel, JSplitPane.BOTTOM);
+ add(splitPane, BorderLayout.CENTER);
+
+ searchPersonBtn.addActionListener(listener);
+ addPersonBtn.addActionListener(listener);
+ modifyPersonBtn.addActionListener(listener);
+ deletePersonBtn.addActionListener(listener);
+ operateByUserIdBtn.addActionListener(listener);
+ operateByFingerPrintIdBtn.addActionListener(listener);
+
+ setButtonEnable(false);
+ }
+
+ public void setButtonEnable(boolean b) {
+ searchPersonBtn.setEnabled(b);
+ addPersonBtn.setEnabled(b);
+ modifyPersonBtn.setEnabled(b);
+ deletePersonBtn.setEnabled(b);
+ operateByUserIdBtn.setEnabled(b);
+ operateByFingerPrintIdBtn.setEnabled(b);
+ }
+
+ public void searchPerson(OPERATE_TYPE type) { // flush 为 true 时 强制刷新
+ if (type == OPERATE_TYPE.SEARCH_USER && !userIdTextField.getText().isEmpty()) {
+ UserData userData = AttendanceModule.getUser(userIdTextField.getText());
+ if (userData == null) {
+ JOptionPane.showMessageDialog(null, Res.string().getFailed(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ showPanel.userShowPanel.insertData(userData);
+ }else {
+ setSearchEnable(false);
+ new SearchPersonSwingWorker(type, target).execute();
+ }
+ }
+
+ private JTextField userIdTextField;
+ public JButton searchPersonBtn;
+ private JButton addPersonBtn;
+ private JButton modifyPersonBtn;
+ private JButton deletePersonBtn;
+ private JButton operateByUserIdBtn;
+ private JButton operateByFingerPrintIdBtn;
+ }
+
+ /**
+ * 按键监听实现类
+ */
+ private class UserOperateActionListener implements ActionListener {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+
+ OPERATE_TYPE emType = getOperateType(arg0.getSource());
+ switch(emType) {
+ case SEARCH_USER:
+ case PRE_SEARCH_USER:
+ case NEXT_SEARCH_USER:
+ SwingUtilities.invokeLater(new SearchRunnable(emType));
+ break;
+ case ADD_USER:
+ new AttendanceOperateShareDialog(emType, null, "").setVisible(true);
+ break;
+ case MODIFIY_USER:
+ case DELETE_USER:
+ case FINGERPRINT_OPEARTE_BY_USERID:
+ UserData userData = showPanel.userShowPanel.GetSelectedItem();
+ if(userData == null) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectPerson(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ if (emType == OPERATE_TYPE.FINGERPRINT_OPEARTE_BY_USERID) {
+ new OperateByUserIdDialog(userData).setVisible(true);
+ }else {
+ new AttendanceOperateShareDialog(emType, userData).setVisible(true);
+ }
+
+ break;
+ case FINGERPRINT_OPEARTE_BY_ID:
+ new OperateByFingerPrintIdDialog().setVisible(true);
+ default:
+ break;
+ }
+ }
+
+ private OPERATE_TYPE getOperateType(Object btn) {
+ OPERATE_TYPE type = OPERATE_TYPE.UNKNOWN;
+
+ if (btn == userPanel.searchPersonBtn) { // 查找人员
+ type = OPERATE_TYPE.SEARCH_USER;
+ }else if (btn == showPanel.userShowPanel.prePageBtn) { // 上一页查找人员
+ type = OPERATE_TYPE.PRE_SEARCH_USER;
+ }else if (btn == showPanel.userShowPanel.nextPageBtn) { // 下一页查找人员
+ type = OPERATE_TYPE.NEXT_SEARCH_USER;
+ }else if (btn == userPanel.addPersonBtn) { // 添加人员
+ type = OPERATE_TYPE.ADD_USER;
+ }else if (btn == userPanel.modifyPersonBtn) { // 修改人员
+ type = OPERATE_TYPE.MODIFIY_USER;
+ }else if (btn == userPanel.deletePersonBtn) { // 删除人员
+ type = OPERATE_TYPE.DELETE_USER;
+ }else if (btn == userPanel.operateByUserIdBtn) { // 通过用户ID操作信息
+ type = OPERATE_TYPE.FINGERPRINT_OPEARTE_BY_USERID;
+ }else if (btn == userPanel.operateByFingerPrintIdBtn) { // 通过信息ID操作信息
+ type = OPERATE_TYPE.FINGERPRINT_OPEARTE_BY_ID;
+ }else {
+ System.err.println("Unknown Event: " + btn);
+ }
+
+ return type;
+
+ }
+ }
+
+ public class SearchRunnable implements Runnable {
+ private OPERATE_TYPE searchType;
+ public SearchRunnable(OPERATE_TYPE searchType) {
+ this.searchType = searchType;
+ }
+
+ @Override
+ public void run() {
+ userPanel.searchPerson(searchType);
+ }
+ }
+
+ /**
+ * 人员搜索工作线程(完成异步搜索)
+ */
+ public class SearchPersonSwingWorker extends SwingWorker {
+ private AttendanceFunctionOperatePanel operatePanel;
+ private int offset = 0;
+ private OPERATE_TYPE type;
+ public SearchPersonSwingWorker(OPERATE_TYPE type, AttendanceFunctionOperatePanel operatePanel) {
+ this.operatePanel = operatePanel;
+ this.type = type;
+ }
+
+ protected UserData[] doInBackground() throws Exception {
+
+ switch(type) {
+ case SEARCH_USER:
+ offset = 0;
+ break;
+ case PRE_SEARCH_USER:
+ offset = UserInfoShowPanel.QUERY_SHOW_COUNT * ((AttendanceShowPanel.userIndex-1)/UserInfoShowPanel.QUERY_SHOW_COUNT - 1);
+ break;
+ case NEXT_SEARCH_USER:
+ offset = AttendanceShowPanel.userIndex;
+ break;
+ default:
+ break;
+ }
+
+ UserData[] arrUserData = AttendanceModule.findUser(offset, UserInfoShowPanel.QUERY_SHOW_COUNT);
+
+ return arrUserData;
+ }
+
+ @Override
+ protected void done() {
+ if (bLogout) {
+ return;
+ }
+
+ try {
+
+ UserData[] arrUserData = get();
+ if (arrUserData == null) {
+ JOptionPane.showMessageDialog(null, Res.string().getFailed(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if (type == OPERATE_TYPE.SEARCH_USER ||
+ type == OPERATE_TYPE.PRE_SEARCH_USER) { // 更新userIndex
+ AttendanceShowPanel.userIndex = offset;
+ }
+ operatePanel.insertData(arrUserData);
+ } catch (Exception e) {
+// e.printStackTrace();
+ }finally {
+ operatePanel.setSearchEnable(true);
+ }
+
+ }
+ }
+
+ private UserOperateActionListener listener;
+ public FunctionOperatePanel userPanel;
+ public SubscribePanel subscribePanel;
+}
diff --git a/src/main/java/com/netsdk/demo/frame/Attendance/AttendanceOperateShareDialog.java b/src/main/java/com/netsdk/demo/frame/Attendance/AttendanceOperateShareDialog.java
new file mode 100644
index 0000000..9bfd39f
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/Attendance/AttendanceOperateShareDialog.java
@@ -0,0 +1,265 @@
+package com.netsdk.demo.frame.Attendance;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.AttendanceModule;
+import com.netsdk.demo.module.AttendanceModule.OPERATE_TYPE;
+import com.netsdk.demo.module.AttendanceModule.UserData;
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 考勤机操作对话框
+ */
+public class AttendanceOperateShareDialog extends JDialog{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ private OPERATE_TYPE emType = OPERATE_TYPE.UNKNOWN; // 操作类型
+ private boolean bSuccess = false; // 接口调用结果
+
+ public AttendanceOperateShareDialog(OPERATE_TYPE emType, UserData userData) {
+ this(emType, userData, "");
+ }
+
+ public AttendanceOperateShareDialog(OPERATE_TYPE emType, String fingerPrintId) {
+ this(emType, null, fingerPrintId);
+ }
+
+ public AttendanceOperateShareDialog(OPERATE_TYPE emType, UserData userData, String fingerPrintId) {
+
+ setTitle(Res.string().getPersonOperate());
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(300, 200);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+
+ //////////人员信息面板 /////////////////
+
+ JPanel personInfoPanel = new JPanel();
+ BorderEx.set(personInfoPanel, "", 4);
+ Dimension dimLable = new Dimension(80, 20);
+ JLabel userIdLabel = new JLabel(Res.string().getUserId());
+ JLabel userNameLabel = new JLabel(Res.string().getUserName(true));
+ JLabel cardNoLabel = new JLabel(Res.string().getCardNo());
+ JLabel fingerPrintIdLabel = new JLabel(Res.string().getFingerPrintId());
+ userIdLabel.setPreferredSize(dimLable);
+ userNameLabel.setPreferredSize(dimLable);
+ cardNoLabel.setPreferredSize(dimLable);
+ fingerPrintIdLabel.setPreferredSize(new Dimension(85, 20));
+
+ Dimension dimValue = new Dimension(150, 20);
+ userIdTextField = new JTextField();
+ userNameTextField = new JTextField();
+ cardNoTextField = new JTextField();
+ fingerPrintIdTextField = new JTextField();
+ userIdTextField.setPreferredSize(dimValue);
+ userNameTextField.setPreferredSize(dimValue);
+ cardNoTextField.setPreferredSize(dimValue);
+ fingerPrintIdTextField.setPreferredSize(dimValue);
+
+ // 数据处理
+ if (userData != null) {
+ if (userData.userId != null) {
+ userIdTextField.setText(userData.userId);
+ }
+
+ if (userData.userName != null) {
+ userNameTextField.setText(userData.userName);
+ }
+
+ if (userData.cardNo != null) {
+ cardNoTextField.setText(userData.cardNo);
+ }
+ }
+
+ if (!fingerPrintId.isEmpty()) {
+ fingerPrintIdTextField.setText(fingerPrintId);
+ }
+
+ if (emType == OPERATE_TYPE.DELETE_FINGERPRINT_BY_ID) { // 根据信息ID删除用户
+ JPanel fingerPrintPanel = new JPanel();
+ fingerPrintPanel.add(fingerPrintIdLabel);
+ fingerPrintPanel.add(fingerPrintIdTextField);
+ personInfoPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 40));
+ personInfoPanel.add(fingerPrintPanel);
+ }else {
+ personInfoPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 10));
+ personInfoPanel.add(userIdLabel);
+ personInfoPanel.add(userIdTextField);
+ personInfoPanel.add(userNameLabel);
+ personInfoPanel.add(userNameTextField);
+ personInfoPanel.add(cardNoLabel);
+ personInfoPanel.add(cardNoTextField);
+
+ if (emType == OPERATE_TYPE.DELETE_FINGERPRINT_BY_USERID
+ || emType == OPERATE_TYPE.DELETE_USER) {
+ JLabel promptLabel = new JLabel(" " + Res.string().getDeleteFingerPrintPrompt() + " ");
+ promptLabel.setEnabled(false);
+ personInfoPanel.add(promptLabel);
+ }
+ }
+
+ //////////功能面板 /////////////////
+ JPanel functionPanel = new JPanel();
+ confirmBtn = new JButton(Res.string().getConfirm());
+ cancelBtn = new JButton(Res.string().getCancel());
+ confirmBtn.setPreferredSize(new Dimension(100, 20));
+ cancelBtn.setPreferredSize(new Dimension(100, 20));
+
+ functionPanel.add(confirmBtn);
+ functionPanel.add(cancelBtn);
+
+ add(personInfoPanel, BorderLayout.CENTER);
+ add(functionPanel, BorderLayout.SOUTH);
+
+ operateListener = new UserOperateListener();
+ confirmBtn.addActionListener(operateListener);
+ cancelBtn.addActionListener(operateListener);
+
+ this.emType = emType;
+ switch(emType) {
+ case ADD_USER:
+ setTitle(Res.string().getAddPerson());
+ confirmBtn.setText(Res.string().getAdd());
+ break;
+ case MODIFIY_USER:
+ setTitle(Res.string().getModifyPerson());
+ confirmBtn.setText(Res.string().getModify());
+ userIdTextField.setEnabled(false);
+ break;
+ case DELETE_USER:
+ setTitle(Res.string().getDelPerson());
+ confirmBtn.setText(Res.string().getDelete());
+ userIdTextField.setEnabled(false);
+ userNameTextField.setEnabled(false);
+ cardNoTextField.setEnabled(false);
+ break;
+ case DELETE_FINGERPRINT_BY_USERID:
+ case DELETE_FINGERPRINT_BY_ID:
+ setTitle(Res.string().getDeleteFingerPrint());
+ confirmBtn.setText(Res.string().getDelete());
+ userIdTextField.setEnabled(false);
+ userNameTextField.setEnabled(false);
+ cardNoTextField.setEnabled(false);
+ fingerPrintIdTextField.setEditable(false);
+ default:
+ break;
+ }
+ }
+
+ public boolean checkDataValidity() {
+
+ if (emType == OPERATE_TYPE.ADD_USER) {
+ if (userIdTextField.getText().isEmpty()) {
+ JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getUserId(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+
+ try {
+ if (userIdTextField.getText().getBytes("UTF-8").length > NetSDKLib.MAX_COMMON_STRING_32-1) {
+ JOptionPane.showMessageDialog(null, Res.string().getUserIdExceedLength(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ }catch (Exception e){
+
+ }
+ }
+
+ try {
+ if (userNameTextField.getText().getBytes("UTF-8").length > NetSDKLib.MAX_ATTENDANCE_USERNAME_LEN-1) {
+ JOptionPane.showMessageDialog(null, Res.string().getUserNameExceedLength(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+
+ if (cardNoTextField.getText().getBytes("UTF-8").length > NetSDKLib.MAX_COMMON_STRING_32-1) {
+ JOptionPane.showMessageDialog(null, Res.string().getCardNoExceedLength(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ }catch (Exception e){
+
+ }
+
+
+ return true;
+ }
+
+ public UserData getUserData() {
+ UserData userData = new UserData();
+ userData.cardNo = userIdTextField.getText();
+ userData.userName = userNameTextField.getText();
+ userData.cardNo = cardNoTextField.getText();
+ return userData;
+ }
+
+ private class UserOperateListener implements ActionListener {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+
+ if (arg0.getSource() == cancelBtn) {
+ dispose();
+ }else if (arg0.getSource() == confirmBtn) {
+ switch(emType) {
+ case ADD_USER:
+ if (!checkDataValidity()) {
+ return;
+ }
+ bSuccess = AttendanceModule.addUser(userIdTextField.getText(), userNameTextField.getText(), cardNoTextField.getText());
+ break;
+ case MODIFIY_USER:
+ if (!checkDataValidity()) {
+ return;
+ }
+ bSuccess = AttendanceModule.modifyUser(userIdTextField.getText(), userNameTextField.getText(), cardNoTextField.getText());
+ break;
+ case DELETE_USER:
+ bSuccess = AttendanceModule.deleteUser(userIdTextField.getText());
+ break;
+ case DELETE_FINGERPRINT_BY_USERID:
+ bSuccess = AttendanceModule.removeFingerByUserId(userIdTextField.getText());
+ break;
+ case DELETE_FINGERPRINT_BY_ID:
+ bSuccess = AttendanceModule.removeFingerRecord(Integer.parseInt(fingerPrintIdTextField.getText()));
+ break;
+ default:
+ System.err.println("Can't Deal Operate Type: " + emType);
+ break;
+ }
+
+ if(bSuccess) {
+ JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getFailed(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ dispose();
+ }else {
+ System.err.println("Unknown Event: " + arg0.getSource());
+ }
+ }
+ }
+
+ private UserOperateListener operateListener; // 按键监听
+ private JTextField userIdTextField; // 用户ID
+ private JTextField userNameTextField; // 用户名
+ private JTextField cardNoTextField; // 卡号
+ private JTextField fingerPrintIdTextField; // 信息ID
+ private JButton confirmBtn; // 确认(根据emType类型变化)
+ private JButton cancelBtn; // 取消
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/demo/frame/Attendance/AttendanceShowPanel.java b/src/main/java/com/netsdk/demo/frame/Attendance/AttendanceShowPanel.java
new file mode 100644
index 0000000..20f97c9
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/Attendance/AttendanceShowPanel.java
@@ -0,0 +1,370 @@
+package com.netsdk.demo.frame.Attendance;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.util.HashMap;
+import java.util.Vector;
+
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.UIManager;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.Res;
+import com.netsdk.common.Res.LanguageType;
+import com.netsdk.demo.module.AttendanceModule.AccessEventInfo;
+import com.netsdk.demo.module.AttendanceModule.UserData;
+import com.netsdk.lib.NetSDKLib.NET_ACCESS_DOOROPEN_METHOD;
+
+public class AttendanceShowPanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ public static int userIndex = 0;
+ public static int eventIndex = 0;
+
+ public AttendanceShowPanel() {
+ setLayout(new BorderLayout());
+
+ userShowPanel = new UserInfoShowPanel();
+ eventShowPanel = new EventInfoShowPanel();
+
+ JSplitPane splitPane = new JSplitPane();
+ splitPane.setDividerSize(0);
+ splitPane.setBorder(null);
+ splitPane.add(userShowPanel, JSplitPane.LEFT);
+ splitPane.add(eventShowPanel, JSplitPane.RIGHT);
+
+ add(splitPane);
+ }
+
+ public void clearup() {
+ userShowPanel.clearData();
+ eventShowPanel.clearEvent();
+ }
+
+ /**
+ * 用户信息显示界面
+ * */
+ public class UserInfoShowPanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ public static final int INDEX = 0;
+ public static final int USER_ID = 1;
+ public static final int USER_NAME = 2;
+ public static final int CARD_NO = 3;
+ public static final int FINGERPRINT_ID = 4;
+ public static final int FINGERPRINT_DATA = 5;
+
+ public final static int QUERY_SHOW_COUNT = 15; // 查询人数
+ private int realRows = 0; // 实际显示个数
+
+ public UserInfoShowPanel() {
+ BorderEx.set(this, Res.string().getUserList(), 1);
+ setLayout(new BorderLayout());
+ setPreferredSize(new Dimension(395, 400));
+ Vector columnNames = new Vector();
+ columnNames.add(Res.string().getIndex()); // 序号
+ columnNames.add(Res.string().getUserId()); // 用户编号
+ columnNames.add(Res.string().getUserName()); // 用户名
+ columnNames.add(Res.string().getCardNo()); // 卡号
+
+ tableModel = new DefaultTableModel(null, columnNames);
+ table = new JTable(tableModel) {
+ private static final long serialVersionUID = 1L;
+
+ public boolean isCellEditable(int rowIndex, int columnIndex) { // 不可编辑
+ return false;
+ }
+ };
+
+ tableModel.setRowCount(QUERY_SHOW_COUNT); // 设置最小显示行
+
+ table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行
+
+ table.getColumnModel().getColumn(INDEX).setPreferredWidth(80);
+ table.getColumnModel().getColumn(USER_ID).setPreferredWidth(150);
+ table.getColumnModel().getColumn(USER_NAME).setPreferredWidth(150);
+ table.getColumnModel().getColumn(CARD_NO).setPreferredWidth(150);
+
+ ((DefaultTableCellRenderer)
+ table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(JLabel.CENTER);
+
+ table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+
+ JScrollPane scrollPane = new JScrollPane(table);
+ scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+ scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+
+ JPanel functionPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
+ prePageBtn = new JButton(Res.string().getPreviousPage());
+ nextPageBtn = new JButton(Res.string().getNextPage());
+ prePageBtn.setPreferredSize(new Dimension(120, 20));
+ nextPageBtn.setPreferredSize(new Dimension(120, 20));
+
+ prePageBtn.setEnabled(false);
+ nextPageBtn.setEnabled(false);
+
+ functionPanel.add(prePageBtn);
+ functionPanel.add(new JLabel(" "));
+ functionPanel.add(nextPageBtn);
+
+ add(scrollPane, BorderLayout.CENTER);
+ add(functionPanel, BorderLayout.SOUTH);
+ }
+
+ public int getRows(){
+ return realRows;
+ }
+
+ public UserData GetSelectedItem() {
+ int currentRow = table.getSelectedRow(); //获得所选的单行
+ if(currentRow < 0 || currentRow + 1 > realRows) {
+ return null;
+ }
+ UserData userData = new UserData();
+
+ userData.userId = (String) tableModel.getValueAt(currentRow, 1);
+ userData.userName = (String) tableModel.getValueAt(currentRow, 2);
+ userData.cardNo = (String) tableModel.getValueAt(currentRow, 3);
+
+ return userData;
+ }
+
+ public void updateSelectedItem(UserData userData) {
+
+ int currentRow = table.getSelectedRow(); //获得所选的单行
+ if(currentRow < 0 || currentRow + 1 > realRows) {
+ return;
+ }
+
+// tableModel.setValueAt(userData.userId, currentRow, 1);
+ tableModel.setValueAt(userData.userName, currentRow, 2);
+ tableModel.setValueAt(userData.cardNo, currentRow, 3);
+ table.updateUI();
+ }
+
+ public void insertData(UserData[] arrUserData) {
+ if (arrUserData == null) {
+ return;
+ }
+
+ realRows = 0;
+ tableModel.setRowCount(0);
+
+ for (UserData userData : arrUserData) {
+ insertUserData(userData);
+ }
+
+ tableModel.setRowCount(QUERY_SHOW_COUNT);
+ table.updateUI();
+
+ setButtonEnable(true);
+ }
+
+ public void setButtonEnable(boolean b) {
+ if (b) {
+ if (UserData.nTotalUser - userIndex > 0) {
+ nextPageBtn.setEnabled(true);
+ }else {
+ nextPageBtn.setEnabled(false);
+ }
+
+ if (userIndex - QUERY_SHOW_COUNT > 0) {
+ prePageBtn.setEnabled(true);
+ }else {
+ prePageBtn.setEnabled(false);
+ }
+ }else {
+ prePageBtn.setEnabled(false);
+ nextPageBtn.setEnabled(false);
+ }
+ }
+
+ public void insertData(UserData userData) {
+ if (userData == null) {
+ return;
+ }
+
+ clearData();
+ tableModel.setRowCount(0);
+
+ insertUserData(userData);
+
+ tableModel.setRowCount(QUERY_SHOW_COUNT);
+ table.updateUI();
+
+ setButtonEnable(false);
+ }
+
+
+ private void insertUserData(UserData userData) {
+ ++userIndex;
+ ++realRows;
+ Vector vector = new Vector();
+ vector.add(String.valueOf(userIndex));
+ vector.add(userData.userId);
+ vector.add(userData.userName);
+ vector.add(userData.cardNo);
+
+ tableModel.addRow(vector);
+ }
+
+ public void clearData() {
+ realRows = 0;
+ userIndex = 0;
+ tableModel.setRowCount(0);
+ tableModel.setRowCount(QUERY_SHOW_COUNT);
+ table.updateUI();
+ prePageBtn.setEnabled(false);
+ nextPageBtn.setEnabled(false);
+ }
+
+ private JTable table = null;
+ private DefaultTableModel tableModel = null;
+ public JButton prePageBtn;
+ public JButton nextPageBtn;
+ }
+
+ /**
+ * 门禁事件显示界面
+ * */
+ public class EventInfoShowPanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ private static final int INDEX = 0;
+ private static final int USER_ID = 1;
+ private static final int CARD_NO = 2;
+ private static final int EVENT_TIME = 3;
+ private static final int DOOR_OPEN_METHOD = 4;
+
+ private final static int MIN_SHOW_LINES = 17;
+ private final static int MAX_SHOW_LINES = 50;
+
+ public EventInfoShowPanel() {
+ BorderEx.set(this, Res.string().getEventInfo(), 1);
+ setLayout(new BorderLayout());
+ setPreferredSize(new Dimension(395, 400));
+
+ Vector columnNames = new Vector();
+ columnNames.add(Res.string().getIndex()); // 序号
+ columnNames.add(Res.string().getUserId()); // 用户编号
+ columnNames.add(Res.string().getCardNo()); // 卡号
+ columnNames.add(Res.string().getEventTime()); // 事件时间
+ columnNames.add(Res.string().getDoorOpenMethod()); // 开门方式
+
+ tableModel = new DefaultTableModel(null, columnNames);
+ table = new JTable(tableModel) {
+ private static final long serialVersionUID = 1L;
+
+ public boolean isCellEditable(int rowIndex, int columnIndex) {
+ return false;
+ }
+ };
+
+ tableModel.setRowCount(MIN_SHOW_LINES); // 设置最小显示行
+
+ table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行
+
+ table.getColumnModel().getColumn(INDEX).setPreferredWidth(80);
+ table.getColumnModel().getColumn(USER_ID).setPreferredWidth(150);
+ table.getColumnModel().getColumn(CARD_NO).setPreferredWidth(150);
+ table.getColumnModel().getColumn(EVENT_TIME).setPreferredWidth(150);
+ table.getColumnModel().getColumn(DOOR_OPEN_METHOD).setPreferredWidth(120);
+
+ ((DefaultTableCellRenderer)
+ table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(JLabel.CENTER);
+
+ table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+
+ JScrollPane scrollPane = new JScrollPane(table);
+ scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+ scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+ add(scrollPane, BorderLayout.CENTER);
+ }
+
+ public void clearEvent() {
+ eventIndex = 0;
+ tableModel.setRowCount(0);
+ tableModel.setRowCount(MIN_SHOW_LINES);
+ table.updateUI();
+ }
+
+ public void insertEvent(AccessEventInfo accessEventInfo) {
+ if (accessEventInfo == null) {
+ return;
+ }
+ ++eventIndex;
+ tableModel.insertRow(0, convertEventData(accessEventInfo));
+ if (eventIndex <= MIN_SHOW_LINES) {
+ tableModel.setRowCount(MIN_SHOW_LINES);
+ }else if (eventIndex >= MAX_SHOW_LINES){
+ tableModel.setRowCount(MAX_SHOW_LINES);
+ }
+
+ table.updateUI();
+ }
+
+ private Vector convertEventData(AccessEventInfo accessEventInfo) {
+ Vector vector = new Vector();
+ vector.add(String.valueOf(eventIndex));
+ vector.add(accessEventInfo.userId);
+ vector.add(accessEventInfo.cardNo);
+ vector.add(accessEventInfo.eventTime.replace("/", "-"));
+ String openDoor = openDoorMethodMap.get(accessEventInfo.openDoorMethod);
+ if (openDoor == null) {
+ openDoor = Res.string().getUnKnow();
+ }
+ vector.add(openDoor);
+
+ return vector;
+ }
+
+ private JTable table = null;
+ private DefaultTableModel tableModel = null;
+ }
+
+ private static HashMap openDoorMethodMap = new HashMap() {
+
+ private static final long serialVersionUID = 1L;
+
+ {
+ put(NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT, Res.string().getFingerPrint());
+ put(NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD, Res.string().getCard());
+ }
+ };
+
+ public UserInfoShowPanel userShowPanel;
+ public EventInfoShowPanel eventShowPanel;
+
+ public static void main(String[] args) {
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ Res.string().switchLanguage(LanguageType.English);
+
+ AttendanceShowPanel demo = new AttendanceShowPanel();
+ JFrame frame = new JFrame();
+ frame.setSize(800, 560);
+ frame.add(demo);
+ System.out.println("AttendanceShowPanel Test");
+ frame.setVisible(true);
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/frame/Attendance/OperateByFingerPrintIdDialog.java b/src/main/java/com/netsdk/demo/frame/Attendance/OperateByFingerPrintIdDialog.java
new file mode 100644
index 0000000..1dc19fb
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/Attendance/OperateByFingerPrintIdDialog.java
@@ -0,0 +1,209 @@
+package com.netsdk.demo.frame.Attendance;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+
+import com.netsdk.common.Base64;
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.AttendanceModule;
+import com.netsdk.demo.module.AttendanceModule.OPERATE_TYPE;
+import com.netsdk.demo.module.AttendanceModule.UserData;
+
+/**
+ * 通过信息ID操作信息对话框
+ */
+public class OperateByFingerPrintIdDialog extends JDialog{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public OperateByFingerPrintIdDialog() {
+ setTitle(Res.string().getOperateByFingerPrintId());
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(600, 500);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+
+ ////////// 查询条件 /////////////////
+ JLabel fingerPrintIdLabel = new JLabel(Res.string().getFingerPrintId(), JLabel.CENTER);
+ fingerPrintIdTextField = new JTextField();
+ fingerPrintIdLabel.setPreferredSize(new Dimension(85, 20));
+ fingerPrintIdTextField.setPreferredSize(new Dimension(100, 20));
+
+ ////////// 信息功能 /////////////////
+ searchFingerPrintBtn = new JButton(Res.string().getSearchFingerPrint());
+ deleteFingerPrintBtn = new JButton(Res.string().getDeleteFingerPrint());
+
+ searchFingerPrintBtn.setPreferredSize(new Dimension(140, 20));
+ deleteFingerPrintBtn.setPreferredSize(new Dimension(140, 20));
+
+ JPanel functionPanel = new JPanel();
+ BorderEx.set(functionPanel, Res.string().getOperateByFingerPrintId(), 1);
+ functionPanel.add(fingerPrintIdLabel);
+ functionPanel.add(fingerPrintIdTextField);
+ functionPanel.add(searchFingerPrintBtn);
+ functionPanel.add(deleteFingerPrintBtn);
+
+ //////////信息信息 /////////////////
+ JPanel fingerPrintPanel = new JPanel();
+ BorderEx.set(fingerPrintPanel, Res.string().getFingerPrintInfo(), 1);
+ fingerPrintPanel.setLayout(null);
+ JLabel userIdLabel = new JLabel(Res.string().getUserId());
+ userId = new JLabel();
+ JLabel fingerPrintDataLabel = new JLabel(Res.string().getFingerPrintData());
+ fingerPrintData = new JTextArea();
+ fingerPrintData.setBackground(null);
+ fingerPrintData.setEditable(false);
+ fingerPrintData.setLineWrap(true);
+ JScrollPane scrollPane = new JScrollPane(fingerPrintData);
+ userIdLabel.setBounds(30, 30, 90, 20);
+ userId.setBounds(150, 30, 300, 20);
+ fingerPrintDataLabel.setBounds(30, 60, 150, 20);
+ fingerPrintData.setBounds(30, 80, 600, 20);
+ scrollPane.setBounds(30, 80, 550, 300);
+ scrollPane.setBorder(null);
+
+ fingerPrintPanel.add(userIdLabel);
+ fingerPrintPanel.add(userId);
+ fingerPrintPanel.add(fingerPrintDataLabel);
+ fingerPrintPanel.add(scrollPane);
+
+ add(functionPanel, BorderLayout.NORTH);
+ add(fingerPrintPanel, BorderLayout.CENTER);
+
+ fingerPrintIdTextField.addKeyListener(new KeyListener() {
+
+ public void keyTyped(KeyEvent e) {
+ int key = e.getKeyChar();
+ if (key < 48 || key > 57) {
+ e.consume();
+ }
+ }
+
+ public void keyPressed(KeyEvent e) {}
+
+ public void keyReleased(KeyEvent e) {}
+ });
+
+ listener = new FingerPrintIdOperateActionListener();
+ searchFingerPrintBtn.addActionListener(listener);
+ deleteFingerPrintBtn.addActionListener(listener);
+ }
+
+ public String getFingerPrintId() {
+
+ if (fingerPrintIdTextField.getText().isEmpty()) {
+ JOptionPane.showMessageDialog(null, Res.string().getInput()+Res.string().getFingerPrintId(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return null;
+ }
+
+ try {
+ Integer.parseInt(fingerPrintIdTextField.getText());
+ }catch (NumberFormatException e){
+ JOptionPane.showMessageDialog(null, Res.string().getFingerPrintIdIllegal(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return null;
+ }
+ return fingerPrintIdTextField.getText();
+ }
+
+ public void searchFingerPrint() {
+ clearFingerPrintInfo();
+
+ String fingerPrintId = getFingerPrintId();
+ if (fingerPrintId == null) {
+ return;
+ }
+ UserData userData = AttendanceModule.getFingerRecord(Integer.parseInt(fingerPrintId));
+ if (userData == null) {
+ JOptionPane.showMessageDialog(null, Res.string().getFailed(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if (userData.szFingerPrintInfo[0].length == 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getFingerPrintIdNotExist(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ dealFingerPrintInfo(userData);
+ }
+
+ public void dealFingerPrintInfo(UserData userData) {
+ userId.setText(userData.userId);
+ fingerPrintData.setText(formatFingerPrintData(userData.szFingerPrintInfo[0]));
+ }
+
+ private String formatFingerPrintData(byte[] fingerPrintData) {
+ String formatData = Base64.getEncoder().encodeToString(fingerPrintData);
+ return formatData;
+ }
+
+ public void clearFingerPrintInfo() {
+ userId.setText("");
+ fingerPrintData.setText("");
+ }
+
+ /**
+ * 按键监听实现类
+ */
+ private class FingerPrintIdOperateActionListener implements ActionListener {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+
+ OPERATE_TYPE emType = getOperateType(arg0.getSource());
+ switch(emType) {
+ case SEARCH_FINGERPRINT_BY_ID:
+ searchFingerPrint();
+ break;
+ case DELETE_FINGERPRINT_BY_ID:
+ String fingerPrintId = getFingerPrintId();
+ if (fingerPrintId == null) {
+ return;
+ }
+ new AttendanceOperateShareDialog(emType, fingerPrintId).setVisible(true);
+ break;
+ default:
+ break;
+ }
+ }
+
+ private OPERATE_TYPE getOperateType(Object btn) {
+ OPERATE_TYPE type = OPERATE_TYPE.UNKNOWN;
+ if (btn == searchFingerPrintBtn) { // 查找信息
+ type = OPERATE_TYPE.SEARCH_FINGERPRINT_BY_ID;
+ }else if (btn == deleteFingerPrintBtn) { // 删除信息
+ type = OPERATE_TYPE.DELETE_FINGERPRINT_BY_ID;
+ }else {
+ System.err.println("Unknown Event: " + btn);
+ }
+
+ return type;
+
+ }
+ }
+
+ private JTextField fingerPrintIdTextField;
+ public JButton searchFingerPrintBtn;
+ private JButton deleteFingerPrintBtn;
+ private JLabel userId;
+ private JTextArea fingerPrintData;
+ private FingerPrintIdOperateActionListener listener;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/demo/frame/Attendance/OperateByUserIdDialog.java b/src/main/java/com/netsdk/demo/frame/Attendance/OperateByUserIdDialog.java
new file mode 100644
index 0000000..d26258b
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/Attendance/OperateByUserIdDialog.java
@@ -0,0 +1,281 @@
+package com.netsdk.demo.frame.Attendance;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Vector;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.ListSelectionModel;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+
+import com.netsdk.common.Base64;
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.AttendanceModule;
+import com.netsdk.demo.module.AttendanceModule.OPERATE_TYPE;
+import com.netsdk.demo.module.AttendanceModule.UserData;
+
+public class OperateByUserIdDialog extends JDialog{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ private UserData userData;
+
+ public OperateByUserIdDialog(UserData userData) {
+ setTitle(Res.string().getOperateByUserId());
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(570, 383);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+
+ ////////// 用户信息 (不可改变)/////////////////
+ JPanel userInfoPanel = new JPanel();
+ userInfoPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
+ BorderEx.set(userInfoPanel, Res.string().getUserInfo(), 2);
+
+ JLabel userIdLabel = new JLabel(Res.string().getUserId(), JLabel.CENTER);
+ JTextField userIdTextField = new JTextField(userData.userId);
+ JLabel userNameLabel = new JLabel(Res.string().getUserName(true), JLabel.CENTER);
+ JTextField userNameTextField = new JTextField(userData.userName);
+ JLabel cardNoLabel = new JLabel(Res.string().getCardNo(), JLabel.CENTER);
+ JTextField cardNoTextField = new JTextField(userData.cardNo);
+
+ userIdTextField.setEnabled(false);
+ userNameTextField.setEnabled(false);
+ cardNoTextField.setEnabled(false);
+
+ Dimension dimLable = new Dimension(55, 20);
+ userIdLabel.setPreferredSize(dimLable);
+ userNameLabel.setPreferredSize(dimLable);
+ cardNoLabel.setPreferredSize(dimLable);
+ Dimension dimValue = new Dimension(100, 20);
+ userIdTextField.setPreferredSize(dimValue);
+ userNameTextField.setPreferredSize(dimValue);
+ cardNoTextField.setPreferredSize(dimValue);
+
+ userInfoPanel.add(userIdLabel);
+ userInfoPanel.add(userIdTextField);
+ userInfoPanel.add(userNameLabel);
+ userInfoPanel.add(userNameTextField);
+ userInfoPanel.add(cardNoLabel);
+ userInfoPanel.add(cardNoTextField);
+
+ ////////// 信息功能 /////////////////
+ JPanel functionPanel = new JPanel();
+ BorderEx.set(functionPanel, Res.string().getOperateByUserId(), 2);
+ searchFingerPrintBtn = new JButton(Res.string().getSearchFingerPrint());
+ addFingerPrintBtn = new JButton(Res.string().getAddFingerPrint());
+ deleteFingerPrintBtn = new JButton(Res.string().getDeleteFingerPrint());
+
+ searchFingerPrintBtn.setPreferredSize(new Dimension(150, 20));
+ addFingerPrintBtn.setPreferredSize(new Dimension(150, 20));
+ deleteFingerPrintBtn.setPreferredSize(new Dimension(150, 20));
+
+ functionPanel.add(searchFingerPrintBtn);
+ functionPanel.add(addFingerPrintBtn);
+ functionPanel.add(deleteFingerPrintBtn);
+
+ //////////布局 /////////////////
+ JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
+ splitPane.setDividerSize(0);
+ splitPane.setBorder(null);
+ splitPane.add(userInfoPanel, JSplitPane.TOP);
+ splitPane.add(functionPanel, JSplitPane.BOTTOM);
+ add(splitPane, BorderLayout.NORTH);
+
+ fingerPrintShowPanel = new FingerPrintShowPanel();
+ add(fingerPrintShowPanel, BorderLayout.CENTER);
+
+ listener = new UserIdOperateActionListener();
+ searchFingerPrintBtn.addActionListener(listener);
+ addFingerPrintBtn.addActionListener(listener);
+ deleteFingerPrintBtn.addActionListener(listener);
+
+ this.userData = userData;
+ }
+
+ public void searchFingerPrint() {
+ clearTable();
+ boolean bSuccess = AttendanceModule.getFingerByUserId(userData.userId, userData);
+ if (bSuccess){
+ fingerPrintShowPanel.insertData(userData);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getFailed(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+
+ public void clearTable() {
+ fingerPrintShowPanel.clearData();
+ }
+
+ public void addFingerPrint(int fingerPrintId, byte[] fingerPrintData) {
+ fingerPrintShowPanel.insertData(fingerPrintId, fingerPrintData);
+ }
+
+ /**
+ * 按键监听实现类
+ */
+ private class UserIdOperateActionListener implements ActionListener {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+
+ OPERATE_TYPE emType = getOperateType(arg0.getSource());
+ switch(emType) {
+ case SEARCH_FINGERPRINT_BY_USERID:
+ searchFingerPrint();
+ break;
+ case ADD_FINGERPRINT:
+ new AddFingerPrintDialog(userData.userId).setVisible(true);
+ break;
+ case DELETE_FINGERPRINT_BY_USERID:
+ new AttendanceOperateShareDialog(emType, userData).setVisible(true);
+ break;
+ default:
+ break;
+ }
+ }
+
+ private OPERATE_TYPE getOperateType(Object btn) {
+ OPERATE_TYPE type = OPERATE_TYPE.UNKNOWN;
+ if (btn == searchFingerPrintBtn) { // 查找信息
+ type = OPERATE_TYPE.SEARCH_FINGERPRINT_BY_USERID;
+ }else if (btn == addFingerPrintBtn) { // 添加信息
+ type = OPERATE_TYPE.ADD_FINGERPRINT;
+ }else if (btn == deleteFingerPrintBtn) { // 删除信息(用户ID)
+ type = OPERATE_TYPE.DELETE_FINGERPRINT_BY_USERID;
+ }else {
+ System.err.println("Unknown Event: " + btn);
+ }
+
+ return type;
+
+ }
+ }
+
+ /**
+ * 信息信息显示界面
+ * */
+ public class FingerPrintShowPanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ public static final int INDEX = 0;
+ public static final int USER_ID = 1;
+ public static final int FINGERPRINT_ID = 2;
+ public static final int FINGERPRINT_DATA = 3;
+
+ public final static int MAX_FINGERPRINT_NUM = 10; // 最大信息个数, 也做为显示个数
+ private int realRows = 0; // 实际显示个数
+
+ public FingerPrintShowPanel() {
+ BorderEx.set(this, Res.string().getFingerPrintInfo(), 1);
+ setLayout(new BorderLayout());
+ setPreferredSize(new Dimension(550, 375));
+ Vector columnNames = new Vector();
+ columnNames.add(Res.string().getIndex()); // 序号
+ columnNames.add(Res.string().getUserId()); // 用户编号
+ columnNames.add(Res.string().getFingerPrintId()); // 信息ID
+ columnNames.add(Res.string().getFingerPrintData()); // 信息
+
+ tableModel = new DefaultTableModel(null, columnNames);
+ table = new JTable(tableModel) {
+ private static final long serialVersionUID = 1L;
+
+ public boolean isCellEditable(int rowIndex, int columnIndex) { // 不可编辑
+ return false;
+ }
+ };
+
+ tableModel.setRowCount(MAX_FINGERPRINT_NUM); // 设置最小显示行
+
+ table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行(其实无意义)
+
+ table.getColumnModel().getColumn(INDEX).setPreferredWidth(80);
+ table.getColumnModel().getColumn(USER_ID).setPreferredWidth(100);
+ table.getColumnModel().getColumn(FINGERPRINT_ID).setPreferredWidth(100);
+ table.getColumnModel().getColumn(FINGERPRINT_DATA).setPreferredWidth(8888);
+
+ ((DefaultTableCellRenderer)
+ table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(JLabel.CENTER);
+
+ table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+
+ JScrollPane scrollPane = new JScrollPane(table);
+ scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+ scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+
+ add(scrollPane, BorderLayout.CENTER);
+ }
+
+ public void insertData(UserData userData) {
+ if (userData.nFingerPrintIDs == null) {
+ return;
+ }
+
+ clearData();
+ tableModel.setRowCount(0);
+ for (int i = 0; i < userData.nFingerPrintIDs.length; ++i) {
+ insertFingerPrintData(userData.nFingerPrintIDs[i], userData.szFingerPrintInfo[i]);
+ }
+
+ tableModel.setRowCount(MAX_FINGERPRINT_NUM);
+ table.updateUI();
+ }
+
+ public void insertData(int fingerPrintId, byte[] fingerPrintData) {
+ tableModel.setRowCount(realRows);
+ insertFingerPrintData(fingerPrintId, fingerPrintData);
+ tableModel.setRowCount(MAX_FINGERPRINT_NUM);
+ table.updateUI();
+ }
+
+ private void insertFingerPrintData(int fingerPrintId, byte[] fingerPrintData) {
+ ++realRows;
+ Vector vector = new Vector();
+ vector.add(String.valueOf(realRows));
+ vector.add(userData.userId);
+ vector.add(String.valueOf(fingerPrintId));
+ vector.add(formatFingerPrintData(fingerPrintData));
+ tableModel.addRow(vector);
+ }
+
+ private String formatFingerPrintData(byte[] fingerPrintData) {
+ String formatData = Base64.getEncoder().encodeToString(fingerPrintData);
+ return formatData;
+ }
+
+ public void clearData() {
+ realRows = 0;
+ tableModel.setRowCount(0);
+ tableModel.setRowCount(MAX_FINGERPRINT_NUM);
+ table.updateUI();
+ }
+
+ private JTable table = null;
+ private DefaultTableModel tableModel = null;
+ }
+
+ public JButton searchFingerPrintBtn;
+ private JButton addFingerPrintBtn;
+ private JButton deleteFingerPrintBtn;
+ private UserIdOperateActionListener listener;
+ private FingerPrintShowPanel fingerPrintShowPanel;
+}
diff --git a/src/main/java/com/netsdk/demo/frame/Attendance/SubscribePanel.java b/src/main/java/com/netsdk/demo/frame/Attendance/SubscribePanel.java
new file mode 100644
index 0000000..04a7d03
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/Attendance/SubscribePanel.java
@@ -0,0 +1,153 @@
+package com.netsdk.demo.frame.Attendance;
+
+import java.awt.AWTEvent;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.FlowLayout;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import com.sun.jna.Pointer;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.Res;
+import com.netsdk.demo.frame.Attendance.AttendanceShowPanel.EventInfoShowPanel;
+import com.netsdk.demo.module.AttendanceModule;
+import com.netsdk.demo.module.AttendanceModule.AccessEventInfo;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.NetSDKLib.*;
+
+/**
+ * 订阅面板
+ */
+public class SubscribePanel extends JPanel{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ private java.awt.Component target = this; // 目标
+ private boolean bSubscribe = false; // 订阅标志
+ private EventInfoShowPanel eventShowPanel; // 事件显示界面
+ public SubscribePanel(EventInfoShowPanel eventPanel) {
+ BorderEx.set(this, Res.string().getSubscribe(), 1);
+ setLayout(new FlowLayout(FlowLayout.CENTER, 5, 30));
+ setPreferredSize(new Dimension(180, 80));
+
+ eventShowPanel = eventPanel;
+ callback = new fAnalyzerDataCB();
+
+ subscribeBtn = new JButton(Res.string().getSubscribe());
+ subscribeBtn.setPreferredSize(new Dimension(150, 20));
+
+ add(subscribeBtn);
+
+ subscribeBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if (bSubscribe) {
+ AttendanceModule.stopRealLoadPicture();
+ eventShowPanel.clearEvent();
+ setSubscribeStatus(false);
+ }else {
+ if (AttendanceModule.realLoadPicture(callback)) {
+ setSubscribeStatus(true);
+ }else {
+ JOptionPane.showMessageDialog(null, Res.string().getSubscribeFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ }
+ }
+
+ });
+
+ subscribeBtn.setEnabled(false);
+ }
+
+ public void setButtonEnable(boolean b) {
+ setSubscribeStatus(false);
+ subscribeBtn.setEnabled(b);
+ }
+
+ public void setSubscribeStatus(boolean b) {
+ bSubscribe = b;
+ if (bSubscribe) {
+ subscribeBtn.setText(Res.string().getUnSubscribe());
+ }else {
+ subscribeBtn.setText(Res.string().getSubscribe());
+ }
+ }
+
+ /**
+ * 智能报警事件回调
+ **/
+ public class fAnalyzerDataCB implements fAnalyzerDataCallBack {
+ public final EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
+ @Override
+ public int invoke(LLong lAnalyzerHandle, int dwAlarmType,
+ Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize,
+ Pointer dwUser, int nSequence, Pointer reserved) {
+ if(pAlarmInfo == null) {
+ return 0;
+ }
+
+ switch(dwAlarmType) {
+ case NetSDKLib.EVENT_IVS_ACCESS_CTL: // 门禁事件
+ DEV_EVENT_ACCESS_CTL_INFO event = new DEV_EVENT_ACCESS_CTL_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, event);
+ AccessEventInfo accessEvent = new AccessEventInfo();
+ accessEvent.userId = new String(event.szUserID).trim();
+ accessEvent.cardNo = new String(event.szCardNo).trim();
+ accessEvent.eventTime = event.UTC.toStringTime();
+ accessEvent.openDoorMethod = event.emOpenMethod;
+ if (eventQueue != null) {
+ eventQueue.postEvent(new AccessEvent(target, accessEvent));
+ }
+ break;
+ default:
+ break;
+ }
+
+ return 0;
+ }
+ }
+
+ /**
+ * 门禁事件
+ **/
+ class AccessEvent extends AWTEvent {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ public static final int EVENT_ID = AWTEvent.RESERVED_ID_MAX + 1;
+ private AccessEventInfo accessEvent;
+
+ public AccessEvent(Object target, AccessEventInfo accessEvent) {
+ super(target, EVENT_ID);
+ this.accessEvent = accessEvent;
+ }
+
+ public AccessEventInfo getAccessEventInfo() {
+ return this.accessEvent;
+ }
+ }
+
+ @Override
+ protected void processEvent( AWTEvent event) {
+ if ( event instanceof AccessEvent) {
+ AccessEventInfo accessEventInfo = ((AccessEvent)event).getAccessEventInfo();
+ eventShowPanel.insertEvent(accessEventInfo);
+ } else {
+ super.processEvent(event);
+ }
+ }
+
+ private JButton subscribeBtn; // 订阅按钮
+ private fAnalyzerDataCallBack callback; // 事件回调
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/demo/frame/AutoRegister/AddDeviceDialog.java b/src/main/java/com/netsdk/demo/frame/AutoRegister/AddDeviceDialog.java
new file mode 100644
index 0000000..b0ed54f
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/AutoRegister/AddDeviceDialog.java
@@ -0,0 +1,134 @@
+package com.netsdk.demo.frame.AutoRegister;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JTextField;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.DeviceManagerListener;
+import com.netsdk.common.Res;
+
+/**
+ * 在树上添加设备
+ */
+public class AddDeviceDialog extends JDialog{
+ private static final long serialVersionUID = 1L;
+
+ private DeviceManagerListener listener;
+ public void addDeviceManagerListener(DeviceManagerListener listener) {
+ this.listener = listener;
+ }
+
+ public AddDeviceDialog(){
+ setTitle(Res.string().getAddDevice());
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(220, 180);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体
+
+ AddDevicePanel addDevicePanel = new AddDevicePanel();
+ add(addDevicePanel, BorderLayout.CENTER);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e){
+ dispose();
+ }
+ });
+ }
+
+ /*
+ * 添加设备面板
+ */
+ private class AddDevicePanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public AddDevicePanel() {
+ BorderEx.set(this, "", 2);
+ setLayout(new FlowLayout());
+
+ JLabel deviceIdLabel = new JLabel(Res.string().getDeviceID(), JLabel.CENTER);
+ JLabel usernameLabel = new JLabel(Res.string().getUserName(), JLabel.CENTER);
+ JLabel passwordLabel = new JLabel(Res.string().getPassword(), JLabel.CENTER);
+
+ deviceIdLabel.setPreferredSize(new Dimension(60, 21));
+ usernameLabel.setPreferredSize(new Dimension(60, 21));
+ passwordLabel.setPreferredSize(new Dimension(60, 21));
+
+ deviceIdTextField = new JTextField();
+ usernameTextField = new JTextField();
+ passwordPasswordField = new JPasswordField();
+
+ deviceIdTextField.setPreferredSize(new Dimension(120, 20));
+ usernameTextField.setPreferredSize(new Dimension(120, 20));
+ passwordPasswordField.setPreferredSize(new Dimension(120, 20));
+
+ JButton addDeviceBtn = new JButton(Res.string().getAdd());
+ JButton cancelBtn = new JButton(Res.string().getCancel());
+
+ addDeviceBtn.setPreferredSize(new Dimension(90, 21));
+ cancelBtn.setPreferredSize(new Dimension(90, 21));
+
+ add(deviceIdLabel);
+ add(deviceIdTextField);
+ add(usernameLabel);
+ add(usernameTextField);
+ add(passwordLabel);
+ add(passwordPasswordField);
+ add(addDeviceBtn);
+ add(cancelBtn);
+
+ // 添加
+ addDeviceBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ if(deviceIdTextField.getText().equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getDeviceID(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(usernameTextField.getText().equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getUserName(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if((new String(passwordPasswordField.getPassword()).trim()).equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getPassword(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ dispose();
+ listener.onDeviceManager(deviceIdTextField.getText(),
+ usernameTextField.getText(),
+ new String(passwordPasswordField.getPassword()).trim());
+ }
+ });
+
+ // 取消,关闭
+ cancelBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ dispose();
+ }
+ });
+ }
+ }
+
+ private JTextField deviceIdTextField;
+ private JTextField usernameTextField;
+ private JPasswordField passwordPasswordField;
+}
diff --git a/src/main/java/com/netsdk/demo/frame/AutoRegister/AutoRegister.java b/src/main/java/com/netsdk/demo/frame/AutoRegister/AutoRegister.java
new file mode 100644
index 0000000..ecf33ed
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/AutoRegister/AutoRegister.java
@@ -0,0 +1,1826 @@
+package com.netsdk.demo.frame.AutoRegister;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Panel;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.image.BufferedImage;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.concurrent.ExecutionException;
+
+import javax.imageio.ImageIO;
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.JTree;
+import javax.swing.SwingUtilities;
+import javax.swing.SwingWorker;
+import javax.swing.UIManager;
+import javax.swing.filechooser.FileFilter;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
+
+import com.sun.jna.Pointer;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.DeviceManagerListener;
+import com.netsdk.common.FunctionList;
+import com.netsdk.common.PaintPanel;
+import com.netsdk.common.Res;
+import com.netsdk.common.SavePath;
+import com.netsdk.demo.module.*;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.NetSDKLib.*;
+
+/**
+ * 主动注册Demo:包含主动注册、实时预览、对讲、主动注册网络配置
+ */
+class AutoRegisterFrame extends JFrame {
+ private static final long serialVersionUID = 1L;
+
+ // 设备断线通知回调
+ private DisConnect disConnectCallback = new DisConnect();
+
+ // 主动注册监听回调
+ private ServiceCB servicCallback = new ServiceCB();
+
+ // 抓图回调
+ public CaptureReceiveCB captureCallback = new CaptureReceiveCB();
+
+ private boolean isExist = false;
+
+ private TreeCellRender treeCellRender = new TreeCellRender();
+
+ // 预览句柄
+ private LLong realplayHandle = new LLong(0);
+
+ // 预览节点
+ private ChannelTreeNode realplayChannelTreeNode = null;
+
+ // 对讲节点
+ private DeviceTreeNode talkDeviceTreeNode = null;
+
+ public AutoRegisterFrame() {
+ setTitle(Res.string().getAutoRegister());
+ setLayout(new BorderLayout());
+ pack();
+ setSize(780, 540);
+ setResizable(false);
+ setLocationRelativeTo(null);
+
+ // 打开工程,初始化,设置断线回调
+ LoginModule.init(disConnectCallback, null);
+
+ // 设置抓图回调
+ AutoRegisterModule.setSnapRevCallBack(captureCallback);
+
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ // 注册列表面板
+ AutoRegisterTreePanel autoRegisterTreePanel = new AutoRegisterTreePanel();
+
+ // 实时预览面板
+ RealPlayPanel realplayPanel = new RealPlayPanel();
+
+ // 监听和设备管理面板
+ ListenDeviceManagerPanel listenDeviceManagerPanel = new ListenDeviceManagerPanel();
+
+ add(autoRegisterTreePanel, BorderLayout.WEST);
+ add(realplayPanel, BorderLayout.CENTER);
+ add(listenDeviceManagerPanel, BorderLayout.EAST);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ // 停止对讲
+ if(AutoRegisterModule.m_hTalkHandle.longValue() != 0) {
+ AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle);
+ talkDeviceTreeNode = null;
+ }
+
+ // 停止拉流
+ if(realplayHandle.longValue() != 0) {
+ AutoRegisterModule.stopRealPlay(realplayHandle);
+ realplayWindowPanel.repaint();
+
+ realplayChannelTreeNode = null;
+ }
+
+ // 登出所有设备
+ for(int i = 0; i < rootNode.getChildCount(); i++) {
+ DeviceTreeNode deviceTreeNode = (DeviceTreeNode)rootNode.getChildAt(i);
+ if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) {
+ AutoRegisterModule.logout(deviceTreeNode.getDeviceInfo().getLoginHandle());
+ }
+ }
+
+ // 停止服务
+ AutoRegisterModule.stopServer();
+
+ LoginModule.cleanup(); // 关闭工程,释放资源
+ dispose();
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+
+ /////////////////面板///////////////////
+ // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数
+ private class DisConnect implements fDisConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+
+ for(int i = 0; i < rootNode.getChildCount(); i++) {
+ DeviceTreeNode deviceTreeNode = (DeviceTreeNode)rootNode.getChildAt(i);
+
+ // 根据设备IP判断断线设备
+ if(pchDVRIP.equals(deviceTreeNode.getDeviceInfo().getDeviceIp())
+ && nDVRPort == deviceTreeNode.getDeviceInfo().getDevicePort()) {
+
+ synchronized (this) {
+ // 停止断线设备的对讲, 主动注册中,对讲要用同步,不能在另开的线程里停止对讲,否则会出现句柄无效的错误
+ if(deviceTreeNode == talkDeviceTreeNode) {
+ AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle);
+
+ talkDeviceTreeNode = null;
+ }
+
+ // 停止断线设备的拉流
+ for(int j = 0; j < deviceTreeNode.getChildCount(); j++) {
+ ChannelTreeNode channelTreeNode = (ChannelTreeNode)deviceTreeNode.getChildAt(j);
+ if(channelTreeNode == realplayChannelTreeNode) {
+ AutoRegisterModule.stopRealPlay(realplayHandle);
+ realplayWindowPanel.repaint();
+
+ realplayChannelTreeNode = null;
+
+ break;
+ }
+ }
+
+ // 登出
+ if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) {
+ AutoRegisterModule.logout(deviceTreeNode.getDeviceInfo().getLoginHandle());
+ }
+
+ SwingUtilities.invokeLater(new DisConnectRunnable(deviceTreeNode));
+ }
+
+ break;
+ }
+ }
+
+ }
+ }
+
+ private class DisConnectRunnable implements Runnable {
+ DeviceTreeNode devicetTreeNode;
+
+ public DisConnectRunnable(DeviceTreeNode devicetTreeNode) {
+ this.devicetTreeNode = devicetTreeNode;
+ }
+
+ @Override
+ public void run() {
+ devicetTreeNode.setUserObject(devicetTreeNode.getDeviceInfo().getDevcieId());
+ devicetTreeNode.removeAllChildren();
+
+ tree.updateUI();
+ }
+ }
+
+ private class AutoRegisterTreePanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public AutoRegisterTreePanel() {
+ setLayout(new BorderLayout());
+ Dimension dimension = new Dimension();
+ dimension.width = 210;
+ setPreferredSize(dimension);
+
+ JPanel configPanel = new JPanel();
+ JPanel deviceListPanel = new JPanel();
+
+ add(configPanel, BorderLayout.NORTH);
+ add(deviceListPanel, BorderLayout.CENTER);
+
+ ////// 配置面板 ////////
+ configPanel.setBorder(BorderFactory.createTitledBorder(Res.string().getOperate()));
+ configPanel.setPreferredSize(new Dimension(200, 55));
+ configPanel.setLayout(new FlowLayout());
+
+ JButton configBtn = new JButton(Res.string().getDeviceConfig());
+ configBtn.setPreferredSize(new Dimension(180, 21));
+
+ configPanel.add(configBtn);
+
+ ////// 设备列表面板 ///////
+ deviceListPanel.setBorder(BorderFactory.createTitledBorder(Res.string().getDeviceList()));
+ deviceListPanel.setLayout(new BorderLayout());
+
+ rootNode = new DefaultMutableTreeNode();
+ treeModel = new DefaultTreeModel(rootNode);
+ tree = new JTree(treeModel);
+
+ tree.setBackground(Color.LIGHT_GRAY);
+ tree.setForeground(Color.BLACK);
+ tree.setEditable(false);
+ tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
+ tree.setRootVisible(false);
+ tree.expandPath(new TreePath(rootNode));
+ tree.setShowsRootHandles(true);
+
+ JScrollPane jScrollPane = new JScrollPane(tree);
+ deviceListPanel.add(jScrollPane, BorderLayout.CENTER);
+
+ // 配置设备
+ configBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ DeviceConfigDialog deviceConfigDialog = new DeviceConfigDialog();
+ deviceConfigDialog.setVisible(true);
+ }
+ });
+
+ tree.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseReleased(MouseEvent e) {
+
+ }
+
+ @Override
+ public void mousePressed(MouseEvent e) {
+ // 右键
+ if(SwingUtilities.isRightMouseButton(e)) {
+ TreePath treePath = tree.getPathForLocation(e.getX(), e.getY());
+ tree.setSelectionPath(treePath);
+
+ showPopupMenu(e.getComponent(), e.getX(), e.getY());
+ }
+ }
+
+ @Override
+ public void mouseExited(MouseEvent e) {
+
+ }
+
+ @Override
+ public void mouseEntered(MouseEvent e) {
+
+ }
+
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ // 双击
+ if(e.getClickCount() > 1) {
+ if(tree.getLastSelectedPathComponent() instanceof ChannelTreeNode) {
+ ChannelTreeNode channelTreeNode = (ChannelTreeNode)tree.getLastSelectedPathComponent();
+
+ if(channelTreeNode != realplayChannelTreeNode) {
+ startRealplay();
+ }
+ }
+ }
+ }
+ });
+ }
+ }
+
+ /**
+ * 树的右键弹出菜单
+ */
+ @SuppressWarnings("static-access")
+ private void showPopupMenu( Component component, int x, int y) {
+ JPopupMenu popupMenu = new JPopupMenu();
+
+ JMenuItem logoutMenuItem = new JMenuItem(Res.string().getLogout());
+ JMenuItem addDeviceMenuItem = new JMenuItem(Res.string().getAddDevice());
+ JMenuItem modifyDeviceMenuItem = new JMenuItem(Res.string().getModifyDevice());
+ JMenuItem deleteDeviceMenuItem = new JMenuItem(Res.string().getDeleteDevice());
+ JMenuItem clearDeviceMenuItem = new JMenuItem(Res.string().getClearDevice());
+ JMenuItem importDeviceMenuItem = new JMenuItem(Res.string().getImportDevice());
+ JMenuItem exportDeviceMenuItem = new JMenuItem(Res.string().getExportDevice());
+ JMenuItem realplayMenuItem = new JMenuItem(Res.string().getStartRealPlay());
+ JMenuItem stopRealplayMenuItem = new JMenuItem(Res.string().getStopRealPlay());
+ JMenuItem startTalkMenuItem = new JMenuItem(Res.string().getStartTalk());
+ JMenuItem stopTalkMenuItem = new JMenuItem(Res.string().getStopTalk());
+ JMenuItem captureMenuItem = new JMenuItem(Res.string().getRemoteCapture());
+
+ if(tree.getLastSelectedPathComponent() instanceof DeviceTreeNode) { // 右击设备节点
+ DeviceTreeNode deviceTreeNode = (DeviceTreeNode)tree.getLastSelectedPathComponent();
+
+ if(deviceTreeNode!=null&&deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) { // 登陆
+ popupMenu.add(logoutMenuItem);
+ popupMenu.add(deleteDeviceMenuItem);
+
+ if(deviceTreeNode == talkDeviceTreeNode) { // 对讲
+ popupMenu.add(stopTalkMenuItem);
+ } else { // 停止对讲
+ popupMenu.add(startTalkMenuItem);
+ }
+ } else { // 未登陆
+ popupMenu.add(modifyDeviceMenuItem);
+ popupMenu.add(deleteDeviceMenuItem);
+ }
+ } else if(tree.getLastSelectedPathComponent() instanceof ChannelTreeNode) { // 右击通道节点
+ ChannelTreeNode channelTreeNode = (ChannelTreeNode)tree.getLastSelectedPathComponent();
+
+ if(channelTreeNode == realplayChannelTreeNode) { // 拉流
+ popupMenu.add(stopRealplayMenuItem);
+ } else { // 未拉流
+ popupMenu.add(realplayMenuItem);
+ }
+
+ popupMenu.add(captureMenuItem);
+ } else { // 右键空白区域
+ popupMenu.add(addDeviceMenuItem);
+ popupMenu.add(clearDeviceMenuItem);
+ popupMenu.add(importDeviceMenuItem);
+ popupMenu.add(exportDeviceMenuItem);
+
+ logoutBtn.setEnabled(false);
+ modifyDeviceBtn.setEnabled(false);
+ deleteDeviceBtn.setEnabled(false);
+ startRealPlayBtn.setEnabled(false);
+ stopRealPlayBtn.setEnabled(false);
+ startTalkBtn.setEnabled(false);
+ stopTalkBtn.setEnabled(false);
+ captureBtn.setEnabled(false);
+ }
+
+ popupMenu.setDefaultLightWeightPopupEnabled(false);
+ popupMenu.show(component, x, y);
+
+ // 登出
+ logoutMenuItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ logout();
+ }
+ });
+ }
+ });
+
+ // 添加设备
+ addDeviceMenuItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ addDevice();
+ }
+ });
+
+ // 修改设备
+ modifyDeviceMenuItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ modifyDevice();
+ }
+ });
+
+ // 删除设备
+ deleteDeviceMenuItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ deleteDevice();
+ }
+ });
+
+ // 清空设备
+ clearDeviceMenuItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ clearDevice();
+ }
+ });
+
+ // 导入设备
+ importDeviceMenuItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ importDevice();
+ }
+ });
+
+ // 导出设备
+ exportDeviceMenuItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ exportDevice();
+ }
+ });
+
+ // 开始预览
+ realplayMenuItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ startRealplay();
+ }
+ });
+ }
+ });
+
+ // 停止预览
+ stopRealplayMenuItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ stopRealplay();
+ }
+ });
+ }
+ });
+
+ // 开始对讲
+ startTalkMenuItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ startTalk();
+ }
+ });
+ }
+ });
+
+ // 停止对讲
+ stopTalkMenuItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ stopTalk();
+ }
+ });
+ }
+ });
+
+ // 远程抓图
+ captureMenuItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ capture();
+ }
+ });
+ }
+
+ /**
+ * 实时预览面板
+ */
+ private class RealPlayPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public RealPlayPanel() {
+ BorderEx.set(this, "", 0);
+ setLayout(new BorderLayout());
+
+ JPanel realplayPanel = new JPanel();
+ JPanel picPanel = new JPanel();
+
+ add(realplayPanel, BorderLayout.NORTH);
+ add(picPanel, BorderLayout.CENTER);
+
+ // 实时预览面板
+ realplayPanel.setBorder(BorderFactory.createTitledBorder(Res.string().getRealplay()));
+ Dimension dimension = new Dimension();
+ dimension.height = 250;
+ realplayPanel.setPreferredSize(dimension);
+ realplayPanel.setLayout(new BorderLayout());
+
+ realplayWindowPanel = new Panel();
+ realplayWindowPanel.setBackground(Color.GRAY);
+ realplayPanel.add(realplayWindowPanel, BorderLayout.CENTER);
+
+ // 抓图面板
+ picPanel.setBorder(BorderFactory.createTitledBorder(Res.string().getCapturePicture()));
+ picPanel.setLayout(new BorderLayout());
+
+ capturePanel = new PaintPanel();
+
+ picPanel.add(capturePanel, BorderLayout.CENTER);
+ }
+ }
+
+ /**
+ * 监听和设备管理面板
+ */
+ private class ListenDeviceManagerPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public ListenDeviceManagerPanel() {
+ setLayout(new BorderLayout());
+ Dimension dimension = new Dimension();
+ dimension.width = 230;
+ setPreferredSize(dimension);
+
+ JPanel listenPanel = new JPanel();
+ JPanel deviceManagerPanel = new JPanel();
+ JPanel functionOperatePanel = new JPanel();
+
+ add(listenPanel, BorderLayout.NORTH);
+ add(deviceManagerPanel, BorderLayout.CENTER);
+ add(functionOperatePanel, BorderLayout.SOUTH);
+
+ ///// 监听面板 /////
+ listenPanel.setBorder(BorderFactory.createTitledBorder(Res.string().getAutoRegisterListen()));
+ listenPanel.setPreferredSize(new Dimension(200, 110));
+ listenPanel.setLayout(new FlowLayout());
+
+ JLabel ipLabel = new JLabel(Res.string().getRegisterAddress(), JLabel.CENTER);
+ JLabel portLabel = new JLabel(Res.string().getRegisterPort(), JLabel.CENTER);
+
+ ipLabel.setPreferredSize(new Dimension(100, 21));
+ portLabel.setPreferredSize(new Dimension(100, 21));
+
+ ipTextField = new JTextField(getHostAddress());
+ portTextField = new JTextField("9500");
+
+ ipTextField.setPreferredSize(new Dimension(100, 21));
+ portTextField.setPreferredSize(new Dimension(100, 21));
+
+ startListenBtn = new JButton(Res.string().getStartListen());
+ stopListenBtn = new JButton(Res.string().getStopListen());
+
+ startListenBtn.setPreferredSize(new Dimension(105, 21));
+ stopListenBtn.setPreferredSize(new Dimension(100, 21));
+ stopListenBtn.setEnabled(false);
+
+ listenPanel.add(ipLabel);
+ listenPanel.add(ipTextField);
+ listenPanel.add(portLabel);
+ listenPanel.add(portTextField);
+ listenPanel.add(startListenBtn);
+ listenPanel.add(stopListenBtn);
+
+ ///// 设备管理 ////////
+ deviceManagerPanel.setBorder(BorderFactory.createTitledBorder(Res.string().getDeviceManager()));
+ deviceManagerPanel.setLayout(new FlowLayout());
+
+ logoutBtn = new JButton(Res.string().getLogout());
+ addDeviceBtn = new JButton(Res.string().getAddDevice());
+ modifyDeviceBtn = new JButton(Res.string().getModifyDevice());
+ deleteDeviceBtn = new JButton(Res.string().getDeleteDevice());
+ clearDeviceBtn = new JButton(Res.string().getClearDevice());
+ importDeviceBtn = new JButton(Res.string().getImportDevice());
+ exportDeviceBtn = new JButton(Res.string().getExportDevice());
+
+ logoutBtn.setPreferredSize(new Dimension(210, 21));
+ addDeviceBtn.setPreferredSize(new Dimension(210, 21));
+ modifyDeviceBtn.setPreferredSize(new Dimension(210, 21));
+ deleteDeviceBtn.setPreferredSize(new Dimension(210, 21));
+ clearDeviceBtn.setPreferredSize(new Dimension(210, 21));
+ importDeviceBtn.setPreferredSize(new Dimension(210, 21));
+ exportDeviceBtn.setPreferredSize(new Dimension(210, 21));
+
+ logoutBtn.setEnabled(false);
+ modifyDeviceBtn.setEnabled(false);
+ deleteDeviceBtn.setEnabled(false);
+
+ deviceManagerPanel.add(logoutBtn);
+ deviceManagerPanel.add(addDeviceBtn);
+ deviceManagerPanel.add(modifyDeviceBtn);
+ deviceManagerPanel.add(deleteDeviceBtn);
+ deviceManagerPanel.add(clearDeviceBtn);
+ deviceManagerPanel.add(importDeviceBtn);
+ deviceManagerPanel.add(exportDeviceBtn);
+
+ ///// 基本操作 ////////
+ functionOperatePanel.setBorder(BorderFactory.createTitledBorder(Res.string().getFunctionOperate()));
+ functionOperatePanel.setLayout(new FlowLayout());
+ Dimension dimension1 = new Dimension();
+ dimension1.height = 160;
+ functionOperatePanel.setPreferredSize(dimension1);
+
+ startRealPlayBtn = new JButton(Res.string().getStartRealPlay());
+ stopRealPlayBtn = new JButton(Res.string().getStopRealPlay());
+ startTalkBtn = new JButton(Res.string().getStartTalk());
+ stopTalkBtn = new JButton(Res.string().getStopTalk());
+ captureBtn = new JButton(Res.string().getRemoteCapture());
+
+ startRealPlayBtn.setPreferredSize(new Dimension(210, 21));
+ stopRealPlayBtn.setPreferredSize(new Dimension(210, 21));
+ startTalkBtn.setPreferredSize(new Dimension(210, 21));
+ stopTalkBtn.setPreferredSize(new Dimension(210, 21));
+ captureBtn.setPreferredSize(new Dimension(210, 21));
+
+ startRealPlayBtn.setEnabled(false);
+ stopRealPlayBtn.setEnabled(false);
+ startTalkBtn.setEnabled(false);
+ stopTalkBtn.setEnabled(false);
+ captureBtn.setEnabled(false);
+
+ functionOperatePanel.add(startRealPlayBtn);
+ functionOperatePanel.add(stopRealPlayBtn);
+ functionOperatePanel.add(startTalkBtn);
+ functionOperatePanel.add(stopTalkBtn);
+ functionOperatePanel.add(captureBtn);
+
+ // 开启监听服务
+ startListenBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ if(ipTextField.getText().equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getRegisterAddress(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(portTextField.getText().equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getRegisterPort(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(AutoRegisterModule.startServer(ipTextField.getText(),
+ Integer.parseInt(portTextField.getText()),
+ servicCallback)) {
+ startListenBtn.setEnabled(false);
+ stopListenBtn.setEnabled(true);
+ }
+ }
+ });
+
+ // 停止监听服务
+ stopListenBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ if(AutoRegisterModule.stopServer()) {
+ startListenBtn.setEnabled(true);
+ stopListenBtn.setEnabled(false);
+ }
+ }
+ });
+
+ // 添加设备
+ addDeviceBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ addDevice();
+ }
+ });
+
+ // 修改设备
+ modifyDeviceBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ modifyDevice();
+ }
+ });
+
+ // 删除单个
+ deleteDeviceBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ deleteDevice();
+ }
+ });
+
+ // 清空设备
+ clearDeviceBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ clearDevice();
+ }
+ });
+
+ // 导入文件
+ importDeviceBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ importDevice();
+ }
+ });
+
+ // 导出文件
+ exportDeviceBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ exportDevice();
+ }
+ });
+
+ // 登出
+ logoutBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ logout();
+ }
+ });
+ }
+ });
+
+ // 开始拉流
+ startRealPlayBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ startRealplay();
+ }
+ });
+ }
+ });
+
+ // 停止拉流
+ stopRealPlayBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ stopRealplay();
+ }
+ });
+ }
+ });
+
+ // 开始对讲
+ startTalkBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ startTalk();
+ }
+ });
+ }
+ });
+
+ // 停止对讲
+ stopTalkBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ stopTalk();
+ }
+ });
+ }
+ });
+
+ // 抓图
+ captureBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ capture();
+ }
+ });
+ }
+ }
+
+ /**
+ * 添加设备
+ */
+ private void addDevice() {
+ isExist = false;
+
+ AddDeviceDialog addDeviceDialog = new AddDeviceDialog();
+
+ addDeviceDialog.addDeviceManagerListener(new DeviceManagerListener() {
+ @Override
+ public void onDeviceManager(String deviceId, String username,
+ String password) {
+ if(!deviceId.equals("")) {
+ // 最大支持导入100个
+ if(rootNode.getChildCount() >= 100) {
+ JOptionPane.showMessageDialog(null, Res.string().getMaximumSupport(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ // 判断设备是否存在
+ for(int i = 0; i < rootNode.getChildCount(); i++) {
+ DeviceTreeNode childNode = (DeviceTreeNode)rootNode.getChildAt(i);
+
+ if(deviceId.equals(childNode.getDeviceInfo().getDevcieId())) {
+ isExist = true;
+ JOptionPane.showMessageDialog(null, Res.string().getAlreadyExisted(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ break;
+ }
+ }
+
+ // 不存在,可以添加
+ if(!isExist) {
+ DEVICE_INFO deviceInfo = new DEVICE_INFO();
+ deviceInfo.setDevcieId(deviceId);
+ deviceInfo.setUsername(username);
+ deviceInfo.setPassword(password);
+
+ DeviceTreeNode childNode = new DeviceTreeNode();
+ childNode.setDeviceInfo(deviceInfo);
+ childNode.setUserObject(deviceId);
+
+ rootNode.add(childNode);
+
+ tree.expandPath(new TreePath(rootNode));
+ tree.updateUI();
+ tree.setCellRenderer(treeCellRender);
+
+ JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ }
+ }
+ }
+ });
+
+ addDeviceDialog.setVisible(true);
+ }
+
+ /**
+ * 修改设备
+ */
+ private void modifyDevice() {
+ isExist = false;
+
+ // 选中的设备节点
+ final DeviceTreeNode deviceTreeNode = (DeviceTreeNode)tree.getLastSelectedPathComponent();
+
+ if(deviceTreeNode == null) {
+ return;
+ }
+
+ ModifyDeviceDialog modifyDeviceDialog = new ModifyDeviceDialog(deviceTreeNode.getDeviceInfo().devcieId, deviceTreeNode.getDeviceInfo().username, deviceTreeNode.getDeviceInfo().password);
+
+ modifyDeviceDialog.addDeviceManagerListener(new DeviceManagerListener() {
+ @Override
+ public void onDeviceManager(String deviceId, String username, String password) {
+ if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getDeviceLogined(), Res.string().getErrorMessage(), JOptionPane.INFORMATION_MESSAGE);
+ return;
+ }
+
+ if(!deviceId.equals("")) {
+ // 设备ID变化,循环检查,查看是否已存在。 设备ID不变,即修改用户名和密码
+ if(!deviceId.equals(deviceTreeNode.getDeviceInfo().devcieId)) {
+ // 判断设备是否存在
+ for(int i = 0; i < rootNode.getChildCount(); i++) {
+ DeviceTreeNode childNode = (DeviceTreeNode)rootNode.getChildAt(i);
+
+ if(deviceId.equals(childNode.getDeviceInfo().getDevcieId())) {
+ isExist = true;
+ JOptionPane.showMessageDialog(null, Res.string().getAlreadyExisted(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ break;
+ }
+ }
+ }
+
+ if(!isExist) {
+ // 修改信息
+ deviceTreeNode.getDeviceInfo().setDevcieId(deviceId);
+ deviceTreeNode.getDeviceInfo().setUsername(username);
+ deviceTreeNode.getDeviceInfo().setPassword(password);
+
+ deviceTreeNode.setUserObject(deviceId);
+ deviceTreeNode.removeAllChildren();
+
+ tree.updateUI();
+
+ JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ }
+ }
+ }
+ });
+
+ modifyDeviceDialog.setVisible(true);
+ }
+
+ /**
+ * 删除单个设备
+ */
+ private void deleteDevice() {
+ // 判断是否选中
+ DeviceTreeNode deviceTreeNode = (DeviceTreeNode)tree.getLastSelectedPathComponent();
+
+ if(deviceTreeNode == null) {
+ return;
+ }
+
+ // 停止当前登录设备的对讲
+ if(deviceTreeNode == talkDeviceTreeNode) {
+ AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle);
+
+ talkDeviceTreeNode = null;
+ }
+
+ // 停止当前登录设备的拉流
+ for(int i = 0; i < deviceTreeNode.getChildCount(); i++) {
+ ChannelTreeNode channelTreeNode = (ChannelTreeNode)deviceTreeNode.getChildAt(i);
+ if(channelTreeNode == realplayChannelTreeNode) {
+ AutoRegisterModule.stopRealPlay(realplayHandle);
+ realplayWindowPanel.repaint();
+
+ realplayChannelTreeNode = null;
+
+ break;
+ }
+ }
+
+ // 登出
+ if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) {
+ AutoRegisterModule.logout(deviceTreeNode.getDeviceInfo().getLoginHandle());
+
+ logoutBtn.setEnabled(false);
+ modifyDeviceBtn.setEnabled(true);
+ }
+
+ deviceTreeNode.setUserObject(deviceTreeNode.getDeviceInfo().getDevcieId());
+
+ treeModel.removeNodeFromParent(deviceTreeNode);
+ tree.updateUI();
+
+ modifyDeviceBtn.setEnabled(false);
+ deleteDeviceBtn.setEnabled(false);
+ }
+
+ /**
+ * 清空设备
+ */
+ private void clearDevice() {
+ // 停止拉流
+ if(realplayHandle.longValue() != 0) {
+ AutoRegisterModule.stopRealPlay(realplayHandle);
+ realplayWindowPanel.repaint();
+
+ realplayChannelTreeNode = null;
+ }
+
+ // 停止对讲
+ if(AutoRegisterModule.m_hTalkHandle.longValue() != 0) {
+ AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle);
+
+ talkDeviceTreeNode = null;
+ }
+
+ // 登出所有设备
+ for(int i = 0; i < rootNode.getChildCount(); i++) {
+ DeviceTreeNode deviceTreeNode = (DeviceTreeNode)rootNode.getChildAt(i);
+ if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) {
+ AutoRegisterModule.logout(deviceTreeNode.getDeviceInfo().getLoginHandle());
+ }
+ }
+
+ capturePanel.setOpaque(true);
+ capturePanel.repaint();
+
+ rootNode.removeAllChildren();
+ tree.updateUI();
+
+ logoutBtn.setEnabled(false);
+ modifyDeviceBtn.setEnabled(false);
+ deleteDeviceBtn.setEnabled(false);
+ startRealPlayBtn.setEnabled(false);
+ stopRealPlayBtn.setEnabled(false);
+ startTalkBtn.setEnabled(false);
+ stopTalkBtn.setEnabled(false);
+ captureBtn.setEnabled(false);
+ }
+
+ /**
+ * 导入文件
+ */
+ private void importDevice() {
+ jfc = new JFileChooser("./");
+ jfc.setMultiSelectionEnabled(false); //不可以拖选多个文件
+ jfc.setAcceptAllFileFilterUsed(false); //关掉显示所有
+ jfc.setDialogTitle(Res.string().getImportDevice());
+
+ //添加过滤器
+ jfc.addChoosableFileFilter(new FileFilter() {
+ public boolean accept(File f) {
+ if(f.getName().toLowerCase().endsWith("csv")
+ || f.isDirectory()) {
+ return true;
+ }
+ return false;
+ }
+ public String getDescription() {
+ return ".csv";
+ }
+ });
+
+ if(jfc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
+ String path = jfc.getSelectedFile().getAbsolutePath();
+
+ if(!path.endsWith("csv")) {
+ path += ".csv";
+ }
+ importFile(path, "GB2312");
+ }
+ }
+
+ /**
+ * 导出文件
+ */
+ private void exportDevice() {
+ jfc = new JFileChooser("./");
+ jfc.setMultiSelectionEnabled(false); //不可以拖选多个文件
+ jfc.setAcceptAllFileFilterUsed(false); //关掉显示所有
+ jfc.setDialogTitle(Res.string().getExportDevice());
+
+ //添加过滤器
+ jfc.addChoosableFileFilter(new FileFilter() {
+ public boolean accept(File f) {
+ if(f.getName().toLowerCase().endsWith("csv")
+ || f.isDirectory()) {
+ return true;
+ }
+ return false;
+ }
+ public String getDescription() {
+ return ".csv";
+ }
+ });
+
+ if(jfc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
+
+ String path = jfc.getSelectedFile().toString();
+ if(!path.endsWith("csv")) {
+ path += ".csv";
+ }
+ System.out.println(path);
+ File file = new File(path);
+
+ if(file.exists()) { // 已存在文件
+ int result = JOptionPane.showConfirmDialog(null, Res.string().getWhetherNoToCover(), Res.string().getPromptMessage(), JOptionPane.YES_NO_OPTION);
+ if(result == JOptionPane.YES_OPTION) { // 覆盖
+ if(!file.renameTo(file)) { // 被使用
+ JOptionPane.showMessageDialog(null, Res.string().getFileOpened(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ } else { // 未被使用
+ exportFile(file);
+ }
+ }
+ } else { // 新建文件
+ exportFile(file);
+ }
+ }
+ }
+
+ /**
+ * 登出设备功能
+ */
+ private void logout() {
+ // 选中的设备节点
+ DeviceTreeNode deviceTreeNode = (DeviceTreeNode)tree.getLastSelectedPathComponent();
+
+ if(deviceTreeNode == null) {
+ return;
+ }
+
+ // 停止当前登录设备的对讲
+ if(deviceTreeNode == talkDeviceTreeNode) {
+ AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle);
+
+ talkDeviceTreeNode = null;
+ }
+
+ // 停止当前登录设备的拉流
+ for(int i = 0; i < deviceTreeNode.getChildCount(); i++) {
+ ChannelTreeNode channelTreeNode = (ChannelTreeNode)deviceTreeNode.getChildAt(i);
+ if(channelTreeNode == realplayChannelTreeNode) {
+ AutoRegisterModule.stopRealPlay(realplayHandle);
+ realplayWindowPanel.repaint();
+
+ realplayChannelTreeNode = null;
+
+ break;
+ }
+ }
+
+ // 登出
+ if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) {
+ AutoRegisterModule.logout(deviceTreeNode.getDeviceInfo().getLoginHandle());
+
+ logoutBtn.setEnabled(false);
+ modifyDeviceBtn.setEnabled(true);
+ }
+
+ deviceTreeNode.setUserObject(deviceTreeNode.getDeviceInfo().getDevcieId());
+ deviceTreeNode.removeAllChildren();
+
+ tree.updateUI();
+ }
+
+ /**
+ * 开始拉流功能
+ */
+ private void startRealplay() {
+ // 选中的通道节点
+ ChannelTreeNode channelTreeNode = (ChannelTreeNode)tree.getLastSelectedPathComponent();
+
+ if(channelTreeNode == null) {
+ return;
+ }
+
+ // 通道节点对应的设备节点
+ DeviceTreeNode deviceTreeNode = (DeviceTreeNode)channelTreeNode.getParent();
+
+ // 判断所有设备有没有拉流
+ if(realplayHandle.longValue() != 0) {
+ AutoRegisterModule.stopRealPlay(realplayHandle);
+ realplayWindowPanel.repaint();
+
+ realplayChannelTreeNode = null;
+ }
+
+ // 选中通道拉流
+ realplayHandle = AutoRegisterModule.startRealPlay(deviceTreeNode.getDeviceInfo().getLoginHandle(), channelTreeNode.getChn() - 1, 0, realplayWindowPanel);
+
+ if(realplayHandle.longValue() != 0) {
+ startRealPlayBtn.setEnabled(false);
+ stopRealPlayBtn.setEnabled(true);
+
+ realplayChannelTreeNode = channelTreeNode;
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getRealplay() + Res.string().getFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+
+ tree.updateUI();
+ }
+
+ /**
+ * 停止拉流功能
+ */
+ private void stopRealplay() {
+ if(realplayHandle.longValue() != 0) {
+ AutoRegisterModule.stopRealPlay(realplayHandle);
+ realplayWindowPanel.repaint();
+
+ realplayChannelTreeNode = null;
+
+ startRealPlayBtn.setEnabled(true);
+ stopRealPlayBtn.setEnabled(false);
+ }
+ tree.updateUI();
+ }
+
+ /**
+ * 开始对讲
+ */
+ private void startTalk() {
+ // 选中的设备节点
+ DeviceTreeNode deviceTreeNode = (DeviceTreeNode)tree.getLastSelectedPathComponent();
+
+ if(deviceTreeNode == null) {
+ return;
+ }
+
+ // 判断所有设备有没有对讲
+ if(AutoRegisterModule.m_hTalkHandle.longValue() != 0) {
+ AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle);
+
+ talkDeviceTreeNode = null;
+ }
+
+ // 选中设备对讲
+ if(AutoRegisterModule.startTalk(deviceTreeNode.getDeviceInfo().getLoginHandle())) {
+ startTalkBtn.setEnabled(false);
+ stopTalkBtn.setEnabled(true);
+
+ talkDeviceTreeNode = deviceTreeNode;
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getTalk() + Res.string().getFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+
+ tree.updateUI();
+ }
+
+ /**
+ * 停止对讲
+ */
+ private void stopTalk() {
+ // 判断设备的通道有没有对讲
+ if(AutoRegisterModule.m_hTalkHandle.longValue() != 0) {
+ AutoRegisterModule.stopTalk(AutoRegisterModule.m_hTalkHandle);
+
+ talkDeviceTreeNode = null;
+
+ startTalkBtn.setEnabled(true);
+ stopTalkBtn.setEnabled(false);
+ }
+
+ tree.updateUI();
+ }
+
+ /**
+ * 抓图功能
+ */
+ private void capture() {
+ // 选中的通道节点
+ ChannelTreeNode channelTreeNode = (ChannelTreeNode)tree.getLastSelectedPathComponent();
+
+ if(channelTreeNode == null) {
+ return;
+ }
+
+ // 通道节点对应的设备节点
+ DeviceTreeNode deviceTreeNode = (DeviceTreeNode)channelTreeNode.getParent();
+
+ AutoRegisterModule.snapPicture(deviceTreeNode.getDeviceInfo().getLoginHandle(), channelTreeNode.getChn() - 1);
+ }
+
+ /**
+ * 侦听服务器回调函数
+ */
+ public class ServiceCB implements fServiceCallBack {
+ @Override
+ public int invoke(LLong lHandle, final String pIp, final int wPort,
+ int lCommand, Pointer pParam, int dwParamLen,
+ Pointer dwUserData) {
+
+ // 将 pParam 转化为序列号
+ byte[] buffer = new byte[dwParamLen];
+ pParam.read(0, buffer, 0, dwParamLen);
+ String deviceId = "";
+ try {
+ deviceId = new String(buffer, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ System.out.printf("Register Device Info [Device address %s][port %s][DeviceID %s] \n", pIp, wPort, deviceId);
+ switch(lCommand) {
+ case EM_LISTEN_TYPE.NET_DVR_DISCONNECT: { // 验证期间设备断线回调
+ for(int i = 0; i < rootNode.getChildCount(); i++) {
+ if(deviceId.equals(((DeviceTreeNode)rootNode.getChildAt(i)).getDeviceInfo().getDevcieId())) {
+ DeviceTreeNode deviceTreeNode = (DeviceTreeNode)rootNode.getChildAt(i);
+
+ deviceTreeNode.getDeviceInfo().setDeviceIp("");
+ deviceTreeNode.getDeviceInfo().setDevicePort(0);
+
+ break;
+ }
+ }
+
+ break;
+ }
+ case EM_LISTEN_TYPE.NET_DVR_SERIAL_RETURN: { // 设备注册携带序列号
+ for(int i = 0; i < rootNode.getChildCount(); i++) {
+ if(deviceId.equals(((DeviceTreeNode)rootNode.getChildAt(i)).getDeviceInfo().getDevcieId())) {
+ final DeviceTreeNode deviceTreeNode = (DeviceTreeNode)rootNode.getChildAt(i);
+
+ deviceTreeNode.getDeviceInfo().setDeviceIp(pIp);
+ deviceTreeNode.getDeviceInfo().setDevicePort(wPort);
+
+ try {
+ Thread.sleep(20);
+ } catch (InterruptedException e1) {
+ e1.printStackTrace();
+ }
+
+ new SwingWorker() {
+ @Override
+ protected LLong doInBackground() {
+ return login(deviceTreeNode);
+ }
+
+ @Override
+ protected void done() {
+ try {
+ if(get() == null) {
+ return;
+ }
+
+ if(get().longValue() != 0) {
+// deviceTreeNode.getDeviceInfo().setDeviceIp(pIp);
+// deviceTreeNode.getDeviceInfo().setDevicePort(wPort);
+ deviceTreeNode.getDeviceInfo().setLoginHandle(get());
+
+ for(int i = 0; i < AutoRegisterModule.m_stDeviceInfo.byChanNum; i++) {
+ ChannelTreeNode chnNode = new ChannelTreeNode();
+ chnNode.setChn(i + 1);
+ chnNode.setUserObject(Res.string().getChannel() + " " + String.valueOf(i + 1));
+
+ deviceTreeNode.add(chnNode);
+ }
+
+ deviceTreeNode.setUserObject(deviceTreeNode.getDeviceInfo().getDevcieId() + " (" + deviceTreeNode.getDeviceInfo().getDeviceIp() + ")");
+ tree.expandPath(new TreePath(rootNode));
+ tree.setCellRenderer(treeCellRender);
+ tree.updateUI();
+ }
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ e.printStackTrace();
+ }
+ }
+ }.execute();
+
+ break;
+ }
+ }
+
+ break;
+ }
+ default:
+ break;
+
+ }
+
+ return 0;
+ }
+ }
+
+ /**
+ * 登录设备
+ * @param deviceIp 登录设备IP
+ * @param port 登录设备端口号
+ * @param deviceTreeNode 登录设备设备节点
+ */
+ private LLong login(DeviceTreeNode deviceTreeNode) {
+ // 判断设备是否登录
+ if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) {
+ return null;
+ }
+
+ LLong loginHandleLong = AutoRegisterModule.login(deviceTreeNode.getDeviceInfo().getDeviceIp(),
+ deviceTreeNode.getDeviceInfo().getDevicePort(),
+ deviceTreeNode.getDeviceInfo().getUsername(),
+ deviceTreeNode.getDeviceInfo().getPassword(),
+ deviceTreeNode.getDeviceInfo().getDevcieId());
+ if(loginHandleLong.longValue() != 0) {
+ System.out.printf("Login Success [Device IP %s][port %d][DeviceID %s]\n", deviceTreeNode.getDeviceInfo().getDeviceIp(),
+ deviceTreeNode.getDeviceInfo().getDevicePort(), deviceTreeNode.getDeviceInfo().getDevcieId());
+ } else {
+ System.err.printf("Login Failed[Device IP %s] [Port %d][DeviceID %s] %s", deviceTreeNode.getDeviceInfo().getDeviceIp(),
+ deviceTreeNode.getDeviceInfo().getDevicePort(), deviceTreeNode.getDeviceInfo().getDevcieId(), ToolKits.getErrorCodePrint());
+ }
+
+ return loginHandleLong;
+ }
+
+ /**
+ * 设备节点
+ */
+ private class DeviceTreeNode extends DefaultMutableTreeNode {
+ private static final long serialVersionUID = 1L;
+
+ private DEVICE_INFO deviceInfo; // 信息
+
+ public DeviceTreeNode() {
+
+ }
+
+ @Override
+ public Object getUserObject() {
+ return super.getUserObject();
+ }
+
+ @Override
+ public void setUserObject(Object arg0) {
+ super.setUserObject(arg0);
+ }
+
+ public DEVICE_INFO getDeviceInfo() {
+ return deviceInfo;
+ }
+
+ public void setDeviceInfo(DEVICE_INFO deviceInfo) {
+ this.deviceInfo = deviceInfo;
+ }
+ }
+
+ /**
+ * 通道节点
+ */
+ private class ChannelTreeNode extends DefaultMutableTreeNode {
+ private static final long serialVersionUID = 1L;
+
+ private int nChn = 0;
+
+ public ChannelTreeNode() {
+
+ }
+
+ public int getChn() {
+ return nChn;
+ }
+ public void setChn(int nChn) {
+ this.nChn = nChn;
+ }
+ }
+
+ /**
+ * 设备信息
+ */
+ private class DEVICE_INFO {
+ private String devcieId = "";
+ private String username = "";
+ private String password = "";
+ private String deviceIp = "";
+ private int port = 0;
+ private LLong loginHandle = new LLong(0);
+
+ public String getDevcieId() {
+ return devcieId;
+ }
+ public void setDevcieId(String devcieId) {
+ this.devcieId = devcieId;
+ }
+
+ public String getDeviceIp() {
+ return deviceIp;
+ }
+ public void setDeviceIp(String deviceIp) {
+ this.deviceIp = deviceIp;
+ }
+
+ public int getDevicePort() {
+ return port;
+ }
+ public void setDevicePort(int port) {
+ this.port = port;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public LLong getLoginHandle() {
+ return loginHandle;
+ }
+ public void setLoginHandle(LLong loginHandle) {
+ this.loginHandle = loginHandle;
+ }
+ }
+
+ /**
+ * 自定义树的渲染器
+ */
+ private class TreeCellRender extends DefaultTreeCellRenderer {
+ private static final long serialVersionUID = 1L;
+
+ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,
+ boolean expanded, boolean leaf, int row, boolean hasFocus) {
+
+ super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
+
+ if(value instanceof DeviceTreeNode) {
+ setIcon(new ImageIcon("./libs/device.png"));
+
+ DeviceTreeNode deviceTreeNode = (DeviceTreeNode)value;
+
+ // 设备节点的字体颜色
+ if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) {
+ if(deviceTreeNode == talkDeviceTreeNode) {
+ setForeground(Color.RED);
+ } else {
+ setForeground(Color.GREEN);
+ }
+ } else {
+ setForeground(Color.BLACK);
+ }
+
+ if(selected) {
+ // 如果设备节点被选中,拉流按钮使能
+ startRealPlayBtn.setEnabled(false);
+ stopRealPlayBtn.setEnabled(false);
+ captureBtn.setEnabled(false);
+ deleteDeviceBtn.setEnabled(true);
+
+ // 设备节点被选中,登录时的使能
+ if(deviceTreeNode.getDeviceInfo().getLoginHandle().longValue() != 0) {
+ logoutBtn.setEnabled(true);
+ modifyDeviceBtn.setEnabled(false);
+
+ if(deviceTreeNode == talkDeviceTreeNode) {
+ startTalkBtn.setEnabled(false);
+ stopTalkBtn.setEnabled(true);
+ } else {
+ startTalkBtn.setEnabled(true);
+ stopTalkBtn.setEnabled(false);
+ }
+ } else { // 登出时的使能
+ logoutBtn.setEnabled(false);
+ modifyDeviceBtn.setEnabled(true);
+ startTalkBtn.setEnabled(false);
+ stopTalkBtn.setEnabled(false);
+ }
+ }
+ } else if(value instanceof ChannelTreeNode) {
+ setIcon(new ImageIcon("./libs/camera.png"));
+
+ ChannelTreeNode channelTreeNode = (ChannelTreeNode)value;
+
+ // 设置通道节点的字体颜色
+ if(channelTreeNode == realplayChannelTreeNode) {
+ setForeground(Color.RED);
+ } else {
+ setForeground(Color.BLACK);
+ }
+
+ if(selected) {
+ // 如果通道节点被选中,登出置灰
+ logoutBtn.setEnabled(false);
+ captureBtn.setEnabled(true);
+ modifyDeviceBtn.setEnabled(false);
+ deleteDeviceBtn.setEnabled(false);
+ startTalkBtn.setEnabled(false);
+ stopTalkBtn.setEnabled(false);
+
+ if(channelTreeNode == realplayChannelTreeNode) {
+ startRealPlayBtn.setEnabled(false);
+ stopRealPlayBtn.setEnabled(true);
+ } else {
+ startRealPlayBtn.setEnabled(true);
+ stopRealPlayBtn.setEnabled(false);
+ }
+ }
+ }
+
+ return this;
+ }
+ }
+
+ /**
+ * 导入csv文件
+ */
+ private void importFile(String filePath, String encoding) {
+ File file = new File(filePath);
+
+ if(!file.exists()) {
+ JOptionPane.showMessageDialog(null, Res.string().getFileNotExist(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ FileInputStream input = null;
+ InputStreamReader reader = null;
+ BufferedReader bReader = null;
+
+ try {
+ input = new FileInputStream(file);
+
+ if(encoding == null) {
+ reader = new InputStreamReader(input);
+ } else {
+ reader = new InputStreamReader(input, encoding);
+ }
+ bReader = new BufferedReader(reader);
+
+ // 头标题
+ String line = bReader.readLine();
+ String everyLine = "";
+
+ while((line = bReader.readLine()) != null) {
+ everyLine = line;
+
+ // 最大支持导入100个
+ if(rootNode.getChildCount() >= 100) {
+ return;
+ }
+
+ String[] infos = everyLine.split(",");
+
+ isExist = false;
+ if(!infos[0].equals("")) {
+ // 判断是否存在
+ for(int i = 0; i < rootNode.getChildCount(); i++) {
+ DeviceTreeNode childNode = (DeviceTreeNode)rootNode.getChildAt(i);
+ if(infos[0].equals(childNode.getDeviceInfo().getDevcieId())) {
+ isExist = true;
+ break;
+ }
+ }
+
+ // 不存在, 可以添加
+ if(!isExist) {
+ final DEVICE_INFO deviceInfo = new DEVICE_INFO();
+ deviceInfo.setDevcieId(infos[0]);
+ if(infos.length == 1) {
+ deviceInfo.setUsername("");
+ deviceInfo.setPassword("");
+ } else if(infos.length == 2) {
+ deviceInfo.setUsername(infos[1]);
+ deviceInfo.setPassword("");
+ } else if(infos.length == 3){
+ deviceInfo.setUsername(infos[1]);
+ deviceInfo.setPassword(infos[2]);
+ }
+
+ DeviceTreeNode childNode = new DeviceTreeNode();
+ childNode.setDeviceInfo(deviceInfo);
+ childNode.setUserObject(infos[0]);
+
+ rootNode.add(childNode);
+
+ tree.expandPath(new TreePath(rootNode));
+ tree.updateUI();
+ }
+ }
+ }
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if(null != bReader) {
+ try {
+ bReader.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ tree.setCellRenderer(treeCellRender);
+ JOptionPane.showMessageDialog(null, Res.string().getImportCompletion(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ }
+ }
+
+ /**
+ * 导出csv文件
+ */
+ private void exportFile(File file) {
+ FileOutputStream output = null;
+ OutputStreamWriter osWriter = null;
+ BufferedWriter bWriter = null;
+
+ try {
+ output = new FileOutputStream(file);
+ osWriter = new OutputStreamWriter(output, "GB2312");
+ bWriter = new BufferedWriter(osWriter);
+
+ // 写头标题
+ bWriter.write("DeviceId" + "," + "UserName" + "," + "Password");
+ bWriter.newLine();
+
+ // 写内容
+ for(int i = 0; i < rootNode.getChildCount(); i++) {
+ DeviceTreeNode childNode = (DeviceTreeNode)rootNode.getChildAt(i);
+ String deviceId = childNode.getDeviceInfo().getDevcieId();
+ String username = childNode.getDeviceInfo().getUsername();
+ String password = childNode.getDeviceInfo().getPassword();
+
+ bWriter.write(deviceId + "," + username + "," + password);
+ bWriter.newLine();
+ }
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if(null != bWriter) {
+ try {
+ bWriter.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ JOptionPane.showMessageDialog(null, Res.string().getExportCompletion(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ }
+ }
+
+ /**
+ * 抓图回调函数
+ */
+ public class CaptureReceiveCB implements NetSDKLib.fSnapRev{
+ BufferedImage bufferedImage = null;
+ public void invoke( LLong lLoginID, Pointer pBuf, int RevLen, int EncodeType, int CmdSerial, Pointer dwUser) {
+ if(pBuf != null && RevLen > 0) {
+ String strFileName = SavePath.getSavePath().getSaveCapturePath();
+
+ System.out.println("strFileName = " + strFileName);
+
+ byte[] buf = pBuf.getByteArray(0, RevLen);
+ ByteArrayInputStream byteArrInput = new ByteArrayInputStream(buf);
+ try {
+ bufferedImage = ImageIO.read(byteArrInput);
+ if(bufferedImage == null) {
+ return;
+ }
+ ImageIO.write(bufferedImage, "jpg", new File(strFileName));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ // 界面显示抓图
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ capturePanel.setOpaque(false);
+ capturePanel.setImage(bufferedImage);
+ capturePanel.repaint();
+ }
+ });
+ }
+ }
+ }
+
+ /**
+ * 获取本地地址
+ * @return
+ */
+ private String getHostAddress() {
+ String address = "";
+ try {
+ InetAddress inetAddress = InetAddress.getLocalHost();
+ address = inetAddress.getHostAddress();
+ } catch (UnknownHostException e) {
+ e.printStackTrace();
+ }
+
+ return address;
+ }
+
+ private DefaultMutableTreeNode rootNode;
+ private DefaultTreeModel treeModel;
+ private JTree tree;
+
+ private Panel realplayWindowPanel;
+ private PaintPanel capturePanel;
+
+ private JTextField ipTextField;
+ private JTextField portTextField;
+ private JButton startListenBtn;
+ private JButton stopListenBtn;
+ private JButton addDeviceBtn;
+ private JButton modifyDeviceBtn;
+ private JButton deleteDeviceBtn;
+ private JButton clearDeviceBtn;
+ private JButton importDeviceBtn;
+ private JButton exportDeviceBtn;
+ private JButton logoutBtn;
+
+ private JButton startRealPlayBtn;
+ private JButton stopRealPlayBtn;
+ private JButton startTalkBtn;
+ private JButton stopTalkBtn;
+ private JButton captureBtn;
+
+ private JFileChooser jfc;
+}
+
+public class AutoRegister {
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ AutoRegisterFrame demo = new AutoRegisterFrame();
+ demo.setVisible(true);
+ }
+ });
+ }
+};
diff --git a/src/main/java/com/netsdk/demo/frame/AutoRegister/DeviceConfigDialog.java b/src/main/java/com/netsdk/demo/frame/AutoRegister/DeviceConfigDialog.java
new file mode 100644
index 0000000..e006d29
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/AutoRegister/DeviceConfigDialog.java
@@ -0,0 +1,341 @@
+package com.netsdk.demo.frame.AutoRegister;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.UnsupportedEncodingException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.LoginPanel;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.AutoRegisterModule;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.NetSDKLib.CFG_DVRIP_INFO;
+
+/**
+ * 主动注册网络配置
+ */
+public class DeviceConfigDialog extends JDialog{
+ private static final long serialVersionUID = 1L;
+
+ private CFG_DVRIP_INFO info = null;
+ private ExecutorService executorService = Executors.newSingleThreadExecutor();
+
+ public DeviceConfigDialog(){
+ setTitle(Res.string().getDeviceConfig());
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(300, 380);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体
+
+ loginDevicePanel = new LoginDevicePanel();
+ ConfigDevicePanel configDevicePanel = new ConfigDevicePanel();
+
+ add(loginDevicePanel, BorderLayout.NORTH);
+ add(configDevicePanel, BorderLayout.CENTER);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e){
+ if(!executorService.isShutdown()) {
+ executorService.shutdown();
+ }
+
+ LoginModule.logout();
+ dispose();
+ }
+ });
+ }
+
+ /*
+ * 登陆设备面板
+ */
+ private class LoginDevicePanel extends LoginPanel {
+ private static final long serialVersionUID = 1L;
+
+ public LoginDevicePanel() {
+ BorderEx.set(this, Res.string().getLogin(), 2);
+ setLayout(new FlowLayout());
+ Dimension dimension = new Dimension();
+ dimension.height = 180;
+ setPreferredSize(dimension);
+
+ ipLabel.setPreferredSize(new Dimension(100, 21));
+ portLabel.setPreferredSize(new Dimension(100, 21));
+ nameLabel.setPreferredSize(new Dimension(100, 21));
+ passwordLabel.setPreferredSize(new Dimension(100, 21));
+
+ ipLabel.setHorizontalAlignment(JLabel.CENTER);
+ portLabel.setHorizontalAlignment(JLabel.CENTER);
+ nameLabel.setHorizontalAlignment(JLabel.CENTER);
+ passwordLabel.setHorizontalAlignment(JLabel.CENTER);
+
+ ipTextArea.setPreferredSize(new Dimension(140, 21));
+ portTextArea.setPreferredSize(new Dimension(140, 21));
+ nameTextArea.setPreferredSize(new Dimension(140, 21));
+ passwordTextArea.setPreferredSize(new Dimension(140, 21));
+ loginBtn.setPreferredSize(new Dimension(120, 21));
+ logoutBtn.setPreferredSize(new Dimension(120, 21));
+
+ add(ipLabel);
+ add(ipTextArea);
+ add(portLabel);
+ add(portTextArea);
+ add(nameLabel);
+ add(nameTextArea);
+ add(passwordLabel);
+ add(passwordTextArea);
+ add(loginBtn);
+ add(logoutBtn);
+
+ // 登陆
+ loginBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ login();
+ }
+ });
+
+ // 登出
+ logoutBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ logout();
+ }
+ });
+ }
+ }
+
+ /*
+ * 配置设备面板
+ */
+ private class ConfigDevicePanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public ConfigDevicePanel() {
+ BorderEx.set(this, Res.string().getDeviceConfig(), 2);
+ setLayout(new FlowLayout());
+
+ enableCheckBox = new JCheckBox(Res.string().getEnable());
+ JLabel nullLabel = new JLabel();
+ JLabel autoRegisterIpLabel = new JLabel(Res.string().getRegisterAddress(), JLabel.CENTER);
+ JLabel autoRegisterPortLabel = new JLabel(Res.string().getRegisterPort(), JLabel.CENTER);
+ JLabel deviceIdLabel = new JLabel(Res.string().getDeviceID(), JLabel.CENTER);
+
+ enableCheckBox.setPreferredSize(new Dimension(80, 21));
+ nullLabel.setPreferredSize(new Dimension(120, 21));
+ autoRegisterIpLabel.setPreferredSize(new Dimension(100, 21));
+ autoRegisterPortLabel.setPreferredSize(new Dimension(100, 21));
+ deviceIdLabel.setPreferredSize(new Dimension(100, 21));
+
+ autoRegisterIpTextField = new JTextField();
+ autoRegisterPortTextField = new JTextField();
+ deviceIdTextField = new JTextField();
+
+ autoRegisterIpTextField.setPreferredSize(new Dimension(140, 21));
+ autoRegisterPortTextField.setPreferredSize(new Dimension(140, 21));
+ deviceIdTextField.setPreferredSize(new Dimension(140, 21));
+
+ getBtn = new JButton(Res.string().getGet());
+ setBtn = new JButton(Res.string().getSet());
+
+ getBtn.setPreferredSize(new Dimension(120, 21));
+ setBtn.setPreferredSize(new Dimension(120, 21));
+
+ add(enableCheckBox);
+ add(nullLabel);
+ add(autoRegisterIpLabel);
+ add(autoRegisterIpTextField);
+ add(autoRegisterPortLabel);
+ add(autoRegisterPortTextField);
+ add(deviceIdLabel);
+ add(deviceIdTextField);
+ add(getBtn);
+ add(setBtn);
+
+ enableCheckBox.setSelected(true);
+ enableCheckBox.setEnabled(false);
+ getBtn.setEnabled(false);
+ setBtn.setEnabled(false);
+ autoRegisterIpTextField.setEnabled(false);
+ autoRegisterPortTextField.setEnabled(false);
+ deviceIdTextField.setEnabled(false);
+
+ // 获取
+ getBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ executorService.execute(new Runnable() {
+ @Override
+ public void run() {
+ getBtn.setEnabled(false);
+ }
+ });
+
+ executorService.execute(new Runnable() {
+ @Override
+ public void run() {
+ getConfig();
+ }
+ });
+ }
+ });
+
+ // 设置
+ setBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ executorService.execute(new Runnable() {
+ @Override
+ public void run() {
+ setBtn.setEnabled(false);
+ }
+ });
+
+ executorService.execute(new Runnable() {
+ @Override
+ public void run() {
+ setConfig();
+ }
+ });
+ }
+ });
+ }
+ }
+
+ // 登陆
+ private void login() {
+ if(loginDevicePanel.checkLoginText()) {
+ if(LoginModule.login(loginDevicePanel.ipTextArea.getText(),
+ Integer.parseInt(loginDevicePanel.portTextArea.getText()),
+ loginDevicePanel.nameTextArea.getText(),
+ new String(loginDevicePanel.passwordTextArea.getPassword()))) {
+ loginDevicePanel.setButtonEnable(true);
+ enableCheckBox.setEnabled(true);
+ getBtn.setEnabled(true);
+ setBtn.setEnabled(true);
+ autoRegisterIpTextField.setEnabled(true);
+ autoRegisterPortTextField.setEnabled(true);
+ deviceIdTextField.setEnabled(true);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ }
+
+ // 登出
+ private void logout() {
+ LoginModule.logout();
+ loginDevicePanel.setButtonEnable(false);
+ enableCheckBox.setEnabled(false);
+ getBtn.setEnabled(false);
+ setBtn.setEnabled(false);
+ autoRegisterIpTextField.setEnabled(false);
+ autoRegisterPortTextField.setEnabled(false);
+ deviceIdTextField.setEnabled(false);
+ autoRegisterIpTextField.setText("");
+ autoRegisterPortTextField.setText("");
+ deviceIdTextField.setText("");
+ }
+
+ // 获取
+ private void getConfig() {
+ info = AutoRegisterModule.getDVRIPConfig(LoginModule.m_hLoginHandle);
+ if(info == null) {
+ autoRegisterIpTextField.setText("");
+ autoRegisterPortTextField.setText("");
+ deviceIdTextField.setText("");
+ JOptionPane.showMessageDialog(null, Res.string().getGet() + Res.string().getFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ } else {
+ if(info.stuRegisters[0].bEnable == 1) {
+ enableCheckBox.setSelected(true);
+ } else {
+ enableCheckBox.setSelected(false);
+ }
+
+ autoRegisterIpTextField.setText(new String(info.stuRegisters[0].stuServers[0].szAddress).trim());
+ autoRegisterPortTextField.setText(String.valueOf(info.stuRegisters[0].stuServers[0].nPort));
+ try {
+ deviceIdTextField.setText(new String(info.stuRegisters[0].szDeviceID, "GBK").trim());
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ }
+ getBtn.setEnabled(true);
+ }
+
+ /**
+ * 设置(在获取的基础上配置)
+ */
+ private void setConfig() {
+ info = AutoRegisterModule.getDVRIPConfig(LoginModule.m_hLoginHandle);
+ if(autoRegisterIpTextField.getText().equals("")) {
+ setBtn.setEnabled(true);
+ JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getRegisterAddress(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(autoRegisterPortTextField.getText().equals("")) {
+ setBtn.setEnabled(true);
+ JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getRegisterPort(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(deviceIdTextField.getText().equals("")) {
+ setBtn.setEnabled(true);
+ JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getDeviceID(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ // win下,中文需要转换为GBK
+ byte[] deviceId = null;
+ try {
+ deviceId = deviceIdTextField.getText().getBytes("GBK");
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ System.out.println("登录句柄"+LoginModule.m_hLoginHandle + "是否启用" + enableCheckBox.isSelected() + "ip" + autoRegisterIpTextField.getText() + "端口" + autoRegisterPortTextField.getText() + "设备id" + new String(deviceId));
+
+ if(AutoRegisterModule.setDVRIPConfig(LoginModule.m_hLoginHandle,
+ enableCheckBox.isSelected(),
+ autoRegisterIpTextField.getText(),
+ Integer.parseInt(autoRegisterPortTextField.getText()),
+ deviceId,
+ info)) {
+ JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getSet() + Res.string().getFailed() + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+
+ setBtn.setEnabled(true);
+ }
+
+ private LoginDevicePanel loginDevicePanel;
+
+ private JTextField autoRegisterIpTextField;
+ private JTextField autoRegisterPortTextField;
+ private JTextField deviceIdTextField;
+ private JCheckBox enableCheckBox;
+ private JButton getBtn;
+ private JButton setBtn;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/demo/frame/AutoRegister/ModifyDeviceDialog.java b/src/main/java/com/netsdk/demo/frame/AutoRegister/ModifyDeviceDialog.java
new file mode 100644
index 0000000..38ec6c5
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/AutoRegister/ModifyDeviceDialog.java
@@ -0,0 +1,146 @@
+package com.netsdk.demo.frame.AutoRegister;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JTextField;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.DeviceManagerListener;
+import com.netsdk.common.Res;
+
+/**
+ * 在树上修改设备
+ */
+public class ModifyDeviceDialog extends JDialog{
+ private static final long serialVersionUID = 1L;
+
+ private DeviceManagerListener listener;
+ public void addDeviceManagerListener(DeviceManagerListener listener) {
+ this.listener = listener;
+ }
+
+ private String deviceId = "";
+ private String username = "";
+ private String password = "";
+
+ public ModifyDeviceDialog(String deviceId, String username, String password){
+ setTitle(Res.string().getModifyDevice());
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(220, 180);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体
+
+ this.deviceId = deviceId;
+ this.username = username;
+ this.password = password;
+
+ ModifyDevicePanel addDevicePanel = new ModifyDevicePanel();
+ add(addDevicePanel, BorderLayout.CENTER);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e){
+ dispose();
+ }
+ });
+ }
+
+ /*
+ * 修改设备面板
+ */
+ private class ModifyDevicePanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public ModifyDevicePanel() {
+ BorderEx.set(this, "", 2);
+ setLayout(new FlowLayout());
+
+ JLabel deviceIdLabel = new JLabel(Res.string().getDeviceID(), JLabel.CENTER);
+ JLabel usernameLabel = new JLabel(Res.string().getUserName(), JLabel.CENTER);
+ JLabel passwordLabel = new JLabel(Res.string().getPassword(), JLabel.CENTER);
+
+ deviceIdLabel.setPreferredSize(new Dimension(60, 21));
+ usernameLabel.setPreferredSize(new Dimension(60, 21));
+ passwordLabel.setPreferredSize(new Dimension(60, 21));
+
+ deviceIdTextField = new JTextField();
+ usernameTextField = new JTextField();
+ passwordPasswordField = new JPasswordField();
+
+ deviceIdTextField.setPreferredSize(new Dimension(120, 20));
+ usernameTextField.setPreferredSize(new Dimension(120, 20));
+ passwordPasswordField.setPreferredSize(new Dimension(120, 20));
+
+ JButton modifyDeviceBtn = new JButton(Res.string().getModify());
+ JButton cancelBtn = new JButton(Res.string().getCancel());
+
+ modifyDeviceBtn.setPreferredSize(new Dimension(90, 21));
+ cancelBtn.setPreferredSize(new Dimension(90, 21));
+
+ add(deviceIdLabel);
+ add(deviceIdTextField);
+ add(usernameLabel);
+ add(usernameTextField);
+ add(passwordLabel);
+ add(passwordPasswordField);
+ add(modifyDeviceBtn);
+ add(cancelBtn);
+
+ deviceIdTextField.setText(deviceId);
+ usernameTextField.setText(username);
+ passwordPasswordField.setText(password);
+
+ // 修改
+ modifyDeviceBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ if(deviceIdTextField.getText().equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getDeviceID(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(usernameTextField.getText().equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getUserName(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if((new String(passwordPasswordField.getPassword()).trim()).equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getInput() + Res.string().getPassword(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ dispose();
+ listener.onDeviceManager(deviceIdTextField.getText(),
+ usernameTextField.getText(),
+ new String(passwordPasswordField.getPassword()).trim());
+ }
+ });
+
+ // 取消,关闭
+ cancelBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ dispose();
+ }
+ });
+ }
+ }
+
+ private JTextField deviceIdTextField;
+ private JTextField usernameTextField;
+ private JPasswordField passwordPasswordField;
+}
diff --git a/src/main/java/com/netsdk/demo/frame/CapturePicture.java b/src/main/java/com/netsdk/demo/frame/CapturePicture.java
new file mode 100644
index 0000000..b2bda30
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/CapturePicture.java
@@ -0,0 +1,475 @@
+package com.netsdk.demo.frame;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.Panel;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.util.Vector;
+
+import javax.imageio.ImageIO;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.border.EmptyBorder;
+
+import com.netsdk.common.*;
+import com.netsdk.demo.module.*;
+import com.netsdk.lib.*;
+import com.netsdk.lib.NetSDKLib.LLong;
+
+import com.sun.jna.CallbackThreadInitializer;
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+
+/**
+ * Capture Picture Demo
+ */
+class CapturePictureFrame extends JFrame{
+ private static final long serialVersionUID = 1L;
+
+ // device channel list
+ private Vector chnlist = new Vector();
+
+ // This field indicates whether the device is playing
+ private boolean bRealPlay = false;
+
+ // This field indicates whether the device is timing capture
+ private boolean bTimerCapture = false;
+
+ // device disconnect callback instance
+ private static DisConnect disConnect = new DisConnect();
+
+ // device reconnect callback instance
+ private static HaveReConnect haveReConnect = new HaveReConnect();
+
+ // realplay handle
+ public static LLong m_hPlayHandle = new LLong(0);
+
+ // capture picture frame (this)
+ private static JFrame frame = new JFrame();
+
+ public CapturePictureFrame() {
+ setTitle(Res.string().getCapturePicture());
+ setLayout(new BorderLayout());
+ pack();
+ setSize(800, 560);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ LoginModule.init(disConnect, haveReConnect); // init sdk
+
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ loginPanel = new LoginPanel();
+ realPanel = new RealPanel();
+ picPanel = new PICPanel();
+
+ add(loginPanel, BorderLayout.NORTH);
+ add(realPanel, BorderLayout.CENTER);
+ add(picPanel, BorderLayout.EAST);
+
+ loginPanel.addLoginBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if(loginPanel.checkLoginText()) {
+ if(login()) {
+ frame = ToolKits.getFrame(e);
+ frame.setTitle(Res.string().getCapturePicture() + " : " + Res.string().getOnline());
+ }
+ }
+ }
+ });
+
+ loginPanel.addLogoutBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ frame.setTitle(Res.string().getCapturePicture());
+ logout();
+ }
+ });
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ RealPlayModule.stopRealPlay(m_hPlayHandle);
+ LoginModule.logout();
+ LoginModule.cleanup();
+ dispose();
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+
+ /////////////////function///////////////////
+ // device disconnect callback class
+ // set it's instance by call CLIENT_Init, when device disconnect sdk will call it.
+ private static class DisConnect implements NetSDKLib.fDisConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getCapturePicture() + " : " + Res.string().getDisConnectReconnecting());
+ }
+ });
+ }
+ }
+
+ // device reconnect(success) callback class
+ // set it's instance by call CLIENT_SetAutoReconnect, when device reconnect success sdk will call it.
+ private static class HaveReConnect implements NetSDKLib.fHaveReConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getCapturePicture() + " : " + Res.string().getOnline());
+ }
+ });
+ }
+ }
+
+ public boolean login() {
+ Native.setCallbackThreadInitializer(m_CaptureReceiveCB,
+ new CallbackThreadInitializer(false, false, "snapPicture callback thread"));
+ if(LoginModule.login(loginPanel.ipTextArea.getText(),
+ Integer.parseInt(loginPanel.portTextArea.getText()),
+ loginPanel.nameTextArea.getText(),
+ new String(loginPanel.passwordTextArea.getPassword()))) {
+
+ loginPanel.setButtonEnable(true);
+ setButtonEnable(true);
+
+ for(int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) {
+ chnlist.add(Res.string().getChannel() + " " + String.valueOf(i));
+ }
+
+ chnComboBox.setModel(new DefaultComboBoxModel(chnlist));
+
+ CapturePictureModule.setSnapRevCallBack(m_CaptureReceiveCB);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ return true;
+ }
+
+ public void logout() {
+ if (bTimerCapture) {
+ CapturePictureModule.stopCapturePicture(chnComboBox.getSelectedIndex());
+ }
+ RealPlayModule.stopRealPlay(m_hPlayHandle);
+ LoginModule.logout();
+
+ loginPanel.setButtonEnable(false);
+ setButtonEnable(false);
+ realPlayWindow.repaint();
+ pictureShowWindow.setOpaque(true);
+ pictureShowWindow.repaint();
+
+ bRealPlay = false;
+ realplayBtn.setText(Res.string().getStartRealPlay());
+
+ for(int i = 0; i < LoginModule.m_stDeviceInfo.byChanNum; i++) {
+ chnlist.clear();
+ }
+
+ chnComboBox.setModel(new DefaultComboBoxModel());
+
+ bTimerCapture = false;
+ timerCaptureBtn.setText(Res.string().getTimerCapture());
+ }
+
+ /*
+ * realplay show and control panel
+ */
+ private class RealPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public RealPanel() {
+ BorderEx.set(this, Res.string().getRealplay(), 2);
+ setLayout(new BorderLayout());
+
+ channelPanel = new Panel();
+ realplayPanel = new JPanel();
+
+ add(channelPanel, BorderLayout.SOUTH);
+ add(realplayPanel, BorderLayout.CENTER);
+
+ /************ realplay panel **************/
+ realplayPanel.setLayout(new BorderLayout());
+ realplayPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
+ realPlayWindow = new Panel();
+ realPlayWindow.setBackground(Color.GRAY);
+ realplayPanel.add(realPlayWindow, BorderLayout.CENTER);
+
+ /************ channel and stream panel **************/
+ chnlabel = new JLabel(Res.string().getChannel());
+ chnComboBox = new JComboBox();
+
+ streamLabel = new JLabel(Res.string().getStreamType());
+ String[] stream = {Res.string().getMasterStream(), Res.string().getSubStream()};
+ streamComboBox = new JComboBox(stream);
+
+ realplayBtn = new JButton(Res.string().getStartRealPlay());
+
+ channelPanel.setLayout(new FlowLayout());
+ channelPanel.add(chnlabel);
+ channelPanel.add(chnComboBox);
+ channelPanel.add(streamLabel);
+ channelPanel.add(streamComboBox);
+ channelPanel.add(realplayBtn);
+
+ chnComboBox.setPreferredSize(new Dimension(90, 20));
+ streamComboBox.setPreferredSize(new Dimension(90, 20));
+ realplayBtn.setPreferredSize(new Dimension(120, 20));
+
+ realPlayWindow.setEnabled(false);
+ chnComboBox.setEnabled(false);
+ streamComboBox.setEnabled(false);
+ realplayBtn.setEnabled(false);
+
+ realplayBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ realplay();
+ }
+ });
+ }
+ }
+
+ public void realplay() {
+ if(!bRealPlay) {
+ m_hPlayHandle = RealPlayModule.startRealPlay(chnComboBox.getSelectedIndex(),
+ streamComboBox.getSelectedIndex()==0? 0:3,
+ realPlayWindow);
+ if(m_hPlayHandle.longValue() != 0) {
+ realPlayWindow.repaint();
+ bRealPlay = true;
+ chnComboBox.setEnabled(false);
+ streamComboBox.setEnabled(false);
+ realplayBtn.setText(Res.string().getStopRealPlay());
+ }
+ } else {
+ RealPlayModule.stopRealPlay(m_hPlayHandle);
+ realPlayWindow.repaint();
+ bRealPlay = false;
+ chnComboBox.setEnabled(true && !bTimerCapture);
+ streamComboBox.setEnabled(true);
+ realplayBtn.setText(Res.string().getStartRealPlay());
+ }
+ }
+
+ /*
+ * capture picture panel
+ */
+ private class PICPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public PICPanel() {
+
+ setPreferredSize(new Dimension(350, 600));
+ BorderEx.set(this, Res.string().getCapturePicture(), 2);
+ setLayout(new BorderLayout());
+
+ pictureShowPanel = new JPanel();
+ capturePanel = new JPanel();
+
+ add(pictureShowPanel, BorderLayout.CENTER);
+ add(capturePanel, BorderLayout.SOUTH);
+
+ /************** capture picture button ************/
+ capturePanel.setLayout(new GridLayout(3, 1));
+
+ localCaptureBtn = new JButton(Res.string().getLocalCapture());
+ remoteCaptureBtn = new JButton(Res.string().getRemoteCapture());
+ timerCaptureBtn = new JButton(Res.string().getTimerCapture());
+
+ localCaptureBtn.setPreferredSize(new Dimension(150, 20));
+ remoteCaptureBtn.setPreferredSize(new Dimension(150, 20));
+ timerCaptureBtn.setPreferredSize(new Dimension(150, 20));
+
+ capturePanel.add(localCaptureBtn);
+ capturePanel.add(remoteCaptureBtn);
+ capturePanel.add(timerCaptureBtn);
+
+ localCaptureBtn.setEnabled(false);
+ remoteCaptureBtn.setEnabled(false);
+ timerCaptureBtn.setEnabled(false);
+
+ /************** picture show panel ************/
+ pictureShowPanel.setLayout(new BorderLayout());
+ pictureShowPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
+ pictureShowWindow = new PaintPanel();
+ pictureShowPanel.add(pictureShowWindow, BorderLayout.CENTER);
+
+ localCaptureBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ if (!bRealPlay) {
+ JOptionPane.showMessageDialog(null, Res.string().getNeedStartRealPlay(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ String strFileName = SavePath.getSavePath().getSaveCapturePath();
+ System.out.println("strFileName = " + strFileName);
+
+ if(!CapturePictureModule.localCapturePicture(m_hPlayHandle, strFileName)) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ BufferedImage bufferedImage = null;
+ try {
+ bufferedImage = ImageIO.read(new File(strFileName));
+ if(bufferedImage == null) {
+ return;
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ pictureShowWindow.setOpaque(false);
+ pictureShowWindow.setImage(bufferedImage);
+ pictureShowWindow.repaint();
+
+ }
+ });
+
+ remoteCaptureBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ if(!CapturePictureModule.remoteCapturePicture(chnComboBox.getSelectedIndex())) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ });
+
+ timerCaptureBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ if (!bTimerCapture) {
+
+ if(!CapturePictureModule.timerCapturePicture(chnComboBox.getSelectedIndex())) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }else{
+ bTimerCapture = true;
+ timerCaptureBtn.setText(Res.string().getStopCapture());
+ chnComboBox.setEnabled(false);
+ remoteCaptureBtn.setEnabled(false);
+ }
+ }else {
+ if(!CapturePictureModule.stopCapturePicture(chnComboBox.getSelectedIndex())) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }else{
+ bTimerCapture = false;
+ timerCaptureBtn.setText(Res.string().getTimerCapture());
+ chnComboBox.setEnabled(true && !bRealPlay);
+ remoteCaptureBtn.setEnabled(true);
+ }
+ }
+ }
+ });
+ }
+ }
+
+ public fCaptureReceiveCB m_CaptureReceiveCB = new fCaptureReceiveCB();
+ public class fCaptureReceiveCB implements NetSDKLib.fSnapRev{
+ BufferedImage bufferedImage = null;
+ public void invoke( LLong lLoginID, Pointer pBuf, int RevLen, int EncodeType, int CmdSerial, Pointer dwUser) {
+ if(pBuf != null && RevLen > 0) {
+ String strFileName = SavePath.getSavePath().getSaveCapturePath();
+
+ System.out.println("strFileName = " + strFileName);
+
+ byte[] buf = pBuf.getByteArray(0, RevLen);
+ ByteArrayInputStream byteArrInput = new ByteArrayInputStream(buf);
+ try {
+ bufferedImage = ImageIO.read(byteArrInput);
+ if(bufferedImage == null) {
+ return;
+ }
+ ImageIO.write(bufferedImage, "jpg", new File(strFileName));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ // show picture
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ pictureShowWindow.setOpaque(false);
+ pictureShowWindow.setImage(bufferedImage);
+ pictureShowWindow.repaint();
+ }
+ });
+ }
+ }
+ }
+
+ private void setButtonEnable(boolean bln) {
+ localCaptureBtn.setEnabled(bln);
+ remoteCaptureBtn.setEnabled(bln);
+ timerCaptureBtn.setEnabled(bln);
+ realPlayWindow.setEnabled(bln);
+ chnComboBox.setEnabled(bln);
+ streamComboBox.setEnabled(bln);
+ realplayBtn.setEnabled(bln);
+ }
+
+ private LoginPanel loginPanel;
+
+ private RealPanel realPanel;
+ private JPanel realplayPanel;
+ private Panel realPlayWindow;
+ private Panel channelPanel;
+ private JLabel chnlabel;
+ private JComboBox chnComboBox;
+ private JLabel streamLabel;
+ private JComboBox streamComboBox;
+ private JButton realplayBtn;
+
+ private PICPanel picPanel;
+ private JPanel pictureShowPanel;
+ private JPanel capturePanel;
+ private PaintPanel pictureShowWindow;
+ private JButton localCaptureBtn;
+ private JButton remoteCaptureBtn;
+ private JButton timerCaptureBtn;
+
+}
+
+public class CapturePicture {
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ CapturePictureFrame demo = new CapturePictureFrame();
+ demo.setVisible(true);
+ }
+ });
+ }
+};
+
+
diff --git a/src/main/java/com/netsdk/demo/frame/DeviceControl.java b/src/main/java/com/netsdk/demo/frame/DeviceControl.java
new file mode 100644
index 0000000..1235ca9
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/DeviceControl.java
@@ -0,0 +1,406 @@
+package com.netsdk.demo.frame;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+
+import com.sun.jna.Pointer;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.DateChooserJButton;
+import com.netsdk.common.FunctionList;
+import com.netsdk.common.LoginPanel;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.DeviceControlModule;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.ToolKits;
+
+/**
+ * Device Control Demo
+ */
+class DeviceControlFrame extends JFrame {
+ private static final long serialVersionUID = 1L;
+
+ // device disconnect callback instance
+ private DisConnect disConnect = new DisConnect();
+
+ // device control frame (this)
+ private static JFrame frame = new JFrame();
+
+ public DeviceControlFrame() {
+ setTitle(Res.string().getDeviceControl());
+ setLayout(new BorderLayout());
+ pack();
+ setSize(550, 350);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ LoginModule.init(disConnect, null);
+
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ loginPanel = new DeviceControlLoginPanel();
+ deviceCtlPanel = new DeviceControlPanel();
+
+ add(loginPanel, BorderLayout.NORTH);
+ add(deviceCtlPanel, BorderLayout.CENTER);
+
+ loginPanel.addLoginBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if(loginPanel.checkLoginText()) {
+ if(login()) {
+ frame = ToolKits.getFrame(e);
+ frame.setTitle(Res.string().getDeviceControl() + " : " + Res.string().getOnline());
+ }
+ }
+ }
+ });
+
+ loginPanel.addLogoutBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ frame.setTitle(Res.string().getDeviceControl());
+ logout();
+ }
+ });
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ LoginModule.logout();
+ LoginModule.cleanup();
+ dispose();
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+
+ /////////////////function///////////////////
+ // device disconnect callback class
+ // set it's instance by call CLIENT_Init, when device disconnect sdk will call it.
+ private class DisConnect implements NetSDKLib.fDisConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ JOptionPane.showMessageDialog(null, Res.string().getDisConnect(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ frame.setTitle(Res.string().getDeviceControl());
+ logout();
+ }
+ });
+ }
+ }
+
+ public boolean login() {
+
+ if(LoginModule.login(loginPanel.ipTextArea.getText(),
+ Integer.parseInt(loginPanel.portTextArea.getText()),
+ loginPanel.nameTextArea.getText(),
+ new String(loginPanel.passwordTextArea.getPassword()))) {
+
+ loginPanel.setButtonEnable(true);
+ deviceCtlPanel.setButtonEnabled(true);
+
+ }else {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+
+ return true;
+ }
+
+ public void logout() {
+
+ LoginModule.logout();
+
+ loginPanel.setButtonEnable(false);
+ deviceCtlPanel.resetButtonEnabled();
+ }
+
+ private class DeviceControlPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public DeviceControlPanel() {
+ BorderEx.set(this, Res.string().getDeviceControl(), 2);
+ setLayout(new BorderLayout());
+ setPreferredSize(new Dimension(350, 220));
+ setResizable(false);
+ JLabel nullLable = new JLabel();
+
+ currentTimeCheckBox = new JCheckBox(Res.string().getCurrentTime());
+
+ getDateChooser = new DateChooserJButton();
+ setDateChooser = new DateChooserJButton(2000, 2037);
+
+ rebootBtn = new JButton(Res.string().getReboot());
+ getTimeBtn = new JButton(Res.string().getGetTime());
+ setTimeBtn = new JButton(Res.string().getSetTime());
+
+ nullLable.setPreferredSize(currentTimeCheckBox.getPreferredSize());
+ getDateChooser.setPreferredSize(new Dimension(150, 20));
+ setDateChooser.setPreferredSize(new Dimension(150, 20));
+ rebootBtn.setPreferredSize(new Dimension(100, 20));
+ getTimeBtn.setPreferredSize(new Dimension(100, 20));
+ setTimeBtn.setPreferredSize(new Dimension(100, 20));
+
+ JPanel rebootPanel = new JPanel();
+ BorderEx.set(rebootPanel, Res.string().getDeviceReboot(), 2);
+
+ rebootPanel.add(rebootBtn);
+
+ JPanel timePanel = new JPanel(new GridLayout(2,1));
+ BorderEx.set(timePanel, Res.string().getSyncTime(), 2);
+
+ JPanel getPanel = new JPanel();
+ JPanel setPanel = new JPanel();
+
+ getPanel.add(nullLable);
+ getPanel.add(getDateChooser);
+ getPanel.add(getTimeBtn);
+
+ setPanel.add(currentTimeCheckBox);
+ setPanel.add(setDateChooser);
+ setPanel.add(setTimeBtn);
+
+ timePanel.add(getPanel);
+ timePanel.add(setPanel);
+
+ JSplitPane splitPane = new JSplitPane();
+ splitPane.setDividerSize(0);
+ splitPane.setBorder(null);
+ splitPane.add(rebootPanel, JSplitPane.LEFT);
+ splitPane.add(timePanel, JSplitPane.RIGHT);
+ add(splitPane);
+
+ getDateChooser.setEnabled(false);
+ setButtonEnabled(false);
+
+ rebootBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+
+ OptionDialog optionDialog = new OptionDialog();
+ optionDialog.setVisible(true);
+ }
+ });
+
+ getTimeBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ String date = DeviceControlModule.getTime();
+ if (date == null) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }else {
+ getDateChooser.setText(date);
+ }
+
+ }
+ });
+
+ setTimeBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ String date = null;
+ if (!currentTimeCheckBox.isSelected()) {
+ date = setDateChooser.getText();
+ }
+ if (!DeviceControlModule.setTime(date)) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ else {
+ JOptionPane.showMessageDialog(null, Res.string().getOperateSuccess(), Res.string().getPromptMessage(), JOptionPane.PLAIN_MESSAGE);
+ }
+ }
+ });
+
+ currentTimeCheckBox.addItemListener(new ItemListener() {
+ @Override
+ public void itemStateChanged(ItemEvent e) {
+ JCheckBox jcb = (JCheckBox)e.getItem();
+ if (jcb.isSelected()) {
+ setDateChooser.setEnabled(false);
+ }else {
+ setDateChooser.setEnabled(true);
+ }
+ }
+ });
+
+ }
+
+ public void setButtonEnabled(boolean b) {
+
+ currentTimeCheckBox.setEnabled(b);
+ setDateChooser.setEnabled(b);
+ rebootBtn.setEnabled(b);
+ getTimeBtn.setEnabled(b);
+ setTimeBtn.setEnabled(b);
+ }
+
+ public void resetButtonEnabled() {
+ currentTimeCheckBox.setSelected(false);
+ setButtonEnabled(false);
+ }
+
+ private class OptionDialog extends JDialog {
+ private static final long serialVersionUID = 1L;
+
+ public OptionDialog() {
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+ pack();
+ setSize(250, 100);
+ setLocationRelativeTo(null);
+ setModal(true);
+ setTitle(Res.string().getDeviceReboot());
+
+ JLabel messageLable = new JLabel(Res.string().getRebootTips());
+ confirmBtn = new JButton(Res.string().getConfirm());
+ cancelBtn = new JButton(Res.string().getCancel());
+
+ JPanel messagePanel = new JPanel();
+ messagePanel.add(messageLable);
+
+ JPanel btnPanel = new JPanel();
+ btnPanel.add(cancelBtn);
+ btnPanel.add(confirmBtn);
+
+ add(messagePanel, BorderLayout.NORTH);
+ add(btnPanel, BorderLayout.CENTER);
+
+ addListener();
+
+ }
+
+ private void addListener() {
+ confirmBtn.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ cancelBtn.setEnabled(false);
+ if (!DeviceControlModule.reboot()) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ else {
+ JOptionPane.showMessageDialog(null, Res.string().getOperateSuccess(), Res.string().getPromptMessage(), JOptionPane.PLAIN_MESSAGE);
+ }
+ dispose();
+ }
+ });
+
+ cancelBtn.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ dispose();
+ }
+ });
+ }
+
+ private JButton confirmBtn;
+ private JButton cancelBtn;
+
+ }
+
+ private JButton rebootBtn;
+ private DateChooserJButton getDateChooser;
+ private JButton getTimeBtn;
+ private JCheckBox currentTimeCheckBox;
+ private DateChooserJButton setDateChooser;
+ private JButton setTimeBtn;
+ }
+
+ private class DeviceControlLoginPanel extends LoginPanel {
+
+ private static final long serialVersionUID = 1L;
+
+ public DeviceControlLoginPanel() {
+ setLayout(new GridLayout(3, 1));
+ removeAll();
+ JPanel ipPanel = new JPanel();
+ JPanel userPanel = new JPanel();
+ JPanel btnPanel = new JPanel();
+
+ resetSize();
+
+ ipPanel.add(ipLabel);
+ ipPanel.add(ipTextArea);
+ ipPanel.add(portLabel);
+ ipPanel.add(portTextArea);
+
+ userPanel.add(nameLabel);
+ userPanel.add(nameTextArea);
+ userPanel.add(passwordLabel);
+ userPanel.add(passwordTextArea);
+
+ btnPanel.add(loginBtn);
+ btnPanel.add(new JLabel(" "));
+ btnPanel.add(logoutBtn);
+
+ add(ipPanel);
+ add(userPanel);
+ add(btnPanel);
+ }
+
+ private void resetSize() {
+
+ ipLabel.setPreferredSize(new Dimension(70, 25));
+ portLabel.setPreferredSize(new Dimension(70, 25));
+ nameLabel.setText(Res.string().getUserName());
+ nameLabel.setPreferredSize(new Dimension(70, 25));
+ passwordLabel.setPreferredSize(new Dimension(70, 25));
+
+ loginBtn.setPreferredSize(new Dimension(100, 20));
+ logoutBtn.setPreferredSize(new Dimension(100, 20));
+
+ ipTextArea.setPreferredSize(new Dimension(100, 20));
+ portTextArea.setPreferredSize(new Dimension(100, 20));
+ nameTextArea.setPreferredSize(new Dimension(100, 20));
+ passwordTextArea.setPreferredSize(new Dimension(100, 20));
+ }
+ }
+
+ private DeviceControlLoginPanel loginPanel;
+
+ private DeviceControlPanel deviceCtlPanel;
+
+}
+
+public class DeviceControl {
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ DeviceControlFrame demo = new DeviceControlFrame();
+ demo.setVisible(true);
+ }
+ });
+ }
+};
+
diff --git a/src/main/java/com/netsdk/demo/frame/DeviceSearchAndInit.java b/src/main/java/com/netsdk/demo/frame/DeviceSearchAndInit.java
new file mode 100644
index 0000000..c504b8b
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/DeviceSearchAndInit.java
@@ -0,0 +1,1135 @@
+package com.netsdk.demo.frame;
+
+import java.awt.AWTEvent;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.net.SocketException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.ListSelectionModel;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellRenderer;
+
+import com.sun.jna.Pointer;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.FunctionList;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.*;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.NetSDKLib.*;
+
+class DeviceSearchAndInitFrame extends JFrame{
+ private static final long serialVersionUID = 1L;
+
+ private Object[][] data;
+
+ private static int index = 0;
+
+ private int count = 0;
+
+ // 设备搜索句柄
+ private static LLong m_DeviceSearchHandle = new LLong(0);
+
+ // key:MAC value:密码重置方式
+ private static Map pwdResetHashMap = new HashMap();
+
+ // MAC列表,用于设备搜索过滤
+ private static ArrayList macArrayList = new ArrayList();
+
+ private java.awt.Component target = this;
+
+ // true表示单播搜索结束
+ private volatile boolean bFlag = true;
+
+ // 线程池,用于单播搜索
+ private ExecutorService executorService = Executors.newFixedThreadPool(4);
+
+ public DeviceSearchAndInitFrame() {
+ setTitle(Res.string().getDeviceSearchAndInit());
+ setSize(700, 560);
+ setLayout(new BorderLayout());
+ setResizable(false);
+ setLocationRelativeTo(null);
+ LoginModule.init(null, null); // 打开工程,初始化
+
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ deviceSearchPanel = new DeviceSearchPanel();
+ deviceSearchResultShowPanel = new DeviceSearchResultShowListPanel();
+ deviceIntPanel = new DeviceInitPanel();
+
+ add(deviceSearchPanel, BorderLayout.NORTH);
+ add(deviceSearchResultShowPanel, BorderLayout.CENTER);
+ add(deviceIntPanel, BorderLayout.SOUTH);
+
+ enableEvents(WindowEvent.WINDOW_EVENT_MASK);
+ }
+
+ @Override
+ protected void processWindowEvent(WindowEvent e) {
+ // 关闭窗口监听事件
+ if(e.getID() == WindowEvent.WINDOW_CLOSING) {
+ if(!bFlag) {
+ // 等待单播搜索结束
+ JOptionPane.showMessageDialog(null, Res.string().getSearchingWait(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ return;
+ } else {
+ for(int i=0 ;i 0 && count <= 256) {
+ executorService.execute(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ for(int i = 0; i 256 && count <= 512){
+ executorService.execute(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ for(int i = 0; i 512 && count <= 768){
+ executorService.execute(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ for(int i = 0; i 768 && count <= 1000){
+ executorService.execute(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ for(int i = 0; i Integer.parseInt(endIp[2])) {
+ JOptionPane.showMessageDialog(null, Res.string().getCheckIp(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+
+ if(Integer.parseInt(startIp[2]) == Integer.parseInt(endIp[2])
+ && Integer.parseInt(startIp[3]) > Integer.parseInt(endIp[3])) {
+ JOptionPane.showMessageDialog(null, Res.string().getCheckIp(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+
+ count = (Integer.parseInt(endIp[2]) - Integer.parseInt(startIp[2])) * 256
+ + Integer.parseInt(endIp[3]) - Integer.parseInt(startIp[3]) + 1;
+
+ if(count > 1000) {
+ JOptionPane.showMessageDialog(null, Res.string().getControlScope(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+
+ return true;
+ }
+
+ private DeviceSearchPanel deviceSearchPanel;
+ private DeviceSearchResultShowListPanel deviceSearchResultShowPanel;
+ private DeviceInitPanel deviceIntPanel;
+
+ private JButton deviceInitBtn;
+ private JButton multiAndBroadcastSearchBtn;
+ private JButton unicastSearchBtn;
+
+ private JTextField startIpTextField;
+ private JTextField endIpTextField;
+
+ // 列表
+ private static DefaultTableModel defaultModel;
+ private static JTable table;
+ private static List list =new ArrayList();
+ private static List handles =new ArrayList();
+}
+
+class DevcieInitFrame extends JFrame {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ byte passwdReset;
+ String localIp;
+ String mac;
+ int row;
+ DefaultTableModel defaultModel;
+ JTable table;
+
+ public DevcieInitFrame(String localIp,byte passwdReset, String mac, int row, DefaultTableModel defaultModel, JTable table) {
+ setTitle(Res.string().getDeviceInit());
+ setSize(300, 350);
+ setLayout(new BorderLayout());
+ setResizable(false);
+
+ this.passwdReset = passwdReset;
+ this.localIp = localIp;
+ this.mac = mac;
+ this.row = row;
+ this.defaultModel = defaultModel;
+ this.table = table;
+
+ initPanel = new InitPanel();
+
+ add(initPanel, BorderLayout.CENTER);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ dispose();
+ }
+ });
+ }
+
+ private class InitPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public InitPanel() {
+ BorderEx.set(this, Res.string().getDeviceInit(), 2);
+ setLayout(new BorderLayout());
+
+ JPanel panel_1 = new JPanel();
+ JPanel panel_2 = new JPanel();
+
+ add(panel_1, BorderLayout.CENTER);
+ add(panel_2, BorderLayout.SOUTH);
+
+ panel_1.setLayout(new GridLayout(10, 1));
+ panel_2.setLayout(new BorderLayout());
+
+ JLabel userLabel = new JLabel(Res.string().getUserName() + " : ");
+ JLabel passwdLabel = new JLabel(Res.string().getPassword() + " : ");
+ JLabel passwdLabelEx = new JLabel(Res.string().getConfirmPassword() + " : ");
+ JTextField userTextField = new JTextField("admin");
+ passwdPasswordField = new JPasswordField("admin123");
+ passwdPasswordFieldEx = new JPasswordField("admin123");
+
+ panel_1.add(userLabel);
+ panel_1.add(userTextField);
+ panel_1.add(passwdLabel);
+ panel_1.add(passwdPasswordField);
+ panel_1.add(passwdLabelEx);
+ panel_1.add(passwdPasswordFieldEx);
+
+ userTextField.setEnabled(false);
+
+ if((passwdReset >> 1 & 0x01) == 0) { // 手机号
+ JLabel phoneLabel = new JLabel(Res.string().getPhone() + " : ");
+ phoneTextField = new JTextField();
+ panel_1.add(phoneLabel);
+ panel_1.add(phoneTextField);
+ } else if((passwdReset >> 1 & 0x01) == 1) { // 邮箱
+ JLabel mailLabel = new JLabel(Res.string().getMail() + " : ");
+ mailTextField = new JTextField();
+ panel_1.add(mailLabel);
+ panel_1.add(mailTextField);
+ }
+
+ deviceInitBtn = new JButton(Res.string().getDeviceInit());
+ panel_2.add(deviceInitBtn, BorderLayout.CENTER);
+
+ deviceInitBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ // 密码判空
+ if(new String(passwdPasswordField.getPassword()).equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getInputPassword(),
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ // 确认密码判空
+ if(new String(passwdPasswordFieldEx.getPassword()).equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getInputConfirmPassword(),
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ // 密码确认
+ if(!new String(passwdPasswordField.getPassword())
+ .equals(new String(passwdPasswordFieldEx.getPassword()))) {
+ JOptionPane.showMessageDialog(null, Res.string().getInconsistent(),
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ // 获取手机或邮箱
+ String phone_mail = "";
+ if((passwdReset >> 1 & 0x01) == 0) {
+ phone_mail = phoneTextField.getText();
+ } else if((passwdReset >> 1 & 0x01) == 1) {
+ phone_mail = mailTextField.getText();
+ }
+
+ // 手机或邮箱判空
+ if(phone_mail.equals("")) {
+ if((passwdReset >> 1 & 0x01) == 0) { // 手机号
+ JOptionPane.showMessageDialog(null, Res.string().getInputPhone(),
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+
+ return;
+ } else if((passwdReset >> 1 & 0x01) == 1) { // 邮箱
+ JOptionPane.showMessageDialog(null, Res.string().getInputMail(),
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+
+ return;
+ }
+ }
+
+ // 初始化
+ if(DeviceInitModule.initDevAccount(localIp,mac, new String(passwdPasswordField.getPassword()), phone_mail, passwdReset)) {
+ dispose();
+
+ defaultModel.setValueAt(Res.string().getInitialized(), row, 1);
+
+ for(int i = 0; i < 11; i++) {
+ table.getColumnModel().getColumn(i).setCellRenderer(new MyTableCellRender(defaultModel));
+ }
+ table.updateUI();
+
+ JOptionPane.showMessageDialog(null, Res.string().getDeviceInit() + Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getDeviceInit() + Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(),
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ });
+ }
+ }
+
+ private static class MyTableCellRender implements TableCellRenderer {
+ DefaultTableModel defaultModel;
+ public MyTableCellRender(DefaultTableModel defaultModel) {
+ this.defaultModel = defaultModel;
+ }
+
+ DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer();
+
+ @Override
+ public Component getTableCellRendererComponent(JTable table,
+ Object value, boolean isSelect, boolean hasFocus, int row, int colum) {
+
+ Component component = dCellRenderer.getTableCellRendererComponent(table, value,
+ isSelect, hasFocus, row, colum);
+ if(String.valueOf(defaultModel.getValueAt(row, 1)).trim().equals(Res.string().getNotInitialized())) { // 未初始化,字体颜色变红
+ component.setForeground(Color.RED);
+ } else {
+ component.setForeground(Color.BLACK);
+ }
+
+ // 列表显示居中
+ dCellRenderer.setHorizontalAlignment(JLabel.CENTER);
+ table.setDefaultRenderer(Object.class, dCellRenderer);
+
+ return component;
+ }
+ }
+
+ private InitPanel initPanel;
+ private JPasswordField passwdPasswordField;
+ private JPasswordField passwdPasswordFieldEx;
+ private JTextField phoneTextField;
+ private JTextField mailTextField;
+ private JButton deviceInitBtn;
+
+}
+public class DeviceSearchAndInit {
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ DeviceSearchAndInitFrame demo = new DeviceSearchAndInitFrame();
+ demo.setLocationRelativeTo(null);
+ demo.setVisible(true);
+ }
+ });
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/frame/DownLoadRecord.java b/src/main/java/com/netsdk/demo/frame/DownLoadRecord.java
new file mode 100644
index 0000000..6fd70b6
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/DownLoadRecord.java
@@ -0,0 +1,889 @@
+package com.netsdk.demo.frame;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+
+import java.awt.FlowLayout;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.Vector;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.border.EmptyBorder;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+
+import com.netsdk.common.*;
+import com.netsdk.demo.module.DownLoadRecordModule;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.lib.*;
+import com.netsdk.lib.NetSDKLib.LLong;
+
+import com.sun.jna.CallbackThreadInitializer;
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+import com.sun.jna.ptr.IntByReference;
+
+/*
+ * 下载录像Demo
+ */
+class DownLoadRecordFrame extends JFrame{
+ private static final long serialVersionUID = 1L;
+ private Vector chnlist = new Vector();
+
+ private DefaultTableModel model;
+ private LLong m_hDownLoadByTimeHandle = new LLong(0); // 按时间下载句柄
+ private LLong m_hDownLoadByFileHandle = new LLong(0); // 按文件下载句柄
+
+ private boolean b_downloadByTime = false;
+ private boolean b_downloadByFile = false;
+ private IntByReference nFindCount = new IntByReference(0);
+
+ // 设备断线通知回调
+ private DisConnect disConnect = new DisConnect();
+
+ // 网络连接恢复
+ private static HaveReConnect haveReConnect = new HaveReConnect();
+
+ // 开始时间
+ private NetSDKLib.NET_TIME stTimeStart = new NetSDKLib.NET_TIME();
+
+ // 结束时间
+ private NetSDKLib.NET_TIME stTimeEnd = new NetSDKLib.NET_TIME();
+
+ // 录像文件信息
+ private NetSDKLib.NET_RECORDFILE_INFO[] stFileInfo = (NetSDKLib.NET_RECORDFILE_INFO[])new NetSDKLib.NET_RECORDFILE_INFO().toArray(2000);
+
+ Object[][] data = null;
+
+ // 获取界面窗口
+ private static JFrame frame = new JFrame();
+
+ public DownLoadRecordFrame() {
+ setTitle(Res.string().getDownloadRecord());
+ setLayout(new BorderLayout());
+ pack();
+ setSize(800, 560);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化
+
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ loginPanel = new LoginPanel();
+ downloadRecordPanel = new DownLoadRecordPanel();
+
+ add(loginPanel, BorderLayout.NORTH);
+ add(downloadRecordPanel, BorderLayout.CENTER);
+
+ loginPanel.addLoginBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if(loginPanel.checkLoginText()) {
+ if(login()) {
+ frame = ToolKits.getFrame(e);
+ frame.setTitle(Res.string().getDownloadRecord() + " : " + Res.string().getOnline());
+ }
+ }
+ }
+ });
+
+ loginPanel.addLogoutBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ frame.setTitle(Res.string().getDownloadRecord());
+ logout();
+ }
+ });
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByFileHandle);
+ DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByTimeHandle);
+ LoginModule.logout();
+ LoginModule.cleanup(); // 关闭工程,释放资源
+ dispose();
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+
+ /////////////////面板//////////////////
+ // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数
+ private class DisConnect implements NetSDKLib.fDisConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+ // 断线提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getDownloadRecord() + " : " + Res.string().getDisConnectReconnecting());
+
+ setButtonEnable(true);
+ b_downloadByFile = false;
+ downloadByFileBtn.setText(Res.string().getDownload());
+ b_downloadByTime = false;
+ downloadByTimeBtn.setText(Res.string().getDownload());
+ DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByFileHandle);
+ DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByTimeHandle);
+ }
+ });
+ }
+ }
+
+ // 网络连接恢复,设备重连成功回调
+ // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数
+ private static class HaveReConnect implements NetSDKLib.fHaveReConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+
+ // 重连提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getDownloadRecord() + " : " + Res.string().getOnline());
+ }
+ });
+ }
+ }
+
+ // 登录
+ public boolean login() {
+ Native.setCallbackThreadInitializer(m_DownLoadPosByFile,
+ new CallbackThreadInitializer(false, false, "downloadbyfile callback thread"));
+ Native.setCallbackThreadInitializer(m_DownLoadPosByTime,
+ new CallbackThreadInitializer(false, false, "downloadbytime callback thread"));
+ if(LoginModule.login(loginPanel.ipTextArea.getText(),
+ Integer.parseInt(loginPanel.portTextArea.getText()),
+ loginPanel.nameTextArea.getText(),
+ new String(loginPanel.passwordTextArea.getPassword()))) {
+ loginPanel.setButtonEnable(true);
+ setButtonEnable(true);
+
+ for(int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) {
+ chnlist.add(Res.string().getChannel() + " " + String.valueOf(i));
+ }
+
+ // 默认设置主辅码流
+ DownLoadRecordModule.setStreamType(streamComboBoxByFile.getSelectedIndex());
+
+ // 登陆成功,将通道添加到控件
+ chnComboBoxByFile.setModel(new DefaultComboBoxModel(chnlist));
+ chnComboBoxByTime.setModel(new DefaultComboBoxModel(chnlist));
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+
+ return true;
+ }
+
+ //登出
+ public void logout() {
+ LoginModule.logout();
+ loginPanel.setButtonEnable(false);
+ setButtonEnable(false);
+
+ // 列表清空
+ data = new Object[14][5];
+ table.setModel(new DefaultTableModel(data, Res.string().getDownloadTableName()));
+ table.getColumnModel().getColumn(0).setPreferredWidth(23);
+ table.getColumnModel().getColumn(1).setPreferredWidth(28);
+ table.getColumnModel().getColumn(2).setPreferredWidth(50);
+
+ for(int i = 0; i < LoginModule.m_stDeviceInfo.byChanNum; i++) {
+ chnlist.clear();
+ }
+
+ chnComboBoxByFile.setModel(new DefaultComboBoxModel());
+ chnComboBoxByTime.setModel(new DefaultComboBoxModel());
+
+ b_downloadByFile = false;
+ downloadByFileBtn.setText(Res.string().getDownload());
+ b_downloadByTime = false;
+ downloadByTimeBtn.setText(Res.string().getDownload());
+ }
+
+ /*
+ * 下载录像面板
+ */
+ private class DownLoadRecordPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public DownLoadRecordPanel() {
+ BorderEx.set(this, Res.string().getDownloadRecord(), 2);
+ setLayout(new GridLayout(1, 2));
+
+ downloadByTimePanel = new DownLoadByTimePanel(); // 按时间下载
+ downloadByFilePanel = new DownLoadByFilePanel(); // 按文件下载
+
+ add(downloadByTimePanel);
+ add(downloadByFilePanel);
+ }
+ }
+
+ /*
+ * 按文件下载面板
+ */
+ private class DownLoadByFilePanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public DownLoadByFilePanel() {
+ BorderEx.set(this, Res.string().getDownloadByFile(), 2);
+ setLayout(new BorderLayout());
+
+ downloadByFileSetPanel = new JPanel(); // 设置
+ queryPanel = new JPanel(); // 查询
+ downByFilePanel = new JPanel(); // 下载
+
+ add(downloadByFileSetPanel, BorderLayout.NORTH);
+ add(queryPanel, BorderLayout.CENTER);
+ add(downByFilePanel, BorderLayout.SOUTH);
+
+ /******** 设置面板***********/
+ JPanel startTimeByFile = new JPanel();
+ JPanel endTimeByFile = new JPanel();
+ JPanel chnByFile = new JPanel();
+ JPanel streamByFile = new JPanel();
+
+ downloadByFileSetPanel.setLayout(new GridLayout(2, 2));
+
+ downloadByFileSetPanel.add(startTimeByFile);
+ downloadByFileSetPanel.add(endTimeByFile);
+ downloadByFileSetPanel.add(chnByFile);
+ downloadByFileSetPanel.add(streamByFile);
+
+ // 开始时间设置
+ startTimeByFile.setBorder(new EmptyBorder(5, 5, 5, 20));
+ startTimeByFile.setLayout(new GridLayout(2, 1));
+ JLabel startLabel = new JLabel(Res.string().getStartTime());
+ dateChooserStartByFile = new DateChooserJButton();
+
+ Dimension dimension = new Dimension();
+ dimension.height = 20;
+ dateChooserStartByFile.setPreferredSize(dimension);
+
+ startTimeByFile.add(startLabel);
+ startTimeByFile.add(dateChooserStartByFile);
+
+ // 结束时间设置
+ endTimeByFile.setBorder(new EmptyBorder(5, 20, 5, 5));
+ endTimeByFile.setLayout(new GridLayout(2, 1));
+ JLabel endLabel = new JLabel(Res.string().getEndTime());
+ dateChooserEndByFile = new DateChooserJButton();
+ dateChooserEndByFile.setPreferredSize(dimension);
+
+ endTimeByFile.add(endLabel);
+ endTimeByFile.add(dateChooserEndByFile);
+
+ // 通道设置
+ chnByFile.setBorder(new EmptyBorder(5, 10, 0, 5));
+ chnByFile.setLayout(new FlowLayout());
+ chnlabel = new JLabel(Res.string().getChannel());
+ chnComboBoxByFile = new JComboBox();
+ chnComboBoxByFile.setPreferredSize(new Dimension(115, 20));
+ chnByFile.add(chnlabel);
+ chnByFile.add(chnComboBoxByFile);
+
+ // 码流设置
+ streamByFile.setBorder(new EmptyBorder(5, 10, 0, 5));
+ streamByFile.setLayout(new FlowLayout());
+ streamLabel = new JLabel(Res.string().getStreamType());
+ String[] stream = {Res.string().getMasterAndSub(), Res.string().getMasterStream(), Res.string().getSubStream()};
+ streamComboBoxByFile = new JComboBox(stream);
+ streamComboBoxByFile.setModel(new DefaultComboBoxModel(stream));
+ streamComboBoxByFile.setPreferredSize(new Dimension(115, 20));
+ streamByFile.add(streamLabel);
+ streamByFile.add(streamComboBoxByFile);
+
+ /******** 查询面板***********/
+ queryPanel.setLayout(new BorderLayout());
+ queryPanel.setBorder(new EmptyBorder(0, 5, 5, 5));
+
+ data = new Object[14][5];
+ defaultmodel = new DefaultTableModel(data, Res.string().getDownloadTableName());
+ table = new JTable(defaultmodel){
+ private static final long serialVersionUID = 1L;
+ @Override
+ public boolean isCellEditable(int row, int column) {
+ return false;
+ }
+ };
+ table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行
+
+ table.getColumnModel().getColumn(0).setPreferredWidth(20);
+ table.getColumnModel().getColumn(1).setPreferredWidth(20);
+ table.getColumnModel().getColumn(2).setPreferredWidth(50);
+
+ DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer();
+ dCellRenderer.setHorizontalAlignment(JLabel.CENTER);
+ table.setDefaultRenderer(Object.class, dCellRenderer);
+
+ queryPanel.add(new JScrollPane(table), BorderLayout.CENTER);
+
+ /******** 下载面板***********/
+ downByFilePanel.setLayout(new BorderLayout());
+ downByFilePanel.setBorder(new EmptyBorder(5, 5, 5, 5));
+
+ JPanel btnPanel1 = new JPanel();
+ downloadByFileProgressBar = new JProgressBar(0, 100);
+
+ downloadByFileProgressBar.setPreferredSize(new Dimension(100, 20));
+ downloadByFileProgressBar.setStringPainted(true);
+
+ downByFilePanel.add(btnPanel1, BorderLayout.CENTER);
+ downByFilePanel.add(downloadByFileProgressBar, BorderLayout.SOUTH);
+
+ // 查询、下载按钮
+ queryRecordBtn = new JButton(Res.string().getQuery());
+ downloadByFileBtn = new JButton(Res.string().getDownload());
+
+ queryRecordBtn.setPreferredSize(new Dimension(175, 20));
+ downloadByFileBtn.setPreferredSize(new Dimension(175, 20));
+
+ btnPanel1.setLayout(new FlowLayout());
+ btnPanel1.add(queryRecordBtn);
+ btnPanel1.add(downloadByFileBtn);
+
+ queryRecordBtn.setEnabled(false);
+ downloadByFileBtn.setEnabled(false);
+ downloadByFileProgressBar.setEnabled(false);
+ chnComboBoxByFile.setEnabled(false);
+ streamComboBoxByFile.setEnabled(false);
+ dateChooserStartByFile.setEnabled(false);
+ dateChooserEndByFile.setEnabled(false);
+
+ streamComboBoxByFile.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ DownLoadRecordModule.setStreamType(streamComboBoxByFile.getSelectedIndex());
+ }
+ });
+
+ queryRecordBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ int i = 1; // 列表序号
+ int time = 0;
+
+ System.out.println(dateChooserStartByFile.getText() + "\n" + dateChooserEndByFile.getText());
+ // 开始时间
+ String[] dateStartByFile = dateChooserStartByFile.getText().split(" ");
+ String[] dateStart1 = dateStartByFile[0].split("-");
+ String[] dateStart2 = dateStartByFile[1].split(":");
+
+ stTimeStart.dwYear = Integer.parseInt(dateStart1[0]);
+ stTimeStart.dwMonth = Integer.parseInt(dateStart1[1]);
+ stTimeStart.dwDay = Integer.parseInt(dateStart1[2]);
+
+ stTimeStart.dwHour = Integer.parseInt(dateStart2[0]);
+ stTimeStart.dwMinute = Integer.parseInt(dateStart2[1]);
+ stTimeStart.dwSecond = Integer.parseInt(dateStart2[2]);
+
+ // 结束时间
+ String[] dateEndByFile = dateChooserEndByFile.getText().split(" ");
+ String[] dateEnd1 = dateEndByFile[0].split("-");
+ String[] dateEnd2 = dateEndByFile[1].split(":");
+
+ stTimeEnd.dwYear = Integer.parseInt(dateEnd1[0]);
+ stTimeEnd.dwMonth = Integer.parseInt(dateEnd1[1]);
+ stTimeEnd.dwDay = Integer.parseInt(dateEnd1[2]);
+
+ stTimeEnd.dwHour = Integer.parseInt(dateEnd2[0]);
+ stTimeEnd.dwMinute = Integer.parseInt(dateEnd2[1]);
+ stTimeEnd.dwSecond = Integer.parseInt(dateEnd2[2]);
+
+ if(stTimeStart.dwYear != stTimeEnd.dwYear
+ || stTimeStart.dwMonth != stTimeEnd.dwMonth
+ || (stTimeEnd.dwDay - stTimeStart.dwDay > 1)) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectTimeAgain(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(stTimeEnd.dwDay - stTimeStart.dwDay == 1) {
+ time = (24 + stTimeEnd.dwHour)*60*60 + stTimeEnd.dwMinute*60 + stTimeEnd.dwSecond -
+ stTimeStart.dwHour*60*60 - stTimeStart.dwMinute*60 - stTimeStart.dwSecond;
+ } else {
+ time = stTimeEnd.dwHour*60*60 + stTimeEnd.dwMinute*60 + stTimeEnd.dwSecond -
+ stTimeStart.dwHour*60*60 - stTimeStart.dwMinute*60 - stTimeStart.dwSecond;
+ }
+
+ if(time > 6 * 60 * 60
+ || time <= 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectTimeAgain(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(!DownLoadRecordModule.queryRecordFile(chnComboBoxByFile.getSelectedIndex(),
+ stTimeStart,
+ stTimeEnd,
+ stFileInfo,
+ nFindCount)) {
+ // 列表清空
+ data = new Object[14][5];
+ table.setModel(new DefaultTableModel(data, Res.string().getDownloadTableName()));
+ table.getColumnModel().getColumn(0).setPreferredWidth(23);
+ table.getColumnModel().getColumn(1).setPreferredWidth(28);
+ table.getColumnModel().getColumn(2).setPreferredWidth(50);
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ } else {
+ System.out.println(nFindCount.getValue());
+ int count = 0;
+ if(nFindCount.getValue() > 14) {
+ count = nFindCount.getValue();
+ } else {
+ count = 14;
+ }
+ data = new Object[count][5];
+ table.setModel(new DefaultTableModel(data, Res.string().getDownloadTableName()));
+ table.getColumnModel().getColumn(0).setPreferredWidth(23);
+ table.getColumnModel().getColumn(1).setPreferredWidth(28);
+ table.getColumnModel().getColumn(2).setPreferredWidth(50);
+
+ if(nFindCount.getValue() == 0) {
+ return;
+ }
+
+ model = (DefaultTableModel)table.getModel();
+
+ for(int j = 0; j < nFindCount.getValue(); j++) {
+ model.setValueAt(String.valueOf(i), j, 0);
+ model.setValueAt(String.valueOf(stFileInfo[j].ch + 1), j, 1); // 设备返回的通道加1
+ model.setValueAt(Res.string().getRecordTypeStr(stFileInfo[j].nRecordFileType), j, 2);
+ model.setValueAt(stFileInfo[j].starttime.toStringTime(), j, 3);
+ model.setValueAt(stFileInfo[j].endtime.toStringTime(), j, 4);
+
+ i++;
+ }
+ }
+ }
+ });
+
+ downloadByFileBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ int row = -1;
+ row = table.getSelectedRow(); //获得所选的单行
+
+ if(model == null) {
+ JOptionPane.showMessageDialog(null, Res.string().getQueryRecord(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(row < 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectRowWithData(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ for(int m = 1; m < 5; m++) {
+ if(model.getValueAt(row, m) == null || String.valueOf(model.getValueAt(row, m)).trim().equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectRowWithData(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ }
+
+ // 开始时间
+ String[] dateStart = String.valueOf(model.getValueAt(row, 3)).split(" ");
+ String[] dateStartByFile1 = dateStart[0].split("/");
+ String[] dateStartByFile2 = dateStart[1].split(":");
+
+ stTimeStart.dwYear = Integer.parseInt(dateStartByFile1[0]);
+ stTimeStart.dwMonth = Integer.parseInt(dateStartByFile1[1]);
+ stTimeStart.dwDay = Integer.parseInt(dateStartByFile1[2]);
+
+ stTimeStart.dwHour = Integer.parseInt(dateStartByFile2[0]);
+ stTimeStart.dwMinute = Integer.parseInt(dateStartByFile2[1]);
+ stTimeStart.dwSecond = Integer.parseInt(dateStartByFile2[2]);
+
+ // 结束时间
+ String[] dateEnd = String.valueOf(model.getValueAt(row, 4)).split(" ");
+ String[] dateEndByFile1 = dateEnd[0].split("/");
+ String[] dateEndByFile2 = dateEnd[1].split(":");
+
+ stTimeEnd.dwYear = Integer.parseInt(dateEndByFile1[0]);
+ stTimeEnd.dwMonth = Integer.parseInt(dateEndByFile1[1]);
+ stTimeEnd.dwDay = Integer.parseInt(dateEndByFile1[2]);
+
+ stTimeEnd.dwHour = Integer.parseInt(dateEndByFile2[0]);
+ stTimeEnd.dwMinute = Integer.parseInt(dateEndByFile2[1]);
+ stTimeEnd.dwSecond = Integer.parseInt(dateEndByFile2[2]);
+
+ if(!b_downloadByFile) {
+ System.out.println("ByFile" + String.valueOf(model.getValueAt(row, 3)) + "\n" + String.valueOf(model.getValueAt(row, 4)));
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ downloadByFileProgressBar.setValue(0);
+ }
+ });
+ m_hDownLoadByFileHandle = DownLoadRecordModule.downloadRecordFile(Integer.parseInt(String.valueOf(model.getValueAt(row, 1))) - 1,
+ Res.string().getRecordTypeInt(String.valueOf(model.getValueAt(row, 2))),
+ stTimeStart,
+ stTimeEnd,
+ SavePath.getSavePath().getSaveRecordFilePath(),
+ m_DownLoadPosByFile);
+ if(m_hDownLoadByFileHandle.longValue() != 0) {
+ b_downloadByFile = true;
+ downloadByFileBtn.setText(Res.string().getStopDownload());
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ } else {
+ DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByFileHandle);
+ b_downloadByFile = false;
+ downloadByFileBtn.setText(Res.string().getDownload());
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ downloadByFileProgressBar.setValue(0);
+ }
+ });
+ }
+ }
+ });
+ }
+ }
+
+ /*
+ * 按时间下载面板
+ */
+ private class DownLoadByTimePanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public DownLoadByTimePanel() {
+ BorderEx.set(this, Res.string().getDownloadByTime(), 2);
+ setLayout(new BorderLayout());
+
+ downloadByTimeSetPanel = new JPanel(); // 设置
+ downByTimePanel = new JPanel(); // 下载
+
+ add(downloadByTimeSetPanel, BorderLayout.NORTH);
+ add(downByTimePanel, BorderLayout.CENTER);
+
+ /******** 设置面板***********/
+ JPanel startTimeByTime = new JPanel();
+ JPanel endTimeByTime = new JPanel();
+ JPanel chnByTime = new JPanel();
+ JPanel streamByTime = new JPanel();
+
+ downloadByTimeSetPanel.setLayout(new GridLayout(2, 2));
+
+ downloadByTimeSetPanel.add(startTimeByTime);
+ downloadByTimeSetPanel.add(endTimeByTime);
+ downloadByTimeSetPanel.add(chnByTime);
+ downloadByTimeSetPanel.add(streamByTime);
+
+ // 开始时间设置
+ startTimeByTime.setBorder(new EmptyBorder(5, 5, 5, 20));
+ startTimeByTime.setLayout(new GridLayout(2, 1));
+ JLabel startLabel = new JLabel(Res.string().getStartTime());
+ dateChooserStartByTime = new DateChooserJButton();
+ Dimension dimension = new Dimension();
+ dimension.height = 20;
+ dateChooserStartByTime.setPreferredSize(dimension);
+
+ startTimeByTime.add(startLabel);
+ startTimeByTime.add(dateChooserStartByTime);
+
+ // 结束时间设置
+ endTimeByTime.setBorder(new EmptyBorder(5, 20, 5, 5));
+ endTimeByTime.setLayout(new GridLayout(2, 1));
+ JLabel endLabel = new JLabel(Res.string().getEndTime());
+ dateChooserEndByTime = new DateChooserJButton();
+ dateChooserEndByTime.setPreferredSize(dimension);
+
+ endTimeByTime.add(endLabel);
+ endTimeByTime.add(dateChooserEndByTime);
+
+ // 通道设置
+ chnByTime.setBorder(new EmptyBorder(5, 10, 0, 5));
+ chnByTime.setLayout(new FlowLayout());
+ chnlabel = new JLabel(Res.string().getChannel());
+ chnComboBoxByTime = new JComboBox();
+ chnComboBoxByTime.setPreferredSize(new Dimension(115, 20));
+ chnByTime.add(chnlabel);
+ chnByTime.add(chnComboBoxByTime);
+
+ // 码流设置
+ streamByTime.setBorder(new EmptyBorder(5, 10, 0, 5));
+ streamByTime.setLayout(new FlowLayout());
+ streamLabel = new JLabel(Res.string().getStreamType());
+ String[] stream = {Res.string().getMasterAndSub(), Res.string().getMasterStream(), Res.string().getSubStream()};
+ streamComboBoxByTime = new JComboBox();
+ streamComboBoxByTime.setModel(new DefaultComboBoxModel(stream));
+ streamComboBoxByTime.setPreferredSize(new Dimension(115, 20));
+ streamByTime.add(streamLabel);
+ streamByTime.add(streamComboBoxByTime);
+
+ /******** 下载面板***********/
+ downByTimePanel.setLayout(new FlowLayout());
+ downByTimePanel.setBorder(new EmptyBorder(0, 5, 0, 5));
+
+ JPanel btnPanel2 = new JPanel();
+ downloadByTimeProgressBar = new JProgressBar(0, 100);
+
+ downloadByTimeProgressBar.setPreferredSize(new Dimension(355, 20));
+ downloadByTimeProgressBar.setStringPainted(true);
+
+ downByTimePanel.add(btnPanel2);
+ downByTimePanel.add(downloadByTimeProgressBar);
+
+ // 下载按钮
+ downloadByTimeBtn = new JButton(Res.string().getDownload());
+ JLabel nullLabel = new JLabel();
+ nullLabel.setPreferredSize(new Dimension(180, 20));
+ downloadByTimeBtn.setPreferredSize(new Dimension(170, 20));
+
+ btnPanel2.setLayout(new FlowLayout());
+ btnPanel2.add(downloadByTimeBtn);
+ btnPanel2.add(nullLabel);
+
+ downloadByTimeBtn.setEnabled(false);
+ downloadByTimeProgressBar.setEnabled(false);
+ chnComboBoxByTime.setEnabled(false);
+ streamComboBoxByTime.setEnabled(false);
+ dateChooserStartByTime.setEnabled(false);
+ dateChooserEndByTime.setEnabled(false);
+
+ streamComboBoxByTime.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ DownLoadRecordModule.setStreamType(streamComboBoxByTime.getSelectedIndex());
+ }
+ });
+
+ downloadByTimeBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ int time = 0;
+ // 开始时间
+ String[] dateStartByTime = dateChooserStartByTime.getText().split(" ");
+ String[] dateStart1 = dateStartByTime[0].split("-");
+ String[] dateStart2 = dateStartByTime[1].split(":");
+
+ stTimeStart.dwYear = Integer.parseInt(dateStart1[0]);
+ stTimeStart.dwMonth = Integer.parseInt(dateStart1[1]);
+ stTimeStart.dwDay = Integer.parseInt(dateStart1[2]);
+
+ stTimeStart.dwHour = Integer.parseInt(dateStart2[0]);
+ stTimeStart.dwMinute = Integer.parseInt(dateStart2[1]);
+ stTimeStart.dwSecond = Integer.parseInt(dateStart2[2]);
+
+ // 结束时间
+ String[] dateEndByTime = dateChooserEndByTime.getText().split(" ");
+ String[] dateEnd1 = dateEndByTime[0].split("-");
+ String[] dateEnd2 = dateEndByTime[1].split(":");
+
+ stTimeEnd.dwYear = Integer.parseInt(dateEnd1[0]);
+ stTimeEnd.dwMonth = Integer.parseInt(dateEnd1[1]);
+ stTimeEnd.dwDay = Integer.parseInt(dateEnd1[2]);
+
+ stTimeEnd.dwHour = Integer.parseInt(dateEnd2[0]);
+ stTimeEnd.dwMinute = Integer.parseInt(dateEnd2[1]);
+ stTimeEnd.dwSecond = Integer.parseInt(dateEnd2[2]);
+
+ if(stTimeStart.dwYear != stTimeEnd.dwYear
+ || stTimeStart.dwMonth != stTimeEnd.dwMonth
+ || (stTimeEnd.dwDay - stTimeStart.dwDay) > 1) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectTimeAgain(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(stTimeEnd.dwDay - stTimeStart.dwDay == 1) {
+ time = (24 + stTimeEnd.dwHour)*60*60 + stTimeEnd.dwMinute*60 + stTimeEnd.dwSecond -
+ stTimeStart.dwHour*60*60 - stTimeStart.dwMinute*60 - stTimeStart.dwSecond;
+ } else {
+ time = stTimeEnd.dwHour*60*60 + stTimeEnd.dwMinute*60 + stTimeEnd.dwSecond -
+ stTimeStart.dwHour*60*60 - stTimeStart.dwMinute*60 - stTimeStart.dwSecond;
+ }
+ System.out.println("time :" + time);
+ if(time > 6 * 60 * 60
+ || time <= 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectTimeAgain(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(!b_downloadByTime) {
+ System.out.println("ByTime" + dateChooserStartByTime.getText() + "\n" + dateChooserEndByTime.getText());
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ downloadByTimeProgressBar.setValue(0);
+ }
+ });
+ m_hDownLoadByTimeHandle = DownLoadRecordModule.downloadRecordFile(chnComboBoxByTime.getSelectedIndex(),
+ 0,
+ stTimeStart,
+ stTimeEnd,
+ SavePath.getSavePath().getSaveRecordFilePath(),
+ m_DownLoadPosByTime);
+ if(m_hDownLoadByTimeHandle.longValue() != 0) {
+ b_downloadByTime = true;
+ downloadByTimeBtn.setText(Res.string().getStopDownload());
+ chnComboBoxByTime.setEnabled(false);
+ streamComboBoxByTime.setEnabled(false);
+ dateChooserStartByTime.setEnabled(false);
+ dateChooserEndByTime.setEnabled(false);
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ } else {
+ DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByTimeHandle);
+ b_downloadByTime = false;
+ downloadByTimeBtn.setText(Res.string().getDownload());
+ chnComboBoxByTime.setEnabled(true);
+ streamComboBoxByTime.setEnabled(true);
+ dateChooserStartByTime.setEnabled(true);
+ dateChooserEndByTime.setEnabled(true);
+
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ downloadByTimeProgressBar.setValue(0);
+ }
+ });
+ }
+ }
+ });
+ }
+ }
+
+ /*
+ * 按文件下载回调
+ */
+ private DownLoadPosCallBackByFile m_DownLoadPosByFile = new DownLoadPosCallBackByFile(); // 录像下载进度
+ class DownLoadPosCallBackByFile implements NetSDKLib.fTimeDownLoadPosCallBack{
+ public void invoke(LLong lLoginID, final int dwTotalSize, final int dwDownLoadSize, int index, NetSDKLib.NET_RECORDFILE_INFO.ByValue recordfileinfo, Pointer dwUser) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+// System.out.println("ByFile " + dwDownLoadSize + " / " + dwTotalSize);
+ downloadByFileProgressBar.setValue(dwDownLoadSize*100 / dwTotalSize);
+ if(dwDownLoadSize == -1) {
+ downloadByFileProgressBar.setValue(100);
+ DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByFileHandle);
+ b_downloadByFile = false;
+ downloadByFileBtn.setText(Res.string().getDownload());
+ JOptionPane.showMessageDialog(null, Res.string().getDownloadCompleted(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ }
+ }
+ });
+ }
+ }
+
+ /*
+ * 按时间下载回调
+ */
+ private DownLoadPosCallBackByTime m_DownLoadPosByTime = new DownLoadPosCallBackByTime(); // 录像下载进度
+ class DownLoadPosCallBackByTime implements NetSDKLib.fTimeDownLoadPosCallBack{
+ public void invoke(LLong lLoginID, final int dwTotalSize, final int dwDownLoadSize, int index, NetSDKLib.NET_RECORDFILE_INFO.ByValue recordfileinfo, Pointer dwUser) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+// System.out.println("ByTime " + dwDownLoadSize + " / " + dwTotalSize);
+ downloadByTimeProgressBar.setValue(dwDownLoadSize*100 / dwTotalSize);
+ if(dwDownLoadSize == -1) {
+ downloadByTimeProgressBar.setValue(100);
+ DownLoadRecordModule.stopDownLoadRecordFile(m_hDownLoadByTimeHandle);
+ b_downloadByTime = false;
+ downloadByTimeBtn.setText(Res.string().getDownload());
+ chnComboBoxByTime.setEnabled(true);
+ streamComboBoxByTime.setEnabled(true);
+ dateChooserStartByTime.setEnabled(true);
+ dateChooserEndByTime.setEnabled(true);
+ JOptionPane.showMessageDialog(null, Res.string().getDownloadCompleted(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ }
+ }
+ });
+ }
+ }
+
+ private void setButtonEnable(boolean bln) {
+ queryRecordBtn.setEnabled(bln);
+ downloadByFileBtn.setEnabled(bln);
+ downloadByFileProgressBar.setValue(0);
+ downloadByFileProgressBar.setEnabled(bln);
+ downloadByTimeBtn.setEnabled(bln);
+ downloadByTimeProgressBar.setValue(0);
+ downloadByTimeProgressBar.setEnabled(bln);
+ chnComboBoxByFile.setEnabled(bln);
+ streamComboBoxByFile.setEnabled(bln);
+ chnComboBoxByTime.setEnabled(bln);
+ streamComboBoxByTime.setEnabled(bln);
+ dateChooserStartByFile.setEnabled(bln);
+ dateChooserEndByFile.setEnabled(bln);
+ dateChooserStartByTime.setEnabled(bln);
+ dateChooserEndByTime.setEnabled(bln);
+ }
+
+ //登录组件
+ private LoginPanel loginPanel;
+ // 下载
+ private DownLoadRecordPanel downloadRecordPanel;
+
+ // 按文件下载
+ private DownLoadByTimePanel downloadByTimePanel;
+ private JPanel downloadByFileSetPanel;
+ private JPanel queryPanel;
+ private JPanel downByFilePanel;
+ private JButton queryRecordBtn;
+ private JButton downloadByFileBtn;
+ private JProgressBar downloadByFileProgressBar;
+ private JButton downloadByTimeBtn;
+ private JProgressBar downloadByTimeProgressBar;
+ private JTable table;
+ private DefaultTableModel defaultmodel;
+ private JLabel chnlabel;
+ private JComboBox chnComboBoxByFile;
+ private JComboBox chnComboBoxByTime;
+ private JLabel streamLabel;
+ private JComboBox streamComboBoxByFile;
+ private JComboBox streamComboBoxByTime;
+
+ private DateChooserJButton dateChooserStartByFile;
+ private DateChooserJButton dateChooserEndByFile;
+
+ // 按文件下载
+ private DownLoadByFilePanel downloadByFilePanel;
+ private JPanel downloadByTimeSetPanel;
+ private JPanel downByTimePanel;
+
+ private DateChooserJButton dateChooserStartByTime;
+ private DateChooserJButton dateChooserEndByTime;
+}
+
+public class DownLoadRecord {
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ DownLoadRecordFrame demo = new DownLoadRecordFrame();
+ demo.setVisible(true);
+ }
+ });
+ }
+};
+
diff --git a/src/main/java/com/netsdk/demo/frame/FaceRecognition/AddPersonDialog.java b/src/main/java/com/netsdk/demo/frame/FaceRecognition/AddPersonDialog.java
new file mode 100644
index 0000000..6cd4efb
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/FaceRecognition/AddPersonDialog.java
@@ -0,0 +1,254 @@
+package com.netsdk.demo.frame.FaceRecognition;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.IOException;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import com.sun.jna.Memory;
+
+import com.netsdk.common.*;
+import com.netsdk.demo.module.FaceRecognitionModule;
+import com.netsdk.lib.ToolKits;
+
+public class AddPersonDialog extends JDialog{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ private Memory memory = null;
+ private String groupId = "";
+ private String groupName = "";
+
+ private WindowCloseListener listener;
+ public void addWindowCloseListener(WindowCloseListener listener) {
+ this.listener = listener;
+ }
+
+ /**
+ * @param groupId 人脸库ID
+ * @param groupName 人脸库名称
+ */
+ public AddPersonDialog(String groupId, String groupName){
+ setTitle(Res.string().getAddPerson());
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(520, 400);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体
+
+ this.groupId = groupId;
+ this.groupName = groupName;
+
+ FaceServerAddPanel faceServerAddPanel = new FaceServerAddPanel();
+ add(faceServerAddPanel, BorderLayout.CENTER);
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e){
+ dispose();
+ }
+ });
+ }
+
+ public class FaceServerAddPanel extends JPanel{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public FaceServerAddPanel() {
+ BorderEx.set(this, "", 4);
+ setLayout(new BorderLayout());
+
+ JPanel imagePanel = new JPanel();
+ JPanel personInfoPanel = new JPanel();
+
+ Dimension dimension = this.getPreferredSize();
+ dimension.height = 400;
+ dimension.width = 250;
+ personInfoPanel.setPreferredSize(dimension);
+
+ add(imagePanel, BorderLayout.CENTER);
+ add(personInfoPanel, BorderLayout.WEST);
+
+ /////////// 添加的人脸图片面板 //////////////////
+ imagePanel.setLayout(new BorderLayout());
+ addImagePanel = new PaintPanel(); // 添加的人员信息图片显示
+ selectImageBtn = new JButton(Res.string().getSelectPicture());
+ imagePanel.add(addImagePanel, BorderLayout.CENTER);
+ imagePanel.add(selectImageBtn, BorderLayout.SOUTH);
+
+ ////////// 添加的人脸信息面板 /////////////////
+ personInfoPanel.setLayout(new FlowLayout());
+ JLabel goroupIdLabel = new JLabel(Res.string().getFaceGroupId(), JLabel.CENTER);
+ JLabel goroupNameLabel = new JLabel(Res.string().getFaceGroupName(), JLabel.CENTER);
+ JLabel nameLabel = new JLabel(Res.string().getName(), JLabel.CENTER);
+ JLabel sexLabel = new JLabel(Res.string().getSex(), JLabel.CENTER);
+ JLabel birthdayLabel = new JLabel(Res.string().getBirthday(), JLabel.CENTER);
+ JLabel idTypeLabel = new JLabel(Res.string().getIdType(), JLabel.CENTER);
+ JLabel idLabel = new JLabel(Res.string().getIdNo(), JLabel.CENTER);
+
+ Dimension dimension2 = new Dimension();
+ dimension2.width = 80;
+ dimension2.height = 20;
+ goroupIdLabel.setPreferredSize(dimension2);
+ goroupNameLabel.setPreferredSize(dimension2);
+ nameLabel.setPreferredSize(dimension2);
+ sexLabel.setPreferredSize(dimension2);
+ idTypeLabel.setPreferredSize(dimension2);
+ idLabel.setPreferredSize(dimension2);
+ birthdayLabel.setPreferredSize(dimension2);
+
+ goroupIdTextField = new JTextField();
+ goroupNameTextField = new JTextField();
+ nameTextField = new JTextField();
+ sexComboBox = new JComboBox(Res.string().getSexStrings());
+ birthdayBtn = new DateChooserJButtonEx();
+ idTypeComboBox = new JComboBox(Res.string().getIdStrings());
+ idTextField = new JTextField();
+ birthdayCheckBox = new JCheckBox();
+
+ addBtn = new JButton(Res.string().getAdd());
+ cancelBtn = new JButton(Res.string().getCancel());
+
+ birthdayBtn.setStartYear(1900);
+
+ Dimension dimension3 = new Dimension();
+ dimension3.width = 150;
+ dimension3.height = 20;
+
+ sexComboBox.setPreferredSize(dimension3);
+ idTypeComboBox.setPreferredSize(dimension3);
+ goroupIdTextField.setPreferredSize(dimension3);
+ goroupNameTextField.setPreferredSize(dimension3);
+ nameTextField.setPreferredSize(dimension3);
+ idTextField.setPreferredSize(dimension3);
+ birthdayBtn.setPreferredSize(new Dimension(130, 20));
+ birthdayCheckBox.setPreferredSize(new Dimension(20, 20));
+ addBtn.setPreferredSize(new Dimension(120, 20));
+ cancelBtn.setPreferredSize(new Dimension(120, 20));
+
+ goroupIdTextField.setEditable(false);
+ goroupNameTextField.setEditable(false);
+ birthdayCheckBox.setSelected(true);
+
+ goroupIdTextField.setText(groupId);
+ goroupNameTextField.setText(groupName);
+
+ personInfoPanel.add(goroupIdLabel);
+ personInfoPanel.add(goroupIdTextField);
+ personInfoPanel.add(goroupNameLabel);
+ personInfoPanel.add(goroupNameTextField);
+ personInfoPanel.add(nameLabel);
+ personInfoPanel.add(nameTextField);
+ personInfoPanel.add(sexLabel);
+ personInfoPanel.add(sexComboBox);
+ personInfoPanel.add(idTypeLabel);
+ personInfoPanel.add(idTypeComboBox);
+ personInfoPanel.add(idLabel);
+ personInfoPanel.add(idTextField);
+ personInfoPanel.add(birthdayLabel);
+ personInfoPanel.add(birthdayBtn);
+ personInfoPanel.add(birthdayCheckBox);
+ personInfoPanel.add(addBtn);
+ personInfoPanel.add(cancelBtn);
+
+ birthdayCheckBox.addChangeListener(new ChangeListener() {
+ @Override
+ public void stateChanged(ChangeEvent arg0) {
+ if(birthdayCheckBox.isSelected()) {
+ birthdayBtn.setEnabled(true);
+ } else {
+ birthdayBtn.setEnabled(false);
+ }
+ }
+ });
+
+ // 选择图片,获取图片的信息
+ selectImageBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ String picPath = "";
+
+ // 选择图片,获取图片路径,并在界面显示
+ picPath = ToolKits.openPictureFile(addImagePanel);
+
+ if(!picPath.equals("")) {
+ try {
+ memory = ToolKits.readPictureFile(picPath);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ }
+ });
+
+ // 添加人员信息
+ addBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ boolean bRet = FaceRecognitionModule.addPerson(goroupIdTextField.getText(),
+ memory,
+ nameTextField.getText(),
+ sexComboBox.getSelectedIndex(),
+ birthdayCheckBox.isSelected(), birthdayBtn.getText().toString(),
+ idTypeComboBox.getSelectedIndex(), idTextField.getText());
+
+ if(bRet) {
+ JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+
+ dispose();
+
+ listener.windowClosing();
+ }
+ });
+
+ // 取消,关闭
+ cancelBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ dispose();
+ }
+ });
+ }
+ }
+
+
+ // 添加人员信息窗口的组件
+ private PaintPanel addImagePanel;
+ private JButton selectImageBtn;
+
+ private JTextField goroupIdTextField;
+ private JTextField goroupNameTextField;
+ private JTextField nameTextField;
+ private JComboBox sexComboBox;
+ private DateChooserJButtonEx birthdayBtn;
+ private JComboBox idTypeComboBox;
+ private JTextField idTextField;
+ private JButton addBtn;
+ private JButton cancelBtn;
+ private JCheckBox birthdayCheckBox;
+}
diff --git a/src/main/java/com/netsdk/demo/frame/FaceRecognition/DispositionOperateDialog.java b/src/main/java/com/netsdk/demo/frame/FaceRecognition/DispositionOperateDialog.java
new file mode 100644
index 0000000..3b7bbe6
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/FaceRecognition/DispositionOperateDialog.java
@@ -0,0 +1,350 @@
+package com.netsdk.demo.frame.FaceRecognition;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Vector;
+
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+
+import com.netsdk.common.*;
+import com.netsdk.demo.module.FaceRecognitionModule;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.NetSDKLib.NET_FACERECONGNITION_GROUP_INFO;
+
+public class DispositionOperateDialog extends JDialog {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ // 通道列表
+ private Vector chnlist = new Vector();
+
+ // 通道个数
+ private int nChn = LoginModule.m_stDeviceInfo.byChanNum;
+
+ // 通道列表, 用于布控
+ private ArrayList< Integer> arrayList = new ArrayList();
+
+ // key:通道 value:相似度, 用于撤控
+ private HashMap hashMap = new HashMap();
+
+ String groupId = "";
+ String groupName = "";
+
+ public DispositionOperateDialog(String groupId, String groupName) {
+ setTitle(Res.string().getDisposition() + "/" + Res.string().getDelDisposition());
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(450, 400);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体
+
+ for(int i = 1; i < nChn + 1; i++) {
+ chnlist.add(Res.string().getChannel() + " " + String.valueOf(i));
+ }
+
+ this.groupId = groupId;
+ this.groupName = groupName;
+
+ DispositionListPanel dispositionListPanel = new DispositionListPanel();
+ DispositionInfoPanel dispositionInfoPanel = new DispositionInfoPanel();
+
+ add(dispositionListPanel, BorderLayout.CENTER);
+ add(dispositionInfoPanel, BorderLayout.NORTH);
+
+ findChnAndSimilary();
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ dispose();
+ }
+ });
+ }
+
+ /*
+ * 布控显示列表
+ */
+ private class DispositionListPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+ public DispositionListPanel() {
+ BorderEx.set(this, "", 2);
+ setLayout(new BorderLayout());
+
+ JPanel panel = new JPanel();
+ JPanel panel2 = new JPanel();
+ JPanel panel3 = new JPanel();
+
+ Dimension dimension = new Dimension();
+ dimension.width = 145;
+ panel.setPreferredSize(dimension);
+ panel.setLayout(new BorderLayout());
+ panel.add(panel2, BorderLayout.NORTH);
+ panel.add(panel3, BorderLayout.SOUTH);
+
+ addBtn = new JButton(Res.string().getAdd());
+ refreshBtn = new JButton(Res.string().getFresh());
+ panel2.setLayout(new GridLayout(2, 1));
+ panel2.add(addBtn);
+ panel2.add(refreshBtn);
+
+ dispositionBtn = new JButton(Res.string().getDisposition());
+ delDispositionBtn = new JButton(Res.string().getDelDisposition());
+ panel3.setLayout(new GridLayout(2, 1));
+ panel3.add(dispositionBtn);
+ panel3.add(delDispositionBtn);
+
+ data = new Object[512][2];
+ defaultTableModel = new DefaultTableModel(data, Res.string().getDispositionTable());
+ table = new JTable(defaultTableModel){ // 列表不可编辑
+ private static final long serialVersionUID = 1L;
+ @Override
+ public boolean isCellEditable(int row, int column) {
+ return false;
+ }
+ };
+
+ DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer();
+ dCellRenderer.setHorizontalAlignment(JLabel.CENTER);
+ table.setDefaultRenderer(Object.class, dCellRenderer);
+
+ add(new JScrollPane(table), BorderLayout.CENTER);
+ add(panel, BorderLayout.EAST);
+
+ // 添加通道和相似度到列表
+ addBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ boolean isExit = false;
+
+ String chn = String.valueOf(chnComboBox.getSelectedIndex() + 1);
+ String similary = similaryTextField.getText();
+
+ if(similaryTextField.getText().equals("")
+ || Integer.parseInt(similaryTextField.getText()) > 100) {
+ JOptionPane.showMessageDialog(null, Res.string().getSimilarityRange(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ // 如果存在了通道号,列表修改相应的相似度
+ for(int i = 0; i < nChn; i++) {
+ if(chn.equals(String.valueOf(defaultTableModel.getValueAt(i, 0)).trim())) {
+ defaultTableModel.setValueAt(similary, i, 1);
+ isExit = true;
+ break;
+ }
+ }
+
+ if(isExit) {
+ return;
+ }
+
+ // 如果不存在通道号,按顺序添加人列表
+ for(int i = 0; i < nChn; i++) {
+ if(String.valueOf(defaultTableModel.getValueAt(i, 0)).trim().equals("")
+ || defaultTableModel.getValueAt(i, 0) == null) {
+ defaultTableModel.setValueAt(chn, i, 0);
+ defaultTableModel.setValueAt(similary, i, 1);
+ break;
+ }
+ }
+ }
+ });
+
+ // 刷新已布控的通道和相似度信息
+ refreshBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ findChnAndSimilary();
+ }
+ });
+
+ // 布控
+ dispositionBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ hashMap.clear();
+
+ // 获取列表里的数据
+ for(int i = 0; i < nChn; i++) {
+ // 判断通道号是否为空
+ if(!String.valueOf(defaultTableModel.getValueAt(i, 0)).trim().equals("")
+ && defaultTableModel.getValueAt(i, 0) != null) {
+
+ // 判断相似度是否为空
+ if(!String.valueOf(defaultTableModel.getValueAt(i, 1)).trim().equals("")
+ && defaultTableModel.getValueAt(i, 1) != null) {
+ hashMap.put(Integer.parseInt(String.valueOf(defaultTableModel.getValueAt(i, 0)).trim()),
+ Integer.parseInt(String.valueOf(defaultTableModel.getValueAt(i, 1)).trim()));
+ } else {
+ hashMap.put(Integer.parseInt(String.valueOf(defaultTableModel.getValueAt(i, 0)).trim()), 0);
+ }
+ }
+ }
+ System.out.println("size:" + hashMap.size());
+ if(hashMap.size() == 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getAddDispositionInfo(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(!FaceRecognitionModule.putDisposition(goroupIdTextField.getText(), hashMap)) {
+ JOptionPane.showMessageDialog(null, Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ }
+
+ // 刷新列表
+ findChnAndSimilary();
+ }
+ });
+
+ delDispositionBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ arrayList.clear();
+
+ // 获取所有选中行数
+ int[] rows = null;
+ rows = table.getSelectedRows();
+
+ if(rows == null) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectDelDispositionInfo(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ // 获取所有选中,非空的通道号
+ for(int i = 0; i < rows.length; i++) {
+ if(!String.valueOf(defaultTableModel.getValueAt(rows[i], 0)).trim().equals("")
+ && defaultTableModel.getValueAt(rows[i], 0) != null) {
+ arrayList.add(Integer.parseInt(String.valueOf(defaultTableModel.getValueAt(rows[i], 0)).trim()));
+ }
+ }
+
+ if(arrayList.size() == 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectDelDispositionInfo(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(!FaceRecognitionModule.delDisposition(goroupIdTextField.getText(), arrayList)) {
+ JOptionPane.showMessageDialog(null, Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ }
+
+ // 刷新列表
+ findChnAndSimilary();
+ }
+ });
+ }
+ }
+
+ /*
+ * 布控信息
+ */
+ private class DispositionInfoPanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ public DispositionInfoPanel() {
+ BorderEx.set(this, "", 2);
+ setLayout(new FlowLayout());
+
+ Dimension dimension = new Dimension();
+ dimension.height = 80;
+ setPreferredSize(dimension);
+
+ JLabel goroupIdLabel = new JLabel(Res.string().getFaceGroupId(), JLabel.CENTER);
+ JLabel goroupNameLabel = new JLabel(Res.string().getFaceGroupName(), JLabel.CENTER);
+ JLabel chnLabel = new JLabel(Res.string().getChannel(), JLabel.CENTER);
+ JLabel similaryLabel = new JLabel(Res.string().getSimilarity(), JLabel.CENTER);
+
+ goroupIdTextField = new JTextField();
+ goroupNameTextField = new JTextField();
+ chnComboBox = new JComboBox(chnlist);
+ similaryTextField = new JTextField();
+
+ Dimension dimension1 = new Dimension();
+ dimension1.width = 80;
+ dimension1.height = 20;
+ goroupIdLabel.setPreferredSize(dimension1);
+ goroupNameLabel.setPreferredSize(dimension1);
+ chnLabel.setPreferredSize(dimension1);
+ similaryLabel.setPreferredSize(dimension1);
+ goroupIdTextField.setPreferredSize(new Dimension(120, 20));
+ goroupNameTextField.setPreferredSize(new Dimension(120, 20));
+ chnComboBox.setPreferredSize(new Dimension(120, 20));
+ similaryTextField.setPreferredSize(new Dimension(120, 20));
+
+ add(goroupIdLabel);
+ add(goroupIdTextField);
+ add(goroupNameLabel);
+ add(goroupNameTextField);
+ add(chnLabel);
+ add(chnComboBox);
+ add(similaryLabel);
+ add(similaryTextField);
+
+ ToolKits.limitTextFieldLength(similaryTextField, 3);
+
+ goroupIdTextField.setEditable(false);
+ goroupNameTextField.setEditable(false);
+
+ goroupIdTextField.setText(groupId);
+ goroupNameTextField.setText(groupName);
+ }
+ }
+
+ // 查找人脸库的布控通道以及对应的相似度
+ private void findChnAndSimilary() {
+ // 清空列表
+ defaultTableModel.setRowCount(0);
+ defaultTableModel.setRowCount(512);
+
+ // 查询布控信息
+ NET_FACERECONGNITION_GROUP_INFO[] groupInfos = FaceRecognitionModule.findGroupInfo(goroupIdTextField.getText());
+
+ if(groupInfos == null) {
+ return;
+ }
+
+ for(int i = 0; i < groupInfos[0].nRetChnCount; i++) {
+ defaultTableModel.setValueAt(String.valueOf(groupInfos[0].nChannel[i] + 1), i, 0);
+ defaultTableModel.setValueAt(String.valueOf(groupInfos[0].nSimilarity[i]), i, 1);
+ }
+ }
+
+ private Object[][] data;
+ private DefaultTableModel defaultTableModel;
+ private JTable table;
+
+ private JButton addBtn;
+ private JButton refreshBtn;
+ private JButton dispositionBtn;
+ private JButton delDispositionBtn;
+ private JTextField goroupIdTextField;
+ private JTextField goroupNameTextField;
+ private JComboBox chnComboBox;
+ private JTextField similaryTextField;
+}
diff --git a/src/main/java/com/netsdk/demo/frame/FaceRecognition/DownloadPictureDialog.java b/src/main/java/com/netsdk/demo/frame/FaceRecognition/DownloadPictureDialog.java
new file mode 100644
index 0000000..5cd6d2d
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/FaceRecognition/DownloadPictureDialog.java
@@ -0,0 +1,138 @@
+package com.netsdk.demo.frame.FaceRecognition;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.HeadlessException;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.File;
+import java.util.concurrent.ExecutionException;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+import javax.swing.SwingWorker;
+
+import com.netsdk.common.PaintPanel;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.FaceRecognitionModule;
+import com.netsdk.lib.ToolKits;
+
+public class DownloadPictureDialog extends JDialog{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public DownloadPictureDialog() {
+ setTitle(Res.string().getDownLoadPicture());
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(380, 500);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体
+
+ JLabel picPathLabel = new JLabel(Res.string().getPicturePath()+":", JLabel.CENTER);
+ picPathTextField = new JTextField();
+ downloadBth = new JButton(Res.string().getDownLoadPicture());
+
+ picPathTextField.setPreferredSize(new Dimension(180, 20));
+ downloadBth.setPreferredSize(new Dimension(80, 20));
+
+ paintPanel = new PaintPanel();
+ paintPanel.setPreferredSize(new Dimension(360, 450));
+
+ setLayout(new FlowLayout());
+ add(picPathLabel);
+ add(picPathTextField);
+ add(downloadBth);
+ add(paintPanel);
+
+ downloadBth.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ paintPanel.setOpaque(true);
+ paintPanel.repaint();
+ downloadBth.setEnabled(false);
+ }
+ });
+
+ downloadPicture();
+ }
+ });
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ dispose();
+ }
+ });
+ }
+
+ private void downloadPicture() {
+ new SwingWorker() {
+ String szFileName = ""; // 要下载的图片路径
+ String pszFileDst = ""; // 保存图片的路径
+
+ @Override
+ protected Boolean doInBackground() {
+ if(picPathTextField.getText().isEmpty()) {
+ JOptionPane.showMessageDialog(null, Res.string().getEnterPicturePath(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+
+ szFileName = picPathTextField.getText();
+ pszFileDst = "./person.jpg";
+
+ File file = new File(pszFileDst);
+ if(file.exists()) {
+ file.delete();
+ }
+
+ if(!FaceRecognitionModule.downloadPersonPic(szFileName, pszFileDst)) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ protected void done() {
+ if(picPathTextField.getText().isEmpty()) {
+ return;
+ }
+
+ try {
+ if(get()) {
+ // 下载成功后,面板上显示下载的图片
+ ToolKits.openPictureFile(pszFileDst, paintPanel);
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ } catch (HeadlessException e) {
+ e.printStackTrace();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ e.printStackTrace();
+ }
+ downloadBth.setEnabled(true);
+ }
+ }.execute();
+ }
+
+ private JTextField picPathTextField;
+ private PaintPanel paintPanel;
+ private JButton downloadBth;
+}
diff --git a/src/main/java/com/netsdk/demo/frame/FaceRecognition/FindFaceEventRecordDialog.java b/src/main/java/com/netsdk/demo/frame/FaceRecognition/FindFaceEventRecordDialog.java
new file mode 100644
index 0000000..3fd5d5e
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/FaceRecognition/FindFaceEventRecordDialog.java
@@ -0,0 +1,245 @@
+package com.netsdk.demo.frame.FaceRecognition;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.Vector;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
+import javax.swing.SwingWorker;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.DateChooserJButton;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.FaceRecognitionModule;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.lib.NetSDKLib.MEDIAFILE_FACERECOGNITION_INFO;
+
+/**
+ * 查找人脸事件的信息记录
+ */
+public class FindFaceEventRecordDialog extends JDialog{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ private Vector chnList = new Vector();
+
+ public FindFaceEventRecordDialog(){
+ setTitle("查找人脸事件的信息记录");
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(750, 430);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体
+
+ FaceEventRecordPanel faceRecordPanel = new FaceEventRecordPanel();
+ add(faceRecordPanel, BorderLayout.CENTER);
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e){
+ dispose();
+ }
+ });
+ }
+
+ public class FaceEventRecordPanel extends JPanel{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public FaceEventRecordPanel() {
+ BorderEx.set(this, "", 4);
+ setLayout(new BorderLayout());
+
+ JPanel panel1 = new JPanel();
+ JPanel panel2 = new JPanel();
+ add(panel1, BorderLayout.NORTH);
+ add(panel2, BorderLayout.CENTER);
+
+ //
+ JLabel chnlabel = new JLabel(Res.string().getChannel());
+ chnComboBox = new JComboBox();
+ for(int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) {
+ chnList.add(Res.string().getChannel() + " " + String.valueOf(i));
+ }
+
+ // 登陆成功,将通道添加到控件
+ chnComboBox.setModel(new DefaultComboBoxModel(chnList));
+ chnComboBox.setPreferredSize(new Dimension(80, 20));
+
+ JLabel startLabel = new JLabel(Res.string().getStartTime());
+ startTimeBtn = new DateChooserJButton("2018-10-30 11:11:11");
+
+ JLabel endLabel = new JLabel(Res.string().getEndTime());
+ endTimeBtn = new DateChooserJButton();
+
+ searchBtn = new JButton(Res.string().getSearch());
+ searchBtn.setPreferredSize(new Dimension(70, 20));
+
+ JButton downloadBth = new JButton("下载查询到的图片");
+ downloadBth.setPreferredSize(new Dimension(140, 20));
+
+ msgTextArea = new JTextArea();
+
+ Dimension dimension1 = new Dimension();
+ dimension1.width = 130;
+ dimension1.height = 20;
+ startTimeBtn.setPreferredSize(dimension1);
+ endTimeBtn.setPreferredSize(dimension1);
+
+ panel1.setLayout(new FlowLayout());
+ panel1.add(chnlabel);
+ panel1.add(chnComboBox);
+ panel1.add(startLabel);
+ panel1.add(startTimeBtn);
+ panel1.add(endLabel);
+ panel1.add(endTimeBtn);
+ panel1.add(searchBtn);
+ panel1.add(downloadBth);
+
+ panel2.setLayout(new BorderLayout());
+ panel2.add(new JScrollPane(msgTextArea), BorderLayout.CENTER);
+
+ searchBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ searchBtn.setEnabled(false);
+ }
+ });
+ findEventInfo();
+ }
+ });
+
+ downloadBth.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ DownloadPictureDialog dialog = new DownloadPictureDialog();
+ dialog.setVisible(true);
+ }
+ });
+ }
+ }
+
+
+ private JComboBox chnComboBox;
+ private DateChooserJButton startTimeBtn;
+ private DateChooserJButton endTimeBtn;
+ private JTextArea msgTextArea;
+ private JButton searchBtn;
+
+ public void findEventInfo() {
+ new SwingWorker() {
+ @Override
+ protected Boolean doInBackground() {
+ int count = 0; // 循环查询了几次
+ int index = 0; // index + 1 为查询到的总个数
+ int nFindCount = 10; // 每次查询的个数
+ StringBuffer message = null;
+ msgTextArea.setText("");
+
+ // 获取查询句柄
+ if(!FaceRecognitionModule.findFile(chnComboBox.getSelectedIndex(), startTimeBtn.getText(), endTimeBtn.getText())) {
+ message = new StringBuffer();
+ message.append("未查询到相关信息");
+ publish(message);
+ return false;
+ }
+
+ // 查询具体信息, 循环查询, nFindCount为每次查询的个数
+ while(true) {
+ MEDIAFILE_FACERECOGNITION_INFO[] msg = FaceRecognitionModule.findNextFile(nFindCount);
+ if(msg == null) {
+ message = new StringBuffer();
+ message.append("查询结束!");
+ publish(message);
+ break;
+ }
+
+ for(int i = 0; i < msg.length; i++) {
+ index = i + count * nFindCount + 1;
+
+ // 清空
+ message = new StringBuffer();
+
+ message.append("[" + index + "]通道号 :" + msg[i].nChannelId + "\n");
+ message.append("[" + index + "]报警发生时间 :" + msg[i].stTime.toStringTime() + "\n");
+ message.append("[" + index + "]全景图 :" + new String(msg[i].stGlobalScenePic.szFilePath).trim() + "\n");
+ message.append("[" + index + "]人脸图路径 :" + new String(msg[i].stObjectPic.szFilePath).trim() + "\n");
+ message.append("[" + index + "]匹配到的候选对象数量 :" + msg[i].nCandidateNum + "\n");
+
+ for(int j = 0; j < msg[i].nCandidateNum; j++) {
+ for(int k = 0; k < msg[i].stuCandidatesPic[j].nFileCount; k++) {
+ message.append("[" + index + "]对比图路径 :" + new String(msg[i].stuCandidatesPic[j].stFiles[k].szFilePath).trim() + "\n");
+ }
+ }
+
+ message.append("[" + index + "]匹配到的候选对象数量 :" + msg[i].nCandidateExNum + "\n");
+
+ // 对比信息
+ for(int j = 0; j < msg[i].nCandidateExNum; j++) {
+ message.append("[" + index + "]人员唯一标识符 :" + new String(msg[i].stuCandidatesEx[j].stPersonInfo.szUID).trim() + "\n");
+
+ // 以下参数,设备有些功能没有解析,如果想要知道 对比图的人员信息,可以根据上面获取的 szUID,来查询人员信息。
+ // findFaceRecognitionDB() 此示例的方法是根据 GroupId来查询的,这里的查询,GroupId不填,根据 szUID 来查询
+ message.append("[" + index + "]姓名 :" + new String(msg[i].stuCandidatesEx[j].stPersonInfo.szPersonName).trim() + "\n");
+ message.append("[" + index + "]相似度 :" + msg[i].stuCandidatesEx[j].bySimilarity + "\n");
+ message.append("[" + index + "]年龄 :" + msg[i].stuCandidatesEx[j].stPersonInfo.byAge + "\n");
+ message.append("[" + index + "]人脸库名称 :" + new String(msg[i].stuCandidatesEx[j].stPersonInfo.szGroupName).trim() + "\n");
+ message.append("[" + index + "]人脸库ID :" + new String(msg[i].stuCandidatesEx[j].stPersonInfo.szGroupID).trim() + "\n");
+ }
+ message.append("\n");
+ publish(message);
+ }
+
+ if (msg.length < nFindCount) {
+ message = new StringBuffer();
+ message.append("查询结束!");
+ publish(message);
+ break;
+ } else {
+ count ++;
+ }
+ }
+
+ // 关闭查询接口
+ FaceRecognitionModule.findCloseFile();
+
+ return true;
+ }
+
+ @Override
+ protected void process(java.util.List chunks) {
+ for(StringBuffer data : chunks) {
+ msgTextArea.append(data.toString());
+ msgTextArea.updateUI();
+ }
+
+ super.process(chunks);
+ }
+
+ @Override
+ protected void done() {
+ searchBtn.setEnabled(true);
+ }
+ }.execute();
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/frame/FaceRecognition/GroupOperateDialog.java b/src/main/java/com/netsdk/demo/frame/FaceRecognition/GroupOperateDialog.java
new file mode 100644
index 0000000..6a925df
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/FaceRecognition/GroupOperateDialog.java
@@ -0,0 +1,334 @@
+package com.netsdk.demo.frame.FaceRecognition;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.UnsupportedEncodingException;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.FaceRecognitionModule;
+import com.netsdk.lib.NetSDKLib.*;
+import com.netsdk.lib.ToolKits;
+
+public class GroupOperateDialog extends JDialog{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ // 人脸库名称
+ private String inputGroupName = "";
+
+ // 布控界面
+ public DispositionOperateDialog dispositionOperateDialog = null;
+
+ // 人员操作界面
+ public PersonOperateDialog personOperateDialog = null;
+
+ public GroupOperateDialog() {
+ setTitle(Res.string().getGroupOperate());
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(650, 360);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体
+
+ GroupListPanel GroupPanel = new GroupListPanel();
+ GroupOperatePanel GroupOperatePanel = new GroupOperatePanel();
+
+ add(GroupPanel, BorderLayout.CENTER);
+ add(GroupOperatePanel, BorderLayout.EAST);
+
+ findGroupInfo();
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ dispose();
+ }
+ });
+ }
+
+ /*
+ * 人脸库显示列表
+ */
+ private class GroupListPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+ public GroupListPanel() {
+ BorderEx.set(this, "", 2);
+ setLayout(new BorderLayout());
+
+ data = new Object[20][3];
+ defaultTableModel = new DefaultTableModel(data, Res.string().getGroupTable());
+ table = new JTable(defaultTableModel) { // 列表不可编辑
+ private static final long serialVersionUID = 1L;
+ @Override
+ public boolean isCellEditable(int row, int column) {
+ return false;
+ }
+ };
+
+ table.getColumnModel().getColumn(0).setPreferredWidth(80);
+ table.getColumnModel().getColumn(1).setPreferredWidth(280);
+ table.getColumnModel().getColumn(2).setPreferredWidth(100);
+
+ table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行
+
+ DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer();
+ dCellRenderer.setHorizontalAlignment(JLabel.CENTER);
+ table.setDefaultRenderer(Object.class, dCellRenderer);
+
+ add(new JScrollPane(table), BorderLayout.CENTER);
+
+ }
+ }
+
+ /*
+ * 人脸库操作
+ */
+ private class GroupOperatePanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ public GroupOperatePanel() {
+ BorderEx.set(this, "", 2);
+ setLayout(new BorderLayout());
+
+ Dimension dimension = new Dimension();
+ dimension.width = 230;
+ setPreferredSize(dimension);
+
+ JPanel GroupPanel = new JPanel();
+ JPanel panel = new JPanel();
+
+ add(GroupPanel, BorderLayout.CENTER);
+ add(panel, BorderLayout.SOUTH);
+
+ /*JButton searchByPicBtn = new JButton(Res.string().getSearchByPic());*/
+ JButton personOperateBtn = new JButton(Res.string().getPersonOperate());
+ panel.setPreferredSize(new Dimension(230, 45));
+ panel.setLayout(new GridLayout(2, 1));
+ /*panel.add(searchByPicBtn);*/
+ panel.add(personOperateBtn);
+
+ /*
+ * 人脸库增删改, 布控、撤控
+ */
+ JButton refreshBtn = new JButton(Res.string().getFresh());
+ JButton addGroupBtn = new JButton(Res.string().getAddGroup());
+ JButton modifyGroupBtn = new JButton(Res.string().getModifyGroup());
+ JButton deleteGroupBtn = new JButton(Res.string().getDelGroup());
+ JButton dispositionBtn = new JButton(Res.string().getDisposition() + "/" + Res.string().getDelDisposition());
+
+ GroupPanel.setLayout(new GridLayout(12, 1));
+ GroupPanel.add(refreshBtn);
+ GroupPanel.add(addGroupBtn);
+ GroupPanel.add(modifyGroupBtn);
+ GroupPanel.add(deleteGroupBtn);
+ GroupPanel.add(dispositionBtn);
+
+ // 刷新人脸库列表
+ refreshBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ findGroupInfo();
+ }
+ });
+
+ // 添加人脸库
+ addGroupBtn.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ inputGroupName = JOptionPane.showInputDialog(GroupOperateDialog.this,
+ Res.string().getInputGroupName(), "");
+
+ if(inputGroupName == null) { // 取消或者关闭按钮
+ return;
+ }
+
+ if(FaceRecognitionModule.addGroup(inputGroupName)) {
+ JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+
+ // 更新人脸库列表
+ findGroupInfo();
+ }
+ });
+
+ // 修改人脸库
+ modifyGroupBtn.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ int row = -1;
+ row = table.getSelectedRow(); //获得所选的单行
+
+ if(row < 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(defaultTableModel.getValueAt(row, 0) == null || String.valueOf(defaultTableModel.getValueAt(row, 0)).trim().equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ inputGroupName = JOptionPane.showInputDialog(GroupOperateDialog.this,
+ Res.string().getInputGroupName(), String.valueOf(defaultTableModel.getValueAt(row, 1)).trim());
+
+ if(inputGroupName == null) { // 取消或者关闭按钮
+ return;
+ }
+
+ if(FaceRecognitionModule.modifyGroup(inputGroupName, String.valueOf(defaultTableModel.getValueAt(row, 0)).trim())) {
+ JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+
+ // 更新人脸库列表
+ findGroupInfo();
+ }
+ });
+
+ // 删除人脸库
+ deleteGroupBtn.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ int row = -1;
+ row = table.getSelectedRow(); //获得所选的单行
+
+ if(row < 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(defaultTableModel.getValueAt(row, 0) == null || String.valueOf(defaultTableModel.getValueAt(row, 0)).trim().equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(!FaceRecognitionModule.deleteGroup(String.valueOf(defaultTableModel.getValueAt(row, 0)).trim())) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ }
+
+ // 更新人脸库列表
+ findGroupInfo();
+ }
+ });
+
+ // 布控/撤控
+ dispositionBtn.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ int row = -1;
+ row = table.getSelectedRow(); //获得所选的单行
+
+ if(row < 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(defaultTableModel.getValueAt(row, 0) == null || String.valueOf(defaultTableModel.getValueAt(row, 0)).trim().equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ dispositionOperateDialog = new DispositionOperateDialog(String.valueOf(defaultTableModel.getValueAt(row, 0)).trim(),
+ String.valueOf(defaultTableModel.getValueAt(row, 1)).trim());
+ dispositionOperateDialog.setVisible(true);
+
+ }
+ });
+
+ /*// 以图搜图
+ searchByPicBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SearchByPicDialog dialog = new SearchByPicDialog();
+ dialog.setVisible(true);
+ }
+ });*/
+
+ // 人员操作
+ personOperateBtn.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ int row = -1;
+ row = table.getSelectedRow(); //获得所选的单行
+
+ if(row < 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(defaultTableModel.getValueAt(row, 0) == null || String.valueOf(defaultTableModel.getValueAt(row, 0)).trim().equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectGroup(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ personOperateDialog = new PersonOperateDialog(String.valueOf(defaultTableModel.getValueAt(row, 0)).trim(),
+ String.valueOf(defaultTableModel.getValueAt(row, 1)).trim());
+ personOperateDialog.setVisible(true);
+ }
+ });
+ }
+ }
+
+ /*
+ * 查找所有人脸库
+ */
+ private void findGroupInfo() {
+ // 清空列表
+ for(int i = 0; i < 20; i++) {
+ for(int j = 0; j < 3; j++) {
+ defaultTableModel.setValueAt("", i, j);
+ }
+ }
+
+ // 查询人脸库
+ NET_FACERECONGNITION_GROUP_INFO[] groupInfoArr = FaceRecognitionModule.findGroupInfo("");
+ if(groupInfoArr != null) {
+ for(int i = 0; i < groupInfoArr.length; i++) {
+ defaultTableModel.setValueAt(new String(groupInfoArr[i].szGroupId).trim(), i, 0);
+ try {
+ defaultTableModel.setValueAt(new String(groupInfoArr[i].szGroupName, "GBK").trim(), i, 1);
+ } catch (UnsupportedEncodingException e1) {
+ e1.printStackTrace();
+ }
+ defaultTableModel.setValueAt(String.valueOf(groupInfoArr[i].nGroupSize).trim(), i, 2);
+ }
+ }
+ }
+
+ private Object[][] data;
+ private DefaultTableModel defaultTableModel;
+ private JTable table;
+}
diff --git a/src/main/java/com/netsdk/demo/frame/FaceRecognition/LatticeScreen.java b/src/main/java/com/netsdk/demo/frame/FaceRecognition/LatticeScreen.java
new file mode 100644
index 0000000..eee1712
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/FaceRecognition/LatticeScreen.java
@@ -0,0 +1,529 @@
+package com.netsdk.demo.frame.FaceRecognition;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+import com.sun.jna.Pointer;
+import com.netsdk.common.DateChooserJButtonEx;
+import com.netsdk.common.FunctionList;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.DotmatrixScreenModule;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.NetSDKLib.NET_CTRL_SET_PARK_INFO;
+
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.ButtonGroup;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JRadioButton;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.UnsupportedEncodingException;
+import java.awt.event.ActionEvent;
+import javax.swing.JPasswordField;
+import javax.swing.border.TitledBorder;
+import javax.swing.UIManager;
+import java.awt.Color;
+/**
+ *
+ * @author 119178
+ * 点阵屏下发demo
+ */
+public class LatticeScreen {
+
+
+ // 设备断线通知回调
+ private DisConnect disConnect = new DisConnect();
+
+ // 网络连接恢复
+ private HaveReConnect haveReConnect = new HaveReConnect();
+ private JFrame frame;
+ private JTextField textField;
+ private JTextField textField_1;
+ private JTextField textField_2;
+ private JTextField textField_4;
+ private JTextField textField_5;
+ private JTextField textField_6;
+ private JTextField textField_7;
+ private JTextField textField_8;
+ private JTextField textField_9;
+ private JComboBox comboBox;
+ private JComboBox comboBox_1;
+ private JRadioButton rdbtnNewRadioButton;
+ private JRadioButton rdbtnNewRadioButton_1;
+
+ private DateChooserJButtonEx startTime;
+ private DateChooserJButtonEx EndTime;
+ private JPasswordField passwordField;
+
+ private JButton btnNewButton ;
+ private JButton btnNewButton_1 ;
+ private JButton btnNewButton_2 ;
+ private JTextField textField_3;
+ private JTextField textField_10;
+ private JTextField textField_11;
+
+ /**
+ * Launch the application.
+ */
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ LatticeScreen demo = new LatticeScreen();
+ demo.frame.setVisible(true);
+ }
+ });
+ }
+
+ /**
+ * Create the application.
+ */
+ public LatticeScreen() {
+ LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化
+ initialize();
+ // 注册窗体清出事件
+ frame.addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ LoginModule.logout(); // 退出
+ LoginModule.cleanup(); // 关闭工程,释放资源
+ frame.dispose();
+ // 返回主菜单
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+
+/////////////////面板///////////////////
+// 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数
+private class DisConnect implements NetSDKLib.fDisConnect {
+public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+// 断线提示
+SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getFaceRecognition() + " : " + Res.string().getDisConnectReconnecting());
+ }
+});
+}
+}
+
+// 网络连接恢复,设备重连成功回调
+// 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数
+private class HaveReConnect implements NetSDKLib.fHaveReConnect {
+public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+
+// 重连提示
+SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getFaceRecognition() + " : " + Res.string().getOnline());
+ }
+});
+}
+}
+
+ /**
+ * Initialize the contents of the frame.
+ */
+ private void initialize() {
+ frame = new JFrame();
+ frame.setTitle(Res.string().getmatrixScreen());
+ frame.setBounds(200, 200, 807, 578);
+ //frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
+ frame.getContentPane().setLayout(null);
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ final JPanel panel1 = new JPanel();
+ panel1.setBounds(10, 10, 100, 50);
+
+ JPanel panel = new JPanel();
+ panel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), Res.string().getLogin(), TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0)));
+ panel.setBounds(10, 10, 771, 40);
+ frame.getContentPane().add(panel);
+ panel.setLayout(null);
+
+ JLabel lblNewLabel = new JLabel(Res.string().getDeviceIp()+":");
+ lblNewLabel.setBounds(26, 14, 54, 15);
+ panel.add(lblNewLabel);
+
+ textField = new JTextField("172.24.31.178");
+ textField.setBounds(82, 11, 76, 21);
+ panel.add(textField);
+ textField.setColumns(10);
+
+ JLabel lblNewLabel_1 = new JLabel(Res.string().getPort()+":");
+ lblNewLabel_1.setBounds(168, 14, 47, 15);
+ panel.add(lblNewLabel_1);
+
+ textField_1 = new JTextField("37777");
+ textField_1.setBounds(217, 11, 76, 21);
+ panel.add(textField_1);
+ textField_1.setColumns(10);
+
+ JLabel lblNewLabel_2 = new JLabel(Res.string().getUserName()+":");
+ lblNewLabel_2.setBounds(302, 14, 47, 15);
+ panel.add(lblNewLabel_2);
+
+ textField_2 = new JTextField("admin");
+ textField_2.setBounds(351, 11, 76, 21);
+ panel.add(textField_2);
+ textField_2.setColumns(10);
+
+ JLabel lblNewLabel_3 = new JLabel(Res.string().getPassword()+":");
+ lblNewLabel_3.setBounds(435, 14, 38, 15);
+ panel.add(lblNewLabel_3);
+
+ passwordField = new JPasswordField("admin123");
+ passwordField.setBounds(476, 11, 89, 21);
+ panel.add(passwordField);
+
+ btnNewButton = new JButton(Res.string().getLogin());
+ btnNewButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ if(LoginModule.login(textField.getText(),
+ Integer.parseInt(textField_1.getText()),
+ textField_2.getText(),
+ new String(passwordField.getPassword()))) {
+ btnNewButton.setEnabled(false);
+ btnNewButton_1.setEnabled(true);
+ btnNewButton_2.setEnabled(true);
+
+ textField.setEnabled(true);;
+ textField_1.setEditable(true);;
+ textField_2.setEnabled(true);
+ textField_3.setEnabled(true);
+ textField_4.setEnabled(true);
+ textField_5.setEnabled(true);
+ textField_6.setEnabled(true);
+ textField_7.setEnabled(true);
+ textField_8.setEnabled(true);
+ textField_9.setEnabled(true);
+ textField_10.setEnabled(true);
+ textField_11.setEnabled(true);
+ comboBox.setEnabled(true);
+ comboBox_1.setEnabled(true);
+ rdbtnNewRadioButton.setEnabled(true);
+ rdbtnNewRadioButton_1.setEnabled(true);
+ startTime.setEnabled(true);
+ EndTime.setEnabled(true);
+ passwordField.setEnabled(true);
+ }else{
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ });
+ btnNewButton.setBounds(584, 10, 76, 23);
+ panel.add(btnNewButton);
+ btnNewButton.setEnabled(true);
+
+ btnNewButton_1 = new JButton(Res.string().getLogout());
+ btnNewButton_1.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ LoginModule.logout();
+ btnNewButton.setEnabled(true);
+ btnNewButton_1.setEnabled(false);
+ btnNewButton_2.setEnabled(false);
+
+ textField.setEnabled(false);;
+ textField_1.setEditable(false);;
+ textField_2.setEnabled(false);
+ textField_3.setEnabled(false);
+ textField_4.setEnabled(false);
+ textField_5.setEnabled(false);
+ textField_6.setEnabled(false);
+ textField_7.setEnabled(false);
+ textField_8.setEnabled(false);
+ textField_9.setEnabled(false);
+ textField_10.setEnabled(false);
+ textField_11.setEnabled(false);
+ comboBox.setEnabled(false);
+ comboBox_1.setEditable(false);
+ rdbtnNewRadioButton.setEnabled(false);
+ rdbtnNewRadioButton_1.setEnabled(false);
+ startTime.setEnabled(true);
+ EndTime.setEnabled(true);
+ passwordField.setEnabled(true);
+ }
+ });
+ btnNewButton_1.setBounds(678, 10, 76, 23);
+ panel.add(btnNewButton_1);
+ btnNewButton_1.setEnabled(false);
+
+ JPanel panel_1 = new JPanel();
+ panel_1.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));
+ panel_1.setBounds(10, 56, 771, 474);
+ frame.getContentPane().add(panel_1);
+ panel_1.setLayout(null);
+
+ JLabel lblNewLabel_4 = new JLabel(Res.string().getPassingState()+":");
+ lblNewLabel_4.setBounds(71, 26, 95, 21);
+ panel_1.add(lblNewLabel_4);
+
+ comboBox = new JComboBox();
+ comboBox.setEnabled(false);
+ comboBox.setModel(new DefaultComboBoxModel(new String[] {Res.string().getPassingCar(), Res.string().getNoCar()}));
+ comboBox.setBounds(176, 26, 131, 21);
+ panel_1.add(comboBox);
+
+ JLabel lblNewLabel_5 = new JLabel(Res.string().getInTime()+":");
+ lblNewLabel_5.setBounds(391, 29, 102, 15);
+ panel_1.add(lblNewLabel_5);
+
+ startTime=new DateChooserJButtonEx();
+ startTime.setEnabled(false);
+ startTime.setBounds(503, 26, 131, 21);
+ panel_1.add(startTime);
+
+ JLabel lblNewLabel_6 = new JLabel(Res.string().getOutTime()+":");
+ lblNewLabel_6.setBounds(391, 84, 102, 15);
+ panel_1.add(lblNewLabel_6);
+
+ EndTime=new DateChooserJButtonEx();
+ EndTime.setEnabled(false);
+ EndTime.setBounds(503, 81, 131, 21);
+ panel_1.add(EndTime);
+
+ JLabel lblNewLabel_7 = new JLabel(Res.string().getPlateNumber()+":");
+ lblNewLabel_7.setBounds(71, 84, 95, 15);
+ panel_1.add(lblNewLabel_7);
+
+ textField_4 = new JTextField();
+ textField_4.setEnabled(false);
+ textField_4.setBounds(176, 81, 131, 21);
+ panel_1.add(textField_4);
+ textField_4.setColumns(10);
+
+ JLabel lblNewLabel_8 = new JLabel(Res.string().getCarOwner()+":");
+ lblNewLabel_8.setBounds(77, 142, 89, 15);
+ panel_1.add(lblNewLabel_8);
+
+ textField_5 = new JTextField();
+ textField_5.setEnabled(false);
+ textField_5.setBounds(176, 139, 131, 21);
+ panel_1.add(textField_5);
+ textField_5.setColumns(10);
+
+ JLabel lblNewLabel_9 = new JLabel(Res.string().getParkingTime()+":");
+ lblNewLabel_9.setBounds(391, 133, 102, 15);
+ panel_1.add(lblNewLabel_9);
+
+ textField_6 = new JTextField();
+ textField_6.setEnabled(false);
+ textField_6.setBounds(503, 130, 131, 21);
+ panel_1.add(textField_6);
+ textField_6.setColumns(10);
+
+ JLabel lblNewLabel_10 = new JLabel(Res.string().getUserType()+":");
+ lblNewLabel_10.setBounds(71, 198, 95, 15);
+ panel_1.add(lblNewLabel_10);
+
+ comboBox_1 = new JComboBox();
+ comboBox_1.setEnabled(false);
+ comboBox_1.setModel(new DefaultComboBoxModel(new String[] {Res.string().getMonthlyCardUser()
+ ,Res.string().getAnnualCardUser(), Res.string().getLongTermUser(), Res.string().getTemporaryUser()}));
+ comboBox_1.setBounds(176, 195, 131, 21);
+ panel_1.add(comboBox_1);
+
+ JLabel lblNewLabel_11 = new JLabel(Res.string().getParkingCharge());
+ lblNewLabel_11.setBounds(391, 178, 102, 15);
+ panel_1.add(lblNewLabel_11);
+
+ textField_7 = new JTextField();
+ textField_7.setEnabled(false);
+ textField_7.setBounds(503, 175, 131, 21);
+ panel_1.add(textField_7);
+ textField_7.setColumns(10);
+
+ JLabel lblNewLabel_12 = new JLabel(Res.string().getDaysDue());
+ lblNewLabel_12.setBounds(71, 253, 95, 15);
+ panel_1.add(lblNewLabel_12);
+
+ textField_8 = new JTextField();
+ textField_8.setEnabled(false);
+ textField_8.setBounds(176, 250, 131, 21);
+ panel_1.add(textField_8);
+ textField_8.setColumns(10);
+
+ JLabel lblNewLabel_13 = new JLabel(Res.string().getRemainingParkingSpaces());
+ lblNewLabel_13.setBounds(391, 215, 102, 15);
+ panel_1.add(lblNewLabel_13);
+
+ textField_9 = new JTextField();
+ textField_9.setEnabled(false);
+ textField_9.setBounds(503, 212, 131, 21);
+ panel_1.add(textField_9);
+ textField_9.setColumns(10);
+
+ rdbtnNewRadioButton = new JRadioButton(Res.string().getVehiclesNotAllowedToPass());
+ rdbtnNewRadioButton.setEnabled(false);
+ rdbtnNewRadioButton.setBounds(367, 249, 155, 23);
+ panel_1.add(rdbtnNewRadioButton);
+
+ rdbtnNewRadioButton_1 = new JRadioButton(Res.string().getAllowedVehiclesToPass());
+ rdbtnNewRadioButton_1.setEnabled(false);
+ rdbtnNewRadioButton_1.setBounds(524, 249, 162, 23);
+ panel_1.add(rdbtnNewRadioButton_1);
+
+ ButtonGroup group=new ButtonGroup();
+ group.add(rdbtnNewRadioButton);
+ group.add(rdbtnNewRadioButton_1);
+
+ btnNewButton_2 = new JButton(Res.string().getSetUp());
+ btnNewButton_2.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ int emType=NetSDKLib.CtrlType.CTRLTYPE_CTRL_SET_PARK_INFO;
+
+ NET_CTRL_SET_PARK_INFO msg=new NET_CTRL_SET_PARK_INFO();
+
+ msg.szPlateNumber=textField_4.getText().getBytes();
+
+ if(!textField_6.getText().equals("")) {
+ msg.nParkTime=Integer.parseInt(textField_6.getText());
+ }else {
+ msg.nParkTime=0;
+ }
+
+ msg.szMasterofCar=textField_5.getText().getBytes();
+
+ if(comboBox_1.getSelectedItem().equals(Res.string().getMonthlyCardUser())) {
+ msg.szUserType="monthlyCardUser".getBytes();
+ }
+ else if(comboBox_1.getSelectedItem().equals(Res.string().getAnnualCardUser())){
+ msg.szUserType="yearlyCardUser".getBytes();
+ }
+ else if(comboBox_1.getSelectedItem().equals(Res.string().getLongTermUser())){
+ msg.szUserType="longTimeUser".getBytes();
+ }
+ else if(comboBox_1.getSelectedItem().equals(Res.string().getTemporaryUser())){
+ msg.szUserType="casualUser".getBytes();
+ }
+
+ if(!textField_8.getText().equals("")) {
+ msg.nRemainDay=Integer.parseInt(textField_8.getText());
+ }else {
+ msg.nRemainDay=0;
+ }
+
+ if(rdbtnNewRadioButton.isSelected()) {
+ msg.nPassEnable=0;
+ }else if(rdbtnNewRadioButton_1.isSelected()){
+ msg.nPassEnable=1;
+ }
+ String InTime=startTime.getText().toString();// 车辆入场时间
+ String[] InTimes = InTime.split("-");
+
+ msg.stuInTime.dwYear = (short)Integer.parseInt(InTimes[0]);
+ msg.stuInTime.dwMonth = (byte)Integer.parseInt(InTimes[1]);
+ msg.stuInTime.dwDay = (byte)Integer.parseInt(InTimes[2]);
+
+ String OutTime=EndTime.getText().toString();// 车辆出场时间
+ String[] OutTimes = OutTime.split("-");
+
+ msg.stuOutTime.dwYear = (short)Integer.parseInt(OutTimes[0]);
+ msg.stuOutTime.dwMonth = (byte)Integer.parseInt(OutTimes[1]);
+ msg.stuOutTime.dwDay = (byte)Integer.parseInt(OutTimes[2]);
+
+ //msg.stuInTime.setTime(2019, 7, 9, 10, 45, 0); // 车辆入场时间
+ //msg.stuOutTime.setTime(2019, 7, 9, 10, 52, 0); // 车辆出场时间
+ try {
+ msg.szParkCharge=textField_7.getText().getBytes("GBK");
+ } catch (UnsupportedEncodingException e2) {
+ // TODO Auto-generated catch block
+ e2.printStackTrace();
+ }
+
+ if(!textField_9.getText().equals("")) {
+ msg.nRemainSpace=Integer.parseInt(textField_9.getText());
+ }else {
+ msg.nRemainSpace=0;
+ }
+
+ /*
+ * if(rdbtnNewRadioButton.isSelected()) { msg.nPassEnable=1; }else
+ * if(rdbtnNewRadioButton_1.isSelected()){ msg.nPassEnable=0; }
+ */
+ if(comboBox.getSelectedItem().equals(Res.string().getPassingCar())) {
+ msg.emCarStatus=1;
+ }
+ else if(comboBox.getSelectedItem().equals(Res.string().getNoCar())){
+ msg.emCarStatus=2;
+ }
+
+ try {
+ msg.szSubUserType=textField_3.getText().getBytes("GBK");
+ } catch (UnsupportedEncodingException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+ try {
+ msg.szRemarks=textField_10.getText().getBytes("GBK");
+ } catch (UnsupportedEncodingException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+ try {
+ msg.szCustom=textField_11.getText().getBytes("GBK");
+ } catch (UnsupportedEncodingException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+
+ msg.write();
+ boolean ret=DotmatrixScreenModule.setDotmatrixScreen(emType, msg);
+ if(ret) {
+ JOptionPane.showMessageDialog(panel1, Res.string().getSetUpSuccess());
+ }else {
+ JOptionPane.showMessageDialog(panel1, Res.string().getSetUpFailed());
+ }
+ }
+ });
+ btnNewButton_2.setBounds(618, 441, 93, 23);
+ panel_1.add(btnNewButton_2);
+ btnNewButton_2.setEnabled(false);
+
+ JLabel label = new JLabel(Res.string().getCostomUserInfo()+":");
+ label.setBounds(58, 309, 119, 21);
+ panel_1.add(label);
+
+ JLabel label_1 = new JLabel(Res.string().getRemarksInfo()+":");
+ label_1.setBounds(58, 350, 97, 21);
+ panel_1.add(label_1);
+
+ JLabel label_2 = new JLabel(Res.string().getCostomInfo()+":");
+ label_2.setBounds(60, 394, 95, 21);
+ panel_1.add(label_2);
+
+ textField_3 = new JTextField();
+ textField_3.setEnabled(false);
+ textField_3.setColumns(10);
+ textField_3.setBounds(187, 306, 460, 28);
+ panel_1.add(textField_3);
+
+ textField_10 = new JTextField();
+ textField_10.setEnabled(false);
+ textField_10.setColumns(10);
+ textField_10.setBounds(187, 347, 460, 28);
+ panel_1.add(textField_10);
+
+ textField_11 = new JTextField();
+ textField_11.setEnabled(false);
+ textField_11.setColumns(10);
+ textField_11.setBounds(187, 391, 460, 28);
+ panel_1.add(textField_11);
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/frame/FaceRecognition/ModifyPersonDialog.java b/src/main/java/com/netsdk/demo/frame/FaceRecognition/ModifyPersonDialog.java
new file mode 100644
index 0000000..b0f3871
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/FaceRecognition/ModifyPersonDialog.java
@@ -0,0 +1,326 @@
+package com.netsdk.demo.frame.FaceRecognition;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.File;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import com.sun.jna.Memory;
+
+import com.netsdk.common.*;
+import com.netsdk.demo.module.FaceRecognitionModule;
+import com.netsdk.lib.NetSDKLib.*;
+import com.netsdk.lib.ToolKits;
+
+public class ModifyPersonDialog extends JDialog{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ private String groupId = "";
+ private String groupName = "";
+ private String uid = "";
+ private String pszFileDst = "";
+ private Memory memory = null;
+ private CANDIDATE_INFOEX stuCandidate = null;
+
+ private WindowCloseListener listener;
+ public void addWindowCloseListener(WindowCloseListener listener) {
+ this.listener = listener;
+ }
+
+ /**
+ * @param groupId 人脸库ID
+ * @param groupName 人脸库名称
+ * @param uid 人员标识符
+ * @param pszFileDst 下载到本地的图片路径
+ * @param memory 图片数据
+ * @param stuCandidate 人员信息
+ */
+ public ModifyPersonDialog(String groupId,
+ String groupName,
+ String uid,
+ String pszFileDst,
+ Memory memory,
+ CANDIDATE_INFOEX stuCandidate){
+
+ setTitle(Res.string().getModifyPerson());
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(520, 400);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体
+
+ this.groupId = groupId;
+ this.groupName = groupName;
+ this.uid = uid;
+ this.pszFileDst = pszFileDst;
+ this.memory = memory;
+ this.stuCandidate = stuCandidate;
+
+ FaceServerAddPanel faceServerAddPanel = new FaceServerAddPanel();
+ add(faceServerAddPanel, BorderLayout.CENTER);
+
+ showPersonInfo();
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e){
+ dispose();
+ }
+ });
+ }
+ public class FaceServerAddPanel extends JPanel{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public FaceServerAddPanel() {
+ BorderEx.set(this, "", 4);
+ setLayout(new BorderLayout());
+
+ JPanel imagePanel = new JPanel();
+ JPanel personInfoPanel = new JPanel();
+
+ Dimension dimension = this.getPreferredSize();
+ dimension.height = 400;
+ dimension.width = 250;
+ personInfoPanel.setPreferredSize(dimension);
+
+ add(imagePanel, BorderLayout.CENTER);
+ add(personInfoPanel, BorderLayout.WEST);
+
+ /////////// 添加的人脸图片面板 //////////////////
+ imagePanel.setLayout(new BorderLayout());
+ addImagePanel = new PaintPanel(); // 添加的人员信息图片显示
+ selectImageBtn = new JButton(Res.string().getSelectPicture());
+ imagePanel.add(addImagePanel, BorderLayout.CENTER);
+ imagePanel.add(selectImageBtn, BorderLayout.SOUTH);
+
+ ////////// 添加的人脸信息面板 /////////////////
+ personInfoPanel.setLayout(new FlowLayout());
+ JLabel goroupIdLabel = new JLabel(Res.string().getFaceGroupId(), JLabel.CENTER);
+ JLabel goroupNameLabel = new JLabel(Res.string().getFaceGroupName(), JLabel.CENTER);
+ JLabel uidLabel = new JLabel(Res.string().getUid(), JLabel.CENTER);
+ JLabel nameLabel = new JLabel(Res.string().getName(), JLabel.CENTER);
+ JLabel sexLabel = new JLabel(Res.string().getSex(), JLabel.CENTER);
+ JLabel birthdayLabel = new JLabel(Res.string().getBirthday(), JLabel.CENTER);
+ JLabel idTypeLabel = new JLabel(Res.string().getIdType(), JLabel.CENTER);
+ JLabel idLabel = new JLabel(Res.string().getIdNo(), JLabel.CENTER);
+
+ Dimension dimension2 = new Dimension();
+ dimension2.width = 80;
+ dimension2.height = 20;
+ uidLabel.setPreferredSize(dimension2);
+ goroupIdLabel.setPreferredSize(dimension2);
+ goroupNameLabel.setPreferredSize(dimension2);
+ nameLabel.setPreferredSize(dimension2);
+ sexLabel.setPreferredSize(dimension2);
+ birthdayLabel.setPreferredSize(dimension2);
+ idTypeLabel.setPreferredSize(dimension2);
+ idLabel.setPreferredSize(dimension2);
+
+ goroupIdTextField = new JTextField();
+ goroupNameTextField = new JTextField();
+ uidTextField = new JTextField();
+ nameTextField = new JTextField();
+ sexComboBox = new JComboBox(Res.string().getSexStrings());
+ birthdayBtn = new DateChooserJButtonEx("");
+ idTypeComboBox = new JComboBox(Res.string().getIdStrings());
+ idTextField = new JTextField();
+ birthdayCheckBox = new JCheckBox();
+
+ modifyBtn = new JButton(Res.string().getModify());
+ cancelBtn = new JButton(Res.string().getCancel());
+
+ birthdayBtn.setStartYear(1900);
+
+ Dimension dimension3 = new Dimension();
+ dimension3.width = 150;
+ dimension3.height = 20;
+
+ sexComboBox.setPreferredSize(dimension3);
+ idTypeComboBox.setPreferredSize(dimension3);
+ goroupIdTextField.setPreferredSize(dimension3);
+ goroupNameTextField.setPreferredSize(dimension3);
+ uidTextField.setPreferredSize(dimension3);
+ nameTextField.setPreferredSize(dimension3);
+ idTextField.setPreferredSize(dimension3);
+ birthdayBtn.setPreferredSize(new Dimension(130, 20));
+ birthdayCheckBox.setPreferredSize(new Dimension(20, 20));
+ modifyBtn.setPreferredSize(new Dimension(120, 20));
+ cancelBtn.setPreferredSize(new Dimension(120, 20));
+
+ goroupIdTextField.setEditable(false);
+ goroupNameTextField.setEditable(false);
+ uidTextField.setEditable(false);
+ birthdayCheckBox.setSelected(true);
+
+ goroupIdTextField.setText(groupId);
+ goroupNameTextField.setText(groupName);
+ uidTextField.setText(uid);
+
+ personInfoPanel.add(goroupIdLabel);
+ personInfoPanel.add(goroupIdTextField);
+ personInfoPanel.add(goroupNameLabel);
+ personInfoPanel.add(goroupNameTextField);
+ personInfoPanel.add(uidLabel);
+ personInfoPanel.add(uidTextField);
+ personInfoPanel.add(nameLabel);
+ personInfoPanel.add(nameTextField);
+ personInfoPanel.add(sexLabel);
+ personInfoPanel.add(sexComboBox);
+ personInfoPanel.add(idTypeLabel);
+ personInfoPanel.add(idTypeComboBox);
+ personInfoPanel.add(idLabel);
+ personInfoPanel.add(idTextField);
+ personInfoPanel.add(birthdayLabel);
+ personInfoPanel.add(birthdayBtn);
+ personInfoPanel.add(birthdayCheckBox);
+ personInfoPanel.add(modifyBtn);
+ personInfoPanel.add(cancelBtn);
+
+ birthdayCheckBox.addChangeListener(new ChangeListener() {
+ @Override
+ public void stateChanged(ChangeEvent arg0) {
+ if(birthdayCheckBox.isSelected()) {
+ birthdayBtn.setEnabled(true);
+ } else {
+ birthdayBtn.setEnabled(false);
+ }
+ }
+ });
+
+ // 选择图片,获取图片的信息
+ selectImageBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ String picPath = "";
+
+ // 选择图片,获取图片路径,并在界面显示
+ picPath = ToolKits.openPictureFile(addImagePanel);
+
+ if(!picPath.equals("")) {
+ memory = null;
+ try {
+ memory = ToolKits.readPictureFile(picPath);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+ });
+
+ // 修改人员信息
+ modifyBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ boolean bRet = FaceRecognitionModule.modifyPerson(groupId, uid,
+ memory,
+ nameTextField.getText(),
+ sexComboBox.getSelectedIndex(),
+ birthdayCheckBox.isSelected(), birthdayBtn.getText().toString(),
+ idTypeComboBox.getSelectedIndex(), idTextField.getText());
+
+ if(bRet) {
+ JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+
+ dispose();
+
+ listener.windowClosing();
+ }
+ });
+
+ // 取消,关闭
+ cancelBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ dispose();
+ }
+ });
+ }
+ }
+
+ private void showPersonInfo() {
+ File file = null;
+ if(!pszFileDst.equals("")) {
+ file = ToolKits.openPictureFile(pszFileDst, addImagePanel);
+ }
+
+ if(file != null) {
+ file.delete();
+ }
+
+ try {
+ nameTextField.setText(new String(stuCandidate.stPersonInfo.szPersonName, "GBK").trim());
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ sexComboBox.setSelectedIndex(stuCandidate.stPersonInfo.bySex & 0xff);
+
+ idTypeComboBox.setSelectedIndex(stuCandidate.stPersonInfo.byIDType & 0xff);
+
+ idTextField.setText(new String(stuCandidate.stPersonInfo.szID).trim());
+
+ if(stuCandidate.stPersonInfo == null) {
+ birthdayCheckBox.setSelected(false);
+ birthdayBtn.setText(birthdayBtn.getDate().toString());
+ } else {
+ if(String.valueOf((int)stuCandidate.stPersonInfo.wYear).equals("0000")
+ || String.valueOf((int)stuCandidate.stPersonInfo.wYear).equals("0")
+ || String.valueOf( stuCandidate.stPersonInfo.byMonth & 0xff).equals("0")
+ || String.valueOf( stuCandidate.stPersonInfo.byMonth & 0xff).equals("00")
+ || String.valueOf(stuCandidate.stPersonInfo.byDay & 0xff).equals("0")
+ || String.valueOf(stuCandidate.stPersonInfo.byDay & 0xff).equals("00")) {
+ birthdayCheckBox.setSelected(false);
+ birthdayBtn.setText(birthdayBtn.getDate().toString());
+ } else {
+ birthdayCheckBox.setSelected(true);
+ birthdayBtn.setText(String.valueOf((int)stuCandidate.stPersonInfo.wYear) + "-" +
+ String.valueOf( stuCandidate.stPersonInfo.byMonth & 0xff) + "-" +
+ String.valueOf(stuCandidate.stPersonInfo.byDay & 0xff));
+ }
+ }
+ }
+
+ // 添加人员信息窗口的组件
+ public PaintPanel addImagePanel;
+ private JButton selectImageBtn;
+
+ private JTextField goroupIdTextField;
+ private JTextField goroupNameTextField;
+ private JTextField uidTextField;
+ public JTextField nameTextField;
+ public JComboBox sexComboBox;
+ public DateChooserJButtonEx birthdayBtn;
+ public JComboBox idTypeComboBox;
+ public JTextField idTextField;
+ private JButton modifyBtn;
+ private JButton cancelBtn;
+ public JCheckBox birthdayCheckBox;
+}
diff --git a/src/main/java/com/netsdk/demo/frame/FaceRecognition/NewLatticeScreen.java b/src/main/java/com/netsdk/demo/frame/FaceRecognition/NewLatticeScreen.java
new file mode 100644
index 0000000..85bd061
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/FaceRecognition/NewLatticeScreen.java
@@ -0,0 +1,1186 @@
+package com.netsdk.demo.frame.FaceRecognition;
+
+import com.netsdk.common.DateChooserJButtonEx;
+import com.netsdk.common.FunctionList;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.DotmatrixScreenModule;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.CtrlType;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.structure.NET_IN_SET_PARK_CONTROL_INFO;
+import com.netsdk.lib.structure.NET_OUT_SET_PARK_CONTROL_INFO;
+import com.sun.jna.Pointer;
+
+import javax.swing.*;
+import javax.swing.border.TitledBorder;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 119178 点阵屏下发demo
+ */
+public class NewLatticeScreen {
+
+ // 设备断线通知回调
+ private DisConnect disConnect = new DisConnect();
+
+ // 网络连接恢复
+ private HaveReConnect haveReConnect = new HaveReConnect();
+ private JFrame frame;
+ private JTextField textField;
+ private JTextField textField_1;
+ private JTextField textField_2;
+ private JPasswordField passwordField;
+
+ private JButton btnNewButton;
+ private JButton btnNewButton_1;
+ private JTabbedPane tabbedPane;
+ private JPanel panel_2;
+ private JLabel label_CarStatus;
+ private JComboBox comboBox_CarStatus;
+ private JLabel label_InTime;
+ private DateChooserJButtonEx dateChooser_InTime;
+ private JLabel label_OutTime;
+ private DateChooserJButtonEx dateChooser_OutTime;
+ private JLabel label_PlateNmuber;
+ private JTextField textField_PlateNumber;
+ private JLabel label_CarOwner;
+ private JTextField textField_CarOwner;
+ private JLabel label_ParkingTime;
+ private JTextField textField_ParkingTime;
+ private JLabel label_UserType;
+ private JComboBox comboBox_UserType;
+ private JLabel label_ParkingCharge;
+ private JTextField textField_ParkingCharge;
+ private JLabel label_DaysDue;
+ private JTextField textField_DaysDue;
+ private JLabel label_RemainParkingSpaces;
+ private JTextField textField_RemainParkingSpaces;
+ private JRadioButton radioButton_Allow2Pass;
+ private JRadioButton radioButton_Deny2Pass;
+ private JButton button;
+ private JLabel label_CustomerUserInfo;
+ private JLabel label_RemarksInfo;
+ private JLabel label_CustomerInfo;
+ private JTextField textField_CustomerUserInfo;
+ private JTextField textField_RemarksInfo;
+ private JTextField textField_CustomerInfo;
+ private JPanel panel_1;
+ private JScrollPane scrollPane;
+ private Object[][] ScreenTableData;
+ private Object[][] VideoTableData;
+ private JTable ScreenTable;
+ private JTable VideoTable;
+ private JPanel ScreenInfo;
+
+ private final String[] ScreenTableTitle = {Res.string().getScreenNumber(), Res.string().getContain(),
+ Res.string().getContainType(), Res.string().getContainColor(), Res.string().getScrollType(),
+ Res.string().getScrollSpeed()};
+
+ private final String[] VideoTableTitle = {Res.string().getScreenNumber(), Res.string().getContain(),
+ Res.string().getContainType()};
+
+ private DefaultTableModel Model;
+ private DefaultTableModel VideoModel;
+ private JLabel label_17;
+
+ private JComboBox comboBox_8;
+ private JComboBox comboBox_4;
+ private JComboBox comboBox_5;
+ private JComboBox comboBox_6;
+ private JComboBox comboBox_7;
+ private JButton btnNewButton_3;
+ private JButton btnNewButton_4;
+ private JButton btnNewButton_5;
+ private JTextField textField_21;
+ private JTextField textField_22;
+ private JTextField textField_23;
+ private JButton button_1;
+ private JButton button_2;
+ private JButton button_4;
+ private JButton btnNewButton_6;
+
+ private JLabel label_19;
+
+ // private static NET_IN_SET_PARK_CONTROL_INFO pIn = new
+ // NET_IN_SET_PARK_CONTROL_INFO();
+
+ /**
+ * Launch the application.
+ */
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ NewLatticeScreen demo = new NewLatticeScreen();
+ demo.frame.setVisible(true);
+ }
+ });
+ }
+
+ /**
+ * Create the application.
+ */
+ public NewLatticeScreen() {
+ LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化
+ initialize();
+ // 注册窗体清出事件
+ frame.addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ LoginModule.logout(); // 退出
+ LoginModule.cleanup(); // 关闭工程,释放资源
+ frame.dispose();
+ // 返回主菜单
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+
+ /////////////////面板///////////////////
+// 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数
+ private class DisConnect implements NetSDKLib.fDisConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+// 断线提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(
+ Res.string().getFaceRecognition() + " : " + Res.string().getDisConnectReconnecting());
+ }
+ });
+ }
+ }
+
+ // 网络连接恢复,设备重连成功回调
+// 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数
+ private class HaveReConnect implements NetSDKLib.fHaveReConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+
+// 重连提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getFaceRecognition() + " : " + Res.string().getOnline());
+ }
+ });
+ }
+ }
+
+ /**
+ * Initialize the contents of the frame.
+ */
+ private void initialize() {
+ frame = new JFrame();
+ frame.setTitle(Res.string().getmatrixScreen());
+ frame.setBounds(200, 200, 807, 578);
+ // frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
+ frame.getContentPane().setLayout(null);
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ final JPanel panel1 = new JPanel();
+ panel1.setBounds(10, 10, 100, 50);
+
+ JPanel panel = new JPanel();
+ panel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), Res.string().getLogin(),
+ TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0)));
+ panel.setBounds(10, 10, 771, 40);
+ frame.getContentPane().add(panel);
+ panel.setLayout(null);
+
+ JLabel lblNewLabel = new JLabel(Res.string().getDeviceIp() + ":");
+ lblNewLabel.setBounds(26, 14, 54, 15);
+ panel.add(lblNewLabel);
+
+ textField = new JTextField("172.23.11.180");
+ textField.setBounds(82, 11, 76, 21);
+ panel.add(textField);
+ textField.setColumns(10);
+
+ JLabel lblNewLabel_1 = new JLabel(Res.string().getPort() + ":");
+ lblNewLabel_1.setBounds(168, 14, 47, 15);
+ panel.add(lblNewLabel_1);
+
+ textField_1 = new JTextField("37777");
+ textField_1.setBounds(217, 11, 76, 21);
+ panel.add(textField_1);
+ textField_1.setColumns(10);
+
+ JLabel lblNewLabel_2 = new JLabel(Res.string().getUserName() + ":");
+ lblNewLabel_2.setBounds(302, 14, 47, 15);
+ panel.add(lblNewLabel_2);
+
+ textField_2 = new JTextField("admin");
+ textField_2.setBounds(351, 11, 76, 21);
+ panel.add(textField_2);
+ textField_2.setColumns(10);
+
+ JLabel lblNewLabel_3 = new JLabel(Res.string().getPassword() + ":");
+ lblNewLabel_3.setBounds(435, 14, 38, 15);
+ panel.add(lblNewLabel_3);
+
+ passwordField = new JPasswordField("admin123");
+ passwordField.setBounds(476, 11, 89, 21);
+ panel.add(passwordField);
+
+ btnNewButton = new JButton(Res.string().getLogin());
+ btnNewButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ if (LoginModule.login(textField.getText(), Integer.parseInt(textField_1.getText()),
+ textField_2.getText(), new String(passwordField.getPassword()))) {
+ btnNewButton.setEnabled(false);
+ btnNewButton_1.setEnabled(true);
+ button.setEnabled(true);
+
+ comboBox_8.setEnabled(true);
+ ;
+ comboBox_4.setEnabled(true);
+ comboBox_5.setEnabled(true);
+ comboBox_6.setEnabled(true);
+ comboBox_7.setEnabled(true);
+ btnNewButton_3.setEnabled(true);
+ btnNewButton_4.setEnabled(true);
+ btnNewButton_5.setEnabled(true);
+ textField_21.setEnabled(true);
+ textField_22.setEnabled(true);
+ textField_23.setEnabled(true);
+ button_1.setEnabled(true);
+ button_2.setEnabled(true);
+ button_4.setEnabled(true);
+ btnNewButton_6.setEnabled(true);
+
+ textField.setEnabled(true);
+ ;
+ textField_1.setEditable(true);
+ ;
+ textField_2.setEnabled(true);
+ textField_CustomerInfo.setEnabled(true);
+ textField_RemarksInfo.setEnabled(true);
+ textField_CustomerUserInfo.setEnabled(true);
+ textField_RemainParkingSpaces.setEnabled(true);
+ textField_DaysDue.setEnabled(true);
+ textField_ParkingCharge.setEnabled(true);
+ textField_ParkingTime.setEnabled(true);
+ textField_CarOwner.setEnabled(true);
+ textField_PlateNumber.setEnabled(true);
+ comboBox_UserType.setEnabled(true);
+ comboBox_CarStatus.setEnabled(true);
+ radioButton_Allow2Pass.setEnabled(true);
+ radioButton_Deny2Pass.setEnabled(true);
+ dateChooser_InTime.setEnabled(true);
+ dateChooser_OutTime.setEnabled(true);
+ passwordField.setEnabled(true);
+ } else {
+ JOptionPane.showMessageDialog(null,
+ Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(),
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ });
+ btnNewButton.setBounds(584, 10, 76, 23);
+ panel.add(btnNewButton);
+ btnNewButton.setEnabled(true);
+
+ btnNewButton_1 = new JButton(Res.string().getLogout());
+ btnNewButton_1.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ LoginModule.logout();
+ btnNewButton.setEnabled(true);
+ btnNewButton_1.setEnabled(false);
+ button.setEnabled(false);
+
+ comboBox_8.setEnabled(false);
+ ;
+ comboBox_4.setEnabled(false);
+ comboBox_5.setEnabled(false);
+ comboBox_6.setEnabled(false);
+ comboBox_7.setEnabled(false);
+ btnNewButton_3.setEnabled(false);
+ btnNewButton_4.setEnabled(false);
+ btnNewButton_5.setEnabled(false);
+ textField_21.setEnabled(false);
+ textField_22.setEnabled(false);
+ textField_23.setEnabled(false);
+ button_1.setEnabled(false);
+ button_2.setEnabled(false);
+ button_4.setEnabled(false);
+ btnNewButton_6.setEnabled(false);
+
+ textField.setEnabled(false);
+ ;
+ textField_1.setEditable(false);
+ ;
+ textField_2.setEnabled(false);
+ textField_CustomerInfo.setEnabled(false);
+ textField_RemarksInfo.setEnabled(false);
+ textField_CustomerUserInfo.setEnabled(false);
+ textField_RemainParkingSpaces.setEnabled(false);
+ textField_DaysDue.setEnabled(false);
+ textField_ParkingCharge.setEnabled(false);
+ textField_ParkingTime.setEnabled(false);
+ textField_CarOwner.setEnabled(false);
+ textField_PlateNumber.setEnabled(false);
+ comboBox_UserType.setEnabled(false);
+ comboBox_CarStatus.setEnabled(false);
+ radioButton_Allow2Pass.setEnabled(false);
+ radioButton_Deny2Pass.setEnabled(false);
+ dateChooser_InTime.setEnabled(false);
+ dateChooser_OutTime.setEnabled(false);
+ passwordField.setEnabled(true);
+ }
+ });
+ btnNewButton_1.setBounds(678, 10, 76, 23);
+ panel.add(btnNewButton_1);
+ btnNewButton_1.setEnabled(false);
+
+ tabbedPane = new JTabbedPane(JTabbedPane.TOP);
+ tabbedPane.setBounds(10, 60, 771, 470);
+ frame.getContentPane().add(tabbedPane);
+
+ panel_2 = new JPanel();
+ panel_2.setLayout(null);
+ panel_2.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));
+ tabbedPane.addTab("part1", null, panel_2, null);
+
+ label_CarStatus = new JLabel(Res.string().getPassingState() + ":");
+ label_CarStatus.setBounds(71, 26, 95, 21);
+ panel_2.add(label_CarStatus);
+
+ comboBox_CarStatus = new JComboBox();
+ comboBox_CarStatus.setEnabled(false);
+ comboBox_CarStatus.setModel(
+ new DefaultComboBoxModel(new String[]{Res.string().getPassingCar(), Res.string().getNoCar()}));
+ comboBox_CarStatus.setBounds(176, 26, 131, 21);
+ comboBox_CarStatus.setSelectedIndex(0);
+ panel_2.add(comboBox_CarStatus);
+
+ label_InTime = new JLabel(Res.string().getInTime() + ":");
+ label_InTime.setBounds(391, 29, 102, 15);
+ panel_2.add(label_InTime);
+
+ dateChooser_InTime = new DateChooserJButtonEx();
+ dateChooser_InTime.setEnabled(false);
+ dateChooser_InTime.setBounds(503, 26, 131, 21);
+ panel_2.add(dateChooser_InTime);
+
+ label_OutTime = new JLabel(Res.string().getOutTime() + ":");
+ label_OutTime.setBounds(391, 84, 102, 15);
+ panel_2.add(label_OutTime);
+
+ dateChooser_OutTime = new DateChooserJButtonEx();
+ dateChooser_OutTime.setEnabled(false);
+ dateChooser_OutTime.setBounds(503, 81, 131, 21);
+ panel_2.add(dateChooser_OutTime);
+
+ label_PlateNmuber = new JLabel(Res.string().getPlateNumber() + ":");
+ label_PlateNmuber.setBounds(71, 84, 95, 15);
+ panel_2.add(label_PlateNmuber);
+
+ textField_PlateNumber = new JTextField();
+ textField_PlateNumber.setEnabled(false);
+ textField_PlateNumber.setColumns(10);
+ textField_PlateNumber.setBounds(176, 81, 131, 21);
+ panel_2.add(textField_PlateNumber);
+
+ label_CarOwner = new JLabel(Res.string().getCarOwner() + ":");
+ label_CarOwner.setBounds(77, 142, 89, 15);
+ panel_2.add(label_CarOwner);
+
+ textField_CarOwner = new JTextField();
+ textField_CarOwner.setEnabled(false);
+ textField_CarOwner.setColumns(10);
+ textField_CarOwner.setBounds(176, 139, 131, 21);
+ panel_2.add(textField_CarOwner);
+
+ label_ParkingTime = new JLabel(Res.string().getParkingTime() + ":");
+ label_ParkingTime.setBounds(391, 133, 102, 15);
+ panel_2.add(label_ParkingTime);
+
+ textField_ParkingTime = new JTextField();
+ textField_ParkingTime.setEnabled(false);
+ textField_ParkingTime.setColumns(10);
+ textField_ParkingTime.setBounds(503, 130, 131, 21);
+ panel_2.add(textField_ParkingTime);
+
+ label_UserType = new JLabel(Res.string().getUserType() + ":");
+ label_UserType.setBounds(71, 198, 95, 15);
+ panel_2.add(label_UserType);
+
+ comboBox_UserType = new JComboBox();
+ comboBox_UserType.setEnabled(false);
+ comboBox_UserType.setModel(new DefaultComboBoxModel(new String[]{Res.string().getMonthlyCardUser(),
+ Res.string().getAnnualCardUser(), Res.string().getLongTermUser(), Res.string().getTemporaryUser()}));
+ comboBox_UserType.setBounds(176, 195, 131, 21);
+ comboBox_UserType.setSelectedIndex(0);
+ panel_2.add(comboBox_UserType);
+
+ label_ParkingCharge = new JLabel(Res.string().getParkingCharge());
+ label_ParkingCharge.setBounds(391, 178, 102, 15);
+ panel_2.add(label_ParkingCharge);
+
+ textField_ParkingCharge = new JTextField();
+ textField_ParkingCharge.setEnabled(false);
+ textField_ParkingCharge.setColumns(10);
+ textField_ParkingCharge.setBounds(503, 175, 131, 21);
+ panel_2.add(textField_ParkingCharge);
+
+ label_DaysDue = new JLabel(Res.string().getDaysDue());
+ label_DaysDue.setBounds(71, 253, 95, 15);
+ panel_2.add(label_DaysDue);
+
+ textField_DaysDue = new JTextField();
+ textField_DaysDue.setEnabled(false);
+ textField_DaysDue.setColumns(10);
+ textField_DaysDue.setBounds(176, 250, 131, 21);
+ panel_2.add(textField_DaysDue);
+
+ label_RemainParkingSpaces = new JLabel(Res.string().getRemainingParkingSpaces());
+ label_RemainParkingSpaces.setBounds(391, 215, 102, 15);
+ panel_2.add(label_RemainParkingSpaces);
+
+ textField_RemainParkingSpaces = new JTextField();
+ textField_RemainParkingSpaces.setEnabled(false);
+ textField_RemainParkingSpaces.setColumns(10);
+ textField_RemainParkingSpaces.setBounds(503, 212, 131, 21);
+ panel_2.add(textField_RemainParkingSpaces);
+
+ radioButton_Deny2Pass = new JRadioButton(Res.string().getVehiclesNotAllowedToPass());
+ radioButton_Deny2Pass.setEnabled(false);
+ radioButton_Deny2Pass.setBounds(367, 249, 155, 23);
+ radioButton_Deny2Pass.setSelected(true);
+ panel_2.add(radioButton_Deny2Pass);
+
+ radioButton_Allow2Pass = new JRadioButton(Res.string().getAllowedVehiclesToPass());
+ radioButton_Allow2Pass.setEnabled(false);
+ radioButton_Allow2Pass.setBounds(524, 249, 162, 23);
+ panel_2.add(radioButton_Allow2Pass);
+
+ ButtonGroup group = new ButtonGroup();
+ group.add(radioButton_Allow2Pass);
+ group.add(radioButton_Deny2Pass);
+
+ button = new JButton(Res.string().getSetUp());
+ button.setEnabled(false);
+ button.setBounds(633, 408, 93, 23);
+ panel_2.add(button);
+
+ label_CustomerUserInfo = new JLabel(Res.string().getCostomUserInfo() + ":");
+ label_CustomerUserInfo.setBounds(58, 290, 119, 21);
+ panel_2.add(label_CustomerUserInfo);
+
+ label_RemarksInfo = new JLabel(Res.string().getRemarksInfo() + ":");
+ label_RemarksInfo.setBounds(58, 332, 97, 21);
+ panel_2.add(label_RemarksInfo);
+
+ label_CustomerInfo = new JLabel(Res.string().getCostomInfo() + ":");
+ label_CustomerInfo.setBounds(58, 375, 95, 21);
+ panel_2.add(label_CustomerInfo);
+
+ textField_CustomerUserInfo = new JTextField();
+ textField_CustomerUserInfo.setEnabled(false);
+ textField_CustomerUserInfo.setColumns(10);
+ textField_CustomerUserInfo.setBounds(176, 287, 460, 28);
+ panel_2.add(textField_CustomerUserInfo);
+
+ textField_RemarksInfo = new JTextField();
+ textField_RemarksInfo.setEnabled(false);
+ textField_RemarksInfo.setColumns(10);
+ textField_RemarksInfo.setBounds(176, 329, 460, 28);
+ panel_2.add(textField_RemarksInfo);
+
+ textField_CustomerInfo = new JTextField();
+ textField_CustomerInfo.setEnabled(false);
+ textField_CustomerInfo.setColumns(10);
+ textField_CustomerInfo.setBounds(176, 372, 460, 28);
+ panel_2.add(textField_CustomerInfo);
+
+ button.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ int emType = NetSDKLib.CtrlType.CTRLTYPE_CTRL_SET_PARK_INFO;
+
+ NetSDKLib.NET_CTRL_SET_PARK_INFO msg = new NetSDKLib.NET_CTRL_SET_PARK_INFO();
+
+ try {
+ byte[] plateNumber = textField_PlateNumber.getText().getBytes("GBK");
+ System.arraycopy(plateNumber, 0, msg.szPlateNumber, 0, plateNumber.length);
+ } catch (UnsupportedEncodingException e2) {
+ // TODO Auto-generated catch block
+ e2.printStackTrace();
+ }
+
+ if (!textField_ParkingTime.getText().equals("")) {
+ msg.nParkTime = Integer.parseInt(textField_ParkingTime.getText());
+ } else {
+ msg.nParkTime = 0;
+ }
+
+ try {
+ byte[] masterOfCar = textField_CarOwner.getText().getBytes("GBK");
+ System.arraycopy(masterOfCar, 0, msg.szMasterofCar, 0, masterOfCar.length);
+ } catch (UnsupportedEncodingException e2) {
+ // TODO Auto-generated catch block
+ e2.printStackTrace();
+ }
+
+ if (comboBox_UserType.getSelectedItem() != null) {
+ if (comboBox_UserType.getSelectedItem().equals(Res.string().getMonthlyCardUser())) {
+ System.arraycopy("monthlyCardUser".getBytes(), 0, msg.szUserType, 0, "monthlyCardUser".length());
+ } else if (comboBox_UserType.getSelectedItem().equals(Res.string().getAnnualCardUser())) {
+ System.arraycopy("yearlyCardUser".getBytes(), 0, msg.szUserType, 0, "yearlyCardUser".length());
+ } else if (comboBox_UserType.getSelectedItem().equals(Res.string().getLongTermUser())) {
+ System.arraycopy("longTimeUser".getBytes(), 0, msg.szUserType, 0, "longTimeUser".length());
+ } else if (comboBox_UserType.getSelectedItem().equals(Res.string().getTemporaryUser())) {
+ System.arraycopy("casualUser".getBytes(), 0, msg.szUserType, 0, "casualUser".length());
+ }
+ }
+
+ if (!textField_DaysDue.getText().equals("")) {
+ msg.nRemainDay = Integer.parseInt(textField_DaysDue.getText());
+ } else {
+ msg.nRemainDay = 0;
+ }
+
+ if (radioButton_Deny2Pass.isSelected()) {
+ msg.nPassEnable = 0;
+ } else if (radioButton_Allow2Pass.isSelected()) {
+ msg.nPassEnable = 1;
+ }
+ String InTime = dateChooser_InTime.getText();// 车辆入场时间
+ String[] InTimes = InTime.split("-");
+
+ msg.stuInTime.dwYear = (short) Integer.parseInt(InTimes[0]);
+ msg.stuInTime.dwMonth = (byte) Integer.parseInt(InTimes[1]);
+ msg.stuInTime.dwDay = (byte) Integer.parseInt(InTimes[2]);
+
+ String OutTime = dateChooser_OutTime.getText();// 车辆出场时间
+ String[] OutTimes = OutTime.split("-");
+
+ msg.stuOutTime.dwYear = (short) Integer.parseInt(OutTimes[0]);
+ msg.stuOutTime.dwMonth = (byte) Integer.parseInt(OutTimes[1]);
+ msg.stuOutTime.dwDay = (byte) Integer.parseInt(OutTimes[2]);
+
+ try {
+ byte[] parkCharge = textField_ParkingCharge.getText().getBytes("GBK");
+ System.arraycopy(parkCharge, 0, msg.szParkCharge, 0, parkCharge.length);
+ } catch (UnsupportedEncodingException e2) {
+ // TODO Auto-generated catch block
+ e2.printStackTrace();
+ }
+
+ if (!textField_RemainParkingSpaces.getText().equals("")) {
+ msg.nRemainSpace = Integer.parseInt(textField_RemainParkingSpaces.getText());
+ } else {
+ msg.nRemainSpace = 0;
+ }
+
+ if (comboBox_CarStatus.getSelectedItem() != null) {
+ if (comboBox_CarStatus.getSelectedItem().equals(Res.string().getPassingCar())) {
+ msg.emCarStatus = 1;
+ } else if (comboBox_CarStatus.getSelectedItem().equals(Res.string().getNoCar())) {
+ msg.emCarStatus = 2;
+ }
+ }
+
+ try {
+ byte[] subUserType = textField_CustomerUserInfo.getText().getBytes("GBK");
+ System.arraycopy(subUserType, 0, msg.szSubUserType, 0, subUserType.length);
+ } catch (UnsupportedEncodingException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+ try {
+ byte[] remarks = textField_RemarksInfo.getText().getBytes("GBK");
+ System.arraycopy(remarks, 0, msg.szRemarks, 0, remarks.length);
+ } catch (UnsupportedEncodingException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+ try {
+ byte[] custom = textField_CustomerInfo.getText().getBytes("GBK");
+ System.arraycopy(custom, 0, msg.szCustom, 0, custom.length);
+ } catch (UnsupportedEncodingException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+
+ msg.write();
+ boolean ret = DotmatrixScreenModule.setDotmatrixScreen(emType, msg);
+ if (ret) {
+ JOptionPane.showMessageDialog(panel1, Res.string().getSetUpSuccess());
+ } else {
+ JOptionPane.showMessageDialog(panel1, Res.string().getSetUpFailed());
+ }
+ }
+ });
+
+ panel_1 = new JPanel();
+ tabbedPane.addTab("part2", null, panel_1, null);
+ panel_1.setLayout(null);
+ ScreenInfo = new JPanel();
+ ScreenInfo.setBorder(
+ new TitledBorder(null, Res.string().getEventInfo(), TitledBorder.LEFT, TitledBorder.TOP, null, null));
+ ScreenInfo.setSize(500, 405);
+ ScreenInfo.setLocation(10, 5);
+ panel_1.add(ScreenInfo);
+ ScreenInfo.setLayout(null);
+
+ ScreenTableData = new Object[0][6];
+ ScreenTable = tableInit(ScreenTableData, ScreenTableTitle);
+ Model = (DefaultTableModel) ScreenTable.getModel();
+ scrollPane = new JScrollPane(ScreenTable);
+ scrollPane.setBounds(10, 19, 480, 221);
+ scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+ ScreenInfo.add(scrollPane);
+
+ btnNewButton_3 = new JButton(Res.string().getAdd());
+ btnNewButton_3.setEnabled(false);
+ btnNewButton_3.setBounds(10, 250, 75, 20);
+ btnNewButton_3.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ // TODO Auto-generated method stub
+
+ String Contain = textField_21.getText();
+ int ScreenNum = Integer.parseInt(textField_22.getText());
+ String ContainType = null;
+ String ContainColor = null;
+ String ScrollType = null;
+ String ScrollSpeed = null;
+ if (comboBox_4.getSelectedItem().equals(Res.string().getOrdinary())) {
+ ContainType = /* "普通" */Res.string().getOrdinary();
+ } else if (comboBox_4.getSelectedItem().equals(Res.string().getLocalTime())) {
+ ContainType = /* "本地时间" */Res.string().getLocalTime();
+ } else if (comboBox_4.getSelectedItem().equals(Res.string().getQRCode())) {
+ ContainType = /* "二维码" */Res.string().getQRCode();
+ } /*
+ * else if(comboBox_4.getSelectedItem().equals(Res.string().getResource())) {
+ * ContainType = "资源文件" Res.string().getResource(); }
+ */
+
+ if (comboBox_5.getSelectedItem().equals(Res.string().getGreen())) {
+ ContainColor = /* "绿色" */Res.string().getGreen();
+ } else if (comboBox_5.getSelectedItem().equals(Res.string().getRed())) {
+ ContainColor = /* "红色" */Res.string().getRed();
+ } else if (comboBox_5.getSelectedItem().equals(Res.string().getYellow())) {
+ ContainColor = /* "黄色" */Res.string().getYellow();
+ } else if (comboBox_5.getSelectedItem().equals(Res.string().getWhite())) {
+ ContainColor = /* "白色" */Res.string().getWhite();
+ }
+ if (comboBox_6.getSelectedItem().equals(Res.string().getNoRolling())) {
+ ScrollType = /* "不滚动" */Res.string().getNoRolling();
+ } else if (comboBox_6.getSelectedItem().equals(Res.string().getScrollLeftAndRight())) {
+ ScrollType = /* "左右滚动" */Res.string().getScrollLeftAndRight();
+ } else if (comboBox_6.getSelectedItem().equals(Res.string().getScrollTopAndDown())) {
+ ScrollType = /* "上下翻页滚动" */Res.string().getScrollTopAndDown();
+ }
+ if (comboBox_7.getSelectedItem().equals("1")) {
+ ScrollSpeed = /* "速率1" */Res.string().getSpeed() + "1";
+ } else if (comboBox_7.getSelectedItem().equals("2")) {
+ ScrollSpeed = /* "速率2" */Res.string().getSpeed() + "2";
+ } else if (comboBox_7.getSelectedItem().equals("3")) {
+ ScrollSpeed = /* "速率3" */Res.string().getSpeed() + "3";
+ } else if (comboBox_7.getSelectedItem().equals("4")) {
+ ScrollSpeed = /* "速率4" */Res.string().getSpeed() + "4";
+ } else if (comboBox_7.getSelectedItem().equals("5")) {
+ ScrollSpeed = /* "速率5" */Res.string().getSpeed() + "5";
+ }
+ /*
+ * Model.setValueAt(ScreenNum, index, 0); Model.setValueAt(Contain, index, 1);
+ * Model.setValueAt(ContainType, index, 2); Model.setValueAt(ContainColor,
+ * index, 3); Model.setValueAt(ScrollType, index, 4);
+ * Model.setValueAt(ScrollSpeed, index, 5); index++;
+ */
+ List num = new ArrayList();
+ for (int i = 0; i < Model.getRowCount(); i++) {
+ num.add((Integer) Model.getValueAt(i, 0));
+ }
+ if (ScreenNum == -1 || Contain == null) {
+ JOptionPane.showMessageDialog(panel1, Res.string().getPrompt());
+ } else {
+ if (num.contains(ScreenNum)) {
+ JOptionPane.showMessageDialog(panel1, "屏幕编号已存在,请删除或修改屏幕编号!");
+ } else {
+ Model.addRow(new Object[]{ScreenNum, Contain, ContainType, ContainColor, ScrollType,
+ ScrollSpeed});
+ }
+ }
+ }
+ });
+ ScreenInfo.add(btnNewButton_3);
+
+ btnNewButton_4 = new JButton(Res.string().getModify());
+ btnNewButton_4.setEnabled(false);
+ btnNewButton_4.setBounds(96, 250, 75, 20);
+ btnNewButton_4.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ // TODO Auto-generated method stub
+ String Contain = textField_21.getText();
+ int ScreenNum = Integer.parseInt(textField_22.getText());
+ // int ScreenNum = (int)Model.getValueAt(ScreenTable.getSelectedRow(), 0);
+ String ContainType = null;
+ String ContainColor = null;
+ String ScrollType = null;
+ String ScrollSpeed = null;
+ if (comboBox_4.getSelectedItem().equals(Res.string().getOrdinary())) {
+ ContainType = /* "普通" */Res.string().getOrdinary();
+ } else if (comboBox_4.getSelectedItem().equals(Res.string().getLocalTime())) {
+ ContainType = /* "本地时间" */Res.string().getLocalTime();
+ } else if (comboBox_4.getSelectedItem().equals(Res.string().getQRCode())) {
+ ContainType = /* "二维码" */Res.string().getQRCode();
+ } /*
+ * else if (comboBox_4.getSelectedItem().equals(Res.string().getResource())) {
+ * ContainType = "资源文件" Res.string().getResource(); }
+ */
+
+ if (comboBox_5.getSelectedItem().equals(Res.string().getGreen())) {
+ ContainColor = /* "绿色" */Res.string().getGreen();
+ } else if (comboBox_5.getSelectedItem().equals(Res.string().getRed())) {
+ ContainColor = /* "红色" */Res.string().getRed();
+ } else if (comboBox_5.getSelectedItem().equals(Res.string().getYellow())) {
+ ContainColor = /* "黄色" */Res.string().getYellow();
+ } else if (comboBox_5.getSelectedItem().equals(Res.string().getWhite())) {
+ ContainColor = /* "白色" */Res.string().getWhite();
+ }
+ if (comboBox_6.getSelectedItem().equals(Res.string().getNoRolling())) {
+ ScrollType = /* "不滚动" */Res.string().getNoRolling();
+ } else if (comboBox_6.getSelectedItem().equals(Res.string().getScrollLeftAndRight())) {
+ ScrollType = /* "左右滚动" */Res.string().getScrollLeftAndRight();
+ } else if (comboBox_6.getSelectedItem().equals(Res.string().getScrollTopAndDown())) {
+ ScrollType = /* "上下翻页滚动" */Res.string().getScrollTopAndDown();
+ }
+ if (comboBox_7.getSelectedItem().equals("1")) {
+ ScrollSpeed = /* "速率1" */Res.string().getSpeed() + "1";
+ } else if (comboBox_7.getSelectedItem().equals("2")) {
+ ScrollSpeed = /* "速率2" */Res.string().getSpeed() + "2";
+ } else if (comboBox_7.getSelectedItem().equals("3")) {
+ ScrollSpeed = /* "速率3" */Res.string().getSpeed() + "3";
+ } else if (comboBox_7.getSelectedItem().equals("4")) {
+ ScrollSpeed = /* "速率4" */Res.string().getSpeed() + "4";
+ } else if (comboBox_7.getSelectedItem().equals("5")) {
+ ScrollSpeed = /* "速率5" */Res.string().getSpeed() + "5";
+ }
+
+ List num = new ArrayList();
+ for (int i = 0; i < Model.getRowCount(); i++) {
+ num.add((Integer) Model.getValueAt(i, 0));
+ }
+ num.remove(ScreenTable.getSelectedRow());
+ if (Model.getRowCount() == 0) {
+ JOptionPane.showMessageDialog(panel1, Res.string().getPrompt());
+ } else {
+ if (num.contains(ScreenNum)) {
+ JOptionPane.showMessageDialog(panel1, "屏幕编号已存在,请删除或修改屏幕编号!");
+ } else {
+ Model.setValueAt(ScreenNum, ScreenTable.getSelectedRow(), 0);
+ Model.setValueAt(Contain, ScreenTable.getSelectedRow(), 1);
+ Model.setValueAt(ContainType, ScreenTable.getSelectedRow(), 2);
+ Model.setValueAt(ContainColor, ScreenTable.getSelectedRow(), 3);
+ Model.setValueAt(ScrollType, ScreenTable.getSelectedRow(), 4);
+ Model.setValueAt(ScrollSpeed, ScreenTable.getSelectedRow(), 5);
+ }
+ }
+ }
+ });
+ ScreenInfo.add(btnNewButton_4);
+
+ btnNewButton_5 = new JButton(Res.string().getDelete());
+ btnNewButton_5.setEnabled(false);
+ btnNewButton_5.setBounds(181, 250, 75, 20);
+ btnNewButton_5.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ // TODO Auto-generated method stub
+ // System.out.println(ScreenTable.getSelectedRow());
+ if (Model.getRowCount() == 0) {
+ JOptionPane.showMessageDialog(panel1, Res.string().getPrompt());
+ } else {
+ Model.removeRow(ScreenTable.getSelectedRow());
+ }
+ }
+ });
+ ScreenInfo.add(btnNewButton_5);
+
+ textField_21 = new JTextField();
+ textField_21.setEnabled(false);
+ textField_21.setBounds(21, 305, 171, 92);
+ ScreenInfo.add(textField_21);
+ textField_21.setColumns(10);
+
+ JLabel lblNewLabel_4 = new JLabel(Res.string().getScreenNumber() + ":");
+ lblNewLabel_4.setBounds(266, 265, 69, 15);
+ ScreenInfo.add(lblNewLabel_4);
+
+ textField_22 = new JTextField(new String("-1"));
+ textField_22.setEnabled(false);
+ textField_22.setBounds(327, 262, 159, 21);
+ ScreenInfo.add(textField_22);
+ textField_22.setColumns(10);
+
+ JLabel label = new JLabel(Res.string().getContainType() + ":");
+ label.setBounds(266, 297, 69, 15);
+ ScreenInfo.add(label);
+
+ comboBox_4 = new JComboBox();
+ comboBox_4.setEnabled(false);
+ comboBox_4.setModel(new DefaultComboBoxModel(new String[]{Res.string().getOrdinary(),
+ Res.string().getLocalTime(), Res.string().getQRCode()/* , Res.string().getResource() */}));
+ comboBox_4.setBounds(327, 294, 159, 21);
+ ScreenInfo.add(comboBox_4);
+
+ JLabel label_1 = new JLabel(Res.string().getContainColor() + ":");
+ label_1.setBounds(266, 325, 69, 15);
+ ScreenInfo.add(label_1);
+
+ comboBox_5 = new JComboBox();
+ comboBox_5.setEnabled(false);
+ comboBox_5.setModel(new DefaultComboBoxModel(new String[]{Res.string().getGreen(), Res.string().getRed(),
+ Res.string().getYellow(), Res.string().getWhite()}));
+ comboBox_5.setBounds(327, 322, 159, 21);
+ ScreenInfo.add(comboBox_5);
+
+ JLabel label_2 = new JLabel(Res.string().getScrollType() + ":");
+ label_2.setBounds(266, 350, 69, 15);
+ ScreenInfo.add(label_2);
+
+ comboBox_6 = new JComboBox();
+ comboBox_6.setEnabled(false);
+ comboBox_6.setModel(new DefaultComboBoxModel(new String[]{Res.string().getNoRolling(),
+ Res.string().getScrollLeftAndRight(), Res.string().getScrollTopAndDown()}));
+ comboBox_6.setBounds(327, 350, 159, 21);
+ ScreenInfo.add(comboBox_6);
+
+ JLabel label_16 = new JLabel(Res.string().getScrollSpeed() + ":");
+ label_16.setBounds(266, 380, 69, 15);
+ ScreenInfo.add(label_16);
+
+ comboBox_7 = new JComboBox();
+ comboBox_7.setEnabled(false);
+ comboBox_7.setModel(new DefaultComboBoxModel(new String[]{"1", "2", "3", "4", "5"}));
+ comboBox_7.setBounds(327, 377, 159, 21);
+ ScreenInfo.add(comboBox_7);
+
+ JLabel label_18 = new JLabel(Res.string().getContain() + ":");
+ label_18.setBounds(22, 280, 69, 15);
+ ScreenInfo.add(label_18);
+
+ JPanel panel_3 = new JPanel();
+ panel_3.setBounds(520, 5, 240, 405);
+ panel_3.setBorder(
+ new TitledBorder(null, Res.string().getEventInfo(), TitledBorder.LEFT, TitledBorder.TOP, null, null));
+ panel_1.add(panel_3);
+ panel_3.setLayout(null);
+
+ VideoTableData = new Object[0][3];
+ VideoTable = tableInit(VideoTableData, VideoTableTitle);
+ VideoModel = (DefaultTableModel) VideoTable.getModel();
+ JScrollPane scrollPane_1 = new JScrollPane(VideoTable);
+ scrollPane_1.setBounds(10, 20, 225, 180);
+ panel_3.add(scrollPane_1);
+
+ button_1 = new JButton(Res.string().getAdd());
+ button_1.setEnabled(false);
+ button_1.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ // TODO Auto-generated method stub
+ String containType = null;
+ String contain = null;
+ int ScreenNum = Integer.parseInt(textField_22.getText());
+ contain = textField_23.getText();
+ if (comboBox_8.getSelectedItem().equals(Res.string().getOrdinary())) {
+ containType = /* "普通" */Res.string().getOrdinary();
+ } else if (comboBox_8.getSelectedItem().equals(Res.string().getPlateNumber())) {
+ containType = /* "车牌号码" */Res.string().getPlateNumber();
+ } else if (comboBox_8.getSelectedItem().equals(Res.string().getTime())) {
+ containType = /* "时间" */Res.string().getTime();
+ } else if (comboBox_8.getSelectedItem().equals(Res.string().getNumericString())) {
+ containType = /* "数字字符串" */Res.string().getNumericString();
+ }
+
+ /*
+ * VideoModel.setValueAt(ScreenNum, VedioIndex, 0);
+ * VideoModel.setValueAt(containType, VedioIndex, 1); VedioIndex++;
+ */
+
+ List num = new ArrayList();
+ for (int i = 0; i < VideoModel.getRowCount(); i++) {
+ num.add((Integer) VideoModel.getValueAt(i, 0));
+ }
+ if (ScreenNum == -1 || contain == null) {
+ JOptionPane.showMessageDialog(panel1, Res.string().getPrompt());
+ } else {
+ if (num.contains(ScreenNum)) {
+ JOptionPane.showMessageDialog(panel1, "屏幕编号已存在,请删除或修改屏幕编号!");
+ } else {
+ VideoModel.addRow(new Object[]{ScreenNum, contain, containType});
+ }
+ }
+ }
+ });
+ button_1.setBounds(10, 213, 67, 20);
+ panel_3.add(button_1);
+
+ button_2 = new JButton(Res.string().getModify());
+ button_2.setEnabled(false);
+ button_2.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ // TODO Auto-generated method stub
+ String containType = null;
+ int ScreenNum = Integer.parseInt(textField_22.getText());
+ // int ScreenNum = (int)VideoModel.getValueAt(ScreenTable.getSelectedRow(), 0);
+ String contain = textField_23.getText();
+ if (comboBox_8.getSelectedItem().equals(Res.string().getOrdinary())) {
+ containType = /* "普通" */Res.string().getOrdinary();
+ } else if (comboBox_8.getSelectedItem().equals(Res.string().getPlateNumber())) {
+ containType = /* "车牌号码" */Res.string().getPlateNumber();
+ } else if (comboBox_8.getSelectedItem().equals(Res.string().getTime())) {
+ containType = /* "时间" */Res.string().getTime();
+ } else if (comboBox_8.getSelectedItem().equals(Res.string().getNumericString())) {
+ containType = /* "数字字符串" */Res.string().getNumericString();
+ }
+
+ List num = new ArrayList();
+ for (int i = 0; i < VideoTable.getRowCount(); i++) {
+ num.add((Integer) VideoTable.getValueAt(i, 0));
+ }
+ num.remove(VideoTable.getSelectedRow());
+ if (VideoTable.getRowCount() == 0) {
+ JOptionPane.showMessageDialog(panel1, Res.string().getPrompt());
+ } else {
+
+ if (num.contains(ScreenNum)) {
+ JOptionPane.showMessageDialog(panel1,
+ "屏幕编号已存在,请删除或修改屏幕编号!");
+ } else {
+ VideoModel.setValueAt(ScreenNum,
+ VideoTable.getSelectedRow(), 0);
+
+ VideoModel.setValueAt(contain, VideoTable.getSelectedRow(), 1);
+ VideoModel.setValueAt(containType, VideoTable.getSelectedRow(), 2);
+ }
+ }
+ }
+ });
+ button_2.setBounds(87, 213, 67, 20);
+ panel_3.add(button_2);
+
+ button_4 = new JButton(Res.string().getDelete());
+ button_4.setEnabled(false);
+ button_4.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ // TODO Auto-generated method stub
+ // System.out.println(VideoTable.getSelectedRow());
+ if (VideoTable.getRowCount() == 0) {
+ JOptionPane.showMessageDialog(panel1, Res.string().getPrompt());
+ } else {
+ VideoModel.removeRow(VideoTable.getSelectedRow());
+ }
+
+ /*
+ * VideoModel.setValueAt("", VideoTable.getSelectedRow(), 0);
+ * VideoModel.setValueAt("", VideoTable.getSelectedRow(), 1); VedioIndex= 0;
+ */
+ }
+ });
+ button_4.setBounds(164, 213, 71, 20);
+ panel_3.add(button_4);
+
+ label_17 = new JLabel(Res.string().getContainType() + ":");
+ label_17.setBounds(10, 252, 69, 15);
+ panel_3.add(label_17);
+
+ comboBox_8 = new JComboBox();
+ comboBox_8.setEnabled(false);
+ comboBox_8.setModel(new DefaultComboBoxModel(new String[]{Res.string().getOrdinary(),
+ Res.string().getPlateNumber(), Res.string().getTime(), Res.string().getNumericString()}));
+ comboBox_8.setBounds(71, 249, 159, 21);
+ panel_3.add(comboBox_8);
+
+ label_19 = new JLabel(Res.string().getVoiceText() + ":");
+ label_19.setBounds(10, 280, 69, 15);
+ panel_3.add(label_19);
+
+ textField_23 = new JTextField();
+ textField_23.setEnabled(false);
+ textField_23.setColumns(10);
+ textField_23.setBounds(10, 305, 220, 92);
+ panel_3.add(textField_23);
+
+ btnNewButton_6 = new JButton(Res.string().getIssued());
+ btnNewButton_6.setEnabled(false);
+ btnNewButton_6.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ // TODO Auto-generated method stub
+ NET_IN_SET_PARK_CONTROL_INFO pIn = new NET_IN_SET_PARK_CONTROL_INFO();
+
+ pIn.nScreenShowInfoNum = Model.getRowCount();
+ // System.out.println(pIn.nScreenShowInfoNum);
+ for (int i = 0; i < pIn.nScreenShowInfoNum; i++) {
+ pIn.stuScreenShowInfo[i].nScreenNo = Integer.parseInt(String.valueOf(Model.getValueAt(i, 0)));
+ try {
+ pIn.stuScreenShowInfo[i].szText = String.valueOf(Model.getValueAt(i, 1)).getBytes("GBK");
+ } catch (UnsupportedEncodingException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ if (String.valueOf(Model.getValueAt(i, 2)).trim().equals(Res.string().getOrdinary())) {
+ pIn.stuScreenShowInfo[i].emTextType = 0;
+ } else if (String.valueOf(Model.getValueAt(i, 2)).trim().equals(Res.string().getLocalTime())) {
+ pIn.stuScreenShowInfo[i].emTextType = 1;
+ } else if (String.valueOf(Model.getValueAt(i, 2)).trim().equals(Res.string().getQRCode())) {
+ pIn.stuScreenShowInfo[i].emTextType = 2;
+ } else if (String.valueOf(Model.getValueAt(i, 2)).trim().equals(Res.string().getResource())) {
+ pIn.stuScreenShowInfo[i].emTextType = 3;
+ }
+
+ if (String.valueOf(Model.getValueAt(i, 3)).trim().equals(Res.string().getGreen())) {
+ pIn.stuScreenShowInfo[i].emTextColor = 0;
+ } else if (String.valueOf(Model.getValueAt(i, 3)).trim().equals(Res.string().getRed())) {
+ pIn.stuScreenShowInfo[i].emTextColor = 1;
+ } else if (String.valueOf(Model.getValueAt(i, 3)).trim().equals(Res.string().getYellow())) {
+ pIn.stuScreenShowInfo[i].emTextColor = 2;
+ } else if (String.valueOf(Model.getValueAt(i, 3)).trim().equals(Res.string().getWhite())) {
+ pIn.stuScreenShowInfo[i].emTextColor = 3;
+ }
+
+ if (String.valueOf(Model.getValueAt(i, 4)).trim().equals(Res.string().getNoRolling())) {
+ pIn.stuScreenShowInfo[i].emTextRollMode = 0;
+ } else if (String.valueOf(Model.getValueAt(i, 4)).trim()
+ .equals(Res.string().getScrollLeftAndRight())) {
+ pIn.stuScreenShowInfo[i].emTextRollMode = 1;
+ } else if (String.valueOf(Model.getValueAt(i, 4)).trim()
+ .equals(Res.string().getScrollTopAndDown())) {
+ pIn.stuScreenShowInfo[i].emTextRollMode = 2;
+ }
+ System.out.println(String.valueOf(Model.getValueAt(i, 5)).trim());
+ System.out.println(Res.string().getSpeed() + "1");
+ if (String.valueOf(Model.getValueAt(i, 5)).trim().equals(Res.string().getSpeed() + "1")) {
+ pIn.stuScreenShowInfo[i].nRollSpeed = 1;
+ } else if (String.valueOf(Model.getValueAt(i, 5)).trim().equals(Res.string().getSpeed() + "2")) {
+ pIn.stuScreenShowInfo[i].nRollSpeed = 2;
+ } else if (String.valueOf(Model.getValueAt(i, 5)).trim().equals(Res.string().getSpeed() + "3")) {
+ pIn.stuScreenShowInfo[i].nRollSpeed = 3;
+ } else if (String.valueOf(Model.getValueAt(i, 5)).trim().equals(Res.string().getSpeed() + "4")) {
+ pIn.stuScreenShowInfo[i].nRollSpeed = 4;
+ } else if (String.valueOf(Model.getValueAt(i, 5)).trim().equals(Res.string().getSpeed() + "5")) {
+ pIn.stuScreenShowInfo[i].nRollSpeed = 5;
+ }
+ // pIn.stuScreenShowInfo[i].nRollSpeed =
+ // Integer.parseInt(String.valueOf(Model.getValueAt(i, 5))) ;
+ }
+ pIn.nBroadcastInfoNum = VideoModel.getRowCount();
+ System.out.println(pIn.nBroadcastInfoNum);
+ for (int i = 0; i < pIn.nBroadcastInfoNum; i++) {
+ System.out.println(String.valueOf(VideoModel.getValueAt(i, 2)).trim());
+ try {
+ System.out.println(new String(pIn.stuBroadcastInfo[i].szText, "GBK").trim());
+ pIn.stuBroadcastInfo[i].szText = String.valueOf(VideoModel.getValueAt(i, 1)).getBytes("GBK");
+ } catch (UnsupportedEncodingException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ if (String.valueOf(VideoModel.getValueAt(i, 2)).trim().equals(Res.string().getOrdinary())) {
+ pIn.stuBroadcastInfo[i].emTextType = 0;
+ } else if (String.valueOf(VideoModel.getValueAt(i, 2)).trim()
+ .equals(Res.string().getPlateNumber())) {
+ pIn.stuBroadcastInfo[i].emTextType = 1;
+ } else if (String.valueOf(VideoModel.getValueAt(i, 2)).trim().equals(Res.string().getTime())) {
+ pIn.stuBroadcastInfo[i].emTextType = 2;
+ } else if (String.valueOf(VideoModel.getValueAt(i, 2)).trim()
+ .equals(Res.string().getNumericString())) {
+ pIn.stuBroadcastInfo[i].emTextType = 3;
+ }
+ }
+ if (pIn.nScreenShowInfoNum == 0 && pIn.nBroadcastInfoNum == 0) {
+ JOptionPane.showMessageDialog(panel1, Res.string().getPrompt());
+ } else {
+ if (controlDevice(pIn)) {
+ JOptionPane.showMessageDialog(panel1, Res.string().getSetUpSuccess());
+ } else {
+ JOptionPane.showMessageDialog(panel1, Res.string().getSetUpFailed());
+ }
+ }
+ }
+ });
+ btnNewButton_6.setBounds(652, 413, 93, 23);
+ panel_1.add(btnNewButton_6);
+
+ }
+
+ public JTable tableInit(Object[][] data, String[] columnName) {
+ JTable table;
+ DefaultTableModel model;
+ model = new DefaultTableModel(data, columnName);
+ table = new JTable(model) {
+ @Override // 不可编辑
+ public boolean isCellEditable(int row, int column) {
+ return false;
+ }
+ };
+ model = (DefaultTableModel) table.getModel();
+
+ table.setPreferredScrollableViewportSize(new Dimension(500, 500));
+ table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行
+
+ // 列表显示居中
+ DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer();
+ dCellRenderer.setHorizontalAlignment(JLabel.CENTER);
+ table.setDefaultRenderer(Object.class, dCellRenderer);
+ return table;
+ }
+
+ public Boolean controlDevice(NET_IN_SET_PARK_CONTROL_INFO pIn) {
+ for (int i = 0; i < 5; i++) {
+ System.out.println(pIn.stuScreenShowInfo[i].emTextType);
+ }
+
+ int emType = CtrlType.CTRL_SET_PARK_CONTROL_INFO;
+ // System.out.println(new String(pIn.stuScreenShowInfo[0].szText));
+ NET_OUT_SET_PARK_CONTROL_INFO pOut = new NET_OUT_SET_PARK_CONTROL_INFO();
+ pIn.write();
+ pOut.write();
+ Boolean ret = LoginModule.netsdk.CLIENT_ControlDeviceEx(LoginModule.m_hLoginHandle, emType, pIn.getPointer(),
+ pOut.getPointer(), 3000);
+ if (ret) {
+ System.out.println("CLIENT_ControlDeviceEx success");
+ } else {
+ System.out.println("CLIENT_ControlDeviceEx fail " + getErrorCode());
+ }
+ return ret;
+
+ }
+
+ public String getErrorCode() {
+ return " { error code: ( 0x80000000|" + (LoginModule.netsdk.CLIENT_GetLastError() & 0x7fffffff)
+ + " ). 参考 NetSDKLib.java }";
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/frame/FaceRecognition/PersonOperateDialog.java b/src/main/java/com/netsdk/demo/frame/FaceRecognition/PersonOperateDialog.java
new file mode 100644
index 0000000..ec8dd76
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/FaceRecognition/PersonOperateDialog.java
@@ -0,0 +1,856 @@
+package com.netsdk.demo.frame.FaceRecognition;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.HashMap;
+import java.util.concurrent.ExecutionException;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.ListSelectionModel;
+import javax.swing.SwingUtilities;
+import javax.swing.SwingWorker;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+
+import com.sun.jna.Memory;
+
+import com.netsdk.common.*;
+import com.netsdk.demo.module.FaceRecognitionModule;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.NetSDKLib.*;
+
+public class PersonOperateDialog extends JDialog{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ private String groupId = "";
+ private String groupName = "";
+
+ // 添加人员界面
+ public AddPersonDialog addPersonDialog = null;
+
+ // 修改人员界面
+ public ModifyPersonDialog modifyPersonDialog = null;
+
+ // 查询起始索引
+ private int nBeginNum = 0;
+
+ // 页数
+ private int nPagesNumber = 0;
+
+ // 查询人员总数
+ private int nTotalCount = 0;
+
+ private HashMap cadidateHashMap = new HashMap();
+
+ public PersonOperateDialog(String groupId, String groupName) {
+ setTitle(Res.string().getPersonOperate());
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(680, 520);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体
+
+ this.groupId = groupId;
+ this.groupName = groupName;
+
+ PersonInfoPanel personInfoPanel = new PersonInfoPanel();
+ PersonInfoListPanel personInfoListPanel = new PersonInfoListPanel();
+
+ add(personInfoPanel, BorderLayout.NORTH);
+ add(personInfoListPanel, BorderLayout.CENTER);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ nBeginNum = 0;
+ nPagesNumber = 0;
+ nTotalCount = 0;
+ cadidateHashMap.clear();
+
+ dispose();
+ }
+ });
+ }
+
+
+ /*
+ * 查找条件信息
+ */
+ private class SearchInfoPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+ public SearchInfoPanel() {
+ BorderEx.set(this, Res.string().getFindCondition(), 1);
+ setLayout(new FlowLayout());
+
+ JLabel goroupIdLabel = new JLabel(Res.string().getFaceGroupId(), JLabel.CENTER);
+ JLabel goroupNameLabel = new JLabel(Res.string().getFaceGroupName(), JLabel.CENTER);
+ JLabel nameLabel = new JLabel(Res.string().getName(), JLabel.CENTER);
+ JLabel sexLabel = new JLabel(Res.string().getSex(), JLabel.CENTER);
+ JLabel IdTypeLabel = new JLabel(Res.string().getIdType(), JLabel.CENTER);
+ JLabel IdLabel = new JLabel(Res.string().getIdNo(), JLabel.CENTER);
+ JLabel birthdayLabel = new JLabel(Res.string().getBirthday(), JLabel.CENTER);
+ JLabel lineLabel = new JLabel("-", JLabel.CENTER);
+ startBirthdayCheckBox = new JCheckBox();
+ endBirthdayCheckBox = new JCheckBox();
+ JLabel nullLabel = new JLabel();
+
+ Dimension dimension1 = new Dimension();
+ dimension1.height = 20;
+ dimension1.width = 80;
+ goroupIdLabel.setPreferredSize(dimension1);
+ goroupNameLabel.setPreferredSize(dimension1);
+ nameLabel.setPreferredSize(dimension1);
+ sexLabel.setPreferredSize(dimension1);
+ IdTypeLabel.setPreferredSize(dimension1);
+ IdLabel.setPreferredSize(dimension1);
+ birthdayLabel.setPreferredSize(dimension1);
+ lineLabel.setPreferredSize(new Dimension(50, 20));
+ nullLabel.setPreferredSize(new Dimension(180, 20));
+
+ goroupIdTextField = new JTextField();
+ goroupNameTextField = new JTextField();
+ nameTextField = new JTextField();
+ sexComboBox = new JComboBox(Res.string().getSexStringsFind());
+ idTypeComboBox = new JComboBox(Res.string().getIdStringsFind());
+ idTextField = new JTextField();
+
+ startTimeBtn = new DateChooserJButtonEx("2018-07-01");
+ endTimeBtn = new DateChooserJButtonEx();
+
+ startTimeBtn.setStartYear(1900);
+ endTimeBtn.setStartYear(1900);
+
+ Dimension dimension2 = new Dimension();
+ dimension2.height = 20;
+ goroupIdTextField.setPreferredSize(dimension2);
+ goroupNameTextField.setPreferredSize(dimension2);
+ nameTextField.setPreferredSize(dimension2);
+ idTextField.setPreferredSize(dimension2);
+
+ goroupIdTextField.setPreferredSize(new Dimension(120, 20));
+ goroupNameTextField.setPreferredSize(new Dimension(120, 20));
+ nameTextField.setPreferredSize(new Dimension(120, 20));
+ idTextField.setPreferredSize(new Dimension(120, 20));
+ sexComboBox.setPreferredSize(new Dimension(120, 20));
+ startTimeBtn.setPreferredSize(new Dimension(125, 20));
+ endTimeBtn.setPreferredSize(new Dimension(125, 20));
+ idTypeComboBox.setPreferredSize(new Dimension(120, 20));
+ startBirthdayCheckBox.setPreferredSize(new Dimension(20, 20));
+ endBirthdayCheckBox.setPreferredSize(new Dimension(20, 20));
+
+ add(goroupIdLabel);
+ add(goroupIdTextField);
+ add(goroupNameLabel);
+ add(goroupNameTextField);
+ add(nameLabel);
+ add(nameTextField);
+ add(sexLabel);
+ add(sexComboBox);
+ add(IdTypeLabel);
+ add(idTypeComboBox);
+ add(IdLabel);
+ add(idTextField);
+ add(birthdayLabel);
+ add(startTimeBtn);
+ add(startBirthdayCheckBox);
+ add(lineLabel);
+ add(endTimeBtn);
+ add(endBirthdayCheckBox);
+ add(nullLabel);
+
+ goroupIdTextField.setEditable(false);
+ goroupNameTextField.setEditable(false);
+ startBirthdayCheckBox.setSelected(false);
+ endBirthdayCheckBox.setSelected(false);
+ startTimeBtn.setEnabled(false);
+ endTimeBtn.setEnabled(false);
+ }
+ }
+ /*
+ * 人员信息以及操作面板
+ */
+ private class PersonInfoPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+ public PersonInfoPanel() {
+ BorderEx.set(this, "", 2);
+ setLayout(new BorderLayout());
+
+ Dimension dimension = new Dimension();
+ dimension.height = 150;
+ setPreferredSize(dimension);
+
+ SearchInfoPanel searchInfoPanel = new SearchInfoPanel();
+ JPanel operatePanel = new JPanel();
+
+ add(searchInfoPanel, BorderLayout.CENTER);
+ add(operatePanel, BorderLayout.SOUTH);
+
+ /*
+ * 操作
+ */
+ searchPersonBtn = new JButton(Res.string().getFindPerson());
+ JButton addPersonBtn = new JButton(Res.string().getAddPerson());
+ JButton modifyPersonBtn = new JButton(Res.string().getModifyPerson());
+ JButton deletePersonBtn = new JButton(Res.string().getDelPerson());
+
+ operatePanel.setLayout(new GridLayout(1, 4));
+
+ operatePanel.add(searchPersonBtn);
+ operatePanel.add(addPersonBtn);
+ operatePanel.add(modifyPersonBtn);
+ operatePanel.add(deletePersonBtn);
+
+ goroupIdTextField.setText(groupId);
+ goroupNameTextField.setText(groupName);
+
+ startBirthdayCheckBox.addChangeListener(new ChangeListener() {
+ @Override
+ public void stateChanged(ChangeEvent arg0) {
+ if(startBirthdayCheckBox.isSelected()) {
+ startTimeBtn.setEnabled(true);
+ } else {
+ startTimeBtn.setEnabled(false);
+ }
+ }
+ });
+
+ endBirthdayCheckBox.addChangeListener(new ChangeListener() {
+ @Override
+ public void stateChanged(ChangeEvent arg0) {
+ if(endBirthdayCheckBox.isSelected()) {
+ endTimeBtn.setEnabled(true);
+ } else {
+ endTimeBtn.setEnabled(false);
+ }
+ }
+ });
+
+ // 查找人员
+ searchPersonBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ searchPersonBtn.setEnabled(false);
+ }
+ });
+
+ new SwingWorker() {
+ @Override
+ protected CANDIDATE_INFOEX[] doInBackground() {
+ nTotalCount = 0;
+ nBeginNum = 0;
+ cleanList();
+ cadidateHashMap.clear();
+
+ nTotalCount = FaceRecognitionModule.startFindPerson(goroupIdTextField.getText(),
+ startBirthdayCheckBox.isSelected(), startTimeBtn.getText().toString(),
+ endBirthdayCheckBox.isSelected(), endTimeBtn.getText().toString(),
+ nameTextField.getText(), sexComboBox.getSelectedIndex(),
+ idTypeComboBox.getSelectedIndex(), idTextField.getText());
+
+ if(nTotalCount <= 0) {
+ searchPersonBtn.setEnabled(true);
+ previousPageBtn.setEnabled(false);
+ lastPageBtn.setEnabled(false);
+ numTextField.setText("");
+ return null;
+ }
+
+ CANDIDATE_INFOEX[] stuCandidatesEx = FaceRecognitionModule.doFindPerson(nBeginNum, 17);
+ return stuCandidatesEx;
+ }
+
+ @Override
+ protected void done() {
+ try {
+ CANDIDATE_INFOEX[] stuCandidatesEx = get();
+ findPersonInfo(stuCandidatesEx);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ e.printStackTrace();
+ }
+ }
+ }.execute();
+ }
+ });
+
+ // 添加人员
+ addPersonBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ addPersonDialog = new AddPersonDialog(groupId, groupName);
+
+ addPersonDialog.addWindowCloseListener(new WindowCloseListener() {
+ @Override
+ public void windowClosing() {
+ new SwingWorker() {
+ @Override
+ protected CANDIDATE_INFOEX[] doInBackground() {
+ nTotalCount = 0;
+ nBeginNum = 0;
+ cleanList();
+ cadidateHashMap.clear();
+
+ nTotalCount = FaceRecognitionModule.startFindPerson(goroupIdTextField.getText(),
+ startBirthdayCheckBox.isSelected(), startTimeBtn.getText().toString(),
+ endBirthdayCheckBox.isSelected(), endTimeBtn.getText().toString(),
+ nameTextField.getText(), sexComboBox.getSelectedIndex(),
+ idTypeComboBox.getSelectedIndex(), idTextField.getText());
+
+ if(nTotalCount <= 0) {
+ searchPersonBtn.setEnabled(true);
+ previousPageBtn.setEnabled(false);
+ lastPageBtn.setEnabled(false);
+ numTextField.setText("");
+ return null;
+ }
+
+ CANDIDATE_INFOEX[] stuCandidatesEx = FaceRecognitionModule.doFindPerson(nBeginNum, 17);
+ return stuCandidatesEx;
+ }
+
+ @Override
+ protected void done() {
+ try {
+ CANDIDATE_INFOEX[] stuCandidatesEx = get();
+ findPersonInfo(stuCandidatesEx);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ e.printStackTrace();
+ }
+ }
+ }.execute();
+ }
+ });
+
+ addPersonDialog.setVisible(true);
+ }
+ });
+
+ // 修改人员
+ modifyPersonBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ int row = -1;
+ row = table.getSelectedRow(); //获得所选的单行
+
+ if(row < 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectPerson(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(defaultTableModel.getValueAt(row, 0) == null || String.valueOf(defaultTableModel.getValueAt(row, 0)).trim().equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectPerson(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ // 人员信息
+ CANDIDATE_INFOEX stuCandidate = cadidateHashMap.get(String.valueOf(defaultTableModel.getValueAt(row, 0)).trim());
+
+ // URL地址
+ String szFilePath = stuCandidate.stPersonInfo.szFacePicInfo[0].pszFilePath.getString(0);
+
+ // 存放图片的本地路径
+ String pszFileDst = "./person.jpg";
+
+ // 下载图片, 下载到本地, 图片路径 "./person.jpg"
+ boolean bRet = FaceRecognitionModule.downloadPersonPic(szFilePath, pszFileDst);
+
+ Memory memory = null;
+ if(bRet) {
+ try {
+ memory = ToolKits.readPictureFile(pszFileDst);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ } else {
+ pszFileDst = "";
+ }
+
+ // 人员标识符
+ String uid = String.valueOf(defaultTableModel.getValueAt(row, 0)).trim();
+
+ modifyPersonDialog = new ModifyPersonDialog(groupId, groupName, uid, pszFileDst, memory, stuCandidate);
+
+ modifyPersonDialog.addWindowCloseListener(new WindowCloseListener() {
+ @Override
+ public void windowClosing() {
+ new SwingWorker() {
+ @Override
+ protected CANDIDATE_INFOEX[] doInBackground() {
+ nTotalCount = 0;
+ nBeginNum = 0;
+ cleanList();
+ cadidateHashMap.clear();
+
+ nTotalCount = FaceRecognitionModule.startFindPerson(goroupIdTextField.getText(),
+ startBirthdayCheckBox.isSelected(), startTimeBtn.getText().toString(),
+ endBirthdayCheckBox.isSelected(), endTimeBtn.getText().toString(),
+ nameTextField.getText(), sexComboBox.getSelectedIndex(),
+ idTypeComboBox.getSelectedIndex(), idTextField.getText());
+
+ if(nTotalCount <= 0) {
+ searchPersonBtn.setEnabled(true);
+ previousPageBtn.setEnabled(false);
+ lastPageBtn.setEnabled(false);
+ numTextField.setText("");
+ return null;
+ }
+
+ CANDIDATE_INFOEX[] stuCandidatesEx = FaceRecognitionModule.doFindPerson(nBeginNum, 17);
+ return stuCandidatesEx;
+ }
+
+ @Override
+ protected void done() {
+ try {
+ CANDIDATE_INFOEX[] stuCandidatesEx = get();
+ findPersonInfo(stuCandidatesEx);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ e.printStackTrace();
+ }
+ }
+ }.execute();
+ }
+ });
+
+ modifyPersonDialog.setVisible(true);
+ }
+ });
+
+ // 删除人员
+ deletePersonBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ int row = -1;
+ row = table.getSelectedRow(); //获得所选的单行
+
+ if(row < 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectPerson(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(defaultTableModel.getValueAt(row, 0) == null || String.valueOf(defaultTableModel.getValueAt(row, 0)).trim().equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectPerson(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(!FaceRecognitionModule.delPerson(goroupIdTextField.getText(), String.valueOf(defaultTableModel.getValueAt(row, 0)).trim())) {
+ JOptionPane.showMessageDialog(null, Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ }
+
+ new SwingWorker() {
+ @Override
+ protected CANDIDATE_INFOEX[] doInBackground() {
+ nTotalCount = 0;
+ nBeginNum = 0;
+ cleanList();
+ cadidateHashMap.clear();
+
+ nTotalCount = FaceRecognitionModule.startFindPerson(goroupIdTextField.getText(),
+ startBirthdayCheckBox.isSelected(), startTimeBtn.getText().toString(),
+ endBirthdayCheckBox.isSelected(), endTimeBtn.getText().toString(),
+ nameTextField.getText(), sexComboBox.getSelectedIndex(),
+ idTypeComboBox.getSelectedIndex(), idTextField.getText());
+
+ if(nTotalCount <= 0) {
+ searchPersonBtn.setEnabled(true);
+ previousPageBtn.setEnabled(false);
+ lastPageBtn.setEnabled(false);
+ numTextField.setText("");
+ return null;
+ }
+
+ CANDIDATE_INFOEX[] stuCandidatesEx = FaceRecognitionModule.doFindPerson(nBeginNum, 17);
+ return stuCandidatesEx;
+ }
+
+ @Override
+ protected void done() {
+
+ try {
+ CANDIDATE_INFOEX[] stuCandidatesEx = get();
+ findPersonInfo(stuCandidatesEx);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ e.printStackTrace();
+ }
+ }
+ }.execute();
+ }
+ });
+ }
+ }
+
+ /*
+ * 人员信息显示列表
+ */
+ private class PersonInfoListPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+ public PersonInfoListPanel() {
+ BorderEx.set(this, "", 2);
+ setLayout(new BorderLayout());
+
+ data = new Object[17][6];
+ defaultTableModel = new DefaultTableModel(data, Res.string().getPersonTable());
+ table = new JTable(defaultTableModel) { // 列表不可编辑
+ private static final long serialVersionUID = 1L;
+ @Override
+ public boolean isCellEditable(int row, int column) {
+ return false;
+ }
+ };
+
+ table.getColumnModel().getColumn(0).setPreferredWidth(120);
+ table.getColumnModel().getColumn(1).setPreferredWidth(150);
+ table.getColumnModel().getColumn(2).setPreferredWidth(100);
+ table.getColumnModel().getColumn(3).setPreferredWidth(200);
+ table.getColumnModel().getColumn(4).setPreferredWidth(150);
+ table.getColumnModel().getColumn(5).setPreferredWidth(250);
+
+ table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行
+
+ DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer();
+ dCellRenderer.setHorizontalAlignment(JLabel.CENTER);
+ table.setDefaultRenderer(Object.class, dCellRenderer);
+
+ JPanel panel = new JPanel();
+ previousPageBtn = new JButton(Res.string().getPreviousPage());
+ lastPageBtn = new JButton(Res.string().getLastPage());
+ JLabel numLabel = new JLabel(Res.string().getPagesNumber(), JLabel.CENTER);
+ numTextField = new JTextField();
+
+ numTextField.setHorizontalAlignment(JTextField.CENTER);
+ numTextField.setPreferredSize(new Dimension(80, 20));
+
+ Dimension dimension = new Dimension();
+ dimension.height = 25;
+ panel.setPreferredSize(dimension);
+
+ numLabel.setPreferredSize(new Dimension(80, 20));
+ numTextField.setPreferredSize(new Dimension(120, 20));
+ previousPageBtn.setPreferredSize(new Dimension(120, 20));
+ lastPageBtn.setPreferredSize(new Dimension(120, 20));
+
+ panel.setLayout(new FlowLayout());
+ panel.add(previousPageBtn);
+ panel.add(numLabel);
+ panel.add(numTextField);
+ panel.add(lastPageBtn);
+
+ previousPageBtn.setEnabled(false);
+ lastPageBtn.setEnabled(false);
+ numTextField.setEnabled(false);
+
+ add(new JScrollPane(table), BorderLayout.CENTER);
+ add(panel, BorderLayout.SOUTH);
+
+ // 前一页
+ previousPageBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ previousPageBtn.setEnabled(false);
+ }
+ });
+
+ new SwingWorker() {
+ @Override
+ protected CANDIDATE_INFOEX[] doInBackground() {
+ nBeginNum -= 17;
+
+ CANDIDATE_INFOEX[] stuCandidatesEx = FaceRecognitionModule.doFindPerson(nBeginNum, 17);
+ return stuCandidatesEx;
+ }
+
+ @Override
+ protected void done() {
+
+ try {
+ CANDIDATE_INFOEX[] stuCandidatesEx = get();
+ findPreviousPage(stuCandidatesEx);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ e.printStackTrace();
+ }
+ }
+ }.execute();
+ }
+ });
+
+ // 下一页
+ lastPageBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ lastPageBtn.setEnabled(false);
+ }
+ });
+
+ new SwingWorker() {
+ @Override
+ protected CANDIDATE_INFOEX[] doInBackground() {
+ nBeginNum += 17;
+
+ CANDIDATE_INFOEX[] stuCandidatesEx = FaceRecognitionModule.doFindPerson(nBeginNum, 17);
+ return stuCandidatesEx;
+ }
+
+ @Override
+ protected void done() {
+
+ try {
+ CANDIDATE_INFOEX[] stuCandidatesEx = get();
+ findLastPage(stuCandidatesEx);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ e.printStackTrace();
+ }
+ }
+ }.execute();
+ }
+ });
+ }
+ }
+
+
+
+ /*
+ * 查找前17个
+ */
+ public void findPersonInfo(CANDIDATE_INFOEX[] stuCandidatesEx) {
+ if(stuCandidatesEx != null) {
+ searchPersonBtn.setEnabled(true);
+ previousPageBtn.setEnabled(false);
+ nPagesNumber = 1;
+ numTextField.setText(String.valueOf(nPagesNumber));
+
+ for(int i = 0; i < stuCandidatesEx.length; i++) {
+ if(!cadidateHashMap.containsKey(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim())) {
+ cadidateHashMap.put(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim(), stuCandidatesEx[i]);
+ }
+
+ // UID
+ defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim(), i, 0);
+
+ // 姓名
+ try {
+ defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szPersonName, "GBK").trim(), i, 1);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ // 性别
+ defaultTableModel.setValueAt(Res.string().getSex(stuCandidatesEx[i].stPersonInfo.bySex & 0xff), i, 2);
+
+ // 生日
+ defaultTableModel.setValueAt(String.valueOf((int)stuCandidatesEx[i].stPersonInfo.wYear) + "-" +
+ String.valueOf( stuCandidatesEx[i].stPersonInfo.byMonth & 0xff) + "-" +
+ String.valueOf(stuCandidatesEx[i].stPersonInfo.byDay & 0xff), i, 3);
+
+ // 证件类型
+ defaultTableModel.setValueAt(Res.string().getIdType(stuCandidatesEx[i].stPersonInfo.byIDType & 0xff), i, 4);
+
+ // 证件号
+ try {
+ defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szID, "GBK").trim(), i, 5);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ }
+
+ if(nTotalCount > nBeginNum + stuCandidatesEx.length) {
+ lastPageBtn.setEnabled(true);
+ }
+ } else {
+ searchPersonBtn.setEnabled(true);
+ previousPageBtn.setEnabled(false);
+ lastPageBtn.setEnabled(false);
+ numTextField.setText("");
+ }
+ }
+
+ /*
+ * 上一页查找
+ */
+ private void findPreviousPage(CANDIDATE_INFOEX[] stuCandidatesEx) {
+ if(stuCandidatesEx != null) {
+ nPagesNumber -= 1;
+ numTextField.setText(String.valueOf(nPagesNumber));
+ cadidateHashMap.clear();
+ cleanList();
+ lastPageBtn.setEnabled(true);
+
+ for(int i = 0; i < stuCandidatesEx.length; i++) {
+ if(!cadidateHashMap.containsKey(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim())) {
+ cadidateHashMap.put(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim(), stuCandidatesEx[i]);
+ }
+
+ // UID
+ defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim(), i, 0);
+
+ // 姓名
+ try {
+ defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szPersonName, "GBK").trim(), i, 1);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ // 性别
+ defaultTableModel.setValueAt(Res.string().getSex(stuCandidatesEx[i].stPersonInfo.bySex & 0xff), i, 2);
+
+ // 生日
+ defaultTableModel.setValueAt(String.valueOf((int)stuCandidatesEx[i].stPersonInfo.wYear) + "-" +
+ String.valueOf( stuCandidatesEx[i].stPersonInfo.byMonth & 0xff) + "-" +
+ String.valueOf(stuCandidatesEx[i].stPersonInfo.byDay & 0xff), i, 3);
+
+ // 证件类型
+ defaultTableModel.setValueAt(Res.string().getIdType(stuCandidatesEx[i].stPersonInfo.byIDType & 0xff), i, 4);
+
+ // 证件号
+ try {
+ defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szID, "GBK").trim(), i, 5);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ }
+
+ if(nBeginNum >= 17) {
+ previousPageBtn.setEnabled(true);
+ } else {
+ previousPageBtn.setEnabled(false);
+ }
+ } else{
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ previousPageBtn.setEnabled(true);
+ nBeginNum += 17;
+ }
+ }
+
+ /*
+ * 下一页查找
+ */
+ private void findLastPage(CANDIDATE_INFOEX[] stuCandidatesEx) {
+ if(stuCandidatesEx != null) {
+ nPagesNumber += 1;
+ numTextField.setText(String.valueOf(nPagesNumber));
+ cadidateHashMap.clear();
+ cleanList();
+ previousPageBtn.setEnabled(true);
+
+ for(int i = 0; i < stuCandidatesEx.length; i++) {
+ if(!cadidateHashMap.containsKey(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim())) {
+ cadidateHashMap.put(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim(), stuCandidatesEx[i]);
+ }
+
+ // UID
+ defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szUID).trim(), i, 0);
+
+ // 姓名
+ try {
+ defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szPersonName, "GBK").trim(), i, 1);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ // 性别
+ defaultTableModel.setValueAt(Res.string().getSex(stuCandidatesEx[i].stPersonInfo.bySex & 0xff), i, 2);
+
+ // 生日
+ defaultTableModel.setValueAt(String.valueOf((int)stuCandidatesEx[i].stPersonInfo.wYear) + "-" +
+ String.valueOf( stuCandidatesEx[i].stPersonInfo.byMonth & 0xff) + "-" +
+ String.valueOf(stuCandidatesEx[i].stPersonInfo.byDay & 0xff), i, 3);
+
+ // 证件类型
+ defaultTableModel.setValueAt(Res.string().getIdType(stuCandidatesEx[i].stPersonInfo.byIDType & 0xff), i, 4);
+
+ // 证件号
+ try {
+ defaultTableModel.setValueAt(new String(stuCandidatesEx[i].stPersonInfo.szID, "GBK").trim(), i, 5);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ }
+
+ if(nTotalCount > nBeginNum + stuCandidatesEx.length) {
+ lastPageBtn.setEnabled(true);
+ } else {
+ lastPageBtn.setEnabled(false);
+ }
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ lastPageBtn.setEnabled(true);
+ nBeginNum -= 17;
+ }
+ }
+
+ /*
+ * 清空列表
+ */
+ private void cleanList() {
+ for(int i = 0; i < 17; i++) {
+ for(int j = 0; j < 6; j++) {
+ defaultTableModel.setValueAt("", i, j);
+ }
+ }
+ }
+
+ private Object[][] data;
+ private DefaultTableModel defaultTableModel;
+ private JTable table;
+
+ private JButton previousPageBtn;
+ private JButton lastPageBtn;
+ private JTextField goroupIdTextField;
+ private JTextField goroupNameTextField;
+ private JTextField nameTextField;
+ private JComboBox sexComboBox;
+ private JComboBox idTypeComboBox;
+ private JTextField idTextField;
+ private JCheckBox startBirthdayCheckBox;
+ private JCheckBox endBirthdayCheckBox;
+ private DateChooserJButtonEx startTimeBtn;
+ private DateChooserJButtonEx endTimeBtn;
+ private JTextField numTextField;
+ private JButton searchPersonBtn;
+
+}
diff --git a/src/main/java/com/netsdk/demo/frame/FaceRecognition/SearchByPicDialog.java b/src/main/java/com/netsdk/demo/frame/FaceRecognition/SearchByPicDialog.java
new file mode 100644
index 0000000..b590e98
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/FaceRecognition/SearchByPicDialog.java
@@ -0,0 +1,596 @@
+package com.netsdk.demo.frame.FaceRecognition;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.Vector;
+import java.util.concurrent.ExecutionException;
+
+
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+import javax.swing.SwingWorker;
+
+import com.sun.jna.Memory;
+import com.sun.jna.Pointer;
+
+import com.netsdk.common.DateChooserJButtonEx;
+import com.netsdk.common.PaintPanel;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.demo.module.SearchByPictureModule;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.NetSDKLib.*;
+
+public class SearchByPicDialog extends JDialog {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ private Vector chnList = new Vector();
+ private Memory memory = null;
+ private static volatile int nProgress = 0; // 设备处理进度
+ private static volatile int nCount = 0;
+
+ public SearchByPicDialog() {
+ setTitle(Res.string().getSearchByPic());
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(780, 550);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体
+
+ JPanel panel = new JPanel();
+ progressBar = new JProgressBar(0, 100);
+ Dimension dimension = new Dimension();
+ dimension.height = 18;
+ progressBar.setPreferredSize(dimension);
+ progressBar.setStringPainted(true);
+
+ add(panel, BorderLayout.CENTER);
+ add(progressBar, BorderLayout.SOUTH);
+
+ ////////
+ panel.setLayout(new BorderLayout());
+ SearchPicConditionPanel searchPicConditionPanel = new SearchPicConditionPanel();
+ searchPicInfoTextArea = new JTextArea();
+
+ Dimension dimension1 = new Dimension();
+ dimension1.width = 220;
+ searchPicConditionPanel.setPreferredSize(dimension1);
+
+ panel.add(searchPicConditionPanel, BorderLayout.WEST);
+ panel.add(new JScrollPane(searchPicInfoTextArea), BorderLayout.CENTER);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ dispose();
+ }
+ });
+ }
+
+ private class SearchPicConditionPanel extends JPanel {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public SearchPicConditionPanel() {
+ setLayout(new BorderLayout());
+
+ JPanel panelNorth = new JPanel();
+ JPanel panelSouth = new JPanel();
+
+ add(panelNorth, BorderLayout.NORTH);
+ add(panelSouth, BorderLayout.SOUTH);
+
+ ////////
+ searchPicPanel = new PaintPanel();
+ JButton selectPicBtn = new JButton(Res.string().getSelectPicture());
+ JButton downloadBtn = new JButton(Res.string().getDownloadQueryPicture());
+
+ searchPicPanel.setPreferredSize(new Dimension(210, 270));
+ selectPicBtn.setPreferredSize(new Dimension(210, 20));
+ downloadBtn.setPreferredSize(new Dimension(210, 20));
+
+ panelNorth.setLayout(new FlowLayout());
+ panelNorth.setPreferredSize(new Dimension(210, 330));
+ panelNorth.add(searchPicPanel);
+ panelNorth.add(selectPicBtn);
+ panelNorth.add(downloadBtn);
+
+ /////
+ faceCheckBox = new JCheckBox(Res.string().getFaceLibrary());
+ historyCheckBox = new JCheckBox(Res.string().getHistoryLibrary());
+ faceCheckBox.setPreferredSize(new Dimension(100, 20));
+ historyCheckBox.setPreferredSize(new Dimension(100, 20));
+
+ startTimeLabel = new JLabel(Res.string().getStartTime(), JLabel.CENTER);
+ endTimeLabel = new JLabel(Res.string().getEndTime(), JLabel.CENTER);
+ chnLabel = new JLabel(Res.string().getChannel(), JLabel.CENTER);
+ JLabel similaryLabel = new JLabel(Res.string().getSimilarity(), JLabel.CENTER);
+
+ Dimension dimension1 = new Dimension();
+ dimension1.width = 80;
+ dimension1.height = 20;
+
+ startTimeLabel.setPreferredSize(dimension1);
+ endTimeLabel.setPreferredSize(dimension1);
+ chnLabel.setPreferredSize(dimension1);
+ similaryLabel.setPreferredSize(dimension1);
+
+ startTimeBtn = new DateChooserJButtonEx("2018-11-07");
+ endTimeBtn = new DateChooserJButtonEx();
+
+ chnComboBox = new JComboBox();
+ for(int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) {
+ chnList.add(Res.string().getChannel() + " " + String.valueOf(i));
+ }
+
+ // 登陆成功,将通道添加到控件
+ chnComboBox.setModel(new DefaultComboBoxModel(chnList));
+
+ similaryTextField = new JTextField("60", JTextField.CENTER);
+
+ Dimension dimension2 = new Dimension();
+ dimension2.width = 120;
+ dimension2.height = 20;
+
+ startTimeBtn.setPreferredSize(dimension2);
+ endTimeBtn.setPreferredSize(dimension2);
+ chnComboBox.setPreferredSize(dimension2);
+ similaryTextField.setPreferredSize(dimension2);
+
+ searchPicBtn = new JButton(Res.string().getSearch());
+ searchPicBtn.setPreferredSize(new Dimension(210, 20));
+
+ panelSouth.setLayout(new FlowLayout());
+ panelSouth.setPreferredSize(new Dimension(210, 160));
+ panelSouth.add(faceCheckBox);
+ panelSouth.add(historyCheckBox);
+ panelSouth.add(startTimeLabel);
+ panelSouth.add(startTimeBtn);
+ panelSouth.add(endTimeLabel);
+ panelSouth.add(endTimeBtn);
+ panelSouth.add(chnLabel);
+ panelSouth.add(chnComboBox);
+ panelSouth.add(similaryLabel);
+ panelSouth.add(similaryTextField);
+ panelSouth.add(searchPicBtn);
+
+ historyCheckBox.setSelected(true);
+ faceCheckBox.setSelected(false);
+
+ // 选择图片,获取图片的信息
+ selectPicBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ String picPath = "";
+
+ // 选择图片,获取图片路径,并在界面显示
+ picPath = ToolKits.openPictureFile(searchPicPanel);
+
+ if(!picPath.equals("")) {
+ try {
+ memory = ToolKits.readPictureFile(picPath);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ }
+ });
+
+ downloadBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ DownloadPictureDialog dialog = new DownloadPictureDialog();
+ dialog.setVisible(true);
+ }
+ });
+
+ searchPicBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ searchPicBtn.setEnabled(false);
+ progressBar.setValue(0);
+ searchPicInfoTextArea.setText("");
+ }
+ });
+
+ searchByPicture();
+ }
+ });
+
+ faceCheckBox.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ if(faceCheckBox.isSelected()) {
+ historyCheckBox.setSelected(false);
+ chnLabel.setVisible(false);
+ chnComboBox.setVisible(false);
+ startTimeLabel.setVisible(false);
+ endTimeLabel.setVisible(false);
+ startTimeBtn.setVisible(false);
+ endTimeBtn.setVisible(false);
+ } else {
+ historyCheckBox.setSelected(true);
+ chnLabel.setVisible(true);
+ chnComboBox.setVisible(true);
+ startTimeLabel.setVisible(true);
+ endTimeLabel.setVisible(true);
+ startTimeBtn.setVisible(true);
+ endTimeBtn.setVisible(true);
+ }
+ }
+ });
+
+ historyCheckBox.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ if(historyCheckBox.isSelected()) {
+ faceCheckBox.setSelected(false);
+ chnLabel.setVisible(true);
+ chnComboBox.setVisible(true);
+ startTimeLabel.setVisible(true);
+ endTimeLabel.setVisible(true);
+ startTimeBtn.setVisible(true);
+ endTimeBtn.setVisible(true);
+ } else {
+ faceCheckBox.setSelected(true);
+ chnLabel.setVisible(false);
+ chnComboBox.setVisible(false);
+ startTimeLabel.setVisible(false);
+ endTimeLabel.setVisible(false);
+ startTimeBtn.setVisible(false);
+ endTimeBtn.setVisible(false);
+ }
+ }
+ });
+ }
+ }
+
+ private void searchByPicture() {
+ new SwingWorker() {
+ int nTotalCount = 0; // 查询到的总个数
+
+ @Override
+ protected Boolean doInBackground() {
+ int beginNum = 0; // 偏移量
+ int nCount = 0; // 循环查询了几次
+ int index = 0; // index + 1 为查询到的总个数
+ int nFindCount = 10; // 每次查询的个数
+
+ StringBuffer message = null;
+
+ if(memory == null) {
+ JOptionPane.showMessageDialog(null, Res.string().getChooseFacePic(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+
+ // 获取查询句柄
+ nTotalCount = SearchByPictureModule.startFindPerson(memory,
+ startTimeBtn.getText(),
+ endTimeBtn.getText(),
+ historyCheckBox.isSelected(),
+ chnComboBox.getSelectedIndex(),
+ similaryTextField.getText());
+ if(nTotalCount == 0) { // 查询失败
+ // 查询失败,关闭查询
+ SearchByPictureModule.doFindClosePerson();
+ return false;
+ } else if(nTotalCount == -1) { // 设备正在处理,通过订阅来查询处理进度
+ nProgress = 0;
+ nCount = 0;
+ SearchByPictureModule.attachFaceFindState(fFaceFindStateCb.getInstance());
+ } else {
+ while(true) {
+ CANDIDATE_INFOEX[] caInfoexs = SearchByPictureModule.doFindNextPerson(beginNum, nFindCount);
+ if(caInfoexs == null) {
+ break;
+ }
+
+ for(int i = 0; i < caInfoexs.length; i++) {
+ index = i + nFindCount * nCount + 1;
+
+ // 清空
+ message = new StringBuffer();
+
+ if(historyCheckBox.isSelected()) { // 历史库显示
+ message.append("[" + index + "]"+Res.string().getTime()+":" + caInfoexs[i].stTime.toStringTimeEx() + "\n");
+
+ message.append("[" + index + "]"+Res.string().getUid()+":" + new String(caInfoexs[i].stPersonInfo.szUID).trim() + "\n");
+ message.append("[" + index + "]"+Res.string().getSex()+":" + Res.string().getSex(caInfoexs[i].stPersonInfo.bySex) + "\n");
+ message.append("[" + index + "]"+Res.string().getAge()+":" + caInfoexs[i].stPersonInfo.byAge + "\n");
+ message.append("[" + index + "]"+Res.string().getColor()+":" + Res.string().getColor(0) + "\n");
+ message.append("[" + index + "]"+Res.string().getEye()+":" + Res.string().getEyeState(caInfoexs[i].stPersonInfo.emEye) + "\n");
+ message.append("[" + index + "]"+Res.string().getMouth()+":" + Res.string().getMouthState(caInfoexs[i].stPersonInfo.emMouth) + "\n");
+ message.append("[" + index + "]"+Res.string().getMask()+":" + Res.string().getMaskState(caInfoexs[i].stPersonInfo.emMask) + "\n");
+ message.append("[" + index + "]"+Res.string().getBeard()+":" + Res.string().getBeardState(caInfoexs[i].stPersonInfo.emBeard) + "\n");
+ message.append("[" + index + "]"+Res.string().getGlasses()+":" + Res.string().getGlasses(caInfoexs[i].stPersonInfo.byGlasses) + "\n");
+ message.append("[" + index + "]"+Res.string().getSimilarity()+":" + caInfoexs[i].bySimilarity + "\n");
+ message.append("[" + index + "]"+Res.string().getPicturePath()+":" + caInfoexs[i].stPersonInfo.szFacePicInfo[0].pszFilePath.getString(0) + "\n");
+
+ } else { // 人脸库显示
+ message.append("[" + index + "]"+Res.string().getFaceLibraryID()+":" + new String(caInfoexs[i].stPersonInfo.szGroupID).trim() + "\n");
+ try {
+ message.append("[" + index + "]"+Res.string().getFaceLibraryName()+":" + new String(caInfoexs[i].stPersonInfo.szGroupName, "GBK").trim() + "\n");
+ message.append("[" + index + "]"+Res.string().getName()+":" + new String(caInfoexs[i].stPersonInfo.szPersonName, "GBK").trim() + "\n");
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ message.append("[" + index + "]"+Res.string().getUid()+":" + new String(caInfoexs[i].stPersonInfo.szUID).trim() + "\n");
+ message.append("[" + index + "]"+Res.string().getBirthday()+":" + (caInfoexs[i].stPersonInfo.wYear) + "-" +
+ (0xff & caInfoexs[i].stPersonInfo.byMonth) + "-" +
+ (0xff & caInfoexs[i].stPersonInfo.byDay) + "\n");
+ message.append("[" + index + "]"+Res.string().getSex()+":" + Res.string().getSex(caInfoexs[i].stPersonInfo.bySex) + "\n");
+ message.append("[" + index + "]"+Res.string().getCardType()+":" + Res.string().getIdType(caInfoexs[i].stPersonInfo.byIDType) + "\n");
+ message.append("[" + index + "]"+Res.string().getCardNum()+":" + new String(caInfoexs[i].stPersonInfo.szID).trim() + "\n");
+ message.append("[" + index + "]"+Res.string().getSimilarity()+":" + caInfoexs[i].bySimilarity + "\n");
+ message.append("[" + index + "]"+Res.string().getPicturePath()+":" + caInfoexs[i].stPersonInfo.szFacePicInfo[0].pszFilePath.getString(0) + "\n");
+ }
+
+ message.append("\n");
+ publish(message);
+ }
+
+ if(caInfoexs.length < nFindCount) {
+ System.out.printf("No More Record, Find End!\n");
+ break;
+ } else {
+ beginNum += nFindCount;
+ nCount++;
+ }
+ }
+
+ // 关闭查询
+ SearchByPictureModule.doFindClosePerson();
+ }
+
+ return true;
+ }
+
+ @Override
+ protected void process(java.util.List chunks) {
+ for(StringBuffer data : chunks) {
+ searchPicInfoTextArea.append(data.toString());
+ searchPicInfoTextArea.updateUI();
+ }
+
+ super.process(chunks);
+ }
+
+ @Override
+ protected void done() {
+ if(nTotalCount == 0) { // 查询总个数失败
+ searchPicBtn.setEnabled(true);
+ progressBar.setValue(100);
+ searchPicInfoTextArea.append("未查询到相关信息... \n");
+ searchPicInfoTextArea.updateUI();
+ } else if(nTotalCount == -1){ // 设备在处理中
+ searchPicInfoTextArea.append(Res.string().getLoading()+"... \n");
+ searchPicInfoTextArea.updateUI();
+ } else {
+ try {
+ if(get()) { // 其他情况,查询信息结束
+ searchPicBtn.setEnabled(true);
+ progressBar.setValue(100);
+ searchPicInfoTextArea.append("查询结束... \n");
+ searchPicInfoTextArea.updateUI();
+ }
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }.execute();
+ }
+
+ /**
+ * 订阅人脸回调函数
+ */
+ private static class fFaceFindStateCb implements NetSDKLib.fFaceFindState {
+ private fFaceFindStateCb() {}
+
+ private static class fFaceFindStateCbHolder {
+ private static final fFaceFindStateCb instance = new fFaceFindStateCb();
+ }
+
+ public static fFaceFindStateCb getInstance() {
+ return fFaceFindStateCbHolder.instance;
+ }
+
+ @Override
+ public void invoke(LLong lLoginID, LLong lAttachHandle,
+ Pointer pstStates, int nStateNum, Pointer dwUser) {
+ if(nStateNum < 1) {
+ return;
+ }
+ NET_CB_FACE_FIND_STATE[] msg = new NET_CB_FACE_FIND_STATE[nStateNum];
+ for(int i = 0; i < nStateNum; i++) {
+ msg[i] = new NET_CB_FACE_FIND_STATE();
+ }
+ ToolKits.GetPointerDataToStructArr(pstStates, msg);
+
+ for(int i = 0; i < nStateNum; i++) {
+ if(SearchByPictureModule.nToken == msg[i].nToken) {
+ nProgress = msg[i].nProgress;
+ nCount = msg[i].nCurrentCount; // 返回的总个数
+
+ // 刷新设备处理进度
+ // UI线程
+ EventQueue.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ progressBar.setValue(nProgress);
+
+ if(nProgress == 100) { // 进度等于100,设备处理完毕,开始查询
+ // 异步线程处理
+ new SearchPictureWoker(nCount).execute();
+ }
+ }
+ });
+ }
+ }
+ }
+ }
+
+ /**
+ * 用于订阅人脸状态后的查询
+ * 以图搜图与查询人员信息的接口是一样的,只是逻辑不一样,doFindNextPerson接口时,都是指定每次查询的个数,最大20,然后根据偏移量循环查询
+ * SwingWorker为异步线程,回调属于子线程,不能做耗时操作和刷新UI
+ */
+ private static class SearchPictureWoker extends SwingWorker {
+ private int nTotalCount; // 查询到的总个数
+ public SearchPictureWoker(int nTotalCount) {
+ this.nTotalCount = nTotalCount;
+ }
+
+ @Override
+ protected Boolean doInBackground() {
+ int beginNum = 0; // 偏移量
+ int nCount = 0; // 循环查询了几次
+ int index = 0; // index + 1 为查询到的总个数
+ int nFindCount = 10; // 每次查询的个数
+
+ StringBuffer message = null;
+
+ // 进度达到100%,关闭订阅
+ SearchByPictureModule.detachFaceFindState();
+ System.out.println("nTotalCount = " + nTotalCount);
+ if(nTotalCount == 0) {
+ // 关闭查询
+ SearchByPictureModule.doFindClosePerson();
+ return false;
+ }
+
+ while(true) {
+ CANDIDATE_INFOEX[] caInfoexs = SearchByPictureModule.doFindNextPerson(beginNum, nFindCount);
+ if(caInfoexs == null) {
+ break;
+ }
+
+ for(int i = 0; i < caInfoexs.length; i++) {
+ index = i + nFindCount * nCount + 1;
+
+ // 清空
+ message = new StringBuffer();
+
+ if(historyCheckBox.isSelected()) { // 历史库显示
+ message.append("[" + index + "]"+Res.string().getTime()+":" + caInfoexs[i].stTime.toStringTimeEx() + "\n");
+
+ message.append("[" + index + "]"+Res.string().getUid()+":" + new String(caInfoexs[i].stPersonInfo.szUID).trim() + "\n");
+ message.append("[" + index + "]"+Res.string().getSex()+":" + Res.string().getSex(caInfoexs[i].stPersonInfo.bySex) + "\n");
+ message.append("[" + index + "]"+Res.string().getAge()+":" + caInfoexs[i].stPersonInfo.byAge + "\n");
+ message.append("[" + index + "]"+Res.string().getColor()+":" + Res.string().getColor(0) + "\n");
+ message.append("[" + index + "]"+Res.string().getEye()+":" + Res.string().getEyeState(caInfoexs[i].stPersonInfo.emEye) + "\n");
+ message.append("[" + index + "]"+Res.string().getMouth()+":" + Res.string().getMouthState(caInfoexs[i].stPersonInfo.emMouth) + "\n");
+ message.append("[" + index + "]"+Res.string().getMask()+":" + Res.string().getMaskState(caInfoexs[i].stPersonInfo.emMask) + "\n");
+ message.append("[" + index + "]"+Res.string().getBeard()+":" + Res.string().getBeardState(caInfoexs[i].stPersonInfo.emBeard) + "\n");
+ message.append("[" + index + "]"+Res.string().getGlasses()+":" + Res.string().getGlasses(caInfoexs[i].stPersonInfo.byGlasses) + "\n");
+ message.append("[" + index + "]"+Res.string().getSimilarity()+":" + caInfoexs[i].bySimilarity + "\n");
+ message.append("[" + index + "]"+Res.string().getPicturePath()+":" + caInfoexs[i].stPersonInfo.szFacePicInfo[0].pszFilePath.getString(0) + "\n");
+
+ } else { // 人脸库显示
+ message.append("[" + index + "]"+Res.string().getFaceLibraryID()+":" + new String(caInfoexs[i].stPersonInfo.szGroupID).trim() + "\n");
+ try {
+ message.append("[" + index + "]"+Res.string().getFaceLibraryName()+":" + new String(caInfoexs[i].stPersonInfo.szGroupName, "GBK").trim() + "\n");
+ message.append("[" + index + "]"+Res.string().getName()+":" + new String(caInfoexs[i].stPersonInfo.szPersonName, "GBK").trim() + "\n");
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ message.append("[" + index + "]"+Res.string().getUid()+":" + new String(caInfoexs[i].stPersonInfo.szUID).trim() + "\n");
+ message.append("[" + index + "]"+Res.string().getBirthday()+":" + (caInfoexs[i].stPersonInfo.wYear) + "-" +
+ (0xff & caInfoexs[i].stPersonInfo.byMonth) + "-" +
+ (0xff & caInfoexs[i].stPersonInfo.byDay) + "\n");
+ message.append("[" + index + "]"+Res.string().getSex()+":" + Res.string().getSex(caInfoexs[i].stPersonInfo.bySex) + "\n");
+ message.append("[" + index + "]"+Res.string().getCardType()+":" + Res.string().getIdType(caInfoexs[i].stPersonInfo.byIDType) + "\n");
+ message.append("[" + index + "]"+Res.string().getCardNum()+":" + new String(caInfoexs[i].stPersonInfo.szID).trim() + "\n");
+ message.append("[" + index + "]"+Res.string().getSimilarity()+":" + caInfoexs[i].bySimilarity + "\n");
+ message.append("[" + index + "]"+Res.string().getPicturePath()+":" + caInfoexs[i].stPersonInfo.szFacePicInfo[0].pszFilePath.getString(0) + "\n");
+ }
+
+ message.append("\n");
+ publish(message);
+ }
+
+ if(caInfoexs.length < nFindCount) {
+ System.out.printf("No More Record, Find End!\n");
+ break;
+ } else {
+ beginNum += nFindCount;
+ nCount++;
+ }
+ }
+
+ // 关闭查询
+ SearchByPictureModule.doFindClosePerson();
+
+ return true;
+ }
+
+ @Override
+ protected void process(java.util.List chunks) {
+ for(StringBuffer data : chunks) {
+ searchPicInfoTextArea.append(data.toString());
+ searchPicInfoTextArea.updateUI();
+ }
+
+ super.process(chunks);
+ }
+
+ @Override
+ protected void done() {
+ searchPicBtn.setEnabled(true);
+ searchPicInfoTextArea.append(Res.string().getEndSearch()+"... \n");
+ searchPicInfoTextArea.updateUI();
+ }
+ }
+
+
+ private static JTextArea searchPicInfoTextArea;
+ private static JProgressBar progressBar;
+ private static JButton searchPicBtn;
+
+ private PaintPanel searchPicPanel;
+ private JComboBox chnComboBox;
+ private JTextField similaryTextField;
+ private DateChooserJButtonEx startTimeBtn;
+ private DateChooserJButtonEx endTimeBtn;
+ private JLabel chnLabel;
+ private JLabel startTimeLabel;
+ private JLabel endTimeLabel;
+
+ private JCheckBox faceCheckBox;
+ private static JCheckBox historyCheckBox;
+}
diff --git a/src/main/java/com/netsdk/demo/frame/Gate/AddCardDialog.java b/src/main/java/com/netsdk/demo/frame/Gate/AddCardDialog.java
new file mode 100644
index 0000000..242adaa
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/Gate/AddCardDialog.java
@@ -0,0 +1,332 @@
+package com.netsdk.demo.frame.Gate;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.IOException;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JTextField;
+
+import com.sun.jna.Memory;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.DateChooserJButton;
+import com.netsdk.common.PaintPanel;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.GateModule;
+import com.netsdk.lib.ToolKits;
+
+public class AddCardDialog extends JDialog{
+
+ private static final long serialVersionUID = 1L;
+
+ private Memory memory = null;
+
+ private String picPath = "";
+
+ public AddCardDialog(){
+ setTitle(Res.string().getAdd() + Res.string().getCardInfo());
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(520, 390);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体
+
+ CardInfoPanel cardInfoPanel = new CardInfoPanel();
+ ImagePanel imagePanel = new ImagePanel();
+
+ add(cardInfoPanel, BorderLayout.CENTER);
+ add(imagePanel, BorderLayout.EAST);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e){
+ clear();
+ dispose();
+ }
+ });
+ }
+
+ /**
+ * 卡信息
+ */
+ private class CardInfoPanel extends JPanel {
+
+ private static final long serialVersionUID = 1L;
+
+ public CardInfoPanel() {
+ BorderEx.set(this, Res.string().getCardInfo(), 4);
+ setLayout(new FlowLayout());
+
+ JLabel cardNoLabel = new JLabel(Res.string().getCardNo() + ":", JLabel.CENTER);
+ JLabel userIdLabel = new JLabel(Res.string().getUserId() + ":", JLabel.CENTER);
+ JLabel cardNameLabel = new JLabel(Res.string().getCardName() + ":", JLabel.CENTER);
+ JLabel cardPasswdLabel = new JLabel(Res.string().getCardPassword() + ":", JLabel.CENTER);
+ JLabel cardStatusLabel = new JLabel(Res.string().getCardStatus() + ":", JLabel.CENTER);
+ JLabel cardTypeLabel = new JLabel(Res.string().getCardType() + ":", JLabel.CENTER);
+ JLabel useTimesLabel = new JLabel(Res.string().getUseTimes() + ":", JLabel.CENTER);
+ JLabel validPeriodLabel = new JLabel(Res.string().getValidPeriod() + ":", JLabel.CENTER);
+
+ Dimension dimension = new Dimension();
+ dimension.width = 85;
+ dimension.height = 20;
+ cardNoLabel.setPreferredSize(dimension);
+ userIdLabel.setPreferredSize(dimension);
+ cardNameLabel.setPreferredSize(dimension);
+ cardPasswdLabel.setPreferredSize(dimension);
+ cardStatusLabel.setPreferredSize(dimension);
+ cardTypeLabel.setPreferredSize(dimension);
+ useTimesLabel.setPreferredSize(dimension);
+ validPeriodLabel.setPreferredSize(dimension);
+
+ cardNoTextField = new JTextField();
+ userIdTextField = new JTextField();
+ cardNameTextField = new JTextField();
+ cardPasswdField = new JPasswordField();
+ cardStatusComboBox = new JComboBox(Res.string().getCardStatusList());
+ cardTypeComboBox = new JComboBox(Res.string().getCardTypeList());
+ useTimesTextField = new JTextField("0");
+ firstEnterCheckBox = new JCheckBox(Res.string().getIsFirstEnter());
+ enableCheckBox = new JCheckBox(Res.string().getEnable());
+ enableCheckBox.setSelected(true);
+ enableCheckBox.setVisible(false);
+ startTimeBtn = new DateChooserJButton();
+ endTimeBtn = new DateChooserJButton();
+
+ cardNoTextField.setPreferredSize(new Dimension(145, 20));
+ userIdTextField.setPreferredSize(new Dimension(145, 20));
+ cardNameTextField.setPreferredSize(new Dimension(145, 20));
+ cardPasswdField.setPreferredSize(new Dimension(145, 20));
+ useTimesTextField.setPreferredSize(new Dimension(145, 20));
+ cardStatusComboBox.setPreferredSize(new Dimension(145, 20));
+ cardTypeComboBox.setPreferredSize(new Dimension(145, 20));
+ startTimeBtn.setPreferredSize(new Dimension(145, 20));
+ endTimeBtn.setPreferredSize(new Dimension(145, 20));
+ firstEnterCheckBox.setPreferredSize(new Dimension(170, 20));
+ enableCheckBox.setPreferredSize(new Dimension(70, 20));
+
+ JLabel nullLabel1 = new JLabel();
+ JLabel nullLabel2 = new JLabel();
+ JLabel nullLabel3 = new JLabel();
+ nullLabel1.setPreferredSize(new Dimension(5, 20));
+ nullLabel2.setPreferredSize(new Dimension(30, 20));
+ nullLabel3.setPreferredSize(new Dimension(85, 20));
+
+ addBtn = new JButton(Res.string().getAdd());
+ cancelBtn = new JButton(Res.string().getCancel());
+ JLabel nullLabel4 = new JLabel();
+ nullLabel4.setPreferredSize(new Dimension(250, 20));
+ addBtn.setPreferredSize(new Dimension(110, 20));
+ cancelBtn.setPreferredSize(new Dimension(110, 20));
+
+ add(cardNoLabel);
+ add(cardNoTextField);
+ add(userIdLabel);
+ add(userIdTextField);
+
+ add(cardNameLabel);
+ add(cardNameTextField);
+ add(cardPasswdLabel);
+ add(cardPasswdField);
+
+ add(cardStatusLabel);
+ add(cardStatusComboBox);
+ add(cardTypeLabel);
+ add(cardTypeComboBox);
+
+ add(useTimesLabel);
+ add(useTimesTextField);
+ add(nullLabel1);
+ add(firstEnterCheckBox);
+ add(nullLabel2);
+ add(enableCheckBox);
+
+ add(validPeriodLabel);
+ add(startTimeBtn);
+ add(nullLabel3);
+ add(endTimeBtn);
+
+ add(nullLabel4);
+ add(addBtn);
+ add(cancelBtn);
+
+ // 添加
+ addBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+// if(cardNoTextField.getText().isEmpty()) {
+// JOptionPane.showMessageDialog(null, Res.string().getInputCardNo(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+// return;
+// }
+
+ if(userIdTextField.getText().isEmpty()) {
+ JOptionPane.showMessageDialog(null, Res.string().getInputUserId(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+
+
+ if(memory == null) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectPicture(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ try {
+ if (cardNoTextField.getText().getBytes("UTF-8").length > 31) {
+ JOptionPane.showMessageDialog(null, Res.string().getCardNoExceedLength() + "(31)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if (userIdTextField.getText().getBytes("UTF-8").length > 31) {
+ JOptionPane.showMessageDialog(null, Res.string().getUserIdExceedLength() + "(31)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if (cardNameTextField.getText().getBytes("UTF-8").length > 63) {
+ JOptionPane.showMessageDialog(null, Res.string().getCardNameExceedLength() + "(63)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if (new String(cardPasswdField.getPassword()).getBytes("UTF-8").length > 63) {
+ JOptionPane.showMessageDialog(null, Res.string().getCardPasswdExceedLength() + "(63)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ } catch (Exception e1) {
+ e1.printStackTrace();
+ }
+
+ // 先添加卡,卡添加成功后,再添加图片
+ int useTimes = 0;
+ if(useTimesTextField.getText().isEmpty()) {
+ useTimes = 0;
+ } else {
+ useTimes = Integer.parseInt(useTimesTextField.getText());
+ }
+
+ boolean bCardFlags = GateModule.insertCard(cardNoTextField.getText(), userIdTextField.getText(), cardNameTextField.getText(),
+ new String(cardPasswdField.getPassword()), Res.string().getCardStatusInt(cardStatusComboBox.getSelectedIndex()),
+ Res.string().getCardTypeInt(cardTypeComboBox.getSelectedIndex()), useTimes,
+ firstEnterCheckBox.isSelected() ? 1:0, enableCheckBox.isSelected() ? 1:0, startTimeBtn.getText(), endTimeBtn.getText());
+ String cardError = "";
+ if(!bCardFlags) {
+ cardError = ToolKits.getErrorCodeShow();
+ }
+
+
+ boolean bFaceFalgs = GateModule.addFaceInfo(userIdTextField.getText(), memory);
+ String faceError = "";
+ if(!bFaceFalgs) {
+ faceError = ToolKits.getErrorCodeShow();
+ }
+
+ // 添加卡信息和人脸成功
+ if(bCardFlags && bFaceFalgs) {
+ JOptionPane.showMessageDialog(null, Res.string().getSucceedAddCardAndPerson(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ dispose();
+ }
+
+ // 添加卡信息和人脸失败
+ if(!bCardFlags && !bFaceFalgs) {
+ JOptionPane.showMessageDialog(null, Res.string().getFailedAddCard() + " : " + cardError,
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+
+ // 添加卡信息成功,添加人脸失败
+ if(bCardFlags && !bFaceFalgs) {
+ JOptionPane.showMessageDialog(null, Res.string().getSucceedAddCardButFailedAddPerson() + " : " + faceError, Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+
+ // 卡信息已存在,添加人脸成功
+ if(!bCardFlags && bFaceFalgs) {
+ JOptionPane.showMessageDialog(null, Res.string().getCardExistedSucceedAddPerson(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ }
+ }
+ });
+
+ // 取消
+ cancelBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ clear();
+ dispose();
+ }
+ });
+ }
+ }
+
+ /**
+ * 选择图片
+ */
+ private class ImagePanel extends JPanel {
+
+ private static final long serialVersionUID = 1L;
+
+ public ImagePanel() {
+ BorderEx.set(this, Res.string().getPersonPicture(), 4);
+ Dimension dimension = new Dimension();
+ dimension.width = 250;
+ setPreferredSize(dimension);
+ setLayout(new BorderLayout());
+
+ addImagePanel = new PaintPanel(); // 添加的人员信息图片显示
+ selectImageBtn = new JButton(Res.string().getSelectPicture());
+ add(addImagePanel, BorderLayout.CENTER);
+ add(selectImageBtn, BorderLayout.SOUTH);
+
+ // 选择图片,获取图片的信息
+ selectImageBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ // 选择图片,获取图片路径,并在界面显示
+ picPath = ToolKits.openPictureFile(addImagePanel);
+
+ if(!picPath.isEmpty()) {
+ try {
+ memory = ToolKits.readPictureFile(picPath);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ }
+ });
+ }
+ }
+
+ private void clear() {
+ memory = null;
+ picPath = "";
+ }
+
+ private PaintPanel addImagePanel;
+ private JButton selectImageBtn;
+
+ private JTextField cardNoTextField;
+ private JTextField userIdTextField;
+ private JTextField cardNameTextField;
+ private JPasswordField cardPasswdField;
+ private JComboBox cardStatusComboBox;
+ private JComboBox cardTypeComboBox;
+ private JTextField useTimesTextField;
+ private JCheckBox firstEnterCheckBox;
+ private JCheckBox enableCheckBox;
+ private DateChooserJButton startTimeBtn;
+ private DateChooserJButton endTimeBtn;
+
+ private JButton addBtn;
+ private JButton cancelBtn;
+}
diff --git a/src/main/java/com/netsdk/demo/frame/Gate/CardManegerDialog.java b/src/main/java/com/netsdk/demo/frame/Gate/CardManegerDialog.java
new file mode 100644
index 0000000..e1ae9f2
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/Gate/CardManegerDialog.java
@@ -0,0 +1,399 @@
+package com.netsdk.demo.frame.Gate;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Panel;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.UnsupportedEncodingException;
+import java.util.Vector;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+import javax.swing.SwingWorker;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.GateModule;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.NetSDKLib.*;
+
+public class CardManegerDialog extends JDialog{
+ private static final long serialVersionUID = 1L;
+
+ private int count = 0; // 查询了几次
+ private int index = 0; // 查询的卡信息索引
+ private int nFindCount = 10; // 每次查询的次数
+
+ public CardManegerDialog(){
+ setTitle(Res.string().getCardManager());
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(700, 390);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体
+
+ CardListPanel cardListPanel = new CardListPanel();
+ CardOperatePanel cardOperatePanel = new CardOperatePanel();
+
+ add(cardListPanel, BorderLayout.CENTER);
+ add(cardOperatePanel, BorderLayout.EAST);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e){
+ dispose();
+ }
+ });
+
+ setOnClickListener();
+ }
+
+ /**
+ * 卡信息列表
+ */
+ private class CardListPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public CardListPanel() {
+ BorderEx.set(this, Res.string().getCardInfo(), 2);
+ setLayout(new BorderLayout());
+
+ defaultModel = new DefaultTableModel(null, Res.string().getCardTable());
+ table = new JTable(defaultModel) { // 列表不可编辑
+ private static final long serialVersionUID = 1L;
+ @Override
+ public boolean isCellEditable(int row, int column) {
+ return false;
+ }
+ };
+ defaultModel.setRowCount(18);
+
+ table.getColumnModel().getColumn(0).setPreferredWidth(80);
+ table.getColumnModel().getColumn(1).setPreferredWidth(120);
+ table.getColumnModel().getColumn(2).setPreferredWidth(100);
+ table.getColumnModel().getColumn(3).setPreferredWidth(100);
+ table.getColumnModel().getColumn(4).setPreferredWidth(100);
+ table.getColumnModel().getColumn(5).setPreferredWidth(100);
+ table.getColumnModel().getColumn(6).setPreferredWidth(100);
+ table.getColumnModel().getColumn(7).setPreferredWidth(100);
+ table.getColumnModel().getColumn(8).setPreferredWidth(100);
+ table.getColumnModel().getColumn(9).setPreferredWidth(100);
+ table.getColumnModel().getColumn(10).setPreferredWidth(100);
+ table.getColumnModel().getColumn(11).setPreferredWidth(150);
+ table.getColumnModel().getColumn(12).setPreferredWidth(150);
+
+ // 列表显示居中
+ DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer();
+ dCellRenderer.setHorizontalAlignment(JLabel.CENTER);
+ table.setDefaultRenderer(Object.class, dCellRenderer);
+ ((DefaultTableCellRenderer)table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(JLabel.CENTER);
+
+ table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+ JScrollPane scrollPane = new JScrollPane(table);
+ add(scrollPane, BorderLayout.CENTER);
+ }
+
+ }
+
+ /**
+ * 卡操作
+ */
+ private class CardOperatePanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public CardOperatePanel() {
+ BorderEx.set(this, Res.string().getCardOperate(), 2);
+ setLayout(new BorderLayout());
+ Dimension dimension = new Dimension();
+ dimension.width = 210;
+ setPreferredSize(dimension);
+
+ Panel panel1 = new Panel();
+ Panel panel2 = new Panel();
+
+ add(panel1, BorderLayout.NORTH);
+ add(panel2, BorderLayout.CENTER);
+
+ //
+ JLabel cardNoLabel = new JLabel(Res.string().getCardNo() + ":", JLabel.CENTER);
+ cardNoTextField = new JTextField("");
+
+ cardNoLabel.setPreferredSize(new Dimension(50, 20));
+ cardNoTextField.setPreferredSize(new Dimension(120, 20));
+ cardNoTextField.setHorizontalAlignment(JTextField.CENTER);
+
+ panel1.setLayout(new FlowLayout());
+ panel1.add(cardNoLabel);
+ panel1.add(cardNoTextField);
+
+ //
+ searchBtn = new JButton(Res.string().getSearch());
+ addBtn = new JButton(Res.string().getAdd());
+ modifyBtn = new JButton(Res.string().getModify());
+ deleteBtn = new JButton(Res.string().getDelete());
+ clearBtn = new JButton(Res.string().getClear());
+
+ searchBtn.setPreferredSize(new Dimension(180, 21));
+ addBtn.setPreferredSize(new Dimension(180, 21));
+ modifyBtn.setPreferredSize(new Dimension(180, 21));
+ deleteBtn.setPreferredSize(new Dimension(180, 21));
+ clearBtn.setPreferredSize(new Dimension(180, 21));
+
+ JLabel nullLabel = new JLabel();
+ nullLabel.setPreferredSize(new Dimension(180, 30));
+
+ panel2.setLayout(new FlowLayout());
+ panel2.add(nullLabel);
+ panel2.add(searchBtn);
+ panel2.add(addBtn);
+ panel2.add(modifyBtn);
+ panel2.add(deleteBtn);
+ panel2.add(clearBtn);
+ }
+ }
+
+ private void setOnClickListener() {
+ searchBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ try {
+ if (cardNoTextField.getText().getBytes("UTF-8").length > 31) {
+ JOptionPane.showMessageDialog(null, Res.string().getCardNoExceedLength() + "(31)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ } catch (Exception e1) {
+ e1.printStackTrace();
+ }
+
+ searchBtn.setEnabled(false);
+ defaultModel.setRowCount(0);
+ defaultModel.setRowCount(18);
+ }
+ });
+
+ findCardInfo();
+ }
+ });
+
+ addBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ AddCardDialog dialog = new AddCardDialog();
+ dialog.setVisible(true);
+ }
+ });
+
+ modifyBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ int row = -1;
+ row = table.getSelectedRow(); //获得所选的单行
+
+ if(row < 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectCard(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(defaultModel.getValueAt(row, 3) == null || String.valueOf(defaultModel.getValueAt(row, 3)).trim().isEmpty()) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectCard(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ @SuppressWarnings("unchecked")
+ Vector vector = (Vector) defaultModel.getDataVector().get(row);
+
+ ModifyCardDialog dialog = new ModifyCardDialog(vector);
+ dialog.setVisible(true);
+ }
+ });
+
+ deleteBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ int row = -1;
+ row = table.getSelectedRow(); //获得所选的单行
+
+ if(row < 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectCard(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if(defaultModel.getValueAt(row, 3) == null || String.valueOf(defaultModel.getValueAt(row, 3)).trim().isEmpty()) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectCard(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ Vector v = (Vector)defaultModel.getDataVector().get(row);
+
+ String recordNo = v.get(3).toString(); // 记录集编号
+ String userId = v.get(4).toString(); // 用户ID
+
+ // 删除人脸和卡信息
+ if(!GateModule.deleteFaceInfo(userId) ||
+ !GateModule.deleteCard(Integer.parseInt(recordNo))) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ defaultModel.removeRow(row);
+ table.updateUI();
+ }
+ }
+ });
+
+ clearBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ int result = JOptionPane.showConfirmDialog(null, Res.string().getWantClearAllInfo(), Res.string().getPromptMessage(), JOptionPane.YES_NO_OPTION);
+ if(result == 0) { // 0-是, 1-否
+ // 清空人脸和卡信息
+ if(!GateModule.clearFaceInfo() ||
+ !GateModule.clearCard()) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ defaultModel.setRowCount(0);
+ defaultModel.setRowCount(18);
+ }
+ }
+ }
+ });
+ }
+
+ /**
+ * 查询卡的信息
+ */
+ public void findCardInfo() {
+ new SwingWorker() {
+ @Override
+ protected Boolean doInBackground() {
+ count = 0;
+ index = 0;
+ nFindCount = 10;
+
+ // 卡号: 为空,查询所有的卡信息
+ // 获取查询句柄
+ if(!GateModule.findCard(cardNoTextField.getText(),"")) {
+ return false;
+ }
+
+ // 查询具体信息
+ while(true) {
+ NET_RECORDSET_ACCESS_CTL_CARD[] pstRecord = GateModule.findNextCard(nFindCount);
+ if(pstRecord == null) {
+ break;
+ }
+
+ for(int i = 0; i < pstRecord.length; i++) {
+ index = i + count * nFindCount;
+
+ try {
+ Vector vector = new Vector();
+ vector.add(String.valueOf(index + 1)); // 序号
+ vector.add(new String(pstRecord[i].szCardNo).trim()); // 卡号
+ vector.add(new String(pstRecord[i].szCardName, "GBK").trim()); // 卡名
+ vector.add(String.valueOf(pstRecord[i].nRecNo)); // 记录集编号
+ vector.add(new String(pstRecord[i].szUserID).trim()); // 用户ID
+ vector.add(new String(pstRecord[i].szPsw).trim()); // 卡密码
+ vector.add(Res.string().getCardStatus(pstRecord[i].emStatus)); // 卡状态
+ vector.add(Res.string().getCardType(pstRecord[i].emType)); // 卡类型
+ vector.add(String.valueOf(pstRecord[i].nUserTime)); // 使用次数
+ vector.add(pstRecord[i].bFirstEnter == 1 ? Res.string().getFirstEnter() : Res.string().getNoFirstEnter()); // 是否首卡
+ vector.add(pstRecord[i].bIsValid == 1? Res.string().getValid() : Res.string().getInValid()); // 是否有效
+ vector.add(pstRecord[i].stuValidStartTime.toStringTimeEx()); // 有效开始时间
+ vector.add(pstRecord[i].stuValidEndTime.toStringTimeEx()); // 有效结束时间
+
+ CardData data = new CardData();
+ data.setIndex(index);
+ data.setVector(vector);
+
+ publish(data);
+
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ }
+
+ if (pstRecord.length < nFindCount) {
+ break;
+ } else {
+ count ++;
+ }
+
+ }
+
+ // 关闭查询接口
+ GateModule.findCardClose();
+
+ return true;
+ }
+
+ @Override
+ protected void process(java.util.List chunks) {
+ for(CardData data : chunks) {
+ defaultModel.insertRow(data.getIndex(), data.getVector());
+ if(data.getIndex() < 18) {
+ defaultModel.setRowCount(18);
+ } else {
+ defaultModel.setRowCount(data.getIndex() + 1);
+ }
+
+ table.updateUI();
+ }
+
+ super.process(chunks);
+ }
+
+ @Override
+ protected void done() {
+ searchBtn.setEnabled(true);
+ }
+ }.execute();
+ }
+
+ class CardData {
+ private int nIndex = 0;
+ private Vector vector = null;
+
+ public int getIndex() {
+ return nIndex;
+ }
+ public void setIndex(int index) {
+ this.nIndex = index;
+ }
+ public Vector getVector() {
+ return vector;
+ }
+ public void setVector(Vector vector) {
+ this.vector = vector;
+ }
+ }
+
+
+ ///
+ private DefaultTableModel defaultModel;
+ private JTable table;
+
+ private JTextField cardNoTextField;
+
+ private JButton searchBtn;
+ private JButton addBtn;
+ private JButton modifyBtn;
+ private JButton deleteBtn;
+ private JButton clearBtn;
+}
diff --git a/src/main/java/com/netsdk/demo/frame/Gate/Gate.java b/src/main/java/com/netsdk/demo/frame/Gate/Gate.java
new file mode 100644
index 0000000..677420d
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/Gate/Gate.java
@@ -0,0 +1,611 @@
+package com.netsdk.demo.frame.Gate;
+
+import java.awt.AWTEvent;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.FlowLayout;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.Vector;
+
+import javax.imageio.ImageIO;
+import javax.swing.BorderFactory;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.FunctionList;
+import com.netsdk.common.LoginPanel;
+import com.netsdk.common.PaintPanel;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.GateModule;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.*;
+import com.netsdk.lib.ToolKits;
+
+import com.sun.jna.Pointer;
+
+class GateFrame extends JFrame {
+ private static final long serialVersionUID = 1L;
+
+ // 获取界面窗口
+ private static JFrame frame = new JFrame();
+
+ // 设备断线通知回调
+ private static DisConnect disConnect = new DisConnect();
+
+ // 网络连接恢复
+ private static HaveReConnect haveReConnect = new HaveReConnect();
+
+ // 订阅句柄
+ public static LLong m_hAttachHandle = new LLong(0);
+
+ private Vector chnList = new Vector();
+
+ private AnalyzerDataCB analyzerCallback = new AnalyzerDataCB();
+
+ private java.awt.Component target = this;
+
+ private boolean isAttach = false;
+
+ public GateFrame() {
+ setTitle(Res.string().getGate());
+ setLayout(new BorderLayout());
+ pack();
+ setSize(800, 400);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化
+
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ loginPanel = new LoginPanel();
+ GatePanel gatePanel = new GatePanel();
+
+
+ add(loginPanel, BorderLayout.NORTH);
+ add(gatePanel, BorderLayout.CENTER);
+
+
+ loginPanel.addLoginBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if(loginPanel.checkLoginText()) {
+ if(login()) {
+ frame = ToolKits.getFrame(e);
+ frame.setTitle(Res.string().getGate() + " : " + Res.string().getOnline());
+ }
+ }
+ }
+ });
+
+ loginPanel.addLogoutBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ frame.setTitle(Res.string().getGate());
+ logout();
+ }
+ });
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ GateModule.stopRealLoadPic(m_hAttachHandle);
+ LoginModule.logout();
+ LoginModule.cleanup(); // 关闭工程,释放资源
+
+ dispose();
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+
+ /////////////////面板///////////////////
+ // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数
+ private static class DisConnect implements NetSDKLib.fDisConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+ // 断线提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getGate() + " : " + Res.string().getDisConnectReconnecting());
+ }
+ });
+ }
+ }
+
+ // 网络连接恢复,设备重连成功回调
+ // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数
+ private static class HaveReConnect implements NetSDKLib.fHaveReConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+
+ // 重连提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getGate() + " : " + Res.string().getOnline());
+ }
+ });
+ }
+ }
+
+ // 登录
+ public boolean login() {
+ if(LoginModule.login(loginPanel.ipTextArea.getText(),
+ Integer.parseInt(loginPanel.portTextArea.getText()),
+ loginPanel.nameTextArea.getText(),
+ new String(loginPanel.passwordTextArea.getPassword()))) {
+
+ for(int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) {
+ chnList.add(Res.string().getChannel() + " " + String.valueOf(i));
+ }
+
+ // 登陆成功,将通道添加到控件
+ chnComboBox.setModel(new DefaultComboBoxModel(chnList));
+
+ loginPanel.setButtonEnable(true);
+ setEnable(true);
+
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ return true;
+ }
+
+ // 登出
+ public void logout() {
+ GateModule.stopRealLoadPic(m_hAttachHandle);
+ LoginModule.logout();
+
+ loginPanel.setButtonEnable(false);
+
+ for(int i = 0; i < LoginModule.m_stDeviceInfo.byChanNum; i++) {
+ chnList.clear();
+ }
+
+ chnComboBox.setModel(new DefaultComboBoxModel());
+ setEnable(false);
+ detachBtn.setEnabled(false);
+
+ isAttach = false;
+
+ clearPanel();
+ }
+
+ /**
+ * 闸机界面面板
+ */
+ private class GatePanel extends JPanel {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public GatePanel() {
+ BorderEx.set(this, "", 4);
+ setLayout(new BorderLayout());
+
+ JPanel gateOperatePanel = new JPanel();
+ JPanel gateShowPanel = new JPanel();
+
+ add(gateOperatePanel, BorderLayout.WEST);
+ add(gateShowPanel, BorderLayout.CENTER);
+
+ /**
+ * 闸机操作面板
+ */
+ gateOperatePanel.setLayout(new BorderLayout());
+ gateOperatePanel.setPreferredSize(new Dimension(250, 70));
+
+ JPanel channelPanel = new JPanel();
+ JPanel operatePanel = new JPanel();
+ gateOperatePanel.add(channelPanel, BorderLayout.NORTH);
+ gateOperatePanel.add(operatePanel, BorderLayout.CENTER);
+
+ // 通道面板
+ channelPanel.setBorder(BorderFactory.createTitledBorder(""));
+ channelPanel.setPreferredSize(new Dimension(220, 70));
+ channelPanel.setLayout(new FlowLayout());
+
+ JLabel channelLabel = new JLabel(Res.string().getChannel());
+ chnComboBox = new JComboBox();
+
+ chnComboBox.setPreferredSize(new Dimension(100, 20));
+
+ channelPanel.add(channelLabel);
+ channelPanel.add(chnComboBox);
+
+ // 按钮面板
+ operatePanel.setBorder(BorderFactory.createTitledBorder(Res.string().getOperate()));
+ operatePanel.setLayout(new FlowLayout());
+
+ attachBtn = new JButton(Res.string().getAttach());
+ detachBtn = new JButton(Res.string().getDetach());
+ cardOperateBtn = new JButton(Res.string().getCardOperate());
+ JLabel nullJLabel = new JLabel("");
+
+ nullJLabel.setPreferredSize(new Dimension(205, 40));
+ attachBtn.setPreferredSize(new Dimension(100, 20));
+ detachBtn.setPreferredSize(new Dimension(100, 20));
+ cardOperateBtn.setPreferredSize(new Dimension(205, 20));
+
+ operatePanel.add(attachBtn);
+ operatePanel.add(detachBtn);
+ operatePanel.add(nullJLabel);
+ operatePanel.add(cardOperateBtn);
+
+ setEnable(false);
+ detachBtn.setEnabled(false);
+
+ /**
+ * 闸机订阅展示面板
+ */
+ gateShowPanel.setBorder(BorderFactory.createTitledBorder(""));
+ gateShowPanel.setLayout(new BorderLayout());
+
+ personPaintPanel = new PaintPanel();
+ JPanel cardInfoPanel = new JPanel();
+
+ personPaintPanel.setPreferredSize(new Dimension(250, 70));
+
+ gateShowPanel.add(personPaintPanel, BorderLayout.WEST);
+ gateShowPanel.add(cardInfoPanel, BorderLayout.CENTER);
+
+ //
+ cardInfoPanel.setLayout(new FlowLayout());
+
+ JLabel timeLable = new JLabel(Res.string().getTime() + ":", JLabel.CENTER);
+ JLabel openStatusLable = new JLabel(Res.string().getOpenStatus() + ":", JLabel.CENTER);
+ JLabel openMethodLable = new JLabel(Res.string().getOpenMethod() + ":", JLabel.CENTER);
+ JLabel cardNameLable = new JLabel(Res.string().getCardName() + ":", JLabel.CENTER);
+ JLabel cardNoLable = new JLabel(Res.string().getCardNo() + ":", JLabel.CENTER);
+ JLabel userIdLable = new JLabel(Res.string().getUserId() + ":", JLabel.CENTER);
+ JLabel tempLable = new JLabel(Res.string().getTemp() + ":", JLabel.CENTER);
+ JLabel maskstutasLable = new JLabel(Res.string().getMaskstutas() + ":", JLabel.CENTER);
+
+
+
+ timeLable.setPreferredSize(new Dimension(80, 20));
+ openStatusLable.setPreferredSize(new Dimension(80, 20));
+ openMethodLable.setPreferredSize(new Dimension(80, 20));
+ cardNameLable.setPreferredSize(new Dimension(80, 20));
+ cardNoLable.setPreferredSize(new Dimension(80, 20));
+ userIdLable.setPreferredSize(new Dimension(80, 20));
+ tempLable.setPreferredSize(new Dimension(80, 20));
+ maskstutasLable.setPreferredSize(new Dimension(80, 20));
+
+
+ timeTextField = new JTextField("");
+ openStatusTextField = new JTextField("");
+ openMethodTextField = new JTextField("");
+ cardNameTextField = new JTextField("");
+ cardNoTextField = new JTextField("");
+ userIdTextField = new JTextField("");
+ tempTextField = new JTextField("");
+ maskStatusTextField = new JTextField("");
+
+
+ Dimension dimension = new Dimension();
+ dimension.width = 150;
+ dimension.height = 20;
+ timeTextField.setPreferredSize(dimension);
+ openStatusTextField.setPreferredSize(dimension);
+ openMethodTextField.setPreferredSize(dimension);
+ cardNameTextField.setPreferredSize(dimension);
+ cardNoTextField.setPreferredSize(dimension);
+ userIdTextField.setPreferredSize(dimension);
+ tempTextField.setPreferredSize(dimension);
+ maskStatusTextField.setPreferredSize(dimension);
+
+
+ timeTextField.setHorizontalAlignment(JTextField.CENTER);
+ openStatusTextField.setHorizontalAlignment(JTextField.CENTER);
+ openMethodTextField.setHorizontalAlignment(JTextField.CENTER);
+ cardNameTextField.setHorizontalAlignment(JTextField.CENTER);
+ cardNoTextField.setHorizontalAlignment(JTextField.CENTER);
+ userIdTextField.setHorizontalAlignment(JTextField.CENTER);
+ tempTextField.setHorizontalAlignment(JTextField.CENTER);
+ maskStatusTextField.setHorizontalAlignment(JTextField.CENTER);
+
+
+ timeTextField.setEditable(false);
+ openStatusTextField.setEditable(false);
+ openMethodTextField.setEditable(false);
+ cardNameTextField.setEditable(false);
+ cardNoTextField.setEditable(false);
+ userIdTextField.setEditable(false);
+ tempTextField.setEditable(false);
+ maskStatusTextField.setEditable(false);
+
+
+ cardInfoPanel.add(timeLable);
+ cardInfoPanel.add(timeTextField);
+ cardInfoPanel.add(openStatusLable);
+ cardInfoPanel.add(openStatusTextField);
+ cardInfoPanel.add(openMethodLable);
+ cardInfoPanel.add(openMethodTextField);
+ cardInfoPanel.add(cardNameLable);
+ cardInfoPanel.add(cardNameTextField);
+ cardInfoPanel.add(cardNoLable);
+ cardInfoPanel.add(cardNoTextField);
+ cardInfoPanel.add(userIdLable);
+ cardInfoPanel.add(userIdTextField);
+ cardInfoPanel.add(tempLable);
+ cardInfoPanel.add(tempTextField);
+ cardInfoPanel.add(maskstutasLable);
+ cardInfoPanel.add(maskStatusTextField);
+
+ setOnClickListener();
+ }
+ }
+
+ // 监听
+ private void setOnClickListener() {
+ // 订阅
+ attachBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ m_hAttachHandle = GateModule.realLoadPic(chnComboBox.getSelectedIndex(), analyzerCallback);
+ if(m_hAttachHandle.longValue() != 0) {
+ isAttach = true;
+ attachBtn.setEnabled(false);
+ detachBtn.setEnabled(true);
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ });
+
+ // 取消订阅
+ detachBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ GateModule.stopRealLoadPic(m_hAttachHandle);
+ synchronized (this) {
+ isAttach = false;
+ }
+ attachBtn.setEnabled(true);
+ detachBtn.setEnabled(false);
+
+ clearPanel();
+ }
+ });
+
+
+ // 卡操作
+ cardOperateBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ CardManegerDialog dialog = new CardManegerDialog();
+ dialog.setVisible(true);
+ }
+ });
+ }
+
+ private void setEnable(boolean bln) {
+ chnComboBox.setEnabled(bln);
+ attachBtn.setEnabled(bln);
+ cardOperateBtn.setEnabled(bln);
+ }
+
+ private void clearPanel() {
+ personPaintPanel.setOpaque(true);
+ personPaintPanel.repaint();
+
+ timeTextField.setText("");
+ openStatusTextField.setText("");
+ openMethodTextField.setText("");
+ cardNameTextField.setText("");
+ cardNoTextField.setText("");
+ userIdTextField.setText("");
+ tempTextField.setText("");
+ maskStatusTextField.setText("");
+ }
+
+ private class AnalyzerDataCB implements NetSDKLib.fAnalyzerDataCallBack {
+ private BufferedImage gateBufferedImage = null;
+
+ public int invoke(LLong lAnalyzerHandle, int dwAlarmType,
+ Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize,
+ Pointer dwUser, int nSequence, Pointer reserved)
+ {
+ if (lAnalyzerHandle.longValue() == 0 || pAlarmInfo == null) {
+ return -1;
+ }
+
+ File path = new File("./GateSnapPicture/");
+ if (!path.exists()) {
+ path.mkdir();
+ }
+
+ ///< 门禁事件
+ if(dwAlarmType == NetSDKLib.EVENT_IVS_ACCESS_CTL) {
+ DEV_EVENT_ACCESS_CTL_INFO msg = new DEV_EVENT_ACCESS_CTL_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ // 保存图片,获取图片缓存
+ String snapPicPath = path + "\\" + System.currentTimeMillis() + "GateSnapPicture.jpg"; // 保存图片地址
+ byte[] buffer = pBuffer.getByteArray(0, dwBufSize);
+ ByteArrayInputStream byteArrInputGlobal = new ByteArrayInputStream(buffer);
+
+ try {
+ gateBufferedImage = ImageIO.read(byteArrInputGlobal);
+ if(gateBufferedImage != null) {
+ ImageIO.write(gateBufferedImage, "jpg", new File(snapPicPath));
+ }
+ } catch (IOException e2) {
+ e2.printStackTrace();
+ }
+
+ // 图片以及门禁信息界面显示
+ EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
+ if (eventQueue != null) {
+ eventQueue.postEvent( new AccessEvent(target,
+ gateBufferedImage,
+ msg));
+ }
+ }
+
+ return 0;
+ }
+ }
+
+ class AccessEvent extends AWTEvent {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ public static final int EVENT_ID = AWTEvent.RESERVED_ID_MAX + 1;
+
+ private BufferedImage gateBufferedImage = null;
+ private DEV_EVENT_ACCESS_CTL_INFO msg = null;
+
+ public AccessEvent(Object target,
+ BufferedImage gateBufferedImage,
+ DEV_EVENT_ACCESS_CTL_INFO msg) {
+ super(target, EVENT_ID);
+ this.gateBufferedImage = gateBufferedImage;
+ this.msg = msg;
+ }
+
+ public BufferedImage getGateBufferedImage() {
+ return gateBufferedImage;
+ }
+
+ public DEV_EVENT_ACCESS_CTL_INFO getAccessInfo() {
+ return msg;
+ }
+ }
+
+ @Override
+ protected void processEvent(AWTEvent event) {
+ if (event instanceof AccessEvent) { // 门禁事件处理
+ AccessEvent ev = (AccessEvent) event;
+
+ BufferedImage gateBufferedImage = ev.getGateBufferedImage();
+ DEV_EVENT_ACCESS_CTL_INFO msg = ev.getAccessInfo();
+
+ if(!isAttach) {
+ return;
+ }
+
+ // 图片显示
+ if(gateBufferedImage != null) {
+ personPaintPanel.setImage(gateBufferedImage);
+ personPaintPanel.setOpaque(false);
+ personPaintPanel.repaint();
+ } else {
+ personPaintPanel.setOpaque(true);
+ personPaintPanel.repaint();
+ }
+
+ // 时间
+ if(msg.UTC == null || msg.UTC.toString().isEmpty()) {
+ timeTextField.setText("");
+ } else {
+ msg.UTC.setTime(msg.UTC.dwYear, msg.UTC.dwMonth, msg.UTC.dwDay, msg.UTC.dwHour+8, msg.UTC.dwMinute, msg.UTC.dwSecond);
+ timeTextField.setText(msg.UTC.toString());
+ }
+
+ // 开门状态
+ if(msg.bStatus == 1) {
+ openStatusTextField.setText(Res.string().getSucceed());
+ } else {
+ openStatusTextField.setText(Res.string().getFailed());
+ }
+
+ // 开门方式
+ openMethodTextField.setText(Res.string().getOpenMethods(msg.emOpenMethod));
+
+ // 卡名
+ try {
+ cardNameTextField.setText(new String(msg.szCardName, "GBK").trim());
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ // 卡号
+ cardNoTextField.setText(new String(msg.szCardNo).trim());
+
+ // 用户ID
+ userIdTextField.setText(new String(msg.szUserID).trim());
+
+ // 口罩状态
+ maskStatusTextField.setText(Res.string().getMaskStatus(msg.emMask));
+
+ //温度
+ if(msg.stuManTemperatureInfo.emTemperatureUnit==0) {
+ tempTextField.setText(String.valueOf(msg.stuManTemperatureInfo.fCurrentTemperature+"℃"));
+ }else if(msg.stuManTemperatureInfo.emTemperatureUnit==1){
+ tempTextField.setText(String.valueOf(msg.stuManTemperatureInfo.fCurrentTemperature+"℉"));
+ }else if(msg.stuManTemperatureInfo.emTemperatureUnit==2) {
+ tempTextField.setText(String.valueOf(msg.stuManTemperatureInfo.fCurrentTemperature+"K"));
+ }
+
+
+ } else {
+ super.processEvent(event);
+ }
+ }
+
+ /*
+ * 登录控件
+ */
+ private LoginPanel loginPanel;
+
+ private JComboBox chnComboBox;
+ private JButton attachBtn;
+ private JButton detachBtn;
+ private JButton cardOperateBtn;
+
+ private PaintPanel personPaintPanel;
+
+ private JTextField timeTextField;
+ private JTextField openStatusTextField;
+ private JTextField openMethodTextField;
+ private JTextField cardNameTextField;
+ private JTextField cardNoTextField;
+ private JTextField userIdTextField;
+ private JTextField tempTextField;
+ private JTextField maskStatusTextField;
+}
+
+public class Gate {
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ GateFrame demo = new GateFrame();
+ demo.setVisible(true);
+ }
+ });
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/frame/Gate/ModifyCardDialog.java b/src/main/java/com/netsdk/demo/frame/Gate/ModifyCardDialog.java
new file mode 100644
index 0000000..ac78fd3
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/Gate/ModifyCardDialog.java
@@ -0,0 +1,341 @@
+package com.netsdk.demo.frame.Gate;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.IOException;
+import java.util.Vector;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JTextField;
+
+import com.sun.jna.Memory;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.DateChooserJButton;
+import com.netsdk.common.PaintPanel;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.GateModule;
+import com.netsdk.lib.ToolKits;
+
+public class ModifyCardDialog extends JDialog{
+
+ private static final long serialVersionUID = 1L;
+
+ private Memory memory = null;
+
+ private Vector vector = null;
+
+ private String picPath = "";
+
+ public ModifyCardDialog(Vector v){
+ setTitle(Res.string().getModify() + Res.string().getCardInfo());
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(520, 390);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体
+
+ CardInfoPanel cardInfoPanel = new CardInfoPanel();
+ ImagePanel imagePanel = new ImagePanel();
+
+ add(cardInfoPanel, BorderLayout.CENTER);
+ add(imagePanel, BorderLayout.EAST);
+
+ this.vector = v;
+ showCardInfo();
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e){
+ clear();
+ dispose();
+ }
+ });
+ }
+
+ /**
+ * 卡信息
+ */
+ private class CardInfoPanel extends JPanel {
+
+ private static final long serialVersionUID = 1L;
+
+ public CardInfoPanel() {
+ BorderEx.set(this, Res.string().getCardInfo(), 4);
+
+ JLabel cardNoLabel = new JLabel(Res.string().getCardNo() + ":", JLabel.CENTER);
+ JLabel userIdLabel = new JLabel(Res.string().getUserId() + ":", JLabel.CENTER);
+ JLabel cardNameLabel = new JLabel(Res.string().getCardName() + ":", JLabel.CENTER);
+ JLabel cardPasswdLabel = new JLabel(Res.string().getCardPassword() + ":", JLabel.CENTER);
+ JLabel cardStatusLabel = new JLabel(Res.string().getCardStatus() + ":", JLabel.CENTER);
+ JLabel cardTypeLabel = new JLabel(Res.string().getCardType() + ":", JLabel.CENTER);
+ JLabel useTimesLabel = new JLabel(Res.string().getUseTimes() + ":", JLabel.CENTER);
+ JLabel validPeriodLabel = new JLabel(Res.string().getValidPeriod() + ":", JLabel.CENTER);
+
+ Dimension dimension = new Dimension();
+ dimension.width = 85;
+ dimension.height = 20;
+ cardNoLabel.setPreferredSize(dimension);
+ userIdLabel.setPreferredSize(dimension);
+ cardNameLabel.setPreferredSize(dimension);
+ cardPasswdLabel.setPreferredSize(dimension);
+ cardStatusLabel.setPreferredSize(dimension);
+ cardTypeLabel.setPreferredSize(dimension);
+ useTimesLabel.setPreferredSize(dimension);
+ validPeriodLabel.setPreferredSize(dimension);
+
+ cardNoTextField = new JTextField();
+ userIdTextField = new JTextField();
+ cardNameTextField = new JTextField();
+ cardPasswdField = new JPasswordField();
+ cardStatusComboBox = new JComboBox(Res.string().getCardStatusList());
+ cardTypeComboBox = new JComboBox(Res.string().getCardTypeList());
+ useTimesTextField = new JTextField();
+ firstEnterCheckBox = new JCheckBox(Res.string().getIsFirstEnter());
+ enableCheckBox = new JCheckBox(Res.string().getEnable());
+ enableCheckBox.setSelected(true);
+ enableCheckBox.setVisible(false);
+ startTimeBtn = new DateChooserJButton();
+ endTimeBtn = new DateChooserJButton();
+
+ cardNoTextField.setPreferredSize(new Dimension(145, 20));
+ userIdTextField.setPreferredSize(new Dimension(145, 20));
+ cardNameTextField.setPreferredSize(new Dimension(145, 20));
+ cardPasswdField.setPreferredSize(new Dimension(145, 20));
+ useTimesTextField.setPreferredSize(new Dimension(145, 20));
+ cardStatusComboBox.setPreferredSize(new Dimension(145, 20));
+ cardTypeComboBox.setPreferredSize(new Dimension(145, 20));
+ startTimeBtn.setPreferredSize(new Dimension(145, 20));
+ endTimeBtn.setPreferredSize(new Dimension(145, 20));
+ firstEnterCheckBox.setPreferredSize(new Dimension(170, 20));
+ enableCheckBox.setPreferredSize(new Dimension(70, 20));
+
+ JLabel nullLabel1 = new JLabel();
+ JLabel nullLabel2 = new JLabel();
+ JLabel nullLabel3 = new JLabel();
+ nullLabel1.setPreferredSize(new Dimension(5, 20));
+ nullLabel2.setPreferredSize(new Dimension(30, 20));
+ nullLabel3.setPreferredSize(new Dimension(85, 20));
+
+ cardNoTextField.setEditable(false);
+ userIdTextField.setEditable(false);
+
+ modifyBtn = new JButton(Res.string().getModify());
+ cancelBtn = new JButton(Res.string().getCancel());
+ JLabel nullLabel4 = new JLabel();
+ nullLabel4.setPreferredSize(new Dimension(250, 20));
+ modifyBtn.setPreferredSize(new Dimension(110, 20));
+ cancelBtn.setPreferredSize(new Dimension(110, 20));
+
+ add(cardNoLabel);
+ add(cardNoTextField);
+ add(userIdLabel);
+ add(userIdTextField);
+
+ add(cardNameLabel);
+ add(cardNameTextField);
+ add(cardPasswdLabel);
+ add(cardPasswdField);
+
+ add(cardStatusLabel);
+ add(cardStatusComboBox);
+ add(cardTypeLabel);
+ add(cardTypeComboBox);
+
+ add(useTimesLabel);
+ add(useTimesTextField);
+ add(nullLabel1);
+ add(firstEnterCheckBox);
+ add(nullLabel2);
+ add(enableCheckBox);
+
+ add(validPeriodLabel);
+ add(startTimeBtn);
+ add(nullLabel3);
+ add(endTimeBtn);
+
+ add(nullLabel4);
+ add(modifyBtn);
+ add(cancelBtn);
+
+ // 修改
+ modifyBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ try {
+ if (cardNameTextField.getText().getBytes("UTF-8").length > 63) {
+ JOptionPane.showMessageDialog(null, Res.string().getCardNameExceedLength() + "(63)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ if (new String(cardPasswdField.getPassword()).getBytes("UTF-8").length > 63) {
+ JOptionPane.showMessageDialog(null, Res.string().getCardPasswdExceedLength() + "(63)", Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ } catch (Exception e1) {
+ e1.printStackTrace();
+ }
+
+ int useTimes = 0;
+ if(useTimesTextField.getText().isEmpty()) {
+ useTimes = 0;
+ } else {
+ useTimes = Integer.parseInt(useTimesTextField.getText());
+ }
+
+ if(GateModule.modifyCard(Integer.parseInt(vector.get(3).toString()), cardNoTextField.getText(),
+ userIdTextField.getText(), cardNameTextField.getText(),
+ new String(cardPasswdField.getPassword()),
+ Res.string().getCardStatusInt(cardStatusComboBox.getSelectedIndex()),
+ Res.string().getCardTypeInt(cardTypeComboBox.getSelectedIndex()),
+ useTimes, firstEnterCheckBox.isSelected() ? 1:0,
+ enableCheckBox.isSelected() ? 1:0, startTimeBtn.getText(), endTimeBtn.getText())) {
+ if(memory == null) {
+ JOptionPane.showMessageDialog(null, Res.string().getSucceedModifyCard(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ dispose();
+ } else {
+ if(GateModule.modifyFaceInfo(userIdTextField.getText(), memory)) {
+ JOptionPane.showMessageDialog(null, Res.string().getSucceedModifyCardAndPerson(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ dispose();
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getSucceedModifyCardButFailedModifyPerson() + " : " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getFailedModifyCard() + " : " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ });
+
+ // 取消
+ cancelBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ clear();
+ dispose();
+ }
+ });
+ }
+ }
+
+ /**
+ * 选择图片
+ */
+ private class ImagePanel extends JPanel {
+
+ private static final long serialVersionUID = 1L;
+
+ public ImagePanel() {
+ BorderEx.set(this, Res.string().getPersonPicture(), 4);
+ Dimension dimension = new Dimension();
+ dimension.width = 250;
+ setPreferredSize(dimension);
+ setLayout(new BorderLayout());
+
+ addImagePanel = new PaintPanel(); // 添加的人员信息图片显示
+ selectImageBtn = new JButton(Res.string().getSelectPicture());
+ add(addImagePanel, BorderLayout.CENTER);
+ add(selectImageBtn, BorderLayout.SOUTH);
+
+ // 选择图片,获取图片的信息
+ selectImageBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ // 选择图片,获取图片路径,并在界面显示
+ picPath = ToolKits.openPictureFile(addImagePanel);
+
+ if(!picPath.isEmpty()) {
+ try {
+ memory = ToolKits.readPictureFile(picPath);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+ });
+ }
+ }
+
+ /**
+ * 界面显示要修改的卡信息
+ */
+ private void showCardInfo() {
+ // 卡号
+ cardNoTextField.setText(vector.get(1).toString());
+
+ // 卡名
+ cardNameTextField.setText(vector.get(2).toString());
+
+ // 用户ID
+ userIdTextField.setText(vector.get(4).toString());
+
+ // 卡密码
+ cardPasswdField.setText(vector.get(5).toString());
+
+ // 卡状态
+ cardStatusComboBox.setSelectedIndex(Res.string().getCardStatusChomBoxIndex(vector.get(6).toString()));
+
+ // 卡类型
+ cardTypeComboBox.setSelectedIndex(Res.string().getCardTypeChomBoxIndex(vector.get(7).toString()));
+
+ // 使用次数
+ useTimesTextField.setText(vector.get(8).toString());
+
+ // 是否首卡
+ if(vector.get(9).toString().equals(Res.string().getFirstEnter())) {
+ firstEnterCheckBox.setSelected(true);
+ } else {
+ firstEnterCheckBox.setSelected(false);
+ }
+
+ // 是否有效
+ if(vector.get(10).toString().equals(Res.string().getValid())) {
+ enableCheckBox.setSelected(true);
+ } else {
+ enableCheckBox.setSelected(false);
+ }
+
+ // 有效开始时间
+ startTimeBtn.setText(vector.get(11).toString());
+
+ // 有效结束时间
+ endTimeBtn.setText(vector.get(12).toString());
+ }
+
+ private void clear() {
+ memory = null;
+ vector = null;
+ picPath = "";
+ }
+
+ private PaintPanel addImagePanel;
+ private JButton selectImageBtn;
+
+ private JTextField cardNoTextField;
+ private JTextField userIdTextField;
+ private JTextField cardNameTextField;
+ private JPasswordField cardPasswdField;
+ private JComboBox cardStatusComboBox;
+ private JComboBox cardTypeComboBox;
+ private JTextField useTimesTextField;
+ private JCheckBox firstEnterCheckBox;
+ private JCheckBox enableCheckBox;
+ private DateChooserJButton startTimeBtn;
+ private DateChooserJButton endTimeBtn;
+
+ private JButton modifyBtn;
+ private JButton cancelBtn;
+}
diff --git a/src/main/java/com/netsdk/demo/frame/HumanNumberStatistic.java b/src/main/java/com/netsdk/demo/frame/HumanNumberStatistic.java
new file mode 100644
index 0000000..f13af8c
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/HumanNumberStatistic.java
@@ -0,0 +1,711 @@
+package com.netsdk.demo.frame;
+
+import com.sun.jna.Pointer;
+import com.netsdk.common.*;
+import com.netsdk.demo.module.*;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+
+import javax.swing.*;
+import javax.swing.border.EmptyBorder;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+
+import java.awt.*;
+import java.awt.event.*;
+import java.util.*;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * 人数统计事件 demo
+ */
+class HumanNumberStatisticFrame extends JFrame {
+
+ private static final long serialVersionUID = 1L;
+
+
+ /*
+ * 界面、SDK初始化及登录
+ */
+ public HumanNumberStatisticFrame() {
+ setTitle(Res.string().getHumanNumberStatistic());
+ setLayout(new BorderLayout());
+ pack();
+ setSize(1080, 560);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ LoginModule.init(disConnectCB, haveReConnectCB); // 打开工程,SDK初始化,注册断线和重连回调函数
+
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ loginPanel = new LoginPanel();
+ humanStatisticPanel = new HumanStatisticPanel();
+
+ add(loginPanel, BorderLayout.NORTH);
+ add(humanStatisticPanel, BorderLayout.CENTER);
+
+ // 调用按钮登录事件
+ loginPanel.addLoginBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if (loginPanel.checkLoginText()) {
+ if (login()) {
+ mainFrame = ToolKits.getFrame(e);
+ mainFrame.setTitle(Res.string().getHumanNumberStatistic() + " : " + Res.string().getOnline());
+ }
+ }
+ }
+ });
+ // 调用按钮登出事件
+ loginPanel.addLogoutBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ mainFrame.setTitle(Res.string().getHumanNumberStatistic());
+ logout();
+ }
+ });
+
+ // 注册窗体清出事件
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ RealPlayModule.stopRealPlay(m_hPlayHandle); // 退出句柄
+ FaceRecognitionModule.renderPrivateData(m_hPlayHandle, 0); // 关闭规则框
+ VideoStateSummaryModule.detachAllVideoStatSummary(); // 退订事件
+ LoginModule.logout(); // 退出
+ LoginModule.cleanup(); // 关闭工程,释放资源
+ dispose();
+ // 返回主菜单
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+
+ /////////////////////////////// 登录相关 //////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////
+
+ // 设备断线通知回调
+ private static DisConnectCallBack disConnectCB = new DisConnectCallBack();
+
+ // 网络连接恢复
+ private static HaveReConnectCallBack haveReConnectCB = new HaveReConnectCallBack();
+
+ private Vector chnList = new Vector();
+
+ // 预览句柄
+ public static NetSDKLib.LLong m_hPlayHandle = new NetSDKLib.LLong(0);
+
+ // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数
+ private static class DisConnectCallBack implements NetSDKLib.fDisConnect {
+ public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnectCallBack!\n", pchDVRIP, nDVRPort);
+ // 断线提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ mainFrame.setTitle(Res.string().getHumanNumberStatistic() + " : " + Res.string().getDisConnectReconnecting());
+ }
+ });
+ }
+
+ }
+
+ // 网络连接恢复,设备重连成功回调
+ // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数
+ private static class HaveReConnectCallBack implements NetSDKLib.fHaveReConnect {
+ public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+
+ // 重连提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ mainFrame.setTitle(Res.string().getHumanNumberStatistic() + " : " + Res.string().getOnline());
+ }
+ });
+
+ // 断线后需要重新订阅
+ ExecutorService service = Executors.newSingleThreadExecutor();
+ service.execute(new Runnable() {
+ @Override
+ public void run() {
+
+ if (b_RealPlay) { // 如果断前正在预览
+ stopRealPlay(); // 退出预览
+ realPlay(); // 重新开启预览
+ }
+
+ if (b_Attachment) { // 如果断前正在订阅
+ // 重订阅事件
+ VideoStateSummaryModule.reAttachAllVideoStatSummary(humanNumberStatisticCB);
+ setAttachBtnTextEnable();
+ }
+ }
+ });
+ service.shutdown();
+ }
+
+ }
+
+ // 登录
+ public boolean login() {
+ if (LoginModule.login(loginPanel.ipTextArea.getText(),
+ Integer.parseInt(loginPanel.portTextArea.getText()),
+ loginPanel.nameTextArea.getText(),
+ new String(loginPanel.passwordTextArea.getPassword()))) {
+
+ loginPanel.setButtonEnable(true);
+ setButtonEnable(true);
+
+ final int chanNum = LoginModule.m_stDeviceInfo.byChanNum;
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ // 更新列表长度
+ int listSize = Math.max(chanNum, 32);
+ groupListPanel.remove(scrollPane);
+ groupListPanel.creatGroupInfoPanel(listSize);
+
+ // 登陆成功,将通道添加到控件
+ for (int i = 0; i < chanNum; i++) {
+ chnList.add(Res.string().getChannel() + " " + String.valueOf(i + 1));
+ SummaryInfo summaryInfo = new SummaryInfo();
+ summaryInfo.nChannelID = i;
+ EventDisplay.dataList.add(summaryInfo);
+ }
+ chnComboBox.setModel(new DefaultComboBoxModel(chnList));
+
+ setEnableAllInnerComponent(controlPanel, true);
+
+ EventDisplay.setEventInfo(groupInfoTable, EventDisplay.dataList);
+ }
+ });
+
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ return true;
+ }
+
+ // 登出
+ public void logout() {
+
+ VideoStateSummaryModule.detachAllVideoStatSummary(); // 退订阅
+ stopRealPlay(); //退出播放
+ LoginModule.logout(); // 退出登录
+
+ chnList.clear(); // 清除通道号列表
+ EventDisplay.clearEventInfoList(); // 清除事件列表数据
+ chnComboBox.setModel(new DefaultComboBoxModel());
+
+ loginPanel.setButtonEnable(false);
+ setAttachBtnTextDisable();
+ setEnableAllInnerComponent(controlPanel, false);
+ }
+
+ /////////////////////////////// 人数统计事件 ////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////
+
+ private static boolean b_RealPlay = false;
+ private static boolean b_Attachment = false;
+
+ /*
+ * 一级面板:人数统计控制面板
+ */
+ private class HumanStatisticPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public HumanStatisticPanel() {
+ setLayout(new BorderLayout());
+ Dimension dim = getPreferredSize();
+ dim.width = 320;
+ setPreferredSize(dim);
+
+ humanStatisticAttachPanel = new HumanStatisticControlPanel(); // 人数统计控制面板
+ realPanel = new RealPanel(); // 实时显示面啊
+ groupListPanel = new GroupListPanel(); // 事件展示面板
+
+ add(humanStatisticAttachPanel, BorderLayout.NORTH);
+ add(realPanel, BorderLayout.EAST);
+ add(groupListPanel, BorderLayout.CENTER);
+ }
+ }
+
+ /*
+ * 二级面板: 控制面板 通道、码流设置,事件订阅
+ */
+ private class HumanStatisticControlPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public HumanStatisticControlPanel() {
+ BorderEx.set(this, Res.string().getHumanNumberStatisticAttach(), 2);
+ setLayout(new FlowLayout());
+
+ /* 预览控制面板 */
+ controlPanel = new Panel();
+ add(controlPanel);
+
+ chnLabel = new JLabel(Res.string().getChannel());
+ chnComboBox = new JComboBox();
+
+ streamLabel = new JLabel(Res.string().getStreamType());
+ String[] stream = {Res.string().getMasterStream(), Res.string().getSubStream()};
+ streamComboBox = new JComboBox(stream);
+ realPlayBtn = new JButton(Res.string().getStartRealPlay());
+ attachBtn = new JButton(Res.string().getAttach());
+ clearBtn = new JButton(Res.string().getHumanNumberStatisticEventClearOSD());
+
+ controlPanel.setLayout(new FlowLayout());
+ controlPanel.add(chnLabel);
+ controlPanel.add(chnComboBox);
+ controlPanel.add(streamLabel);
+ controlPanel.add(streamComboBox);
+ controlPanel.add(realPlayBtn);
+ controlPanel.add(attachBtn);
+ controlPanel.add(clearBtn);
+
+ chnComboBox.setPreferredSize(new Dimension(90, 20));
+ streamComboBox.setPreferredSize(new Dimension(120, 20));
+ realPlayBtn.setPreferredSize(new Dimension(120, 20));
+ attachBtn.setPreferredSize(new Dimension(120, 20));
+ clearBtn.setPreferredSize(new Dimension(120, 20));
+
+ chnComboBox.setEnabled(false);
+ streamComboBox.setEnabled(false);
+ realPlayBtn.setEnabled(false);
+ attachBtn.setEnabled(false);
+ clearBtn.setEnabled(false);
+
+ realPlayBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ realPlay();
+ }
+ });
+
+ attachBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+
+ int channel = chnComboBox.getSelectedIndex();
+
+ if (!VideoStateSummaryModule.channelAttached(channel)) {
+ if (VideoStateSummaryModule.attachVideoStatSummary(channel, humanNumberStatisticCB)) {
+ setAttachBtnTextEnable();
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ } else {
+ if (VideoStateSummaryModule.detachVideoStatSummary(channel)) {
+ setAttachBtnTextDisable();
+ SummaryInfo info = new SummaryInfo();
+ info.nChannelID = channel;
+ EventDisplay.dataList.add(channel, info);
+ EventDisplay.dataList.remove(channel + 1);
+ EventDisplay.setEventInfo(groupInfoTable, EventDisplay.dataList);
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ }
+ });
+
+ // 添加下拉框事件监听器
+ chnComboBox.addItemListener(new ItemListener() {
+ @Override
+ public void itemStateChanged(ItemEvent e) {
+ if (e.getStateChange() == ItemEvent.SELECTED) {
+ int channel = chnComboBox.getSelectedIndex();
+ if (VideoStateSummaryModule.channelAttached(channel)) {
+ setAttachBtnTextEnable();
+ } else {
+ setAttachBtnTextDisable();
+ }
+ }
+ }
+ });
+
+ clearBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ clearSummaryInfo();
+ }
+ });
+ }
+ }
+
+ private static void setRealPlayBtnTextEnable() {
+ b_RealPlay = true;
+ realPlayBtn.setText(Res.string().getStopRealPlay());
+ }
+
+ private static void setRealPlayBtnTextDisable() {
+ b_RealPlay = false;
+ realPlayBtn.setText(Res.string().getStartRealPlay());
+ }
+
+ private static void setAttachBtnTextEnable() {
+ b_Attachment = VideoStateSummaryModule.getM_hAttachMap().size() > 0;
+ attachBtn.setText(Res.string().getDetach());
+ }
+
+ private static void setAttachBtnTextDisable() {
+ b_Attachment = VideoStateSummaryModule.getM_hAttachMap().size() > 0;
+ attachBtn.setText(Res.string().getAttach());
+ }
+
+ private static void setButtonEnable(boolean bln) {
+ realPlayWindow.setEnabled(bln);
+ chnComboBox.setEnabled(bln);
+ streamComboBox.setEnabled(bln);
+ realPlayBtn.setEnabled(bln);
+ attachBtn.setEnabled(bln);
+ clearBtn.setEnabled(bln);
+ }
+
+ // 启用/禁用 Container 内所有组件
+ public static void setEnableAllInnerComponent(Component container, boolean enable) {
+ for (Component component : getComponents(container)) {
+ component.setEnabled(enable);
+ }
+ }
+
+ // 获取 Swing Container 内所有的非 Container 组件
+ public static Component[] getComponents(Component container) {
+ ArrayList list = null;
+
+ try {
+ list = new ArrayList(Arrays.asList(
+ ((Container) container).getComponents()));
+ for (int index = 0; index < list.size(); index++) {
+ list.addAll(Arrays.asList(getComponents(list.get(index))));
+ }
+ } catch (ClassCastException e) {
+ list = new ArrayList();
+ }
+
+ return list.toArray(new Component[0]);
+ }
+
+ private void clearSummaryInfo() {
+ VideoStateSummaryModule.clearVideoStateSummary(chnComboBox.getSelectedIndex());
+ }
+
+ /*
+ * 二级面板:预览面板
+ */
+ private class RealPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public RealPanel() {
+ BorderEx.set(this, Res.string().getRealplay(), 2);
+ Dimension dim = this.getPreferredSize();
+ dim.width = 420;
+ this.setPreferredSize(dim);
+ this.setLayout(new BorderLayout());
+
+ realPlayPanel = new JPanel();
+ add(realPlayPanel, BorderLayout.CENTER);
+
+ /************ 预览面板 **************/
+ realPlayPanel.setLayout(new BorderLayout());
+ realPlayPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
+ realPlayWindow = new Panel();
+ realPlayWindow.setBackground(Color.GRAY);
+ realPlayWindow.setSize(480, 480);
+ realPlayPanel.add(realPlayWindow, BorderLayout.CENTER);
+ }
+ }
+
+ // 预览
+ public static void realPlay() {
+ if (!b_RealPlay) {
+ m_hPlayHandle = RealPlayModule.startRealPlay(
+ chnComboBox.getSelectedIndex(),
+ streamComboBox.getSelectedIndex() == 0 ? 0 : 3,
+ realPlayWindow);
+
+ if (m_hPlayHandle.longValue() != 0) { // 正常状态下句柄不为空
+ FaceRecognitionModule.renderPrivateData(m_hPlayHandle, 1); // 开启规则框
+ realPlayWindow.repaint();
+ chnComboBox.setEnabled(false);
+ streamComboBox.setEnabled(false);
+ setRealPlayBtnTextEnable();
+ }
+ } else {
+ stopRealPlay();
+ }
+ }
+
+ public static void stopRealPlay() {
+ RealPlayModule.stopRealPlay(m_hPlayHandle); // 为空则说明失败,退出拉流
+ FaceRecognitionModule.renderPrivateData(m_hPlayHandle, 0); // 关闭规则框
+ realPlayWindow.repaint();
+ chnComboBox.setEnabled(true);
+ streamComboBox.setEnabled(true);
+ setRealPlayBtnTextDisable();
+ }
+
+ // 搜索数据列表
+ public class GroupListPanel extends JPanel {
+
+ private Object[][] statisticData = null; // 人脸库列表
+
+ private final String[] groupName = {
+ Res.string().getHumanNumberStatisticEventChannel(),
+ Res.string().getHumanNumberStatisticEventTime(),
+ Res.string().getHumanNumberStatisticEventHourIn(),
+ Res.string().getHumanNumberStatisticEventTodayIn(),
+ Res.string().getHumanNumberStatisticEventTotalIn(),
+ Res.string().getHumanNumberStatisticEventHourOut(),
+ Res.string().getHumanNumberStatisticEventTodayOut(),
+ Res.string().getHumanNumberStatisticEventTotalOut()
+ };
+ private DefaultTableModel groupInfoModel;
+
+ public GroupListPanel() {
+ BorderEx.set(this, Res.string().getHumanNumberStatisticEventTitle(), 2);
+ setLayout(new BorderLayout());
+
+ statisticData = new Object[32][9];
+ creatGroupInfoPanel(32);
+ }
+
+ private void creatGroupInfoPanel(int listSize) {
+ statisticData = new Object[listSize][9]; // 人脸库列表集合修改
+ groupInfoModel = new DefaultTableModel(statisticData, groupName);
+ groupInfoTable = new JTable(groupInfoModel) {
+ @Override // 不可编辑
+ public boolean isCellEditable(int row, int column) {
+ return false;
+ }
+ };
+
+ groupInfoTable.getColumnModel().getColumn(0).setPreferredWidth(10);
+ groupInfoTable.getColumnModel().getColumn(1).setPreferredWidth(80);
+ groupInfoTable.getColumnModel().getColumn(2).setPreferredWidth(10);
+ groupInfoTable.getColumnModel().getColumn(3).setPreferredWidth(10);
+ groupInfoTable.getColumnModel().getColumn(4).setPreferredWidth(10);
+ groupInfoTable.getColumnModel().getColumn(5).setPreferredWidth(10);
+ groupInfoTable.getColumnModel().getColumn(6).setPreferredWidth(10);
+ groupInfoTable.getColumnModel().getColumn(7).setPreferredWidth(10);
+
+ groupInfoTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行
+
+ // 列表显示居中
+ DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer();
+ dCellRenderer.setHorizontalAlignment(JLabel.CENTER);
+ groupInfoTable.setDefaultRenderer(Object.class, dCellRenderer);
+
+ scrollPane = new JScrollPane(groupInfoTable);
+ this.add(scrollPane, BorderLayout.CENTER);
+ }
+ }
+
+ // 人数统计回调事件
+ public static fHumanNumberStatisticCallBack humanNumberStatisticCB = fHumanNumberStatisticCallBack.getInstance();
+
+ public static class fHumanNumberStatisticCallBack implements NetSDKLib.fVideoStatSumCallBack {
+
+ private static fHumanNumberStatisticCallBack instance = new fHumanNumberStatisticCallBack();
+
+ public static fHumanNumberStatisticCallBack getInstance() {
+ return instance;
+ }
+
+ private EventTaskCommonQueue eventTaskQueue = new EventTaskCommonQueue();
+
+ public fHumanNumberStatisticCallBack() {
+ eventTaskQueue.init();
+ }
+
+ public void invoke(NetSDKLib.LLong lAttachHandle, NetSDKLib.NET_VIDEOSTAT_SUMMARY stVideoState, int dwBufLen, Pointer dwUser) {
+
+ SummaryInfo summaryInfo = new SummaryInfo(
+ stVideoState.nChannelID, stVideoState.stuTime.toStringTime(),
+ stVideoState.stuEnteredSubtotal.nToday,
+ stVideoState.stuEnteredSubtotal.nHour,
+ stVideoState.stuEnteredSubtotal.nTotal,
+ stVideoState.stuExitedSubtotal.nToday,
+ stVideoState.stuExitedSubtotal.nHour,
+ stVideoState.stuExitedSubtotal.nTotal);
+ System.out.printf("Channel[%d] GetTime[%s]\n" +
+ "People In Information[Total[%d] Hour[%d] Today[%d]]\n" +
+ "People Out Information[Total[%d] Hour[%d] Today[%d]]\n",
+ summaryInfo.nChannelID, summaryInfo.eventTime,
+ summaryInfo.enteredTotal, summaryInfo.enteredHour, summaryInfo.enteredToday,
+ summaryInfo.exitedTotal, summaryInfo.exitedHour, summaryInfo.exitedToday);
+ eventTaskQueue.addEvent(new EventDisplay(summaryInfo));
+ }
+ }
+
+ private static class SummaryInfo {
+
+ public int nChannelID;
+ public String eventTime;
+ public int enteredToday;
+ public int enteredHour;
+ public int enteredTotal;
+ public int exitedToday;
+ public int exitedHour;
+ public int exitedTotal;
+
+ public SummaryInfo() {
+ }
+
+ public SummaryInfo(int nChannelID, String eventTime,
+ int enteredToday, int enteredHour,
+ int enteredTotal, int exitedToday,
+ int exitedHour, int exitedTotal) {
+ this.nChannelID = nChannelID;
+ this.eventTime = eventTime;
+ this.enteredToday = enteredToday;
+ this.enteredHour = enteredHour;
+ this.enteredTotal = enteredTotal;
+ this.exitedToday = exitedToday;
+ this.exitedHour = exitedHour;
+ this.exitedTotal = exitedTotal;
+ }
+
+ }
+
+ private static class EventDisplay implements EventTaskHandler {
+
+ private static List dataList = new LinkedList();
+
+ private int getMaxSize() {
+ int channelNum = LoginModule.m_stDeviceInfo.byChanNum;
+ return Math.max(channelNum, 32);
+ }
+
+ private static final Object lockObj = new Object();
+
+ private final SummaryInfo summaryInfo;
+
+ public EventDisplay(SummaryInfo Info) {
+ this.summaryInfo = Info;
+ }
+
+ @Override
+ public void eventTaskProcess() {
+ InsertOrUpdateEventInfo(summaryInfo);
+ }
+
+ private void InsertOrUpdateEventInfo(SummaryInfo summaryInfo) {
+
+ synchronized (lockObj) {
+ dataList.add(summaryInfo.nChannelID, summaryInfo);
+ dataList.remove(summaryInfo.nChannelID + 1);
+ if (dataList.size() > getMaxSize()) {
+ dataList.remove(getMaxSize());
+ }
+ setEventInfo(groupInfoTable, dataList);
+ }
+ }
+
+ private static void setEventInfo(JTable groupInfoTable, List dataList) {
+ clearTableModel(groupInfoTable);
+
+ for (int i = 0; i < dataList.size(); i++) {
+ groupInfoTable.setValueAt(dataList.get(i).nChannelID + 1, i, 0);
+ groupInfoTable.setValueAt(dataList.get(i).eventTime, i, 1);
+ groupInfoTable.setValueAt(dataList.get(i).enteredHour, i, 2);
+ groupInfoTable.setValueAt(dataList.get(i).enteredToday, i, 3);
+ groupInfoTable.setValueAt(dataList.get(i).enteredTotal, i, 4);
+ groupInfoTable.setValueAt(dataList.get(i).exitedHour, i, 5);
+ groupInfoTable.setValueAt(dataList.get(i).exitedToday, i, 6);
+ groupInfoTable.setValueAt(dataList.get(i).exitedTotal, i, 7);
+ }
+
+ }
+
+ // 清空 DefaultTableModel
+ public static void clearTableModel(JTable jTableModel) {
+ int rowCount = jTableModel.getRowCount();
+ int columnCount = jTableModel.getColumnCount();
+ //清空DefaultTableModel中的内容
+ for (int i = 0; i < rowCount; i++)//表格中的行数
+ {
+ for (int j = 0; j < columnCount; j++) {//表格中的列数
+ jTableModel.setValueAt(" ", i, j);//逐个清空
+ }
+ }
+ }
+
+ private static void clearEventInfoList() {
+ synchronized (lockObj) {
+ dataList.clear();
+ setEventInfo(groupInfoTable, dataList);
+ }
+ }
+
+ }
+
+ /////////////////////////////// 界面控件定义 ////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////
+
+ /**********************************************************************
+ * 主界面窗口(mainFrame): mainFrame
+ * 1) 登录(login): loginPanel
+ * 2) 人数事件统计(humanStatistic): humanStatisticPanel
+ * (1) 控制面板(HumanStatisticAttach): HumanStatisticControlPanel
+ * (2) 预览(realPlay): realPanel
+ * (3) 事件信息展示面板(eventInfo): groupListPanel
+ **********************************************************************/
+
+ ///////////////////// 主面板 /////////////////////
+
+ private static JFrame mainFrame = new JFrame();
+
+ ///////////////////// 一级面板 /////////////////////
+
+ /* 登录面板 */
+ private LoginPanel loginPanel;
+
+ /* 人数统计面板 */
+ private HumanStatisticPanel humanStatisticPanel;
+
+ ///////////////////// 二级面板 /////////////////////
+
+ /* 人数统计面板 */
+ private HumanStatisticControlPanel humanStatisticAttachPanel;
+ private Panel controlPanel;
+ private JLabel chnLabel;
+ private static JComboBox chnComboBox;
+ private JLabel streamLabel;
+ private static JComboBox streamComboBox;
+ private static JButton realPlayBtn;
+ private static JButton attachBtn;
+ private static JButton clearBtn;
+
+ /* 实时预览面板 */
+ private RealPanel realPanel;
+ private JPanel realPlayPanel;
+ private static Panel realPlayWindow;
+
+
+ /* 事件数据展示面板 */
+ private static JTable groupInfoTable;
+ private GroupListPanel groupListPanel;
+ private JScrollPane scrollPane;
+}
+
+public class HumanNumberStatistic {
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ HumanNumberStatisticFrame demo = new HumanNumberStatisticFrame();
+ demo.setVisible(true);
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/demo/frame/Main.java b/src/main/java/com/netsdk/demo/frame/Main.java
new file mode 100644
index 0000000..af3b2bb
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/Main.java
@@ -0,0 +1,23 @@
+package com.netsdk.demo.frame;
+
+import javax.swing.SwingUtilities;
+
+import com.netsdk.common.SwitchLanguage;
+import com.netsdk.lib.NetSDKLib;
+
+
+public class Main {
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ if(NetSDKLib.NETSDK_INSTANCE != null
+ && NetSDKLib.CONFIG_INSTANCE != null) {
+ System.setProperty("java.awt.im.style", "on-the-spot"); // 去除中文输入弹出框
+ SwitchLanguage demo = new SwitchLanguage();
+ demo.setVisible(true);
+ }
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/demo/frame/PTZControl.java b/src/main/java/com/netsdk/demo/frame/PTZControl.java
new file mode 100644
index 0000000..dcd4142
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/PTZControl.java
@@ -0,0 +1,956 @@
+package com.netsdk.demo.frame;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.Panel;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.util.Vector;
+
+import javax.imageio.ImageIO;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.border.EmptyBorder;
+
+import com.netsdk.common.*;
+import com.netsdk.demo.module.*;
+import com.netsdk.lib.*;
+import com.netsdk.lib.NetSDKLib.LLong;
+
+import com.sun.jna.CallbackThreadInitializer;
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+
+/**
+ * 实时预览Demo
+ */
+class PTZControlFrame extends JFrame{
+ private static final long serialVersionUID = 1L;
+
+ private Vector chnlist = new Vector();
+
+ private boolean b_realplay = false;
+
+ // 设备断线通知回调
+ private static DisConnect disConnect = new DisConnect();
+
+ // 网络连接恢复
+ private static HaveReConnect haveReConnect = new HaveReConnect();
+
+ // 预览句柄
+ public static LLong m_hPlayHandle = new LLong(0);
+
+ // 获取界面窗口
+ private static JFrame frame = new JFrame();
+
+ public PTZControlFrame() {
+ setTitle(Res.string().getPTZ());
+ setLayout(new BorderLayout());
+ pack();
+ setSize(800, 560);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化
+
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ loginPanel = new LoginPanel();
+ realPanel = new RealPanel();
+ ptz_picPanel = new PTZ_PICPanel();
+
+ add(loginPanel, BorderLayout.NORTH);
+ add(realPanel, BorderLayout.CENTER);
+ add(ptz_picPanel, BorderLayout.EAST);
+
+ loginPanel.addLoginBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if(loginPanel.checkLoginText()) {
+ if(login()) {
+ frame = ToolKits.getFrame(e);
+ frame.setTitle(Res.string().getPTZ() + " : " + Res.string().getOnline());
+ }
+ }
+ }
+ });
+
+ loginPanel.addLogoutBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ frame.setTitle(Res.string().getPTZ());
+ logout();
+ }
+ });
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ RealPlayModule.stopRealPlay(m_hPlayHandle);
+ LoginModule.logout();
+ LoginModule.cleanup(); // 关闭工程,释放资源
+ dispose();
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+
+ /////////////////面板///////////////////
+ // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数
+ private static class DisConnect implements NetSDKLib.fDisConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+ // 断线提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getPTZ() + " : " + Res.string().getDisConnectReconnecting());
+ }
+ });
+ }
+ }
+
+ // 网络连接恢复,设备重连成功回调
+ // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数
+ private static class HaveReConnect implements NetSDKLib.fHaveReConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+
+ // 重连提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getPTZ() + " : " + Res.string().getOnline());
+ }
+ });
+ }
+ }
+
+ // 登录
+ public boolean login() {
+ Native.setCallbackThreadInitializer(m_SnapReceiveCB,
+ new CallbackThreadInitializer(false, false, "snapPicture callback thread"));
+ if(LoginModule.login(loginPanel.ipTextArea.getText(),
+ Integer.parseInt(loginPanel.portTextArea.getText()),
+ loginPanel.nameTextArea.getText(),
+ new String(loginPanel.passwordTextArea.getPassword()))) {
+
+ loginPanel.setButtonEnable(true);
+ setButtonEnable(true);
+
+ for(int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) {
+ chnlist.add(Res.string().getChannel() + " " + String.valueOf(i));
+ }
+
+ // 登陆成功,将通道添加到控件
+ chnComboBox.setModel(new DefaultComboBoxModel(chnlist));
+
+ CapturePictureModule.setSnapRevCallBack(m_SnapReceiveCB);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ return true;
+ }
+
+ // 登出
+ public void logout() {
+ RealPlayModule.stopRealPlay(m_hPlayHandle);
+ LoginModule.logout();
+
+ loginPanel.setButtonEnable(false);
+ setButtonEnable(false);
+ realPlayWindow.repaint();
+ pictureShowWindow.setOpaque(true);
+ pictureShowWindow.repaint();
+
+ b_realplay = false;
+ realplayBtn.setText(Res.string().getStartRealPlay());
+
+ for(int i = 0; i < LoginModule.m_stDeviceInfo.byChanNum; i++) {
+ chnlist.clear();
+ }
+
+ chnComboBox.setModel(new DefaultComboBoxModel());
+ }
+
+ /*
+ * 预览界面通道、码流设置 以及抓图面板
+ */
+ private class RealPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public RealPanel() {
+ BorderEx.set(this, Res.string().getRealplay(), 2);
+ setLayout(new BorderLayout());
+
+ channelPanel = new Panel();
+ realplayPanel = new JPanel();
+
+ add(channelPanel, BorderLayout.SOUTH);
+ add(realplayPanel, BorderLayout.CENTER);
+
+ /************ 预览面板 **************/
+ realplayPanel.setLayout(new BorderLayout());
+ realplayPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
+ realPlayWindow = new Panel();
+ realPlayWindow.setBackground(Color.GRAY);
+ realplayPanel.add(realPlayWindow, BorderLayout.CENTER);
+
+ /************ 通道、码流面板 **************/
+ chnlabel = new JLabel(Res.string().getChannel());
+ chnComboBox = new JComboBox();
+
+ streamLabel = new JLabel(Res.string().getStreamType());
+ String[] stream = {Res.string().getMasterStream(), Res.string().getSubStream()};
+ streamComboBox = new JComboBox(stream);
+
+ realplayBtn = new JButton(Res.string().getStartRealPlay());
+
+ channelPanel.setLayout(new FlowLayout());
+ channelPanel.add(chnlabel);
+ channelPanel.add(chnComboBox);
+ channelPanel.add(streamLabel);
+ channelPanel.add(streamComboBox);
+ channelPanel.add(realplayBtn);
+
+ chnComboBox.setPreferredSize(new Dimension(90, 20));
+ streamComboBox.setPreferredSize(new Dimension(90, 20));
+ realplayBtn.setPreferredSize(new Dimension(120, 20));
+
+ realPlayWindow.setEnabled(false);
+ chnComboBox.setEnabled(false);
+ streamComboBox.setEnabled(false);
+ realplayBtn.setEnabled(false);
+
+ realplayBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ realplay();
+ }
+ });
+ }
+ }
+
+ // 预览
+ public void realplay() {
+ if(!b_realplay) {
+ m_hPlayHandle = RealPlayModule.startRealPlay(chnComboBox.getSelectedIndex(),
+ streamComboBox.getSelectedIndex()==0? 0:3,
+ realPlayWindow);
+ if(m_hPlayHandle.longValue() != 0) {
+ realPlayWindow.repaint();
+ b_realplay = true;
+ chnComboBox.setEnabled(false);
+ streamComboBox.setEnabled(false);
+ realplayBtn.setText(Res.string().getStopRealPlay());
+ }
+ } else {
+ RealPlayModule.stopRealPlay(m_hPlayHandle);
+ realPlayWindow.repaint();
+ b_realplay = false;
+ chnComboBox.setEnabled(true);
+ streamComboBox.setEnabled(true);
+ realplayBtn.setText(Res.string().getStartRealPlay());
+ }
+ }
+
+ /*
+ * 抓图显示与云台控制面板
+ */
+ private class PTZ_PICPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public PTZ_PICPanel() {
+ setLayout(new BorderLayout());
+ Dimension dim = getPreferredSize();
+ dim.width = 320;
+ setPreferredSize(dim);
+
+ picPanel = new PICPanel(); // 图片显示面板
+ ptzPanel = new PTZPanel(); // 云台面板
+
+ add(picPanel, BorderLayout.CENTER);
+ add(ptzPanel, BorderLayout.SOUTH);
+ }
+ }
+
+ /*
+ * 抓图显示面板
+ */
+ private class PICPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public PICPanel() {
+ BorderEx.set(this, Res.string().getCapturePicture(), 2);
+ setLayout(new BorderLayout());
+
+ pictureShowPanel = new JPanel();
+ snapPanel = new JPanel();
+
+ add(pictureShowPanel, BorderLayout.CENTER);
+ add(snapPanel, BorderLayout.SOUTH);
+
+ /************** 抓图按钮 ************/
+ snapPanel.setLayout(new BorderLayout());
+ snapPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
+ snapBtn = new JButton(Res.string().getRemoteCapture());
+ snapBtn.setPreferredSize(new Dimension(40, 23));
+ snapPanel.add(snapBtn, BorderLayout.CENTER);
+ snapBtn.setEnabled(false);
+
+ /************** 图片显示 ************/
+ pictureShowPanel.setLayout(new BorderLayout());
+ pictureShowPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
+ pictureShowWindow = new PaintPanel();
+ pictureShowPanel.add(pictureShowWindow, BorderLayout.CENTER);
+
+ snapBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ if(!CapturePictureModule.remoteCapturePicture(chnComboBox.getSelectedIndex())) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ });
+ }
+ }
+
+ /*
+ * 云台控制面板
+ */
+ private class PTZPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public PTZPanel() {
+ BorderEx.set(this, Res.string().getPTZControl(), 2);
+ setPreferredSize(new Dimension(40, 205));
+ setLayout(new GridLayout(2, 1));
+
+ directionPanel = new JPanel();
+ JPanel panel1 = new JPanel();
+ JPanel panel2 = new JPanel();
+ ptzCtrlPanel = new JPanel();
+
+ add(directionPanel);
+ add(ptzCtrlPanel);
+
+ directionPanel.setLayout(new BorderLayout());
+
+ directionPanel.add(panel1, BorderLayout.NORTH);
+ directionPanel.add(panel2, BorderLayout.CENTER);
+
+ /*************** 云台方向 **************/
+ panel1.setLayout(new BorderLayout());
+ panel1.setBorder(new EmptyBorder(0, 5, 0, 5));
+
+ panel2.setLayout(new GridLayout(3, 3));
+ panel2.setBorder(new EmptyBorder(0, 5, 0, 5));
+
+ leftUpBtn = new JButton(Res.string().getLeftUp());
+ upBtn = new JButton(Res.string().getUp());
+ rightUpBtn = new JButton(Res.string().getRightUp());
+ leftBtn = new JButton(Res.string().getLeft());
+ rightBtn = new JButton(Res.string().getRight());
+ leftDownBtn = new JButton(Res.string().getLeftDown());
+ downBtn = new JButton(Res.string().getDown());
+ rightDownBtn = new JButton(Res.string().getRightDown());
+ operateJLabel = new JLabel("", JLabel.CENTER);
+
+ String[] speed = {Res.string().getSpeed() + " 1",
+ Res.string().getSpeed() + " 2",
+ Res.string().getSpeed() + " 3",
+ Res.string().getSpeed() + " 4",
+ Res.string().getSpeed() + " 5",
+ Res.string().getSpeed() + " 6",
+ Res.string().getSpeed() + " 7",
+ Res.string().getSpeed() + " 8"};
+
+ speedComboBox = new JComboBox(speed);
+ speedComboBox.setSelectedIndex(4);
+ speedComboBox.setPreferredSize(new Dimension(40, 21));
+
+ panel1.add(speedComboBox, BorderLayout.CENTER);
+
+ panel2.add(leftUpBtn);
+ panel2.add(upBtn);
+ panel2.add(rightUpBtn);
+ panel2.add(leftBtn);
+ panel2.add(operateJLabel);
+ panel2.add(rightBtn);
+ panel2.add(leftDownBtn);
+ panel2.add(downBtn);
+ panel2.add(rightDownBtn);
+
+ leftUpBtn.setEnabled(false);
+ upBtn.setEnabled(false);
+ rightUpBtn.setEnabled(false);
+ leftBtn.setEnabled(false);
+ rightBtn.setEnabled(false);
+ leftDownBtn.setEnabled(false);
+ downBtn.setEnabled(false);
+ rightDownBtn.setEnabled(false);
+ speedComboBox.setEnabled(false);
+
+ /*************** 变焦、变倍、光圈 **************/
+ ptzCtrlPanel.setLayout(new GridLayout(3, 2));
+ ptzCtrlPanel.setBorder(new EmptyBorder(15, 5, 5, 5));
+ zoomAddBtn = new JButton(Res.string().getZoomAdd());
+ zoomDecBtn = new JButton(Res.string().getZoomDec());
+ focusAddBtn = new JButton(Res.string().getFocusAdd());
+ focusDecBtn = new JButton(Res.string().getFocusDec());
+ irisAddBtn = new JButton(Res.string().getIrisAdd());
+ irisDecBtn = new JButton(Res.string().getIrisDec());
+
+ ptzCtrlPanel.add(zoomAddBtn);
+ ptzCtrlPanel.add(zoomDecBtn);
+ ptzCtrlPanel.add(focusAddBtn);
+ ptzCtrlPanel.add(focusDecBtn);
+ ptzCtrlPanel.add(irisAddBtn);
+ ptzCtrlPanel.add(irisDecBtn);
+
+ zoomAddBtn.setEnabled(false);
+ zoomDecBtn.setEnabled(false);
+ focusAddBtn.setEnabled(false);
+ focusDecBtn.setEnabled(false);
+ irisAddBtn.setEnabled(false);
+ irisDecBtn.setEnabled(false);
+
+ // 向上
+ upBtn.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseExited(MouseEvent e) {
+ }
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ }
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ }
+ @Override
+ public void mousePressed(MouseEvent e) {
+ if(PtzControlModule.ptzControlUpStart(chnComboBox.getSelectedIndex(),
+ 0,
+ speedComboBox.getSelectedIndex())) {
+ operateJLabel.setText(Res.string().getSucceed());
+ } else {
+ operateJLabel.setText(Res.string().getFailed());
+ }
+ }
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ PtzControlModule.ptzControlUpEnd(chnComboBox.getSelectedIndex());
+ operateJLabel.setText("");
+ }
+ });
+
+
+ // 向下
+ downBtn.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseExited(MouseEvent e) {
+ }
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ }
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ }
+ @Override
+ public void mousePressed(MouseEvent e) {
+ if(PtzControlModule.ptzControlDownStart(chnComboBox.getSelectedIndex(),
+ 0,
+ speedComboBox.getSelectedIndex())) {
+ operateJLabel.setText(Res.string().getSucceed());
+ } else {
+ operateJLabel.setText(Res.string().getFailed());
+ }
+ }
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ PtzControlModule.ptzControlDownEnd(chnComboBox.getSelectedIndex());
+ operateJLabel.setText("");
+ }
+ });
+
+
+ // 向左
+ leftBtn.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseExited(MouseEvent e) {
+ }
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ }
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ }
+ @Override
+ public void mousePressed(MouseEvent e) {
+ if(PtzControlModule.ptzControlLeftStart(chnComboBox.getSelectedIndex(),
+ 0,
+ speedComboBox.getSelectedIndex())) {
+ operateJLabel.setText(Res.string().getSucceed());
+ } else {
+ operateJLabel.setText(Res.string().getFailed());
+ }
+ }
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ PtzControlModule.ptzControlLeftEnd(chnComboBox.getSelectedIndex());
+ operateJLabel.setText("");
+ }
+ });
+
+ // 向右
+ rightBtn.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseExited(MouseEvent e) {
+ }
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ }
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ }
+ @Override
+ public void mousePressed(MouseEvent e) {
+ if(PtzControlModule.ptzControlRightStart(chnComboBox.getSelectedIndex(),
+ 0,
+ speedComboBox.getSelectedIndex())) {
+ operateJLabel.setText(Res.string().getSucceed());
+ } else {
+ operateJLabel.setText(Res.string().getFailed());
+ }
+ }
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ PtzControlModule.ptzControlRightEnd(chnComboBox.getSelectedIndex());
+ operateJLabel.setText("");
+ }
+ });
+
+ // 向左上
+ leftUpBtn.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseExited(MouseEvent e) {
+ }
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ }
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ }
+ @Override
+ public void mousePressed(MouseEvent e) {
+ if(PtzControlModule.ptzControlLeftUpStart(chnComboBox.getSelectedIndex(),
+ speedComboBox.getSelectedIndex(),
+ speedComboBox.getSelectedIndex())) {
+ operateJLabel.setText(Res.string().getSucceed());
+ } else {
+ operateJLabel.setText(Res.string().getFailed());
+ }
+ }
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ PtzControlModule.ptzControlLeftUpEnd(chnComboBox.getSelectedIndex());
+ operateJLabel.setText("");
+ }
+ });
+
+ // 向右上
+ rightUpBtn.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseExited(MouseEvent e) {
+ }
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ }
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ }
+ @Override
+ public void mousePressed(MouseEvent e) {
+ if(PtzControlModule.ptzControlRightUpStart(chnComboBox.getSelectedIndex(),
+ speedComboBox.getSelectedIndex(),
+ speedComboBox.getSelectedIndex())) {
+ operateJLabel.setText(Res.string().getSucceed());
+ } else {
+ operateJLabel.setText(Res.string().getFailed());
+ }
+ }
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ PtzControlModule.ptzControlRightUpEnd(chnComboBox.getSelectedIndex());
+ operateJLabel.setText("");
+ }
+ });
+
+ // 向左下
+ leftDownBtn.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseExited(MouseEvent e) {
+ }
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ }
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ }
+ @Override
+ public void mousePressed(MouseEvent e) {
+ if(PtzControlModule.ptzControlLeftDownStart(chnComboBox.getSelectedIndex(),
+ speedComboBox.getSelectedIndex(),
+ speedComboBox.getSelectedIndex())) {
+ operateJLabel.setText(Res.string().getSucceed());
+ } else {
+ operateJLabel.setText(Res.string().getFailed());
+ }
+ }
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ PtzControlModule.ptzControlLeftDownEnd(chnComboBox.getSelectedIndex());
+ operateJLabel.setText("");
+ }
+ });
+
+ // 向右下
+ rightDownBtn.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseExited(MouseEvent e) {
+ }
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ }
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ }
+ @Override
+ public void mousePressed(MouseEvent e) {
+ if(PtzControlModule.ptzControlRightDownStart(chnComboBox.getSelectedIndex(),
+ speedComboBox.getSelectedIndex(),
+ speedComboBox.getSelectedIndex())) {
+ operateJLabel.setText(Res.string().getSucceed());
+ } else {
+ operateJLabel.setText(Res.string().getFailed());
+ }
+ }
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ PtzControlModule.ptzControlRightDownEnd(chnComboBox.getSelectedIndex());
+ operateJLabel.setText("");
+ }
+ });
+
+ // 变倍+
+ zoomAddBtn.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseExited(MouseEvent e) {
+ }
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ }
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ }
+ @Override
+ public void mousePressed(MouseEvent e) {
+ if(PtzControlModule.ptzControlZoomAddStart(chnComboBox.getSelectedIndex(),
+ speedComboBox.getSelectedIndex())) {
+ operateJLabel.setText(Res.string().getSucceed());
+ } else {
+ operateJLabel.setText(Res.string().getFailed());
+ }
+ }
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ PtzControlModule.ptzControlZoomAddEnd(chnComboBox.getSelectedIndex());
+ operateJLabel.setText("");
+ }
+ });
+
+ // 变倍-
+ zoomDecBtn.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseExited(MouseEvent e) {
+ }
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ }
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ }
+ @Override
+ public void mousePressed(MouseEvent e) {
+ if(PtzControlModule.ptzControlZoomDecStart(chnComboBox.getSelectedIndex(),
+ speedComboBox.getSelectedIndex())) {
+ operateJLabel.setText(Res.string().getSucceed());
+ } else {
+ operateJLabel.setText(Res.string().getFailed());
+ }
+ }
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ PtzControlModule.ptzControlZoomDecEnd(chnComboBox.getSelectedIndex());
+ operateJLabel.setText("");
+ }
+ });
+
+ // 变焦+
+ focusAddBtn.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseExited(MouseEvent e) {
+ }
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ }
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ }
+ @Override
+ public void mousePressed(MouseEvent e) {
+ if(PtzControlModule.ptzControlFocusAddStart(chnComboBox.getSelectedIndex(),
+ speedComboBox.getSelectedIndex())) {
+ operateJLabel.setText(Res.string().getSucceed());
+ } else {
+ operateJLabel.setText(Res.string().getFailed());
+ }
+ }
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ PtzControlModule.ptzControlFocusAddEnd(chnComboBox.getSelectedIndex());
+ operateJLabel.setText("");
+ }
+ });
+
+ // 变焦-
+ focusDecBtn.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseExited(MouseEvent e) {
+ }
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ }
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ }
+ @Override
+ public void mousePressed(MouseEvent e) {
+ if(PtzControlModule.ptzControlFocusDecStart(chnComboBox.getSelectedIndex(),
+ speedComboBox.getSelectedIndex())) {
+ operateJLabel.setText(Res.string().getSucceed());
+ } else {
+ operateJLabel.setText(Res.string().getFailed());
+ }
+ }
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ PtzControlModule.ptzControlFocusDecEnd(chnComboBox.getSelectedIndex());
+ operateJLabel.setText("");
+ }
+ });
+
+ // 光圈+
+ irisAddBtn.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseExited(MouseEvent e) {
+ }
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ }
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ }
+ @Override
+ public void mousePressed(MouseEvent e) {
+ if(PtzControlModule.ptzControlIrisAddStart(chnComboBox.getSelectedIndex(),
+ speedComboBox.getSelectedIndex())) {
+ operateJLabel.setText(Res.string().getSucceed());
+ } else {
+ operateJLabel.setText(Res.string().getFailed());
+ }
+ }
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ PtzControlModule.ptzControlIrisAddEnd(chnComboBox.getSelectedIndex());
+ operateJLabel.setText("");
+ }
+ });
+
+ // 光圈-
+ irisDecBtn.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseExited(MouseEvent e) {
+ }
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ }
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ }
+ @Override
+ public void mousePressed(MouseEvent e) {
+ if(PtzControlModule.ptzControlIrisDecStart(chnComboBox.getSelectedIndex(),
+ speedComboBox.getSelectedIndex())) {
+ operateJLabel.setText(Res.string().getSucceed());
+ } else {
+ operateJLabel.setText(Res.string().getFailed());
+ }
+ }
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ PtzControlModule.ptzControlIrisDecEnd(chnComboBox.getSelectedIndex());
+ operateJLabel.setText("");
+ }
+ });
+ }
+ }
+
+ public fSnapReceiveCB m_SnapReceiveCB = new fSnapReceiveCB();
+ public class fSnapReceiveCB implements NetSDKLib.fSnapRev{
+ BufferedImage bufferedImage = null;
+ public void invoke( LLong lLoginID, Pointer pBuf, int RevLen, int EncodeType, int CmdSerial, Pointer dwUser) {
+ if(pBuf != null && RevLen > 0) {
+ String strFileName = SavePath.getSavePath().getSaveCapturePath();
+
+ System.out.println("strFileName = " + strFileName);
+
+ byte[] buf = pBuf.getByteArray(0, RevLen);
+ ByteArrayInputStream byteArrInput = new ByteArrayInputStream(buf);
+ try {
+ bufferedImage = ImageIO.read(byteArrInput);
+ if(bufferedImage == null) {
+ return;
+ }
+ ImageIO.write(bufferedImage, "jpg", new File(strFileName));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ // 界面显示抓图
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ pictureShowWindow.setOpaque(false);
+ pictureShowWindow.setImage(bufferedImage);
+ pictureShowWindow.repaint();
+ }
+ });
+ }
+ }
+ }
+
+ private void setButtonEnable(boolean bln) {
+ snapBtn.setEnabled(bln);
+ leftUpBtn.setEnabled(bln);
+ upBtn.setEnabled(bln);
+ rightUpBtn.setEnabled(bln);
+ leftBtn.setEnabled(bln);
+ rightBtn.setEnabled(bln);
+ leftDownBtn.setEnabled(bln);
+ downBtn.setEnabled(bln);
+ rightDownBtn.setEnabled(bln);
+ zoomAddBtn.setEnabled(bln);
+ zoomDecBtn.setEnabled(bln);
+ focusAddBtn.setEnabled(bln);
+ focusDecBtn.setEnabled(bln);
+ irisAddBtn.setEnabled(bln);
+ irisDecBtn.setEnabled(bln);
+ speedComboBox.setEnabled(bln);
+ realPlayWindow.setEnabled(bln);
+ chnComboBox.setEnabled(bln);
+ streamComboBox.setEnabled(bln);
+ realplayBtn.setEnabled(bln);
+ }
+
+ /*
+ * 登录
+ */
+ private LoginPanel loginPanel;
+
+ /*
+ * 预览
+ */
+ private RealPanel realPanel;
+ private JPanel realplayPanel;
+ private Panel realPlayWindow;
+ private Panel channelPanel;
+
+ private JLabel chnlabel;
+ private JComboBox chnComboBox;
+ private JLabel streamLabel;
+ private JComboBox streamComboBox;
+ private JButton realplayBtn;
+ private JButton snapBtn;
+
+ /*
+ * 抓图与云台
+ */
+ private PTZ_PICPanel ptz_picPanel;
+ private PICPanel picPanel;
+ private JPanel pictureShowPanel;
+ private JPanel snapPanel;
+ private PaintPanel pictureShowWindow;
+
+ /*
+ * 云台
+ */
+ private PTZPanel ptzPanel;
+ private JPanel directionPanel;
+ private JPanel ptzCtrlPanel;
+ private JButton leftUpBtn;
+ private JButton upBtn;
+ private JButton rightUpBtn;
+ private JButton leftBtn;
+ private JButton rightBtn;
+ private JButton leftDownBtn;
+ private JButton downBtn;
+ private JButton rightDownBtn;
+ private JComboBox speedComboBox;
+ private JLabel operateJLabel;
+
+ private JButton zoomAddBtn;
+ private JButton zoomDecBtn;
+ private JButton focusAddBtn;
+ private JButton focusDecBtn;
+ private JButton irisAddBtn;
+ private JButton irisDecBtn;
+}
+
+public class PTZControl {
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ PTZControlFrame demo = new PTZControlFrame();
+ demo.setVisible(true);
+ }
+ });
+ }
+}
+
+
diff --git a/src/main/java/com/netsdk/demo/frame/RealPlay.java b/src/main/java/com/netsdk/demo/frame/RealPlay.java
new file mode 100644
index 0000000..a22c98c
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/RealPlay.java
@@ -0,0 +1,420 @@
+package com.netsdk.demo.frame;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.Panel;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.Vector;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.border.EmptyBorder;
+
+import com.sun.jna.Pointer;
+
+import com.netsdk.common.*;
+import com.netsdk.demo.module.*;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.ToolKits;
+
+class RealPlayFrame extends JFrame{
+ private static final long serialVersionUID = 1L;
+
+ private Vector chnlist = new Vector();
+
+ private boolean isrealplayOne = false;
+ private boolean isrealplayTwo = false;
+
+ // 设备断线通知回调
+ private static DisConnect disConnect = new DisConnect();
+
+ // 网络连接恢复
+ private static HaveReConnect haveReConnect = new HaveReConnect();
+
+ // 预览句柄
+ public static LLong m_hPlayHandleOne = new LLong(0);
+
+ public static LLong m_hPlayHandleTwo = new LLong(0);
+
+ // 获取界面窗口
+ private static JFrame frame = new JFrame();
+
+ public RealPlayFrame() {
+ setTitle(Res.string().getRealplay());
+ setLayout(new BorderLayout());
+ pack();
+ setSize(800, 560);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化
+
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ loginPanel = new LoginPanel();
+ realPanel = new JPanel();
+
+ add(loginPanel, BorderLayout.NORTH);
+ add(realPanel, BorderLayout.CENTER);
+
+ // 预览面板
+ realPanelOne = new RealPanelOne();
+ realPanelTwo = new RealPanelTwo();
+
+ realPanel.setLayout(new GridLayout(1, 2));
+ realPanel.add(realPanelOne);
+ realPanel.add(realPanelTwo);
+
+ loginPanel.addLoginBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if(loginPanel.checkLoginText()) {
+ if(login()) {
+ frame = ToolKits.getFrame(e);
+ frame.setTitle(Res.string().getRealplay() + " : " + Res.string().getOnline());
+ }
+ }
+ }
+ });
+
+ loginPanel.addLogoutBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ frame.setTitle(Res.string().getRealplay());
+ logout();
+ }
+ });
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ RealPlayModule.stopRealPlay(m_hPlayHandleOne);
+ RealPlayModule.stopRealPlay(m_hPlayHandleTwo);
+ LoginModule.logout();
+ LoginModule.cleanup(); // 关闭工程,释放资源
+ dispose();
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+
+ /////////////////面板///////////////////
+ // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数
+ private static class DisConnect implements NetSDKLib.fDisConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+ // 断线提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getRealplay() + " : " + Res.string().getDisConnectReconnecting());
+ }
+ });
+ }
+ }
+
+ // 网络连接恢复,设备重连成功回调
+ // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数
+ private static class HaveReConnect implements NetSDKLib.fHaveReConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+
+ // 重连提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getRealplay() + " : " + Res.string().getOnline());
+ }
+ });
+ }
+ }
+
+ // 登录
+ public boolean login() {
+ if(LoginModule.login(loginPanel.ipTextArea.getText(),
+ Integer.parseInt(loginPanel.portTextArea.getText()),
+ loginPanel.nameTextArea.getText(),
+ new String(loginPanel.passwordTextArea.getPassword()))) {
+
+ loginPanel.setButtonEnable(true);
+ setButtonEnable(true);
+
+ for(int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) {
+ chnlist.add(Res.string().getChannel() + " " + String.valueOf(i));
+ }
+
+ // 登陆成功,将通道添加到控件
+ chnComboBoxOne.setModel(new DefaultComboBoxModel(chnlist));
+ chnComboBoxTwo.setModel(new DefaultComboBoxModel(chnlist));
+
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ return true;
+ }
+
+ // 登出
+ public void logout() {
+ RealPlayModule.stopRealPlay(m_hPlayHandleOne);
+ RealPlayModule.stopRealPlay(m_hPlayHandleTwo);
+ LoginModule.logout();
+
+ loginPanel.setButtonEnable(false);
+ setButtonEnable(false);
+ realPlayWindowOne.repaint();
+ realPlayWindowTwo.repaint();
+
+ isrealplayOne = false;
+ realplayBtnOne.setText(Res.string().getStartRealPlay());
+
+ isrealplayTwo = false;
+ realplayBtnTwo.setText(Res.string().getStartRealPlay());
+
+ for(int i = 0; i < LoginModule.m_stDeviceInfo.byChanNum; i++) {
+ chnlist.clear();
+ }
+
+ chnComboBoxOne.setModel(new DefaultComboBoxModel());
+ chnComboBoxTwo.setModel(new DefaultComboBoxModel());
+ }
+
+ /*
+ * 预览界面通道、码流设置 以及抓图面板
+ */
+ private class RealPanelOne extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public RealPanelOne() {
+ BorderEx.set(this, Res.string().getRealplay(), 2);
+ setLayout(new BorderLayout());
+
+ channelPanelOne = new Panel();
+ realplayPanelOne = new JPanel();
+
+ add(channelPanelOne, BorderLayout.NORTH);
+ add(realplayPanelOne, BorderLayout.CENTER);
+
+ /************ 预览面板 **************/
+ realplayPanelOne.setLayout(new BorderLayout());
+ realplayPanelOne.setBorder(new EmptyBorder(5, 5, 5, 5));
+ realPlayWindowOne = new Panel();
+ realPlayWindowOne.setBackground(Color.GRAY);
+ realplayPanelOne.add(realPlayWindowOne, BorderLayout.CENTER);
+
+ /************ 通道、码流面板 **************/
+ chnlabelOne = new JLabel(Res.string().getChn());
+ chnComboBoxOne = new JComboBox();
+
+ streamLabelOne = new JLabel(Res.string().getStreamType());
+ String[] stream = {Res.string().getMasterStream(), Res.string().getSubStream()};
+ streamComboBoxOne = new JComboBox(stream);
+
+ realplayBtnOne = new JButton(Res.string().getStartRealPlay());
+
+ channelPanelOne.setLayout(new FlowLayout());
+ channelPanelOne.add(chnlabelOne);
+ channelPanelOne.add(chnComboBoxOne);
+ channelPanelOne.add(streamLabelOne);
+ channelPanelOne.add(streamComboBoxOne);
+ channelPanelOne.add(realplayBtnOne);
+
+ chnComboBoxOne.setPreferredSize(new Dimension(80, 20));
+ streamComboBoxOne.setPreferredSize(new Dimension(95, 20));
+ realplayBtnOne.setPreferredSize(new Dimension(115, 20));
+
+ realPlayWindowOne.setEnabled(false);
+ chnComboBoxOne.setEnabled(false);
+ streamComboBoxOne.setEnabled(false);
+ realplayBtnOne.setEnabled(false);
+
+ realplayBtnOne.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ realplayOne();
+ }
+ });
+ }
+ }
+
+ // 预览
+ public void realplayOne() {
+ if(!isrealplayOne) {
+ m_hPlayHandleOne = RealPlayModule.startRealPlay(chnComboBoxOne.getSelectedIndex(),
+ streamComboBoxOne.getSelectedIndex()==0? 0:3,
+ realPlayWindowOne);
+ if(m_hPlayHandleOne.longValue() != 0) {
+ realPlayWindowOne.repaint();
+ isrealplayOne = true;
+ chnComboBoxOne.setEnabled(false);
+ streamComboBoxOne.setEnabled(false);
+ realplayBtnOne.setText(Res.string().getStopRealPlay());
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ } else {
+ RealPlayModule.stopRealPlay(m_hPlayHandleOne);
+ realPlayWindowOne.repaint();
+ isrealplayOne = false;
+ chnComboBoxOne.setEnabled(true);
+ streamComboBoxOne.setEnabled(true);
+ realplayBtnOne.setText(Res.string().getStartRealPlay());
+ }
+ }
+
+
+ private class RealPanelTwo extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public RealPanelTwo() {
+ BorderEx.set(this, Res.string().getRealplay(), 2);
+ setLayout(new BorderLayout());
+
+ channelPanelTwo = new Panel();
+ realplayPanelTwo = new JPanel();
+
+ add(channelPanelTwo, BorderLayout.NORTH);
+ add(realplayPanelTwo, BorderLayout.CENTER);
+
+ /************ 预览面板 **************/
+ realplayPanelTwo.setLayout(new BorderLayout());
+ realplayPanelTwo.setBorder(new EmptyBorder(5, 5, 5, 5));
+ realPlayWindowTwo = new Panel();
+ realPlayWindowTwo.setBackground(Color.GRAY);
+ realplayPanelTwo.add(realPlayWindowTwo, BorderLayout.CENTER);
+
+ /************ 通道、码流面板 **************/
+ chnlabelTwo = new JLabel(Res.string().getChn());
+ chnComboBoxTwo = new JComboBox();
+
+ streamLabelTwo = new JLabel(Res.string().getStreamType());
+ String[] stream = {Res.string().getMasterStream(), Res.string().getSubStream()};
+ streamComboBoxTwo = new JComboBox(stream);
+
+ realplayBtnTwo = new JButton(Res.string().getStartRealPlay());
+
+ channelPanelTwo.setLayout(new FlowLayout());
+ channelPanelTwo.add(chnlabelTwo);
+ channelPanelTwo.add(chnComboBoxTwo);
+ channelPanelTwo.add(streamLabelTwo);
+ channelPanelTwo.add(streamComboBoxTwo);
+ channelPanelTwo.add(realplayBtnTwo);
+
+ chnComboBoxTwo.setPreferredSize(new Dimension(80, 20));
+ streamComboBoxTwo.setPreferredSize(new Dimension(95, 20));
+ realplayBtnTwo.setPreferredSize(new Dimension(115, 20));
+
+ realPlayWindowTwo.setEnabled(false);
+ chnComboBoxTwo.setEnabled(false);
+ streamComboBoxTwo.setEnabled(false);
+ realplayBtnTwo.setEnabled(false);
+
+ realplayBtnTwo.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ realplayTwo();
+ }
+ });
+ }
+ }
+
+ // 预览
+ public void realplayTwo() {
+ if(!isrealplayTwo) {
+ m_hPlayHandleTwo = RealPlayModule.startRealPlay(chnComboBoxTwo.getSelectedIndex(),
+ streamComboBoxTwo.getSelectedIndex()==0? 0:3,
+ realPlayWindowTwo);
+ if(m_hPlayHandleTwo.longValue() != 0) {
+ realPlayWindowTwo.repaint();
+ isrealplayTwo = true;
+ chnComboBoxTwo.setEnabled(false);
+ streamComboBoxTwo.setEnabled(false);
+ realplayBtnTwo.setText(Res.string().getStopRealPlay());
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ } else {
+ RealPlayModule.stopRealPlay(m_hPlayHandleTwo);
+ realPlayWindowTwo.repaint();
+ isrealplayTwo = false;
+ chnComboBoxTwo.setEnabled(true);
+ streamComboBoxTwo.setEnabled(true);
+ realplayBtnTwo.setText(Res.string().getStartRealPlay());
+ }
+ }
+ private void setButtonEnable(boolean bln) {
+ realPlayWindowOne.setEnabled(bln);
+ chnComboBoxOne.setEnabled(bln);
+ streamComboBoxOne.setEnabled(bln);
+ realplayBtnOne.setEnabled(bln);
+
+ realPlayWindowTwo.setEnabled(bln);
+ chnComboBoxTwo.setEnabled(bln);
+ streamComboBoxTwo.setEnabled(bln);
+ realplayBtnTwo.setEnabled(bln);
+ }
+
+ /*
+ * 登录
+ */
+ private LoginPanel loginPanel;
+
+ private JPanel realPanel;
+
+ /*
+ * 预览
+ */
+ private RealPanelOne realPanelOne;
+ private JPanel realplayPanelOne;
+ private Panel realPlayWindowOne;
+ private Panel channelPanelOne;
+
+ private JLabel chnlabelOne;
+ private JComboBox chnComboBoxOne;
+ private JLabel streamLabelOne;
+ private JComboBox streamComboBoxOne;
+ private JButton realplayBtnOne;
+
+ //
+ private RealPanelTwo realPanelTwo;
+ private JPanel realplayPanelTwo;
+ private Panel realPlayWindowTwo;
+ private Panel channelPanelTwo;
+
+ private JLabel chnlabelTwo;
+ private JComboBox chnComboBoxTwo;
+ private JLabel streamLabelTwo;
+ private JComboBox streamComboBoxTwo;
+ private JButton realplayBtnTwo;
+}
+
+public class RealPlay {
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ RealPlayFrame demo = new RealPlayFrame();
+ demo.setVisible(true);
+ }
+ });
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/frame/RealplayEx.java b/src/main/java/com/netsdk/demo/frame/RealplayEx.java
new file mode 100644
index 0000000..387f507
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/RealplayEx.java
@@ -0,0 +1,223 @@
+package com.netsdk.demo.frame;
+
+import java.io.File;
+
+import com.netsdk.common.CaseMenu;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.NetSDKLib.NET_DEVICEINFO_Ex;
+import java.util.Scanner;
+import com.sun.jna.Pointer;
+import com.sun.jna.ptr.IntByReference;
+
+public class RealplayEx {
+ public static final NetSDKLib netSdk = NetSDKLib.NETSDK_INSTANCE;
+
+ // 登陆句柄
+ private LLong loginHandle = new LLong(0);
+
+ // 预览预览句柄
+ private static LLong lRealHandle = new LLong(0);
+
+
+ // 设备信息扩展
+ private NET_DEVICEINFO_Ex deviceInfo = new NET_DEVICEINFO_Ex();
+
+ //private NET_TIME m_startTime = new NET_TIME(); // 开始时间
+ //private NET_TIME m_stopTime = new NET_TIME(); // 结束时间
+
+ public void InitTest(){
+ // 初始化SDK库
+ netSdk.CLIENT_Init(DisConnectCallBack.getInstance(), null);
+
+ // 设置断线重连成功回调函数
+ netSdk.CLIENT_SetAutoReconnect(HaveReConnectCallBack.getInstance(), null);
+
+ //打开日志,可选
+ NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO();
+ String logPath = new File(".").getAbsoluteFile().getParent() + File.separator + "sdk_log" + File.separator + "sdk.log";
+ setLog.bSetFilePath = 1;
+ System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length);
+ setLog.bSetPrintStrategy = 1;
+ setLog.nPrintStrategy = 0;
+ if (!netSdk.CLIENT_LogOpen(setLog)){
+ System.err.println("Open SDK Log Failed!!!");
+ }
+
+ }
+
+ public void Login(String m_strIp,int m_nPort,String m_strUser,String m_strPassword ){
+
+ // 登陆设备
+ int nSpecCap = NetSDKLib.EM_LOGIN_SPAC_CAP_TYPE.EM_LOGIN_SPEC_CAP_TCP; // TCP登入
+ IntByReference nError = new IntByReference(0);
+ loginHandle = netSdk.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser,
+ m_strPassword ,nSpecCap, null, deviceInfo, nError);
+ if (loginHandle.longValue() != 0) {
+ System.out.printf("Login Device[%s] Success!\n", m_strIp);
+ }
+ else {
+ System.err.printf("Login Device[%s] Fail.Error[0x%x]\n", m_strIp, netSdk.CLIENT_GetLastError());
+ LoginOut();
+ }
+ }
+ public void realplay(){
+ lRealHandle= netSdk.CLIENT_RealPlayEx(loginHandle, 0, null, 0);
+ if(lRealHandle.longValue()!=0){
+ System.out.println("realplay success");
+ netSdk.CLIENT_SetRealDataCallBackEx(lRealHandle, CbfRealDataCallBackEx.getInstance(),null, 31);
+ }
+ }
+
+ public void StopRealPlay(){
+ if(netSdk.CLIENT_StopRealPlayEx(lRealHandle)){
+ System.out.println("StopRealPlay success");
+ }
+ }
+ public void LoginOut(){
+ System.out.println("End Test");
+
+ if( loginHandle.longValue() != 0)
+ {
+ netSdk.CLIENT_Logout(loginHandle);
+ }
+ System.out.println("See You...");
+
+ netSdk.CLIENT_Cleanup();
+ System.exit(0);
+ }
+
+ public void RunTest(){
+ CaseMenu menu=new CaseMenu();
+ menu.addItem((new CaseMenu.Item(this , "realplay" , "realplay")));
+ menu.addItem((new CaseMenu.Item(this , "StopRealPlay" , "StopRealPlay")));
+ menu.run();
+ }
+ /**
+ * 设备断线回调
+ */
+ private static class DisConnectCallBack implements NetSDKLib.fDisConnect {
+
+ private DisConnectCallBack() {
+ }
+
+ private static class CallBackHolder {
+ private static DisConnectCallBack instance = new DisConnectCallBack();
+ }
+
+ public static DisConnectCallBack getInstance() {
+ return CallBackHolder.instance;
+ }
+
+ public void invoke(NetSDKLib.LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+ }
+ }
+
+ /**
+ * 设备重连回调
+ */
+ private static class HaveReConnectCallBack implements NetSDKLib.fHaveReConnect {
+ private HaveReConnectCallBack() {
+ }
+
+ private static class CallBackHolder {
+ private static HaveReConnectCallBack instance = new HaveReConnectCallBack();
+ }
+
+ public static HaveReConnectCallBack getInstance() {
+ return CallBackHolder.instance;
+ }
+
+ public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+
+ }
+ }
+
+ /**
+ * 实时预览数据回调函数--扩展(pBuffer内存由SDK内部申请释放)
+ */
+ private static class CbfRealDataCallBackEx implements NetSDKLib.fRealDataCallBackEx {
+ private CbfRealDataCallBackEx() {
+ }
+
+ private static class CallBackHolder {
+ private static CbfRealDataCallBackEx instance = new CbfRealDataCallBackEx();
+ }
+
+ public static CbfRealDataCallBackEx getInstance() {
+ return CallBackHolder.instance;
+ }
+
+ @Override
+ public void invoke(LLong lRealHandle, int dwDataType, Pointer pBuffer,
+ int dwBufSize, int param, Pointer dwUser) {
+ int bInput=0;
+ if(0 != lRealHandle.longValue())
+ {
+ switch(dwDataType) {
+ case 0:
+ System.out.println("码流大小为" + dwBufSize + "\n" + "码流类型为原始音视频混合数据");
+ break;
+ case 1:
+ //标准视频数据
+
+ break;
+ case 2:
+ //yuv 数据
+
+ break;
+ case 3:
+ //pcm 音频数据
+
+ break;
+ case 4:
+ //原始音频数据
+
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+
+ public static void main(String []args){
+ RealplayEx XM=new RealplayEx();
+ String ip = "172.23.12.231";
+ int port = 37777;
+ String username = "admin";
+ String password = "admin123";
+ Scanner scanner = new Scanner(System.in);
+ String defaultConfig = "ip:%s,port:%d,username:%s,password:%s,需要修改吗?(y/n)";
+ defaultConfig = String.format(defaultConfig, ip, port, username, password);
+ System.out.println(defaultConfig);
+ String answer = "";
+ do {
+ answer = scanner.nextLine();
+ if ("y".equalsIgnoreCase(answer) || "yes".equalsIgnoreCase(answer)) {
+ System.out.println("please input ip");
+ ip = scanner.nextLine().trim();
+ System.out.println("please input port:");
+ port = Integer.parseInt(scanner.nextLine());
+ System.out.println("please input username:");
+ username = scanner.nextLine().trim();
+ System.out.println("please input password:");
+ password = scanner.nextLine().trim();
+ break;
+ } else if ("n".equalsIgnoreCase(answer) || "no".equalsIgnoreCase(answer)) {
+ break;
+ }
+ System.out.println("please input the right word.y/yes/n/no,try again.");
+ } while (!(answer.equalsIgnoreCase("y")
+ || answer.equalsIgnoreCase("yes")
+ || answer.equalsIgnoreCase("no")
+ || answer.equalsIgnoreCase("n")));
+
+ XM.InitTest();
+ XM.Login(ip,port,username,password);
+ XM.RunTest();
+ XM.LoginOut();
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/frame/Talk.java b/src/main/java/com/netsdk/demo/frame/Talk.java
new file mode 100644
index 0000000..436e09f
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/Talk.java
@@ -0,0 +1,342 @@
+package com.netsdk.demo.frame;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.Vector;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+
+import com.sun.jna.Pointer;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.FunctionList;
+import com.netsdk.common.LoginPanel;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.demo.module.TalkModule;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.ToolKits;
+
+/**
+ * Talk Demo
+ */
+class TalkFrame extends JFrame {
+ private static final long serialVersionUID = 1L;
+
+ // device channel list
+ private Vector chnlist = new Vector();
+
+ // device disconnect callback instance
+ private static DisConnect disConnect = new DisConnect();
+
+ // talk frame (this)
+ private static JFrame frame = new JFrame();
+
+ public TalkFrame() {
+ setTitle(Res.string().getTalk());
+ setLayout(new BorderLayout());
+ pack();
+ setSize(400, 450);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ LoginModule.init(disConnect, null);
+
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ loginPanel = new TalkLoginPanel();
+ talkPanel = new TalkPanel();
+
+ add(loginPanel, BorderLayout.CENTER);
+ add(talkPanel, BorderLayout.SOUTH);
+
+ loginPanel.addLoginBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if(loginPanel.checkLoginText()) {
+ if(login()) {
+ frame = ToolKits.getFrame(e);
+ frame.setTitle(Res.string().getTalk() + " : " + Res.string().getOnline());
+ }
+ }
+ }
+ });
+
+ loginPanel.addLogoutBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ frame.setTitle(Res.string().getTalk());
+ logout();
+ }
+ });
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ TalkModule.stopTalk();
+ LoginModule.logout();
+ LoginModule.cleanup();
+ dispose();
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+
+ /////////////////function///////////////////
+ // device disconnect callback class
+ // set it's instance by call CLIENT_Init, when device disconnect sdk will call it.
+ private static class DisConnect implements NetSDKLib.fDisConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getTalk() + " : " + Res.string().getDisConnectReconnecting());
+ }
+ });
+ }
+ }
+
+ public boolean login() {
+
+ if(LoginModule.login(loginPanel.ipTextArea.getText(),
+ Integer.parseInt(loginPanel.portTextArea.getText()),
+ loginPanel.nameTextArea.getText(),
+ new String(loginPanel.passwordTextArea.getPassword()))) {
+
+ loginPanel.setButtonEnable(true);
+
+ for(int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) {
+ chnlist.add(Res.string().getChannel() + " " + String.valueOf(i));
+ }
+
+ talkPanel.talkEnable();
+
+ }else {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+
+ return true;
+ }
+
+ public void logout() {
+ TalkModule.stopTalk();
+ LoginModule.logout();
+
+ loginPanel.setButtonEnable(false);
+ chnlist.clear();
+ talkPanel.initTalkEnable();
+ }
+
+ private class TalkPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public TalkPanel() {
+ BorderEx.set(this, Res.string().getTalk(), 2);
+ setLayout(new GridLayout(3, 1));
+ setPreferredSize(new Dimension(350, 220));
+
+ transmitPanel = new JPanel();
+ chnPanel = new JPanel();
+ talkBtnPanel = new JPanel();
+
+ transmitLabel = new JLabel(Res.string().getTransmitType());
+ transmitLabel.setPreferredSize(new Dimension(100, 25));
+ transmitComboBox = new JComboBox();
+ transmitComboBox.setPreferredSize(new Dimension(150, 25));
+ transmitPanel.add(transmitLabel);
+ transmitPanel.add(transmitComboBox);
+
+ chnlabel = new JLabel(Res.string().getTransmitChannel());
+ chnlabel.setPreferredSize(new Dimension(100, 25));
+ chnComboBox = new JComboBox();
+ chnComboBox.setPreferredSize(new Dimension(150, 25));
+ chnPanel.add(chnlabel);
+ chnPanel.add(chnComboBox);
+
+ startTalkBtn = new JButton(Res.string().getStartTalk());
+ startTalkBtn.setPreferredSize(new Dimension(100, 20));
+ JLabel nullLabel = new JLabel(" ");
+ stopTalkBtn = new JButton(Res.string().getStopTalk());
+ stopTalkBtn.setPreferredSize(new Dimension(100, 20));
+ talkBtnPanel.add(startTalkBtn);
+ talkBtnPanel.add(nullLabel);
+ talkBtnPanel.add(stopTalkBtn);
+
+ add(transmitPanel);
+ add(chnPanel);
+ add(talkBtnPanel);
+
+ initTalkEnable();
+
+ startTalkBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+
+ if(TalkModule.startTalk(transmitComboBox.getSelectedIndex(),
+ chnComboBox.getSelectedIndex())) {
+ setButtonEnable(false);
+ }else {
+ JOptionPane.showMessageDialog(null, Res.string().getTalkFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ });
+
+ stopTalkBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+
+ TalkModule.stopTalk();
+ setButtonEnable(true);
+ }
+ });
+
+ transmitComboBox.addItemListener(new ItemListener() {
+ @Override
+ public void itemStateChanged(ItemEvent e) {
+
+ if (e.getStateChange() == ItemEvent.SELECTED) {
+ if (transmitComboBox.getSelectedIndex() == 1) {
+ chnComboBox.setModel(new DefaultComboBoxModel(chnlist));
+ chnComboBox.setEnabled(true);
+ }else {
+ chnComboBox.setModel(new DefaultComboBoxModel());
+ chnComboBox.setEnabled(false);
+ }
+ }
+ }
+ });
+
+ }
+
+ public void talkEnable() {
+
+ String[] transmit = {Res.string().getLocalTransmitType(), Res.string().getRemoteTransmitType()};
+ transmitComboBox.setModel(new DefaultComboBoxModel(transmit));
+ setButtonEnable(true);
+ }
+
+ public void initTalkEnable() {
+
+ chnComboBox.setModel(new DefaultComboBoxModel());
+ transmitComboBox.setModel(new DefaultComboBoxModel());
+ chnComboBox.setEnabled(false);
+ transmitComboBox.setEnabled(false);
+ startTalkBtn.setEnabled(false);
+ stopTalkBtn.setEnabled(false);
+ }
+
+ private void setButtonEnable(boolean bln) {
+
+ transmitComboBox.setEnabled(bln);
+ if (bln && transmitComboBox.getSelectedIndex() == 1) {
+ chnComboBox.setEnabled(true);
+ }else {
+ chnComboBox.setEnabled(false);
+ }
+ startTalkBtn.setEnabled(bln);
+ stopTalkBtn.setEnabled(!bln);
+ }
+
+ private JPanel transmitPanel;
+ private JPanel chnPanel;
+ private JPanel talkBtnPanel;
+ private JLabel transmitLabel;
+ private JComboBox transmitComboBox;
+ private JLabel chnlabel;
+ private JComboBox chnComboBox;
+ private JButton startTalkBtn;
+ private JButton stopTalkBtn;
+ }
+
+ private class TalkLoginPanel extends LoginPanel {
+
+ private static final long serialVersionUID = 1L;
+
+ public TalkLoginPanel() {
+ setLayout(new GridLayout(3, 1));
+ removeAll();
+ JPanel ipPanel = new JPanel();
+ JPanel userPanel = new JPanel();
+ JPanel btnPanel = new JPanel();
+ JLabel nullLabel = new JLabel(" ");
+ JLabel nullLabel1 = new JLabel(" ");
+
+ resetSize();
+
+ ipPanel.add(ipLabel);
+ ipPanel.add(ipTextArea);
+ ipPanel.add(portLabel);
+ ipPanel.add(portTextArea);
+
+ userPanel.add(nameLabel);
+ userPanel.add(nameTextArea);
+ userPanel.add(passwordLabel);
+ userPanel.add(passwordTextArea);
+
+ btnPanel.add(nullLabel);
+ btnPanel.add(loginBtn);
+ btnPanel.add(nullLabel1);
+ btnPanel.add(logoutBtn);
+
+ add(ipPanel);
+ add(userPanel);
+ add(btnPanel);
+ }
+
+ private void resetSize() {
+
+ ipLabel.setPreferredSize(new Dimension(70, 20));
+ portLabel.setPreferredSize(new Dimension(70, 20));
+ nameLabel.setText(Res.string().getUserName());
+ nameLabel.setPreferredSize(new Dimension(70, 20));
+ passwordLabel.setPreferredSize(new Dimension(70, 20));
+
+ ipTextArea.setPreferredSize(new Dimension(90, 20));
+ portTextArea.setPreferredSize(new Dimension(90, 20));
+ nameTextArea.setPreferredSize(new Dimension(90, 20));
+ passwordTextArea.setPreferredSize(new Dimension(90, 20));
+ }
+ }
+
+ private TalkLoginPanel loginPanel;
+ private TalkPanel talkPanel;
+
+}
+
+public class Talk {
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ TalkFrame demo = new TalkFrame();
+ demo.setVisible(true);
+ }
+ });
+ }
+};
+
diff --git a/src/main/java/com/netsdk/demo/frame/ThermalCamera/HeatMapDialog.java b/src/main/java/com/netsdk/demo/frame/ThermalCamera/HeatMapDialog.java
new file mode 100644
index 0000000..679f0c6
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/ThermalCamera/HeatMapDialog.java
@@ -0,0 +1,349 @@
+package com.netsdk.demo.frame.ThermalCamera;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.concurrent.locks.ReentrantLock;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+
+import com.sun.jna.Memory;
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.ThermalCameraModule;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.NetSDKLib.*;
+
+/**
+ * 热图信息对话框
+ */
+public class HeatMapDialog extends JDialog{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ private JDialog target = this;
+ private ReentrantLock lock = new ReentrantLock();
+ private NET_RADIOMETRY_DATA gData = new NET_RADIOMETRY_DATA();
+
+ public HeatMapDialog() {
+ setTitle(Res.string().getShowInfo("HEATMAP"));
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(400, 440);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+
+ ///////////////////////////////
+ operatePanel = new OperatePanel();
+ showPanel = new HeatMapShowPanel();
+
+ add(showPanel, BorderLayout.CENTER);
+ add(operatePanel, BorderLayout.NORTH);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e){
+ try {
+ ThermalCameraModule.radiometryDetach();
+ }finally {
+ dispose();
+ }
+ }
+ });
+ }
+
+
+ /**
+ * 订阅回调
+ */
+ private RadiometryAttachCB cbNotify = new RadiometryAttachCB();
+ private class RadiometryAttachCB implements fRadiometryAttachCB {
+
+ @Override
+ public void invoke(LLong lAttachHandle, final NET_RADIOMETRY_DATA pBuf,
+ int nBufLen, Pointer dwUser) {
+
+ copyRadiometryData(pBuf);
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ target.setTitle(Res.string().getShowInfo("HEATMAP"));
+ operatePanel.saveBtn.setEnabled(true);
+ showPanel.updateData();
+ }
+ });
+ }
+ }
+
+ private void copyRadiometryData(NET_RADIOMETRY_DATA data) {
+ lock.lock();
+ gData.stMetaData = data.stMetaData;
+ gData.dwBufSize = data.dwBufSize;
+ gData.pbDataBuf = new Memory(data.dwBufSize);
+ gData.pbDataBuf.write(0, data.pbDataBuf.getByteArray(0, data.dwBufSize), 0, data.dwBufSize);
+ lock.unlock();
+ }
+
+ /**
+ * 操作界面
+ * */
+ public class OperatePanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public OperatePanel() {
+ BorderEx.set(this, Res.string().getShowInfo("HEATMAP_OPERATE"), 1);
+ setLayout(new FlowLayout(FlowLayout.LEFT, 5, 10));
+
+ attachBtn = new JButton(Res.string().getShowInfo("RADIOMETRY_ATTACH"));
+ fetchBtn = new JButton(Res.string().getShowInfo("RADIOMETRY_FETCH"));
+ saveBtn = new JButton(Res.string().getShowInfo("SAVE_HEATMAP"));
+
+ Dimension btnDimension = new Dimension(120, 20);
+ attachBtn.setPreferredSize(btnDimension);
+ fetchBtn.setPreferredSize(btnDimension);
+ saveBtn.setPreferredSize(btnDimension);
+
+ fetchBtn.setEnabled(false);
+ saveBtn.setEnabled(false);
+
+ add(attachBtn);
+ add(fetchBtn);
+ add(saveBtn);
+
+ attachBtn.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ attach();
+ }
+ });
+ }
+ });
+
+ fetchBtn.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ fetch();
+ }
+ });
+ }
+ });
+
+ saveBtn.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ try {
+ save();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ });
+ }
+ });
+ }
+
+ public void attach() {
+
+ freeMemory();
+
+ target.setTitle(Res.string().getShowInfo("HEATMAP"));
+ if (ThermalCameraModule.isAttaching()) {
+ ThermalCameraModule.radiometryDetach();
+ fetchBtn.setEnabled(false);
+ saveBtn.setEnabled(false);
+ attachBtn.setText(Res.string().getShowInfo("RADIOMETRY_ATTACH"));
+ }else {
+ if (ThermalCameraModule.radiometryAttach(ThermalCameraFrame.THERMAL_CHANNEL, cbNotify)) {
+ attachBtn.setText(Res.string().getShowInfo("RADIOMETRY_DETACH"));
+ showPanel.clearData();
+ fetchBtn.setEnabled(true);
+ }else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ }
+
+ public void fetch() {
+
+ freeMemory();
+ saveBtn.setEnabled(false);
+ int nStatus = ThermalCameraModule.radiometryFetch(ThermalCameraFrame.THERMAL_CHANNEL);
+
+ if (nStatus != -1) {
+ showPanel.clearData();
+ String[] arrStatus = Res.string().getTemperStatusList();
+ if (nStatus >= 1 && nStatus <= arrStatus.length) {
+ target.setTitle(Res.string().getShowInfo("HEATMAP") + " : " + arrStatus[nStatus-1]);
+ }
+ }else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+
+ public void save() throws IOException {
+ lock.lock();
+ boolean bSaved = ThermalCameraModule.saveData(gData);
+ lock.unlock();
+ if (bSaved) {
+ JOptionPane.showMessageDialog(null, Res.string().getShowInfo("HEATMAP_SAVE_SUCCESS"), Res.string().getPromptMessage(), JOptionPane.PLAIN_MESSAGE);
+ }else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+
+ public void freeMemory() {
+ lock.lock();
+ if (gData.pbDataBuf != null) {
+ Native.free(Pointer.nativeValue(gData.pbDataBuf));
+ Pointer.nativeValue(gData.pbDataBuf, 0);
+ }
+ lock.unlock();
+ }
+
+ private JButton attachBtn;
+ private JButton fetchBtn;
+ private JButton saveBtn;
+ }
+
+ /**
+ * 查询显示界面
+ * */
+ public class HeatMapShowPanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public HeatMapShowPanel() {
+ BorderEx.set(this, Res.string().getShowInfo("HEATMAP_METADATA_INFO"), 1);
+ setLayout(new FlowLayout(FlowLayout.CENTER, 15, 25));
+
+ JLabel heightLabel = new JLabel(Res.string().getShowInfo("HEIGHT"), JLabel.LEFT);
+ heightTextField = new JTextField();
+ JLabel widthLabel = new JLabel(Res.string().getShowInfo("WIDTH"), JLabel.LEFT);
+ widthTextField = new JTextField();
+ JLabel channelLabel = new JLabel(Res.string().getShowInfo("CHANNEL"), JLabel.LEFT);
+ channelTextField = new JTextField();
+ JLabel timeLabel = new JLabel(Res.string().getShowInfo("TIME"), JLabel.LEFT);
+ timeTextField = new JTextField();
+ JLabel lengthLabel = new JLabel(Res.string().getShowInfo("LENGTH"), JLabel.LEFT);
+ lengthTextField = new JTextField();
+ JLabel sensorTypeLabel = new JLabel(Res.string().getShowInfo("SENSOR_TYPE"), JLabel.LEFT);
+ sensorTypeTextField = new JTextField();
+
+ Dimension lableDimension = new Dimension(100, 20);
+ Dimension textFieldDimension = new Dimension(140, 20);
+ heightLabel.setPreferredSize(lableDimension);
+ widthLabel.setPreferredSize(lableDimension);
+ channelLabel.setPreferredSize(lableDimension);
+ timeLabel.setPreferredSize(lableDimension);
+ lengthLabel.setPreferredSize(lableDimension);
+ sensorTypeLabel.setPreferredSize(lableDimension);
+ heightTextField.setPreferredSize(textFieldDimension);
+ widthTextField.setPreferredSize(textFieldDimension);
+ channelTextField.setPreferredSize(textFieldDimension);
+ timeTextField.setPreferredSize(textFieldDimension);
+ lengthTextField.setPreferredSize(textFieldDimension);
+ sensorTypeTextField.setPreferredSize(textFieldDimension);
+
+ heightTextField.setEditable(false);
+ widthTextField.setEditable(false);
+ channelTextField.setEditable(false);
+ timeTextField.setEditable(false);
+ lengthTextField.setEditable(false);
+ sensorTypeTextField.setEditable(false);
+
+ add(heightLabel);
+ add(heightTextField);
+ add(widthLabel);
+ add(widthTextField);
+ add(channelLabel);
+ add(channelTextField);
+ add(timeLabel);
+ add(timeTextField);
+ add(lengthLabel);
+ add(lengthTextField);
+ add(sensorTypeLabel);
+ add(sensorTypeTextField);
+ }
+
+ public void updateData() {
+ String[] data = new String[6];
+
+ lock.lock();
+ data[0] = String.valueOf(gData.stMetaData.nHeight);
+ data[1] = String.valueOf(gData.stMetaData.nWidth);
+ data[2] = String.valueOf(gData.stMetaData.nChannel+1);
+ data[3] = gData.stMetaData.stTime.toStringTimeEx();
+ data[4] = String.valueOf(gData.stMetaData.nLength);
+ try {
+ data[5] = new String(gData.stMetaData.szSensorType, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ data[5] = new String(gData.stMetaData.szSensorType).trim();
+ }
+ lock.unlock();
+
+ setData(data);
+ }
+
+ public void clearData() {
+ setData(new String[6]);
+ }
+
+ private void setData(String[] data) {
+
+ if (data.length != 6) {
+ System.err.printf("data length %d != 6", data.length);
+ return;
+ }
+
+ heightTextField.setText(data[0]);
+ widthTextField.setText(data[1]);
+ channelTextField.setText(data[2]);
+ timeTextField.setText(data[3]);
+ lengthTextField.setText(data[4]);
+ sensorTypeTextField.setText(data[5]);
+ }
+
+ private JTextField heightTextField;
+ private JTextField widthTextField;
+ private JTextField channelTextField;
+ private JTextField timeTextField;
+ private JTextField lengthTextField;
+ private JTextField sensorTypeTextField;
+ }
+
+
+ private OperatePanel operatePanel;
+ private HeatMapShowPanel showPanel;
+}
diff --git a/src/main/java/com/netsdk/demo/frame/ThermalCamera/ItemQueryDialog.java b/src/main/java/com/netsdk/demo/frame/ThermalCamera/ItemQueryDialog.java
new file mode 100644
index 0000000..ea3bfe4
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/ThermalCamera/ItemQueryDialog.java
@@ -0,0 +1,301 @@
+package com.netsdk.demo.frame.ThermalCamera;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+import javax.swing.JTextField;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.ThermalCameraModule;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.NetSDKLib.NET_RADIOMETRYINFO;
+
+
+/**
+ * 查询测温项对话框
+ */
+public class ItemQueryDialog extends JDialog{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public ItemQueryDialog() {
+ setTitle(Res.string().getShowInfo("ITEM_TEMPER"));
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(365, 460);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+
+ ///////////////////////////////
+ queryPanel = new QueryPanel();
+ showPanel = new QueryShowPanel();
+
+ add(queryPanel, BorderLayout.NORTH);
+ add(showPanel, BorderLayout.CENTER);
+
+ }
+
+
+ /**
+ * 查询测温项界面
+ * */
+ public class QueryPanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public QueryPanel() {
+ BorderEx.set(this, Res.string().getShowInfo("QUERY_CONDITION"), 1);
+ setLayout(new BorderLayout());
+
+ JLabel presetIdLabel = new JLabel(Res.string().getShowInfo("PRESET_ID"), JLabel.CENTER);
+ presetIdTextField = new JTextField("1");
+ JLabel ruleIdLabel = new JLabel(Res.string().getShowInfo("RULE_ID"), JLabel.CENTER);
+ ruleIdTextField = new JTextField("1");
+ JLabel meterTypeLabel = new JLabel(Res.string().getShowInfo("METER_TYPE"), JLabel.CENTER);
+ meterTypeComboBox = new JComboBox();
+ meterTypeComboBox.setModel(new DefaultComboBoxModel(Res.string().getMeterTypeList()));
+ queryBtn = new JButton(Res.string().getShowInfo("QUERY"));
+
+ Dimension lableDimension = new Dimension(85, 20);
+ Dimension textFieldDimension = new Dimension(80, 20);
+ Dimension btnDimension = new Dimension(100, 20);
+
+ presetIdLabel.setPreferredSize(lableDimension);
+ presetIdTextField.setPreferredSize(textFieldDimension);
+ ruleIdLabel.setPreferredSize(lableDimension);
+ ruleIdTextField.setPreferredSize(textFieldDimension);
+ meterTypeLabel.setPreferredSize(lableDimension);
+ meterTypeComboBox.setPreferredSize(textFieldDimension);
+ JLabel label = new JLabel();
+ label.setPreferredSize(new Dimension(40, 20));
+ queryBtn.setPreferredSize(btnDimension);
+
+ JPanel topPanel = new JPanel();
+ topPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 1, 10));
+ topPanel.add(presetIdLabel);
+ topPanel.add(presetIdTextField);
+ topPanel.add(ruleIdLabel);
+ topPanel.add(ruleIdTextField);
+
+ JPanel bottomPanel = new JPanel();
+ bottomPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 1, 10));
+ bottomPanel.add(meterTypeLabel);
+ bottomPanel.add(meterTypeComboBox);
+ bottomPanel.add(label);
+ bottomPanel.add(queryBtn);
+
+ JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
+ splitPane.setDividerSize(0);
+ splitPane.setBorder(null);
+ splitPane.add(topPanel, JSplitPane.TOP);
+ splitPane.add(bottomPanel, JSplitPane.BOTTOM);
+
+ add(splitPane, BorderLayout.CENTER);
+
+ listener = new NumberKeyListener();
+
+ presetIdTextField.addKeyListener(listener);
+ ruleIdTextField.addKeyListener(listener);
+
+ queryBtn.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ queryItemInfo();
+ }
+ });
+ }
+
+ public void queryItemInfo() {
+ try {
+ showPanel.clearData();
+
+ int nPresetId = Integer.parseInt(presetIdTextField.getText());
+ int nRuleId = Integer.parseInt(ruleIdTextField.getText());
+ int nMeterType = meterTypeComboBox.getSelectedIndex() + 1;
+
+ NET_RADIOMETRYINFO stItemInfo =
+ ThermalCameraModule.queryItemTemper(ThermalCameraFrame.THERMAL_CHANNEL, nPresetId, nRuleId, nMeterType);
+ if (stItemInfo == null) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ showPanel.updateData(stItemInfo);
+
+ }catch(NumberFormatException e) {
+ JOptionPane.showMessageDialog(null, Res.string().getShowInfo("INPUT_ILLEGAL"), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+
+ private NumberKeyListener listener;
+
+ private JTextField presetIdTextField;
+ private JTextField ruleIdTextField;
+ private JComboBox meterTypeComboBox;
+ private JButton queryBtn;
+ }
+
+ /**
+ * 查询显示界面
+ * */
+ public class QueryShowPanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public QueryShowPanel() {
+ BorderEx.set(this, Res.string().getShowInfo("QUERY_RESULT"), 1);
+ setLayout(new FlowLayout(FlowLayout.CENTER, 5, 25));
+
+ JLabel meterTypeLabel = new JLabel(Res.string().getShowInfo("METER_TYPE"), JLabel.LEFT);
+ meterTypeTextField = new JTextField();
+ JLabel temperUnitLabel = new JLabel(Res.string().getShowInfo("TEMPER_UNIT"), JLabel.LEFT);
+ temperUnitTextField = new JTextField();
+ JLabel temperAverLabel = new JLabel(Res.string().getShowInfo("TEMPER_AVER"), JLabel.LEFT);
+ temperAverTextField = new JTextField();
+ JLabel temperMaxLabel = new JLabel(Res.string().getShowInfo("TEMPER_MAX"), JLabel.LEFT);
+ temperMaxTextField = new JTextField();
+ JLabel temperMinLabel = new JLabel(Res.string().getShowInfo("TEMPER_MIN"), JLabel.LEFT);
+ temperMinTextField = new JTextField();
+ JLabel temperMidLabel = new JLabel(Res.string().getShowInfo("TEMPER_MID"), JLabel.LEFT);
+ temperMidTextField = new JTextField();
+ JLabel temperStdLabel = new JLabel(Res.string().getShowInfo("TEMPER_STD"), JLabel.LEFT);
+ temperStdTextField = new JTextField();
+
+ Dimension lableDimension = new Dimension(120, 20);
+ Dimension textFieldDimension = new Dimension(130, 20);
+ meterTypeLabel.setPreferredSize(lableDimension);
+ temperUnitLabel.setPreferredSize(lableDimension);
+ temperAverLabel.setPreferredSize(lableDimension);
+ temperMaxLabel.setPreferredSize(lableDimension);
+ temperMinLabel.setPreferredSize(lableDimension);
+ temperMidLabel.setPreferredSize(lableDimension);
+ temperStdLabel.setPreferredSize(lableDimension);
+ meterTypeTextField.setPreferredSize(textFieldDimension);
+ temperUnitTextField.setPreferredSize(textFieldDimension);
+ temperAverTextField.setPreferredSize(textFieldDimension);
+ temperMaxTextField.setPreferredSize(textFieldDimension);
+ temperMinTextField.setPreferredSize(textFieldDimension);
+ temperMidTextField.setPreferredSize(textFieldDimension);
+ temperStdTextField.setPreferredSize(textFieldDimension);
+
+ meterTypeTextField.setEditable(false);
+ temperUnitTextField.setEditable(false);
+ temperAverTextField.setEditable(false);
+ temperMaxTextField.setEditable(false);
+ temperMinTextField.setEditable(false);
+ temperMidTextField.setEditable(false);
+ temperStdTextField.setEditable(false);
+
+ add(meterTypeLabel);
+ add(meterTypeTextField);
+ add(temperUnitLabel);
+ add(temperUnitTextField);
+ add(temperMaxLabel);
+ add(temperMaxTextField);
+ add(temperMinLabel);
+ add(temperMinTextField);
+ add(temperMidLabel);
+ add(temperMidTextField);
+ add(temperStdLabel);
+ add(temperStdTextField);
+ }
+
+ public void updateData(NET_RADIOMETRYINFO stItemInfo) {
+ String[] data = new String[7];
+
+ String [] arrMeterType = Res.string().getMeterTypeList();
+ if (stItemInfo.nMeterType >= 1 &&
+ stItemInfo.nMeterType <= arrMeterType.length) {
+ data[0] = arrMeterType[stItemInfo.nMeterType-1];
+ }else {
+ data[0] = Res.string().getShowInfo("UNKNOWN");
+ }
+
+ String [] arrTemperUnit = Res.string().getTemperUnitList();
+ if (stItemInfo.nTemperUnit >= 1 &&
+ stItemInfo.nTemperUnit <= arrTemperUnit.length) {
+ data[1] = arrTemperUnit[stItemInfo.nTemperUnit-1];
+ }else {
+ data[1] = Res.string().getShowInfo("UNKNOWN");
+ }
+
+ data[2] = String.valueOf(stItemInfo.fTemperAver);
+ data[3] = String.valueOf(stItemInfo.fTemperMax);
+ data[4] = String.valueOf(stItemInfo.fTemperMin);
+ data[5] = String.valueOf(stItemInfo.fTemperMid);
+ data[6] = String.valueOf(stItemInfo.fTemperStd);
+
+ setData(data);
+ }
+
+ public void clearData() {
+ setData(new String[7]);
+ }
+
+ private void setData(String[] data) {
+
+ if (data.length != 7) {
+ System.err.printf("data length %d != 7", data.length);
+ return;
+ }
+
+ meterTypeTextField.setText(data[0]);
+ temperUnitTextField.setText(data[1]);
+ temperAverTextField.setText(data[2]);
+ temperMaxTextField.setText(data[3]);
+ temperMinTextField.setText(data[4]);
+ temperMidTextField.setText(data[5]);
+ temperStdTextField.setText(data[6]);
+ }
+
+ private JTextField meterTypeTextField;
+ private JTextField temperUnitTextField;
+ private JTextField temperAverTextField;
+ private JTextField temperMaxTextField;
+ private JTextField temperMinTextField;
+ private JTextField temperMidTextField;
+ private JTextField temperStdTextField;
+ }
+
+ class NumberKeyListener implements KeyListener {
+
+ public void keyTyped(KeyEvent e) {
+ int key = e.getKeyChar();
+ if (key < 48 || key > 57) {
+ e.consume();
+ }
+ }
+
+ public void keyPressed(KeyEvent e) {}
+
+ public void keyReleased(KeyEvent e) {}
+ }
+
+
+ private QueryPanel queryPanel;
+ private QueryShowPanel showPanel;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/demo/frame/ThermalCamera/PointQueryDialog.java b/src/main/java/com/netsdk/demo/frame/ThermalCamera/PointQueryDialog.java
new file mode 100644
index 0000000..05d06f5
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/ThermalCamera/PointQueryDialog.java
@@ -0,0 +1,233 @@
+package com.netsdk.demo.frame.ThermalCamera;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.ThermalCameraModule;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.NetSDKLib.NET_RADIOMETRYINFO;
+
+/**
+ * 查询测温点对话框
+ */
+public class PointQueryDialog extends JDialog{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public PointQueryDialog() {
+ setTitle(Res.string().getShowInfo("POINT_TEMPER"));
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(350, 300);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+
+ ///////////////////////////////
+ queryPanel = new QueryPanel();
+ showPanel = new QueryShowPanel();
+
+ add(queryPanel, BorderLayout.NORTH);
+ add(showPanel, BorderLayout.CENTER);
+ }
+
+
+ /**
+ * 查询界面
+ * */
+ public class QueryPanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public QueryPanel() {
+ BorderEx.set(this, Res.string().getShowInfo("QUERY_CONDITION"), 1);
+ setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
+
+ JLabel XLabel = new JLabel(Res.string().getShowInfo("X"), JLabel.CENTER);
+ XTextField = new JTextField("0");
+ JLabel YLabel = new JLabel(Res.string().getShowInfo("Y"), JLabel.CENTER);
+ YTextField = new JTextField("0");
+ queryBtn = new JButton(Res.string().getShowInfo("QUERY"));
+
+ Dimension lableDimension = new Dimension(10, 20);
+ Dimension textFieldDimension = new Dimension(70, 20);
+ Dimension btnDimension = new Dimension(100, 20);
+
+ XLabel.setPreferredSize(lableDimension);
+ XTextField.setPreferredSize(textFieldDimension);
+ YLabel.setPreferredSize(lableDimension);
+ YTextField.setPreferredSize(textFieldDimension);
+ queryBtn.setPreferredSize(btnDimension);
+
+ add(XLabel);
+ add(XTextField);
+ add(YLabel);
+ add(YTextField);
+ add(queryBtn);
+
+ listener = new NumberKeyListener();
+ XTextField.addKeyListener(listener);
+ YTextField.addKeyListener(listener);
+
+ queryBtn.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ queryPointInfo();
+ }
+ });
+ }
+
+ private void queryPointInfo() {
+ try {
+ showPanel.clearData();
+
+ short x = Short.parseShort(XTextField.getText());
+ short y = Short.parseShort(YTextField.getText());
+
+ NET_RADIOMETRYINFO pointInfo =
+ ThermalCameraModule.queryPointTemper(ThermalCameraFrame.THERMAL_CHANNEL, x, y);
+ if (pointInfo == null) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ showPanel.updateData(pointInfo);
+
+ }catch(NumberFormatException e) {
+ JOptionPane.showMessageDialog(null, Res.string().getShowInfo("COORDINATE_ILLEGAL"), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+
+ private NumberKeyListener listener;
+
+ private JTextField XTextField;
+ private JTextField YTextField;
+ private JButton queryBtn;
+ }
+
+ /**
+ * 查询显示界面
+ * */
+ public class QueryShowPanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public QueryShowPanel() {
+ BorderEx.set(this, Res.string().getShowInfo("QUERY_RESULT"), 1);
+ setLayout(new FlowLayout(FlowLayout.CENTER, 5, 30));
+
+ JLabel meterTypeLabel = new JLabel(Res.string().getShowInfo("METER_TYPE"), JLabel.LEFT);
+ meterTypeTextField = new JTextField();
+ JLabel temperUnitLabel = new JLabel(Res.string().getShowInfo("TEMPER_UNIT"), JLabel.LEFT);
+ temperUnitTextField = new JTextField();
+ JLabel temperLabel = new JLabel(Res.string().getShowInfo("TEMPER"), JLabel.LEFT);
+ temperTextField = new JTextField();
+
+ Dimension lableDimension = new Dimension(100, 20);
+ Dimension textFieldDimension = new Dimension(130, 20);
+ meterTypeLabel.setPreferredSize(lableDimension);
+ temperUnitLabel.setPreferredSize(lableDimension);
+ temperLabel.setPreferredSize(lableDimension);
+ meterTypeTextField.setPreferredSize(textFieldDimension);
+ temperUnitTextField.setPreferredSize(textFieldDimension);
+ temperTextField.setPreferredSize(textFieldDimension);
+
+ meterTypeTextField.setEditable(false);
+ temperUnitTextField.setEditable(false);
+ temperTextField.setEditable(false);
+
+ add(meterTypeLabel);
+ add(meterTypeTextField);
+ add(temperUnitLabel);
+ add(temperUnitTextField);
+ add(temperLabel);
+ add(temperTextField);
+ }
+
+ public void updateData(NET_RADIOMETRYINFO stPointInfo) {
+ String[] data = new String[3];
+
+ String [] arrMeterType = Res.string().getMeterTypeList();
+ if (stPointInfo.nMeterType >= 1 &&
+ stPointInfo.nMeterType <= arrMeterType.length) {
+ data[0] = arrMeterType[stPointInfo.nMeterType-1];
+ }else {
+ data[0] = Res.string().getShowInfo("UNKNOWN");
+ }
+
+ String [] arrTemperUnit = Res.string().getTemperUnitList();
+ if (stPointInfo.nTemperUnit >= 1 &&
+ stPointInfo.nTemperUnit <= arrTemperUnit.length) {
+ data[1] = arrTemperUnit[stPointInfo.nTemperUnit-1];
+ }else {
+ data[1] = Res.string().getShowInfo("UNKNOWN");
+ }
+
+ data[2] = String.valueOf(stPointInfo.fTemperAver);
+
+ setData(data);
+ }
+
+ public void clearData() {
+ setData(new String[3]);
+ }
+
+ private void setData(String[] data) {
+
+ if (data.length != 3) {
+ System.err.printf("data length %d != 3", data.length);
+ return;
+ }
+
+ meterTypeTextField.setText(data[0]);
+ temperUnitTextField.setText(data[1]);
+ temperTextField.setText(data[2]);
+ }
+
+ private JTextField meterTypeTextField;
+ private JTextField temperUnitTextField;
+ private JTextField temperTextField;
+ }
+
+
+
+ class NumberKeyListener implements KeyListener {
+
+ public void keyTyped(KeyEvent e) {
+ int key = e.getKeyChar();
+ if (key < 48 || key > 57) {
+ e.consume();
+ }
+ }
+
+ public void keyPressed(KeyEvent e) {}
+
+ public void keyReleased(KeyEvent e) {}
+ }
+
+ private QueryPanel queryPanel;
+ private QueryShowPanel showPanel;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/demo/frame/ThermalCamera/TemperQueryDialog.java b/src/main/java/com/netsdk/demo/frame/ThermalCamera/TemperQueryDialog.java
new file mode 100644
index 0000000..7271699
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/ThermalCamera/TemperQueryDialog.java
@@ -0,0 +1,558 @@
+package com.netsdk.demo.frame.ThermalCamera;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.UnsupportedEncodingException;
+import java.util.Enumeration;
+import java.util.Vector;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
+import javax.swing.SwingWorker;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableColumn;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.DateChooserJButton;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.ThermalCameraModule;
+import com.netsdk.lib.NetSDKLib.*;
+import com.netsdk.lib.ToolKits;
+
+public class TemperQueryDialog extends JDialog{
+
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ private NET_IN_RADIOMETRY_STARTFIND stuStartFind = new NET_IN_RADIOMETRY_STARTFIND();
+
+ public TemperQueryDialog() {
+ setTitle(Res.string().getShowInfo("TEMPER_INFO"));
+ setLayout(new BorderLayout());
+ setModal(true);
+ pack();
+ setSize(800, 550);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+
+ ///////////////////////////////
+ queryPanel = new QueryPanel();
+ showPanel = new QueryShowPanel();
+
+ add(queryPanel, BorderLayout.NORTH);
+ add(showPanel, BorderLayout.CENTER);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e){
+ try {
+ ThermalCameraModule.stopFind();
+ }finally {
+ dispose();
+ }
+ }
+ });
+ }
+
+ public void setSearchEnable(boolean b) {
+ showPanel.setButtonEnable(b);
+ queryPanel.setButtonEnable(b);
+ }
+
+ public void queryHistoryInfo(final QUERY_TYPE type) {
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ setSearchEnable(false);
+ if (type == QUERY_TYPE.FIRST_PAGE_QUERY) {
+ showPanel.clearData();
+ }
+ }
+ });
+ new QuerySwingWorker(type).execute();
+ }
+
+ /**
+ * 查询界面
+ * */
+ public class QueryPanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public QueryPanel() {
+ BorderEx.set(this, Res.string().getShowInfo("QUERY_CONDITION"), 1);
+ setLayout(new BorderLayout());
+
+ JLabel startTimeLabel = new JLabel(Res.string().getShowInfo("START_TIME"), JLabel.LEFT);
+ startTimeBtn = new DateChooserJButton();
+ JLabel endTimeLabel = new JLabel(Res.string().getShowInfo("END_TIME"), JLabel.LEFT);
+ endTimeBtn = new DateChooserJButton();
+ JLabel meterTypeLabel = new JLabel(Res.string().getShowInfo("METER_TYPE"), JLabel.LEFT);
+ meterTypeComboBox = new JComboBox();
+ meterTypeComboBox.setModel(new DefaultComboBoxModel(Res.string().getMeterTypeList()));
+ JLabel periodLabel = new JLabel(Res.string().getShowInfo("SAVE_PERIOD"), JLabel.LEFT);
+ periodComboBox = new JComboBox();
+ periodComboBox.setModel(new DefaultComboBoxModel(Res.string().getPeriodList()));
+ queryBtn = new JButton(Res.string().getShowInfo("QUERY"));
+
+ Dimension lableDimension = new Dimension(85, 20);
+ Dimension btnDimension = new Dimension(125, 20);
+
+ startTimeLabel.setPreferredSize(lableDimension);
+ startTimeBtn.setPreferredSize(btnDimension);
+ endTimeLabel.setPreferredSize(lableDimension);
+ endTimeBtn.setPreferredSize(btnDimension);
+ meterTypeLabel.setPreferredSize(lableDimension);
+ meterTypeComboBox.setPreferredSize(btnDimension);
+ periodLabel.setPreferredSize(lableDimension);
+ periodComboBox.setPreferredSize(btnDimension);
+ queryBtn.setPreferredSize(btnDimension);
+
+ JPanel startTimePanel = new JPanel();
+ startTimePanel.setLayout(new FlowLayout(FlowLayout.LEFT));
+ startTimePanel.add(startTimeLabel);
+ startTimePanel.add(startTimeBtn);
+ JPanel endTimePanel = new JPanel();
+ endTimePanel.setLayout(new FlowLayout(FlowLayout.LEFT));
+ endTimePanel.add(endTimeLabel);
+ endTimePanel.add(endTimeBtn);
+ JPanel topPanel = new JPanel();
+ topPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 30, 2));
+ topPanel.add(startTimePanel);
+ topPanel.add(endTimePanel);
+
+ JPanel meterTypePanel = new JPanel();
+ meterTypePanel.setLayout(new FlowLayout(FlowLayout.LEFT));
+ meterTypePanel.add(meterTypeLabel);
+ meterTypePanel.add(meterTypeComboBox);
+ JPanel periodPanel = new JPanel();
+ periodPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
+ periodPanel.add(periodLabel);
+ periodPanel.add(periodComboBox);
+ JPanel bottomPanel = new JPanel();
+ bottomPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 30, 2));
+ bottomPanel.add(meterTypePanel);
+ bottomPanel.add(periodPanel);
+
+ JPanel leftPanel = new JPanel(new GridLayout(2,1));
+ BorderEx.set(leftPanel, "", 1);
+ leftPanel.add(topPanel);
+ leftPanel.add(bottomPanel);
+
+ JPanel rightPanel = new JPanel();
+ rightPanel.setLayout(null);
+ BorderEx.set(rightPanel, "", 1);
+ queryBtn.setBounds(50, 30, 125, 20);
+ rightPanel.add(queryBtn);
+
+ JSplitPane pane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel, rightPanel);
+ pane.setDividerSize(0);
+ pane.setBorder(null);
+
+ add(pane, BorderLayout.CENTER);
+
+ queryBtn.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ setStuStartFind();
+ queryHistoryInfo(QUERY_TYPE.FIRST_PAGE_QUERY);
+ }
+ });
+ }
+
+ private void setStuStartFind() {
+
+ setTime(stuStartFind.stStartTime, startTimeBtn.getText());
+ setTime(stuStartFind.stEndTime, endTimeBtn.getText());
+ stuStartFind.nMeterType = meterTypeComboBox.getSelectedIndex() + 1;
+ stuStartFind.nChannel = ThermalCameraFrame.THERMAL_CHANNEL;
+ int[] arrPeriod = {5, 10, 15, 30};
+ stuStartFind.emPeriod = arrPeriod[periodComboBox.getSelectedIndex()];
+ }
+
+ private void setTime(NET_TIME netTime, String date) {
+
+ String[] dateTime = date.split(" ");
+ String[] arrDate = dateTime[0].split("-");
+ String[] arrTime = dateTime[1].split(":");
+
+ netTime.dwYear = Integer.parseInt(arrDate[0]);
+ netTime.dwMonth = Integer.parseInt(arrDate[1]);
+ netTime.dwDay = Integer.parseInt(arrDate[2]);
+ netTime.dwHour = Integer.parseInt(arrTime[0]);
+ netTime.dwMinute = Integer.parseInt(arrTime[1]);
+ netTime.dwSecond = Integer.parseInt(arrTime[2]);
+ }
+
+ public void setButtonEnable(boolean b) {
+ queryBtn.setEnabled(b);
+ }
+
+ private DateChooserJButton startTimeBtn;
+ private DateChooserJButton endTimeBtn;
+ private JComboBox meterTypeComboBox;
+ private JComboBox periodComboBox;
+ private JButton queryBtn;
+ }
+
+ /**
+ * 热成像查询结果信息显示界面
+ * */
+ public class QueryShowPanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ public static final int INDEX = 0;
+ public static final int RECORD_TIME = 1;
+ public static final int PRESET_ID = 2;
+ public static final int RULE_ID = 3;
+ public static final int ITEM_NAME = 4;
+ public static final int CHANNEL = 5;
+ public static final int COORDINATE = 6;
+ public static final int METER_TYPE = 7;
+ public static final int TEMPER_UNIT = 8;
+ public static final int TEMPER_AVER = 9;
+ public static final int TEMPER_MAX = 10;
+ public static final int TEMPER_MIN = 11;
+ public static final int TEMPER_MID = 12;
+ public static final int TEMPER_STD = 13;
+
+ public final static int QUERY_SHOW_COUNT = 20; // 查询个数
+ private int currentIndex = 0; // 实际显示个数
+
+ private String [] arrMeterType = Res.string().getMeterTypeList();
+ private String [] arrTemperUnit = Res.string().getTemperUnitList(); // 减少次数
+
+ public QueryShowPanel() {
+ BorderEx.set(this, Res.string().getShowInfo("QUERY_LIST"), 1);
+ setLayout(new BorderLayout());
+
+ String[] columnNames = {
+ Res.string().getShowInfo("INDEX"), Res.string().getShowInfo("RECORD_TIME"),
+ Res.string().getShowInfo("PRESET_ID"), Res.string().getShowInfo("RULE_ID"),
+ Res.string().getShowInfo("ITEM_NAME"), Res.string().getShowInfo("CHANNEL"),
+ Res.string().getShowInfo("COORDINATE"), Res.string().getShowInfo("METER_TYPE"),
+ Res.string().getShowInfo("TEMPER_UNIT"), Res.string().getShowInfo("TEMPER_AVER"),
+ Res.string().getShowInfo("TEMPER_MAX"), Res.string().getShowInfo("TEMPER_MIN"),
+ Res.string().getShowInfo("TEMPER_MID"), Res.string().getShowInfo("TEMPER_STD")
+ };
+
+ tableModel = new DefaultTableModel(null, columnNames);
+ table = new JTable(tableModel) {
+ private static final long serialVersionUID = 1L;
+
+ public boolean isCellEditable(int rowIndex, int columnIndex) { // 不可编辑
+ return false;
+ }
+ };
+
+ tableModel.setRowCount(QUERY_SHOW_COUNT); // 设置最小显示行
+
+ table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行
+
+ Enumeration columns = table.getColumnModel().getColumns();
+ while (columns.hasMoreElements()) {
+ columns.nextElement().setPreferredWidth(140);
+ }
+
+ table.getColumnModel().getColumn(RECORD_TIME).setPreferredWidth(140);
+ table.getColumnModel().getColumn(ITEM_NAME).setPreferredWidth(180);
+
+ ((DefaultTableCellRenderer)
+ table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(SwingConstants.CENTER);
+
+ DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();
+ tcr.setHorizontalAlignment(SwingConstants.CENTER);
+ table.setDefaultRenderer(Object.class, tcr);
+
+ table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+
+ JScrollPane scrollPane = new JScrollPane(table);
+ scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+ scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+
+ JPanel functionPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 120, 5));
+ prePageBtn = new JButton(Res.string().getPreviousPage());
+ nextPageBtn = new JButton(Res.string().getNextPage());
+ prePageBtn.setPreferredSize(new Dimension(120, 20));
+ nextPageBtn.setPreferredSize(new Dimension(120, 20));
+
+ setButtonEnable(false);
+
+// functionPanel.add(prePageBtn);
+ functionPanel.add(nextPageBtn);
+
+ add(scrollPane, BorderLayout.CENTER);
+ add(functionPanel, BorderLayout.SOUTH);
+
+ prePageBtn.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ queryHistoryInfo(QUERY_TYPE.PRE_PAGE_QUERY);
+ }
+ });
+
+ nextPageBtn.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ queryHistoryInfo(QUERY_TYPE.NEXT_PAGE_QUERY);
+ }
+ });
+ }
+
+ public void setButtonEnable(boolean b) {
+
+ prePageBtn.setEnabled(false);
+ nextPageBtn.setEnabled(false);
+
+ if (b) {
+ if (currentIndex < ThermalCameraModule.getTotalCount()) {
+ nextPageBtn.setEnabled(true);
+ }
+
+ if (currentIndex > QUERY_SHOW_COUNT) {
+ prePageBtn.setEnabled(true);
+ }
+ }
+ }
+
+ public int getIndex() {
+ return currentIndex;
+ }
+
+ public void setIndex(int index) {
+ currentIndex = index;
+ }
+
+ public void insertData(NET_OUT_RADIOMETRY_DOFIND stuDoFind) {
+ if (stuDoFind == null) {
+ return;
+ }
+
+ tableModel.setRowCount(0);
+ for (int i = 0; i < stuDoFind.nFound; ++i) {
+ insertData(stuDoFind.stInfo[i]);
+ }
+
+ tableModel.setRowCount(QUERY_SHOW_COUNT);
+ table.updateUI();
+ }
+
+ private void insertData(NET_RADIOMETRY_QUERY data) {
+ ++currentIndex;
+ Vector vector = new Vector();
+
+ vector.add(String.valueOf(currentIndex));
+ vector.add(data.stTime.toStringTimeEx());
+ vector.add(String.valueOf(data.nPresetId));
+ vector.add(String.valueOf(data.nRuleId));
+ try {
+ vector.add(new String(data.szName, "GBK").trim());
+ } catch (UnsupportedEncodingException e) {
+ vector.add(new String(data.szName).trim());
+ }
+ vector.add(String.valueOf(data.nChannel));
+
+ if (data.stTemperInfo.nMeterType == NET_RADIOMETRY_METERTYPE.NET_RADIOMETRY_METERTYPE_SPOT) {
+ vector.add("(" + data.stCoordinates[0].nx + "," + data.stCoordinates[0].ny + ")");
+ }else if(data.stTemperInfo.nMeterType == NET_RADIOMETRY_METERTYPE.NET_RADIOMETRY_METERTYPE_LINE){
+ vector.add("(" + data.stCoordinates[0].nx + "," + data.stCoordinates[0].ny + "),(" + data.stCoordinates[1].nx + "," + data.stCoordinates[1].ny + ")");
+ }else{
+ switch(data.nCoordinateNum){
+ case 3:
+ vector.add("(" + data.stCoordinates[0].nx + "," + data.stCoordinates[0].ny + "),"
+ + "(" + data.stCoordinates[1].nx + "," + data.stCoordinates[1].ny + "),"
+ + "(" + data.stCoordinates[2].nx + "," + data.stCoordinates[2].ny + ")");
+ break;
+ case 4:
+ vector.add("(" + data.stCoordinates[0].nx + "," + data.stCoordinates[0].ny + "),"
+ + "(" + data.stCoordinates[1].nx + "," + data.stCoordinates[1].ny + "),"
+ + "(" + data.stCoordinates[2].nx + "," + data.stCoordinates[2].ny + "),"
+ + "(" + data.stCoordinates[3].nx + "," + data.stCoordinates[3].ny + ")");
+ break;
+ case 5:
+ vector.add("(" + data.stCoordinates[0].nx + "," + data.stCoordinates[0].ny + "),"
+ + "(" + data.stCoordinates[1].nx + "," + data.stCoordinates[1].ny + "),"
+ + "(" + data.stCoordinates[2].nx + "," + data.stCoordinates[2].ny + "),"
+ + "(" + data.stCoordinates[3].nx + "," + data.stCoordinates[3].ny + "),"
+ + "(" + data.stCoordinates[4].nx + "," + data.stCoordinates[4].ny + ")");
+ break;
+ case 6:
+ vector.add("(" + data.stCoordinates[0].nx + "," + data.stCoordinates[0].ny + "),"
+ + "(" + data.stCoordinates[1].nx + "," + data.stCoordinates[1].ny + "),"
+ + "(" + data.stCoordinates[2].nx + "," + data.stCoordinates[2].ny + "),"
+ + "(" + data.stCoordinates[3].nx + "," + data.stCoordinates[3].ny + "),"
+ + "(" + data.stCoordinates[4].nx + "," + data.stCoordinates[4].ny + "),"
+ + "(" + data.stCoordinates[5].nx + "," + data.stCoordinates[5].ny + "),");
+ break;
+ case 7:
+ vector.add("(" + data.stCoordinates[0].nx + "," + data.stCoordinates[0].ny + "),"
+ + "(" + data.stCoordinates[1].nx + "," + data.stCoordinates[1].ny + "),"
+ + "(" + data.stCoordinates[2].nx + "," + data.stCoordinates[2].ny + "),"
+ + "(" + data.stCoordinates[3].nx + "," + data.stCoordinates[3].ny + "),"
+ + "(" + data.stCoordinates[4].nx + "," + data.stCoordinates[4].ny + "),"
+ + "(" + data.stCoordinates[5].nx + "," + data.stCoordinates[5].ny + "),"
+ + "(" + data.stCoordinates[6].nx + "," + data.stCoordinates[6].ny + ")");
+ break;
+ case 8:
+ vector.add("(" + data.stCoordinates[0].nx + "," + data.stCoordinates[0].ny + "),"
+ + "(" + data.stCoordinates[1].nx + "," + data.stCoordinates[1].ny + "),"
+ + "(" + data.stCoordinates[2].nx + "," + data.stCoordinates[2].ny + "),"
+ + "(" + data.stCoordinates[3].nx + "," + data.stCoordinates[3].ny + "),"
+ + "(" + data.stCoordinates[4].nx + "," + data.stCoordinates[4].ny + "),"
+ + "(" + data.stCoordinates[5].nx + "," + data.stCoordinates[5].ny + "),"
+ + "(" + data.stCoordinates[6].nx + "," + data.stCoordinates[6].ny + "),"
+ + "(" + data.stCoordinates[7].nx + "," + data.stCoordinates[7].ny + ")");
+ break;
+ }
+ }
+
+ if (data.stTemperInfo.nMeterType >= 1 &&
+ data.stTemperInfo.nMeterType <= arrMeterType.length) {
+ vector.add(arrMeterType[data.stTemperInfo.nMeterType-1]);
+ }else {
+ vector.add(Res.string().getShowInfo("UNKNOWN"));
+ }
+
+ if (data.stTemperInfo.nTemperUnit >= 1 &&
+ data.stTemperInfo.nTemperUnit <= arrTemperUnit.length) {
+ vector.add(arrTemperUnit[data.stTemperInfo.nTemperUnit-1]);
+ }else {
+ vector.add(Res.string().getShowInfo("UNKNOWN"));
+ }
+
+ vector.add(String.valueOf(data.stTemperInfo.fTemperAver));
+ vector.add(String.valueOf(data.stTemperInfo.fTemperMax));
+ vector.add(String.valueOf(data.stTemperInfo.fTemperMin));
+ vector.add(String.valueOf(data.stTemperInfo.fTemperMid));
+ vector.add(String.valueOf(data.stTemperInfo.fTemperStd));
+
+ tableModel.addRow(vector);
+ }
+
+ public void clearData() {
+ currentIndex = 0;
+ tableModel.setRowCount(0);
+ tableModel.setRowCount(QUERY_SHOW_COUNT);
+ table.updateUI();
+ setButtonEnable(false);
+ }
+
+ private JTable table = null;
+ private DefaultTableModel tableModel = null;
+ public JButton prePageBtn;
+ public JButton nextPageBtn;
+ }
+
+ /**
+ * 查询类型
+ * */
+ public enum QUERY_TYPE {
+ UNKNOWN, // 未知
+ FIRST_PAGE_QUERY, // 第一页
+ PRE_PAGE_QUERY, // 上一页
+ NEXT_PAGE_QUERY // 下一页
+ };
+
+ /**
+ * 查找工作线程(完成异步搜索)
+ */
+ public class QuerySwingWorker extends SwingWorker {
+
+ private QUERY_TYPE type;
+ private int offset = 0;
+
+ public QuerySwingWorker(QUERY_TYPE type) {
+ this.type = type;
+ }
+
+ protected NET_OUT_RADIOMETRY_DOFIND doInBackground() {
+
+ int currentIndex = showPanel.getIndex();
+ try {
+ switch(type) {
+ case FIRST_PAGE_QUERY:
+ ThermalCameraModule.stopFind();
+ if (!ThermalCameraModule.startFind(stuStartFind)) {
+ return null;
+ }
+ offset = 0;
+ break;
+ case PRE_PAGE_QUERY:
+ offset = ((currentIndex-1)/QueryShowPanel.QUERY_SHOW_COUNT-1) * QueryShowPanel.QUERY_SHOW_COUNT;
+ break;
+ case NEXT_PAGE_QUERY:
+ offset = currentIndex;
+ break;
+ default:
+ break;
+ }
+
+
+ NET_OUT_RADIOMETRY_DOFIND stuDoFind = ThermalCameraModule.doFind(offset, QueryShowPanel.QUERY_SHOW_COUNT);
+
+ return stuDoFind;
+ }catch (Exception e) {
+ System.out.println(" -------- doInBackground Exception -------- ");
+ }
+ return null;
+ }
+
+ @Override
+ protected void done() {
+
+ try {
+
+ NET_OUT_RADIOMETRY_DOFIND stuDoFind = get();
+ if (stuDoFind == null) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+// System.out.println("offset " + offset + " nFound " + stuDoFind.nFound + " Total " + ThermalCameraModule.getTotalCount());
+
+ if (stuDoFind.nFound == 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getFailed(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+
+ showPanel.setIndex(offset);
+ showPanel.insertData(stuDoFind);
+ } catch (Exception e) {
+// e.printStackTrace();
+ }finally {
+ setSearchEnable(true);
+ }
+ }
+ }
+
+ private QueryPanel queryPanel;
+ private QueryShowPanel showPanel;
+}
diff --git a/src/main/java/com/netsdk/demo/frame/ThermalCamera/ThermalCamera.java b/src/main/java/com/netsdk/demo/frame/ThermalCamera/ThermalCamera.java
new file mode 100644
index 0000000..b28cf8b
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/ThermalCamera/ThermalCamera.java
@@ -0,0 +1,567 @@
+package com.netsdk.demo.frame.ThermalCamera;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.Panel;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.Vector;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JSplitPane;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.border.EmptyBorder;
+
+import com.sun.jna.Pointer;
+
+import com.netsdk.common.BorderEx;
+import com.netsdk.common.FunctionList;
+import com.netsdk.common.LoginPanel;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.demo.module.RealPlayModule;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.ToolKits;
+
+/**
+ * 热成像
+ */
+class ThermalCameraFrame extends JFrame {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public static int THERMAL_CHANNEL = 1; // thermal channel
+
+ private Vector chnlist = new Vector();
+
+ private boolean isrealplayOne = false;
+ private boolean isrealplayTwo = false;
+
+ // 设备断线通知回调
+ private static DisConnect disConnect = new DisConnect();
+
+ // 网络连接恢复
+ private static HaveReConnect haveReConnect = new HaveReConnect();
+
+ // 预览句柄
+ public static LLong m_hPlayHandleOne = new LLong(0);
+
+ public static LLong m_hPlayHandleTwo = new LLong(0);
+
+ // 获取界面窗口
+ private static JFrame frame = new JFrame();
+
+ public ThermalCameraFrame() {
+ setTitle(Res.string().getThermalCamera());
+ setLayout(new BorderLayout());
+ pack();
+ setSize(800, 560);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化
+
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ loginPanel = new LoginPanel();
+ operatePanel = new ThermalOperatePanel();
+ realPanelOne = new RealPanelOne();
+ realPanelTwo = new RealPanelTwo();
+
+ JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, loginPanel, operatePanel);
+ splitPane.setDividerSize(0);
+ splitPane.setBorder(null);
+ JPanel realPanel = new JPanel();;
+ realPanel.setLayout(new GridLayout(1, 2));
+ realPanel.add(realPanelOne);
+ realPanel.add(realPanelTwo);
+
+ add(splitPane, BorderLayout.NORTH);
+ add(realPanel, BorderLayout.CENTER);
+
+ loginPanel.addLoginBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if(loginPanel.checkLoginText()) {
+ if(login()) {
+ frame = ToolKits.getFrame(e);
+ frame.setTitle(Res.string().getShowInfo("THERMAL_CAMERA") + " : " + Res.string().getOnline());
+ }
+ }
+ }
+ });
+
+ loginPanel.addLogoutBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ frame.setTitle(Res.string().getShowInfo("THERMAL_CAMERA"));
+ logout();
+ }
+ });
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ RealPlayModule.stopRealPlay(m_hPlayHandleOne);
+ RealPlayModule.stopRealPlay(m_hPlayHandleTwo);
+ LoginModule.logout();
+ LoginModule.cleanup(); // 关闭工程,释放资源
+ dispose();
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+
+ /////////////////面板///////////////////
+ // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数
+ private static class DisConnect implements NetSDKLib.fDisConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+ // 断线提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getShowInfo("THERMAL_CAMERA") + " : " + Res.string().getDisConnectReconnecting());
+ }
+ });
+ }
+ }
+
+ // 网络连接恢复,设备重连成功回调
+ // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数
+ private static class HaveReConnect implements NetSDKLib.fHaveReConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+
+ // 重连提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getShowInfo("THERMAL_CAMERA") + " : " + Res.string().getOnline());
+ }
+ });
+ }
+ }
+
+ // 登录
+ public boolean login() {
+ if(LoginModule.login(loginPanel.ipTextArea.getText(),
+ Integer.parseInt(loginPanel.portTextArea.getText()),
+ loginPanel.nameTextArea.getText(),
+ new String(loginPanel.passwordTextArea.getPassword()))) {
+
+
+ for(int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) {
+ chnlist.add(Res.string().getChannel() + " " + String.valueOf(i));
+ }
+
+ setEnable(true);
+
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ return true;
+ }
+
+ // 登出
+ public void logout() {
+ RealPlayModule.stopRealPlay(m_hPlayHandleOne);
+ RealPlayModule.stopRealPlay(m_hPlayHandleTwo);
+ LoginModule.logout();
+
+ setEnable(false);
+ chnlist.clear();
+ }
+
+ public void setEnable(boolean b) {
+ loginPanel.setButtonEnable(b);
+ realPanelOne.setRealPlayEnable(b);
+ realPanelTwo.setRealPlayEnable(b);
+ operatePanel.setOperateEnabled(b);
+ isrealplayOne = false;
+ isrealplayTwo = false;
+ }
+
+ /*
+ * 热成像操作面板
+ */
+ private class ThermalOperatePanel extends JPanel {
+
+ private static final long serialVersionUID = 1L;
+
+ public ThermalOperatePanel() {
+ BorderEx.set(this, Res.string().getShowInfo("THERMAL_OPERATE"), 2);
+ setLayout(new FlowLayout(FlowLayout.CENTER, 15, 5));
+
+ JLabel chnlabel = new JLabel(Res.string().getChn());
+ chnComboBox = new JComboBox();
+
+ pointQueryBtn = new JButton(Res.string().getShowInfo("POINT_QUERY"));
+ itemQueryBtn = new JButton(Res.string().getShowInfo("ITEM_QUERY"));
+ historyQueryBtn = new JButton(Res.string().getShowInfo("TEMPER_QUERY"));
+ heatMapBtn = new JButton(Res.string().getShowInfo("HEATMAP"));
+
+ Dimension btnDimension = new Dimension(140, 20);
+ pointQueryBtn.setPreferredSize(btnDimension);
+ itemQueryBtn.setPreferredSize(btnDimension);
+ historyQueryBtn.setPreferredSize(btnDimension);
+ heatMapBtn.setPreferredSize(btnDimension);
+ chnComboBox.setPreferredSize(new Dimension(80, 20));
+
+ JPanel chnPanel = new JPanel();
+ chnPanel.add(chnlabel);
+ chnPanel.add(chnComboBox);
+
+ add(chnPanel);
+ add(pointQueryBtn);
+ add(pointQueryBtn);
+ add(itemQueryBtn);
+ add(historyQueryBtn);
+ add(heatMapBtn);
+
+ setOperateEnabled(false);
+
+ listener = new ThermalOperateActionListener();
+ pointQueryBtn.addActionListener(listener);
+ itemQueryBtn.addActionListener(listener);
+ historyQueryBtn.addActionListener(listener);
+ heatMapBtn.addActionListener(listener);
+ }
+
+ public void setOperateEnabled(boolean b) {
+ pointQueryBtn.setEnabled(b);
+ itemQueryBtn.setEnabled(b);
+ historyQueryBtn.setEnabled(b);
+ heatMapBtn.setEnabled(b);
+ chnComboBox.setEnabled(b);
+ if (b) {
+ chnComboBox.setModel(new DefaultComboBoxModel(chnlist));
+ if (chnlist.size() > THERMAL_CHANNEL) {
+ chnComboBox.setSelectedIndex(THERMAL_CHANNEL);
+ }
+ }else {
+ chnComboBox.setModel(new DefaultComboBoxModel());
+ }
+ }
+
+ private JComboBox chnComboBox;
+ private ThermalOperateActionListener listener;
+ private JButton pointQueryBtn;
+ private JButton itemQueryBtn;
+ private JButton historyQueryBtn;
+ private JButton heatMapBtn;
+ }
+
+ private enum ThermalOperate {UNKNOWN, POINT_QUERY, ITEM_QUERY, TEMPER_QUERY, HEATMAP}
+
+ /**
+ * 按键监听实现类
+ */
+ private class ThermalOperateActionListener implements ActionListener {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+
+ THERMAL_CHANNEL = operatePanel.chnComboBox.getSelectedIndex();
+ ThermalOperate emType = getOperateType(arg0.getSource());
+ switch(emType) {
+ case POINT_QUERY:
+ new PointQueryDialog().setVisible(true);
+ break;
+ case ITEM_QUERY:
+ new ItemQueryDialog().setVisible(true);
+ break;
+ case TEMPER_QUERY:
+ new TemperQueryDialog().setVisible(true);
+ break;
+ case HEATMAP:
+ new HeatMapDialog().setVisible(true);
+ break;
+ default:
+ break;
+ }
+ }
+
+ private ThermalOperate getOperateType(Object btn) {
+ ThermalOperate type = ThermalOperate.UNKNOWN;
+
+ if (btn == operatePanel.pointQueryBtn) {
+ type = ThermalOperate.POINT_QUERY;
+ }else if (btn == operatePanel.itemQueryBtn) {
+ type = ThermalOperate.ITEM_QUERY;
+ }else if (btn == operatePanel.historyQueryBtn) {
+ type = ThermalOperate.TEMPER_QUERY;
+ }else if (btn == operatePanel.heatMapBtn) {
+ type = ThermalOperate.HEATMAP;
+ }else{
+ System.err.println("Unknown Event: " + btn);
+ }
+
+ return type;
+
+ }
+ }
+
+ /*
+ * 预览界面通道、码流设置 以及抓图面板
+ */
+ private class RealPanelOne extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public RealPanelOne() {
+ BorderEx.set(this, Res.string().getRealplay(), 2);
+ setLayout(new BorderLayout());
+
+ channelPanelOne = new Panel();
+ realplayPanelOne = new JPanel();
+
+ add(channelPanelOne, BorderLayout.NORTH);
+ add(realplayPanelOne, BorderLayout.CENTER);
+
+ /************ 预览面板 **************/
+ realplayPanelOne.setLayout(new BorderLayout());
+ realplayPanelOne.setBorder(new EmptyBorder(5, 5, 5, 5));
+ realPlayWindowOne = new Panel();
+ realPlayWindowOne.setBackground(Color.GRAY);
+ realplayPanelOne.add(realPlayWindowOne, BorderLayout.CENTER);
+
+ /************ 通道、码流面板 **************/
+ chnlabelOne = new JLabel(Res.string().getChn());
+ chnComboBoxOne = new JComboBox();
+
+ streamLabelOne = new JLabel(Res.string().getStreamType());
+ String[] stream = {Res.string().getMasterStream(), Res.string().getSubStream()};
+ streamComboBoxOne = new JComboBox(stream);
+
+ realplayBtnOne = new JButton(Res.string().getStartRealPlay());
+
+ channelPanelOne.setLayout(new FlowLayout());
+ channelPanelOne.add(chnlabelOne);
+ channelPanelOne.add(chnComboBoxOne);
+ channelPanelOne.add(streamLabelOne);
+ channelPanelOne.add(streamComboBoxOne);
+ channelPanelOne.add(realplayBtnOne);
+
+ chnComboBoxOne.setPreferredSize(new Dimension(80, 20));
+ streamComboBoxOne.setPreferredSize(new Dimension(95, 20));
+ realplayBtnOne.setPreferredSize(new Dimension(115, 20));
+
+ realPlayWindowOne.setEnabled(false);
+ chnComboBoxOne.setEnabled(false);
+ streamComboBoxOne.setEnabled(false);
+ realplayBtnOne.setEnabled(false);
+
+ realplayBtnOne.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ realPlay();
+ }
+ });
+ }
+
+ public void setRealPlayEnable(boolean bln) {
+ realPlayWindowOne.setEnabled(bln);
+ chnComboBoxOne.setEnabled(bln);
+ streamComboBoxOne.setEnabled(bln);
+ realplayBtnOne.setEnabled(bln);
+ if (bln) {
+ chnComboBoxOne.setModel(new DefaultComboBoxModel(chnlist));
+ }else {
+ realPlayWindowOne.repaint();
+ realplayBtnOne.setText(Res.string().getStartRealPlay());
+ chnComboBoxOne.setModel(new DefaultComboBoxModel());
+ }
+ }
+
+ private void realPlay() {
+ if(!isrealplayOne) {
+ m_hPlayHandleOne = RealPlayModule.startRealPlay(chnComboBoxOne.getSelectedIndex(),
+ streamComboBoxOne.getSelectedIndex()==0? 0:3,
+ realPlayWindowOne);
+ if(m_hPlayHandleOne.longValue() != 0) {
+ changePlayStatus(true);
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ } else {
+ RealPlayModule.stopRealPlay(m_hPlayHandleOne);
+ changePlayStatus(false);
+ }
+ }
+
+ private void changePlayStatus(boolean b) {
+ realPlayWindowOne.repaint();
+ isrealplayOne = b;
+ chnComboBoxOne.setEnabled(!b);
+ streamComboBoxOne.setEnabled(!b);
+ if (b) {
+ realplayBtnOne.setText(Res.string().getStopRealPlay());
+ } else {
+ m_hPlayHandleOne.setValue(0);
+ realplayBtnOne.setText(Res.string().getStartRealPlay());
+ }
+ }
+
+ private JPanel realplayPanelOne;
+ private Panel realPlayWindowOne;
+ private Panel channelPanelOne;
+
+ private JLabel chnlabelOne;
+ private JComboBox chnComboBoxOne;
+ private JLabel streamLabelOne;
+ private JComboBox streamComboBoxOne;
+ private JButton realplayBtnOne;
+ }
+
+ private class RealPanelTwo extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public RealPanelTwo() {
+ BorderEx.set(this, Res.string().getRealplay(), 2);
+ setLayout(new BorderLayout());
+
+ channelPanelTwo = new Panel();
+ realplayPanelTwo = new JPanel();
+
+ add(channelPanelTwo, BorderLayout.NORTH);
+ add(realplayPanelTwo, BorderLayout.CENTER);
+
+ /************ 预览面板 **************/
+ realplayPanelTwo.setLayout(new BorderLayout());
+ realplayPanelTwo.setBorder(new EmptyBorder(5, 5, 5, 5));
+ realPlayWindowTwo = new Panel();
+ realPlayWindowTwo.setBackground(Color.GRAY);
+ realplayPanelTwo.add(realPlayWindowTwo, BorderLayout.CENTER);
+
+ /************ 通道、码流面板 **************/
+ chnlabelTwo = new JLabel(Res.string().getChn());
+ chnComboBoxTwo = new JComboBox();
+
+ streamLabelTwo = new JLabel(Res.string().getStreamType());
+ String[] stream = {Res.string().getMasterStream(), Res.string().getSubStream()};
+ streamComboBoxTwo = new JComboBox(stream);
+
+ realplayBtnTwo = new JButton(Res.string().getStartRealPlay());
+
+ channelPanelTwo.setLayout(new FlowLayout());
+ channelPanelTwo.add(chnlabelTwo);
+ channelPanelTwo.add(chnComboBoxTwo);
+ channelPanelTwo.add(streamLabelTwo);
+ channelPanelTwo.add(streamComboBoxTwo);
+ channelPanelTwo.add(realplayBtnTwo);
+
+ chnComboBoxTwo.setPreferredSize(new Dimension(80, 20));
+ streamComboBoxTwo.setPreferredSize(new Dimension(95, 20));
+ realplayBtnTwo.setPreferredSize(new Dimension(115, 20));
+
+ realPlayWindowTwo.setEnabled(false);
+ chnComboBoxTwo.setEnabled(false);
+ streamComboBoxTwo.setEnabled(false);
+ realplayBtnTwo.setEnabled(false);
+
+ realplayBtnTwo.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ realPlay();
+ }
+ });
+ }
+
+ public void setRealPlayEnable(boolean bln) {
+ realPlayWindowTwo.setEnabled(bln);
+ chnComboBoxTwo.setEnabled(bln);
+ streamComboBoxTwo.setEnabled(bln);
+ realplayBtnTwo.setEnabled(bln);
+ if (bln) {
+ chnComboBoxTwo.setModel(new DefaultComboBoxModel(chnlist));
+ if (chnlist.size() > THERMAL_CHANNEL) {
+ chnComboBoxTwo.setSelectedIndex(THERMAL_CHANNEL);
+ }
+ }else {
+ realPlayWindowTwo.repaint();
+ realplayBtnTwo.setText(Res.string().getStartRealPlay());
+ chnComboBoxTwo.setModel(new DefaultComboBoxModel());
+ }
+ }
+
+ private void realPlay() {
+ if(!isrealplayTwo) {
+ m_hPlayHandleTwo = RealPlayModule.startRealPlay(chnComboBoxTwo.getSelectedIndex(),
+ streamComboBoxTwo.getSelectedIndex()==0? 0:3,
+ realPlayWindowTwo);
+ if(m_hPlayHandleTwo.longValue() != 0) {
+ changePlayStatus(true);
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ } else {
+ RealPlayModule.stopRealPlay(m_hPlayHandleTwo);
+ changePlayStatus(false);
+ }
+ }
+
+ private void changePlayStatus(boolean b) {
+ realPlayWindowTwo.repaint();
+ isrealplayTwo = b;
+ chnComboBoxTwo.setEnabled(!b);
+ streamComboBoxTwo.setEnabled(!b);
+ if (b) {
+ realplayBtnTwo.setText(Res.string().getStopRealPlay());
+ } else {
+ m_hPlayHandleTwo.setValue(0);
+ realplayBtnTwo.setText(Res.string().getStartRealPlay());
+ }
+ }
+
+ private JPanel realplayPanelTwo;
+ private Panel realPlayWindowTwo;
+ private Panel channelPanelTwo;
+
+ private JLabel chnlabelTwo;
+ private JComboBox chnComboBoxTwo;
+ private JLabel streamLabelTwo;
+ private JComboBox streamComboBoxTwo;
+ private JButton realplayBtnTwo;
+ }
+
+ private LoginPanel loginPanel;
+ private ThermalOperatePanel operatePanel;
+ private RealPanelOne realPanelOne;
+ private RealPanelTwo realPanelTwo;
+}
+
+
+public class ThermalCamera {
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+// Res.string().switchLanguage(LanguageType.English);
+ ThermalCameraFrame demo = new ThermalCameraFrame();
+ demo.setVisible(true);
+ }
+ });
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/frame/TrafficAllowList.java b/src/main/java/com/netsdk/demo/frame/TrafficAllowList.java
new file mode 100644
index 0000000..5f2a790
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/TrafficAllowList.java
@@ -0,0 +1,1344 @@
+package com.netsdk.demo.frame;
+
+import com.netsdk.common.FunctionList;
+import com.netsdk.common.Res;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.ToolKits;
+import com.sun.jna.Memory;
+import com.sun.jna.Pointer;
+import com.sun.jna.ptr.IntByReference;
+import com.sun.jna.ptr.LongByReference;
+
+import javax.swing.*;
+import javax.swing.border.Border;
+import javax.swing.table.DefaultTableModel;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.File;
+import java.io.UnsupportedEncodingException;
+
+import static com.netsdk.lib.NetSDKLib.NET_MAX_NAME_LEN;
+import static com.netsdk.lib.NetSDKLib.NET_MAX_PLATE_NUMBER_LEN;
+import static java.util.Locale.ENGLISH;
+
+class JNATrafficListFrame extends Frame{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ static NetSDKLib NetSdk = NetSDKLib.NETSDK_INSTANCE;
+ static NetSDKLib ConfigSdk = NetSDKLib.CONFIG_INSTANCE;
+
+ //登陆参数
+ private String m_strIp = "172.13.138.22";
+ private Integer m_nPort = new Integer("37777");
+ private String m_strUser = "admin";
+ private String m_strPassword = "hzci202239";
+ private int nNo = 0;
+ private String[] name = {Res.string().getSerialNumber(), Res.string().getLicensePlateNumber(), Res.string().getCarOwner(),
+ Res.string().getStartTime(), Res.string().getEndTime(),Res.string().getOpenModel()};
+
+ //设备信息
+ private NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); // 对应CLIENT_LoginEx2
+ private LLong m_hLoginHandle = new LLong(0); //登陆句柄
+ private NetSDKLib.NET_TRAFFIC_LIST_RECORD pstRecordAdd = new NetSDKLib.NET_TRAFFIC_LIST_RECORD(); // 开闸权限
+
+ //////////////////SDK相关信息///////////////////////////
+ //NetSDK 库初始化
+ public class SDKEnvironment {
+
+ private boolean bInit = false;
+ private boolean bLogopen = false;
+
+ private DisConnect disConnect = new DisConnect(); //设备断线通知回调
+ private HaveReConnect haveReConnect = new HaveReConnect(); //网络连接恢复
+
+ //设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数
+ public class DisConnect implements NetSDKLib.fDisConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+ }
+ }
+ //网络连接恢复,设备重连成功回调
+ // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数
+ public class HaveReConnect implements NetSDKLib.fHaveReConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+ }
+ }
+
+ //初始化
+ public boolean init() {
+ bInit = NetSdk.CLIENT_Init(disConnect, null);
+ if(!bInit) {
+ System.out.println("Initialize SDK failed");
+ return false;
+ }
+
+ //打开日志,可选
+ NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO();
+ File path = new File(".");
+ String logPath = path.getAbsoluteFile().getParent() + "\\sdk_log\\TrafficList" + System.currentTimeMillis() + ".log";
+
+ setLog.bSetFilePath = 1;
+ System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length);
+
+ setLog.bSetPrintStrategy = 1;
+ setLog.nPrintStrategy = 0;
+ bLogopen = NetSdk.CLIENT_LogOpen(setLog);
+ if(!bLogopen ) {
+ System.err.println("Failed to open NetSDK log");
+ }
+
+ // 设置断线重连回调接口,设置过断线重连成功回调函数后,当设备出现断线情况,SDK内部会自动进行重连操作
+ // 此操作为可选操作,但建议用户进行设置
+ NetSdk.CLIENT_SetAutoReconnect(haveReConnect, null);
+
+ //设置登录超时时间和尝试次数,可选
+ int waitTime = 5000; //登录请求响应超时时间设置为5S
+ int tryTimes = 3; //登录时尝试建立链接3次
+ NetSdk.CLIENT_SetConnectTime(waitTime, tryTimes);
+
+ // 设置更多网络参数,NET_PARAM的nWaittime,nConnectTryNum成员与CLIENT_SetConnectTime
+ // 接口设置的登录设备超时时间和尝试次数意义相同,可选
+ NetSDKLib.NET_PARAM netParam = new NetSDKLib.NET_PARAM();
+ netParam.nConnectTime = 10000; //登录时尝试建立链接的超时时间
+ NetSdk.CLIENT_SetNetworkParam(netParam);
+ return true;
+ }
+
+ //清除环境
+ public void cleanup() {
+ if(bLogopen) {
+ NetSdk.CLIENT_LogClose();
+ }
+
+ if(bInit) {
+ NetSdk.CLIENT_Cleanup();
+ }
+ }
+ }
+
+ private SDKEnvironment sdkEnv;
+
+ public JNATrafficListFrame() {
+ sdkEnv = new SDKEnvironment();
+ sdkEnv.init();
+ setTitle(Res.string().getTrafficAllowList());
+ setSize(900, 650);
+ setLayout(new BorderLayout());
+ setLocationRelativeTo(null);
+ setVisible(true);
+
+ loginPanel = new LoginPanel();
+ TrafficPanel trafficPanel = new TrafficPanel();
+ QueryViewPanel queryViewPanel = new QueryViewPanel();
+
+ add(loginPanel, BorderLayout.NORTH);
+ add(trafficPanel, BorderLayout.WEST);
+ add(queryViewPanel, BorderLayout.CENTER);
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ System.out.println("Window Closing");
+ //登出
+ logoutButtonPerformed(null);
+ dispose();
+
+ // 返回主菜单
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+
+ }
+
+ /////////////////面板///////////////////
+ //////////////////////////////////////
+ //设置边框
+ private void setBorderEx(JComponent object, String title, int width) {
+ Border innerBorder = BorderFactory.createTitledBorder(title);
+ Border outerBorder = BorderFactory.createEmptyBorder(width, width, width, width);
+ object.setBorder(BorderFactory.createCompoundBorder(outerBorder, innerBorder));
+ }
+
+ //登录面板
+ public class LoginPanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public LoginPanel() {
+ loginBtn = new JButton(Res.string().getLogin());
+ logoutBtn = new JButton(Res.string().getLogout());
+ nameLabel = new JLabel(Res.string().getUserName());
+ passwordLabel = new JLabel(Res.string().getPassword());
+ nameTextArea = new JTextField(m_strUser, 8);
+ passwordTextArea = new JPasswordField(m_strPassword, 8);
+ ipLabel = new JLabel(Res.string().getIp());
+ portLabel = new JLabel(Res.string().getPort());
+ ipTextArea = new JTextField(m_strIp, 16);
+ portTextArea = new JTextField(m_nPort.toString(), 8);
+
+ setLayout(new FlowLayout());
+ setBorderEx(this, Res.string().getLogin(), 2);
+
+ add(ipLabel);
+ add(ipTextArea);
+ add(portLabel);
+ add(portTextArea);
+ add(nameLabel);
+ add(nameTextArea);
+ add(passwordLabel);
+ add(passwordTextArea);
+ add(loginBtn);
+ add(logoutBtn);
+
+ logoutBtn.setEnabled(false);
+
+ //登录按钮,监听事件
+ loginBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ new SDKEnvironment().init();
+ loginButtonPerformed(e);
+ }
+ });
+
+ //登出按钮,监听事件
+ logoutBtn.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e) {
+ logoutButtonPerformed(e);
+ }
+ });
+ }
+ }
+
+ //允许名单操作面板
+ public class TrafficPanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public TrafficPanel() {
+ setBorderEx(this,Res.string().getAllowlistOperation(), 4);
+ Dimension dim = this.getPreferredSize();
+ dim.width = 300;
+ this.setPreferredSize(dim);
+
+ SinglePanel singlePanel = new SinglePanel();
+ BatchPanel batchPanel = new BatchPanel();
+ setLayout(new BorderLayout());
+ add(singlePanel, BorderLayout.NORTH);
+ add(batchPanel, BorderLayout.SOUTH);
+ }
+ }
+
+ // 单个上传面板
+ public class SinglePanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public SinglePanel(){
+ setBorderEx(this, Res.string().getSingleUpload(), 4);
+ Dimension dim = this.getPreferredSize();
+ dim.height = 200;
+ this.setPreferredSize(dim);
+ setLayout(new GridLayout(4, 2, 30, 20));
+
+ numLabel = new JLabel( Res.string().getLicensePlateRun());
+ numTextArea = new JTextField("");
+ // queryBtn = new JButton("查询");
+ queryExBtn = new JButton(Res.string().getFuzzyQuery());
+ addBtn = new JButton(Res.string().getAdd());
+ deleteBtn = new JButton(Res.string().getDelete());
+ modifyBtn = new JButton(Res.string().getModify());
+ alldeleteBtn = new JButton(Res.string().getDeleteAll());
+
+ // queryBtn.setEnabled(false);
+ queryExBtn.setEnabled(false);
+ addBtn.setEnabled(false);
+ deleteBtn.setEnabled(false);
+ modifyBtn.setEnabled(false);
+ alldeleteBtn.setEnabled(false);
+
+ add(numLabel);
+ add(numTextArea);
+ // add(queryBtn);
+ add(queryExBtn);
+ add(addBtn);
+ add(deleteBtn);
+ add(modifyBtn);
+ add(alldeleteBtn);
+
+ /* queryBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ DefaultTableModel model = (DefaultTableModel)table.getModel();
+ model.setRowCount(0); // 在模糊查询前,清空表格
+ data = new Object[200][6]; // 再重设表格,
+ query();
+ }
+ });*/
+ queryExBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ DefaultTableModel model = (DefaultTableModel)table.getModel();
+ model.setRowCount(0); // 在模糊查询前,清空表格
+ data = new Object[200][6]; // 再重设表格,
+ queryEx();
+ }
+ });
+ addBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ new AddFrame();
+ }
+ });
+ deleteBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ int rowCount = table.getSelectedRowCount();
+ if(rowCount > 0) {
+ deleteOperate();
+ int row = table.getSelectedRow();
+ DefaultTableModel model = (DefaultTableModel)table.getModel();
+ model.removeRow(row); // 删除选中的行
+ data = new Object[200][6]; // 再重设表格,
+ } else {
+
+ JOptionPane.showMessageDialog(null, Res.string().getSelectData());
+ }
+ }
+ });
+ modifyBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ int rowCount = table.getSelectedRowCount();
+ if(rowCount > 0) {
+ new ModifyFrame();
+ int row = table.getSelectedRow(); //获得所选的单行
+ nullTextArea31.setText(String.valueOf(model.getValueAt(row, 1)));
+ nullTextArea41.setText(String.valueOf(model.getValueAt(row, 2)));
+ startTextArea1.setText(String.valueOf(model.getValueAt(row, 3)));
+ endTextArea1.setText(String.valueOf(model.getValueAt(row, 4)));
+ if((model.getValueAt(row, 5)).equals(Res.string().getAuthorization())) {
+ jr1.setSelected(true);
+ } else {
+ jr1.setSelected(false);
+ }
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectData());
+ }
+ }
+ });
+ alldeleteBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ alldeleteOperate();
+ }
+ });
+ }
+ }
+
+ // 批量上传面板
+ public class BatchPanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public BatchPanel() {
+ setBorderEx(this, Res.string().getBatchUpload(), 4);
+ Dimension dim = this.getPreferredSize();
+ dim.height = 150;
+ this.setPreferredSize(dim);
+ setLayout(new GridLayout(3, 2, 30, 20));
+
+ browseTextArea = new JTextField();
+ browseBtn = new JButton(Res.string().getBrowse());
+ nullLabel1 = new JLabel("");
+ upLoadBtn = new JButton(Res.string().getUpload());
+ nullLabel2 = new JLabel("");
+
+ browseTextArea.setEditable(false);
+ browseBtn.setEnabled(false);
+ upLoadBtn.setEnabled(false);
+
+ add(browseTextArea);
+ add(browseBtn);
+ add(nullLabel1);
+ add(upLoadBtn);
+ add(nullLabel2);
+
+ final File[] file = new File[1];
+ browseBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ jfc = new JFileChooser();
+ jfc.setMultiSelectionEnabled(true); //可以拖选多个文件
+ jfc.setAcceptAllFileFilterUsed(false); //关掉显示所有
+ //添加过滤器
+ jfc.addChoosableFileFilter(new javax.swing.filechooser.FileFilter() {
+ public boolean accept(File f) {
+ if(f.getName().endsWith(".CSV")||f.isDirectory()) {
+ file[0] =f;
+ return true;
+ }
+ return false;
+ }
+ public String getDescription() {
+ return ".CSV";
+ }
+ });
+ if(jfc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
+ System.out.println(jfc.getSelectedFile().getAbsolutePath());
+ browseTextArea.setText(jfc.getSelectedFile().getAbsolutePath());
+ }
+ }
+ });
+
+ upLoadBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+
+ if(browseTextArea.getText().isEmpty()){
+
+ }else {
+
+
+ String uploading = Res.string().getUploading();
+ upLoadBtn.setLabel(uploading);
+ JOptionPane jOptionPane=new JOptionPane();
+ if(uploading.equals("uploading")){
+ jOptionPane.setDefaultLocale(ENGLISH);
+ }
+
+ if( jOptionPane.showConfirmDialog(null, Res.string().getSureUpload())==JOptionPane.OK_OPTION){
+ upLoad();
+ }
+
+ upLoadBtn.setLabel(Res.string().getUpload());
+ }
+ }
+ });
+ }
+ }
+
+ // 查询显示 面板
+ public class QueryViewPanel extends JPanel {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public QueryViewPanel() {
+ setBorderEx(this, Res.string().getQueryInformation() , 4);
+ setLayout(new BorderLayout());
+
+ // 在JTable列表里添加一个模版,信息存在模版里
+ data = new Object[200][6];
+ model = new DefaultTableModel(data, name);
+ table = new JTable(model);
+
+ // 设置某列的宽度
+ table.getColumnModel().getColumn(0).setPreferredWidth(40);
+ table.getColumnModel().getColumn(3).setPreferredWidth(120);
+ table.getColumnModel().getColumn(4).setPreferredWidth(120);
+ table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行
+
+ // 建立滑动面板,并插入列表
+ JScrollPane scrollPane = new JScrollPane(table);
+ add(scrollPane, BorderLayout.CENTER);
+ }
+ }
+
+ //添加按钮窗口
+ public class AddFrame extends Frame{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ public AddFrame(){
+ setTitle(Res.string().getDialog());
+ setSize(450, 450);
+ setLocationRelativeTo(null);
+ setVisible(true);
+ setLayout(new BorderLayout());
+ DialogPanel dialogPanel = new DialogPanel();
+ add(dialogPanel, BorderLayout.CENTER);
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e){
+ dispose();
+ }
+ });
+ }
+ public class DialogPanel extends JPanel{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public DialogPanel() {
+ setBorderEx(this, Res.string().getAdd(), 4);
+ Dimension dim = this.getPreferredSize();
+ dim.height = 400;
+ dim.width = 400;
+ this.setPreferredSize(dim);
+ setLayout(new GridLayout(3, 1));
+ JPanel jp11 = new JPanel();
+ JPanel jp1 = new JPanel();
+ JPanel jp2 = new JPanel();
+ JPanel jp3 = new JPanel();
+
+ numberLabel = new JLabel(Res.string().getLicensePlateNumber());
+ String[] str;
+ if(Res.string().getLicensePlateNumber().equals("license plate number")){
+ str= new String[]{"jing", "jin", "ji"};
+ }else {
+ //下拉菜单设置选项
+ str = new String[]{"京", "津", "冀", "晋", "内蒙古", "辽", "吉", "黑", "沪", "鲁", "苏", "浙", "皖", "闽", "赣", "豫", "鄂", "湘",
+ "粤", "桂", "琼", "渝", "川", "贵", "云", "藏", "陕", "甘", "青", "宁", "新", "港", "澳", "台"};
+ }
+
+ /*ComboBoxModel jComboBoxModel = new DefaultComboBoxModel(str);
+ jComboBox.setModel(jComboBoxModel);*/
+ jComboBox = new JComboBox(str);
+ jComboBox.setPreferredSize(new Dimension(100, 25)); // 设置宽度
+
+ nullTextArea3 = new JTextField(8);
+ userLabel = new JLabel(Res.string().getCarOwner());
+ nullTextArea4 = new JTextField(8);
+ startTime = new JLabel(Res.string().getStartTime());
+ startTextArea = new JTextField("2021/11/1 6:07:07");
+ stopTime = new JLabel(Res.string().getEndTime());
+ endTextArea = new JTextField("2021/11/1 8:08:07");
+
+ jr = new JRadioButton(Res.string().getAuthorization());
+ jr.setSelected(true);
+ okBtn = new JButton(Res.string().getConfirm());
+ cancleBtn = new JButton(Res.string().getCancel());
+
+ jp11.setLayout(new FlowLayout(FlowLayout.CENTER));
+ jp11.add(jComboBox);
+ jp11.add(nullTextArea3);
+
+ jp1.setLayout(new GridLayout(4, 2, 1, 8));
+ jp1.add(numberLabel);
+ jp1.add(jp11);
+ jp1.add(userLabel);
+ jp1.add(nullTextArea4);
+ jp1.add(startTime);
+ jp1.add(startTextArea);
+
+ jp1.add(stopTime);
+ jp1.add(endTextArea);
+
+ jp2.setLayout(new FlowLayout(FlowLayout.CENTER));
+ jp2.add(jr);
+
+ jp3.setLayout(new FlowLayout(FlowLayout.CENTER));
+ jp3.add(okBtn);
+ jp3.add(cancleBtn);
+
+ add(jp1);
+ add(jp2);
+ add(jp3);
+
+ okBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ if(jr.isSelected()) {
+ pstRecordAdd.stAuthrityTypes[0].emAuthorityType = NetSDKLib.EM_NET_AUTHORITY_TYPE.NET_AUTHORITY_OPEN_GATE;
+ pstRecordAdd.stAuthrityTypes[0].bAuthorityEnable = 1;
+ } else {
+ pstRecordAdd.stAuthrityTypes[0].emAuthorityType = NetSDKLib.EM_NET_AUTHORITY_TYPE.NET_AUTHORITY_OPEN_GATE;
+ pstRecordAdd.stAuthrityTypes[0].bAuthorityEnable = 0;
+ }
+ addOperate();
+ dispose();
+ }
+ });
+
+ cancleBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ dispose();
+ }
+ });
+ }
+ }
+ }
+ // 修改按钮窗口
+ public class ModifyFrame extends Frame{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ public ModifyFrame(){
+ setTitle(Res.string().getModifyPanel());
+ setSize(450, 350);
+ setLocationRelativeTo(null);
+ setVisible(true);
+ setLayout(new BorderLayout());
+ ModifyPanel modifyPanel = new ModifyPanel();
+ add(modifyPanel, BorderLayout.CENTER);
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e){
+ dispose();
+ }
+ });
+ }
+ public class ModifyPanel extends JPanel{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public ModifyPanel() {
+ setBorderEx(this, Res.string().getModify(), 3);
+ Dimension dim = this.getPreferredSize();
+ dim.height = 450;
+ dim.width = 350;
+
+ this.setPreferredSize(dim);
+ setLayout(new GridLayout(3, 1,2,2));
+ JPanel jp111 = new JPanel();
+ JPanel jp11 = new JPanel();
+ JPanel jp21 = new JPanel();
+ JPanel jp31 = new JPanel();
+
+ numberLabel1 = new JLabel(Res.string().getLicensePlateNumber());
+ nullTextArea31 = new JTextField(33);
+ nullTextArea31.setEditable(true);
+ userLabel1 = new JLabel(Res.string().getCarOwner());
+ nullTextArea41 = new JTextField(8);
+ startTime1 = new JLabel(Res.string().getStartTime());
+ startTextArea1 = new JTextField("2021/11/1 6:07:07");
+ stopTime1 = new JLabel(Res.string().getEndTime());
+ endTextArea1 = new JTextField("2021/11/1 8:08:07");
+
+ jr1 = new JRadioButton(Res.string().getAuthorization());
+ okBtn1 = new JButton(Res.string().getConfirm());
+ cancleBtn1 = new JButton(Res.string().getCancel());
+
+ jp111.setLayout(new FlowLayout(FlowLayout.CENTER));
+ jp111.add(nullTextArea31);
+
+ jp11.setLayout(new GridLayout(4, 2, 1, 1));
+
+ jp11.add(numberLabel1);
+ jp11.add(jp111);
+ jp11.add(userLabel1);
+ jp11.add(nullTextArea41);
+ jp11.add(startTime1);
+ jp11.add(startTextArea1);
+
+ jp11.add(stopTime1);
+ jp11.add(endTextArea1);
+
+ jp21.setLayout(new FlowLayout(FlowLayout.CENTER));
+ jp21.add(jr1);
+
+
+ jp31.setLayout(new FlowLayout(FlowLayout.CENTER));
+ jp31.add(okBtn1);
+ jp31.add(cancleBtn1);
+
+ add(jp11);
+ add(jp21);
+ add(jp31);
+
+ okBtn1.addActionListener(new ActionListener() {
+
+
+ public void actionPerformed(ActionEvent e) {
+
+
+
+ if(jr1.isSelected()) {
+ pstRecordAdd.stAuthrityTypes[0].emAuthorityType = NetSDKLib.EM_NET_AUTHORITY_TYPE.NET_AUTHORITY_OPEN_GATE;
+ pstRecordAdd.stAuthrityTypes[0].bAuthorityEnable = 1;
+ } else {
+ pstRecordAdd.stAuthrityTypes[0].emAuthorityType = NetSDKLib.EM_NET_AUTHORITY_TYPE.NET_AUTHORITY_OPEN_GATE;
+ pstRecordAdd.stAuthrityTypes[0].bAuthorityEnable = 0;
+ }
+ modifyOperate();
+ dispose();
+ }
+ });
+
+ cancleBtn1.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ dispose();
+ }
+ });
+ }
+ }
+ }
+
+ ////////////////////事件执行//////////////////////
+ ///////////////////////////////////////////////
+ //登录按钮事件
+ private void loginButtonPerformed(ActionEvent e) {
+ m_strIp = ipTextArea.getText();
+ m_nPort = Integer.parseInt(portTextArea.getText());
+ m_strUser = nameTextArea.getText();
+ m_strPassword = new String(passwordTextArea.getPassword());
+
+ System.out.println("设备地址:" + m_strIp + "\n端口号:" + m_nPort
+ + "\n用户名:" + m_strUser + "\n密码:" + m_strPassword);
+
+ int nSpecCap = NetSDKLib.EM_LOGIN_SPAC_CAP_TYPE.EM_LOGIN_SPEC_CAP_TCP; //=0
+ IntByReference nError = new IntByReference(0);
+ m_hLoginHandle = NetSdk.CLIENT_LoginEx2(m_strIp, m_nPort.intValue(), m_strUser, m_strPassword, nSpecCap, null, m_stDeviceInfo, nError);
+ if(m_hLoginHandle.longValue() == 0) {
+ int error = 0;
+ error = NetSdk.CLIENT_GetLastError();
+ System.err.printf("Login Device[%s] Port[%d]Failed. Last Error[0x%x]\n", m_strIp, m_nPort, error);
+ JOptionPane.showMessageDialog(this, Res.string().getLoginFailed()+":" + String.format("[0x%x]", error));
+ } else {
+ System.out.println("Login Success [ " + m_strIp + " ]");
+ JOptionPane.showMessageDialog(this, Res.string().getLoginSuccess());
+ logoutBtn.setEnabled(true);
+ loginBtn.setEnabled(false);
+ // queryBtn.setEnabled(true);
+ queryExBtn.setEnabled(true);
+ addBtn.setEnabled(true);
+ deleteBtn.setEnabled(true);
+ modifyBtn.setEnabled(true);
+ browseBtn.setEnabled(true);
+ upLoadBtn.setEnabled(true);
+ alldeleteBtn.setEnabled(true);
+ }
+ }
+
+ //登出按钮事件
+ private void logoutButtonPerformed(ActionEvent e) {
+ if(m_hLoginHandle.longValue() != 0) {
+ System.out.println("Logout Button Action");
+
+ if(NetSdk.CLIENT_Logout(m_hLoginHandle)) {
+ System.out.println("Logout Success [ " + m_strIp + " ]");
+ m_hLoginHandle.setValue(0);
+ logoutBtn.setEnabled(false);
+ loginBtn.setEnabled(true);
+ // queryBtn.setEnabled(false);
+ queryExBtn.setEnabled(false);
+ addBtn.setEnabled(false);
+ deleteBtn.setEnabled(false);
+ modifyBtn.setEnabled(false);
+ browseBtn.setEnabled(false);
+ upLoadBtn.setEnabled(false);
+
+ }
+ }
+ }
+
+ // 查询按钮事件
+ private void query() {
+ // 开始查询记录
+ NetSDKLib.NET_IN_FIND_RECORD_PARAM stuFindInParam = new NetSDKLib.NET_IN_FIND_RECORD_PARAM();
+ stuFindInParam.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICREDLIST;
+
+ NetSDKLib.FIND_RECORD_TRAFFICREDLIST_CONDITION stuRedListCondition = new NetSDKLib.FIND_RECORD_TRAFFICREDLIST_CONDITION();
+ stuFindInParam.pQueryCondition = stuRedListCondition.getPointer();
+ byte[] numText;
+ try {
+
+ numText = numTextArea.getText().trim().getBytes("GBK");
+ System.arraycopy(numText, 0, stuRedListCondition.szPlateNumber, 0, numText.length);
+ } catch (UnsupportedEncodingException e) {
+ System.err.println("字符串转码异常");
+ }
+
+
+ NetSDKLib.NET_OUT_FIND_RECORD_PARAM stuFindOutParam = new NetSDKLib.NET_OUT_FIND_RECORD_PARAM();
+
+ if((numTextArea.getText()).equals("")) {
+ JOptionPane.showMessageDialog(this, Res.string().getEnterQueryData());
+ }else {
+ stuRedListCondition.write();
+ boolean bRet = NetSdk.CLIENT_FindRecord(m_hLoginHandle, stuFindInParam, stuFindOutParam, 5000);
+ stuRedListCondition.read();
+ System.out.println("FindRecord Succeed" + "\n" + "FindHandle :" + stuFindOutParam.lFindeHandle);
+ if(bRet) {
+ int nRecordCount = 10;
+ NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM stuFindNextInParam = new NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM();
+ stuFindNextInParam.lFindeHandle = stuFindOutParam.lFindeHandle;
+ stuFindNextInParam.nFileCount = nRecordCount; //想查询的记录条数
+
+ NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM stuFindNextOutParam = new NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM();
+ stuFindNextOutParam.nMaxRecordNum = nRecordCount;
+ NetSDKLib.NET_TRAFFIC_LIST_RECORD pstRecord = new NetSDKLib.NET_TRAFFIC_LIST_RECORD();
+ stuFindNextOutParam.pRecordList = pstRecord.getPointer();
+
+ pstRecord.write();
+ boolean zRet = NetSdk.CLIENT_FindNextRecord(stuFindNextInParam, stuFindNextOutParam, 5000);
+ pstRecord.read();
+
+ if(zRet) {
+ System.out.println("record are found!");
+
+ for(int i=0; i < stuFindNextOutParam.nRetRecordNum; i++) {
+ data[i][0] = String.valueOf(i);
+ try {
+ data[i][1] = new String(pstRecord.szPlateNumber,"GBK").trim();
+ data[i][2] = new String(pstRecord.szMasterOfCar,"GBK").trim();
+ data[i][3] = pstRecord.stBeginTime.toStringTime();
+ data[i][4] = pstRecord.stCancelTime.toStringTime();
+ } catch (UnsupportedEncodingException e) {
+ System.err.println("字符串转码异常");
+ }
+
+ if(pstRecord.stAuthrityTypes[0].bAuthorityEnable == 1) {
+ data[i][5] = "授权";
+ } else {
+ data[i][5] = "不授权";
+ }
+ model.setDataVector(data, name);
+ }
+ }
+
+ NetSdk.CLIENT_FindRecordClose(stuFindOutParam.lFindeHandle);
+ }else {
+ System.err.println("Can Not Find This Record" + String.format("0x%x", NetSdk.CLIENT_GetLastError()));
+ }
+ }
+ }
+ public static void ByteArrZero(byte[] dst) {
+ // 清零
+ for (int i = 0; i < dst.length; ++i) {
+ dst[i] = 0;
+ }
+ }
+ // 模糊查询按钮事件
+ private void queryEx() {
+
+ NetSDKLib.NET_IN_FIND_RECORD_PARAM stuFindInParam = new NetSDKLib.NET_IN_FIND_RECORD_PARAM();
+ stuFindInParam.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICREDLIST;
+
+ NetSDKLib.FIND_RECORD_TRAFFICREDLIST_CONDITION stuRedListConditionEx = new NetSDKLib.FIND_RECORD_TRAFFICREDLIST_CONDITION();
+ stuFindInParam.pQueryCondition = stuRedListConditionEx.getPointer();
+ JNATrafficListFrame.ByteArrZero(stuRedListConditionEx.szPlateNumberVague);
+
+ try {
+ byte[] numText = numTextArea.getText().trim().getBytes("GBK");
+
+ System.arraycopy(numText, 0, stuRedListConditionEx.szPlateNumberVague, 0, numText.length);
+ } catch (UnsupportedEncodingException e) {
+ System.err.println("字符串转码异常");
+ }
+
+
+ NetSDKLib.NET_OUT_FIND_RECORD_PARAM stuFindOutParam = new NetSDKLib.NET_OUT_FIND_RECORD_PARAM();
+
+ stuRedListConditionEx.write();
+ boolean bRet = NetSdk.CLIENT_FindRecord(m_hLoginHandle, stuFindInParam, stuFindOutParam, 10000);
+ stuRedListConditionEx.read();
+ int total=0;
+ if(bRet) {
+ int doNextCount = 0;
+ while(true) {
+ int nRecordCount = 10;
+ NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM stuFindNextInParam = new NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM();
+ stuFindNextInParam.lFindeHandle = stuFindOutParam.lFindeHandle;
+ stuFindNextInParam.nFileCount = nRecordCount;
+
+ NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM stuFindNextOutParam = new NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM();
+ stuFindNextOutParam.nMaxRecordNum = nRecordCount;
+ NetSDKLib.NET_TRAFFIC_LIST_RECORD pstRecordEx = new NetSDKLib.NET_TRAFFIC_LIST_RECORD();
+ stuFindNextOutParam.pRecordList = new Memory(pstRecordEx.dwSize * nRecordCount); //分配(stRecordEx.dwSize * nRecordCount)个内存
+
+
+ // 把内存里的dwSize赋值
+ for (int i=0; idata.length-1){
+
+ continue;
+ }
+ data[item][0] = String.valueOf(item);
+ ToolKits.GetPointerDataToStruct(stuFindNextOutParam.pRecordList, i*pstRecordEx.dwSize, pstRecordEx);
+ try {
+ data[item][1] = new String(pstRecordEx.szPlateNumber,"GBK").trim();
+ data[item][2] = new String(pstRecordEx.szMasterOfCar,"GBK").trim();
+ data[item][3] = pstRecordEx.stBeginTime.toStringTime();
+ data[item][4] = pstRecordEx.stCancelTime.toStringTime();
+ } catch (UnsupportedEncodingException e) {
+ System.err.println("字符串转码异常");
+ }
+
+ if(pstRecordEx.stAuthrityTypes[0].bAuthorityEnable == 1) {
+ data[item][5] = Res.string().getAuthorization();
+ } else {
+ data[item][5] =Res.string().getUnauthorization();
+ }
+
+ model.setDataVector(data, name);
+
+ }
+
+ if (stuFindNextOutParam.nRetRecordNum < nRecordCount)
+ {
+ break;
+ } else {
+ doNextCount ++;
+ }
+ } else {
+ break;
+ }
+ }
+ NetSdk.CLIENT_FindRecordClose(stuFindOutParam.lFindeHandle);
+
+ JOptionPane.showMessageDialog(this, total+" "+Res.string().getDataNumber());
+
+ }else {
+ System.err.println("Can Not Find This Record" + String.format("0x%x", NetSdk.CLIENT_GetLastError()));
+ }
+ }
+
+ // 添加按钮事件
+ private void addOperate() {
+ NetSDKLib.NET_INSERT_RECORD_INFO stInsertInfo = new NetSDKLib.NET_INSERT_RECORD_INFO(); // 添加
+
+ NetSDKLib.NET_TRAFFIC_LIST_RECORD.ByReference stRec = new NetSDKLib.NET_TRAFFIC_LIST_RECORD.ByReference();
+
+
+ try {
+
+ String plate = nullTextArea3.getText();
+
+ boolean matches = plate.matches("^[\\da-zA-Z]*$");
+
+ if(!matches){
+ JOptionPane.showMessageDialog(this, Res.string().getFillingRules());
+ return;
+ }
+
+ byte[] PlateNumber
+ = (jComboBox.getSelectedItem().toString() + plate).getBytes("GBK");
+
+ if(PlateNumber.length>NET_MAX_PLATE_NUMBER_LEN){
+ JOptionPane.showMessageDialog(this, Res.string().getLicensePlateLengthTooLong());
+
+ return;
+ }
+
+ byte[] MasterOfCar = nullTextArea4.getText().getBytes("GBK");
+
+ if(MasterOfCar.length>NET_MAX_NAME_LEN){
+ JOptionPane.showMessageDialog(this, Res.string().getNameTooLong());
+ return;
+ }
+
+ stRec.szPlateNumber =PlateNumber;
+ stRec.szMasterOfCar = MasterOfCar;
+ } catch (UnsupportedEncodingException e) {
+ System.err.println("字符串转码异常");
+ }
+
+ String[] start = startTextArea.getText().split(" ");
+ String st1 = start[0];
+ String st2 = start[1];
+ String[] start1 = st1.split("/"); //年月日
+ String[] start2 = st2.split(":"); // 时分
+ String[] end = endTextArea.getText().split(" ");
+ String ed1 = end[0];
+ String ed2 = end[1];
+ String[] end1 = ed1.split("/"); //年月日
+ String[] end2 = ed2.split(":"); // 时分
+ stRec.stBeginTime.dwYear = Integer.parseInt(start1[0]);
+ stRec.stBeginTime.dwMonth = Integer.parseInt(start1[1]);
+ stRec.stBeginTime.dwDay = Integer.parseInt(start1[2]);
+ stRec.stBeginTime.dwHour = Integer.parseInt(start2[0]);
+ stRec.stBeginTime.dwMinute = Integer.parseInt(start2[1]);
+ stRec.stBeginTime.dwSecond = Integer.parseInt(start2[2]);
+ stRec.stCancelTime.dwYear = Integer.parseInt(end1[0]);
+ stRec.stCancelTime.dwMonth = Integer.parseInt(end1[1]);
+ stRec.stCancelTime.dwDay = Integer.parseInt(end1[2]);
+ stRec.stCancelTime.dwHour = Integer.parseInt(end2[0]);
+ stRec.stCancelTime.dwMinute = Integer.parseInt(end2[1]);
+ stRec.stCancelTime.dwSecond = Integer.parseInt(end2[2]);
+ stRec.nAuthrityNum = 1;
+ stRec.stAuthrityTypes[0].emAuthorityType = pstRecordAdd.stAuthrityTypes[0].emAuthorityType;
+ stRec.stAuthrityTypes[0].bAuthorityEnable = pstRecordAdd.stAuthrityTypes[0].bAuthorityEnable;
+
+ stInsertInfo.pRecordInfo = stRec;
+
+ NetSDKLib.NET_IN_OPERATE_TRAFFIC_LIST_RECORD stInParam = new NetSDKLib.NET_IN_OPERATE_TRAFFIC_LIST_RECORD();
+ stInParam.emOperateType = NetSDKLib.EM_RECORD_OPERATE_TYPE.NET_TRAFFIC_LIST_INSERT;
+ stInParam.emRecordType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICREDLIST;
+ stInParam.pstOpreateInfo = stInsertInfo.getPointer();
+
+ NetSDKLib.NET_OUT_OPERATE_TRAFFIC_LIST_RECORD stOutParam = new NetSDKLib.NET_OUT_OPERATE_TRAFFIC_LIST_RECORD();
+ stRec.write();
+ stInsertInfo.write();
+ stInParam.write();
+
+ boolean zRet = NetSdk.CLIENT_OperateTrafficList(m_hLoginHandle, stInParam, stOutParam, 5000);
+ if(zRet) {
+ stInParam.read();
+ System.out.println("succeed!");
+ JOptionPane.showMessageDialog(this, Res.string().getAddSuccess());
+ } else {
+ System.err.println("failed!" + String.format("0x%x", NetSdk.CLIENT_GetLastError()));
+ JOptionPane.showMessageDialog(this, Res.string().getAddFail());
+ }
+ }
+
+ // 查询之前的记录号
+ private void findRecordCount() {
+ // 开始查询记录
+ NetSDKLib.NET_IN_FIND_RECORD_PARAM stuFindInParam = new NetSDKLib.NET_IN_FIND_RECORD_PARAM();
+ stuFindInParam.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICREDLIST;
+ NetSDKLib.FIND_RECORD_TRAFFICREDLIST_CONDITION stuRedListCondition = new NetSDKLib.FIND_RECORD_TRAFFICREDLIST_CONDITION();
+ stuFindInParam.pQueryCondition = stuRedListCondition.getPointer();
+ // 获取选中行的车牌号,并赋值
+ int row = table.getSelectedRow();
+ try {
+ System.arraycopy(String.valueOf(model.getValueAt(row, 1)).getBytes("GBK"), 0, stuRedListCondition.szPlateNumber,
+ 0, String.valueOf(model.getValueAt(row, 1)).getBytes("GBK").length);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ NetSDKLib.NET_OUT_FIND_RECORD_PARAM stuFindOutParam = new NetSDKLib.NET_OUT_FIND_RECORD_PARAM();
+
+ stuFindInParam.write();
+ stuRedListCondition.write();
+ boolean bRet = NetSdk.CLIENT_FindRecord(m_hLoginHandle, stuFindInParam, stuFindOutParam, 5000);
+ stuRedListCondition.read();
+ stuFindInParam.read();
+
+ if(bRet){
+ int nRecordCount = 1;
+
+ NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM stuFindNextInParam = new NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM();
+ stuFindNextInParam.lFindeHandle = stuFindOutParam.lFindeHandle;
+ stuFindNextInParam.nFileCount = nRecordCount; //想查询的记录条数
+
+ NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM stuFindNextOutParam = new NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM();
+ stuFindNextOutParam.nMaxRecordNum = nRecordCount;
+ NetSDKLib.NET_TRAFFIC_LIST_RECORD pstRecord = new NetSDKLib.NET_TRAFFIC_LIST_RECORD();
+ stuFindNextOutParam.pRecordList = pstRecord.getPointer();
+
+ stuFindNextInParam.write();
+ stuFindNextOutParam.write();
+ pstRecord.write();
+ boolean zRet = NetSdk.CLIENT_FindNextRecord(stuFindNextInParam, stuFindNextOutParam, 5000);
+ pstRecord.read();
+ stuFindNextInParam.read();
+ stuFindNextOutParam.read();
+
+ if(zRet) {
+ // 获取当前记录号
+ nNo = pstRecord.nRecordNo;
+ }
+ // 停止查询
+ NetSdk.CLIENT_FindRecordClose(stuFindOutParam.lFindeHandle);
+ } else {
+ System.err.println("error occured!" + String.format("0x%x", NetSdk.CLIENT_GetLastError()));
+ }
+ }
+
+ // 删除按钮事件
+ private void deleteOperate() {
+
+ findRecordCount();
+
+ // 获得之前查询到的记录号后,开始删除数据
+ NetSDKLib.NET_REMOVE_RECORD_INFO stRemoveInfo = new NetSDKLib.NET_REMOVE_RECORD_INFO();
+
+ stRemoveInfo.nRecordNo = nNo;
+ System.out.println("nNo:"+nNo);
+ NetSDKLib.NET_IN_OPERATE_TRAFFIC_LIST_RECORD stInParam = new NetSDKLib.NET_IN_OPERATE_TRAFFIC_LIST_RECORD();
+ stInParam.emOperateType = NetSDKLib.EM_RECORD_OPERATE_TYPE.NET_TRAFFIC_LIST_REMOVE;
+ stInParam.emRecordType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICREDLIST;;
+ stInParam.pstOpreateInfo = stRemoveInfo.getPointer();
+ NetSDKLib.NET_OUT_OPERATE_TRAFFIC_LIST_RECORD stOutParam = new NetSDKLib.NET_OUT_OPERATE_TRAFFIC_LIST_RECORD();
+
+ stInParam.write();
+ stRemoveInfo.write();
+ boolean zRet = NetSdk.CLIENT_OperateTrafficList(m_hLoginHandle, stInParam, stOutParam, 5000);
+
+ if(zRet) {
+ System.out.println("delete succeed!");
+ JOptionPane.showMessageDialog(this, Res.string().getDeleteSuccess());
+ } else {
+ JOptionPane.showMessageDialog(this, Res.string().getDeleteFail());
+ System.err.println("failed!" + String.format("0x%x", NetSdk.CLIENT_GetLastError()));
+ }
+ }
+
+ // 修改按钮事件
+ private void modifyOperate() {
+
+
+ findRecordCount();
+
+ NetSDKLib.NET_TRAFFIC_LIST_RECORD.ByReference stRec = new NetSDKLib.NET_TRAFFIC_LIST_RECORD.ByReference();
+ try {
+
+ stRec.szPlateNumber = nullTextArea31.getText().getBytes("GBK");
+ stRec.szMasterOfCar = nullTextArea41.getText().getBytes("GBK");
+
+ if( stRec.szPlateNumber.length>NET_MAX_PLATE_NUMBER_LEN-1){
+ JOptionPane.showMessageDialog(this, Res.string().getLicensePlateLengthTooLong());
+ return;
+ }
+
+
+ if(stRec.szMasterOfCar.length>NET_MAX_NAME_LEN){
+ JOptionPane.showMessageDialog(this, Res.string().getNameTooLong());
+ return;
+ }
+ } catch (UnsupportedEncodingException e) {
+ System.err.println("字符串转码异常");
+ }
+
+
+
+ String[] start = startTextArea1.getText().split(" ");
+ String st1 = start[0];
+ String st2 = start[1];
+ String[] start1 = st1.split("/"); //年月日
+ String[] start2 = st2.split(":"); // 时分
+ String[] end = endTextArea1.getText().split(" ");
+ String ed1 = end[0];
+ String ed2 = end[1];
+ String[] end1 = ed1.split("/"); //年月日
+ String[] end2 = ed2.split(":"); // 时分
+ stRec.stBeginTime.dwYear = Integer.parseInt(start1[0]);
+ stRec.stBeginTime.dwMonth = Integer.parseInt(start1[1]);
+ stRec.stBeginTime.dwDay = Integer.parseInt(start1[2]);
+ stRec.stBeginTime.dwHour = Integer.parseInt(start2[0]);
+ stRec.stBeginTime.dwMinute = Integer.parseInt(start2[1]);
+ stRec.stBeginTime.dwSecond = Integer.parseInt(start2[2]);
+ stRec.stCancelTime.dwYear = Integer.parseInt(end1[0]);
+ stRec.stCancelTime.dwMonth = Integer.parseInt(end1[1]);
+ stRec.stCancelTime.dwDay = Integer.parseInt(end1[2]);
+ stRec.stCancelTime.dwHour = Integer.parseInt(end2[0]);
+ stRec.stCancelTime.dwMinute = Integer.parseInt(end2[1]);
+ stRec.stCancelTime.dwSecond = Integer.parseInt(end2[2]);
+ stRec.nAuthrityNum = 1;
+ stRec.stAuthrityTypes[0].emAuthorityType = pstRecordAdd.stAuthrityTypes[0].emAuthorityType;
+ stRec.stAuthrityTypes[0].bAuthorityEnable = pstRecordAdd.stAuthrityTypes[0].bAuthorityEnable;
+
+ stRec.nRecordNo = nNo;
+
+ NetSDKLib.NET_UPDATE_RECORD_INFO stUpdateInfo = new NetSDKLib.NET_UPDATE_RECORD_INFO();
+ stUpdateInfo.pRecordInfo = stRec;
+
+ NetSDKLib.NET_IN_OPERATE_TRAFFIC_LIST_RECORD stInParam = new NetSDKLib.NET_IN_OPERATE_TRAFFIC_LIST_RECORD();
+ stInParam.emOperateType = NetSDKLib.EM_RECORD_OPERATE_TYPE.NET_TRAFFIC_LIST_UPDATE;
+ stInParam.emRecordType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICREDLIST;
+ stInParam.pstOpreateInfo = stUpdateInfo.getPointer();
+ NetSDKLib.NET_OUT_OPERATE_TRAFFIC_LIST_RECORD stOutParam = new NetSDKLib.NET_OUT_OPERATE_TRAFFIC_LIST_RECORD();
+
+ stRec.write();
+ stUpdateInfo.write();
+ stInParam.write();
+ boolean zRet = NetSdk.CLIENT_OperateTrafficList(m_hLoginHandle, stInParam, stOutParam, 5000);
+ if(zRet) {
+ System.out.println("succeed!");
+ System.out.println("stOutParam:"+stOutParam.nRecordNo);
+ JOptionPane.showMessageDialog(this, Res.string().getModifySuccess());
+ } else {
+ JOptionPane.showMessageDialog(this, Res.string().getModifyFail());
+
+ System.err.println("failed!" + String.format("0x%x", NetSdk.CLIENT_GetLastError()));
+ }
+ }
+
+ // 全部删除
+ private void alldeleteOperate() {
+ int type = NetSDKLib.CtrlType.CTRLTYPE_CTRL_RECORDSET_CLEAR;
+ NetSDKLib.NET_CTRL_RECORDSET_PARAM param = new NetSDKLib.NET_CTRL_RECORDSET_PARAM();
+ param.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICREDLIST;
+ param.write();
+ boolean zRet = NetSdk.CLIENT_ControlDevice(m_hLoginHandle, type, param.getPointer(), 5000);
+ if(zRet) {
+ System.out.println("全部删除成功");
+ JOptionPane.showMessageDialog(this, Res.string().getDeleteSuccess());
+ } else {
+ System.err.println("全部删除失败");
+ JOptionPane.showMessageDialog(this, Res.string().getDeleteFail());
+ }
+ }
+
+ // 上传按钮事件 注:上传*.CSV的文件,文件的数据会覆盖原数据库的数据,所以可以从数据库导出文件,并在文件里添加数据后,再上传
+ private void upLoad() {
+
+
+ JOptionPane jOptionPane=new JOptionPane();
+
+ NetSDKLib.NETDEV_BLACKWHITE_LIST_INFO stIn = new NetSDKLib.NETDEV_BLACKWHITE_LIST_INFO();
+ Pointer szInBuf = stIn.getPointer();
+ int nInBufLen = stIn.size();
+ try {
+ stIn.szFile = jfc.getSelectedFile().getAbsolutePath().getBytes("GBK");
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ stIn.nFileSize = 1024*1024*3; // 升级文件大小
+ stIn.byFileType = 1; //当前文件类型,0-禁止名单,1-允许名单
+ stIn.byAction = 0; //动作,0-覆盖,1-追加
+ stIn.write();
+ LLong zRet = NetSdk.CLIENT_FileTransmit(m_hLoginHandle, NetSDKLib.NET_DEV_BLACKWHITETRANS_START, szInBuf, nInBufLen, TransFileCall.getInstance(), null, 5000);
+
+
+ stIn.read();
+ if(zRet.longValue() == 0) {
+ System.err.println("Start failed!" + String.format("0x%x", NetSdk.CLIENT_GetLastError()));
+
+ String type=Res.string().getUploadFail();
+ jOptionPane.showMessageDialog( this, type);
+
+ return;
+ }
+
+ stIn.write();
+ LongByReference handleReference = new LongByReference(zRet.longValue()); //LLong转为Pointer*
+ LLong zRet1 = NetSdk.CLIENT_FileTransmit(m_hLoginHandle, NetSDKLib.NET_DEV_BLACKWHITETRANS_SEND, handleReference.getPointer(), nInBufLen, TransFileCall.getInstance(), null, 20000);
+ stIn.read();
+ if(zRet1.longValue() == 0) {
+ System.err.println("Send failed!" + String.format("0x%x", NetSdk.CLIENT_GetLastError()));
+
+ String type=Res.string().getUploadFail();
+ jOptionPane.showMessageDialog( this, type);
+ }else {
+
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ stIn.write();
+ LLong zRet2 = NetSdk.CLIENT_FileTransmit(m_hLoginHandle, NetSDKLib.NET_DEV_BLACKWHITETRANS_STOP, handleReference.getPointer(), nInBufLen, TransFileCall.getInstance(), null, 5000);
+ stIn.read();
+ if(zRet2.longValue() == 0) {
+
+ System.err.println("Stop failed!" + String.format("0x%x", NetSdk.CLIENT_GetLastError()));
+ String type=Res.string().getUploadFail();
+ jOptionPane.showMessageDialog( this, type);
+ } else {
+
+ String type=Res.string().getUploadSuccess();
+ jOptionPane.showMessageDialog( this, type);
+ }
+
+ }
+
+
+ }
+
+ private static class TransFileCall implements NetSDKLib.fTransFileCallBack{
+ private static TransFileCall instance;
+ public static TransFileCall getInstance() {
+ if (instance == null) {
+ instance = new TransFileCall();
+ }
+ return instance;
+ }
+
+
+ @Override
+ public void invoke(LLong lHandle, int nTransType, int nState, int nSendSize, int nTotalSize, Pointer dwUser) {
+ /* System.out.println("nTransType:"+nTransType);
+ System.out.println("nState:"+nState);*/
+ }
+ }
+
+ /////////////////////组件//////////////////////////
+ //////////////////////////////////////////////////
+
+ //登录组件
+ private LoginPanel loginPanel;
+ private JButton loginBtn;
+ private JButton logoutBtn;
+
+ private JLabel numLabel;
+ private JTextField numTextArea;
+ //private JButton queryBtn;
+ private JButton queryExBtn;
+ private JButton addBtn;
+ private JButton deleteBtn;
+ private JButton modifyBtn;
+
+ private JTextField browseTextArea;
+ private JButton browseBtn;
+ private JLabel nullLabel1;
+ private JButton upLoadBtn;
+ private JLabel nullLabel2;
+
+ private JComboBox jComboBox;
+ private JLabel numberLabel;
+ private JTextField nullTextArea3;
+ private JLabel userLabel;
+ private JTextField nullTextArea4;
+ private JLabel startTime;
+ private JTextField startTextArea;
+ private JLabel stopTime;
+ private JTextField endTextArea;
+ private JRadioButton jr;
+ private JButton okBtn;
+ private JButton cancleBtn;
+ private JButton alldeleteBtn;
+
+ private JLabel numberLabel1;
+ private JTextField nullTextArea31;
+ private JLabel userLabel1;
+ private JTextField nullTextArea41;
+ private JLabel startTime1;
+ private JTextField startTextArea1;
+ private JLabel stopTime1;
+ private JTextField endTextArea1;
+ private JRadioButton jr1;
+ private JButton okBtn1;
+ private JButton cancleBtn1;
+
+ private JFileChooser jfc;
+ private JLabel ipLabel;
+ private JTextField ipTextArea;
+ private JLabel nameLabel;
+ private JLabel passwordLabel;
+ private JLabel portLabel;
+
+ private JTextField portTextArea;
+ private JTextField nameTextArea;
+ private JPasswordField passwordTextArea;
+
+ private DefaultTableModel model;
+ private JTable table;
+ private Object[][] data;
+}
+
+
+public class TrafficAllowList {
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ JNATrafficListFrame demo = new JNATrafficListFrame();
+ demo.setVisible(true);
+ }
+ });
+ }
+}
+
diff --git a/src/main/java/com/netsdk/demo/frame/TrafficEvent.java b/src/main/java/com/netsdk/demo/frame/TrafficEvent.java
new file mode 100644
index 0000000..c6d62d4
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/TrafficEvent.java
@@ -0,0 +1,1689 @@
+package com.netsdk.demo.frame;
+
+import java.awt.AWTEvent;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.EventQueue;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.Panel;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.Vector;
+
+import javax.imageio.ImageIO;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.ListSelectionModel;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.border.EmptyBorder;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+
+import com.netsdk.common.*;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.demo.module.RealPlayModule;
+import com.netsdk.demo.module.TrafficEventModule;
+import com.netsdk.lib.*;
+import com.netsdk.lib.NetSDKLib.LLong;
+
+import com.sun.jna.CallbackThreadInitializer;
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+
+/*
+ * 智能交通Demo
+ */
+class TrafficEventFrame extends JFrame {
+ private static final long serialVersionUID = 1L;
+ private Vector chnlist = new Vector();
+
+ private DefaultTableModel model;
+ private AnalyzerDataCB m_AnalyzerDataCB = new AnalyzerDataCB();
+ // 设备断线通知回调
+ private static DisConnect disConnect = new DisConnect();
+
+ // 网络连接恢复
+ private static HaveReConnect haveReConnect = new HaveReConnect();
+
+ // 预览句柄
+ public static LLong m_hPlayHandle = new LLong(0);
+
+ boolean b_openStrobe = false;
+ boolean b_realplay = false;
+ boolean b_attach = false;
+
+ private int i = 1; // 列表序号
+
+ private class TRAFFIC_INFO {
+ private String m_EventName; // 事件名称
+ private String m_PlateNumber; // 车牌号
+ private String m_PlateType; // 车牌类型
+ private String m_PlateColor; // 车牌颜色
+ private String m_VehicleColor; // 车身颜色
+ private String m_VehicleType; // 车身类型
+ private String m_VehicleSize; // 车辆大小
+ private String m_FileCount; // 文件总数
+ private String m_FileIndex; // 文件编号
+ private String m_GroupID; // 组ID
+ private String m_IllegalPlace; // 违法地点
+ private String m_LaneNumber; // 通道号
+ private NetSDKLib.NET_TIME_EX m_Utc; // 事件时间
+ private int m_bPicEnble; // 车牌对应信息,BOOL类型
+ private int m_OffSet; // 车牌偏移量
+ private int m_FileLength; // 文件大小
+ private NetSDKLib.DH_RECT m_BoundingBox; // 包围盒
+ }
+
+ private TRAFFIC_INFO trafficInfo = new TRAFFIC_INFO();
+ private BufferedImage snapImage = null;
+ private BufferedImage plateImage = null;
+
+ private java.awt.Component target = this;
+
+ // 获取界面窗口
+ private static JFrame frame = new JFrame();
+
+ public TrafficEventFrame() {
+ setTitle(Res.string().getITSEvent());
+ setLayout(new BorderLayout());
+ pack();
+ setSize(800, 565);
+ setResizable(false);
+ setLocationRelativeTo(null);
+ LoginModule.init(disConnect, haveReConnect); // 打开工程,初始化
+
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ loginPanel = new LoginPanel();
+ itsPanel = new ItsPanel();
+
+ add(loginPanel, BorderLayout.NORTH);
+ add(itsPanel, BorderLayout.CENTER);
+
+ loginPanel.addLoginBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if(loginPanel.checkLoginText()) {
+ if(login()) {
+ frame = ToolKits.getFrame(e);
+ frame.setTitle(Res.string().getITSEvent() + " : " + Res.string().getOnline());
+ }
+ }
+ }
+ });
+
+ loginPanel.addLogoutBtnActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ frame.setTitle(Res.string().getITSEvent());
+ logout();
+ }
+ });
+
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ RealPlayModule.stopRealPlay(m_hPlayHandle);
+ TrafficEventModule.detachIVSEvent();
+ LoginModule.logout();
+ LoginModule.cleanup(); // 关闭工程,释放资源
+ dispose();
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+
+ /////////////////面板///////////////////
+ // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数
+ private static class DisConnect implements NetSDKLib.fDisConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+ // 断线提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getITSEvent() + " : " + Res.string().getDisConnectReconnecting());
+ }
+ });
+ }
+ }
+
+ // 网络连接恢复,设备重连成功回调
+ // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数
+ private static class HaveReConnect implements NetSDKLib.fHaveReConnect {
+ public void invoke(LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+
+ // 重连提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getITSEvent() + " : " + Res.string().getOnline());
+ }
+ });
+ }
+ }
+ // 登录
+ public boolean login() {
+ Native.setCallbackThreadInitializer(m_AnalyzerDataCB,
+ new CallbackThreadInitializer(false, false, "traffic callback thread"));
+ if(LoginModule.login(loginPanel.ipTextArea.getText(),
+ Integer.parseInt(loginPanel.portTextArea.getText()),
+ loginPanel.nameTextArea.getText(),
+ new String(loginPanel.passwordTextArea.getPassword()))) {
+
+ loginPanel.setButtonEnable(true);
+ setButtonEnable(true);
+
+ for(int i = 1; i < LoginModule.m_stDeviceInfo.byChanNum + 1; i++) {
+ chnlist.add(Res.string().getChannel() + " " + String.valueOf(i));
+ }
+
+ // 登陆成功,将通道添加到控件
+ chnComboBox.setModel(new DefaultComboBoxModel(chnlist));
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ return true;
+ }
+
+ // 登出
+ public void logout() {
+ RealPlayModule.stopRealPlay(m_hPlayHandle);
+ TrafficEventModule.detachIVSEvent();
+ LoginModule.logout();
+
+ loginPanel.setButtonEnable(false);
+ setButtonEnable(false);
+ realPlayWindow.repaint();
+ eventnameTextField.setText("");
+ licensePlateTextField.setText("");
+ eventTimeTextField.setText("");
+
+ b_realplay = false;
+ realplayBtn.setText(Res.string().getStartRealPlay());
+ b_attach = false;
+ attachBtn.setText(Res.string().getAttach());
+ b_openStrobe = false;
+ openStrobeButton.setText(Res.string().getOpenStrobe());
+
+ i = 1; // 列表序号置1
+
+ for(int i = 0; i < LoginModule.m_stDeviceInfo.byChanNum; i++) {
+ chnlist.clear();
+ }
+
+ chnComboBox.setModel(new DefaultComboBoxModel());
+
+ // 列表清空
+ defaultModel.setRowCount(0);
+ defaultModel.setRowCount(8);
+ table.updateUI();
+
+ SnapImagePanel.setOpaque(true);
+ SnapImagePanel.repaint();
+
+ plateImagePanel.setOpaque(true);
+ plateImagePanel.repaint();
+ }
+
+ private class ItsPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public ItsPanel() {
+ BorderEx.set(this, null, 2);
+ setLayout(new BorderLayout());
+
+ operatePanel = new OperatePanel();
+ realPlayPanel = new RealPlayPanel();
+ eventInfoPanel = new EventInfoPanel();
+ messagePanel = new MessagePanel();
+
+ add(operatePanel, BorderLayout.NORTH);
+ add(realPlayPanel, BorderLayout.WEST);
+ add(eventInfoPanel, BorderLayout.CENTER);
+ add(messagePanel, BorderLayout.SOUTH);
+ }
+ }
+
+ /**
+ * 操作面板
+ */
+ private class OperatePanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public OperatePanel() {
+ BorderEx.set(this, Res.string().getOperate(), 2);
+ setLayout(new FlowLayout());
+
+ chnlabel = new JLabel(Res.string().getChannel());
+ chnComboBox = new JComboBox();
+
+ JLabel nullLabel2 = new JLabel(" ");
+ JLabel nullLabel3 = new JLabel(" ");
+ JLabel nullLabel4 = new JLabel(" ");
+ JLabel nullLabel5 = new JLabel(" ");
+
+ realplayBtn = new JButton(Res.string().getStartRealPlay());
+ attachBtn = new JButton(Res.string().getAttach());
+ manualSnapBtn = new JButton(Res.string().getManualCapture());
+ openStrobeButton = new JButton(Res.string().getOpenStrobe());
+
+ chnComboBox.setPreferredSize(new Dimension(100, 20));
+ realplayBtn.setPreferredSize(new Dimension(125, 20));
+ attachBtn.setPreferredSize(new Dimension(120, 20));
+ manualSnapBtn.setPreferredSize(new Dimension(125, 20));
+ openStrobeButton.setPreferredSize(new Dimension(120, 20));
+
+ add(chnlabel);
+ add(chnComboBox);
+ add(nullLabel2);
+ add(realplayBtn);
+ add(nullLabel3);
+ add(attachBtn);
+ add(nullLabel4);
+ add(manualSnapBtn);
+ add(nullLabel5);
+ add(openStrobeButton);
+
+ chnComboBox.setEnabled(false);
+ realplayBtn.setEnabled(false);
+ attachBtn.setEnabled(false);
+ manualSnapBtn.setEnabled(false);
+ openStrobeButton.setEnabled(false);
+
+ realplayBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ realplay();
+ }
+ });
+
+ attachBtn.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ attach();
+ }
+ });
+
+ manualSnapBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ if(!TrafficEventModule.manualSnapPicture(chnComboBox.getSelectedIndex())) {
+ JOptionPane.showMessageDialog(null, Res.string().getManualCaptureFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ });
+
+ openStrobeButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ openstrobe();
+ }
+ });
+ }
+ }
+
+ // 预览
+ public void realplay() {
+ if(!b_realplay) {
+ m_hPlayHandle = RealPlayModule.startRealPlay(chnComboBox.getSelectedIndex(), 0,
+ realPlayWindow);
+ if(m_hPlayHandle.longValue() != 0) {
+ realPlayWindow.repaint();
+ b_realplay = true;
+ chnComboBox.setEnabled(false);
+ realplayBtn.setText(Res.string().getStopRealPlay());
+ }
+ } else {
+ RealPlayModule.stopRealPlay(m_hPlayHandle);
+ realPlayWindow.repaint();
+ b_realplay = false;
+ chnComboBox.setEnabled(true);
+ realplayBtn.setText(Res.string().getStartRealPlay());
+ }
+ }
+
+ // 订阅
+ public void attach() {
+ if(!b_attach) {
+ if(TrafficEventModule.attachIVSEvent(chnComboBox.getSelectedIndex(),
+ m_AnalyzerDataCB)) {
+ b_attach = true;
+ attachBtn.setText(Res.string().getDetach());
+ }
+ } else {
+ TrafficEventModule.detachIVSEvent();
+ b_attach = false;
+ attachBtn.setText(Res.string().getAttach());
+ }
+ }
+
+ // 出入口开闸
+ public void openstrobe() {
+ if(!b_openStrobe) {
+ if(TrafficEventModule.New_OpenStrobe()) {
+ b_openStrobe = true;
+ openStrobeButton.setText(Res.string().getCloseStrobe());
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getOpenStrobeFailed() + ", " + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+ } else {
+ TrafficEventModule.New_CloseStrobe();
+ b_openStrobe = false;
+ openStrobeButton.setText(Res.string().getOpenStrobe());
+ }
+ }
+ /**
+ * 预览面板
+ */
+ private class RealPlayPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public RealPlayPanel() {
+ BorderEx.set(this, Res.string().getRealplay(), 2);
+ setLayout(new BorderLayout());
+ Dimension dim = getPreferredSize();
+ dim.height = 280;
+ dim.width = 320;
+ setPreferredSize(dim);
+
+ JPanel reaJPanel = new JPanel();
+ reaJPanel.setLayout(new BorderLayout());
+ reaJPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
+ add(reaJPanel, BorderLayout.CENTER);
+
+ realPlayWindow = new Panel();
+ realPlayWindow.setBackground(Color.GRAY);
+
+ reaJPanel.add(realPlayWindow, BorderLayout.CENTER);
+ }
+ }
+
+ /**
+ * 事件及图片面板
+ */
+ private class EventInfoPanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public EventInfoPanel() {
+ Dimension dimension = new Dimension(-1, -1);
+
+ BorderEx.set(this, Res.string().getEventPicture(), 2);
+ setLayout(new BorderLayout());
+
+ //////// 车牌及抓图时间面板
+ JPanel paramPanel = new JPanel();
+ JPanel textPanel = new JPanel();
+ JPanel platePanel = new JPanel();
+
+ ///////////车牌小图
+ plateImagePanel = new PaintPanel(); // 车牌小图
+ plateImageLabel = new JLabel(Res.string().getPlatePicture());
+
+ dimension.width = 145;
+ dimension.height = 49;
+ plateImagePanel.setPreferredSize(dimension);
+ platePanel.setLayout(new BorderLayout());
+ platePanel.add(plateImagePanel, BorderLayout.SOUTH);
+ platePanel.add(plateImageLabel, BorderLayout.CENTER);
+
+ ///////////
+ eventnameLabel = new JLabel(Res.string().getEventName());
+ eventnameTextField = new JTextField("");
+ eventTimeLabel = new JLabel(Res.string().getEventTime());
+ eventTimeTextField = new JTextField("");
+ licensePlateLabel = new JLabel(Res.string().getLicensePlate());
+ licensePlateTextField = new JTextField("");
+
+ dimension.width = 165;
+ dimension.height = 45;
+ paramPanel.setPreferredSize(dimension);
+ paramPanel.setLayout(new BorderLayout());
+ paramPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
+
+ textPanel.setLayout(new GridLayout(6, 2));
+ textPanel.add(eventnameLabel);
+ textPanel.add(eventnameTextField);
+ textPanel.add(eventTimeLabel);
+ textPanel.add(eventTimeTextField);
+ textPanel.add(licensePlateLabel);
+ textPanel.add(licensePlateTextField);
+ eventnameTextField.setEditable(false);
+ eventTimeTextField.setEditable(false);
+ licensePlateTextField.setEditable(false);
+
+
+ paramPanel.add(platePanel, BorderLayout.NORTH);
+ paramPanel.add(textPanel, BorderLayout.CENTER);
+
+ ///////// 事件大图面板 ////////////////////////////
+ SnapImagePanel = new PaintPanel(); // 事件大图
+ SnapImagePanel.setSize(291, 200);
+
+ JPanel snapJPanel = new JPanel();
+ snapJPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
+ snapJPanel.setLayout(new BorderLayout());
+ snapJPanel.add(SnapImagePanel, BorderLayout.CENTER);
+
+ add(snapJPanel, BorderLayout.CENTER);
+ add(paramPanel, BorderLayout.WEST);
+ }
+ }
+
+ /**
+ * 事件信息显示面板
+ */
+ private class MessagePanel extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public MessagePanel() {
+ BorderEx.set(this, Res.string().getEventInfo(), 2);
+
+ Dimension dim = getPreferredSize();
+ dim.height = 195;
+ setPreferredSize(dim);
+ setLayout(new BorderLayout());
+
+ //////////////
+ defaultModel = new DefaultTableModel(null, Res.string().getTrafficTableName());
+ table = new JTable(defaultModel) { // 列表不可编辑
+ private static final long serialVersionUID = 1L;
+ @Override
+ public boolean isCellEditable(int row, int column) {
+ return false;
+ }
+ };
+ defaultModel.setRowCount(8);
+ model = (DefaultTableModel)table.getModel();
+
+ table.getColumnModel().getColumn(0).setPreferredWidth(50);
+ table.getColumnModel().getColumn(1).setPreferredWidth(120);
+ table.getColumnModel().getColumn(2).setPreferredWidth(100);
+ table.getColumnModel().getColumn(3).setPreferredWidth(140);
+ table.getColumnModel().getColumn(4).setPreferredWidth(80);
+ table.getColumnModel().getColumn(5).setPreferredWidth(80);
+ table.getColumnModel().getColumn(6).setPreferredWidth(80);
+ table.getColumnModel().getColumn(7).setPreferredWidth(80);
+ table.getColumnModel().getColumn(8).setPreferredWidth(80);
+ table.getColumnModel().getColumn(9).setPreferredWidth(80);
+ table.getColumnModel().getColumn(10).setPreferredWidth(60);
+ table.getColumnModel().getColumn(11).setPreferredWidth(100);
+ table.getColumnModel().getColumn(12).setPreferredWidth(100);
+ table.getColumnModel().getColumn(13).setPreferredWidth(90);
+
+ table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行
+
+ // 列表显示居中
+ DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer();
+ dCellRenderer.setHorizontalAlignment(JLabel.CENTER);
+ table.setDefaultRenderer(Object.class, dCellRenderer);
+
+ table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+ JScrollPane scrollPane = new JScrollPane(table);
+ add(scrollPane, BorderLayout.CENTER);
+
+ table.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ }
+
+ @Override
+ public void mousePressed(MouseEvent e) {
+ }
+
+ @Override
+ public void mouseExited(MouseEvent e) {
+ }
+
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ }
+
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ if(e.getClickCount() < 2) {
+ return;
+ }
+ // 列表点击显示图片
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ int row = table.getSelectedRow();
+
+ if(model.getValueAt(row, 3) == null || String.valueOf(model.getValueAt(row, 3)).trim().equals("")) {
+ return;
+ }
+
+ if(model.getValueAt(row, 9) == null || String.valueOf(model.getValueAt(row, 9)).trim().equals("")) {
+ return;
+ }
+
+ if(model.getValueAt(row, 10) == null || String.valueOf(model.getValueAt(row, 10)).trim().equals("")) {
+ return;
+ }
+
+ if(model.getValueAt(row, 11) == null || String.valueOf(model.getValueAt(row, 11)).trim().equals("")) {
+ return;
+ }
+
+ String str2 = String.valueOf(model.getValueAt(row, 3)).trim().replace(" ", "_").replace("/", "").replace(":", "");
+ String str9 = "_" +String.valueOf(model.getValueAt(row, 9)).trim();
+ String str10 = "-" + String.valueOf(model.getValueAt(row, 10)).trim();
+ String str11 = "-" + String.valueOf(model.getValueAt(row, 11)).trim();
+
+ String selectPicture = SavePath.getSavePath().getSaveTrafficImagePath() + "Big_Time_" + str2 + str9 + str10 + str11 + ".jpg";
+ BufferedImage bufferedImage = null;
+
+ if(selectPicture == null || selectPicture.equals("")) {
+ return;
+ }
+
+ File file = new File(selectPicture);
+ if(!file.exists()) {
+ return;
+ }
+ try {
+ bufferedImage = ImageIO.read(file);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ ListPictureShowDialog demo = new ListPictureShowDialog();
+ demo.listPanel.setOpaque(false);
+ demo.listPanel.setImage(bufferedImage);
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+ }
+
+ class TrafficEvent extends AWTEvent {
+ private static final long serialVersionUID = 1L;
+ public static final int EVENT_ID = AWTEvent.RESERVED_ID_MAX + 1;
+
+ private TRAFFIC_INFO trafficInfo = null;
+ private BufferedImage snapImage = null;
+ private BufferedImage plateImage = null;
+
+ public TrafficEvent(Object target,
+ BufferedImage snapImage,
+ BufferedImage plateImage,
+ TRAFFIC_INFO info) {
+ super(target,EVENT_ID);
+
+ this.snapImage = snapImage;
+ this.plateImage = plateImage;
+ this.trafficInfo = info;
+ }
+
+ public BufferedImage getSnapBufferedImage() {
+ return snapImage;
+ }
+
+ public BufferedImage getPlaBufferedImage() {
+ return plateImage;
+ }
+
+ public TRAFFIC_INFO getTrafficInfo() {
+ return trafficInfo;
+ }
+ }
+
+ @Override
+ protected void processEvent( AWTEvent event)
+ {
+ if ( event instanceof TrafficEvent )
+ {
+
+ TrafficEvent ev = (TrafficEvent) event;
+
+ TRAFFIC_INFO trafficInfo = ev.getTrafficInfo();
+ BufferedImage snapImage = ev.getSnapBufferedImage();
+ BufferedImage plateImage = ev.getPlaBufferedImage();
+
+ // 列表显示事件信息
+ showTrafficEventInfo(trafficInfo);
+
+ // 界面显示图片
+ showPicture(snapImage, plateImage);
+ }
+
+ else // other events go to the system default process event handler
+ {
+ super.processEvent( event );
+ }
+ }
+
+ /*
+ * 智能报警事件回调
+ */
+ private class AnalyzerDataCB implements NetSDKLib.fAnalyzerDataCallBack {
+ public int invoke(LLong lAnalyzerHandle, int dwAlarmType,
+ Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize,
+ Pointer dwUser, int nSequence, Pointer reserved)
+ {
+ if (lAnalyzerHandle.longValue() == 0) {
+ return -1;
+ }
+
+ if(dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFICJUNCTION
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_RUNREDLIGHT
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_OVERLINE
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_RETROGRADE
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_TURNLEFT
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_TURNRIGHT
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_UTURN
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_OVERSPEED
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_UNDERSPEED
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_PARKING
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_WRONGROUTE
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_CROSSLANE
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_OVERYELLOWLINE
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_MANUALSNAP
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_VEHICLEINROUTE
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_BACKING
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING
+ || dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT) {
+
+ // 获取识别对象 车身对象 事件发生时间 车道号等信息
+ GetStuObject(dwAlarmType, pAlarmInfo);
+
+ boolean flag=true;
+
+ if((dwAlarmType == NetSDKLib.EVENT_IVS_TRAFFIC_MANUALSNAP)){
+ NetSDKLib.DEV_EVENT_TRAFFIC_MANUALSNAP_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_MANUALSNAP_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+ byte bPicEnble = msg.stuObject.bPicEnble;
+
+ if(bPicEnble==0){
+ flag=false;
+ }
+ }
+
+ if(flag){
+ // 保存图片,获取图片缓存
+ savePlatePic(pBuffer, dwBufSize, trafficInfo);
+
+ // 列表、图片界面显示
+ EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
+ if (eventQueue != null)
+ {
+ eventQueue.postEvent( new TrafficEvent(target,
+ snapImage,
+ plateImage,
+ trafficInfo));
+ }
+ }else {
+ // 保存图片,获取图片缓存
+ savePlatePic(pBuffer, dwBufSize, trafficInfo);
+
+ // 列表、图片界面显示
+ EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
+ if (eventQueue != null)
+ {
+ eventQueue.postEvent( new TrafficEvent(target,
+ snapImage,
+ null,
+ trafficInfo));
+ }
+ }
+
+
+ }
+
+ return 0;
+ }
+
+ // 获取识别对象 车身对象 事件发生时间 车道号等信息
+ private void GetStuObject(int dwAlarmType, Pointer pAlarmInfo) {
+ if(pAlarmInfo == null) {
+ return;
+ }
+
+ switch(dwAlarmType) {
+ case NetSDKLib.EVENT_IVS_TRAFFICJUNCTION: ///< 交通卡口事件
+ {
+ NetSDKLib.DEV_EVENT_TRAFFICJUNCTION_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFICJUNCTION_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFICJUNCTION);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_RUNREDLIGHT: ///< 闯红灯事件
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_RUNREDLIGHT_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_RUNREDLIGHT_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_RUNREDLIGHT);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_OVERLINE: ///< 压车道线事件
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_OVERLINE_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_OVERLINE_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_OVERLINE);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_RETROGRADE: ///< 逆行事件
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_RETROGRADE_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_RETROGRADE_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_RETROGRADE);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_TURNLEFT: ///< 违章左转
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_TURNLEFT_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_TURNLEFT_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_TURNLEFT);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_TURNRIGHT: ///< 违章右转
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_TURNRIGHT_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_TURNRIGHT_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_TURNRIGHT);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_UTURN: ///< 违章掉头
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_UTURN_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_UTURN_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_UTURN);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_OVERSPEED: ///< 超速
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_OVERSPEED_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_OVERSPEED_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_OVERSPEED);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_UNDERSPEED: ///< 低速
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_UNDERSPEED_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_UNDERSPEED_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_UNDERSPEED);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_PARKING: ///< 违章停车
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_PARKING_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_PARKING_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_PARKING);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_WRONGROUTE: ///< 不按车道行驶
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_WRONGROUTE_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_WRONGROUTE_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_WRONGROUTE);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_CROSSLANE: ///< 违章变道
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_CROSSLANE_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_CROSSLANE_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_CROSSLANE);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stuTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stuTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stuTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stuTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stuTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_OVERYELLOWLINE: ///< 压黄线
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_OVERYELLOWLINE_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_OVERYELLOWLINE_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_OVERYELLOWLINE);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE: ///< 黄牌车占道事件
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_YELLOWPLATEINLANE_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_YELLOWPLATEINLANE_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY: ///< 斑马线行人优先事件
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_PEDESTRAINPRIORITY_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_PEDESTRAINPRIORITY_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_MANUALSNAP: ///< 交通手动抓拍事件
+ {
+ JOptionPane.showMessageDialog(null, Res.string().getManualCaptureSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
+ NetSDKLib.DEV_EVENT_TRAFFIC_MANUALSNAP_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_MANUALSNAP_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_MANUALSNAP);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_VEHICLEINROUTE: ///< 有车占道事件
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_VEHICLEINROUTE_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_VEHICLEINROUTE_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_VEHICLEINROUTE);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE: ///< 占用公交车道事件
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_VEHICLEINBUSROUTE_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_VEHICLEINBUSROUTE_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_BACKING: ///< 违章倒车事件
+ {
+ NetSDKLib.DEV_EVENT_IVS_TRAFFIC_BACKING_INFO msg = new NetSDKLib.DEV_EVENT_IVS_TRAFFIC_BACKING_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_BACKING);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING: ///< 车位有车事件
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_PARKINGSPACEPARKING_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_PARKINGSPACEPARKING_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING: ///< 车位无车事件
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_PARKINGSPACENOPARKING_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFIC_PARKINGSPACENOPARKING_INFO();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ case NetSDKLib.EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT: ///< 交通未系安全带事件
+ {
+ NetSDKLib.DEV_EVENT_TRAFFIC_WITHOUT_SAFEBELT msg = new NetSDKLib.DEV_EVENT_TRAFFIC_WITHOUT_SAFEBELT();
+ ToolKits.GetPointerData(pAlarmInfo, msg);
+
+ trafficInfo.m_EventName = Res.string().getEventName(NetSDKLib.EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT);
+ try {
+ trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ trafficInfo.m_PlateType = new String(msg.stuTrafficCar.szPlateType).trim();
+ trafficInfo.m_FileCount = String.valueOf(msg.stuFileInfo.bCount);
+ trafficInfo.m_FileIndex = String.valueOf(msg.stuFileInfo.bIndex);
+ trafficInfo.m_GroupID = String.valueOf(msg.stuFileInfo.nGroupId);
+ trafficInfo.m_IllegalPlace = ToolKits.GetPointerDataToByteArr(msg.stuTrafficCar.szDeviceAddress);
+ trafficInfo.m_LaneNumber = String.valueOf(msg.nLane);
+ trafficInfo.m_PlateColor = new String(msg.stuTrafficCar.szPlateColor).trim();
+ trafficInfo.m_VehicleColor = new String(msg.stuTrafficCar.szVehicleColor).trim();
+ trafficInfo.m_VehicleType = new String(msg.stuVehicle.szObjectSubType).trim();
+ trafficInfo.m_VehicleSize = Res.string().getTrafficSize(msg.stuTrafficCar.nVehicleSize);
+ trafficInfo.m_Utc = msg.UTC;
+ trafficInfo.m_bPicEnble = msg.stuObject.bPicEnble;
+ trafficInfo.m_OffSet = msg.stuObject.stPicInfo.dwOffSet;
+ trafficInfo.m_FileLength = msg.stuObject.stPicInfo.dwFileLenth;
+ trafficInfo.m_BoundingBox = msg.stuObject.BoundingBox;
+
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ }
+
+ /*
+ * 显示事件名称、车牌号、事件时间
+ */
+ private void showTrafficEventInfo(TRAFFIC_INFO trafficInfo) {
+ // 事件名称
+ if(trafficInfo.m_EventName.equals("")) {
+ eventnameTextField.setText("");
+ } else {
+ eventnameTextField.setText(trafficInfo.m_EventName);
+ }
+
+ // 车牌号
+ if(trafficInfo.m_PlateNumber.equals("") ) {
+ licensePlateTextField.setText(Res.string().getNoPlate());
+ plateImagePanel.setOpaque(true);
+ plateImagePanel.repaint();
+ } else {
+ licensePlateTextField.setText(trafficInfo.m_PlateNumber);
+ }
+
+ // 事件时间
+ if(trafficInfo.m_Utc == null
+ || trafficInfo.m_Utc.toStringTime().equals("")) {
+ eventTimeTextField.setText("");
+ } else {
+ eventTimeTextField.setText(trafficInfo.m_Utc.toStringTime());
+ }
+
+ Vector vector = new Vector();
+
+
+ vector.add(String.valueOf(i)); // 序号
+ vector.add(trafficInfo.m_EventName); // 事件名称
+ vector.add(trafficInfo.m_PlateNumber); // 车牌号
+
+ // 事件时间
+ if(trafficInfo.m_Utc == null || trafficInfo.m_Utc.toStringTime().equals("")) {
+ vector.add("");
+ } else {
+ vector.add(trafficInfo.m_Utc.toStringTime());
+ }
+
+ vector.add(trafficInfo.m_PlateType); // 车牌类型
+ vector.add(trafficInfo.m_PlateColor); // 车牌颜色
+ vector.add(trafficInfo.m_VehicleColor); // 车身颜色
+ vector.add(trafficInfo.m_VehicleType); // 车身类型
+ vector.add(trafficInfo.m_VehicleSize); // 车辆大小
+ vector.add(trafficInfo.m_FileCount); // 文件总数
+ vector.add(trafficInfo.m_FileIndex); // 文件编号
+ vector.add(trafficInfo.m_GroupID); // 组ID
+ vector.add(trafficInfo.m_IllegalPlace); // 违法地点
+ vector.add(trafficInfo.m_LaneNumber); // 车道号
+
+ defaultModel.insertRow(0, vector);
+ defaultModel.setRowCount(8);
+
+ table.updateUI();
+
+ i++;
+ }
+
+ /*
+ * 界面显示图片
+ */
+ private void showPicture(BufferedImage snapImage, BufferedImage plateImage) {
+ if (snapImage == null) {
+ SnapImagePanel.setOpaque(true); // 不透明
+ SnapImagePanel.repaint();
+
+ plateImagePanel.setOpaque(true);
+ plateImagePanel.repaint();
+ return;
+ }
+
+ SnapImagePanel.setOpaque(false); // 透明
+ SnapImagePanel.setImage(snapImage);
+ SnapImagePanel.repaint();
+
+ if(plateImage == null) {
+ plateImagePanel.setOpaque(true);
+ plateImagePanel.repaint();
+ return;
+ }
+
+ plateImagePanel.setOpaque(false);
+ plateImagePanel.setImage(plateImage);
+ plateImagePanel.repaint();
+ }
+ /*
+ * 保存车牌小图:DH早期交通抓拍机,设备不传单独的车牌小图文件,只传车牌在大图中的坐标;由应用来自行裁剪。
+ * 2014年后,陆续有设备版本,支持单独传车牌小图,小图附录在pBuffer后面。
+ */
+ private void savePlatePic(Pointer pBuffer, int dwBufferSize, TRAFFIC_INFO trafficInfo) {
+
+ String bigPicture; // 大图
+ String platePicture; // 车牌图
+
+ if (pBuffer == null || dwBufferSize <= 0 ) {
+ return;
+ }
+
+ // 保存大图
+ byte[] buffer = pBuffer.getByteArray(0, dwBufferSize);
+ ByteArrayInputStream byteArrInput = new ByteArrayInputStream(buffer);
+
+ bigPicture = SavePath.getSavePath().getSaveTrafficImagePath() + "Big_" + trafficInfo.m_Utc.toStringTitle() + "_" +
+ trafficInfo.m_FileCount + "-" + trafficInfo.m_FileIndex + "-" + trafficInfo.m_GroupID + ".jpg";
+
+ try {
+ snapImage = ImageIO.read(byteArrInput);
+ if(snapImage == null) {
+ return;
+ }
+ ImageIO.write(snapImage, "jpg", new File(bigPicture));
+ } catch (IOException e2) {
+ e2.printStackTrace();
+ }
+
+ if(bigPicture == null || bigPicture.equals("")) {
+ return;
+ }
+
+ if (trafficInfo.m_bPicEnble == 1) {
+ //根据pBuffer中数据偏移保存小图图片文件
+ if (trafficInfo.m_FileLength > 0) {
+ platePicture = SavePath.getSavePath().getSaveTrafficImagePath() + "plate_" + trafficInfo.m_Utc.toStringTitle() + "_" +
+ trafficInfo.m_FileCount + "-" + trafficInfo.m_FileIndex + "-" + trafficInfo.m_GroupID + ".jpg";
+
+ int size = 0;
+ if(dwBufferSize <= trafficInfo.m_OffSet) {
+ return;
+ }
+
+ if(trafficInfo.m_FileLength <= dwBufferSize - trafficInfo.m_OffSet) {
+ size = trafficInfo.m_FileLength;
+ } else {
+ size = dwBufferSize - trafficInfo.m_OffSet;
+ }
+ byte[] bufPlate = pBuffer. getByteArray(trafficInfo.m_OffSet, size);
+ ByteArrayInputStream byteArrInputPlate = new ByteArrayInputStream(bufPlate);
+ try {
+ plateImage = ImageIO.read(byteArrInputPlate);
+ if(plateImage == null) {
+ return;
+ }
+ ImageIO.write(plateImage, "jpg", new File(platePicture));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ else {
+ if(trafficInfo.m_BoundingBox == null) {
+ return;
+ }
+ //根据大图中的坐标偏移计算显示车牌小图
+
+ NetSDKLib.DH_RECT dhRect = trafficInfo.m_BoundingBox;
+ //1.BoundingBox的值是在8192*8192坐标系下的值,必须转化为图片中的坐标
+ //2.OSD在图片中占了64行,如果没有OSD,下面的关于OSD的处理需要去掉(把OSD_HEIGHT置为0)
+ final int OSD_HEIGHT = 0;
+
+ long nWidth = snapImage.getWidth(null);
+ long nHeight = snapImage.getHeight(null);
+
+ nHeight = nHeight - OSD_HEIGHT;
+ if ((nWidth <= 0) || (nHeight <= 0)) {
+ return ;
+ }
+
+ NetSDKLib.DH_RECT dstRect = new NetSDKLib.DH_RECT();
+
+ dstRect.left.setValue((long)((double)(nWidth * dhRect.left.longValue()) / 8192.0));
+ dstRect.right.setValue((long)((double)(nWidth * dhRect.right.longValue()) / 8192.0));
+ dstRect.bottom.setValue((long)((double)(nHeight * dhRect.bottom.longValue()) / 8192.0));
+ dstRect.top.setValue((long)((double)(nHeight * dhRect.top.longValue()) / 8192.0));
+
+ int x = dstRect.left.intValue();
+ int y = dstRect.top.intValue() + OSD_HEIGHT;
+ int w = dstRect.right.intValue() - dstRect.left.intValue();
+ int h = dstRect.bottom.intValue() - dstRect.top.intValue();
+
+ if(x == 0 || y == 0 || w <= 0 || h <= 0) {
+ return;
+ }
+
+ try {
+ plateImage = snapImage.getSubimage(x, y, w, h);
+ platePicture = SavePath.getSavePath().getSaveTrafficImagePath() + "plate_" + trafficInfo.m_Utc.toStringTitle() + "_" +
+ trafficInfo.m_FileCount + "-" + trafficInfo.m_FileIndex + "-" + trafficInfo.m_GroupID + ".jpg";
+ if(plateImage == null) {
+ return;
+ }
+ ImageIO.write(plateImage, "jpg", new File(platePicture));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private void setButtonEnable(boolean bln) {
+ chnComboBox.setEnabled(bln);
+ realplayBtn.setEnabled(bln);
+ attachBtn.setEnabled(bln);
+ manualSnapBtn.setEnabled(bln);
+ openStrobeButton.setEnabled(bln);
+ }
+
+ //登录组件
+ private LoginPanel loginPanel;
+
+ private ItsPanel itsPanel;
+ private OperatePanel operatePanel;
+ private JButton realplayBtn;
+ private JButton attachBtn;
+
+ /**
+ * 事件信息显示组件
+ */
+ private MessagePanel messagePanel;
+ private DefaultTableModel defaultModel;
+ private JTable table;
+
+ /**
+ * 实时预览组件
+ */
+ private RealPlayPanel realPlayPanel;
+ Panel realPlayWindow;
+ private JLabel chnlabel;
+ JComboBox chnComboBox;
+ JComboBox streamComboBox;
+
+ /**
+ * 事件及图片组件
+ */
+ private EventInfoPanel eventInfoPanel;
+ private PaintPanel SnapImagePanel;
+ private PaintPanel plateImagePanel;
+ private JLabel plateImageLabel;
+
+ private JLabel eventnameLabel;
+ private JTextField eventnameTextField;
+
+ private JLabel eventTimeLabel;
+ private JTextField eventTimeTextField;
+
+ private JLabel licensePlateLabel;
+ private JTextField licensePlateTextField;
+
+ private JButton manualSnapBtn;
+ private JButton openStrobeButton;
+
+}
+
+public class TrafficEvent {
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ TrafficEventFrame demo = new TrafficEventFrame();
+ demo.setVisible(true);
+ }
+ });
+ }
+};
+
diff --git a/src/main/java/com/netsdk/demo/frame/scada/SCADAAlarmAttachInfoCallBack.java b/src/main/java/com/netsdk/demo/frame/scada/SCADAAlarmAttachInfoCallBack.java
new file mode 100644
index 0000000..483ba4d
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/scada/SCADAAlarmAttachInfoCallBack.java
@@ -0,0 +1,67 @@
+package com.netsdk.demo.frame.scada;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.Utils;
+import com.sun.jna.Pointer;
+
+import javax.swing.*;
+import javax.swing.table.DefaultTableModel;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
+
+/**
+ * className:SCADAAlarmAttachInfoCallBack
+ * description:动环主机:智能事件回调函数 订阅监测点报警信息回调
+ * author:251589
+ * createTime:2021/4/10 16:54
+ *
+ * @version v1.0
+ */
+
+public class SCADAAlarmAttachInfoCallBack implements NetSDKLib.fSCADAAlarmAttachInfoCallBack {
+ // 多平台 编码
+ private final Charset encode = Charset.forName(Utils.getPlatformEncode());
+ private static SCADAAlarmAttachInfoCallBack INSTANCE;
+ private JTable table;
+
+ @Override
+ public void invoke(NetSDKLib.LLong lAttachHandle,
+ NetSDKLib.NET_SCADA_NOTIFY_POINT_ALARM_INFO_LIST pInfo, int nBufLen,
+ Pointer dwUser) {
+
+ System.out.println("————————————————————【订阅监测点报警信息回调】————————————————————");
+ //更新列表
+ if (table != null) {
+ DefaultTableModel model = (DefaultTableModel) table.getModel();
+ for (int i = 0; i < pInfo.nList; i++) {
+ System.out.println(" 设备ID:" + new String(pInfo.stuList[i].szDevID).trim());
+ System.out.println(" 点位ID:" + new String(pInfo.stuList[i].szPointID).trim());
+ String alarmDesc = new String(pInfo.stuList[i].szAlarmDesc, encode).trim();
+ System.out.println(" 报警描述:" + alarmDesc);
+
+ System.out.println(" 报警标志:" + (pInfo.stuList[i].bAlarmFlag == 1));
+ System.out.println(" 报警时间:" + pInfo.stuList[i].stuAlarmTime.toStringTime());
+ System.out.println(" 报警级别(0~6):" + pInfo.stuList[i].nAlarmLevel);
+ System.out.println(" 报警编号(同一个告警的开始和结束的编号是相同的):" + pInfo.stuList[i].nSerialNo);
+ model.addRow(new Object[]{new String(pInfo.stuList[i].szDevID).trim(), new String(pInfo.stuList[i].szPointID).trim(), alarmDesc, pInfo.stuList[i].stuAlarmTime.toStringTime(), pInfo.stuList[i].nAlarmLevel});
+ }
+ }
+ System.out.println("————————————————————【订阅监测点报警信息回调】————————————————————");
+ }
+
+ private SCADAAlarmAttachInfoCallBack(JTable table) {
+ this.table = table;
+ }
+
+ public static SCADAAlarmAttachInfoCallBack getINSTANCE(JTable table) {
+ if (INSTANCE == null) {
+ INSTANCE = new SCADAAlarmAttachInfoCallBack(table);
+ }
+ if (table != null) {
+ INSTANCE.table = table;
+ }
+
+ return INSTANCE;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/demo/frame/scada/SCADAAttachModule.java b/src/main/java/com/netsdk/demo/frame/scada/SCADAAttachModule.java
new file mode 100644
index 0000000..a7f44d4
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/scada/SCADAAttachModule.java
@@ -0,0 +1,42 @@
+package com.netsdk.demo.frame.scada;
+
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.lib.NetSDKLib;
+
+import static com.netsdk.demo.module.LoginModule.m_hLoginHandle;
+
+/**
+ * className:SCADAAttachModule
+ * description:
+ * author:251589
+ * createTime:2021/5/7 20:16
+ *
+ * @version v1.0
+ */
+
+public class SCADAAttachModule {
+ // 订阅实时信息句柄
+ public static NetSDKLib.LLong attachInfoHandle = new NetSDKLib.LLong(0);
+
+ // 订阅报警句柄
+ public static NetSDKLib.LLong alarmAttachInfoHandle = new NetSDKLib.LLong(0);
+
+ public static boolean attachInfo(NetSDKLib.fSCADAAttachInfoCallBack callBack){
+ // 入参
+ NetSDKLib.NET_IN_SCADA_ATTACH_INFO stIn = new NetSDKLib.NET_IN_SCADA_ATTACH_INFO();
+ stIn.cbCallBack = callBack;
+ // 出参
+ NetSDKLib.NET_OUT_SCADA_ATTACH_INFO stOut = new NetSDKLib.NET_OUT_SCADA_ATTACH_INFO();
+ attachInfoHandle = LoginModule.netsdk.CLIENT_SCADAAttachInfo(m_hLoginHandle, stIn, stOut, 3000);
+ if (attachInfoHandle.longValue() != 0){
+ System.out.println("AttachInfo succeed!");
+ } else {
+ System.err.println("AttachInfo failed!");
+ return false;
+ }
+ return true;
+ }
+
+
+}
diff --git a/src/main/java/com/netsdk/demo/frame/scada/SCADADemo.java b/src/main/java/com/netsdk/demo/frame/scada/SCADADemo.java
new file mode 100644
index 0000000..0673b17
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/scada/SCADADemo.java
@@ -0,0 +1,898 @@
+package com.netsdk.demo.frame.scada;
+
+import com.netsdk.common.FunctionList;
+import com.netsdk.common.Res;
+import com.netsdk.demo.frame.vto.DefaultDisConnect;
+import com.netsdk.demo.frame.vto.DefaultHaveReconnect;
+import com.netsdk.demo.frame.vto.OperateManager;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.Utils;
+import com.netsdk.lib.structure.NET_ATTRIBUTE_INFO;
+import com.netsdk.lib.structure.NET_GET_CONDITION_INFO;
+import com.netsdk.lib.structure.NET_IN_SCADA_GET_ATTRIBUTE_INFO;
+import com.netsdk.lib.structure.NET_OUT_SCADA_GET_ATTRIBUTE_INFO;
+import com.sun.jna.Memory;
+import com.sun.jna.NativeLong;
+import com.sun.jna.Pointer;
+import com.sun.jna.ptr.IntByReference;
+
+import javax.swing.*;
+import javax.swing.border.EmptyBorder;
+import javax.swing.border.TitledBorder;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+import java.awt.*;
+import java.awt.event.*;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Vector;
+
+import static com.netsdk.demo.module.LoginModule.m_hLoginHandle;
+
+public class SCADADemo extends JFrame {
+
+ private static final long serialVersionUID = 1L;
+
+ private JPanel contentPane;
+ private JTextField ipTextField;
+ private JTextField portTextField;
+ private JTextField userNameTextField;
+ private JPasswordField passwordField;
+
+ private JButton btnLogin; // 登录
+ private JButton btnLogout; // 登出
+ private JButton btnGetDeviceList; // 获取设备列表
+ private JButton btnAlarmAttachInfo; // 遥信,订阅报警
+ private JButton btnAttachInfo; // 遥测,订阅信息
+ private JButton btnAlarmAttachInfoStop; // 遥信,取消订阅报警
+ private JButton btnAttachInfoStop; // 遥测,取消订阅信息
+
+ private JButton btnStartListen; // 停止监听
+ private JButton btnStopListen; // 停止监听
+
+
+ private JTable devicesTable; // 设备列表
+ private JTable pointListTable; // 设备点位列表
+ private JTable alarmAttachInfoTable;
+ private JScrollPane deviceScrollPane;
+
+
+ private JButton btnGetSCADAAttribute; // 获取点位信息
+ private boolean isListen = false;
+
+
+ ///////////////////// 主面板 /////////////////////
+
+ private static JFrame mainFrame = new JFrame();
+ private OperateManager manager = new OperateManager();
+
+ /**
+ * Launch the application.
+ */
+ public static void main(String[] args) {
+ EventQueue.invokeLater(new Runnable() {
+ public void run() {
+ try {
+ SCADADemo frame = new SCADADemo();
+ frame.setVisible(true);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ });
+ }
+
+ /**
+ * enable button
+ *
+ * @param enable
+ */
+ public void setButtonEnable(boolean enable) {
+ btnLogin.setEnabled(enable);
+ btnLogout.setEnabled(enable);
+ btnGetDeviceList.setEnabled(enable);
+ btnAlarmAttachInfo.setEnabled(enable);
+ btnAttachInfo.setEnabled(enable);
+ btnGetSCADAAttribute.setEnabled(enable);
+ btnStartListen.setEnabled(enable);
+
+ }
+
+
+ private boolean isAlarmAttachInfo = false;
+ private boolean isAttachInfo = false;
+
+ /**
+ * 登录
+ */
+ public boolean login() {
+ if (LoginModule.login(ipTextField.getText(), Integer.parseInt(portTextField.getText()),
+ userNameTextField.getText(), new String(passwordField.getPassword()))) {
+ setButtonEnable(true); // login succeed,enable related button
+ btnLogin.setEnabled(false);
+ // 监听按钮使能
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(),
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 登出
+ */
+ public void logout() {
+ if (LoginModule.logout()) {
+ setButtonEnable(false); // 所有按钮置灰
+ btnLogin.setEnabled(true);
+ if (isListen) {
+ stopListen();
+ isListen = false;
+ }
+
+ if (isAlarmAttachInfo) {
+ scadaDetachInfo();
+ isAlarmAttachInfo = false;
+ }
+ if (isAttachInfo) {
+ scadaAlarmDetachInfo();
+ isAttachInfo = false;
+ }
+
+ //清空表格
+ //普通事件table清空数据
+ ((DefaultTableModel) alarmTable.getModel()).setRowCount(0);
+
+ // 设备列表table清空数据
+ ((DefaultTableModel) devicesDataTable.getModel()).setRowCount(0);
+
+ // 监测点位实时信息table清空数据
+ ((DefaultTableModel) attachInfoDataTable.getModel()).setRowCount(0);
+
+ // 监测点位报警table清空数据
+ ((DefaultTableModel) alarmAttachInfoDataTable.getModel()).setRowCount(0);
+
+ // 点位信息table清空数据
+ ((DefaultTableModel) attributeDataTable.getModel()).setRowCount(0);
+ }
+ }
+
+
+ /**
+ * 获取当前主机接入的外部设备ID
+ */
+ Vector deviceIds = new Vector();
+ // 多平台 编码
+ private final static Charset encode = Charset.forName(Utils.getPlatformEncode());
+
+ public boolean getDeviceIdList() {
+ deviceIds.clear();
+
+ // model.setColumnCount(0);
+ int nCount = 64; //
+
+ NetSDKLib.NET_SCADA_DEVICE_ID_INFO[] stuDeviceIDList = new NetSDKLib.NET_SCADA_DEVICE_ID_INFO[nCount];
+ for (int i = 0; i < stuDeviceIDList.length; ++i) {
+ stuDeviceIDList[i] = new NetSDKLib.NET_SCADA_DEVICE_ID_INFO();
+ }
+
+ NetSDKLib.NET_SCADA_DEVICE_LIST stuSCADADeviceInfo = new NetSDKLib.NET_SCADA_DEVICE_LIST();
+ stuSCADADeviceInfo.nMax = nCount;
+ int nSize = stuDeviceIDList[0].size() * nCount;
+ stuSCADADeviceInfo.pstuDeviceIDInfo = new Memory(nSize); // 监测设备信息
+ stuSCADADeviceInfo.pstuDeviceIDInfo.clear(nSize);
+ ToolKits.SetStructArrToPointerData(stuDeviceIDList, stuSCADADeviceInfo.pstuDeviceIDInfo);
+ if (queryDevState(NetSDKLib.NET_DEVSTATE_SCADA_DEVICE_LIST, stuSCADADeviceInfo)) {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(),
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+
+ if (stuSCADADeviceInfo.nRet == 0) {
+ System.out.println("当前主机接入的外部设备ID有效个数为0."); // 外部设备没有有效ID
+ return false;
+ }
+
+ // 从 Pointer 提取数据
+ ToolKits.GetPointerDataToStructArr(stuSCADADeviceInfo.pstuDeviceIDInfo, stuDeviceIDList);
+ // 打印数据并更新设备ID
+ System.out.println("获取当前主机接入的外部设备ID的有效个数:" + stuSCADADeviceInfo.nRet);
+ if (null != devicesDataTable) {
+ DefaultTableModel model = (DefaultTableModel) devicesDataTable.getModel();
+ model.getDataVector().clear();// 清空所有数据
+ for (int i = 0; i < stuSCADADeviceInfo.nRet; ++i) {
+ String deviceID = "";
+ String deviceName = "";
+
+ deviceName = new String(stuDeviceIDList[i].szDevName, encode).trim();
+ deviceID = new String(stuDeviceIDList[i].szDeviceID, encode).trim();
+ System.out.printf("外部设备[%d] 设备id[%s] 设备名称[%s]\n", i,
+ new String(stuDeviceIDList[i].szDeviceID, encode).trim(), deviceName);
+
+
+ deviceIds.add(deviceID);
+ model.addRow(new Object[]{deviceID, deviceName});
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * 查询设备状态
+ */
+ public boolean queryDevState(int nType, NetSDKLib.SdkStructure stuInfo) {
+
+ IntByReference intRetLen = new IntByReference();
+ stuInfo.write();
+ if (!LoginModule.netsdk.CLIENT_QueryDevState(m_hLoginHandle, nType, stuInfo.getPointer(), stuInfo.size(), intRetLen, 3000)) {
+ return true;
+ }
+ stuInfo.read();
+ return false;
+ }
+
+
+ /**
+ * 订阅监测点位报警
+ */
+ public void scadaAlarmAttachInfo() {
+
+ if (!isAlarmAttachInfo) {
+ // 入参
+ NetSDKLib.NET_IN_SCADA_ALARM_ATTACH_INFO stIn = new NetSDKLib.NET_IN_SCADA_ALARM_ATTACH_INFO();
+ stIn.cbCallBack = SCADAAlarmAttachInfoCallBack.getINSTANCE(alarmAttachInfoDataTable);
+ // 出参
+ NetSDKLib.NET_OUT_SCADA_ALARM_ATTACH_INFO stOut = new NetSDKLib.NET_OUT_SCADA_ALARM_ATTACH_INFO();
+
+ alarmAttachInfoHandle = LoginModule.netsdk.CLIENT_SCADAAlarmAttachInfo(m_hLoginHandle, stIn, stOut, 3000);
+
+ if (alarmAttachInfoHandle.longValue() != 0) {
+ contentPane.repaint();
+ isAlarmAttachInfo = true;
+ btnAlarmAttachInfo.setText(Res.string().getCancel()); // 取消
+ }
+ } else {
+ scadaAlarmDetachInfo();
+ }
+
+ }
+
+ /**
+ * 取消订阅监测点位报警信息
+ */
+ public void scadaAlarmDetachInfo() {
+ if (alarmAttachInfoHandle.longValue() != 0) {
+ LoginModule.netsdk.CLIENT_SCADAAlarmDetachInfo(alarmAttachInfoHandle);
+ contentPane.repaint();
+ isAlarmAttachInfo = false;
+ alarmAttachInfoHandle.setValue(0);
+ alarmAttachInfoDataModel.getDataVector().clear();
+ btnAlarmAttachInfo.setText(Res.string().getSCADAAttach()); // 订阅
+
+ }
+ }
+
+ private NetSDKLib.LLong attachInfoHandle = new NetSDKLib.LLong(0); // 监测点位信息,订阅句柄
+ private NetSDKLib.LLong alarmAttachInfoHandle = new NetSDKLib.LLong(0); // 监测点位报警,订阅句柄
+
+ /**
+ * 普通报警监听回调
+ */
+ private static class MessCallback implements NetSDKLib.fMessCallBack {
+ private static MessCallback INSTANCE;
+ private JTable table;
+
+ private MessCallback(JTable table) {
+ this.table = table;
+ }
+
+ public static MessCallback getInstance(JTable table) {
+ if (INSTANCE == null) {
+ INSTANCE = new MessCallback(table);
+ }
+ if (table != null) {
+ INSTANCE.table = table;
+ }
+
+ return INSTANCE;
+ }
+
+ @Override
+ public boolean invoke(int lCommand, NetSDKLib.LLong lLoginID, Pointer pStuEvent,
+ int dwBufLen, String strDeviceIP, NativeLong nDevicePort,
+ Pointer dwUser) {
+ switch (lCommand) {
+
+ case NetSDKLib.NET_ALARM_SCADA_DEV_ALARM: { // 12706 检测采集设备报警事件 "SCADADevAlarm"
+
+ NetSDKLib.ALARM_SCADA_DEV_INFO msg = new NetSDKLib.ALARM_SCADA_DEV_INFO();
+ ToolKits.GetPointerData(pStuEvent, msg);
+ String deviceId = new String(msg.szDevID,encode).trim();
+ System.out.println("[检测采集设备报警事件] nChannel :" + msg.nChannel);
+ System.out.println("设备ID :" + deviceId);
+ String description = new String(msg.szDesc, encode).trim();
+ String deviceName = new String(msg.szDevName,encode).trim();
+ System.out.println( " nAction :" + msg.nAction +
+ " nAlarmFlag :" + msg.nAlarmFlag + "\n" + "故障设备名称" + deviceName
+ + "\n" + "描述" + description + "时间" + msg.stuTime);
+ if (table != null) {
+// NetSDKLib.ALARM_SCADA_DEV_INFO msg = new NetSDKLib.ALARM_SCADA_DEV_INFO();
+// ToolKits.GetPointerData(pStuEvent, msg);
+ DefaultTableModel model = (DefaultTableModel) table.getModel();
+ model.addRow(new Object[]{deviceId, deviceName, msg.nChannel, description});
+ }
+ break;
+ }
+ default:
+ System.out.println("What's lCommand: " + lCommand);
+ break;
+
+ }
+
+ return true;
+ }
+ }
+
+ /**
+ * 订阅监测点位实时信息
+ */
+ public void scadaAttachInfo() {
+ if (!isBtnAttachInfo) {
+
+ // 入参
+ NetSDKLib.NET_IN_SCADA_ATTACH_INFO stIn = new NetSDKLib.NET_IN_SCADA_ATTACH_INFO();
+ stIn.cbCallBack = SCADAAttachInfoCallBack.getInstance(attachInfoDataTable);
+ // 出参
+ System.err.println("登录句柄: " + m_hLoginHandle);
+ NetSDKLib.NET_OUT_SCADA_ATTACH_INFO stOut = new NetSDKLib.NET_OUT_SCADA_ATTACH_INFO();
+ attachInfoHandle = LoginModule.netsdk.CLIENT_SCADAAttachInfo(m_hLoginHandle, stIn, stOut, 3000);
+ if (attachInfoHandle.longValue() != 0) {
+ contentPane.repaint();
+ isBtnAttachInfo = true;
+ btnAttachInfo.setText(Res.string().getCancel()); // 取消
+ System.out.println("CLIENT_SCADAAttachInfo: 订阅监测点位实时信息成功!");
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ }
+ } else {
+ scadaDetachInfo();
+ }
+ }
+
+
+ /**
+ * 获取设备点位信息
+ */
+ public void getDeviceAttribute() throws UnsupportedEncodingException {
+ Map num2PointType = new HashMap(6);
+ num2PointType.put(0, "UNKNOWN");
+ num2PointType.put(1, "ALL");
+ num2PointType.put(2, "YC");
+ num2PointType.put(3, "YX");
+ num2PointType.put(4, "YT");
+ num2PointType.put(5, "YK");
+ DefaultTableModel model = (DefaultTableModel) attributeDataTable.getModel();
+ model.getDataVector().clear(); // 清空所有数据
+ for (int i = 0; i < deviceIds.size(); i++) {
+ String deviceId = deviceIds.get(i);
+ int nMaxAttributeInfoNum = 20;
+ NET_IN_SCADA_GET_ATTRIBUTE_INFO inParam = new NET_IN_SCADA_GET_ATTRIBUTE_INFO(); // 获取设备点位信息 入参
+ NET_OUT_SCADA_GET_ATTRIBUTE_INFO outParam = new NET_OUT_SCADA_GET_ATTRIBUTE_INFO(); // 获取设备点位信息 出参
+ NET_GET_CONDITION_INFO conditionInfo = new NET_GET_CONDITION_INFO(); // 获取条件
+ conditionInfo.szDeviceID = deviceIds.get(i).getBytes();
+ conditionInfo.bIsSendID = 1;
+ outParam.nMaxAttributeInfoNum = nMaxAttributeInfoNum;
+ NET_ATTRIBUTE_INFO attributeInfo = new NET_ATTRIBUTE_INFO(); // 设备点位信息(内存由用户申请)
+
+ outParam.pstuAttributeInfo = new Memory(nMaxAttributeInfoNum * attributeInfo.size());
+ inParam.stuCondition = conditionInfo;
+ inParam.write();
+ outParam.write();
+ boolean ret = LoginModule.netsdk.CLIENT_SCADAGetAttributeInfo(m_hLoginHandle, inParam.getPointer(), outParam.getPointer(), 3000);
+ inParam.read();
+ outParam.read();
+
+ if (ret) {
+ System.out.println("SCADAGetAttributeInfo succeed!");
+ outParam.read();
+ int retAttributeInfoNum = outParam.nRetAttributeInfoNum;
+ System.out.println(outParam);
+
+ NET_ATTRIBUTE_INFO infos[] = new NET_ATTRIBUTE_INFO[retAttributeInfoNum];
+ for (int j = 0; j < retAttributeInfoNum; j++) {
+ infos[j] = new NET_ATTRIBUTE_INFO();
+ }
+ System.err.println("infos 大小: " + infos.length);
+ ToolKits.GetPointerDataToStructArr(outParam.pstuAttributeInfo, infos);
+
+ for (int n = 0; n < retAttributeInfoNum; n++) {
+ NET_ATTRIBUTE_INFO out = new NET_ATTRIBUTE_INFO();
+ out = infos[n];
+ model.addRow(new Object[]{deviceId, new String(out.szSignalName, encode).trim(), out.nDelay, out.bIsValid, num2PointType.get(out.emPointType)});
+
+ System.out.println("设备ID:" + deviceId
+ + "\n" + "点位类型: " + num2PointType.get(out.emPointType)
+ + "\n" + "点位名称: " + new String(out.szSignalName, encode).trim()
+ + "\n" + "时延: " + out.nDelay);
+
+ }
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ }
+ }
+
+
+ }
+
+ /**
+ * 取消订阅监测点位实时信息
+ */
+ public void scadaDetachInfo() {
+ if (attachInfoHandle.longValue() != 0) {
+ LoginModule.netsdk.CLIENT_SCADADetachInfo(attachInfoHandle);
+ //attachInfoHandle.setValue(0);
+ contentPane.repaint();
+ isBtnAttachInfo = false;
+ attachInfoDataModel.getDataVector().clear();
+ btnAttachInfo.setText(Res.string().getSCADAAttach()); // 订阅
+ System.out.println("CLIENT_SCADADetachInfo: 取消订阅监测点位实时信息成功!");
+ }
+ }
+
+
+ /**
+ * 订阅报警信息
+ */
+ public void startListenEx() {
+ if (!isListen) {
+
+ LoginModule.netsdk.CLIENT_SetDVRMessCallBack(MessCallback.getInstance(alarmTable), null); // set alarm listen callback
+
+ boolean b = LoginModule.netsdk.CLIENT_StartListenEx(m_hLoginHandle);
+ if (b) {
+ isListen = true;
+ contentPane.repaint();
+ btnStartListen.setText(Res.string().getCancel());
+ //btnStopListen.setEnabled(true);
+ System.out.println("CLIENT_StartListenEx success.");
+ }
+ } else {
+ stopListen();
+ }
+
+ }
+
+ public JTable tableInit(Object[][] data, String[] columnName) {
+ JTable table;
+ DefaultTableModel model;
+ model = new DefaultTableModel(data, columnName);
+ table = new JTable(model) {
+ @Override // 不可编辑
+ public boolean isCellEditable(int row, int column) {
+ return false;
+ }
+ };
+
+ table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行
+ // 列表显示居中
+ DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer();
+ dCellRenderer.setHorizontalAlignment(JLabel.CENTER);
+ table.setDefaultRenderer(Object.class, dCellRenderer);
+ return table;
+ }
+
+
+ /**
+ * 停止监听
+ */
+ public void stopListen() {
+ if (isListen) {
+ if (LoginModule.netsdk.CLIENT_StopListen(m_hLoginHandle)) {
+ isListen = false;
+ contentPane.repaint();
+ alarmModel.getDataVector().clear();
+ btnStartListen.setText(Res.string().getStart());
+
+ }
+ }
+
+ }
+
+ // 获取界面窗口
+ private static JFrame frame = new JFrame();
+
+
+ /**
+ * Create Frame
+ */
+ public SCADADemo() {
+ setTitle(Res.string().getSCADA());
+ setBounds(100, 100, 920, 750);
+ contentPane = new JPanel();
+ contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
+ setContentPane(contentPane);
+ contentPane.setLayout(null);
+ setResizable(true);
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ LoginModule.init(DefaultDisConnect.GetInstance(), DefaultHaveReconnect.getINSTANCE());
+ JPanel panel = new JPanel();
+ panel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), Res.string().getLogin(),
+ TitledBorder.LEFT, TitledBorder.TOP, null, new Color(0, 0, 0)));
+ panel.setBounds(0, 0, 905, 46);
+ contentPane.add(panel);
+ panel.setLayout(null);
+
+ JLabel ipLabel = new JLabel(Res.string().getIp());
+ ipLabel.setBounds(10, 15, 44, 21);
+ panel.add(ipLabel);
+
+ ipTextField = new JTextField();
+ ipTextField.setText("172.3.0.223"); // 172.24.31.185 172.3.4.104 172.3.4.101
+ ipTextField.setBounds(64, 15, 89, 21);
+ panel.add(ipTextField);
+ ipTextField.setColumns(10);
+
+ JLabel portLabel = new JLabel(Res.string().getPort());
+ portLabel.setBounds(174, 15, 44, 21);
+ panel.add(portLabel);
+
+ portTextField = new JTextField();
+ portTextField.setText("37777");
+ portTextField.setColumns(10);
+ portTextField.setBounds(228, 15, 66, 21);
+ panel.add(portTextField);
+
+ JLabel lblName = new JLabel(Res.string().getUserName());
+ lblName.setBounds(316, 15, 66, 21);
+ panel.add(lblName);
+
+ userNameTextField = new JTextField();
+ userNameTextField.setText("admin");
+ userNameTextField.setColumns(10);
+ userNameTextField.setBounds(383, 15, 87, 21);
+ panel.add(userNameTextField);
+
+ JLabel lblPassword = new JLabel(Res.string().getPassword());
+ lblPassword.setBounds(492, 15, 66, 21);
+ panel.add(lblPassword);
+
+ passwordField = new JPasswordField();
+ passwordField.setBounds(568, 15, 112, 21);
+ passwordField.setText("admin123");
+ panel.add(passwordField);
+
+ btnLogin = new JButton(Res.string().getLogin());
+ btnLogin.setBounds(684, 14, 99, 23);
+ panel.add(btnLogin);
+ btnLogin.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ login();
+ }
+ });
+
+ btnLogout = new JButton(Res.string().getLogout());
+ btnLogout.setBounds(785, 14, 110, 23);
+ panel.add(btnLogout);
+ btnLogout.setEnabled(false);
+ btnLogout.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ logout();
+
+
+ LoginModule.cleanup(); // 关闭工程,释放资源
+ dispose();
+ // 返回主菜单
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+
+ // 设备列表
+ JPanel devicesPanel = new JPanel();
+ devicesPanel.setBorder(new TitledBorder(null, Res.string().getSCADADeviceList(), TitledBorder.LEFT, TitledBorder.TOP, null, new Color(0, 0, 0)));
+ devicesPanel.setBounds(0, 50, 450, 260);
+ contentPane.add(devicesPanel);
+ devicesPanel.setLayout(new BorderLayout(0, 0));
+
+ btnGetDeviceList = new JButton(Res.string().getListBtn());
+ btnGetDeviceList.setBounds(260, 315, 100, 29);
+ contentPane.add(btnGetDeviceList);
+ btnGetDeviceList.addMouseListener(
+
+ new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ getDeviceIdList();
+
+ }
+ });
+ devicesData = new Object[0][3];
+ devicesDataTable = tableInit(devicesData, devicesDataTitle);
+ devicesDataModel = (DefaultTableModel) devicesDataTable.getModel();
+ JScrollPane deviceScrollPane = new JScrollPane(devicesDataTable);
+ deviceScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+ devicesPanel.add(deviceScrollPane, BorderLayout.CENTER);
+
+
+ // 点位信息
+ JPanel pointListPanel = new JPanel();
+ pointListPanel.setBorder(new TitledBorder(null, Res.string().getSCADAPointList(), TitledBorder.LEFT, TitledBorder.TOP, null, new Color(0, 0, 0)));
+ pointListPanel.setBounds(0, 350, 450, 260);
+ contentPane.add(pointListPanel);
+ pointListPanel.setLayout(new BorderLayout(0, 0));
+ btnGetSCADAAttribute = new JButton(Res.string().getListBtn());
+ btnGetSCADAAttribute.setBounds(260, 615, 100, 29);
+ contentPane.add(btnGetSCADAAttribute);
+ btnGetSCADAAttribute.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ try {
+ getDeviceAttribute();
+ } catch (UnsupportedEncodingException unsupportedEncodingException) {
+ unsupportedEncodingException.printStackTrace();
+ }
+ }
+ });
+ attributeData = new Object[0][3];
+ attributeDataTable = tableInit(attributeData, attributeDataTitle);
+ attributeDataModel = (DefaultTableModel) attributeDataTable.getModel();
+ JScrollPane attributeDataScrollPane = new JScrollPane(attributeDataTable);
+ attributeDataScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+ pointListPanel.add(attributeDataScrollPane, BorderLayout.CENTER);
+
+ // 遥测
+ JPanel attachAlarmPanel = new JPanel();
+ attachAlarmPanel.setBorder(new TitledBorder(null, Res.string().getSCADAAlarmAttachInfo(), TitledBorder.LEFT, TitledBorder.TOP, null, new Color(0, 0, 0)));
+ attachAlarmPanel.setBounds(450, 50, 450, 170);
+ contentPane.add(attachAlarmPanel);
+ attachAlarmPanel.setLayout(new BorderLayout(0, 0));
+ btnAlarmAttachInfo = new JButton(Res.string().getSCADAAttach());
+ btnAlarmAttachInfo.setBounds(450, 225, 100, 29);
+ contentPane.add(btnAlarmAttachInfo);
+ btnAlarmAttachInfo.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ scadaAlarmAttachInfo();
+ }
+ });
+ alarmAttachInfoData = new Object[0][3];
+ alarmAttachInfoDataTable = tableInit(alarmAttachInfoData, alarmAttachInfoDataTitle);
+ alarmAttachInfoDataModel = (DefaultTableModel) alarmAttachInfoDataTable.getModel();
+ JScrollPane alarmAttachInfoDataScrollPane = new JScrollPane(alarmAttachInfoDataTable);
+ alarmAttachInfoDataScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+ attachAlarmPanel.add(alarmAttachInfoDataScrollPane, BorderLayout.CENTER);
+
+ // 普通报警
+ JPanel attachPanel = new JPanel();
+ attachPanel.setBorder(new TitledBorder(null, Res.string().getSCADAAttach(), TitledBorder.LEFT, TitledBorder.TOP, null, new Color(0, 0, 0)));
+ attachPanel.setBounds(450, 270, 450, 170);
+ contentPane.add(attachPanel);
+ attachPanel.setLayout(new BorderLayout(0, 0));
+ btnStartListen = new JButton(Res.string().getSCADAAttach());
+ btnStartListen.setBounds(450, 445, 100, 29);
+ contentPane.add(btnStartListen);
+ btnStartListen.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ startListenEx();
+ }
+ });
+// btnStartListen.addMouseListener(new MouseAdapter() {
+// @Override
+// public void mouseClicked(MouseEvent e) {
+// super.mouseClicked(e);
+// isBtnStartListen = !isBtnStartListen;
+// if (isBtnStartListen) {
+// startListenEx();
+// btnStartListen.setText(Res.string().getCancel());
+// } else {
+// stopListen();
+// btnStartListen.setText(Res.string().getSCADAAttach());
+// }
+// contentPane.add(btnStartListen);
+// contentPane.setOpaque(true);
+// contentPane.repaint();
+// }
+// });
+ alarmData = new Object[0][3];
+ alarmTable = tableInit(alarmData, alarmTableTitle);
+ alarmModel = (DefaultTableModel) alarmTable.getModel();
+ JScrollPane scrollPane = new JScrollPane(alarmTable);
+ scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+ attachPanel.add(scrollPane, BorderLayout.CENTER);
+
+ // 遥信 订阅监测点位实时信息
+ boolean isBtnGetDeviceList = false;
+ JPanel attachInfoPanel = new JPanel();
+ attachInfoPanel.setBorder(new TitledBorder(null, Res.string().getSCADAAttachInfo(), TitledBorder.LEFT, TitledBorder.TOP, null, new Color(0, 0, 0)));
+ attachInfoPanel.setBounds(450, 480, 450, 170);
+ contentPane.add(attachInfoPanel);
+ attachInfoPanel.setLayout(new BorderLayout(0, 0));
+ btnAttachInfo = new JButton(Res.string().getSCADAAttach()); // 订阅
+ btnAttachInfo.setBounds(450, 655, 100, 29);
+ contentPane.add(btnAttachInfo);
+ btnAttachInfo.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ scadaAttachInfo();
+ }
+ });
+// btnAttachInfo.addMouseListener(new MouseAdapter() {
+// @Override
+// public void mouseClicked(MouseEvent e) {
+// super.mouseClicked(e);
+// scadaAttachInfo();
+// }
+// });
+
+ attachInfoData = new Object[0][3];
+ attachInfoDataTable = tableInit(attachInfoData, attachInfoDataTitle);
+ attachInfoDataModel = (DefaultTableModel) attachInfoDataTable.getModel();
+ JScrollPane attachInfoDataScrollPane = new JScrollPane(attachInfoDataTable);
+ attachInfoDataScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+ attachInfoPanel.add(attachInfoDataScrollPane, BorderLayout.CENTER);
+
+ setButtonEnable(false);
+ btnLogin.setEnabled(true);
+ addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowClosing(WindowEvent e) {
+ if (LoginModule.m_hLoginHandle.longValue() != 0) {
+ logout();
+ }
+ LoginModule.cleanup();
+ dispose();
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+
+ private boolean isBtnGetDeviceList = false;
+ private boolean isBtnStartListen = false;
+ private boolean isBtnAlarmAttachInfo = false;
+ private boolean isBtnAttachInfo = false;
+ private boolean isBtnPointList = false;
+
+ // 普通订阅数据表
+ private Object[][] alarmData;
+ private JTable alarmTable;
+ private final String[] alarmTableTitle = {Res.string().getDeviceID(), Res.string().getDeviceName(), Res.string().getChannel(), Res.string().getAlarmDescribe()};
+ private DefaultTableModel alarmModel;
+
+ // 设备列表
+ private Object[][] devicesData;
+ private JTable devicesDataTable;
+ private final String[] devicesDataTitle = {Res.string().getDeviceID(), Res.string().getDeviceName()};
+ private DefaultTableModel devicesDataModel;
+
+ // 报警列表
+ private Object[][] alarmAttachInfoData;
+ private JTable alarmAttachInfoDataTable;
+ private final String[] alarmAttachInfoDataTitle = {Res.string().getDeviceID(), Res.string().getPointID(), Res.string().getAlarmDescribe(), Res.string().getCollectTime(), Res.string().getAlarmLevel()};
+ private DefaultTableModel alarmAttachInfoDataModel;
+
+
+ // 实时信息列表
+ private Object[][] attachInfoData;
+ private JTable attachInfoDataTable;
+ private final String[] attachInfoDataTitle = {Res.string().getDeviceName(), Res.string().getCollectTime(), Res.string().getPointID()};
+ private DefaultTableModel attachInfoDataModel;
+
+ // 点位信息列表
+ private Object[][] attributeData;
+ private JTable attributeDataTable;
+ private final String[] attributeDataTitle = {Res.string().getDeviceID(), Res.string().getPointName(), Res.string().getAlarmDelay(), Res.string().getIfValidSignalPoint(), Res.string().getAlarmType()};
+ private DefaultTableModel attributeDataModel;
+
+ // 设备断线通知回调
+ private DisConnect disConnectCallback = new DisConnect();
+
+ /////////////////面板///////////////////
+ // 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数
+ private static class DisConnect implements NetSDKLib.fDisConnect {
+ public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("Device[%s] Port[%d] DisConnect!\n", pchDVRIP, nDVRPort);
+ // 断线提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.setTitle(Res.string().getSCADA() + " : " + Res.string().getDisConnectReconnecting());
+ }
+ });
+ }
+ }
+
+// // 网络连接恢复,设备重连成功回调
+// // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数
+// private static class HaveReConnect implements NetSDKLib.fHaveReConnect {
+// public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+// System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+//
+// // 重连提示
+// SwingUtilities.invokeLater(new Runnable() {
+// public void run() {
+// frame.setTitle(Res.string().getPowerEnvironmentMonitor() + " : " + Res.string().getOnline());
+// }
+// });
+// }
+// }
+
+ /**
+ * 订阅监测点位信息回调
+ */
+ private static class SCADAAttachInfoCallBack implements NetSDKLib.fSCADAAttachInfoCallBack {
+ private JTable attachInfoTable;
+ private static SCADAAttachInfoCallBack INSTANCE;
+
+ private SCADAAttachInfoCallBack(JTable attachInfoTable) {
+ this.attachInfoTable = attachInfoTable;
+ }
+
+ public static final SCADAAttachInfoCallBack getInstance(JTable table) {
+ if (INSTANCE == null) {
+ INSTANCE = new SCADAAttachInfoCallBack(table);
+ }
+ if (table != null) {
+ INSTANCE.attachInfoTable = table;
+ }
+ return INSTANCE;
+ }
+
+ @Override
+ public void invoke(NetSDKLib.LLong lLoginID, NetSDKLib.LLong lAttachHandle,
+ NetSDKLib.NET_SCADA_NOTIFY_POINT_INFO_LIST pInfo, int nBufLen, Pointer dwUser) {
+ System.out.println("————————————————————【订阅监测点位信息回调】————————————————————");
+// for (int i = 0; i < pInfo.nList; i++) {
+// System.out.println(" 设备名称:" + new String(pInfo.stuList[i].szDevName).trim());
+// System.out.println(" 点位名(与点位表的取值一致):" + new String(pInfo.stuList[i].szPointName).trim());
+// System.out.println(" 现场监控单元ID:" + new String(pInfo.stuList[i].szFSUID).trim());
+// System.out.println(" 点位ID:" + new String(pInfo.stuList[i].szID).trim());
+// System.out.println(" 探测器ID:" + new String(pInfo.stuList[i].szSensorID).trim());
+// System.out.println(" 点位类型:" + pInfo.stuList[i].emPointType);
+// System.out.println(" 采集时间 : " + pInfo.stuList[i].stuCollectTime.toStringTime());
+// }
+
+ //更新列表
+ if (attachInfoTable != null) {
+ DefaultTableModel model = (DefaultTableModel) attachInfoTable.getModel();
+ for (int i = 0; i < pInfo.nList; i++) {
+ String deviceName = new String(pInfo.stuList[i].szDevName, encode).trim();
+ String time = pInfo.stuList[i].stuCollectTime.toStringTime();
+ System.out.println(" 设备名称:" + deviceName);
+ System.out.println(" 采集时间:" + time);
+ System.out.println(" 点位ID:" + new String(pInfo.stuList[i].szID).trim());
+ model.addRow(new Object[]{deviceName, time, new String(pInfo.stuList[i].szID).trim()});
+ }
+ }
+
+ System.out.println("————————————————————【订阅监测点位信息回调】————————————————————");
+
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/frame/vto/CollectionFingerPrint.java b/src/main/java/com/netsdk/demo/frame/vto/CollectionFingerPrint.java
new file mode 100644
index 0000000..a32f5de
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/vto/CollectionFingerPrint.java
@@ -0,0 +1,425 @@
+package com.netsdk.demo.frame.vto;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.event.*;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JTextField;
+import javax.swing.UIManager;
+import javax.swing.UnsupportedLookAndFeelException;
+import javax.swing.border.EmptyBorder;
+import javax.swing.border.TitledBorder;
+
+import com.sun.jna.Memory;
+import com.sun.jna.Pointer;
+
+import com.netsdk.common.Base64;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+
+public class CollectionFingerPrint extends JDialog {
+
+ private final JPanel contentPanel = new JPanel();
+ private JTextField ipTextField;
+ private JTextField portTextField;
+ private JTextField usernameTextField;
+ private JPasswordField passwordField;
+ private JLabel collectionResult;
+
+ private JButton btnLogin;
+ private JButton btnLogout;
+ private JButton btnCollection;
+
+ private byte[] packageData;
+ private int packageLen;
+ private boolean bcollectionResult = false;
+ private boolean isListen;
+
+ public byte[] getPackageData() {
+ return packageData;
+ }
+
+ public void setPackageData(byte[] packageData) {
+ this.packageData = packageData;
+
+ }
+
+ public void setLabelResult(byte[] packageData) {
+ collectionResult.setText(Base64.getEncoder().encodeToString(packageData));
+ }
+
+ public int getPackageLen() {
+ return packageLen;
+ }
+
+ public void setPackageLen(int packageLen) {
+ this.packageLen = packageLen;
+ }
+
+ public boolean isCollectionResult() {
+ return bcollectionResult;
+ }
+
+ public void setCollectionResult(boolean bcollectionResult) {
+ this.bcollectionResult = bcollectionResult;
+ //显示结果
+ collectionResult.setText(this.bcollectionResult ? "success" : "failed");
+ }
+
+ public void stopListen() {
+ //获取到信息,停止监听
+ if (loginHandler != null && loginHandler.longValue() != 0) {
+ stopListen(loginHandler);
+ }
+ //获取按钮使能
+ btnCollection.setEnabled(true);
+ //设置监听状态
+ isListen = false;
+ }
+
+ private NetSDKLib.LLong loginHandler;
+ private NetSDKLib.NET_DEVICEINFO_Ex deviceinfoEx = new NetSDKLib.NET_DEVICEINFO_Ex();
+
+ /**
+ * Launch the application.
+ */
+ public static void main(String[] args) {
+ try {
+ CollectionFingerPrint dialog = new CollectionFingerPrint();
+ dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+ dialog.setVisible(true);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Create the dialog.
+ */
+ public CollectionFingerPrint() {
+ setBounds(100, 100, 304, 397);
+ setTitle(Res.string().getVTOOperateCollectionFingerPrintTitle());
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ } catch (InstantiationException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (UnsupportedLookAndFeelException e) {
+ e.printStackTrace();
+ }
+ getContentPane().setLayout(new BorderLayout());
+ contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
+ getContentPane().add(contentPanel, BorderLayout.CENTER);
+ contentPanel.setLayout(null);
+ {
+ JPanel panel = new JPanel();
+ panel.setBorder(new TitledBorder(null, Res.string().getLogin(), TitledBorder.LEADING,
+ TitledBorder.TOP, null, null));
+ panel.setBounds(10, 10, 268, 167);
+ contentPanel.add(panel);
+ panel.setLayout(null);
+ {
+ JLabel lblNewLabel = new JLabel(Res.string().getIp());
+ lblNewLabel.setBounds(10, 23, 66, 15);
+ panel.add(lblNewLabel);
+ }
+ {
+ ipTextField = new JTextField();
+ ipTextField.setText("172.23.32.61");
+ ipTextField.setBounds(103, 20, 155, 21);
+ panel.add(ipTextField);
+ ipTextField.setColumns(10);
+ }
+ {
+ JLabel lblPort = new JLabel(Res.string().getPort());
+ lblPort.setBounds(10, 48, 83, 15);
+ panel.add(lblPort);
+ }
+ {
+ portTextField = new JTextField();
+ portTextField.setText("37777");
+ portTextField.setColumns(10);
+ portTextField.setBounds(103, 45, 155, 21);
+ panel.add(portTextField);
+ }
+ {
+ JLabel lblName = new JLabel(Res.string().getUserName());
+ lblName.setBounds(10, 73, 83, 15);
+ panel.add(lblName);
+ }
+ {
+ usernameTextField = new JTextField();
+ usernameTextField.setText("admin");
+ usernameTextField.setColumns(10);
+ usernameTextField.setBounds(103, 70, 155, 21);
+ panel.add(usernameTextField);
+ }
+ {
+ JLabel lblPassword = new JLabel(Res.string().getPassword());
+ lblPassword.setBounds(10, 98, 90, 15);
+ panel.add(lblPassword);
+ }
+
+ passwordField = new JPasswordField();
+ passwordField.setBounds(103, 95, 155, 18);
+ passwordField.setText("admin123");
+ panel.add(passwordField);
+ {
+ btnLogin = new JButton(Res.string().getLogin());
+ btnLogin.setBounds(7, 134, 111, 23);
+ panel.add(btnLogin);
+ btnLogin.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ if (login()) {
+ btnCollection.setEnabled(true);
+ }
+ }
+ });
+ }
+ {
+ btnLogout = new JButton(Res.string().getLogout());
+ btnLogout.setBounds(153, 134, 105, 23);
+ panel.add(btnLogout);
+ btnLogout.setEnabled(false);
+ btnLogout.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ logout();
+ }
+ });
+ }
+ }
+ {
+ JPanel panel = new JPanel();
+ panel.setBorder(new TitledBorder(null, Res.string().getOperate(), TitledBorder.LEADING, TitledBorder.TOP,
+ null, null));
+ panel.setBounds(10, 187, 268, 129);
+ contentPanel.add(panel);
+ panel.setLayout(null);
+ {
+ btnCollection = new JButton(Res.string().getStartCollection());
+ btnCollection.setBounds(10, 26, 227, 41);
+ panel.add(btnCollection);
+
+ collectionResult = new JLabel(Res.string().getCollectionResult());
+ collectionResult.setBounds(10, 77, 227, 26);
+ panel.add(collectionResult);
+ btnCollection.setEnabled(false);
+ final CollectionFingerPrint print = this;
+ btnCollection.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ isListen = startListen(loginHandler, VTOMessageCallBack.getINSTANCE(null, print));
+ if (isListen) {
+ //下发采集信息指令
+ if (!collectionFinger()) {
+ stopListen(loginHandler);
+ } else {
+ // 使其失效
+ btnCollection.setEnabled(false);
+ }
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ Thread.sleep(20000);
+ //等待二十秒,如果没有获取到信息,则停止获取
+ if (isListen) {
+ stopListen();
+ }
+
+ } catch (InterruptedException interruptedException) {
+ interruptedException.printStackTrace();
+ }
+ }
+ }).start();
+ }
+
+ }
+ });
+ addWindowListener(new WindowAdapter() {
+
+ @Override
+ public void windowClosed(WindowEvent e) {
+ super.windowClosed(e);
+ //已经登录
+ if (loginHandler != null && loginHandler.longValue() != 0) {
+ if (isListen) {
+ //停止监听
+ stopListen(loginHandler);
+ }
+ //登出
+ logout();
+ }
+ //按钮复位
+ btnLogin.setEnabled(true);
+ btnLogout.setEnabled(false);
+ btnCollection.setEnabled(false);
+ //清除信息数据
+ bcollectionResult=false;
+ packageData=null;
+ //清除label显示
+ collectionResult.setText(Res.string().getCollectionResult());
+ }
+ });
+ }
+
+ }
+ {
+ JPanel buttonPane = new JPanel();
+ buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
+ getContentPane().add(buttonPane, BorderLayout.SOUTH);
+ {
+ JButton okButton = new JButton("OK");
+ okButton.setActionCommand("OK");
+ buttonPane.add(okButton);
+ getRootPane().setDefaultButton(okButton);
+ okButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ setVisible(false);
+ }
+ });
+
+ }
+ }
+ }
+
+ /**
+ * 登录
+ */
+ public boolean login() {
+ if (login(ipTextField.getText(), Integer.parseInt(portTextField.getText()), usernameTextField.getText(),
+ new String(passwordField.getPassword()))) {
+ btnLogin.setEnabled(false);
+ btnLogout.setEnabled(true);
+ btnCollection.setEnabled(true);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(),
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * \if ENGLISH_LANG Login Device \else 登录设备 \endif
+ */
+ public boolean login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword) {
+ // IntByReference nError = new IntByReference(0);
+ // 入参
+ NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstInParam = new NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY();
+ pstInParam.nPort = m_nPort;
+ pstInParam.szIP = m_strIp.getBytes();
+ pstInParam.szPassword = m_strPassword.getBytes();
+ pstInParam.szUserName = m_strUser.getBytes();
+ // 出参
+ NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam = new NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY();
+ pstOutParam.stuDeviceInfo = deviceinfoEx;
+ loginHandler = LoginModule.netsdk.CLIENT_LoginWithHighLevelSecurity(pstInParam, pstOutParam);
+ if (loginHandler.longValue() == 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(),
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ } else {
+ System.out.println("Login Success [ " + m_strIp + " ]");
+ }
+
+ return loginHandler.longValue() == 0 ? false : true;
+ }
+
+ public long getLoginHandler() {
+ if (loginHandler != null) {
+ return loginHandler.longValue();
+ }
+ return 0;
+ }
+
+ /**
+ * \if ENGLISH_LANG Logout Device \else 登出设备 \endif
+ */
+ public boolean logout() {
+ if (loginHandler.longValue() == 0) {
+ return false;
+ }
+
+ boolean bRet = LoginModule.netsdk.CLIENT_Logout(loginHandler);
+ if (bRet) {
+ loginHandler.setValue(0);
+ btnLogin.setEnabled(true);
+ btnLogout.setEnabled(false);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(),
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ }
+
+ return bRet;
+ }
+
+ /**
+ * 下发采集信息指令
+ *
+ * @return
+ */
+ public boolean collectionFinger() {
+ NetSDKLib.NET_CTRL_CAPTURE_FINGER_PRINT capture = new NetSDKLib.NET_CTRL_CAPTURE_FINGER_PRINT();
+ capture.nChannelID = 0;
+ System.arraycopy("1".getBytes(), 0, capture.szReaderID, 0, "1".getBytes().length);
+ Pointer pointer = new Memory(capture.size());
+ ToolKits.SetStructDataToPointer(capture, pointer, 0);
+ boolean ret = LoginModule.netsdk.CLIENT_ControlDevice(loginHandler, NetSDKLib.CtrlType.CTRLTYPE_CTRL_CAPTURE_FINGER_PRINT, pointer, 100000);
+ if (!ret) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(),
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ return true;
+
+ }
+
+ public boolean startListen(NetSDKLib.LLong loginHandler, NetSDKLib.fMessCallBack cbMessage) {
+
+ LoginModule.netsdk.CLIENT_SetDVRMessCallBack(cbMessage, null); // set alarm listen callback
+
+ if (!LoginModule.netsdk.CLIENT_StartListenEx(loginHandler)) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(),
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ } else {
+ System.out.println("CLIENT_StartListenEx success.");
+ }
+ return true;
+ }
+
+ public boolean stopListen(NetSDKLib.LLong loginHandler) {
+ if (!LoginModule.netsdk.CLIENT_StopListen(loginHandler)) {
+ JOptionPane.showMessageDialog(null, Res.string().getStopListenFailed()+","+ ToolKits.getErrorCodeShow(),
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ } else {
+ System.out.println("CLIENT_StopListen success.");
+ }
+ return true;
+ }
+
+ /**
+ * 清除获取信息的状态
+ */
+ public void clearStatus() {
+ this.setPackageData(null);
+ this.setCollectionResult(false);
+ this.setPackageLen(0);
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/frame/vto/DefaultDisConnect.java b/src/main/java/com/netsdk/demo/frame/vto/DefaultDisConnect.java
new file mode 100644
index 0000000..3a7e17b
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/vto/DefaultDisConnect.java
@@ -0,0 +1,34 @@
+package com.netsdk.demo.frame.vto;
+
+import com.sun.jna.Pointer;
+
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.NetSDKLib.fDisConnect;
+
+/**
+ * 设备断线回调函数,空实现。 建议回调函数使用单例模式
+ *
+ * @author 47081
+ *
+ */
+public class DefaultDisConnect implements fDisConnect {
+ private static DefaultDisConnect INSTANCE;
+
+ private DefaultDisConnect() {
+ // TODO Auto-generated constructor stub
+ }
+
+ public static DefaultDisConnect GetInstance() {
+ if (INSTANCE == null) {
+ INSTANCE = new DefaultDisConnect();
+ }
+ return INSTANCE;
+ }
+
+ @Override
+ public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ // TODO Auto-generated method stub
+ System.out.printf("Device[%s] Port[%d] DisConnectCallBack!\n", pchDVRIP, nDVRPort);
+
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/frame/vto/DefaultHaveReconnect.java b/src/main/java/com/netsdk/demo/frame/vto/DefaultHaveReconnect.java
new file mode 100644
index 0000000..affdcb2
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/vto/DefaultHaveReconnect.java
@@ -0,0 +1,50 @@
+package com.netsdk.demo.frame.vto;
+
+import javax.swing.JFrame;
+import javax.swing.SwingUtilities;
+
+import com.sun.jna.Pointer;
+
+import com.netsdk.common.Res;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.NetSDKLib.fHaveReConnect;
+
+/**
+ * 网络连接恢复,设备重连成功回调 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数
+ *
+ * @author 47081
+ *
+ */
+public class DefaultHaveReconnect implements fHaveReConnect {
+ private static DefaultHaveReconnect INSTANCE;
+ private JFrame frame;
+
+ public void setFrame(JFrame frame) {
+ this.frame = frame;
+ }
+
+ private DefaultHaveReconnect() {
+ // TODO Auto-generated constructor stub
+ }
+
+ public static DefaultHaveReconnect getINSTANCE() {
+ if (INSTANCE == null) {
+ INSTANCE = new DefaultHaveReconnect();
+ }
+ return INSTANCE;
+ }
+
+ @Override
+ public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) {
+ System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);
+
+ // 重连提示
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ if (frame != null) {
+ frame.setTitle(Res.string().getPTZ() + " : " + Res.string().getOnline());
+ }
+ }
+ });
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/frame/vto/OperateInfo.java b/src/main/java/com/netsdk/demo/frame/vto/OperateInfo.java
new file mode 100644
index 0000000..8102c69
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/vto/OperateInfo.java
@@ -0,0 +1,559 @@
+package com.netsdk.demo.frame.vto;
+
+import com.sun.jna.Memory;
+import com.sun.jna.Pointer;
+
+import com.netsdk.common.Base64;
+import com.netsdk.common.PaintPanel;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.FlowLayout;
+import java.awt.event.*;
+import java.io.IOException;
+
+import javax.swing.*;
+import javax.swing.border.EmptyBorder;
+import javax.swing.border.TitledBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import static com.netsdk.lib.NetSDKLib.CtrlType.*;
+
+public class OperateInfo extends JDialog {
+
+ private final JPanel contentPanel = new JPanel();
+ private JTextField cardNoTextField;
+ private JTextField roomNoTextField;
+ private CollectionFingerPrint fingerPrint = new CollectionFingerPrint();
+ private PaintPanel paintPanel;
+ private Memory memory;
+ private JCheckBox needFingerCheckBox;
+
+ private boolean bListen = false;
+ /**
+ * 窗口使用的类型:
+ * 0:新增卡信息
+ * 1:修改卡信息
+ */
+ private int infoType;
+ private String userId;
+ private String cardNo;
+ private String fingerPrintData;
+
+ public void setCardNoTextFieldEditEnable(boolean enable) {
+ this.cardNoTextField.setEditable(enable);
+ }
+ public void setRoomNoTextFieldEditEnable(boolean enable){
+ this.roomNoTextField.setEditable(enable);
+ }
+ public void syncData(String userId, String cardNo, String fingerPrintData) {
+ this.userId = userId;
+ this.cardNo = cardNo;
+ this.fingerPrintData = fingerPrintData;
+ if (fingerPrintData == null || fingerPrintData.trim().equals("")) {
+ needFingerCheckBox.setSelected(false);
+ } else {
+ needFingerCheckBox.setSelected(true);
+ }
+ cardNoTextField.setText(cardNo);
+ roomNoTextField.setText(userId);
+
+ }
+
+ public int getInfoType() {
+ return infoType;
+ }
+
+ public void setInfoType(int infoType) {
+ this.infoType = infoType;
+ }
+
+ public void receiveData(int infoType, String userId, String cardNo, String fingerPrintData) {
+ this.infoType = infoType;
+ //新增卡
+ if (infoType == 0) {
+ this.userId = "";
+ this.cardNo = "";
+ this.fingerPrintData = "";
+ } else if (infoType == 1) {
+ //修改卡
+ this.userId = userId;
+ this.cardNo = cardNo;
+ this.fingerPrintData = fingerPrintData;
+ }
+ this.cardNoTextField.setText(this.cardNo);
+ this.roomNoTextField.setText(this.userId);
+ if (!this.fingerPrintData.trim().equals("")) {
+ needFingerCheckBox.setSelected(true);
+ } else {
+ needFingerCheckBox.setSelected(false);
+ }
+ }
+
+ /**
+ * Launch the application.
+ */
+ public static void main(String[] args) {
+ try {
+ OperateInfo dialog = new OperateInfo();
+ dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+ dialog.setVisible(true);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Create the dialog.
+ */
+ public OperateInfo() {
+ setTitle(Res.string().getVTOOperateInfoTitle());
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ } catch (InstantiationException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (UnsupportedLookAndFeelException e) {
+ e.printStackTrace();
+ }
+ setBounds(100, 100, 476, 294);
+ getContentPane().setLayout(new BorderLayout());
+ contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
+ getContentPane().add(contentPanel, BorderLayout.CENTER);
+ contentPanel.setLayout(null);
+ {
+ JPanel panel = new JPanel();
+ panel.setBorder(new TitledBorder(null, Res.string().getCardInfo(), TitledBorder.LEFT, TitledBorder.TOP,
+ null, null));
+ panel.setBounds(0, 0, 285, 87);
+ contentPanel.add(panel);
+ panel.setLayout(null);
+ {
+ JLabel lblNewLabel = new JLabel(Res.string().getCardNo());
+ lblNewLabel.setBounds(10, 22, 89, 15);
+ panel.add(lblNewLabel);
+ }
+ {
+ cardNoTextField = new JTextField();
+ cardNoTextField.setBounds(111, 19, 164, 21);
+ panel.add(cardNoTextField);
+ cardNoTextField.setColumns(10);
+ }
+ {
+ JLabel lblNewLabel_1 = new JLabel(Res.string().getVTOOperateManagerRoomNo());
+ lblNewLabel_1.setBounds(10, 62, 96, 15);
+ panel.add(lblNewLabel_1);
+ }
+ {
+ roomNoTextField = new JTextField();
+ roomNoTextField.setColumns(10);
+ roomNoTextField.setBounds(111, 59, 164, 21);
+ panel.add(roomNoTextField);
+ }
+ }
+
+ needFingerCheckBox = new JCheckBox(Res.string().getNeedFingerPrint());
+ needFingerCheckBox.setSelected(true);
+ needFingerCheckBox.setBounds(6, 106, 190, 23);
+ contentPanel.add(needFingerCheckBox);
+
+
+ JPanel panel = new JPanel();
+ panel.setBorder(new TitledBorder(null, Res.string().getFingerPrint(), TitledBorder.LEFT,
+ TitledBorder.TOP, null, null));
+ panel.setBounds(0, 135, 285, 84);
+ contentPanel.add(panel);
+ panel.setLayout(null);
+
+ JLabel lblNewLabel_2 = new JLabel(Res.string().getFingerPrint());
+ lblNewLabel_2.setBounds(10, 35, 109, 28);
+ panel.add(lblNewLabel_2);
+
+ final JButton btnGetFinger = new JButton(Res.string().getGet());
+ btnGetFinger.setBounds(129, 38, 93, 23);
+ panel.add(btnGetFinger);
+ btnGetFinger.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ if (fingerPrint == null) {
+ fingerPrint = new CollectionFingerPrint();
+ fingerPrint.setVisible(true);
+ fingerPrint.setFocusable(true);
+ } else {
+ //清除信息数据
+ fingerPrint.dispose();
+ //显示信息对话框
+ fingerPrint.setVisible(true);
+ }
+ }
+ });
+ needFingerCheckBox.addChangeListener(new ChangeListener() {
+ @Override
+ public void stateChanged(ChangeEvent e) {
+ //获取事件源
+ JCheckBox checkBox = (JCheckBox) e.getSource();
+ //选中
+ if (checkBox.isSelected()) {
+ btnGetFinger.setEnabled(true);
+ } else {
+ btnGetFinger.setEnabled(false);
+ }
+ }
+ });
+
+ {
+ paintPanel = new PaintPanel();
+ paintPanel.setBackground(Color.GRAY);
+ paintPanel.setBorder(new TitledBorder(null, Res.string().getFaceInfo(), TitledBorder.LEADING,
+ TitledBorder.TOP, null, null));
+ paintPanel.setBounds(295, 10, 155, 209);
+ contentPanel.add(paintPanel);
+ paintPanel.setLayout(null);
+ {
+ JButton open = new JButton(Res.string().getOpen());
+ open.setBounds(26, 90, 93, 23);
+ paintPanel.add(open);
+ // 选择图片,获取图片的信息
+ open.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ String picPath = "";
+
+ // 选择图片,获取图片路径,并在界面显示
+ picPath = ToolKits.openPictureFile(paintPanel);
+
+ if (!picPath.equals("")) {
+ try {
+ memory = ToolKits.readPictureFile(picPath);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ }
+ });
+ }
+ }
+ {
+ JPanel buttonPane = new JPanel();
+ buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
+ getContentPane().add(buttonPane, BorderLayout.SOUTH);
+ {
+ JButton okButton = new JButton("OK");
+ okButton.setActionCommand("OK");
+ buttonPane.add(okButton);
+ getRootPane().setDefaultButton(okButton);
+ okButton.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ //获取到信息
+ if (fingerPrint.isCollectionResult()) {
+ fingerPrintData = Base64.getEncoder().encodeToString(fingerPrint.getPackageData()).trim();
+ }
+ if (infoType == 0) {
+ //新增卡信息
+ if (!checkCardNo(cardNoTextField.getText().trim().getBytes(), true)) {
+ //卡号已存在
+ return;
+ }
+ //添加失败,直接返回,不隐藏窗口
+ if (!addCard(cardNoTextField.getText().trim().getBytes(), roomNoTextField.getText().getBytes(), needFingerCheckBox.isSelected() ? 1 : 0, fingerPrintData)) {
+ return;
+ }
+
+ } else if (infoType == 1) {
+ //修改卡信息
+ if (!checkCardNo(cardNoTextField.getText().trim().getBytes(), false)) {
+ //卡号不存在,不能修改
+ return;
+ }
+ //修改失败,则直接返回,不隐藏界面
+ if (!modifyCard(cardNoTextField.getText().trim().getBytes(), roomNoTextField.getText().trim().getBytes(), needFingerCheckBox.isSelected() ? 1 : 0, fingerPrintData)) {
+ return;
+ }
+ }
+ dispose();
+ }
+ });
+ }
+ {
+ JButton cancelButton = new JButton("Cancel");
+ cancelButton.setActionCommand("Cancel");
+ buttonPane.add(cancelButton);
+ cancelButton.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ dispose();
+ }
+ });
+ }
+ addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowClosed(WindowEvent e) {
+ super.windowClosed(e);
+ //清除信息状态
+ if (fingerPrint.isCollectionResult()) {
+ fingerPrint.clearStatus();
+ }
+ }
+ });
+ }
+ }
+
+ /**
+ * 检查下卡号是否存在
+ * true:不存在
+ * false:存在
+ *
+ * @param type true:卡存在即弹窗
+ * @return
+ */
+ public boolean checkCardNo(byte[] cardNo, boolean type) {
+ if (cardNo.length == 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getInputCardNo(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+
+ //check whether the card number already exists查询一下卡号是否已经存在
+ NetSDKLib.NET_IN_FIND_RECORD_PARAM inParam = new NetSDKLib.NET_IN_FIND_RECORD_PARAM();
+ inParam.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD;
+ //查询条件
+ NetSDKLib.FIND_RECORD_ACCESSCTLCARD_CONDITION condition = new NetSDKLib.FIND_RECORD_ACCESSCTLCARD_CONDITION();
+ //卡号查询有效
+ condition.abCardNo = 1;
+ if (cardNo.length > condition.szCardNo.length - 1) {
+ JOptionPane.showMessageDialog(null, Res.string().getCardNoExceedLength(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ System.arraycopy(cardNo, 0, condition.szCardNo, 0, cardNo.length);
+ inParam.pQueryCondition = new Memory(condition.size());
+ ToolKits.SetStructDataToPointer(condition, inParam.pQueryCondition, 0);
+ NetSDKLib.NET_OUT_FIND_RECORD_PARAM outParam = new NetSDKLib.NET_OUT_FIND_RECORD_PARAM();
+ boolean startFind = LoginModule.netsdk.CLIENT_FindRecord(LoginModule.m_hLoginHandle, inParam, outParam, 5000);
+ if (!startFind) {
+ JOptionPane.showMessageDialog(null, Res.string().getQueryCardExistFailed(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ //查询卡号是否已存在
+ int max = 1;
+ NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM inNextParam = new NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM();
+ inNextParam.lFindeHandle = outParam.lFindeHandle;
+ inNextParam.nFileCount = max;
+ NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM outNextParam = new NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM();
+ outNextParam.nMaxRecordNum = max;
+ NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARD[] card = new NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARD[1];
+ card[0] = new NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARD();
+ outNextParam.pRecordList = new Memory(card[0].size() * max);
+ ToolKits.SetStructArrToPointerData(card, outNextParam.pRecordList);
+ LoginModule.netsdk.CLIENT_FindNextRecord(inNextParam, outNextParam, 5000);
+ if (outNextParam.nRetRecordNum != 0 && type) {
+ //卡号已存在
+ JOptionPane.showMessageDialog(null, Res.string().getFindCardExist(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ //停止查询
+ LoginModule.netsdk.CLIENT_FindRecordClose(outParam.lFindeHandle);
+ return false;
+ }
+ //停止查询
+ LoginModule.netsdk.CLIENT_FindRecordClose(outParam.lFindeHandle);
+ return true;
+ }
+
+ /**
+ * 新增卡
+ */
+ public boolean addCard(byte[] cardNo, byte[] userID, int enableFinger, String fingerPrintData) {
+ if (cardNo.length == 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getInputCardNo(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ if (userID.length == 0) {
+ JOptionPane.showMessageDialog(null, Res.string().getInputRoomNo(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ if (memory == null) {
+ JOptionPane.showMessageDialog(null, Res.string().getChooseFacePic(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARD card = new NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARD();
+ if (cardNo.length > card.szCardNo.length - 1) {
+ JOptionPane.showMessageDialog(null, Res.string().getCardNoExceedLength(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ if (userID.length > card.szUserID.length - 1) {
+ JOptionPane.showMessageDialog(null, Res.string().getRoomNoExceedLength(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ System.arraycopy(cardNo, 0, card.szCardNo, 0, cardNo.length);
+ System.arraycopy(userID, 0, card.szUserID, 0, userID.length);
+
+ card.nDoorNum = 1;
+ card.sznDoors[0] = 0;
+ if (enableFinger == 1) {
+ //信息不存在
+ if (fingerPrintData == null || fingerPrintData.trim().equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getFingerPrintIdNotExist(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ //base64 string to bytes
+ byte[] bytes = Base64.getDecoder().decode(fingerPrintData);
+ //增加信息
+ card.bEnableExtended = 1;
+ card.stuFingerPrintInfoEx.nCount = 1;
+ card.stuFingerPrintInfoEx.nLength = bytes.length;
+ card.stuFingerPrintInfoEx.nPacketLen = bytes.length;
+ card.stuFingerPrintInfoEx.pPacketData = new Memory(bytes.length);
+ card.stuFingerPrintInfoEx.pPacketData.clear(bytes.length);
+
+ card.stuFingerPrintInfoEx.pPacketData.write(0, bytes, 0, bytes.length);
+ } else {
+ card.bEnableExtended = 0;
+ }
+
+ NetSDKLib.NET_CTRL_RECORDSET_INSERT_PARAM inParam = new NetSDKLib.NET_CTRL_RECORDSET_INSERT_PARAM();
+ inParam.stuCtrlRecordSetInfo.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD;
+ inParam.stuCtrlRecordSetInfo.nBufLen = card.size();
+ inParam.stuCtrlRecordSetInfo.pBuf = new Memory(card.size());
+ ToolKits.SetStructDataToPointer(card, inParam.stuCtrlRecordSetInfo.pBuf, 0);
+ Pointer pointer = new Memory(inParam.size());
+ ToolKits.SetStructDataToPointer(inParam, pointer, 0);
+ // 插入信息必须用 CTRLTYPE_CTRL_RECORDSET_INSERTEX,不能用 CTRLTYPE_CTRL_RECORDSET_INSERT
+ boolean res = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle, CTRLTYPE_CTRL_RECORDSET_INSERTEX, pointer, 5000);
+ if (!res) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ return res;
+ }
+ ToolKits.GetPointerData(pointer, inParam);
+
+ if (memory != null) {
+ //增加人脸图片
+ NetSDKLib.NET_IN_ADD_FACE_INFO inAddFaceInfo = new NetSDKLib.NET_IN_ADD_FACE_INFO();
+ System.arraycopy(userID, 0, inAddFaceInfo.szUserID, 0, userID.length);
+ inAddFaceInfo.stuFaceInfo.nFacePhoto = 1;
+ inAddFaceInfo.stuFaceInfo.nFacePhotoLen[0] = (int) memory.size();
+ inAddFaceInfo.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto = new Memory(memory.size());
+ inAddFaceInfo.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto.write(0, memory.getByteArray(0, (int) memory.size()), 0, (int) memory.size());
+ inAddFaceInfo.stuFaceInfo.nRoom = 1;
+ System.arraycopy(userID, 0, inAddFaceInfo.stuFaceInfo.szRoomNoArr[0].szRoomNo, 0, userID.length);
+
+ NetSDKLib.NET_OUT_ADD_FACE_INFO outAddFaceInfo = new NetSDKLib.NET_OUT_ADD_FACE_INFO();
+ Pointer outFaceParam = new Memory(outAddFaceInfo.size());
+ ToolKits.SetStructDataToPointer(outAddFaceInfo, outFaceParam, 0);
+ Pointer inFace = new Memory(inAddFaceInfo.size());
+ ToolKits.SetStructDataToPointer(inAddFaceInfo, inFace, 0);
+ boolean result = LoginModule.netsdk.CLIENT_FaceInfoOpreate(LoginModule.m_hLoginHandle, NetSDKLib.EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_ADD,
+ inFace, outFaceParam, 10000);
+ if (!result) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ }
+ return true;
+
+ }
+
+ /**
+ * 修改卡信息
+ *
+ * @param cardNo 卡号
+ * @param userID 房间号
+ * @param enableFinger 是否使用信息
+ * @param fingerPrintData 信息数据,Base64编码字符串
+ */
+ public boolean modifyCard(byte[] cardNo, byte[] userID, int enableFinger, String fingerPrintData) {
+ //modify card
+ NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARD card = new NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARD();
+ NetSDKLib.NET_CTRL_RECORDSET_PARAM inParam = new NetSDKLib.NET_CTRL_RECORDSET_PARAM();
+ inParam.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD;
+ card.nDoorNum = 1;
+ card.sznDoors[0] = 0;
+ System.arraycopy(cardNo, 0, card.szCardNo, 0, cardNo.length);
+ System.arraycopy(userID, 0, card.szUserID, 0, userID.length);
+ if (enableFinger == 1) {
+ //信息不存在,输入信息
+ if (fingerPrintData == null || fingerPrintData.trim().equals("")) {
+ JOptionPane.showMessageDialog(null, Res.string().getFingerPrintIdNotExist(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ byte[] data = Base64.getDecoder().decode(fingerPrintData);
+ //modify finger print
+ card.bEnableExtended = 1;
+ card.stuFingerPrintInfoEx.nCount = 1;
+ card.stuFingerPrintInfoEx.nLength = data.length;
+ card.stuFingerPrintInfoEx.nPacketLen = data.length;
+ card.stuFingerPrintInfoEx.pPacketData = new Memory(data.length);
+ card.stuFingerPrintInfoEx.pPacketData.clear(data.length);
+ card.stuFingerPrintInfoEx.pPacketData.write(0, data, 0, data.length);
+ } else {
+ card.bEnableExtended = 0;
+ }
+ inParam.pBuf = new Memory(card.size());
+ ToolKits.SetStructDataToPointer(card, inParam.pBuf, 0);
+
+ Pointer pointer = new Memory(inParam.size());
+ ToolKits.SetStructDataToPointer(inParam, pointer, 0);
+
+ boolean res = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle, CTRLTYPE_CTRL_RECORDSET_UPDATEEX, pointer, 10000);
+ if (!res) {
+ JOptionPane.showMessageDialog(null, Res.string().getFailedModifyCard() + ", " + ToolKits.getErrorCodeShow(),
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return res;
+ }
+ //modify face
+ if (memory != null) {
+ NetSDKLib.NET_IN_UPDATE_FACE_INFO inUpdateFaceInfo = new NetSDKLib.NET_IN_UPDATE_FACE_INFO();
+ System.arraycopy(userID, 0, inUpdateFaceInfo.szUserID, 0, userID.length);
+ inUpdateFaceInfo.stuFaceInfo.nFacePhoto = 1;
+ inUpdateFaceInfo.stuFaceInfo.nFacePhotoLen[0] = (int) memory.size();
+ //inUpdateFaceInfo.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto=memory;
+ inUpdateFaceInfo.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto = new Memory(memory.size());
+ inUpdateFaceInfo.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto.write(0, memory.getByteArray(0, (int) memory.size()), 0, (int) memory.size());
+ inUpdateFaceInfo.stuFaceInfo.nRoom = 1;
+ System.arraycopy(userID, 0, inUpdateFaceInfo.stuFaceInfo.szRoomNoArr[0].szRoomNo, 0, userID.length);
+
+ NetSDKLib.NET_OUT_UPDATE_FACE_INFO outUpdateFaceInfo = new NetSDKLib.NET_OUT_UPDATE_FACE_INFO();
+ Pointer inUpdateParam = new Memory(inUpdateFaceInfo.size());
+ ToolKits.SetStructDataToPointer(inUpdateFaceInfo, inUpdateParam, 0);
+ Pointer outUpdateParam = new Memory(outUpdateFaceInfo.size());
+ ToolKits.SetStructDataToPointer(outUpdateFaceInfo, outUpdateParam, 0);
+ boolean result = LoginModule.netsdk.CLIENT_FaceInfoOpreate(LoginModule.m_hLoginHandle, NetSDKLib.EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_UPDATE, inUpdateParam, outUpdateParam, 5000);
+ if (!result) {
+ JOptionPane.showMessageDialog(null, Res.string().getFailedModifyCard() +","+ ToolKits.getErrorCodeShow(),
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return result;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * 清除人脸图片
+ */
+ public void clearImage() {
+ paintPanel.setOpaque(false);
+ paintPanel.setImage(null);
+ paintPanel.repaint();
+ memory = null;
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/frame/vto/OperateManager.java b/src/main/java/com/netsdk/demo/frame/vto/OperateManager.java
new file mode 100644
index 0000000..b4fd7cb
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/vto/OperateManager.java
@@ -0,0 +1,518 @@
+package com.netsdk.demo.frame.vto;
+
+import java.awt.BorderLayout;
+import java.awt.EventQueue;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.*;
+import javax.swing.border.EmptyBorder;
+import javax.swing.border.TitledBorder;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+
+import com.sun.jna.Memory;
+import com.sun.jna.Pointer;
+import com.sun.jna.ptr.IntByReference;
+
+import com.netsdk.common.Base64;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+
+import static com.netsdk.lib.NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD;
+import static com.netsdk.lib.NetSDKLib.NET_DEVSTATE_DEV_RECORDSET_EX;
+
+public class OperateManager extends JDialog {
+
+ private NetSDKLib.LLong lFindHandle;
+
+ private JPanel contentPane;
+ private OperateInfo info;
+ private JTextField textField;
+ private JTable table;
+ private Object[][] data;
+ private String[] tableTitle = {
+ Res.string().getVTOOperateManagerRecNo(),
+ Res.string().getVTOOperateManagerRoomNo(),
+ Res.string().getVTOOperateManagerCardNo(),
+ Res.string().getVTOOperateManagerFingerPrintData()
+ };
+
+ /**
+ * Launch the application.
+ */
+ public static void main(String[] args) {
+ EventQueue.invokeLater(new Runnable() {
+ public void run() {
+ try {
+ OperateManager dialogManager = new OperateManager();
+ dialogManager.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+ dialogManager.setVisible(true);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ });
+ }
+
+ /**
+ * Create the frame.
+ */
+ public OperateManager() {
+ setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+ setTitle(Res.string().getVTOOperateManagerTitle());
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ } catch (InstantiationException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (UnsupportedLookAndFeelException e) {
+ e.printStackTrace();
+ }
+ setBounds(100, 100, 547, 414);
+ contentPane = new JPanel();
+ contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
+ setContentPane(contentPane);
+ contentPane.setLayout(null);
+
+ JPanel panel = new JPanel();
+ panel.setBorder(new TitledBorder(null, Res.string().getCardInfo(), TitledBorder.LEFT,
+ TitledBorder.TOP, null, null));
+ panel.setBounds(0, 10, 328, 356);
+ contentPane.add(panel);
+ panel.setLayout(new BorderLayout(0, 0));
+
+ JScrollPane scrollPane = new JScrollPane();
+ panel.add(scrollPane, BorderLayout.CENTER);
+ data = new Object[0][5];
+ table = tableInit(data, tableTitle);
+ scrollPane.setViewportView(table);
+
+ JLabel lblNewLabel = new JLabel(Res.string().getVTORealLoadCardNo());
+ lblNewLabel.setBounds(338, 24, 95, 20);
+ contentPane.add(lblNewLabel);
+
+ textField = new JTextField();
+ textField.setBounds(338, 54, 136, 21);
+ contentPane.add(textField);
+ textField.setColumns(10);
+
+ JButton btnSearch = new JButton(Res.string().getSearch());
+ btnSearch.setBounds(338, 85, 136, 23);
+ contentPane.add(btnSearch);
+ btnSearch.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ search();
+ }
+ });
+
+ JButton btnAdd = new JButton(Res.string().getAdd());
+ btnAdd.setBounds(338, 138, 136, 23);
+ contentPane.add(btnAdd);
+
+ btnAdd.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ if (info == null) {
+ info = new OperateInfo();
+ info.addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowClosed(WindowEvent e) {
+ super.windowClosed(e);
+ search();
+ }
+ });
+ }
+ info.setVisible(true);
+ //设置卡号可编辑
+ info.setCardNoTextFieldEditEnable(true);
+ //设置房间号可编辑
+ info.setRoomNoTextFieldEditEnable(true);
+ info.setFocusable(true);
+ //新增卡
+ info.receiveData(0, "", "", "");
+ info.clearImage();
+ }
+ });
+ JButton btnModify = new JButton(Res.string().getModify());
+ btnModify.setBounds(338, 193, 136, 23);
+ contentPane.add(btnModify);
+ btnModify.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ //modify();
+ if (table.getSelectedRowCount() != 1) {
+ JOptionPane.showMessageDialog(null, Res.string().getSelectCard(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ if (table.getSelectedRowCount() == 1) {
+ if (info == null) {
+ info = new OperateInfo();
+ info.addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowClosed(WindowEvent e) {
+ super.windowClosed(e);
+ search();
+ }
+ });
+ }
+ info.setVisible(true);
+ //设置卡号不可编辑
+ info.setCardNoTextFieldEditEnable(false);
+ //设置房间号不可编辑
+ info.setRoomNoTextFieldEditEnable(false);
+ info.setFocusable(true);
+ //修改卡信息
+ /**
+ * 设置info的数据
+ */
+ info.receiveData(1, ((String) table.getModel().getValueAt(table.getSelectedRow(), 1)).trim(),
+ ((String) table.getModel().getValueAt(table.getSelectedRow(), 2)).trim(),
+ ((String) table.getModel().getValueAt(table.getSelectedRow(), 3)).trim());
+ //清除人脸缓存数据
+ info.clearImage();
+ info.setVisible(true);
+ info.setFocusable(true);
+ }
+ }
+ });
+
+ JButton btnDelete = new JButton(Res.string().getDelete());
+ btnDelete.setBounds(338, 245, 136, 23);
+ contentPane.add(btnDelete);
+ btnDelete.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ delete();
+ //更新卡数据显示
+ search();
+ }
+ });
+
+ JButton btnClear = new JButton(Res.string().getClear());
+ btnClear.setBounds(338, 303, 136, 23);
+ contentPane.add(btnClear);
+ btnClear.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ clear();
+ //更新卡数据显示
+ search();
+ }
+ });
+ }
+
+ /**
+ * 表格初始化
+ *
+ * @param data 表格数据
+ * @param columnName 表头名称
+ * @return
+ */
+ public JTable tableInit(Object[][] data, String[] columnName) {
+ JTable table;
+ DefaultTableModel model;
+ model = new DefaultTableModel(data, columnName);
+ table = new JTable(model) {
+ @Override // 不可编辑
+ public boolean isCellEditable(int row, int column) {
+ return false;
+ }
+ };
+
+ model = (DefaultTableModel) table.getModel();
+
+ /*DefaultTableCellHeaderRenderer titleRender = new DefaultTableCellHeaderRenderer();
+ titleRender.setHorizontalAlignment(JLabel.CENTER);
+ table.getTableHeader().setDefaultRenderer(titleRender);*/
+
+ table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行
+
+ // 列表显示居中
+ DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer();
+ dCellRenderer.setHorizontalAlignment(JLabel.CENTER);
+ table.setDefaultRenderer(Object.class, dCellRenderer);
+ return table;
+ }
+
+ /**
+ * 查询卡数据
+ */
+ public void search() {
+ if (lFindHandle != null && lFindHandle.longValue() != 0) {
+ LoginModule.netsdk.CLIENT_FindRecordClose(lFindHandle);
+ lFindHandle = null;
+ }
+ //清除table数据
+ DefaultTableModel model = (DefaultTableModel) table.getModel();
+ model.setRowCount(0);
+
+ //开始查询记录
+ NetSDKLib.NET_IN_FIND_RECORD_PARAM inParam = new NetSDKLib.NET_IN_FIND_RECORD_PARAM();
+ NetSDKLib.NET_OUT_FIND_RECORD_PARAM outParam = new NetSDKLib.NET_OUT_FIND_RECORD_PARAM();
+ //门禁卡
+ inParam.emType = NET_RECORD_ACCESSCTLCARD;
+ NetSDKLib.FIND_RECORD_ACCESSCTLCARD_CONDITION condition = new NetSDKLib.FIND_RECORD_ACCESSCTLCARD_CONDITION();
+ if (textField.getText() != null && !textField.getText().equals("")) {
+ //卡号非空,为条件查询
+ condition.abCardNo = 1;
+ String cardNo = textField.getText();
+ System.arraycopy(cardNo.getBytes(), 0, condition.szCardNo, 0, cardNo.getBytes().length);
+ inParam.pQueryCondition = new Memory(condition.size());
+ ToolKits.SetStructDataToPointer(condition, inParam.pQueryCondition, 0);
+ }
+
+ boolean bRet = LoginModule.netsdk.CLIENT_FindRecord(LoginModule.m_hLoginHandle, inParam, outParam, 10000);
+ if (!bRet) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ lFindHandle = outParam.lFindeHandle;
+ //Query查询所有数据
+ queryData();
+ //结束查询
+ boolean success = LoginModule.netsdk.CLIENT_FindRecordClose(lFindHandle);
+ if (!success) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+
+ }
+ }
+
+ /**
+ * 循环遍历获取卡数据
+ */
+ public void queryData() {
+ DefaultTableModel model = (DefaultTableModel) table.getModel();
+ while (true) {
+ int max = 20;
+ //query the next batch of data 查询下一组数据
+ NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM inParam = new NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM();
+ NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM outParam = new NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM();
+
+ NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARD[] cards = new NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARD[max];
+ for (int i = 0; i < max; i++) {
+ cards[i] = new NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARD();
+ }
+
+ outParam.pRecordList = new Memory(cards[0].size() * max);
+ outParam.nMaxRecordNum = max;
+ inParam.lFindeHandle = lFindHandle;
+ inParam.nFileCount = max;
+ ToolKits.SetStructArrToPointerData(cards, outParam.pRecordList);
+ boolean result = LoginModule.netsdk.CLIENT_FindNextRecord(inParam, outParam, 10000);
+ //获取数据
+ ToolKits.GetPointerDataToStructArr(outParam.pRecordList, cards);
+ NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARD card;
+ for (int i = 0; i < outParam.nRetRecordNum; i++) {
+ //获取到卡数据
+ card = cards[i];
+ //有信息信息,则获取信息数据
+ String fingerPrint = "";
+ card.bEnableExtended = 1;
+ card.stuFingerPrintInfoEx.nPacketLen = 2048;
+ card.stuFingerPrintInfoEx.pPacketData = new Memory(2048);
+ //获取信息信息
+ fingerPrint = getFingerPrint(card);
+
+ //更新table数据显示
+ model.addRow(new Object[]{card.nRecNo, new String(card.szUserID).trim(), new String(card.szCardNo).trim(), fingerPrint.trim()});
+ }
+ //当前查询数与最大查询数不同,则查询结束
+ if (outParam.nRetRecordNum != outParam.nMaxRecordNum || (outParam.nRetRecordNum == 0 && outParam.nMaxRecordNum == 0)) {
+ break;
+ }
+ }
+
+ }
+
+ /**
+ * 获取信息数据信息
+ *
+ * @param card
+ * @return
+ */
+ public String getFingerPrint(NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARD card) {
+ NetSDKLib.NET_CTRL_RECORDSET_PARAM inp = new NetSDKLib.NET_CTRL_RECORDSET_PARAM();
+ inp.emType = NET_RECORD_ACCESSCTLCARD;
+ inp.pBuf = new Memory(card.size());
+ ToolKits.SetStructDataToPointer(card, inp.pBuf, 0);
+ inp.nBufLen = card.size();
+ Pointer pointer = new Memory(inp.size());
+ ToolKits.SetStructDataToPointer(inp, pointer, 0);
+ boolean re = LoginModule.netsdk.CLIENT_QueryDevState(LoginModule.m_hLoginHandle, NET_DEVSTATE_DEV_RECORDSET_EX, pointer, inp.size(), new IntByReference(0), 5000);
+ if (re) {
+ //提取信息数据
+ ToolKits.GetPointerDataToStruct(pointer, 0, inp);
+ //获取门禁卡信息
+ ToolKits.GetPointerData(inp.pBuf, card);
+ byte[] fpData = new byte[card.stuFingerPrintInfoEx.nRealPacketLen];
+ card.stuFingerPrintInfoEx.pPacketData.read(0, fpData, 0, fpData.length);
+ //转成base64编码
+ return Base64.getEncoder().encodeToString(fpData);
+
+ } else {
+ /*JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);*/
+ System.out.println("Get Finger print data error.there is no data");
+ }
+ return "";
+ }
+
+ /**
+ * 删除卡相关信息
+ */
+ public void delete() {
+ if (table.getSelectedRowCount() != 1) {
+ JOptionPane.showMessageDialog(null, "please select a card", Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ int nRecNo = (Integer) table.getModel().getValueAt(table.getSelectedRow(), 0);
+ //删除卡
+ if (!deleteCard(nRecNo)) {
+ return;
+ }
+ //删除人脸
+ if (!deleteFaceInfo((String) table.getModel().getValueAt(table.getSelectedRow(), 1))) {
+ return;
+ }
+ }
+
+ /**
+ * 删除卡信息
+ *
+ * @param recNo
+ * @return
+ */
+ public boolean deleteCard(int recNo) {
+
+ NetSDKLib.NET_CTRL_RECORDSET_PARAM remove = new NetSDKLib.NET_CTRL_RECORDSET_PARAM();
+ remove.emType = NET_RECORD_ACCESSCTLCARD;
+ remove.pBuf = new IntByReference(recNo).getPointer();
+
+ remove.write();
+ boolean result = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle,
+ NetSDKLib.CtrlType.CTRLTYPE_CTRL_RECORDSET_REMOVE, remove.getPointer(), 5000);
+ remove.read();
+
+ if (!result) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ }
+ return result;
+ }
+
+ /**
+ * 删除人脸(单个删除)
+ *
+ * @param userId 用户ID
+ */
+ public boolean deleteFaceInfo(String userId) {
+ int emType = NetSDKLib.EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_REMOVE;
+
+ /**
+ * 入参
+ */
+ NetSDKLib.NET_IN_REMOVE_FACE_INFO inRemove = new NetSDKLib.NET_IN_REMOVE_FACE_INFO();
+
+ // 用户ID
+ System.arraycopy(userId.getBytes(), 0, inRemove.szUserID, 0, userId.getBytes().length);
+
+ /**
+ * 出参
+ */
+ NetSDKLib.NET_OUT_REMOVE_FACE_INFO outRemove = new NetSDKLib.NET_OUT_REMOVE_FACE_INFO();
+
+ inRemove.write();
+ outRemove.write();
+ boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(LoginModule.m_hLoginHandle, emType, inRemove.getPointer(), outRemove.getPointer(), 5000);
+ inRemove.read();
+ outRemove.read();
+ if (!bRet) {
+ JOptionPane.showMessageDialog(null, Res.string().getRemoveCardFaceFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ }
+ return bRet;
+ }
+
+ /**
+ * 清除数据
+ */
+ public void clear() {
+ //清空人脸数据
+ if (!clearFace()) {
+ return;
+ }
+ //清空卡信息
+ if (clearCard()) {
+ return;
+ }
+ //重新查询,更新界面
+ search();
+ }
+
+ /**
+ * 清除人脸(清除所有)
+ */
+ private boolean clearFace() {
+ int emType = NetSDKLib.EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_CLEAR;
+
+ /**
+ * 入参
+ */
+ NetSDKLib.NET_IN_CLEAR_FACE_INFO inClear = new NetSDKLib.NET_IN_CLEAR_FACE_INFO();
+
+ /**
+ * 出参
+ */
+ NetSDKLib.NET_OUT_REMOVE_FACE_INFO outClear = new NetSDKLib.NET_OUT_REMOVE_FACE_INFO();
+
+ inClear.write();
+ outClear.write();
+ boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(LoginModule.m_hLoginHandle, emType, inClear.getPointer(), outClear.getPointer(), 5000);
+ inClear.read();
+ outClear.read();
+ if (!bRet) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ }
+ return bRet;
+ }
+
+ /**
+ * 清除卡信息
+ *
+ * @return
+ */
+ private boolean clearCard() {
+ NetSDKLib.NET_CTRL_RECORDSET_PARAM clear = new NetSDKLib.NET_CTRL_RECORDSET_PARAM();
+ clear.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; // 记录集信息类型
+
+ clear.write();
+ boolean result = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle,
+ NetSDKLib.CtrlType.CTRLTYPE_CTRL_RECORDSET_CLEAR, clear.getPointer(), 5000);
+ clear.read();
+ if (!result) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ }
+ return result;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/demo/frame/vto/VTOAnalyzerCallBack.java b/src/main/java/com/netsdk/demo/frame/vto/VTOAnalyzerCallBack.java
new file mode 100644
index 0000000..8905e12
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/vto/VTOAnalyzerCallBack.java
@@ -0,0 +1,129 @@
+package com.netsdk.demo.frame.vto;
+
+import com.sun.jna.Callback;
+import com.sun.jna.Pointer;
+import com.netsdk.common.PaintPanel;
+import com.netsdk.common.Res;
+import com.netsdk.common.SavePath;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+
+import javax.imageio.ImageIO;
+import javax.swing.*;
+import javax.swing.table.DefaultTableModel;
+
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+
+import static com.netsdk.lib.NetSDKLib.EVENT_IVS_ACCESS_CTL;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description vto智能分析的回调函数, 建议写成单例模式
+ * 对应接口 {@link NetSDKLib#CLIENT_RealLoadPictureEx(NetSDKLib.LLong, int, int, int, Callback, Pointer, Pointer)}
+ * @date 2020/8/15
+ */
+public class VTOAnalyzerCallBack implements NetSDKLib.fAnalyzerDataCallBack {
+ private static VTOAnalyzerCallBack INSTANCE;
+ private JTable table;
+ private PaintPanel paintPanel;
+ private BufferedImage bufferedImage;
+
+ private VTOAnalyzerCallBack(JTable table,PaintPanel panel) {
+ this.table = table;
+ this.paintPanel=panel;
+ }
+
+ public static VTOAnalyzerCallBack getINSTANCE(JTable table,PaintPanel paintPanel) {
+ if (INSTANCE == null) {
+ INSTANCE = new VTOAnalyzerCallBack(table,paintPanel);
+ }
+ return INSTANCE;
+ }
+
+ @Override
+ public int invoke(NetSDKLib.LLong lAnalyzerHandle, int dwAlarmType, Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize, Pointer dwUser, int nSequence, Pointer reserved) {
+ //门禁事件
+ if (dwAlarmType == EVENT_IVS_ACCESS_CTL) {
+ NetSDKLib.DEV_EVENT_ACCESS_CTL_INFO info = new NetSDKLib.DEV_EVENT_ACCESS_CTL_INFO();
+ ToolKits.GetPointerDataToStruct(pAlarmInfo, 0, info);
+ //更新列表
+ if(table!=null){
+ DefaultTableModel model= (DefaultTableModel) table.getModel();
+ NetSDKLib.NET_TIME_EX time=info.UTC;
+ if(info.UTC.dwYear==0&&info.UTC.dwMonth==0&&info.UTC.dwDay==0){
+ time=info.stuFileInfo.stuFileTime;
+ }
+ model.addRow(new Object[]{new String(info.szUserID).trim(),new String(info.szCardNo).trim(),time.toString().trim(),getEventInfo(info).trim()});
+ }
+ if(pBuffer != null && dwBufSize > 0) {
+ String strFileName = SavePath.getSavePath().getSaveCapturePath();
+ byte[] buf = pBuffer.getByteArray(0, dwBufSize);
+ ByteArrayInputStream byteArrInput = new ByteArrayInputStream(buf);
+ try {
+ bufferedImage = ImageIO.read(byteArrInput);
+ if (bufferedImage == null) {
+ return 0;
+ }
+ ImageIO.write(bufferedImage, "jpg", new File(strFileName));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ // 界面显示抓图
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ paintPanel.setOpaque(false);
+ paintPanel.setImage(bufferedImage);
+ paintPanel.repaint();
+ }
+ });
+ }
+ }
+// return 1;
+ return 0;
+ }
+
+ /**
+ * 获取事件信息
+ * @param info
+ * @return
+ */
+ private String getEventInfo(NetSDKLib.DEV_EVENT_ACCESS_CTL_INFO info){
+ StringBuilder builder=new StringBuilder();
+ builder.append(Res.string().getChannel()).append(info.nChannelID).append(",")
+ .append(Res.string().getOpenMethod()).append(openDoorMethod(info.emOpenMethod)).append(",")
+ .append(Res.string().getOpenStatus()).append(info.bStatus==1?Res.string().getSucceed():Res.string().getFailed());
+ return builder.toString();
+ }
+ /**
+ * 开门方式
+ * @param emOpenMethod
+ * @return
+ */
+ private String openDoorMethod(int emOpenMethod) {
+ String method;
+ switch (emOpenMethod) {
+ case NetSDKLib.NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD:
+ method = Res.string().getCard();
+ break;
+ case NetSDKLib.NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACE_RECOGNITION:
+ method = Res.string().getFaceRecognition();
+ break;
+ case NetSDKLib.NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT:
+ method = Res.string().getFingerPrint();
+ break;
+ case NetSDKLib.NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_REMOTE:
+ method = Res.string().getRemoteCapture();
+ break;
+ default:
+ method = Res.string().getUnKnow();
+ break;
+ }
+ return method;
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/frame/vto/VTODemo.java b/src/main/java/com/netsdk/demo/frame/vto/VTODemo.java
new file mode 100644
index 0000000..dc45d34
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/vto/VTODemo.java
@@ -0,0 +1,640 @@
+package com.netsdk.demo.frame.vto;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.EventQueue;
+import java.awt.Panel;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPasswordField;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.ListSelectionModel;
+import javax.swing.ScrollPaneConstants;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.border.EmptyBorder;
+import javax.swing.border.TitledBorder;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+
+import com.sun.jna.Memory;
+import com.sun.jna.Pointer;
+
+import com.netsdk.common.FunctionList;
+import com.netsdk.common.PaintPanel;
+import com.netsdk.common.Res;
+import com.netsdk.demo.module.AlarmListenModule;
+import com.netsdk.demo.module.GateModule;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.demo.module.RealPlayModule;
+import com.netsdk.demo.module.TalkModule;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.CtrlType;
+import com.netsdk.lib.NetSDKLib.EM_OPEN_DOOR_TYPE;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.NetSDKLib.NET_CTRL_ACCESS_OPEN;
+import com.netsdk.lib.ToolKits;
+
+public class VTODemo extends JFrame {
+ private static final long serialVersionUID = 1L;
+
+ private JPanel contentPane;
+ private JTextField ipTextField;
+ private JTextField portTextField;
+ private JTextField userNameTextField;
+ private JPasswordField passwordField;
+ private JTable alarmTable;
+
+ private Panel realPlay;
+ private PaintPanel imagePanel;
+ private JButton btnLogin;
+ private JButton btnLogout;
+ private JButton btnRealPlay;
+ private JButton btnStopplay;
+ private JButton btnTalk;
+ private JButton btnStoptalk;
+ private JButton btnOpendoor;
+ private JButton btnClosedoor;
+ private JButton btnOperate;
+ private JButton btnStartlisten;
+ private JButton btnStoplisten;
+ private JButton btnStartrealload;
+ private JButton btnStoprealload;
+ JTabbedPane tabbedPane;
+ private static boolean b_RealPlay = false;
+ private static boolean b_Attachment = false;
+ private boolean isListen = false;
+
+///////////////////// 主面板 /////////////////////
+
+ private static JFrame mainFrame = new JFrame();
+ private OperateManager manager = new OperateManager();
+
+ private Object[][] alarmData;
+ private Object[][] realData;
+
+ private DefaultTableModel alarmModel;
+ private DefaultTableModel realModel;
+
+ private final String[] alarmTableTitle = {Res.string().getVTOAlarmEventRoomNo(),
+ Res.string().getVTOAlarmEventCardNo(), Res.string().getVTOAlarmEventTime(),
+ Res.string().getVTOAlarmEventOpenMethod(), Res.string().getVTOAlarmEventStatus()};
+ private final String[] realTableTitle = {Res.string().getVTORealLoadRoomNO(), Res.string().getVTORealLoadCardNo(),
+ Res.string().getVTORealLoadTime(), Res.string().getVTORealLoadEventInfo()};
+
+ /**
+ * Launch the application.
+ */
+ public static void main(String[] args) {
+ EventQueue.invokeLater(new Runnable() {
+ public void run() {
+ try {
+ VTODemo frame = new VTODemo();
+ frame.setVisible(true);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ });
+ }
+
+ /**
+ * Create the frame.
+ */
+ public VTODemo() {
+ // setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ setTitle(Res.string().getVTO());
+ setBounds(100, 100, 920, 651);
+ contentPane = new JPanel();
+ contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
+ setContentPane(contentPane);
+ contentPane.setLayout(null);
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ LoginModule.init(DefaultDisConnect.GetInstance(), DefaultHaveReconnect.getINSTANCE());
+ JPanel panel = new JPanel();
+ panel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), Res.string().getLogin(),
+ TitledBorder.LEFT, TitledBorder.TOP, null, new Color(0, 0, 0)));
+ panel.setBounds(0, 0, 905, 46);
+ contentPane.add(panel);
+ panel.setLayout(null);
+
+ JLabel ipLabel = new JLabel(Res.string().getIp());
+ ipLabel.setBounds(10, 15, 44, 21);
+ panel.add(ipLabel);
+
+ ipTextField = new JTextField();
+ ipTextField.setText("192.168.69.142");
+ ipTextField.setBounds(64, 15, 89, 21);
+ panel.add(ipTextField);
+ ipTextField.setColumns(10);
+
+ JLabel portLabel = new JLabel(Res.string().getPort());
+ portLabel.setBounds(174, 15, 44, 21);
+ panel.add(portLabel);
+
+ portTextField = new JTextField();
+ portTextField.setText("37777");
+ portTextField.setColumns(10);
+ portTextField.setBounds(228, 15, 66, 21);
+ panel.add(portTextField);
+
+ JLabel lblName = new JLabel(Res.string().getUserName());
+ lblName.setBounds(316, 15, 66, 21);
+ panel.add(lblName);
+
+ userNameTextField = new JTextField();
+ userNameTextField.setText("admin");
+ userNameTextField.setColumns(10);
+ userNameTextField.setBounds(383, 15, 87, 21);
+ panel.add(userNameTextField);
+
+ JLabel lblPassword = new JLabel(Res.string().getPassword());
+ lblPassword.setBounds(492, 15, 66, 21);
+ panel.add(lblPassword);
+
+ passwordField = new JPasswordField();
+ passwordField.setBounds(568, 15, 112, 21);
+ passwordField.setText("yzx123456");
+ panel.add(passwordField);
+
+ btnLogin = new JButton(Res.string().getLogin());
+ btnLogin.setBounds(684, 14, 99, 23);
+ panel.add(btnLogin);
+ btnLogin.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ login();
+ }
+ });
+ btnLogout = new JButton(Res.string().getLogout());
+ btnLogout.setBounds(785, 14, 110, 23);
+ panel.add(btnLogout);
+ btnLogout.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ logout();
+ }
+ });
+ JPanel previewPanel = new JPanel();
+ previewPanel.setBorder(
+ new TitledBorder(null, Res.string().getRealplay(), TitledBorder.LEFT, TitledBorder.TOP, null, null));
+ previewPanel.setBounds(10, 56, 409, 313);
+ contentPane.add(previewPanel);
+ previewPanel.setLayout(new BorderLayout(0, 0));
+
+ realPlay = new Panel();
+ realPlay.setBackground(Color.GRAY);
+ previewPanel.add(realPlay, BorderLayout.CENTER);
+
+ JPanel operatePanel = new JPanel();
+ operatePanel.setBorder(
+ new TitledBorder(null, Res.string().getOperate(), TitledBorder.LEFT, TitledBorder.TOP, null, null));
+ operatePanel.setBounds(429, 56, 452, 194);
+ contentPane.add(operatePanel);
+ operatePanel.setLayout(null);
+
+ btnRealPlay = new JButton(Res.string().getStartRealPlay());
+ btnRealPlay.setBounds(37, 23, 162, 29);
+ operatePanel.add(btnRealPlay);
+ btnRealPlay.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ realPlay();
+ }
+ });
+ btnTalk = new JButton(Res.string().getStartTalk());
+ btnTalk.setBounds(248, 23, 152, 29);
+ operatePanel.add(btnTalk);
+ btnTalk.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ talk();
+ }
+ });
+ btnStopplay = new JButton(Res.string().getStopRealPlay());
+ btnStopplay.setBounds(37, 62, 162, 29);
+ operatePanel.add(btnStopplay);
+ btnStopplay.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ stopPlay();
+ }
+ });
+ btnStoptalk = new JButton(Res.string().getStopTalk());
+ btnStoptalk.setBounds(248, 62, 152, 29);
+ operatePanel.add(btnStoptalk);
+ btnStoptalk.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ stopTalk();
+ }
+ });
+ btnOpendoor = new JButton(Res.string().getDoorOpen());
+ btnOpendoor.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ openDoor();
+ }
+ });
+ btnOpendoor.setBounds(37, 110, 162, 29);
+ operatePanel.add(btnOpendoor);
+
+ btnClosedoor = new JButton(Res.string().getDoorClose());
+ btnClosedoor.setBounds(37, 149, 162, 29);
+ operatePanel.add(btnClosedoor);
+ btnClosedoor.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ closeDoor();
+ }
+ });
+ btnOperate = new JButton(Res.string().getCardOperate());
+ btnOperate.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ if (manager == null) {
+ manager = new OperateManager();
+ }
+ manager.setVisible(true);
+ }
+ });
+ btnOperate.setBounds(248, 125, 152, 29);
+ operatePanel.add(btnOperate);
+
+ JPanel eventOperate = new JPanel();
+ eventOperate.setBorder(new TitledBorder(null, Res.string().getEventOperate(), TitledBorder.LEFT,
+ TitledBorder.TOP, null, null));
+ eventOperate.setBounds(429, 260, 452, 104);
+ contentPane.add(eventOperate);
+ eventOperate.setLayout(null);
+
+ btnStartlisten = new JButton(Res.string().getStartListen());
+ btnStartlisten.setBounds(35, 21, 178, 29);
+ eventOperate.add(btnStartlisten);
+ btnStartlisten.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ isListen = startListen();
+ tabbedPane.setSelectedIndex(0);
+ }
+ });
+
+ btnStoplisten = new JButton(Res.string().getStopListen());
+ btnStoplisten.setBounds(35, 60, 178, 29);
+ eventOperate.add(btnStoplisten);
+ btnStoplisten.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ //table清空数据
+ ((DefaultTableModel) alarmTable.getModel()).setRowCount(0);
+ stopListen();
+ }
+ });
+
+ btnStartrealload = new JButton(Res.string().getStartRealLoad());
+ btnStartrealload.setBounds(234, 21, 195, 29);
+ eventOperate.add(btnStartrealload);
+ btnStartrealload.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ startRealLoad();
+ tabbedPane.setSelectedIndex(1);
+ }
+ });
+
+ btnStoprealload = new JButton(Res.string().getStopRealLoad());
+ btnStoprealload.setBounds(234, 60, 195, 29);
+ eventOperate.add(btnStoprealload);
+ btnStoprealload.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ //清空table数据
+ ((DefaultTableModel) realLoadTable.getModel()).setRowCount(0);
+ stopRealLoad();
+ //图片清空
+ imagePanel.setImage(null);
+ imagePanel.repaint();
+ }
+ });
+
+ tabbedPane = new JTabbedPane(JTabbedPane.TOP);
+ tabbedPane.setBounds(10, 379, 871, 224);
+ contentPane.add(tabbedPane);
+
+ JPanel alarmPanel = new JPanel();
+ alarmPanel.setBorder(
+ new TitledBorder(null, Res.string().getEventInfo(), TitledBorder.LEFT, TitledBorder.TOP, null, null));
+ tabbedPane.addTab(Res.string().getAlarmEvent(), null, alarmPanel, null);
+ alarmPanel.setLayout(new BorderLayout(0, 0));
+
+ alarmData = new Object[0][5];
+ alarmTable = tableInit(alarmData, alarmTableTitle);
+ alarmModel = (DefaultTableModel) alarmTable.getModel();
+ JScrollPane scrollPane = new JScrollPane(alarmTable);
+ scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+ alarmPanel.add(scrollPane, BorderLayout.CENTER);
+
+ JPanel realLoadPanel = new JPanel();
+ realLoadPanel.setBorder(new TitledBorder(null, Res.string().getVTORealLoadEventInfo(), TitledBorder.LEFT,
+ TitledBorder.TOP, null, null));
+ tabbedPane.addTab(Res.string().getRealLoadEvent(), null, realLoadPanel, null);
+ realLoadPanel.setLayout(null);
+
+ imagePanel = new PaintPanel();
+ imagePanel.setBounds(671, 20, 185, 165);
+ realLoadPanel.add(imagePanel);
+ realData = new Object[0][4];
+ realLoadTable = tableInit(realData, realTableTitle);
+ realModel = (DefaultTableModel) realLoadTable.getModel();
+ realScrollPane = new JScrollPane(realLoadTable);
+ realScrollPane.setBounds(10, 20, 654, 165);
+ realScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+ realLoadPanel.add(realScrollPane);
+
+ btnEnable(false);
+ btnLogin.setEnabled(true);
+ addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowClosing(WindowEvent e) {
+ if (LoginModule.m_hLoginHandle.longValue() != 0) {
+ logout();
+ }
+ LoginModule.cleanup();
+ dispose();
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ FunctionList demo = new FunctionList();
+ demo.setVisible(true);
+ }
+ });
+ }
+ });
+ }
+
+ /**
+ * 按钮使能
+ *
+ * @param enable
+ */
+ public void btnEnable(boolean enable) {
+ btnLogin.setEnabled(enable);
+ btnLogout.setEnabled(enable);
+ btnRealPlay.setEnabled(enable);
+ btnStopplay.setEnabled(enable);
+ btnTalk.setEnabled(enable);
+ btnStoptalk.setEnabled(enable);
+ btnOpendoor.setEnabled(enable);
+ btnClosedoor.setEnabled(enable);
+ btnOperate.setEnabled(enable);
+ btnStartlisten.setEnabled(enable);
+ btnStoplisten.setEnabled(enable);
+ btnStartrealload.setEnabled(enable);
+ btnStoprealload.setEnabled(enable);
+ }
+
+ public JTable tableInit(Object[][] data, String[] columnName) {
+ JTable table;
+ DefaultTableModel model;
+ model = new DefaultTableModel(data, columnName);
+ table = new JTable(model) {
+ @Override // 不可编辑
+ public boolean isCellEditable(int row, int column) {
+ return false;
+ }
+ };
+ model = (DefaultTableModel) table.getModel();
+
+
+ table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 只能选中一行
+
+ // 列表显示居中
+ DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer();
+ dCellRenderer.setHorizontalAlignment(JLabel.CENTER);
+ table.setDefaultRenderer(Object.class, dCellRenderer);
+ return table;
+ }
+
+ /**
+ * 登录
+ */
+ public boolean login() {
+ if (LoginModule.login(ipTextField.getText(), Integer.parseInt(portTextField.getText()),
+ userNameTextField.getText(), new String(passwordField.getPassword()))) {
+ btnEnable(true);
+ btnLogin.setEnabled(false);
+ // 监听按钮使能
+ btnRealPlay.setEnabled(true);
+ btnStopplay.setEnabled(false);
+ btnStartlisten.setEnabled(true);
+ btnStoplisten.setEnabled(false);
+ btnStartrealload.setEnabled(true);
+ btnStoprealload.setEnabled(false);
+ btnTalk.setEnabled(true);
+ btnStoptalk.setEnabled(false);
+ } else {
+ JOptionPane.showMessageDialog(null, Res.string().getLoginFailed() + ", " + ToolKits.getErrorCodeShow(),
+ Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 登出
+ */
+ public void logout() {
+ if (b_RealPlay) {
+ stopPlay();
+ }
+ if (TalkModule.m_hTalkHandle != null) {
+ stopTalk();
+ }
+ if (isListen) {
+ stopListen();
+ isListen = false;
+ }
+ stopRealLoad();
+ LoginModule.logout();
+ btnEnable(false);
+ //清空两个表格
+ //普通事件table清空数据
+ ((DefaultTableModel) alarmTable.getModel()).setRowCount(0);
+ //智能事件table清空数据
+ ((DefaultTableModel) realLoadTable.getModel()).setRowCount(0);
+ //图片清空
+ imagePanel.setImage(null);
+ imagePanel.repaint();
+ btnLogin.setEnabled(true);
+ }
+
+ private LLong m_hPlayHandle;
+
+ public void realPlay() {
+ if (!b_RealPlay) {
+ m_hPlayHandle = RealPlayModule.startRealPlay(0, 0, realPlay);
+ if (m_hPlayHandle.longValue() != 0) {
+ b_RealPlay = true;
+ btnRealPlay.setEnabled(false);
+ btnStopplay.setEnabled(true);
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ }
+
+ /**
+ * 停止实时预览
+ */
+ public void stopPlay() {
+ if (b_RealPlay) {
+ RealPlayModule.stopRealPlay(m_hPlayHandle);
+ realPlay.repaint();
+ b_RealPlay = false;
+ btnRealPlay.setEnabled(true);
+ btnStopplay.setEnabled(false);
+ }
+ }
+
+ /**
+ * 对讲
+ */
+ public void talk() {
+ if (TalkModule.startTalk(0, 0)) {
+ btnTalk.setEnabled(false);
+ btnStoptalk.setEnabled(true);
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ }
+ }
+
+ /**
+ * 停止对讲
+ */
+ public void stopTalk() {
+ TalkModule.stopTalk();
+ btnTalk.setEnabled(true);
+ btnStoptalk.setEnabled(false);
+ }
+
+ /**
+ * 开门
+ */
+ public void openDoor() {
+ NET_CTRL_ACCESS_OPEN openInfo = new NET_CTRL_ACCESS_OPEN();
+ openInfo.nChannelID = 0;
+ openInfo.emOpenDoorType = EM_OPEN_DOOR_TYPE.EM_OPEN_DOOR_TYPE_REMOTE;
+
+ Pointer pointer = new Memory(openInfo.size());
+ ToolKits.SetStructDataToPointer(openInfo, pointer, 0);
+ boolean ret = LoginModule.netsdk.CLIENT_ControlDeviceEx(LoginModule.m_hLoginHandle,
+ CtrlType.CTRLTYPE_CTRL_ACCESS_OPEN, pointer, null, 10000);
+ if (!ret) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ }
+
+ /**
+ * 关门
+ */
+ public void closeDoor() {
+ final NetSDKLib.NET_CTRL_ACCESS_CLOSE close = new NetSDKLib.NET_CTRL_ACCESS_CLOSE();
+ close.nChannelID = 0; // 对应的门编号 - 如何开全部的门
+ close.write();
+ Pointer pointer = new Memory(close.size());
+ boolean result = LoginModule.netsdk.CLIENT_ControlDeviceEx(LoginModule.m_hLoginHandle,
+ NetSDKLib.CtrlType.CTRLTYPE_CTRL_ACCESS_CLOSE, close.getPointer(), null, 5000);
+ close.read();
+ if (!result) {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ }
+ }
+
+ /**
+ * 监听事件
+ */
+ public boolean startListen() {
+ if (AlarmListenModule.startListen(VTOMessageCallBack.getINSTANCE(alarmTable, null))) {
+ btnStartlisten.setEnabled(false);
+ btnStoplisten.setEnabled(true);
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 停止监听
+ */
+ public void stopListen() {
+ if (isListen) {
+ if (AlarmListenModule.stopListen()) {
+ isListen = false;
+ btnStartlisten.setEnabled(true);
+ btnStoplisten.setEnabled(false);
+ } else {
+ JOptionPane.showMessageDialog(null, ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ }
+ }
+
+ }
+
+ private LLong m_attachHandle;
+ private JTable realLoadTable;
+ private JScrollPane realScrollPane;
+
+ /**
+ * 智能事件监听
+ */
+ public void startRealLoad() {
+ m_attachHandle = GateModule.realLoadPic(0, VTOAnalyzerCallBack.getINSTANCE(realLoadTable, imagePanel));
+ if (m_attachHandle != null && m_attachHandle.longValue() != 0) {
+ btnStartrealload.setEnabled(false);
+ btnStoprealload.setEnabled(true);
+ }
+ }
+
+ /**
+ * 停止智能事件监听
+ */
+ public void stopRealLoad() {
+ if (m_attachHandle != null && m_attachHandle.longValue() != 0) {
+ GateModule.stopRealLoadPic(m_attachHandle);
+ m_attachHandle.setValue(0);
+ btnStartrealload.setEnabled(true);
+ btnStoprealload.setEnabled(false);
+ }
+
+ }
+
+}
diff --git a/src/main/java/com/netsdk/demo/frame/vto/VTOMessageCallBack.java b/src/main/java/com/netsdk/demo/frame/vto/VTOMessageCallBack.java
new file mode 100644
index 0000000..f315337
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/frame/vto/VTOMessageCallBack.java
@@ -0,0 +1,103 @@
+package com.netsdk.demo.frame.vto;
+
+import com.sun.jna.NativeLong;
+import com.sun.jna.Pointer;
+import com.netsdk.common.Res;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+
+import javax.swing.*;
+import javax.swing.table.DefaultTableModel;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description vto监听事件的回调函数, 建议写成单例模式
+ * @date 2020/8/15
+ */
+public class VTOMessageCallBack implements NetSDKLib.fMessCallBack {
+ private static VTOMessageCallBack INSTANCE;
+ private JTable table;
+ private CollectionFingerPrint print;
+
+ private VTOMessageCallBack(JTable table) {
+ this.table = table;
+ }
+
+ public static VTOMessageCallBack getINSTANCE(JTable table, CollectionFingerPrint print) {
+ if (INSTANCE == null) {
+ INSTANCE = new VTOMessageCallBack(table);
+ }
+ if (table != null) {
+ INSTANCE.table = table;
+ }
+ if (print != null) {
+ INSTANCE.print = print;
+ }
+ return INSTANCE;
+ }
+
+ @Override
+ public boolean invoke(int lCommand, NetSDKLib.LLong lLoginID, Pointer pStuEvent, int dwBufLen, String strDeviceIP, NativeLong nDevicePort, Pointer dwUser) {
+ //门禁事件
+ if (lCommand == NetSDKLib.NET_ALARM_ACCESS_CTL_EVENT) {
+ NetSDKLib.ALARM_ACCESS_CTL_EVENT_INFO info = new NetSDKLib.ALARM_ACCESS_CTL_EVENT_INFO();
+ ToolKits.GetPointerDataToStruct(pStuEvent, 0, info);
+ //更新列表
+ if (table != null) {
+ DefaultTableModel model = (DefaultTableModel) table.getModel();
+ model.addRow(new Object[]{new String(info.szUserID).trim(), new String(info.szCardNo).trim(), info.stuTime.toStringTime(), openDoorMethod(info.emOpenMethod), info.bStatus == 1 ? Res.string().getSucceed() : Res.string().getFailed()});
+
+ }
+ }
+ //信息事件
+ if (lCommand == NetSDKLib.NET_ALARM_FINGER_PRINT) {
+ if (print != null) {
+ if (lLoginID.longValue() == print.getLoginHandler()) {
+ NetSDKLib.ALARM_CAPTURE_FINGER_PRINT_INFO info = new NetSDKLib.ALARM_CAPTURE_FINGER_PRINT_INFO();
+ ToolKits.GetPointerDataToStruct(pStuEvent, 0, info);
+ print.setCollectionResult(info.bCollectResult == 1);
+ if (info.bCollectResult == 1) {
+ print.setPackageLen(info.nPacketLen * info.nPacketNum);
+ int length = info.nPacketLen * info.nPacketNum;
+ byte[] data = new byte[length];
+ info.szFingerPrintInfo.read(0, data, 0, length);
+ print.setPackageData(data);
+ //显示结果
+ print.setLabelResult(data);
+ }
+ print.stopListen();
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * 开门方式
+ *
+ * @param emOpenMethod
+ * @return
+ */
+ private String openDoorMethod(int emOpenMethod) {
+ String method;
+ switch (emOpenMethod) {
+ case NetSDKLib.NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_CARD:
+ method = Res.string().getCard();
+ break;
+ case NetSDKLib.NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FACE_RECOGNITION:
+ method = Res.string().getFaceRecognition();
+ break;
+ case NetSDKLib.NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT:
+ method = Res.string().getFingerPrint();
+ break;
+ case NetSDKLib.NET_ACCESS_DOOROPEN_METHOD.NET_ACCESS_DOOROPEN_METHOD_REMOTE:
+ method = Res.string().getRemoteOpenDoor();
+ break;
+ default:
+ method = Res.string().getUnKnow();
+ break;
+ }
+ return method;
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/module/AlarmListenModule.java b/src/main/java/com/netsdk/demo/module/AlarmListenModule.java
new file mode 100644
index 0000000..8f40366
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/AlarmListenModule.java
@@ -0,0 +1,75 @@
+package com.netsdk.demo.module;
+
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.NetSDKLib.fMessCallBack;
+
+/**
+ * \if ENGLISH_LANG
+ * alarm listen interface
+ * contains: start and stop alarm listen
+ * \else
+ * 报警接口实现
+ * 包含 :向设备订阅报警和停止订阅报警
+ * \endif
+ */
+public class AlarmListenModule {
+
+ private static boolean bListening = false;
+
+
+ /**
+ * \if ENGLISH_LANG
+ * start alarm listen
+ * \else
+ * 向设备订阅报警
+ * \endif
+ */
+ public static boolean startListen(fMessCallBack cbMessage) {
+
+ if (bListening) {
+// System.out.println("Had Subscribe Alarm.");
+ return true;
+ }
+
+ LoginModule.netsdk.CLIENT_SetDVRMessCallBack(cbMessage, null); // set alarm listen callback
+
+ if (!LoginModule.netsdk.CLIENT_StartListenEx(LoginModule.m_hLoginHandle)) {
+ System.err.printf("CLIENT_StartListenEx Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ } else {
+ System.out.println("CLIENT_StartListenEx success.");
+ }
+
+ bListening = true;
+ return true;
+ }
+
+ /**
+ * \if ENGLISH_LANG
+ * stop alarm listen
+ * \else
+ * 停止订阅报警
+ * \endif
+ */
+ public static boolean stopListen() {
+
+ if (!bListening) {
+ return true;
+ }
+
+ if (!LoginModule.netsdk.CLIENT_StopListen(LoginModule.m_hLoginHandle)) {
+ System.err.printf("CLIENT_StopListen Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ } else {
+ System.out.println("CLIENT_StopListen success.");
+ }
+
+ bListening = false;
+ return true;
+ }
+
+}
+
+
+
+
diff --git a/src/main/java/com/netsdk/demo/module/AttendanceModule.java b/src/main/java/com/netsdk/demo/module/AttendanceModule.java
new file mode 100644
index 0000000..0b2f0e4
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/AttendanceModule.java
@@ -0,0 +1,501 @@
+package com.netsdk.demo.module;
+
+import java.io.UnsupportedEncodingException;
+
+import com.sun.jna.Memory;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.NetSDKLib.*;
+
+/**
+ * \if ENGLISH_LANG
+ * Attendance Interface
+ * contains:smart subscribe、CRUD of user&&fingerprint and collection fingerprint
+ * \else
+ * 考勤机接口实现
+ * 包含: 智能订阅、考勤用户及信息的增删改查、信息采集
+ * \endif
+ */
+public class AttendanceModule {
+
+ public static final int TIME_OUT = 3000;
+ public static final int nMaxFingerPrintSize = 2048;
+ public static LLong m_hAttachHandle = new LLong(0);
+
+ /**
+ * 智能订阅
+ * @param callback 智能订阅回调函数
+ */
+ public static boolean realLoadPicture(fAnalyzerDataCallBack callback) {
+
+ int bNeedPicture = 0; // 不需要图片
+
+ m_hAttachHandle = LoginModule.netsdk.CLIENT_RealLoadPictureEx(LoginModule.m_hLoginHandle, -1,
+ NetSDKLib.EVENT_IVS_ALL, bNeedPicture, callback, null, null);
+
+ if(m_hAttachHandle.longValue() == 0) {
+ System.err.printf("CLIENT_RealLoadPictureEx Failed!" + ToolKits.getErrorCodePrint());
+ }
+
+ return m_hAttachHandle.longValue() != 0;
+ }
+
+ /**
+ * 停止智能订阅
+ */
+ public static void stopRealLoadPicture(){
+ if (m_hAttachHandle.longValue() == 0) {
+ return;
+ }
+
+ LoginModule.netsdk.CLIENT_StopLoadPic(m_hAttachHandle);
+ m_hAttachHandle.setValue(0);
+ }
+
+ /**
+ * 考勤新增加用户
+ * @param userId 用户ID
+ * @param userName 用户名
+ * @param cardNo 卡号
+ */
+ public static boolean addUser(String userId, String userName, String cardNo) {
+
+ /*
+ * 入参
+ */
+ NET_IN_ATTENDANCE_ADDUSER stuIn = new NET_IN_ATTENDANCE_ADDUSER();
+ stringToByteArray(userId, stuIn.stuUserInfo.szUserID);
+ stringToByteArray(userName, stuIn.stuUserInfo.szUserName);
+ stringToByteArray(cardNo, stuIn.stuUserInfo.szCardNo);
+
+ /*
+ * 出参
+ */
+ NET_OUT_ATTENDANCE_ADDUSER stuOut = new NET_OUT_ATTENDANCE_ADDUSER();
+
+ boolean bRet = LoginModule.netsdk.CLIENT_Attendance_AddUser(LoginModule.m_hLoginHandle, stuIn, stuOut, TIME_OUT);
+ if (!bRet) {
+ System.err.printf("CLIENT_Attendance_AddUser Failed!" + ToolKits.getErrorCodePrint());
+ }
+
+ return bRet;
+ }
+
+ /**
+ * 考勤删除用户
+ * @param userId 用户ID
+ */
+ public static boolean deleteUser(String userId) {
+
+ removeFingerByUserId(userId); // 先去删除信息
+
+ /*
+ * 入参
+ */
+ NET_IN_ATTENDANCE_DELUSER stuIn = new NET_IN_ATTENDANCE_DELUSER();
+ stringToByteArray(userId, stuIn.szUserID);
+
+ /*
+ * 出参
+ */
+ NET_OUT_ATTENDANCE_DELUSER stuOut = new NET_OUT_ATTENDANCE_DELUSER();
+
+ boolean bRet = LoginModule.netsdk.CLIENT_Attendance_DelUser(LoginModule.m_hLoginHandle, stuIn, stuOut, TIME_OUT);
+ if (!bRet) {
+ System.err.printf("CLIENT_Attendance_DelUser Failed!" + ToolKits.getErrorCodePrint());
+ }
+
+ return bRet;
+ }
+
+ /**
+ * 考勤修改用户
+ * @param userId 用户ID
+ * @param userName 用户名
+ * @param cardNo 卡号
+ */
+ public static boolean modifyUser(String userId, String userName, String cardNo) {
+
+ /*
+ * 入参
+ */
+ NET_IN_ATTENDANCE_ModifyUSER stuIn = new NET_IN_ATTENDANCE_ModifyUSER();
+ stringToByteArray(userId, stuIn.stuUserInfo.szUserID);
+ stringToByteArray(userName, stuIn.stuUserInfo.szUserName);
+ stringToByteArray(cardNo, stuIn.stuUserInfo.szCardNo);
+
+ /*
+ * 出参
+ */
+ NET_OUT_ATTENDANCE_ModifyUSER stuOut = new NET_OUT_ATTENDANCE_ModifyUSER();
+
+ boolean bRet = LoginModule.netsdk.CLIENT_Attendance_ModifyUser(LoginModule.m_hLoginHandle, stuIn, stuOut, TIME_OUT);
+ if (!bRet) {
+ System.err.printf("CLIENT_Attendance_ModifyUser Failed!" + ToolKits.getErrorCodePrint());
+ }
+
+ return bRet;
+ }
+
+ /**
+ * 考勤机 查找用户
+ * @param nOffset 查询偏移
+ * @param nPagedQueryCount 查询个数
+ * @return UserData[] 用户信息组
+ */
+ public static UserData[] findUser(int nOffset, int nPagedQueryCount) {
+
+ /*
+ * 入参
+ */
+ NET_IN_ATTENDANCE_FINDUSER stuIn = new NET_IN_ATTENDANCE_FINDUSER();
+ stuIn.nOffset = nOffset;
+ stuIn.nPagedQueryCount = nPagedQueryCount;
+
+ /*
+ * 出参
+ */
+ NET_OUT_ATTENDANCE_FINDUSER stuOut = new NET_OUT_ATTENDANCE_FINDUSER();
+ NET_ATTENDANCE_USERINFO[] userInfo = new NET_ATTENDANCE_USERINFO[nPagedQueryCount];
+ for(int i = 0; i < nPagedQueryCount; i++) {
+ userInfo[i] = new NET_ATTENDANCE_USERINFO();
+ }
+ stuOut.nMaxUserCount = nPagedQueryCount;
+ stuOut.stuUserInfo = new Memory(userInfo[0].size() * stuOut.nMaxUserCount);
+ stuOut.stuUserInfo.clear(userInfo[0].size() * stuOut.nMaxUserCount);
+ ToolKits.SetStructArrToPointerData(userInfo, stuOut.stuUserInfo); // 将数组内存拷贝到Pointer
+ stuOut.nMaxPhotoDataLength = 128;
+ stuOut.pbyPhotoData = new Memory(stuOut.nMaxPhotoDataLength); // 申请内存
+
+ boolean bRet = LoginModule.netsdk.CLIENT_Attendance_FindUser(LoginModule.m_hLoginHandle, stuIn, stuOut, TIME_OUT);
+ if (!bRet) {
+ System.err.printf("CLIENT_Attendance_FindUser Failed!" + ToolKits.getErrorCodePrint());
+ return null;
+ }
+
+ ToolKits.GetPointerDataToStructArr(stuOut.stuUserInfo, userInfo); // 将 Pointer 的内容 输出到 数组
+
+ UserData[] userData = new UserData[stuOut.nRetUserCount];
+ for(int i = 0; i < stuOut.nRetUserCount; i++) {
+ userData[i] = new UserData();
+ try {
+ userData[i].userId = new String(userInfo[i].szUserID, "GBK").trim();
+ userData[i].userName = new String(userInfo[i].szUserName, "GBK").trim();
+ userData[i].cardNo = new String(userInfo[i].szCardNo, "GBK").trim();
+ }catch(Exception e) { // 如果转化失败就采用原始数据
+ userData[i].userId = new String(userInfo[i].szUserID).trim();
+ userData[i].userName = new String(userInfo[i].szUserName).trim();
+ userData[i].cardNo = new String(userInfo[i].szCardNo).trim();
+ }
+
+// getFingerByUserId(userData[i].userId, userData[i]); // 获取信息信息
+ }
+
+ UserData.nTotalUser = stuOut.nTotalUser;
+
+ return userData;
+ }
+
+ /**
+ * 考勤获取用户信息
+ * @param userId 用户ID
+ * @return UserData 用户信息
+ */
+ public static UserData getUser(String userId) {
+
+ /*
+ * 入参
+ */
+ NET_IN_ATTENDANCE_GetUSER stuIn = new NET_IN_ATTENDANCE_GetUSER();
+ stringToByteArray(userId, stuIn.szUserID);
+
+ /*
+ * 出参
+ */
+ NET_OUT_ATTENDANCE_GetUSER stuOut = new NET_OUT_ATTENDANCE_GetUSER();
+ stuOut.nMaxLength = 128;
+ stuOut.pbyPhotoData = new Memory(stuOut.nMaxLength); // 申请内存
+ stuOut.pbyPhotoData.clear(stuOut.nMaxLength);
+
+ boolean bRet = LoginModule.netsdk.CLIENT_Attendance_GetUser(LoginModule.m_hLoginHandle, stuIn, stuOut, TIME_OUT);
+ if (!bRet) {
+ System.err.printf("CLIENT_Attendance_GetUser Failed!" + ToolKits.getErrorCodePrint());
+ return null;
+ }
+
+ UserData userData = new UserData();
+ try {
+ userData.userId = new String(stuOut.stuUserInfo.szUserID, "GBK").trim();
+ userData.userName = new String(stuOut.stuUserInfo.szUserName, "GBK").trim();
+ userData.cardNo = new String(stuOut.stuUserInfo.szCardNo, "GBK").trim();
+ }catch(Exception e) { // 如果转化失败就采用原始数据
+ userData.userId = new String(stuOut.stuUserInfo.szUserID).trim();
+ userData.userName = new String(stuOut.stuUserInfo.szUserName).trim();
+ userData.cardNo = new String(stuOut.stuUserInfo.szCardNo).trim();
+ }
+
+// getFingerByUserId(userId, userData); // 获取信息信息
+
+ return userData;
+ }
+
+ /**
+ * 考勤机 通过用户ID插入信息数据
+ * @param userId 用户ID
+ * @param szFingerPrintInfo 信息信息
+ */
+ public static boolean insertFingerByUserId(String userId, byte[] szFingerPrintInfo) {
+
+ /*
+ * 入参
+ */
+ NET_IN_FINGERPRINT_INSERT_BY_USERID stuIn = new NET_IN_FINGERPRINT_INSERT_BY_USERID();
+ stringToByteArray(userId, stuIn.szUserID);
+ stuIn.nPacketCount = 1;
+ stuIn.nSinglePacketLen = szFingerPrintInfo.length;
+ stuIn.szFingerPrintInfo = new Memory(stuIn.nPacketCount * stuIn.nSinglePacketLen); // 申请内存
+ stuIn.szFingerPrintInfo.clear(stuIn.nPacketCount * stuIn.nSinglePacketLen);
+ stuIn.szFingerPrintInfo.write(0, szFingerPrintInfo, 0, szFingerPrintInfo.length);
+
+ /*
+ * 出参
+ */
+ NET_OUT_FINGERPRINT_INSERT_BY_USERID stuOut = new NET_OUT_FINGERPRINT_INSERT_BY_USERID();
+
+ boolean bRet = LoginModule.netsdk.CLIENT_Attendance_InsertFingerByUserID(LoginModule.m_hLoginHandle, stuIn, stuOut, TIME_OUT);
+ if (!bRet) {
+ System.err.printf("CLIENT_Attendance_InsertFingerByUserID Failed!" + ToolKits.getErrorCodePrint());
+ }
+
+ return bRet;
+ }
+
+ /**
+ * 考勤机 删除单个用户下所有信息数据
+ * @param userId 用户ID
+ */
+ public static boolean removeFingerByUserId(String userId) {
+
+ /*
+ * 入参
+ */
+ NET_CTRL_IN_FINGERPRINT_REMOVE_BY_USERID stuIn = new NET_CTRL_IN_FINGERPRINT_REMOVE_BY_USERID();
+ stringToByteArray(userId, stuIn.szUserID);
+
+ /*
+ * 出参
+ */
+ NET_CTRL_OUT_FINGERPRINT_REMOVE_BY_USERID stuOut = new NET_CTRL_OUT_FINGERPRINT_REMOVE_BY_USERID();
+
+ boolean bRet = LoginModule.netsdk.CLIENT_Attendance_RemoveFingerByUserID(LoginModule.m_hLoginHandle, stuIn, stuOut, TIME_OUT);
+ if (!bRet) {
+ System.err.printf("CLIENT_Attendance_RemoveFingerByUserID Failed!" + ToolKits.getErrorCodePrint());
+ }
+
+ return bRet;
+ }
+
+ /**
+ * 考勤机 通过信息ID删除信息数据
+ * @param nFingerPrintID 信息ID
+ */
+ public static boolean removeFingerRecord(int nFingerPrintID) {
+
+ /*
+ * 入参
+ */
+ NET_CTRL_IN_FINGERPRINT_REMOVE stuIn = new NET_CTRL_IN_FINGERPRINT_REMOVE();
+ stuIn.nFingerPrintID = nFingerPrintID;
+
+ /*
+ * 出参
+ */
+ NET_CTRL_OUT_FINGERPRINT_REMOVE stuOut = new NET_CTRL_OUT_FINGERPRINT_REMOVE();
+
+ boolean bRet = LoginModule.netsdk.CLIENT_Attendance_RemoveFingerRecord(LoginModule.m_hLoginHandle, stuIn, stuOut, TIME_OUT);
+ if (!bRet) {
+ System.err.printf("CLIENT_Attendance_RemoveFingerRecord Failed!" + ToolKits.getErrorCodePrint());
+ }
+
+ return bRet;
+ }
+
+ /**
+ * 考勤机 通过信息ID获取信息数据
+ * @param nFingerPrintID 信息ID
+ * @return userData 用户数据
+ */
+ public static UserData getFingerRecord(int nFingerPrintID) {
+
+ /*
+ * 入参
+ */
+ NET_CTRL_IN_FINGERPRINT_GET stuIn = new NET_CTRL_IN_FINGERPRINT_GET();
+ stuIn.nFingerPrintID = nFingerPrintID;
+
+ /*
+ * 出参
+ */
+ NET_CTRL_OUT_FINGERPRINT_GET stuOut = new NET_CTRL_OUT_FINGERPRINT_GET();
+ stuOut.nMaxFingerDataLength = nMaxFingerPrintSize;
+ stuOut.szFingerPrintInfo = new Memory(stuOut.nMaxFingerDataLength); // 申请内存
+ stuOut.szFingerPrintInfo.clear(stuOut.nMaxFingerDataLength);
+
+ boolean bRet = LoginModule.netsdk.CLIENT_Attendance_GetFingerRecord(LoginModule.m_hLoginHandle, stuIn, stuOut, TIME_OUT);
+ if (!bRet) {
+ System.err.printf("CLIENT_Attendance_GetFingerRecord Failed!" + ToolKits.getErrorCodePrint());
+ return null;
+ }
+
+ if (stuOut.nRetLength == 0) {
+ System.err.println("GetFingerRecord Failed nRetLength == 0!");
+ }
+
+ UserData userData = new UserData();
+ userData.userId = new String(stuOut.szUserID).trim();
+ userData.nFingerPrintIDs = new int[1];
+ userData.nFingerPrintIDs[0] = nFingerPrintID;
+ userData.szFingerPrintInfo = new byte[1][stuOut.nRetLength];
+ stuOut.szFingerPrintInfo.read(0, userData.szFingerPrintInfo[0], 0, stuOut.nRetLength);
+
+ return userData;
+ }
+
+ /**
+ * 考勤机 通过用户ID查找该用户下的所有信息数据
+ * @param userId 用户ID
+ * @param userData 用户数据
+ */
+ public static boolean getFingerByUserId(String userId, UserData userData) {
+
+ /*
+ * 入参
+ */
+ NET_IN_FINGERPRINT_GETBYUSER stuIn = new NET_IN_FINGERPRINT_GETBYUSER();
+ stringToByteArray(userId, stuIn.szUserID);
+
+ /*
+ * 出参
+ */
+ NET_OUT_FINGERPRINT_GETBYUSER stuOut = new NET_OUT_FINGERPRINT_GETBYUSER();
+ stuOut.nMaxFingerDataLength = NetSDKLib.NET_MAX_FINGER_PRINT * nMaxFingerPrintSize;
+ stuOut.pbyFingerData = new Memory(stuOut.nMaxFingerDataLength); // 申请内存
+ stuOut.pbyFingerData.clear(stuOut.nMaxFingerDataLength);
+
+ boolean bRet = LoginModule.netsdk.CLIENT_Attendance_GetFingerByUserID(LoginModule.m_hLoginHandle, stuIn, stuOut, TIME_OUT);
+ if (!bRet) {
+ System.err.printf("CLIENT_Attendance_GetFingerByUserID Failed!" + ToolKits.getErrorCodePrint());
+ }else {
+ userData.nFingerPrintIDs = new int[stuOut.nRetFingerPrintCount];
+ userData.szFingerPrintInfo = new byte[stuOut.nRetFingerPrintCount][stuOut.nSinglePacketLength];
+ int offset = 0;
+ for (int i = 0; i < stuOut.nRetFingerPrintCount; ++i) {
+ userData.nFingerPrintIDs[i] = stuOut.nFingerPrintIDs[i];
+ stuOut.pbyFingerData.read(offset, userData.szFingerPrintInfo[i], 0, stuOut.nSinglePacketLength);
+ offset += stuOut.nSinglePacketLength;
+ }
+ }
+
+ return bRet;
+ }
+
+ /**
+ * 信息采集
+ * @param nChannelID 门禁序号
+ * @param szReaderID 读卡器ID
+ */
+ public static boolean collectionFinger(int nChannelID, String szReaderID) {
+ /*
+ * 入参
+ */
+ NET_CTRL_CAPTURE_FINGER_PRINT stuCollection = new NET_CTRL_CAPTURE_FINGER_PRINT();
+ stuCollection.nChannelID = nChannelID;
+ stringToByteArray(szReaderID, stuCollection.szReaderID);
+
+ stuCollection.write();
+ boolean bRet = LoginModule.netsdk.CLIENT_ControlDeviceEx(LoginModule.m_hLoginHandle, NetSDKLib.CtrlType.CTRLTYPE_CTRL_CAPTURE_FINGER_PRINT, stuCollection.getPointer(), null, 5000);
+ if (!bRet) {
+ System.err.printf("CLIENT_ControlDeviceEx CAPTURE_FINGER_PRINT Failed!" + ToolKits.getErrorCodePrint());
+ }
+ return bRet;
+ }
+
+ /**
+ * 字符串转字符数组
+ * @param src 源字符串
+ * @param dst 目标字符数组
+ */
+ public static void stringToByteArray(String src, byte[] dst) {
+
+ if (src == null || src.isEmpty()) {
+ return;
+ }
+
+ for(int i = 0; i < dst.length; i++) {
+ dst[i] = 0;
+ }
+
+ byte []szSrc;
+
+ try {
+ szSrc = src.getBytes("GBK");
+ } catch (UnsupportedEncodingException e) {
+ szSrc = src.getBytes();
+ }
+
+ if (szSrc != null) {
+ int len = szSrc.length >= dst.length ? dst.length-1:szSrc.length;
+ System.arraycopy(szSrc, 0, dst, 0, len);
+ }
+ }
+
+ /**
+ * 用户信息
+ * */
+ public static class UserData {
+ public static int nTotalUser; // 用户总数
+
+ public String userId; // 用户ID
+ public String userName; // 用户名
+ public String cardNo; // 卡号
+ public int[] nFingerPrintIDs; // 信息ID数组
+ public byte[][] szFingerPrintInfo; // 信息数据数组
+ }
+
+ /**
+ * 门禁事件信息
+ * */
+ public static class AccessEventInfo {
+ public String userId; // 用户ID
+ public String cardNo; // 卡号
+ public String eventTime; // 事件发生时间
+ public int openDoorMethod; // 开门方式
+ }
+
+ /**
+ * 操作类型
+ * */
+ public enum OPERATE_TYPE {
+ UNKNOWN, // 未知
+ SEARCH_USER, // 搜索用户(第一页)
+ PRE_SEARCH_USER, // 搜索用户(上一页)
+ NEXT_SEARCH_USER, // 搜索用户(下一页)
+ SEARCH_USER_BY_USERID, // 通过用户ID搜索用户
+ ADD_USER, // 添加用户
+ DELETE_USER, // 删除用户
+ MODIFIY_USER, // 修改用户
+ FINGERPRINT_OPEARTE_BY_USERID, // 通过用户ID操作信息
+ FINGERPRINT_OPEARTE_BY_ID, // 通过信息ID操作信息
+ SEARCH_FINGERPRINT_BY_USERID, // 通过用户ID搜索信息
+ SEARCH_FINGERPRINT_BY_ID, // 通过信息ID搜索信息
+ ADD_FINGERPRINT, // 添加信息
+ DELETE_FINGERPRINT_BY_USERID, // 通过用户ID删除信息
+ DELETE_FINGERPRINT_BY_ID // 通过信息ID删除信息
+ };
+}
+
+
+
+
+
diff --git a/src/main/java/com/netsdk/demo/module/AutoRegisterModule.java b/src/main/java/com/netsdk/demo/module/AutoRegisterModule.java
new file mode 100644
index 0000000..cb857b1
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/AutoRegisterModule.java
@@ -0,0 +1,346 @@
+package com.netsdk.demo.module;
+
+import java.awt.Panel;
+
+import com.netsdk.lib.NetSDKLib.CFG_DVRIP_INFO;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY;
+import com.netsdk.lib.NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY;
+import com.netsdk.lib.NetSDKLib.fServiceCallBack;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+import com.sun.jna.ptr.IntByReference;
+
+public class AutoRegisterModule {
+ // 监听服务句柄
+ public static LLong mServerHandler = new LLong(0);
+
+ // 设备信息
+ public static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
+
+ // 语音对讲句柄
+ public static LLong m_hTalkHandle = new LLong(0);
+ private static boolean m_bRecordStatus = false;
+
+ /**
+ * 开启服务
+ * @param address 本地IP地址
+ * @param port 本地端口, 可以任意
+ * @param callback 回调函数
+ */
+ public static boolean startServer(String address, int port, fServiceCallBack callback) {
+
+ mServerHandler = LoginModule.netsdk.CLIENT_ListenServer(address, port, 1000, callback, null);
+ if (0 == mServerHandler.longValue()) {
+ System.err.println("Failed to start server." + ToolKits.getErrorCodePrint());
+ } else {
+ System.out.printf("Start server, [Server address %s][Server port %d]\n", address, port);
+ }
+ return mServerHandler.longValue() != 0;
+ }
+
+ /**
+ * 结束服务
+ */
+ public static boolean stopServer() {
+ boolean bRet = false;
+
+ if(mServerHandler.longValue() != 0) {
+ bRet = LoginModule.netsdk.CLIENT_StopListenServer(mServerHandler);
+ mServerHandler.setValue(0);
+ System.out.println("Stop server!");
+ }
+
+ return bRet;
+ }
+
+ /**
+ * 登录设备(主动注册登陆接口)
+ * @param m_strIp 设备IP
+ * @param m_nPort 设备端口号
+ * @param m_strUser 设备用户名
+ * @param m_strPassword 设备密码
+ * @param deviceId 设备ID
+ * @return
+ */
+ public static LLong login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword, String deviceIds) {
+ Pointer deviceId = ToolKits.GetGBKStringToPointer(deviceIds);
+ //IntByReference nError = new IntByReference(0);
+ //入参
+ NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstInParam=new NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY();
+ pstInParam.nPort=m_nPort;
+ pstInParam.szIP=m_strIp.getBytes();
+ pstInParam.szPassword=m_strPassword.getBytes();
+ pstInParam.szUserName=m_strUser.getBytes();
+ pstInParam.emSpecCap = 2;// 主动注册方式
+ pstInParam.pCapParam=deviceId;
+ //出参
+ NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam=new NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY();
+ pstOutParam.stuDeviceInfo=m_stDeviceInfo;
+ /*LLong m_hLoginHandle = LoginModule.netsdk.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser, m_strPassword,
+ tcpSpecCap, deviceId, m_stDeviceInfo, nError);*/
+ LLong m_hLoginHandle=LoginModule.netsdk.CLIENT_LoginWithHighLevelSecurity(pstInParam, pstOutParam);
+ return m_hLoginHandle;
+ }
+
+ /**
+ * 登出设备
+ * @param m_hLoginHandle 登陆句柄
+ * @return
+ */
+ public static boolean logout(LLong m_hLoginHandle) {
+ boolean bRet = false;
+ if(m_hLoginHandle.longValue() != 0) {
+ bRet = LoginModule.netsdk.CLIENT_Logout(m_hLoginHandle);
+ m_hLoginHandle.setValue(0);
+ }
+
+ return bRet;
+ }
+
+ /**
+ * 开始预览
+ * @param m_hLoginHandle 登陆句柄
+ * @param channel 通道号
+ * @param stream 码流类型
+ * @param realPlayWindow 拉流窗口
+ * @return
+ */
+ public static LLong startRealPlay(LLong m_hLoginHandle, int channel, int stream, Panel realPlayWindow) {
+ LLong m_hPlayHandle = LoginModule.netsdk.CLIENT_RealPlayEx(m_hLoginHandle, channel, Native.getComponentPointer(realPlayWindow), stream);
+
+ if(m_hPlayHandle.longValue() == 0) {
+ System.err.println("Failed to start realplay." + ToolKits.getErrorCodePrint());
+ } else {
+ System.out.println("Success to start realplay");
+ }
+
+ return m_hPlayHandle;
+ }
+
+ /**
+ * 停止预览
+ * @param m_hPlayHandle 实时预览句柄
+ * @return
+ */
+ public static boolean stopRealPlay(LLong m_hPlayHandle) {
+ boolean bRet = false;
+ if(m_hPlayHandle.longValue() != 0) {
+ bRet = LoginModule.netsdk.CLIENT_StopRealPlayEx(m_hPlayHandle);
+ m_hPlayHandle.setValue(0);
+ }
+
+ return bRet;
+ }
+
+ /**
+ * 远程抓图
+ * @param m_hLoginHandle 登陆句柄
+ * @param chn 通道号
+ * @return
+ */
+ public static boolean snapPicture(LLong m_hLoginHandle, int chn) {
+ // 发送抓图命令给前端设备,抓图的信息
+ NetSDKLib.SNAP_PARAMS msg = new NetSDKLib.SNAP_PARAMS();
+ msg.Channel = chn; // 抓图通道
+ msg.mode = 0; // 抓图模式
+ msg.Quality = 3; // 画质
+ msg.InterSnap = 0; // 定时抓图时间间隔
+ msg.CmdSerial = 0; // 请求序列号,有效值范围 0~65535,超过范围会被截断为
+
+ IntByReference reserved = new IntByReference(0);
+
+ if (!LoginModule.netsdk.CLIENT_SnapPictureEx(m_hLoginHandle, msg, reserved)) {
+ System.err.printf("SnapPictureEx Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ } else {
+ System.out.println("SnapPictureEx success");
+ }
+ return true;
+ }
+
+ /**
+ *设置抓图回调函数, 图片主要在m_SnapReceiveCB中返回
+ * @param m_SnapReceiveCB
+ */
+ public static void setSnapRevCallBack(NetSDKLib.fSnapRev m_SnapReceiveCB){
+ LoginModule.netsdk.CLIENT_SetSnapRevCallBack(m_SnapReceiveCB, null);
+ }
+
+ /**
+ * 获取网络协议
+ * @param m_hLoginHandle 登录句柄
+ * @return
+ */
+ public static CFG_DVRIP_INFO getDVRIPConfig(LLong m_hLoginHandle) {
+ CFG_DVRIP_INFO msg = new CFG_DVRIP_INFO();
+
+ if(!ToolKits.GetDevConfig(m_hLoginHandle, -1, NetSDKLib.CFG_CMD_DVRIP, msg)) {
+ return null;
+ }
+
+ return msg;
+ }
+
+ /**
+ * 网络协议配置
+ * @param m_hLoginHandle 登陆句柄
+ * @param enable 使能
+ * @param address 服务器地址
+ * @param nPort 服务器端口号
+ * @param deviceId 设备ID
+ * @param info 获取到的网络协议配置
+ * @return
+ */
+ public static boolean setDVRIPConfig(LLong m_hLoginHandle, boolean enable, String address, int nPort, byte[] deviceId, CFG_DVRIP_INFO info) {
+ CFG_DVRIP_INFO msg = info;
+ // 主动注册配置个数
+ msg.nRegistersNum = 1;
+
+ // 主动注册使能
+ msg.stuRegisters[0].bEnable = enable? 1:0;
+
+ // 服务器个数
+ msg.stuRegisters[0].nServersNum = 1;
+
+ // 服务器地址
+ ToolKits.StringToByteArray(address, msg.stuRegisters[0].stuServers[0].szAddress);
+
+ // 服务器端口号
+ msg.stuRegisters[0].stuServers[0].nPort = nPort;
+
+ // 设备ID
+ ToolKits.ByteArrayToByteArray(deviceId, msg.stuRegisters[0].szDeviceID);
+
+ return ToolKits.SetDevConfig(m_hLoginHandle, -1, NetSDKLib.CFG_CMD_DVRIP, msg);
+ }
+
+ /**
+ * \if ENGLISH_LANG
+ * Start Talk
+ * \else
+ * 开始通话
+ * \endif
+ */
+ public static boolean startTalk(LLong m_hLoginHandle) {
+
+ // 设置语音对讲编码格式
+ NetSDKLib.NETDEV_TALKDECODE_INFO talkEncode = new NetSDKLib.NETDEV_TALKDECODE_INFO();
+ talkEncode.encodeType = NetSDKLib.NET_TALK_CODING_TYPE.NET_TALK_PCM;
+ talkEncode.dwSampleRate = 8000;
+ talkEncode.nAudioBit = 16;
+ talkEncode.nPacketPeriod = 25;
+ talkEncode.write();
+ if(LoginModule.netsdk.CLIENT_SetDeviceMode(m_hLoginHandle, NetSDKLib.EM_USEDEV_MODE.NET_TALK_ENCODE_TYPE, talkEncode.getPointer())) {
+ System.out.println("Set Talk Encode Type Succeed!");
+ } else {
+ System.err.println("Set Talk Encode Type Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+
+ // 设置对讲模式
+ NetSDKLib.NET_SPEAK_PARAM speak = new NetSDKLib.NET_SPEAK_PARAM();
+ speak.nMode = 0;
+ speak.bEnableWait = false;
+ speak.nSpeakerChannel = 0;
+ speak.write();
+
+ if (LoginModule.netsdk.CLIENT_SetDeviceMode(m_hLoginHandle, NetSDKLib.EM_USEDEV_MODE.NET_TALK_SPEAK_PARAM, speak.getPointer())) {
+ System.out.println("Set Talk Speak Mode Succeed!");
+ } else {
+ System.err.println("Set Talk Speak Mode Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+
+ // 设置语音对讲是否为转发模式
+ NetSDKLib.NET_TALK_TRANSFER_PARAM talkTransfer = new NetSDKLib.NET_TALK_TRANSFER_PARAM();
+ talkTransfer.bTransfer = 0; // 是否开启语音对讲转发模式, 1-true; 0-false
+ talkTransfer.write();
+ if(LoginModule.netsdk.CLIENT_SetDeviceMode(m_hLoginHandle, NetSDKLib.EM_USEDEV_MODE.NET_TALK_TRANSFER_MODE, talkTransfer.getPointer())) {
+ System.out.println("Set Talk Transfer Mode Succeed!");
+ } else {
+ System.err.println("Set Talk Transfer Mode Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+
+ m_hTalkHandle = LoginModule.netsdk.CLIENT_StartTalkEx(m_hLoginHandle, AudioDataCB.getInstance(), null);
+
+ if(m_hTalkHandle.longValue() == 0) {
+ System.err.println("Start Talk Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ } else {
+ System.out.println("Start Talk Success");
+ if(LoginModule.netsdk.CLIENT_RecordStart()){
+ System.out.println("Start Record Success");
+ m_bRecordStatus = true;
+ } else {
+ System.err.println("Start Local Record Failed!" + ToolKits.getErrorCodePrint());
+ stopTalk(m_hTalkHandle);
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * \if ENGLISH_LANG
+ * Stop Talk
+ * \else
+ * 结束通话
+ * \endif
+ */
+ public static void stopTalk(LLong m_hTalkHandle) {
+ if(m_hTalkHandle.longValue() == 0) {
+ return;
+ }
+
+ if (m_bRecordStatus){
+ LoginModule.netsdk.CLIENT_RecordStop();
+ m_bRecordStatus = false;
+ }
+
+ if(!LoginModule.netsdk.CLIENT_StopTalkEx(m_hTalkHandle)) {
+ System.err.println("Stop Talk Failed!" + ToolKits.getErrorCodePrint());
+ } else {
+ m_hTalkHandle.setValue(0);
+ }
+ }
+
+ /**
+ * \if ENGLISH_LANG
+ * Audio Data Callback
+ * \else
+ * 语音对讲的数据回调
+ * \endif
+ */
+ private static class AudioDataCB implements NetSDKLib.pfAudioDataCallBack {
+
+ private AudioDataCB() {}
+ private static AudioDataCB audioCallBack = new AudioDataCB();
+
+ public static AudioDataCB getInstance() {
+ return audioCallBack;
+ }
+
+ public void invoke(LLong lTalkHandle, Pointer pDataBuf, int dwBufSize, byte byAudioFlag, Pointer dwUser){
+
+ if(lTalkHandle.longValue() != m_hTalkHandle.longValue()) {
+ return;
+ }
+
+ if (byAudioFlag == 0) { // 将收到的本地PC端检测到的声卡数据发送给设备端
+
+ LLong lSendSize = LoginModule.netsdk.CLIENT_TalkSendData(m_hTalkHandle, pDataBuf, dwBufSize);
+ if(lSendSize.longValue() != (long)dwBufSize) {
+ System.err.println("send incomplete" + lSendSize.longValue() + ":" + dwBufSize);
+ }
+ }else if (byAudioFlag == 1) { // 将收到的设备端发送过来的语音数据传给SDK解码播放
+ LoginModule.netsdk.CLIENT_AudioDecEx(m_hTalkHandle, pDataBuf, dwBufSize);
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/module/CapturePictureModule.java b/src/main/java/com/netsdk/demo/module/CapturePictureModule.java
new file mode 100644
index 0000000..a113a82
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/CapturePictureModule.java
@@ -0,0 +1,107 @@
+package com.netsdk.demo.module;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.ToolKits;
+
+import com.sun.jna.ptr.IntByReference;
+
+/**
+ * \if ENGLISH_LANG
+ * Capture Picture Interface
+ * contains:local、remote、timer and stop capture picture
+ * \else
+ * 抓图接口实现
+ * 包含: 本地、远程、定时和停止抓图
+ * \endif
+ */
+public class CapturePictureModule {
+
+ /**
+ * \if ENGLISH_LANG
+ * Local Capture Picture
+ * \else
+ * 本地抓图
+ * \endif
+ */
+ public static boolean localCapturePicture(LLong hPlayHandle, String picFileName) {
+
+ if (!LoginModule.netsdk.CLIENT_CapturePictureEx(hPlayHandle, picFileName, NetSDKLib.NET_CAPTURE_FORMATS.NET_CAPTURE_JPEG)) {
+ System.err.printf("CLIENT_CapturePicture Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ } else {
+ System.out.println("CLIENT_CapturePicture success");
+ }
+ return true;
+ }
+
+ /**
+ * \if ENGLISH_LANG
+ * Remote Capture Picture
+ * \else
+ * 远程抓图
+ * \endif
+ */
+ public static boolean remoteCapturePicture(int chn) {
+ return snapPicture(chn, 0, 0);
+ }
+
+ /**
+ * \if ENGLISH_LANG
+ * Timer Capture Picture
+ * \else
+ * 定时抓图
+ * \endif
+ */
+ public static boolean timerCapturePicture(int chn) {
+ return snapPicture(chn, 1, 2);
+ }
+
+ /**
+ * \if ENGLISH_LANG
+ * Stop Timer Capture Picture
+ * \else
+ * 停止定时抓图
+ * \endif
+ */
+ public static boolean stopCapturePicture(int chn) {
+ return snapPicture(chn, -1, 0);
+ }
+
+ /**
+ * \if ENGLISH_LANG
+ * Capture Picture (except local capture picture, others all call this interface)
+ * \else
+ * 抓图 (除本地抓图外, 其他全部调用此接口)
+ * \endif
+ */
+ private static boolean snapPicture(int chn, int mode, int interval) {
+ // send caputre picture command to device
+ NetSDKLib.SNAP_PARAMS stuSnapParams = new NetSDKLib.SNAP_PARAMS();
+ stuSnapParams.Channel = chn; // channel
+ stuSnapParams.mode = mode; // capture picture mode
+ stuSnapParams.Quality = 3; // picture quality
+ stuSnapParams.InterSnap = interval; // timer capture picture time interval
+ stuSnapParams.CmdSerial = 0; // request serial
+
+ IntByReference reserved = new IntByReference(0);
+ if (!LoginModule.netsdk.CLIENT_SnapPictureEx(LoginModule.m_hLoginHandle, stuSnapParams, reserved)) {
+ System.err.printf("CLIENT_SnapPictureEx Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ } else {
+ System.out.println("CLIENT_SnapPictureEx success");
+ }
+ return true;
+ }
+
+ /**
+ * \if ENGLISH_LANG
+ * Set Capture Picture Callback
+ * \else
+ * 设置抓图回调函数
+ * \endif
+ */
+ public static void setSnapRevCallBack(NetSDKLib.fSnapRev cbSnapReceive){
+ LoginModule.netsdk.CLIENT_SetSnapRevCallBack(cbSnapReceive, null);
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/module/DeviceControlModule.java b/src/main/java/com/netsdk/demo/module/DeviceControlModule.java
new file mode 100644
index 0000000..0ce60c8
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/DeviceControlModule.java
@@ -0,0 +1,88 @@
+package com.netsdk.demo.module;
+
+import java.text.SimpleDateFormat;
+
+import com.netsdk.lib.NetSDKLib.CtrlType;
+import com.netsdk.lib.NetSDKLib.NET_TIME;
+import com.netsdk.lib.ToolKits;
+
+
+/**
+ * \if ENGLISH_LANG
+ * Device Control Interface
+ * contains:reboot device、setup device time and query device time
+ * \else
+ * 设备控制接口实现
+ * 包含: 重启、时间同步、获取时间功能
+ * \endif
+ */
+public class DeviceControlModule {
+
+ /**
+ * \if ENGLISH_LANG
+ * Reboot Device
+ * \else
+ * 重启设备
+ * \endif
+ */
+ public static boolean reboot() {
+
+ if (!LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle, CtrlType.CTRLTYPE_CTRL_REBOOT, null, 3000)) {
+ System.err.println("CLIENT_ControlDevice Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * \if ENGLISH_LANG
+ * Setup Device Time
+ * \else
+ * 时间同步
+ * \endif
+ */
+ public static boolean setTime(String date) {
+ NET_TIME deviceTime = new NET_TIME();
+ if (date == null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ date = dateFormat.format(new java.util.Date());
+ }
+
+ String[] dateTime = date.split(" ");
+ String[] arrDate = dateTime[0].split("-");
+ String[] arrTime = dateTime[1].split(":");
+ deviceTime.dwYear = Integer.parseInt(arrDate[0]);
+ deviceTime.dwMonth = Integer.parseInt(arrDate[1]);
+ deviceTime.dwDay = Integer.parseInt(arrDate[2]);
+ deviceTime.dwHour = Integer.parseInt(arrTime[0]);
+ deviceTime.dwMinute = Integer.parseInt(arrTime[1]);
+ deviceTime.dwSecond = Integer.parseInt(arrTime[2]);
+
+ if (!LoginModule.netsdk.CLIENT_SetupDeviceTime(LoginModule.m_hLoginHandle, deviceTime)) {
+ System.err.println("CLIENT_SetupDeviceTime Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * \if ENGLISH_LANG
+ * Get Device Current Time
+ * \else
+ * 获取设备当前时间
+ * \endif
+ */
+ public static String getTime() {
+ NET_TIME deviceTime = new NET_TIME();
+
+ if (!LoginModule.netsdk.CLIENT_QueryDeviceTime(LoginModule.m_hLoginHandle, deviceTime, 3000)) {
+ System.err.println("CLIENT_QueryDeviceTime Failed!" + ToolKits.getErrorCodePrint());
+ return null;
+ }
+
+ String date = deviceTime.toStringTime();
+ date = date.replace("/", "-");
+
+ return date;
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/module/DeviceInitModule.java b/src/main/java/com/netsdk/demo/module/DeviceInitModule.java
new file mode 100644
index 0000000..1d09bb3
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/DeviceInitModule.java
@@ -0,0 +1,54 @@
+package com.netsdk.demo.module;
+
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.NetSDKLib.*;
+
+/**
+ * 设备初始化接口实现
+ */
+public class DeviceInitModule {
+ /*
+ * 设备初始化
+ */
+ public static boolean initDevAccount(String localIp,String szMac, String password, String cellPhone_mail, byte byPwdResetWay) {
+ /**
+ * 入参
+ */
+ NET_IN_INIT_DEVICE_ACCOUNT inInit = new NET_IN_INIT_DEVICE_ACCOUNT();
+ // mac地址
+ System.arraycopy(szMac.getBytes(), 0, inInit.szMac, 0, szMac.getBytes().length);
+
+ // 用户名
+ String username = "admin";
+ System.arraycopy(username.getBytes(), 0, inInit.szUserName, 0, username.getBytes().length);
+
+ // 密码,必须字母与数字结合,8位以上,否则设备不识别
+ if(password.getBytes().length <= 127) {
+ System.arraycopy(password.getBytes(), 0, inInit.szPwd, 0, password.getBytes().length);
+ } else if(password.getBytes().length > 127){
+ System.arraycopy(password.getBytes(), 0, inInit.szPwd, 0, 127);
+ }
+
+ // 设备支持的密码重置方式
+ inInit.byPwdResetWay = byPwdResetWay;
+
+ // bit0-支持预置手机号 bit1-支持预置邮箱
+ if((byPwdResetWay >> 1 & 0x01) == 0) { // 手机号
+ System.arraycopy(cellPhone_mail.getBytes(), 0, inInit.szCellPhone, 0, cellPhone_mail.getBytes().length);
+ } else if((byPwdResetWay >> 1 & 0x01) == 1) { // 邮箱
+ System.arraycopy(cellPhone_mail.getBytes(), 0, inInit.szMail, 0, cellPhone_mail.getBytes().length);
+ }
+
+ /**
+ * 出参
+ */
+ NET_OUT_INIT_DEVICE_ACCOUNT outInit = new NET_OUT_INIT_DEVICE_ACCOUNT();
+
+ if(!LoginModule.netsdk.CLIENT_InitDevAccount(inInit, outInit, 5000, localIp)) {
+ System.err.println("初始化失败," + ToolKits.getErrorCodePrint());
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/module/DeviceLogModule.java b/src/main/java/com/netsdk/demo/module/DeviceLogModule.java
new file mode 100644
index 0000000..a4a3a62
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/DeviceLogModule.java
@@ -0,0 +1,72 @@
+package com.netsdk.demo.module;
+
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.enumeration.DH_LOG_QUERY_TYPE;
+import com.netsdk.lib.structure.DH_DEVICE_LOG_ITEM_EX;
+import com.netsdk.lib.structure.NET_TIME;
+import com.netsdk.lib.structure.QUERY_DEVICE_LOG_PARAM;
+import com.sun.jna.Memory;
+import com.sun.jna.Pointer;
+import com.sun.jna.ptr.IntByReference;
+
+import java.nio.charset.Charset;
+
+public class DeviceLogModule {
+
+ public static DH_DEVICE_LOG_ITEM_EX[] getSystemLog(NET_TIME startTime,NET_TIME endTime){
+ //查询条件,作为入参
+ QUERY_DEVICE_LOG_PARAM param=new QUERY_DEVICE_LOG_PARAM();
+ //要查询的日志类型
+ param.emLogType= DH_LOG_QUERY_TYPE.DHLOG_ALL.ordinal();
+
+ //通道号
+ param.nChannelID=0;
+ //开始查询的条数
+ param.nStartNum=0;
+ //结束查询的条数,30-1+1=30,查询的条数是30条
+ param.nEndNum=1024;
+ int logNum=param.nEndNum-param.nStartNum+1;
+ //日志数据结构体类型,写0 c层可能校验不通过,建议写1,使用DH_DEVICE_LOG_ITEM_EX作为日志数据的结构体,
+ // 因为c层对出参buffer长度的校验是以DH_DEVICE_LOG_ITEM_EX结构体长度来校验的
+ // 而DH_DEVICE_LOG_ITEM_EX结构体的长度比DH_DEVICE_LOG_ITEM结构体要长得多
+ param.nLogStuType=1;
+ //要查询的起始时间段
+ param.stuStartTime= startTime;
+ //要查询的结束时间段
+ param.stuEndTime= endTime;
+
+ //入参
+ Pointer queryParam=new Memory(param.size());
+ ToolKits.SetStructDataToPointer(param,queryParam,0);
+ //日志数据结构体
+ DH_DEVICE_LOG_ITEM_EX logBuffer=new DH_DEVICE_LOG_ITEM_EX();
+ int totalSize = logBuffer.size() * logNum;
+ //出参,分配内存
+ Pointer pointer=new Memory(totalSize);
+ pointer.clear(totalSize);
+ //出参,查询到的日志条数
+ IntByReference relogNum = new IntByReference(1);
+ boolean bSet=LoginModule.netsdk.CLIENT_QueryDeviceLog(LoginModule.m_hLoginHandle,queryParam,pointer,totalSize,relogNum,3000);
+ System.out.println("get system log is:"+bSet);
+ if(bSet){
+ System.out.println("返回的log 条数:"+relogNum.getValue());
+ if(relogNum.getValue()>0){
+ DH_DEVICE_LOG_ITEM_EX[] arrays=(DH_DEVICE_LOG_ITEM_EX[])new DH_DEVICE_LOG_ITEM_EX().toArray(relogNum.getValue());
+ ToolKits.GetPointerDataToStructArr(pointer,arrays);
+ for(DH_DEVICE_LOG_ITEM_EX item:arrays){
+ String time=item.getDate();
+ String operator=item.getOperator(Charset.forName("GBK")).trim();
+ String operation=item.getOperation(Charset.forName("GBK")).trim();
+ String log=item.getLog(Charset.forName("GBK")).trim();
+ String detailLog=item.getDetailLog(Charset.forName("GBK")).trim();
+ System.out.println(time+","+operator+","+operation+","+log+","+detailLog+",日志类型:"+item.nLogType);
+ }
+ return arrays;
+ }
+ }else{
+ System.out.println("get log error: the error code is "+ToolKits.getErrorCodePrint());
+ }
+
+ return null;
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/module/DeviceSearchModule.java b/src/main/java/com/netsdk/demo/module/DeviceSearchModule.java
new file mode 100644
index 0000000..33b0622
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/DeviceSearchModule.java
@@ -0,0 +1,126 @@
+package com.netsdk.demo.module;
+
+import java.net.Inet4Address;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+
+import com.sun.jna.Memory;
+import com.sun.jna.Pointer;
+
+import com.netsdk.lib.NetSDKLib.*;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.enumeration.EM_SEND_SEARCH_TYPE;
+import com.netsdk.lib.structure.NET_IN_STARTSERACH_DEVICE;
+import com.netsdk.lib.structure.NET_OUT_STARTSERACH_DEVICE;
+
+
+/**
+ * 设备搜索接口实现
+ * 主要功能有 : 设备组播和广播搜索、设备IP单播搜索
+ */
+public class DeviceSearchModule {
+
+ /**
+ * 设备组播和广播搜索
+ * @throws SocketException
+ */
+ public static LLong multiBroadcastDeviceSearch(fSearchDevicesCBEx cbSearchDevices,String szlocalIp) throws SocketException {
+ NET_IN_STARTSERACH_DEVICE pInparm = new NET_IN_STARTSERACH_DEVICE();
+
+ pInparm.cbSearchDevices=cbSearchDevices;
+ System.arraycopy(szlocalIp.getBytes(), 0, pInparm.szLocalIp, 0, szlocalIp.getBytes().length);
+ pInparm.emSendType=EM_SEND_SEARCH_TYPE.EM_SEND_SEARCH_TYPE_MULTICAST_AND_BROADCAST.ordinal();
+
+ Pointer pInBuf =new Memory(pInparm.size());
+ ToolKits.SetStructDataToPointer(pInparm, pInBuf, 0);
+
+ NET_OUT_STARTSERACH_DEVICE pOutparm =new NET_OUT_STARTSERACH_DEVICE();
+
+ Pointer pOutBuf =new Memory(pOutparm.size());
+ ToolKits.SetStructDataToPointer(pOutparm, pOutBuf, 0);
+
+ return LoginModule.netsdk.CLIENT_StartSearchDevicesEx(pInBuf, pOutBuf);
+ }
+
+ /**
+ * 停止设备组播和广播搜索
+ */
+ public static void stopDeviceSearch(LLong m_DeviceSearchHandle) {
+ if(m_DeviceSearchHandle.longValue() == 0) {
+ return;
+ }
+
+ LoginModule.netsdk.CLIENT_StopSearchDevices(m_DeviceSearchHandle);
+ m_DeviceSearchHandle.setValue(0);
+ }
+
+ /**
+ * 设备IP单播搜索
+ * @param startIP 起始IP
+ * @param nIpNum IP个数,最大 256
+ * @throws SocketException
+ */
+ public static boolean unicastDeviceSearch(String localIp,String startIP, int nIpNum, fSearchDevicesCB cbSearchDevices) throws SocketException {
+ String[] szIPStr = startIP.split("\\.");
+
+ DEVICE_IP_SEARCH_INFO deviceSearchInfo = new DEVICE_IP_SEARCH_INFO();
+ deviceSearchInfo.nIpNum = nIpNum;
+ for(int i = 0; i < deviceSearchInfo.nIpNum; i++) {
+ System.arraycopy(getIp(szIPStr, i).getBytes(), 0, deviceSearchInfo.szIPArr[i].szIP, 0, getIp(szIPStr, i).getBytes().length);
+ }
+ if(LoginModule.netsdk.CLIENT_SearchDevicesByIPs(deviceSearchInfo, cbSearchDevices, null, localIp, 6000)) {
+ System.out.println("SearchDevicesByIPs Succeed!");
+ return true;
+ }
+ return false;
+ }
+
+ public static String getIp(String[] ip, int num) {
+ String szIp = "";
+ if(Integer.parseInt(ip[3]) >= 255) {
+ szIp = ip[0] + "." + ip[1] + "." + String.valueOf(Integer.parseInt(ip[2]) + 1) + "." + String.valueOf(Integer.parseInt(ip[3]) + num - 255);
+ } else {
+ szIp = ip[0] + "." + ip[1] + "." + ip[2] + "." + String.valueOf(Integer.parseInt(ip[3]) + num);
+ }
+
+ return szIp;
+ }
+
+ /**
+ * 获取多网卡IP
+ */
+ public static List getHostAddress() throws SocketException {
+
+ List ipList = new ArrayList();
+ if(NetworkInterface.getNetworkInterfaces() == null) {
+ return ipList;
+ }
+ Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces();
+
+ while (networkInterfaces.hasMoreElements()) {
+ NetworkInterface networkInterface = networkInterfaces.nextElement();
+ Enumeration inetAddresses = networkInterface.getInetAddresses();
+
+ while (inetAddresses.hasMoreElements()) {
+ InetAddress inetAddress = inetAddresses.nextElement();
+
+ if (inetAddress.isLoopbackAddress()) {//回路地址,如127.0.0.1
+// System.out.println("loop addr:" + inetAddress);
+ } else if (inetAddress.isLinkLocalAddress()) {//169.254.x.x
+// System.out.println("link addr:" + inetAddress);
+ } else if(inetAddress instanceof Inet4Address){
+ //非链接和回路真实ip
+ String localname = inetAddress.getHostName();
+ String localip = inetAddress.getHostAddress();
+ ipList.add(localip);
+ }
+ }
+ }
+ return ipList;
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/module/DotmatrixScreenModule.java b/src/main/java/com/netsdk/demo/module/DotmatrixScreenModule.java
new file mode 100644
index 0000000..2299f8b
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/DotmatrixScreenModule.java
@@ -0,0 +1,14 @@
+package com.netsdk.demo.module;
+
+import com.netsdk.lib.NetSDKLib.NET_CTRL_SET_PARK_INFO;
+
+public class DotmatrixScreenModule {
+
+
+ public static boolean setDotmatrixScreen(int emType, NET_CTRL_SET_PARK_INFO msg) {
+
+ boolean ret = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle, emType, msg.getPointer(), 3000);
+
+ return ret;
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/module/DownLoadRecordModule.java b/src/main/java/com/netsdk/demo/module/DownLoadRecordModule.java
new file mode 100644
index 0000000..1cd583c
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/DownLoadRecordModule.java
@@ -0,0 +1,81 @@
+package com.netsdk.demo.module;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.ToolKits;
+
+import com.sun.jna.ptr.IntByReference;
+
+/**
+ * 下载录像接口实现
+ * 主要有 : 查询录像、下载录像、设置码流类型功能
+ */
+public class DownLoadRecordModule {
+ // 下载句柄
+ public static LLong m_hDownLoadHandle = new LLong(0);
+
+ // 查找录像文件
+ public static boolean queryRecordFile(int nChannelId,
+ NetSDKLib.NET_TIME stTimeStart,
+ NetSDKLib.NET_TIME stTimeEnd,
+ NetSDKLib.NET_RECORDFILE_INFO[] stFileInfo,
+ IntByReference nFindCount) {
+ // RecordFileType 录像类型 0:所有录像 1:外部报警 2:动态监测报警 3:所有报警 4:卡号查询 5:组合条件查询
+ // 6:录像位置与偏移量长度 8:按卡号查询图片(目前仅HB-U和NVS特殊型号的设备支持) 9:查询图片(目前仅HB-U和NVS特殊型号的设备支持)
+ // 10:按字段查询 15:返回网络数据结构(金桥网吧) 16:查询所有透明串数据录像文件
+ int nRecordFileType = 0;
+ boolean bRet = LoginModule.netsdk.CLIENT_QueryRecordFile(LoginModule.m_hLoginHandle, nChannelId,
+ nRecordFileType, stTimeStart, stTimeEnd, null, stFileInfo,
+ stFileInfo.length * stFileInfo[0].size(), nFindCount, 5000, false);
+
+ if(bRet) {
+ System.out.println("QueryRecordFile Succeed! \n" + "查询到的视频个数:" + nFindCount.getValue());
+ } else {
+ System.err.println("QueryRecordFile Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 设置回放时的码流类型
+ * @param m_streamType 码流类型
+ */
+ public static void setStreamType(int m_streamType) {
+
+ IntByReference steamType = new IntByReference(m_streamType);// 0-主辅码流,1-主码流,2-辅码流
+ int emType = NetSDKLib.EM_USEDEV_MODE.NET_RECORD_STREAM_TYPE;
+
+ boolean bret = LoginModule.netsdk.CLIENT_SetDeviceMode(LoginModule.m_hLoginHandle, emType, steamType.getPointer());
+ if (!bret) {
+ System.err.println("Set Stream Type Failed, Get last error." + ToolKits.getErrorCodePrint());
+ } else {
+ System.out.println("Set Stream Type Succeed!");
+ }
+ }
+
+ public static LLong downloadRecordFile(int nChannelId,
+ int nRecordFileType,
+ NetSDKLib.NET_TIME stTimeStart,
+ NetSDKLib.NET_TIME stTimeEnd,
+ String SavedFileName,
+ NetSDKLib.fTimeDownLoadPosCallBack cbTimeDownLoadPos) {
+
+ m_hDownLoadHandle = LoginModule.netsdk.CLIENT_DownloadByTimeEx(LoginModule.m_hLoginHandle, nChannelId, nRecordFileType,
+ stTimeStart, stTimeEnd, SavedFileName,
+ cbTimeDownLoadPos, null, null, null, null);
+ if(m_hDownLoadHandle.longValue() != 0) {
+ System.out.println("Downloading RecordFile!");
+ } else {
+ System.err.println("Download RecordFile Failed!" + ToolKits.getErrorCodePrint());
+ }
+ return m_hDownLoadHandle;
+ }
+
+ public static void stopDownLoadRecordFile(LLong m_hDownLoadHandle) {
+ if (m_hDownLoadHandle.longValue() == 0) {
+ return;
+ }
+ LoginModule.netsdk.CLIENT_StopDownload(m_hDownLoadHandle);
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/module/FaceRecognitionModule.java b/src/main/java/com/netsdk/demo/module/FaceRecognitionModule.java
new file mode 100644
index 0000000..93e6617
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/FaceRecognitionModule.java
@@ -0,0 +1,880 @@
+package com.netsdk.demo.module;
+
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.netsdk.lib.NativeString;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.NetSDKLib.*;
+
+import com.sun.jna.Memory;
+import com.sun.jna.Pointer;
+
+/**
+ * IVSS 和 IPC-FR 人脸功能接口实现, IPC-FD只支持人脸检测事件
+ */
+
+public class FaceRecognitionModule {
+ // 查找句柄
+ private static LLong m_FindHandle = null;
+
+ // 查询密令
+ public static int nToken = 0;
+
+ //////////////////////////////// 目标识别 和 人脸检测 事件 /////////////////////////////////////////////
+ /**
+ * 目标识别事件和人脸检测事件订阅
+ * @param channel 通道号
+ * @param callback 回调函数
+ * @return true:成功 false:失败
+ */
+ public static LLong realLoadPicture(int channel, fAnalyzerDataCallBack callback) {
+ int bNeedPicture = 1; // 是否需要图片
+
+ LLong m_hAttachHandle = LoginModule.netsdk.CLIENT_RealLoadPictureEx(LoginModule.m_hLoginHandle, channel,
+ NetSDKLib.EVENT_IVS_ALL, bNeedPicture, callback, null, null);
+ if(m_hAttachHandle.longValue() == 0) {
+ System.err.println("CLIENT_RealLoadPictureEx Failed, Error:" + ToolKits.getErrorCodePrint());
+ } else {
+ System.out.println("通道[" + channel + "]订阅成功!");
+ }
+
+ return m_hAttachHandle;
+ }
+
+ /**
+ * 停止订阅
+ * @param m_hAttachHandle 智能订阅句柄
+ */
+ public static void stopRealLoadPicture(LLong m_hAttachHandle) {
+ if(m_hAttachHandle.longValue() != 0) {
+ LoginModule.netsdk.CLIENT_StopLoadPic(m_hAttachHandle);
+ m_hAttachHandle.setValue(0);
+ }
+ }
+
+
+ /////////////////////////////////////// 人脸库的增、删、改、查 ////////////////////////////////
+
+ /**
+ * 查询人脸库
+ * @param groupId 需要查找的人脸库ID; 为空表示查找所有的人脸库
+ */
+ public static NET_FACERECONGNITION_GROUP_INFO[] findGroupInfo(String groupId) {
+ NET_FACERECONGNITION_GROUP_INFO[] groupInfoRet = null;
+
+ /*
+ * 入参
+ */
+ NET_IN_FIND_GROUP_INFO stuIn = new NET_IN_FIND_GROUP_INFO();
+ System.arraycopy(groupId.getBytes(), 0, stuIn.szGroupId, 0, groupId.getBytes().length);
+
+ /*
+ * 出参
+ */
+ int max = 20;
+ NET_FACERECONGNITION_GROUP_INFO[] groupInfo = new NET_FACERECONGNITION_GROUP_INFO[max];
+ for(int i = 0; i < max; i++) {
+ groupInfo[i] = new NET_FACERECONGNITION_GROUP_INFO();
+ }
+
+ NET_OUT_FIND_GROUP_INFO stuOut = new NET_OUT_FIND_GROUP_INFO();
+ stuOut.pGroupInfos = new Memory(groupInfo[0].size() * groupInfo.length); // Pointer初始化
+ stuOut.pGroupInfos.clear(groupInfo[0].size() * groupInfo.length);
+ stuOut.nMaxGroupNum = groupInfo.length;
+
+ ToolKits.SetStructArrToPointerData(groupInfo, stuOut.pGroupInfos); // 将数组内存拷贝给Pointer
+
+ if(LoginModule.netsdk.CLIENT_FindGroupInfo(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000)) {
+
+ // 将Pointer的值输出到 数组 NET_FACERECONGNITION_GROUP_INFO
+ ToolKits.GetPointerDataToStructArr(stuOut.pGroupInfos, groupInfo);
+
+ if(stuOut.nRetGroupNum > 0) {
+ // 根据设备返回的,将有效的人脸库信息返回
+ groupInfoRet = new NET_FACERECONGNITION_GROUP_INFO[stuOut.nRetGroupNum];
+ for(int i = 0; i < stuOut.nRetGroupNum; i++) {
+ groupInfoRet[i] = groupInfo[i];
+ }
+ }
+ } else {
+ System.err.println("查询人员信息失败" + ToolKits.getErrorCodePrint());
+ return null;
+ }
+
+ return groupInfoRet;
+ }
+
+ /**
+ * 添加人脸库
+ * @param groupName 需要添加的人脸库名称
+ */
+ public static boolean addGroup(String groupName) {
+ NET_ADD_FACERECONGNITION_GROUP_INFO addGroupInfo = new NET_ADD_FACERECONGNITION_GROUP_INFO();
+
+ // 人脸库名称
+ try {
+ System.arraycopy(groupName.getBytes("GBK"), 0, addGroupInfo.stuGroupInfo.szGroupName, 0, groupName.getBytes("GBK").length);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ /*
+ * 入参
+ */
+ NET_IN_OPERATE_FACERECONGNITION_GROUP stuIn = new NET_IN_OPERATE_FACERECONGNITION_GROUP();
+ stuIn.emOperateType = EM_OPERATE_FACERECONGNITION_GROUP_TYPE.NET_FACERECONGNITION_GROUP_ADD; // 添加人员组信息
+ stuIn.pOPerateInfo = addGroupInfo.getPointer();
+
+ /*
+ * 出参
+ */
+ NET_OUT_OPERATE_FACERECONGNITION_GROUP stuOut = new NET_OUT_OPERATE_FACERECONGNITION_GROUP();
+
+ addGroupInfo.write();
+ boolean bRet = LoginModule.netsdk.CLIENT_OperateFaceRecognitionGroup(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000);
+ addGroupInfo.read();
+
+ if(bRet) {
+ System.out.println("人员组ID : " + new String(stuOut.szGroupId).trim()); // 新增记录的人员组ID,唯一标识一组人员
+ }
+
+ return bRet;
+ }
+
+ /**
+ * 修改人脸库
+ * @param groupName 修改后的人脸库名称
+ * @param groupId 需要修改的人脸库ID
+ */
+ public static boolean modifyGroup(String groupName, String groupId) {
+ NET_MODIFY_FACERECONGNITION_GROUP_INFO modifyGroupInfo = new NET_MODIFY_FACERECONGNITION_GROUP_INFO();
+
+ // 人脸库名称
+ try {
+ System.arraycopy(groupName.getBytes("GBK"), 0, modifyGroupInfo.stuGroupInfo.szGroupName, 0, groupName.getBytes("GBK").length);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ // 人脸库ID
+ System.arraycopy(groupId.getBytes(), 0, modifyGroupInfo.stuGroupInfo.szGroupId, 0, groupId.getBytes().length);
+
+ /*
+ * 入参
+ */
+ NET_IN_OPERATE_FACERECONGNITION_GROUP stuIn = new NET_IN_OPERATE_FACERECONGNITION_GROUP();
+ stuIn.emOperateType = EM_OPERATE_FACERECONGNITION_GROUP_TYPE.NET_FACERECONGNITION_GROUP_MODIFY; // 修改人员组信息
+ stuIn.pOPerateInfo = modifyGroupInfo.getPointer();
+
+ /*
+ * 出参
+ */
+ NET_OUT_OPERATE_FACERECONGNITION_GROUP stuOut = new NET_OUT_OPERATE_FACERECONGNITION_GROUP();
+
+ modifyGroupInfo.write();
+ boolean bRet = LoginModule.netsdk.CLIENT_OperateFaceRecognitionGroup(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000);
+ modifyGroupInfo.read();
+
+ if(bRet) {
+ System.out.println("修改人脸库成功.");
+ }
+
+ return bRet;
+ }
+
+ /**
+ * 删除人脸库
+ * @param groupId 需要删除的人脸库ID; 为空表示删除所有的人脸库
+ */
+ public static boolean deleteGroup(String groupId) {
+ NET_DELETE_FACERECONGNITION_GROUP_INFO deleteGroupInfo = new NET_DELETE_FACERECONGNITION_GROUP_INFO();
+
+ // 人脸库ID
+ System.arraycopy(groupId.getBytes(), 0, deleteGroupInfo.szGroupId, 0, groupId.getBytes().length);
+
+ /*
+ * 入参
+ */
+ NET_IN_OPERATE_FACERECONGNITION_GROUP stuIn = new NET_IN_OPERATE_FACERECONGNITION_GROUP();
+ stuIn.emOperateType = EM_OPERATE_FACERECONGNITION_GROUP_TYPE.NET_FACERECONGNITION_GROUP_DELETE; // 删除人员组信息
+ stuIn.pOPerateInfo = deleteGroupInfo.getPointer();
+
+ /*
+ * 出参
+ */
+ NET_OUT_OPERATE_FACERECONGNITION_GROUP stuOut = new NET_OUT_OPERATE_FACERECONGNITION_GROUP();
+
+ deleteGroupInfo.write();
+ boolean bRet = LoginModule.netsdk.CLIENT_OperateFaceRecognitionGroup(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000);
+ deleteGroupInfo.read();
+
+ if(bRet) {
+ System.out.println("删除人脸库成功.");
+ }
+
+ return bRet;
+ }
+
+ ///////////////////////////// 按人脸库布控、撤控 ///////////////////////////////////////
+ /**
+ * 以人脸库的角度进行布控
+ * @param groupId 人脸库ID
+ * @param hashMap key:撤控通道 value:相似度
+ */
+ public static boolean putDisposition(String groupId, HashMap hashMap) {
+ int i = 0;
+
+ /*
+ * 入参
+ */
+ NET_IN_FACE_RECOGNITION_PUT_DISPOSITION_INFO stuIn = new NET_IN_FACE_RECOGNITION_PUT_DISPOSITION_INFO();
+ // 人脸库ID
+ System.arraycopy(groupId.getBytes(), 0, stuIn.szGroupId, 0, groupId.getBytes().length);
+
+ for(Map.Entry entry : hashMap.entrySet()) {
+ stuIn.stuDispositionChnInfo[i].nChannelID = entry.getKey() - 1;
+ stuIn.stuDispositionChnInfo[i].nSimilary = entry.getValue();
+
+ i++;
+ }
+
+ stuIn.nDispositionChnNum = hashMap.size(); // 布控视频通道个数
+
+ /*
+ * 出参
+ */
+ NET_OUT_FACE_RECOGNITION_PUT_DISPOSITION_INFO stuOut = new NET_OUT_FACE_RECOGNITION_PUT_DISPOSITION_INFO();
+
+ boolean bRet = LoginModule.netsdk.CLIENT_FaceRecognitionPutDisposition(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000);
+ if(bRet) {
+ System.out.println("通道布控结果个数:" + stuOut.nReportCnt);
+ }
+ return bRet;
+ }
+
+ /**
+ * 以人脸库的角度进行撤控
+ * @param groupId 人脸库ID
+ * @param arrayList 撤控通道列表
+ */
+ public static boolean delDisposition(String groupId, ArrayList arrayList) {
+ /*
+ * 入参
+ */
+ NET_IN_FACE_RECOGNITION_DEL_DISPOSITION_INFO stuIn = new NET_IN_FACE_RECOGNITION_DEL_DISPOSITION_INFO();
+
+ // 人脸库ID
+ System.arraycopy(groupId.getBytes(), 0, stuIn.szGroupId, 0, groupId.getBytes().length);
+
+ // 撤控视频通道列表
+ for(int i = 0; i < arrayList.size(); i++) {
+ stuIn.nDispositionChn[i] = arrayList.get(i) - 1;
+ }
+
+ // 撤控视频通道个数
+ stuIn.nDispositionChnNum = arrayList.size();
+
+ /*
+ * 出参
+ */
+ NET_OUT_FACE_RECOGNITION_DEL_DISPOSITION_INFO stuOut = new NET_OUT_FACE_RECOGNITION_DEL_DISPOSITION_INFO();
+
+ boolean bRet = LoginModule.netsdk.CLIENT_FaceRecognitionDelDisposition(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000);
+ if(bRet) {
+ System.out.println("通道撤控结果个数:" + stuOut.nReportCnt);
+ }
+ return bRet;
+ }
+
+ ///////////////////////////// 按通道布控、撤控 ///////////////////////////////////////
+ /**
+ * 获取布控在视频通道的组信息
+ * @param channel 通道号
+ */
+ public static void GetGroupInfoForChannel(int channel) {
+ /*
+ * 入参
+ */
+ NET_IN_GET_GROUPINFO_FOR_CHANNEL stIn = new NET_IN_GET_GROUPINFO_FOR_CHANNEL();
+
+ // 通道号
+ stIn.nChannelID = channel;
+
+ /*
+ * 出参
+ */
+ NET_OUT_GET_GROUPINFO_FOR_CHANNEL stOut = new NET_OUT_GET_GROUPINFO_FOR_CHANNEL();
+
+ if(LoginModule.netsdk.CLIENT_GetGroupInfoForChannel(LoginModule.m_hLoginHandle, stIn, stOut, 4000)) {
+ for(int i = 0; i < stOut.nGroupIdNum; i++) {
+ System.out.println("人脸库ID:" + new String(stOut.szGroupIdArr[i].szGroupId).trim());
+ System.out.println("相似度:" + stOut.nSimilary[i] + "\n");
+ }
+ } else {
+ System.err.println("获取布控在视频通道的组信息失败, " + ToolKits.getErrorCodePrint());
+ }
+ }
+ /**
+ * 布控通道人员组信息
+ * @param channel
+ * @param groupIds 人脸库ID,长度等于相似度
+ * @param similarys 相似度, 长度等于人脸库ID
+ */
+ public static void SetGroupInfoForChannel(int channel, String[] groupIds, int[] similarys) {
+ /*
+ * 入参
+ */
+ NET_IN_SET_GROUPINFO_FOR_CHANNEL stIn = new NET_IN_SET_GROUPINFO_FOR_CHANNEL();
+
+ // 通道号
+ stIn.nChannelID = channel;
+
+ // 人脸库ID个数
+ stIn.nGroupIdNum = groupIds.length;
+
+ // 相似度个数
+ stIn.nSimilaryNum = similarys.length;
+
+ for(int i = 0; i < groupIds.length; i++) {
+ // 人脸库ID赋值,用数组拷贝
+ System.arraycopy(groupIds[i].getBytes(), 0, stIn.szGroupIdArr[i].szGroupId, 0, groupIds[i].getBytes().length);
+
+ // 对应的人脸库的相似度
+ stIn.nSimilary[i] = similarys[i];
+ }
+
+ /*
+ * 出参
+ */
+ NET_OUT_SET_GROUPINFO_FOR_CHANNEL stOut = new NET_OUT_SET_GROUPINFO_FOR_CHANNEL();
+
+ if(LoginModule.netsdk.CLIENT_SetGroupInfoForChannel(LoginModule.m_hLoginHandle, stIn, stOut, 4000)) {
+
+ }
+ }
+
+ ///////////////////////////// 人员操作 ////////////////////////////////////////////
+ /**
+ * 按条件查询目标识别结果
+ * @param groupId 人脸库ID
+ * @param isStartBirthday 查询条件是否下发开始生日
+ * @param startTime 生日起始时间
+ * @param isEndBirthday 查询条件是否下发结束生日
+ * @param endTime 生日结束时间
+ * @param personName 姓名
+ * @param sex 性别
+ * @param idType 证件类型
+ * @param idNo 证件号
+ * @return 查询到的所有人员个数
+ */
+ public static int startFindPerson(String groupId,
+ boolean isStartBirthday,
+ String startTime,
+ boolean isEndBirthday,
+ String endTime,
+ String personName,
+ int sex,
+ int idType,
+ String idNo) {
+
+ m_FindHandle = null;
+ nToken = 0;
+
+ int nTotalCount = 0;
+
+ /*
+ * 入参, IVVS设备,查询条件只有 stuInStartFind.stPerson 里的参数有效
+ */
+ NET_IN_STARTFIND_FACERECONGNITION stuIn = new NET_IN_STARTFIND_FACERECONGNITION();
+
+ stuIn.bPersonExEnable = 1; // 人员信息查询条件是否有效, 并使用扩展结构体
+
+ // 人脸库ID
+ System.arraycopy(groupId.getBytes(), 0, stuIn.stPersonInfoEx.szGroupID, 0, groupId.getBytes().length);
+
+ // 姓名
+ try {
+ System.arraycopy(personName.getBytes("GBK"), 0, stuIn.stPersonInfoEx.szPersonName, 0, personName.getBytes("GBK").length);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ // 性别
+ stuIn.stPersonInfoEx.bySex = (byte)sex;
+
+ // 证件类型
+ stuIn.stPersonInfoEx.byIDType = (byte)idType;
+
+ // 证件号
+ System.arraycopy(idNo.getBytes(), 0, stuIn.stPersonInfoEx.szID, 0, idNo.getBytes().length);
+
+ stuIn.stFilterInfo.nGroupIdNum = 1;
+
+ // 人脸库ID
+ System.arraycopy(groupId.getBytes(), 0, stuIn.stFilterInfo.szGroupIdArr[0].szGroupId, 0, groupId.getBytes().length);
+
+ // 待查询人脸类型
+ stuIn.stFilterInfo.emFaceType = EM_FACERECOGNITION_FACE_TYPE.EM_FACERECOGNITION_FACE_TYPE_ALL;
+
+ // 开始生日
+ if(isStartBirthday) {
+ String[] startTimeStr = startTime.split("-");
+
+ stuIn.stFilterInfo.stBirthdayRangeStart.dwYear = Integer.parseInt(startTimeStr[0]);
+ stuIn.stFilterInfo.stBirthdayRangeStart.dwMonth = Integer.parseInt(startTimeStr[1]);
+ stuIn.stFilterInfo.stBirthdayRangeStart.dwDay = Integer.parseInt(startTimeStr[2]);
+ }
+
+ // 结束生日
+ if(isEndBirthday) {
+ String[] endTimeStr = endTime.split("-");
+
+ stuIn.stFilterInfo.stBirthdayRangeEnd.dwYear = Integer.parseInt(endTimeStr[0]);
+ stuIn.stFilterInfo.stBirthdayRangeEnd.dwMonth = Integer.parseInt(endTimeStr[1]);
+ stuIn.stFilterInfo.stBirthdayRangeEnd.dwDay = Integer.parseInt(endTimeStr[2]);
+ }
+
+ stuIn.stFilterInfo.nRangeNum = 1;
+ stuIn.stFilterInfo.szRange[0] = EM_FACE_DB_TYPE.NET_FACE_DB_TYPE_BLACKLIST;
+
+ /*
+ * 出参
+ */
+ NET_OUT_STARTFIND_FACERECONGNITION stuOut = new NET_OUT_STARTFIND_FACERECONGNITION();
+ stuIn.write();
+ stuOut.write();
+ if(LoginModule.netsdk.CLIENT_StartFindFaceRecognition(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000)) {
+ m_FindHandle = stuOut.lFindHandle;
+ nTotalCount = stuOut.nTotalCount;
+ nToken = stuOut.nToken;
+ } else {
+ System.out.println("CLIENT_StartFindFaceRecognition Failed, Error:" + ToolKits.getErrorCodePrint());
+ }
+
+ return nTotalCount;
+ }
+
+ /**
+ * 查找目标识别结果
+ * @param beginNum 查询起始序号
+ * @param nCount 当前想查询的记录条数
+ * @return 返回的人员信息数组
+ */
+ public static CANDIDATE_INFOEX[] doFindPerson(int beginNum, int nCount) {
+ /*
+ *入参
+ */
+ NetSDKLib.NET_IN_DOFIND_FACERECONGNITION stuIn = new NetSDKLib.NET_IN_DOFIND_FACERECONGNITION();
+ stuIn.lFindHandle = m_FindHandle;
+ stuIn.nCount = nCount; // 当前想查询的记录条数
+ stuIn.nBeginNum = beginNum; // 查询起始序号
+
+ /*
+ * 出参
+ */
+ NetSDKLib.NET_OUT_DOFIND_FACERECONGNITION stuOut = new NetSDKLib.NET_OUT_DOFIND_FACERECONGNITION();
+ stuOut.bUseCandidatesEx = 1; // 是否使用候选对象扩展结构体
+
+ // 必须申请内存,每次查询几个,必须至少申请几个,最大申请20个
+ for(int i = 0; i < nCount; i++) {
+ stuOut.stuCandidatesEx[i].stPersonInfo.szFacePicInfo[0].nFilePathLen = 256;
+ stuOut.stuCandidatesEx[i].stPersonInfo.szFacePicInfo[0].pszFilePath = new Memory(256);
+ }
+
+ stuIn.write();
+ stuOut.write();
+ if(LoginModule.netsdk.CLIENT_DoFindFaceRecognition(stuIn, stuOut, 4000)) {
+ stuIn.read();
+ stuOut.read();
+
+ if(stuOut.nCadidateExNum == 0) {
+ return null;
+ }
+
+ // 查询到的数据
+ CANDIDATE_INFOEX[] stuCandidatesEx = new CANDIDATE_INFOEX[stuOut.nCadidateExNum];
+ for(int i = 0; i < stuOut.nCadidateExNum; i++) {
+ stuCandidatesEx[i] = new CANDIDATE_INFOEX();
+ stuCandidatesEx[i] = stuOut.stuCandidatesEx[i];
+ }
+
+ return stuCandidatesEx;
+ } else {
+ System.out.println("CLIENT_DoFindFaceRecognition Failed, Error:" + ToolKits.getErrorCodePrint());
+ }
+
+ return null;
+ }
+
+ /**
+ * 结束查询
+ */
+ public static boolean doFindPerson() {
+ boolean bRet = false;
+ if(m_FindHandle.longValue() != 0) {
+ bRet = LoginModule.netsdk.CLIENT_StopFindFaceRecognition(m_FindHandle);
+ }
+ return bRet;
+ }
+
+ /**
+ * 添加人员
+ * @param groupId 人脸库ID
+ * @param memory 图片数据
+ * @param personName 姓名
+ * @param sex 性别
+ * @param isBirthday 是否下发生日
+ * @param birthday 生日
+ * @param byIdType 证件类型
+ * @param idNo 证件号
+ * @return
+ */
+ public static boolean addPerson(String groupId,
+ Memory memory,
+ String personName,
+ int sex,
+ boolean isBirthday,
+ String birthday,
+ int byIdType,
+ String idNo) {
+ /*
+ * 入参
+ */
+ NET_IN_OPERATE_FACERECONGNITIONDB stuIn = new NET_IN_OPERATE_FACERECONGNITIONDB();
+ stuIn.emOperateType = NetSDKLib.EM_OPERATE_FACERECONGNITIONDB_TYPE.NET_FACERECONGNITIONDB_ADD;
+
+ ///////// 使用人员扩展信息 //////////
+ stuIn.bUsePersonInfoEx = 1;
+
+ // 人脸库ID
+ System.arraycopy(groupId.getBytes(), 0, stuIn.stPersonInfoEx.szGroupID, 0, groupId.getBytes().length);
+
+ // 生日设置
+ if(isBirthday) {
+ String[] birthdays = birthday.split("-");
+
+ stuIn.stPersonInfoEx.wYear = (short)Integer.parseInt(birthdays[0]);
+ stuIn.stPersonInfoEx.byMonth = (byte)Integer.parseInt(birthdays[1]);
+ stuIn.stPersonInfoEx.byDay = (byte)Integer.parseInt(birthdays[2]);
+ }
+
+ // 性别,1-男,2-女,作为查询条件时,此参数填0,则表示此参数无效
+ stuIn.stPersonInfoEx.bySex = (byte)sex;
+
+ // 人员名字
+ try {
+ System.arraycopy(personName.getBytes("GBK"), 0, stuIn.stPersonInfoEx.szPersonName, 0, personName.getBytes("GBK").length);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ // 证件类型
+ stuIn.stPersonInfoEx.byIDType = (byte)byIdType;
+
+ // 证件号
+ System.arraycopy(idNo.getBytes(), 0, stuIn.stPersonInfoEx.szID, 0, idNo.getBytes().length);
+
+ // 图片张数、大小、缓存设置
+ if(memory != null) {
+ stuIn.stPersonInfoEx.wFacePicNum = 1; // 图片张数
+ stuIn.stPersonInfoEx.szFacePicInfo[0].dwFileLenth = (int)memory.size(); // 图片大小
+ stuIn.stPersonInfoEx.szFacePicInfo[0].dwOffSet = 0;
+
+ stuIn.nBufferLen = (int)memory.size();
+ stuIn.pBuffer = memory;
+ }
+
+ /*
+ * 出参
+ */
+ NET_OUT_OPERATE_FACERECONGNITIONDB stuOut = new NET_OUT_OPERATE_FACERECONGNITIONDB() ;
+
+ stuIn.write();
+ boolean bRet = LoginModule.netsdk.CLIENT_OperateFaceRecognitionDB(LoginModule.m_hLoginHandle, stuIn, stuOut, 3000);
+ stuIn.read();
+
+ if(bRet) {
+ System.out.println("szUID : " + new String(stuOut.szUID).trim());
+ } else {
+ System.err.println(ToolKits.getErrorCodePrint());
+ }
+
+ return bRet;
+ }
+
+ /**
+ * 修改人员信息
+ * @param groupId 人脸库ID
+ * @param uid 人员唯一标识符
+ * @param memory 图片数据
+ * @param personName 姓名
+ * @param sex 性别
+ * @param isBirthday 是否下发生日
+ * @param birthday 生日
+ * @param byIdType 证件类型
+ * @param idNo 证件号
+ * @return true:成功 , false:失败
+ */
+ public static boolean modifyPerson(String groupId,
+ String uid,
+ Memory memory,
+ String personName,
+ int sex,
+ boolean isBirthday,
+ String birthday,
+ int byIdType,
+ String idNo) {
+ // 入参
+ NET_IN_OPERATE_FACERECONGNITIONDB stuIn = new NET_IN_OPERATE_FACERECONGNITIONDB();
+ stuIn.emOperateType = NetSDKLib.EM_OPERATE_FACERECONGNITIONDB_TYPE.NET_FACERECONGNITIONDB_MODIFY;
+
+ ///////// 使用人员扩展信息 ////////
+ stuIn.bUsePersonInfoEx = 1;
+
+ // 人脸库ID
+ System.arraycopy(groupId.getBytes(), 0, stuIn.stPersonInfoEx.szGroupID, 0, groupId.getBytes().length);
+
+ // 人员唯一标识符
+ System.arraycopy(uid.getBytes(), 0, stuIn.stPersonInfoEx.szUID, 0, uid.getBytes().length);
+
+ // 生日设置
+ if(isBirthday) {
+ String[] birthdays = birthday.split("-");
+
+ stuIn.stPersonInfoEx.wYear = (short)Integer.parseInt(birthdays[0]);
+ stuIn.stPersonInfoEx.byMonth = (byte)Integer.parseInt(birthdays[1]);
+ stuIn.stPersonInfoEx.byDay = (byte)Integer.parseInt(birthdays[2]);
+ }
+
+ // 性别,1-男,2-女,作为查询条件时,此参数填0,则表示此参数无效
+ stuIn.stPersonInfoEx.bySex = (byte)sex;
+
+ // 人员名字
+ try {
+ System.arraycopy(personName.getBytes("GBK"), 0, stuIn.stPersonInfoEx.szPersonName, 0, personName.getBytes("GBK").length);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ // 证件类型
+ stuIn.stPersonInfoEx.byIDType = (byte)byIdType;
+
+ // 证件号
+ System.arraycopy(idNo.getBytes(), 0, stuIn.stPersonInfoEx.szID, 0, idNo.getBytes().length);
+
+ // 图片张数、大小、缓存设置
+ if(memory != null) {
+ stuIn.stPersonInfoEx.wFacePicNum = 1; // 图片张数
+ stuIn.stPersonInfoEx.szFacePicInfo[0].dwFileLenth = (int)memory.size(); // 图片大小
+ stuIn.stPersonInfoEx.szFacePicInfo[0].dwOffSet = 0;
+
+ stuIn.nBufferLen = (int)memory.size();
+ stuIn.pBuffer = memory;
+ }
+
+ // 出参
+ NET_OUT_OPERATE_FACERECONGNITIONDB stuOut = new NET_OUT_OPERATE_FACERECONGNITIONDB() ;
+
+ stuIn.write();
+ if(!LoginModule.netsdk.CLIENT_OperateFaceRecognitionDB(LoginModule.m_hLoginHandle, stuIn, stuOut, 3000)) {
+ System.err.println("修改人员失败" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+ stuIn.read();
+
+ return true;
+ }
+
+ /**
+ * 删除人员信息
+ * @param groupId 人脸库ID
+ * @param sUID 人员唯一标识符
+ */
+ public static boolean delPerson(String groupId, String sUID) {
+ /*
+ * 入参
+ */
+ NET_IN_OPERATE_FACERECONGNITIONDB stuIn = new NET_IN_OPERATE_FACERECONGNITIONDB();
+ stuIn.emOperateType = NetSDKLib.EM_OPERATE_FACERECONGNITIONDB_TYPE.NET_FACERECONGNITIONDB_DELETE;
+
+ //////// 使用人员扩展信息 //////////
+ stuIn.bUsePersonInfoEx = 1;
+
+ // GroupID 赋值
+ System.arraycopy(groupId.getBytes(), 0, stuIn.stPersonInfoEx.szGroupID, 0, groupId.getBytes().length);
+
+ // UID赋值
+ System.arraycopy(sUID.getBytes(), 0, stuIn.stPersonInfoEx.szUID, 0, sUID.getBytes().length);
+
+ /*
+ * 出参
+ */
+ NET_OUT_OPERATE_FACERECONGNITIONDB stuOut = new NET_OUT_OPERATE_FACERECONGNITIONDB() ;
+
+ boolean bRet = LoginModule.netsdk.CLIENT_OperateFaceRecognitionDB(LoginModule.m_hLoginHandle, stuIn, stuOut, 3000);
+ if(!bRet) {
+ System.err.println(LoginModule.netsdk.CLIENT_GetLastError());
+ }
+
+ return bRet;
+ }
+
+ /**
+ * 下载图片, 用于修改人员信息
+ * @param szFileName 需要下载的文件名
+ * @param pszFileDst 存放文件路径
+ */
+ public static boolean downloadPersonPic(String szFileName, String pszFileDst) {
+ /*
+ * 入参
+ */
+ NET_IN_DOWNLOAD_REMOTE_FILE stuIn = new NET_IN_DOWNLOAD_REMOTE_FILE();
+ // 需要下载的文件名
+ stuIn.pszFileName = new NativeString(szFileName).getPointer();
+
+ // 存放文件路径
+ stuIn.pszFileDst = new NativeString(pszFileDst).getPointer();
+
+ /*
+ * 出参
+ */
+ NET_OUT_DOWNLOAD_REMOTE_FILE stuOut = new NET_OUT_DOWNLOAD_REMOTE_FILE();
+
+ if(!LoginModule.netsdk.CLIENT_DownloadRemoteFile(LoginModule.m_hLoginHandle, stuIn, stuOut, 5000)) {
+ System.err.println("下载图片失败!" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 显示/关闭规则库
+ * @param RealPlayHandle 实时预览
+ * @param bTrue 1-打开, 0-关闭
+ * @return
+ */
+ public static void renderPrivateData(LLong m_hRealPlayHandle, int bTrue) {
+ if(m_hRealPlayHandle.longValue() != 0) {
+ LoginModule.netsdk.CLIENT_RenderPrivateData(m_hRealPlayHandle, bTrue);
+ }
+ }
+
+ ////////////////////////// 查询事件对比记录 /////////////////////////
+ private static LLong lFindHandle = new LLong(0); // 查找句柄
+
+ /**
+ * 获取查找句柄
+ * @param nChn 通道号
+ * @param startTime 开始时间
+ * @param endTime 结束时间
+ */
+ public static boolean findFile(int nChn, String startTime, String endTime) {
+ int type = NetSDKLib.EM_FILE_QUERY_TYPE.NET_FILE_QUERY_FACE;
+
+ /**
+ * 查询条件
+ */
+ MEDIAFILE_FACERECOGNITION_PARAM findContion = new MEDIAFILE_FACERECOGNITION_PARAM();
+
+ // 开始时间
+ String[] starts = startTime.split(" ");
+
+ findContion.stStartTime.dwYear = Integer.parseInt(starts[0].split("-")[0]);
+ findContion.stStartTime.dwMonth = Integer.parseInt(starts[0].split("-")[1]);
+ findContion.stStartTime.dwDay = Integer.parseInt(starts[0].split("-")[2]);
+ findContion.stStartTime.dwHour = Integer.parseInt(starts[1].split(":")[0]);
+ findContion.stStartTime.dwMinute = Integer.parseInt(starts[1].split(":")[1]);
+ findContion.stStartTime.dwSecond = Integer.parseInt(starts[1].split(":")[2]);
+
+ // 结束时间
+ String[] ends = endTime.split(" ");
+ findContion.stEndTime.dwYear = Integer.parseInt(ends[0].split("-")[0]);
+ findContion.stEndTime.dwMonth = Integer.parseInt(ends[0].split("-")[1]);
+ findContion.stEndTime.dwDay = Integer.parseInt(ends[0].split("-")[2]);
+ findContion.stEndTime.dwHour = Integer.parseInt(ends[1].split(":")[0]);
+ findContion.stEndTime.dwMinute = Integer.parseInt(ends[1].split(":")[1]);
+ findContion.stEndTime.dwSecond = Integer.parseInt(ends[1].split(":")[2]);
+
+ // 通道号
+ findContion.nChannelId = nChn;
+
+ /**
+ * 以下注释的查询条件参数,目前设备不支持,后续会逐渐增加
+ */
+// // 地点,支持模糊匹配
+// String machineAddress = "";
+// System.arraycopy(machineAddress.getBytes(), 0, findContion.szMachineAddress, 0, machineAddress.getBytes().length);
+//
+// // 待查询报警类型
+// findContion.nAlarmType = EM_FACERECOGNITION_ALARM_TYPE.NET_FACERECOGNITION_ALARM_TYPE_ALL;
+
+// // 人员组数
+// findContion.nGroupIdNum = 1;
+//
+// // 人员组ID(人脸库ID)
+// String groupId = "";
+// System.arraycopy(groupId.getBytes(), 0, findContion.szGroupIdArr[0].szGroupId, 0, groupId.getBytes().length);
+//
+// // 人员信息扩展是否有效
+// findContion.abPersonInfoEx = 1;
+//
+// // 人员组ID(人脸库ID)
+// System.arraycopy(groupId.getBytes(), 0, findContion.stPersonInfoEx.szGroupID, 0, groupId.getBytes().length);
+
+ findContion.write();
+ lFindHandle = LoginModule.netsdk.CLIENT_FindFileEx(LoginModule.m_hLoginHandle, type, findContion.getPointer(), null, 3000);
+ if(lFindHandle.longValue() == 0) {
+ System.err.println("FindFileEx Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+ findContion.read();
+
+ return true;
+ }
+
+
+ /**
+ * 查询对比数据
+ * @param nFindCount 每次查询的个数
+ */
+ public static MEDIAFILE_FACERECOGNITION_INFO[] findNextFile(int nFindCount) {
+ MEDIAFILE_FACERECOGNITION_INFO[] msg = new MEDIAFILE_FACERECOGNITION_INFO[nFindCount];
+ for (int i = 0; i < msg.length; ++i) {
+ msg[i] = new NetSDKLib.MEDIAFILE_FACERECOGNITION_INFO();
+ msg[i].bUseCandidatesEx = 1;
+ }
+
+ int MemorySize = msg[0].size() * nFindCount;
+ Pointer pointer = new Memory(MemorySize);
+ pointer.clear(MemorySize);
+
+ ToolKits.SetStructArrToPointerData(msg, pointer);
+
+ int nRetCount = LoginModule.netsdk.CLIENT_FindNextFileEx(lFindHandle, nFindCount, pointer, MemorySize, null, 3000);
+ ToolKits.GetPointerDataToStructArr(pointer, msg);
+
+ if (nRetCount <= 0) {
+ System.err.println("FindNextFileEx failed!" + ToolKits.getErrorCodePrint());
+ return null;
+ }
+
+ MEDIAFILE_FACERECOGNITION_INFO[] retInfo = new MEDIAFILE_FACERECOGNITION_INFO[nRetCount];
+ for (int i = 0; i < retInfo.length; ++i) {
+ retInfo[i] = new NetSDKLib.MEDIAFILE_FACERECOGNITION_INFO();
+ retInfo[i] = msg[i];
+ }
+
+ return retInfo;
+ }
+
+ public static void findCloseFile() {
+ if(lFindHandle.longValue() != 0) {
+ LoginModule.netsdk.CLIENT_FindCloseEx(lFindHandle);
+ lFindHandle.setValue(0);
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/module/GateModule.java b/src/main/java/com/netsdk/demo/module/GateModule.java
new file mode 100644
index 0000000..f23d77c
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/GateModule.java
@@ -0,0 +1,702 @@
+package com.netsdk.demo.module;
+
+import java.io.UnsupportedEncodingException;
+
+import com.sun.jna.Memory;
+import com.sun.jna.ptr.IntByReference;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.*;
+import com.netsdk.lib.ToolKits;
+
+public class GateModule {
+ // 查询句柄
+ private static LLong m_lFindHandle = new LLong(0);
+
+ /**
+ * 订阅实时上传智能分析数据
+ * @return
+ */
+ public static LLong realLoadPic(int ChannelId, NetSDKLib.fAnalyzerDataCallBack m_AnalyzerDataCB) {
+ /**
+ * 说明:
+ * 通道数可以在有登录是返回的信息 m_stDeviceInfo.byChanNum 获取
+ * 下列仅订阅了0通道的智能事件.
+ */
+ int bNeedPicture = 1; // 是否需要图片
+
+ LLong m_hAttachHandle = LoginModule.netsdk.CLIENT_RealLoadPictureEx(LoginModule.m_hLoginHandle, ChannelId, NetSDKLib.EVENT_IVS_ALL,
+ bNeedPicture , m_AnalyzerDataCB , null , null);
+ if( m_hAttachHandle.longValue() != 0 ) {
+ System.out.println("CLIENT_RealLoadPictureEx Success ChannelId : \n" + ChannelId);
+ } else {
+ System.err.println("CLIENT_RealLoadPictureEx Failed!" + ToolKits.getErrorCodePrint());
+ return null;
+ }
+
+ return m_hAttachHandle;
+ }
+
+ /**
+ * 停止上传智能分析数据-图片
+ */
+ public static void stopRealLoadPic(LLong m_hAttachHandle) {
+ if (0 != m_hAttachHandle.longValue()) {
+ LoginModule.netsdk.CLIENT_StopLoadPic(m_hAttachHandle);
+ System.out.println("Stop detach IVS event");
+ m_hAttachHandle.setValue(0);
+ }
+ }
+
+ ////////////////////////////////////// 卡信息的增、删、改、清空 ////////////////////////////////////////
+
+ /**
+ * 添加卡
+ * @param cardNo 卡号
+ * @param userId 用户ID
+ * @param cardName 卡名
+ * @param cardPwd 卡密码
+ * @param cardStatus 卡状态
+ * @param cardType 卡类型
+ * @param useTimes 使用次数
+ * @param isFirstEnter 是否首卡, 1-true, 0-false
+ * @param isValid 是否有效, 1-true, 0-false
+ * @param startValidTime 有效开始时间
+ * @param endValidTime 有效结束时间
+ * @return true:成功 false:失败
+ */
+ public static boolean insertCard(String cardNo, String userId, String cardName, String cardPwd,
+ int cardStatus, int cardType, int useTimes, int isFirstEnter,
+ int isValid, String startValidTime, String endValidTime) {
+ /**
+ * 门禁卡记录集信息
+ */
+ NET_RECORDSET_ACCESS_CTL_CARD accessCardInfo = new NET_RECORDSET_ACCESS_CTL_CARD();
+
+ // 卡号
+ System.arraycopy(cardNo.getBytes(), 0, accessCardInfo.szCardNo, 0, cardNo.getBytes().length);
+
+ // 用户ID
+ System.arraycopy(userId.getBytes(), 0, accessCardInfo.szUserID, 0, userId.getBytes().length);
+
+ // 卡名(设备上显示的姓名)
+ try {
+ System.arraycopy(cardName.getBytes("GBK"), 0, accessCardInfo.szCardName, 0, cardName.getBytes("GBK").length);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ // 卡密码
+ System.arraycopy(cardPwd.getBytes(), 0, accessCardInfo.szPsw, 0, cardPwd.getBytes().length);
+
+ //-- 设置开门权限
+ accessCardInfo.nDoorNum = 2;
+ accessCardInfo.sznDoors[0] = 0;
+ accessCardInfo.sznDoors[1] = 1;
+ accessCardInfo.nTimeSectionNum = 2; // 与门数对应
+ accessCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效
+ accessCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效
+
+ // 卡状态
+ accessCardInfo.emStatus = cardStatus;
+
+ // 卡类型
+ accessCardInfo.emType = cardType;
+
+ // 使用次数
+ accessCardInfo.nUserTime = useTimes;
+
+ // 是否首卡
+ accessCardInfo.bFirstEnter = isFirstEnter;
+
+ // 是否有效
+ accessCardInfo.bIsValid = isValid;
+
+ // 有效开始时间
+ String[] startTimes = startValidTime.split(" ");
+ accessCardInfo.stuValidStartTime.dwYear = Integer.parseInt(startTimes[0].split("-")[0]);
+ accessCardInfo.stuValidStartTime.dwMonth = Integer.parseInt(startTimes[0].split("-")[1]);
+ accessCardInfo.stuValidStartTime.dwDay = Integer.parseInt(startTimes[0].split("-")[2]);
+ accessCardInfo.stuValidStartTime.dwHour = Integer.parseInt(startTimes[1].split(":")[0]);
+ accessCardInfo.stuValidStartTime.dwMinute = Integer.parseInt(startTimes[1].split(":")[1]);
+ accessCardInfo.stuValidStartTime.dwSecond = Integer.parseInt(startTimes[01].split(":")[2]);
+
+ // 有效结束时间
+ String[] endTimes = endValidTime.split(" ");
+ accessCardInfo.stuValidEndTime.dwYear = Integer.parseInt(endTimes[0].split("-")[0]);
+ accessCardInfo.stuValidEndTime.dwMonth = Integer.parseInt(endTimes[0].split("-")[1]);
+ accessCardInfo.stuValidEndTime.dwDay = Integer.parseInt(endTimes[0].split("-")[2]);
+ accessCardInfo.stuValidEndTime.dwHour = Integer.parseInt(endTimes[1].split(":")[0]);
+ accessCardInfo.stuValidEndTime.dwMinute = Integer.parseInt(endTimes[1].split(":")[1]);
+ accessCardInfo.stuValidEndTime.dwSecond = Integer.parseInt(endTimes[1].split(":")[2]);
+
+ /**
+ * 记录集操作
+ */
+ NET_CTRL_RECORDSET_INSERT_PARAM insert = new NET_CTRL_RECORDSET_INSERT_PARAM();
+ insert.stuCtrlRecordSetInfo.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; // 记录集类型
+ insert.stuCtrlRecordSetInfo.pBuf = accessCardInfo.getPointer();
+
+ accessCardInfo.write();
+ insert.write();
+ boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle,
+ CtrlType.CTRLTYPE_CTRL_RECORDSET_INSERT, insert.getPointer(), 5000);
+ insert.read();
+ accessCardInfo.read();
+
+ if(!bRet) {
+ System.err.println("添加卡信息失败." + ToolKits.getErrorCodePrint());
+ return false;
+ } else {
+ System.out.println("添加卡信息成功,卡信息记录集编号 : " + insert.stuCtrlRecordSetResult.nRecNo);
+ }
+
+ return true;
+ }
+
+ /**
+ * 修改卡信息
+ * @param recordNo 记录集编号
+ * @param cardNo 卡号
+ * @param userId 用户ID
+ * @param cardName 卡名
+ * @param cardPwd 卡密码
+ * @param cardStatus 卡状态
+ * @param cardType 卡类型
+ * @param useTimes 使用次数
+ * @param isFirstEnter 是否首卡, 1-true, 0-false
+ * @param isValid 是否有效, 1-true, 0-false
+ * @param startValidTime 有效开始时间
+ * @param endValidTime 有效结束时间
+ * @return true:成功 false:失败
+ */
+ public static boolean modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd,
+ int cardStatus, int cardType, int useTimes, int isFirstEnter,
+ int isValid, String startValidTime, String endValidTime) {
+ /**
+ * 门禁卡记录集信息
+ */
+ NET_RECORDSET_ACCESS_CTL_CARD accessCardInfo = new NET_RECORDSET_ACCESS_CTL_CARD();
+ // 记录集编号, 修改、删除卡信息必须填写
+ accessCardInfo.nRecNo = recordNo;
+
+ // 卡号
+ System.arraycopy(cardNo.getBytes(), 0, accessCardInfo.szCardNo, 0, cardNo.getBytes().length);
+
+ // 用户ID
+ System.arraycopy(userId.getBytes(), 0, accessCardInfo.szUserID, 0, userId.getBytes().length);
+
+ // 卡名(设备上显示的姓名)
+ try {
+ System.arraycopy(cardName.getBytes("GBK"), 0, accessCardInfo.szCardName, 0, cardName.getBytes("GBK").length);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ // 卡密码
+ System.arraycopy(cardPwd.getBytes(), 0, accessCardInfo.szPsw, 0, cardPwd.getBytes().length);
+
+ //-- 设置开门权限
+ accessCardInfo.nDoorNum = 2;
+ accessCardInfo.sznDoors[0] = 0;
+ accessCardInfo.sznDoors[1] = 1;
+ accessCardInfo.nTimeSectionNum = 2; // 与门数对应
+ accessCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效
+ accessCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效
+
+ // 卡状态
+ accessCardInfo.emStatus = cardStatus;
+
+ // 卡类型
+ accessCardInfo.emType = cardType;
+
+ // 使用次数
+ accessCardInfo.nUserTime = useTimes;
+
+ // 是否首卡
+ accessCardInfo.bFirstEnter = isFirstEnter;
+
+ // 是否有效
+ accessCardInfo.bIsValid = isValid;
+
+ // 有效开始时间
+ String[] startTimes = startValidTime.split(" ");
+ accessCardInfo.stuValidStartTime.dwYear = Integer.parseInt(startTimes[0].split("-")[0]);
+ accessCardInfo.stuValidStartTime.dwMonth = Integer.parseInt(startTimes[0].split("-")[1]);
+ accessCardInfo.stuValidStartTime.dwDay = Integer.parseInt(startTimes[0].split("-")[2]);
+ accessCardInfo.stuValidStartTime.dwHour = Integer.parseInt(startTimes[1].split(":")[0]);
+ accessCardInfo.stuValidStartTime.dwMinute = Integer.parseInt(startTimes[1].split(":")[1]);
+ accessCardInfo.stuValidStartTime.dwSecond = Integer.parseInt(startTimes[01].split(":")[2]);
+
+ // 有效结束时间
+ String[] endTimes = endValidTime.split(" ");
+ accessCardInfo.stuValidEndTime.dwYear = Integer.parseInt(endTimes[0].split("-")[0]);
+ accessCardInfo.stuValidEndTime.dwMonth = Integer.parseInt(endTimes[0].split("-")[1]);
+ accessCardInfo.stuValidEndTime.dwDay = Integer.parseInt(endTimes[0].split("-")[2]);
+ accessCardInfo.stuValidEndTime.dwHour = Integer.parseInt(endTimes[1].split(":")[0]);
+ accessCardInfo.stuValidEndTime.dwMinute = Integer.parseInt(endTimes[1].split(":")[1]);
+ accessCardInfo.stuValidEndTime.dwSecond = Integer.parseInt(endTimes[1].split(":")[2]);
+
+ /**
+ * 记录集操作
+ */
+ NET_CTRL_RECORDSET_PARAM update = new NET_CTRL_RECORDSET_PARAM();
+ update.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; // 记录集信息类型
+ update.pBuf = accessCardInfo.getPointer();
+
+ accessCardInfo.write();
+ update.write();
+ boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle,
+ CtrlType.CTRLTYPE_CTRL_RECORDSET_UPDATE, update.getPointer(), 5000);
+ update.read();
+ accessCardInfo.read();
+
+ if(!bRet) {
+ System.err.println("修改卡信息失败." + ToolKits.getErrorCodePrint());
+ return false;
+ } else {
+ System.out.println("修改卡信息成功 ");
+ }
+
+ return true;
+ }
+
+ /**
+ * 删除卡信息(单个删除)
+ * @param recordNo 记录集编号
+ */
+ public static boolean deleteCard(int recordNo) {
+ /**
+ * 记录集操作
+ */
+ NET_CTRL_RECORDSET_PARAM msg = new NET_CTRL_RECORDSET_PARAM();
+ msg.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD;
+ msg.pBuf = new IntByReference(recordNo).getPointer();
+
+ msg.write();
+ boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle,
+ CtrlType.CTRLTYPE_CTRL_RECORDSET_REMOVE, msg.getPointer(), 5000);
+ msg.read();
+
+ if(!bRet){
+ System.err.println("删除卡信息失败." + ToolKits.getErrorCodePrint());
+ } else {
+ System.out.println("删除卡信息成功.");
+ }
+
+ return bRet;
+ }
+
+ /**
+ * 清除所有卡信息
+ */
+ public static boolean clearCard() {
+ /**
+ * 记录集操作
+ */
+ NetSDKLib.NET_CTRL_RECORDSET_PARAM msg = new NetSDKLib.NET_CTRL_RECORDSET_PARAM();
+ msg.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; // 门禁卡记录集信息类型
+
+ msg.write();
+ boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle,
+ CtrlType.CTRLTYPE_CTRL_RECORDSET_CLEAR, msg.getPointer(), 5000);
+ msg.read();
+ if(!bRet){
+ System.err.println("清空卡信息失败." + ToolKits.getErrorCodePrint());
+ } else {
+ System.out.println("清空卡信息成功.");
+ }
+
+ return bRet;
+ }
+
+
+ ///////////////////////////////// 人脸的增、删、改、清空 ///////////////////////////////////////
+
+ /**
+ * 添加人脸
+ * @param userId 用户ID
+ * @param memory 图片缓存
+ * @return
+ */
+ public static boolean addFaceInfo(String userId, Memory memory) {
+ int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_ADD; // 添加
+
+ /**
+ * 入参
+ */
+ NET_IN_ADD_FACE_INFO stIn = new NET_IN_ADD_FACE_INFO();
+
+ // 用户ID
+ System.arraycopy(userId.getBytes(), 0, stIn.szUserID, 0, userId.getBytes().length);
+
+ // 人脸照片个数
+ stIn.stuFaceInfo.nFacePhoto = 1;
+
+ // 每张图片的大小
+ stIn.stuFaceInfo.nFacePhotoLen[0] = (int) memory.size();
+
+ // 人脸照片数据,大小不超过100K, 图片格式为jpg
+ stIn.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto = memory;
+
+ /**
+ * 出参
+ */
+ NET_OUT_ADD_FACE_INFO stOut = new NET_OUT_ADD_FACE_INFO();
+
+ stIn.write();
+ stOut.write();
+ boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(LoginModule.m_hLoginHandle, emType, stIn.getPointer(), stOut.getPointer(), 5000);
+ stIn.read();
+ stOut.read();
+ if(bRet) {
+ System.out.println("添加人脸成功!");
+ } else {
+ System.err.println("添加人脸失败!" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * 修改人脸
+ * @param userId 用户ID
+ * @param memory 图片缓存
+ * @return
+ */
+ public static boolean modifyFaceInfo(String userId, Memory memory) {
+ int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_UPDATE; // 修改
+
+ /**
+ * 入参
+ */
+ NET_IN_UPDATE_FACE_INFO stIn = new NET_IN_UPDATE_FACE_INFO();
+
+ // 用户ID
+ System.arraycopy(userId.getBytes(), 0, stIn.szUserID, 0, userId.getBytes().length);
+
+ // 人脸照片个数
+ stIn.stuFaceInfo.nFacePhoto = 1;
+
+ // 每张图片的大小
+ stIn.stuFaceInfo.nFacePhotoLen[0] = (int) memory.size();
+
+ // 人脸照片数据,大小不超过100K, 图片格式为jpg
+ stIn.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto = memory;
+
+ /**
+ * 出参
+ */
+ NET_OUT_UPDATE_FACE_INFO stOut = new NET_OUT_UPDATE_FACE_INFO();
+
+ stIn.write();
+ stOut.write();
+ boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(LoginModule.m_hLoginHandle, emType, stIn.getPointer(), stOut.getPointer(), 5000);
+ stIn.read();
+ stOut.read();
+ if(bRet) {
+ System.out.println("修改人脸成功!");
+ } else {
+ System.err.println("修改人脸失败!" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * 删除人脸(单个删除)
+ * @param userId 用户ID
+ */
+ public static boolean deleteFaceInfo(String userId) {
+ int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_REMOVE;
+
+ /**
+ * 入参
+ */
+ NET_IN_REMOVE_FACE_INFO inRemove = new NET_IN_REMOVE_FACE_INFO();
+
+ // 用户ID
+ System.arraycopy(userId.getBytes(), 0, inRemove.szUserID, 0, userId.getBytes().length);
+
+ /**
+ * 出参
+ */
+ NET_OUT_REMOVE_FACE_INFO outRemove = new NET_OUT_REMOVE_FACE_INFO();
+
+ inRemove.write();
+ outRemove.write();
+ boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(LoginModule.m_hLoginHandle, emType, inRemove.getPointer(), outRemove.getPointer(), 5000);
+ inRemove.read();
+ outRemove.read();
+ if(bRet) {
+ System.out.println("删除人脸成功!");
+ } else {
+ System.err.println("删除人脸失败!" + ToolKits.getErrorCodePrint());
+ }
+
+ return bRet;
+ }
+
+ /**
+ * 清除所有人脸
+ */
+ public static boolean clearFaceInfo() {
+ int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_CLEAR; // 清除
+
+ /**
+ * 入参
+ */
+ NET_IN_CLEAR_FACE_INFO stIn = new NET_IN_CLEAR_FACE_INFO();
+
+ /**
+ * 出参
+ */
+ NET_OUT_REMOVE_FACE_INFO stOut = new NET_OUT_REMOVE_FACE_INFO();
+
+ stIn.write();
+ stOut.write();
+ boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(LoginModule.m_hLoginHandle, emType,
+ stIn.getPointer(), stOut.getPointer(), 5000);
+ stIn.read();
+ stOut.read();
+ if(bRet) {
+ System.out.println("清空人脸成功!");
+ } else {
+ System.err.println("清空人脸失败!" + ToolKits.getErrorCodePrint());
+ }
+
+ return bRet;
+ }
+
+ /**
+ * 查询卡信息,获取查询句柄
+ * @param cardNo 卡号,为空,查询所有的
+ * @return
+ */
+ public static boolean findCard(String cardNo,String userId) {
+ /**
+ * 查询条件
+ */
+ NetSDKLib.FIND_RECORD_ACCESSCTLCARD_CONDITION findCondition = new NetSDKLib.FIND_RECORD_ACCESSCTLCARD_CONDITION();
+
+ if(!cardNo.isEmpty()) {
+ // 卡号查询条件是否有效
+ findCondition.abCardNo = 1;
+
+ // 卡号
+ System.arraycopy(cardNo.getBytes(), 0, findCondition.szCardNo, 0, cardNo.getBytes().length);
+ }
+
+ if(!userId.isEmpty()) {
+ // 用户Id查询条件是否有效
+ findCondition.abUserID = 1;
+
+ // 用户Id
+ System.arraycopy(userId.getBytes(), 0, findCondition.szUserID, 0, cardNo.getBytes().length);
+ }
+
+ /**
+ * CLIENT_FindRecord 接口入参
+ */
+ NetSDKLib.NET_IN_FIND_RECORD_PARAM stIn = new NetSDKLib.NET_IN_FIND_RECORD_PARAM();
+ stIn.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD;
+ if(!cardNo.isEmpty()) {
+ stIn.pQueryCondition = findCondition.getPointer();
+ }
+
+ /**
+ * CLIENT_FindRecord 接口出参
+ */
+ NetSDKLib.NET_OUT_FIND_RECORD_PARAM stOut = new NetSDKLib.NET_OUT_FIND_RECORD_PARAM();
+
+ findCondition.write();
+ if(!LoginModule.netsdk.CLIENT_FindRecord(LoginModule.m_hLoginHandle, stIn, stOut, 5000)) {
+ System.err.println("没查到卡信息!" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+ findCondition.read();
+
+ m_lFindHandle = stOut.lFindeHandle;
+ return true;
+ }
+
+ /**
+ * 查询具体的卡信息
+ * @param nFindCount 每次查询的个数
+ * @return 返回具体的查询信息
+ */
+ public static NET_RECORDSET_ACCESS_CTL_CARD[] findNextCard(int nFindCount) {
+ // 用于申请内存
+ NET_RECORDSET_ACCESS_CTL_CARD[] pstRecord = new NET_RECORDSET_ACCESS_CTL_CARD[nFindCount];
+ for(int i = 0; i < nFindCount; i++) {
+ pstRecord[i] = new NET_RECORDSET_ACCESS_CTL_CARD();
+ }
+
+ /**
+ * CLIENT_FindNextRecord 接口入参
+ */
+ NET_IN_FIND_NEXT_RECORD_PARAM stNextIn = new NET_IN_FIND_NEXT_RECORD_PARAM();
+ stNextIn.lFindeHandle = m_lFindHandle;
+ stNextIn.nFileCount = nFindCount; //想查询的记录条数
+
+ /**
+ * CLIENT_FindNextRecord 接口出参
+ */
+ NET_OUT_FIND_NEXT_RECORD_PARAM stNextOut = new NET_OUT_FIND_NEXT_RECORD_PARAM();
+ stNextOut.nMaxRecordNum = nFindCount;
+ stNextOut.pRecordList = new Memory(pstRecord[0].dwSize * nFindCount); // 申请内存
+ stNextOut.pRecordList.clear(pstRecord[0].dwSize * nFindCount);
+
+ ToolKits.SetStructArrToPointerData(pstRecord, stNextOut.pRecordList); // 将数组内存拷贝给指针
+
+ if(LoginModule.netsdk.CLIENT_FindNextRecord(stNextIn, stNextOut, 5000)) {
+ if(stNextOut.nRetRecordNum == 0) {
+ return null;
+ }
+
+ ToolKits.GetPointerDataToStructArr(stNextOut.pRecordList, pstRecord); // 获取卡信息
+
+ // 获取有用的信息
+ NET_RECORDSET_ACCESS_CTL_CARD[] pstRecordEx = new NET_RECORDSET_ACCESS_CTL_CARD[stNextOut.nRetRecordNum];
+ for(int i = 0; i < stNextOut.nRetRecordNum; i++) {
+ pstRecordEx[i] = new NET_RECORDSET_ACCESS_CTL_CARD();
+ pstRecordEx[i] = pstRecord[i];
+ }
+
+ return pstRecordEx;
+ }
+
+ return null;
+ }
+
+ /**
+ * 关闭查询
+ */
+ public static void findCardClose() {
+ if(m_lFindHandle.longValue() != 0) {
+ LoginModule.netsdk.CLIENT_FindRecordClose(m_lFindHandle);
+ m_lFindHandle.setValue(0);
+ }
+ }
+
+
+ /**
+ * 查询进出记录信息,获取查询句柄
+ * @param time 日期,为空,查询所有的
+ * @return
+ */
+ public static boolean findRecord(NET_TIME time) {
+ /**
+ * 查询条件
+ */
+ NetSDKLib.FIND_RECORD_ACCESSCTLCARDREC_CONDITION_EX findCondition = new NetSDKLib.FIND_RECORD_ACCESSCTLCARDREC_CONDITION_EX();
+ if(time != null){
+ // 启用时间段查询是否有效
+ findCondition.bTimeEnable = 1;
+ //开始时间
+ findCondition.stStartTime.dwYear = time.dwYear;
+ findCondition.stStartTime.dwMonth = time.dwMonth;
+ findCondition.stStartTime.dwDay = time.dwDay;
+ //结束时间
+ findCondition.stEndTime.dwYear = time.dwYear;
+ findCondition.stEndTime.dwMonth = time.dwMonth;
+ findCondition.stEndTime.dwDay = time.dwDay + 1;
+ }
+
+ //启用排序
+ findCondition.nOrderNum = 1;//规则数
+ FIND_RECORD_ACCESSCTLCARDREC_ORDER order = new FIND_RECORD_ACCESSCTLCARDREC_ORDER();
+ order.emField = EM_RECORD_ACCESSCTLCARDREC_ORDER_FIELD.EM_RECORD_ACCESSCTLCARDREC_ORDER_FIELD_CREATETIME;//创建时间排序
+ order.emOrderType = EM_RECORD_ORDER_TYPE.EM_RECORD_ORDER_TYPE_ASCENT;//升序
+ findCondition.stuOrders = new FIND_RECORD_ACCESSCTLCARDREC_ORDER[1];
+ findCondition.stuOrders[0] = order;
+
+ /**
+ * CLIENT_FindRecord 接口入参
+ */
+ NetSDKLib.NET_IN_FIND_RECORD_PARAM stIn = new NetSDKLib.NET_IN_FIND_RECORD_PARAM();
+ stIn.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARDREC_EX;
+ if(time != null) {
+ stIn.pQueryCondition = findCondition.getPointer();
+ }
+
+ /**
+ * CLIENT_FindRecord 接口出参
+ */
+ NetSDKLib.NET_OUT_FIND_RECORD_PARAM stOut = new NetSDKLib.NET_OUT_FIND_RECORD_PARAM();
+
+ findCondition.write();
+ if(!LoginModule.netsdk.CLIENT_FindRecord(LoginModule.m_hLoginHandle, stIn, stOut, 5000)) {
+ System.err.println("没查到开门信息!" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+ findCondition.read();
+
+ m_lFindHandle = stOut.lFindeHandle;
+ return true;
+ }
+
+ /**
+ * 进出记录查询
+ */
+ /**
+ * 查询具体的卡信息
+ * @param nFindCount 每次查询的个数
+ * @return 返回具体的查询信息
+ */
+ public static NET_RECORDSET_ACCESS_CTL_CARDREC[] findNextRecord(int nFindCount) {
+ // 用于申请内存
+ NET_RECORDSET_ACCESS_CTL_CARDREC[] pstRecord = new NET_RECORDSET_ACCESS_CTL_CARDREC[nFindCount];
+ for(int i = 0; i < nFindCount; i++) {
+ pstRecord[i] = new NET_RECORDSET_ACCESS_CTL_CARDREC();
+ }
+
+ /**
+ * CLIENT_FindNextRecord 接口入参
+ */
+ NET_IN_FIND_NEXT_RECORD_PARAM stNextIn = new NET_IN_FIND_NEXT_RECORD_PARAM();
+ stNextIn.lFindeHandle = m_lFindHandle;
+ stNextIn.nFileCount = nFindCount; //想查询的记录条数
+
+ /**
+ * CLIENT_FindNextRecord 接口出参
+ */
+ NET_OUT_FIND_NEXT_RECORD_PARAM stNextOut = new NET_OUT_FIND_NEXT_RECORD_PARAM();
+ stNextOut.nMaxRecordNum = nFindCount;
+ stNextOut.pRecordList = new Memory(pstRecord[0].dwSize * nFindCount); // 申请内存
+ stNextOut.pRecordList.clear(pstRecord[0].dwSize * nFindCount);
+
+ ToolKits.SetStructArrToPointerData(pstRecord, stNextOut.pRecordList); // 将数组内存拷贝给指针
+
+ if(LoginModule.netsdk.CLIENT_FindNextRecord(stNextIn, stNextOut, 5000)) {
+ if(stNextOut.nRetRecordNum == 0) {
+ return null;
+ }
+
+ ToolKits.GetPointerDataToStructArr(stNextOut.pRecordList, pstRecord); // 获取卡信息
+
+ // 获取有用的信息
+ NET_RECORDSET_ACCESS_CTL_CARDREC[] pstRecordEx = new NET_RECORDSET_ACCESS_CTL_CARDREC[stNextOut.nRetRecordNum];
+ for(int i = 0; i < stNextOut.nRetRecordNum; i++) {
+ pstRecordEx[i] = new NET_RECORDSET_ACCESS_CTL_CARDREC();
+ pstRecordEx[i] = pstRecord[i];
+ }
+
+ return pstRecordEx;
+ }
+
+ return null;
+ }
+
+ /**
+ * 关闭查询
+ */
+ public static void findRecordClose() {
+ if(m_lFindHandle.longValue() != 0) {
+ LoginModule.netsdk.CLIENT_FindRecordClose(m_lFindHandle);
+ m_lFindHandle.setValue(0);
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/module/LoginModule.java b/src/main/java/com/netsdk/demo/module/LoginModule.java
new file mode 100644
index 0000000..2c73527
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/LoginModule.java
@@ -0,0 +1,148 @@
+package com.netsdk.demo.module;
+
+import java.io.File;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY;
+import com.netsdk.lib.NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY;
+import com.netsdk.lib.ToolKits;
+
+import com.sun.jna.ptr.IntByReference;
+
+/**
+ * 登陆接口实现
+ * 主要有 :初始化、登陆、登出功能
+ */
+public class LoginModule {
+
+ public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
+ public static NetSDKLib configsdk = NetSDKLib.CONFIG_INSTANCE;
+
+ // 设备信息
+ public static NetSDKLib.NET_DEVICEINFO_Ex m_stDeviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
+
+ // 登陆句柄
+ public static LLong m_hLoginHandle = new LLong(0);
+
+ private static boolean bInit = false;
+ private static boolean bLogopen = false;
+
+ /**
+ * \if ENGLISH_LANG
+ * Init
+ * \else
+ * 初始化
+ * \endif
+ */
+ public static boolean init(NetSDKLib.fDisConnect disConnect, NetSDKLib.fHaveReConnect haveReConnect) {
+ bInit = netsdk.CLIENT_Init(disConnect, null);
+ if(!bInit) {
+ System.out.println("Initialize SDK failed");
+ return false;
+ }
+
+ //打开日志,可选
+ NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO();
+ File path = new File("./sdklog/");
+ if (!path.exists()) {
+ path.mkdir();
+ }
+ String logPath = path.getAbsoluteFile().getParent() + "\\sdklog\\" + ToolKits.getDate() + ".log";
+ setLog.nPrintStrategy = 0;
+ setLog.bSetFilePath = 1;
+ System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length);
+ System.out.println(logPath);
+ setLog.bSetPrintStrategy = 1;
+ bLogopen = netsdk.CLIENT_LogOpen(setLog);
+ if(!bLogopen ) {
+ System.err.println("Failed to open NetSDK log");
+ }
+
+ // 设置断线重连回调接口,设置过断线重连成功回调函数后,当设备出现断线情况,SDK内部会自动进行重连操作
+ // 此操作为可选操作,但建议用户进行设置
+ netsdk.CLIENT_SetAutoReconnect(haveReConnect, null);
+
+ //设置登录超时时间和尝试次数,可选
+ int waitTime = 5000; //登录请求响应超时时间设置为5S
+ int tryTimes = 1; //登录时尝试建立链接1次
+ netsdk.CLIENT_SetConnectTime(waitTime, tryTimes);
+
+
+ // 设置更多网络参数,NET_PARAM的nWaittime,nConnectTryNum成员与CLIENT_SetConnectTime
+ // 接口设置的登录设备超时时间和尝试次数意义相同,可选
+ NetSDKLib.NET_PARAM netParam = new NetSDKLib.NET_PARAM();
+ netParam.nConnectTime = 10000; // 登录时尝试建立链接的超时时间
+ netParam.nGetConnInfoTime = 3000; // 设置子连接的超时时间
+ netParam.nGetDevInfoTime = 3000;//获取设备信息超时时间,为0默认1000ms
+ netsdk.CLIENT_SetNetworkParam(netParam);
+
+ return true;
+ }
+
+ /**
+ * \if ENGLISH_LANG
+ * CleanUp
+ * \else
+ * 清除环境
+ * \endif
+ */
+ public static void cleanup() {
+ if(bLogopen) {
+ netsdk.CLIENT_LogClose();
+ }
+
+ if(bInit) {
+ netsdk.CLIENT_Cleanup();
+ }
+ }
+
+ /**
+ * \if ENGLISH_LANG
+ * Login Device
+ * \else
+ * 登录设备
+ * \endif
+ */
+ public static boolean login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword) {
+ //IntByReference nError = new IntByReference(0);
+ //入参
+ NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstInParam=new NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY();
+ pstInParam.nPort=m_nPort;
+ pstInParam.szIP=m_strIp.getBytes();
+ pstInParam.szPassword=m_strPassword.getBytes();
+ pstInParam.szUserName=m_strUser.getBytes();
+ //出参
+ NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam=new NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY();
+ pstOutParam.stuDeviceInfo=m_stDeviceInfo;
+ //m_hLoginHandle = netsdk.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser, m_strPassword, 0, null, m_stDeviceInfo, nError);
+ m_hLoginHandle=netsdk.CLIENT_LoginWithHighLevelSecurity(pstInParam, pstOutParam);
+ if(m_hLoginHandle.longValue() == 0) {
+ System.err.printf("Login Device[%s] Port[%d]Failed. %s\n", m_strIp, m_nPort, ToolKits.getErrorCodePrint());
+ } else {
+ System.out.println("Login Success [ " + m_strIp + " ]");
+ }
+
+ return m_hLoginHandle.longValue() == 0? false:true;
+ }
+
+ /**
+ * \if ENGLISH_LANG
+ * Logout Device
+ * \else
+ * 登出设备
+ * \endif
+ */
+ public static boolean logout() {
+ if(m_hLoginHandle.longValue() == 0) {
+ return false;
+ }
+
+ boolean bRet = netsdk.CLIENT_Logout(m_hLoginHandle);
+ if(bRet) {
+ m_hLoginHandle.setValue(0);
+ }
+
+ return bRet;
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/module/PtzControlModule.java b/src/main/java/com/netsdk/demo/module/PtzControlModule.java
new file mode 100644
index 0000000..8ba67f9
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/PtzControlModule.java
@@ -0,0 +1,206 @@
+package com.netsdk.demo.module;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 云台控制接口实现
+ * 主要有 :八个方向控制、变倍、变焦、光圈功能
+ */
+public class PtzControlModule {
+
+ /**
+ * 向上
+ */
+ public static boolean ptzControlUpStart(int nChannelID, int lParam1, int lParam2) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL,
+ lParam1, lParam2, 0, 0);
+ }
+ public static boolean ptzControlUpEnd(int nChannelID) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 向下
+ */
+ public static boolean ptzControlDownStart(int nChannelID, int lParam1, int lParam2) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL,
+ lParam1, lParam2, 0, 0);
+ }
+ public static boolean ptzControlDownEnd(int nChannelID) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 向左
+ */
+ public static boolean ptzControlLeftStart(int nChannelID, int lParam1, int lParam2) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL,
+ lParam1, lParam2, 0, 0);
+ }
+ public static boolean ptzControlLeftEnd(int nChannelID) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 向右
+ */
+ public static boolean ptzControlRightStart(int nChannelID, int lParam1,int lParam2) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL,
+ lParam1, lParam2, 0, 0);
+ }
+ public static boolean ptzControlRightEnd(int nChannelID) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 向左上
+ */
+ public static boolean ptzControlLeftUpStart(int nChannelID, int lParam1, int lParam2) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP,
+ lParam1, lParam2, 0, 0);
+ }
+ public static boolean ptzControlLeftUpEnd(int nChannelID) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 向右上
+ */
+ public static boolean ptzControlRightUpStart(int nChannelID, int lParam1, int lParam2) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP,
+ lParam1, lParam2, 0, 0);
+ }
+ public static boolean ptzControlRightUpEnd(int nChannelID) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 向左下
+ */
+ public static boolean ptzControlLeftDownStart(int nChannelID, int lParam1, int lParam2) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN,
+ lParam1, lParam2, 0, 0);
+ }
+ public static boolean ptzControlLeftDownEnd(int nChannelID) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 向右下
+ */
+ public static boolean ptzControlRightDownStart(int nChannelID, int lParam1, int lParam2) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN,
+ lParam1, lParam2, 0, 0);
+ }
+ public static boolean ptzControlRightDownEnd(int nChannelID) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 变倍+
+ */
+ public static boolean ptzControlZoomAddStart(int nChannelID, int lParam2) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL,
+ 0, lParam2, 0, 0);
+ }
+ public static boolean ptzControlZoomAddEnd(int nChannelID) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 变倍-
+ */
+ public static boolean ptzControlZoomDecStart(int nChannelID, int lParam2) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL,
+ 0, lParam2, 0, 0);
+ }
+ public static boolean ptzControlZoomDecEnd(int nChannelID) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 变焦+
+ */
+ public static boolean ptzControlFocusAddStart(int nChannelID, int lParam2) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL,
+ 0, lParam2, 0, 0);
+ }
+ public static boolean ptzControlFocusAddEnd(int nChannelID) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 变焦-
+ */
+ public static boolean ptzControlFocusDecStart(int nChannelID, int lParam2) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL,
+ 0, lParam2, 0, 0);
+ }
+ public static boolean ptzControlFocusDecEnd(int nChannelID) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 光圈+
+ */
+ public static boolean ptzControlIrisAddStart(int nChannelID, int lParam2) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL,
+ 0, lParam2, 0, 0);
+ }
+ public static boolean ptzControlIrisAddEnd(int nChannelID) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL,
+ 0, 0, 0, 1);
+ }
+
+ /**
+ * 光圈-
+ */
+ public static boolean ptzControlIrisDecStart(int nChannelID, int lParam2) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL,
+ 0, lParam2, 0, 0);
+ }
+ public static boolean ptzControlIrisDecEnd(int nChannelID) {
+ return LoginModule.netsdk.CLIENT_DHPTZControlEx(LoginModule.m_hLoginHandle, nChannelID,
+ NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL,
+ 0, 0, 0, 1);
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/module/RealPlayModule.java b/src/main/java/com/netsdk/demo/module/RealPlayModule.java
new file mode 100644
index 0000000..617e269
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/RealPlayModule.java
@@ -0,0 +1,51 @@
+package com.netsdk.demo.module;
+
+import java.awt.Panel;
+
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.ToolKits;
+
+import com.sun.jna.Native;
+
+/**
+ * 实时预览接口实现
+ * 主要有 :开始拉流、停止拉流功能
+ */
+public class RealPlayModule {
+ /**
+ * \if ENGLISH_LANG
+ * Start RealPlay
+ * \else
+ * 开始预览
+ * \endif
+ */
+ public static LLong startRealPlay(int channel, int stream, Panel realPlayWindow) {
+ LLong m_hPlayHandle = LoginModule.netsdk.CLIENT_RealPlayEx(LoginModule.m_hLoginHandle, channel, Native.getComponentPointer(realPlayWindow), stream);
+
+ if(m_hPlayHandle.longValue() == 0) {
+ System.err.println("开始实时预览失败,错误码" + ToolKits.getErrorCodePrint());
+ } else {
+ System.out.println("Success to start realplay");
+ }
+
+ return m_hPlayHandle;
+ }
+
+ /**
+ * \if ENGLISH_LANG
+ * Start RealPlay
+ * \else
+ * 停止预览
+ * \endif
+ */
+ public static void stopRealPlay(LLong m_hPlayHandle) {
+ if(m_hPlayHandle.longValue() == 0) {
+ return;
+ }
+
+ boolean bRet = LoginModule.netsdk.CLIENT_StopRealPlayEx(m_hPlayHandle);
+ if(bRet) {
+ m_hPlayHandle.setValue(0);
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/module/SearchByPictureModule.java b/src/main/java/com/netsdk/demo/module/SearchByPictureModule.java
new file mode 100644
index 0000000..5b0141b
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/SearchByPictureModule.java
@@ -0,0 +1,214 @@
+package com.netsdk.demo.module;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.NetSDKLib.*;
+
+import com.sun.jna.Memory;
+import com.sun.jna.ptr.IntByReference;
+
+/**
+ * 以图搜图接口实现,跟查询人脸库里的人员信息的查找接口是一样的,入参和实现有区别
+ * 目前只支持IVSS
+ */
+public class SearchByPictureModule {
+ // 查询密令
+ public static int nToken = 0;
+
+ private static LLong m_FindHandle = null;
+
+ // 订阅句柄
+ private static LLong attachFaceHandle = new LLong(0);
+
+ /**
+ * 按条件查询目标识别结果
+ * @param memory 图片缓存
+ * @param startTime 起始时间, 历史库需要时间,人脸库不需要时间
+ * @param endTime 结束时间, 历史库需要时间,人脸库不需要时间
+ * @param isHistory 是否是历史库, true-历史库; false-人脸库
+ * @param nChn 通道号, 历史库需要通道号,人脸库不需要通道号
+ * @param similary 相似度
+ * @return 查询到的所有人员个数
+ */
+ public static int startFindPerson(Memory memory,
+ String startTime,
+ String endTime,
+ boolean isHistory,
+ int nChn,
+ String similary) {
+
+ m_FindHandle = null;
+ nToken = 0;
+ int nTotalCount = 0;
+
+ /*
+ * 入参, IVVS设备,查询条件只有 stuInStartFind.stPerson 里的参数有效
+ */
+ NET_IN_STARTFIND_FACERECONGNITION stuIn = new NET_IN_STARTFIND_FACERECONGNITION();
+
+ // 人员信息查询条件是否有效, 并使用扩展结构体
+ stuIn.bPersonExEnable = 1;
+
+ // 图片信息
+ if(memory != null) {
+ stuIn.pBuffer = memory;
+ stuIn.nBufferLen = (int)memory.size();
+ stuIn.stPersonInfoEx.wFacePicNum = 1;
+ stuIn.stPersonInfoEx.szFacePicInfo[0].dwOffSet = 0;
+ stuIn.stPersonInfoEx.szFacePicInfo[0].dwFileLenth = (int)memory.size();
+ }
+
+ // 相似度
+ if(!similary.isEmpty()) {
+ stuIn.stMatchOptions.nSimilarity = Integer.parseInt(similary);
+ }
+
+ stuIn.stFilterInfo.nGroupIdNum = 0;
+ stuIn.stFilterInfo.nRangeNum = 1;
+
+ if(isHistory) { // 历史库
+ // 通道号
+ stuIn.nChannelID = nChn;
+ stuIn.stFilterInfo.szRange[0] = EM_FACE_DB_TYPE.NET_FACE_DB_TYPE_HISTORY; // 待查询数据库类型,设备只支持一个
+ // 开始时间
+ String[] startTimeStr = startTime.split("-");
+ stuIn.stFilterInfo.stStartTime.dwYear = Integer.parseInt(startTimeStr[0]);
+ stuIn.stFilterInfo.stStartTime.dwMonth = Integer.parseInt(startTimeStr[1]);
+ stuIn.stFilterInfo.stStartTime.dwDay = Integer.parseInt(startTimeStr[2]);
+ stuIn.stFilterInfo.stStartTime.dwHour= 0;
+ stuIn.stFilterInfo.stStartTime.dwMinute= 0;
+ stuIn.stFilterInfo.stStartTime.dwSecond= 0;
+ // 结束时间
+ String[] endTimeStr = endTime.split("-");
+ stuIn.stFilterInfo.stEndTime.dwYear = Integer.parseInt(endTimeStr[0]);
+ stuIn.stFilterInfo.stEndTime.dwMonth = Integer.parseInt(endTimeStr[1]);
+ stuIn.stFilterInfo.stEndTime.dwDay = Integer.parseInt(endTimeStr[2]);
+ stuIn.stFilterInfo.stEndTime.dwHour=23;
+ stuIn.stFilterInfo.stEndTime.dwMinute=59;
+ stuIn.stFilterInfo.stEndTime.dwSecond=59;
+ stuIn.stFilterInfo.emFaceType = EM_FACERECOGNITION_FACE_TYPE.EM_FACERECOGNITION_FACE_TYPE_ALL;
+ } else { // 人脸库
+ stuIn.stFilterInfo.szRange[0] = EM_FACE_DB_TYPE.NET_FACE_DB_TYPE_BLACKLIST; // 待查询数据库类型,设备只支持一个
+ }
+
+ /*
+ * 出参
+ */
+ NET_OUT_STARTFIND_FACERECONGNITION stuOut = new NET_OUT_STARTFIND_FACERECONGNITION();
+ stuIn.write();
+ stuOut.write();
+ if(LoginModule.netsdk.CLIENT_StartFindFaceRecognition(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000)) {
+ m_FindHandle = stuOut.lFindHandle;
+ nTotalCount = stuOut.nTotalCount;
+ nToken = stuOut.nToken;
+ } else {
+ System.out.println("CLIENT_StartFindFaceRecognition Failed, Error:" + ToolKits.getErrorCodePrint());
+ }
+
+ return nTotalCount;
+ }
+
+ /**
+ * 查找目标识别结果
+ * @param beginNum 查询起始序号
+ * @param nCount 当前想查询的记录条数
+ * @return 返回的人员信息数组
+ */
+ public static CANDIDATE_INFOEX[] doFindNextPerson(int beginNum, int nCount) {
+ /*
+ *入参
+ */
+ NetSDKLib.NET_IN_DOFIND_FACERECONGNITION stuIn = new NetSDKLib.NET_IN_DOFIND_FACERECONGNITION();
+ stuIn.lFindHandle = m_FindHandle;
+ stuIn.nCount = nCount; // 当前想查询的记录条数
+ stuIn.nBeginNum = beginNum; // 查询起始序号
+
+ /*
+ * 出参
+ */
+ NetSDKLib.NET_OUT_DOFIND_FACERECONGNITION stuOut = new NetSDKLib.NET_OUT_DOFIND_FACERECONGNITION();;
+ stuOut.bUseCandidatesEx = 1; // 是否使用候选对象扩展结构体
+
+ // 必须申请内存,每次查询几个,必须至少申请几个,最大申请20个
+ for(int i = 0; i < nCount; i++) {
+ stuOut.stuCandidatesEx[i].stPersonInfo.szFacePicInfo[0].nFilePathLen = 256;
+ stuOut.stuCandidatesEx[i].stPersonInfo.szFacePicInfo[0].pszFilePath = new Memory(256);
+ }
+
+ stuIn.write();
+ stuOut.write();
+ if(LoginModule.netsdk.CLIENT_DoFindFaceRecognition(stuIn, stuOut, 4000)) {
+ stuIn.read();
+ stuOut.read();
+
+ if(stuOut.nCadidateExNum == 0) {
+ return null;
+ }
+
+ // 获取到的信息
+ CANDIDATE_INFOEX[] stuCandidatesEx = new CANDIDATE_INFOEX[stuOut.nCadidateExNum];
+ for(int i = 0; i < stuOut.nCadidateExNum; i++) {
+ stuCandidatesEx[i] = new CANDIDATE_INFOEX();
+ stuCandidatesEx[i] = stuOut.stuCandidatesEx[i];
+ }
+
+ return stuCandidatesEx;
+ } else {
+ System.out.println("CLIENT_DoFindFaceRecognition Failed, Error:" + ToolKits.getErrorCodePrint());
+ }
+
+ return null;
+ }
+
+ /**
+ * 结束查询
+ */
+ public static boolean doFindClosePerson() {
+ boolean bRet = false;
+ if(m_FindHandle.longValue() != 0) {
+ bRet = LoginModule.netsdk.CLIENT_StopFindFaceRecognition(m_FindHandle);
+ }
+ return bRet;
+ }
+
+ /**
+ * 订阅人脸查询状态
+ * @param faceFindStateCb 人脸状态回调函数
+ * @return
+ */
+ public static boolean attachFaceFindState(fFaceFindState faceFindStateCb) {
+ /*
+ * 入参
+ */
+ NET_IN_FACE_FIND_STATE stuIn = new NET_IN_FACE_FIND_STATE();
+ stuIn.nTokenNum = 1;
+ stuIn.nTokens = new IntByReference(nToken); // 查询令牌
+ stuIn.cbFaceFindState = faceFindStateCb;
+
+ /*
+ * 出参
+ */
+ NET_OUT_FACE_FIND_STATE stuOut = new NET_OUT_FACE_FIND_STATE();
+
+ stuIn.write();
+ attachFaceHandle = LoginModule.netsdk.CLIENT_AttachFaceFindState(LoginModule.m_hLoginHandle, stuIn, stuOut, 4000);
+ stuIn.read();
+
+ if(attachFaceHandle.longValue() != 0) {
+ System.out.println("AttachFaceFindState Succeed!");
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * 关闭订阅
+ */
+ public static void detachFaceFindState() {
+ if(attachFaceHandle.longValue() != 0) {
+ LoginModule.netsdk.CLIENT_DetachFaceFindState(attachFaceHandle);
+ attachFaceHandle.setValue(0);
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/module/TalkModule.java b/src/main/java/com/netsdk/demo/module/TalkModule.java
new file mode 100644
index 0000000..2c21108
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/TalkModule.java
@@ -0,0 +1,162 @@
+package com.netsdk.demo.module;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.ToolKits;
+
+import com.sun.jna.Pointer;
+import com.sun.jna.ptr.IntByReference;
+
+/**
+ * \if ENGLISH_LANG
+ * Talk Interface
+ * contains:start talk、stop talk and audio data callback implement class
+ * \else
+ * 语音对讲接口实现
+ * 包含: 开始通话、结束通话、语音对讲的数据回调实现类
+ * \endif
+ */
+public class TalkModule {
+
+ public static LLong m_hTalkHandle = new LLong(0); // 语音对讲句柄
+
+ private static boolean m_bRecordStatus = false; // 是否正在录音
+
+ /**
+ * \if ENGLISH_LANG
+ * Start Talk
+ * \else
+ * 开始通话
+ * \endif
+ */
+ public static boolean startTalk(int transferType, int chn) {
+
+ // 设置语音对讲编码格式
+ NetSDKLib.NETDEV_TALKDECODE_INFO talkEncode = new NetSDKLib.NETDEV_TALKDECODE_INFO();
+ talkEncode.encodeType = NetSDKLib.NET_TALK_CODING_TYPE.NET_TALK_PCM;
+ talkEncode.dwSampleRate = 8000;
+ talkEncode.nAudioBit = 16;
+ talkEncode.nPacketPeriod = 25;
+ talkEncode.write();
+ if(LoginModule.netsdk.CLIENT_SetDeviceMode(LoginModule.m_hLoginHandle, NetSDKLib.EM_USEDEV_MODE.NET_TALK_ENCODE_TYPE, talkEncode.getPointer())) {
+ System.out.println("Set Talk Encode Type Succeed!");
+ } else {
+ System.err.println("Set Talk Encode Type Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+
+ // 设置语音对讲喊话参数
+ NetSDKLib.NET_SPEAK_PARAM speak = new NetSDKLib.NET_SPEAK_PARAM();
+ speak.nMode = 0;
+ speak.bEnableWait = false;
+ speak.nSpeakerChannel = 0;
+ speak.write();
+
+ if (LoginModule.netsdk.CLIENT_SetDeviceMode(LoginModule.m_hLoginHandle, NetSDKLib.EM_USEDEV_MODE.NET_TALK_SPEAK_PARAM, speak.getPointer())) {
+ System.out.println("Set Talk Speak Mode Succeed!");
+ } else {
+ System.err.println("Set Talk Speak Mode Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+
+ // 设置语音对讲是否为转发模式
+ NetSDKLib.NET_TALK_TRANSFER_PARAM talkTransfer = new NetSDKLib.NET_TALK_TRANSFER_PARAM();
+ talkTransfer.bTransfer = transferType;
+ talkTransfer.write();
+ if(LoginModule.netsdk.CLIENT_SetDeviceMode(LoginModule.m_hLoginHandle, NetSDKLib.EM_USEDEV_MODE.NET_TALK_TRANSFER_MODE, talkTransfer.getPointer())) {
+ System.out.println("Set Talk Transfer Mode Succeed!");
+ } else {
+ System.err.println("Set Talk Transfer Mode Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+
+ if (talkTransfer.bTransfer == 1) { // 转发模式设置转发通道
+
+ IntByReference nChn = new IntByReference(chn);
+ if(LoginModule.netsdk.CLIENT_SetDeviceMode(LoginModule.m_hLoginHandle, NetSDKLib.EM_USEDEV_MODE.NET_TALK_TALK_CHANNEL, nChn.getPointer())) {
+ System.out.println("Set Talk Channel Succeed!");
+ } else {
+ System.err.println("Set Talk Channel Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+ }
+
+
+ m_hTalkHandle = LoginModule.netsdk.CLIENT_StartTalkEx(LoginModule.m_hLoginHandle, AudioDataCB.getInstance(), null);
+
+ if(m_hTalkHandle.longValue() == 0) {
+ System.err.println("Start Talk Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ } else {
+ System.out.println("Start Talk Success");
+ if(LoginModule.netsdk.CLIENT_RecordStart()){
+ System.out.println("Start Record Success");
+ m_bRecordStatus = true;
+ } else {
+ System.err.println("Start Local Record Failed!" + ToolKits.getErrorCodePrint());
+ stopTalk();
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * \if ENGLISH_LANG
+ * Stop Talk
+ * \else
+ * 结束通话
+ * \endif
+ */
+ public static void stopTalk() {
+ if(m_hTalkHandle.longValue() == 0) {
+ return;
+ }
+
+ if (m_bRecordStatus){
+ LoginModule.netsdk.CLIENT_RecordStop();
+ m_bRecordStatus = false;
+ }
+
+ if(LoginModule.netsdk.CLIENT_StopTalkEx(m_hTalkHandle)) {
+ m_hTalkHandle.setValue(0);
+ }else {
+ System.err.println("Stop Talk Failed!" + ToolKits.getErrorCodePrint());
+ }
+ }
+
+ /**
+ * \if ENGLISH_LANG
+ * Audio Data Callback
+ * \else
+ * 语音对讲的数据回调
+ * \endif
+ */
+ private static class AudioDataCB implements NetSDKLib.pfAudioDataCallBack {
+
+ private AudioDataCB() {}
+ private static AudioDataCB audioCallBack = new AudioDataCB();
+
+ public static AudioDataCB getInstance() {
+ return audioCallBack;
+ }
+
+ public void invoke(LLong lTalkHandle, Pointer pDataBuf, int dwBufSize, byte byAudioFlag, Pointer dwUser){
+
+ if(lTalkHandle.longValue() != m_hTalkHandle.longValue()) {
+ return;
+ }
+
+ if (byAudioFlag == 0) { // 将收到的本地PC端检测到的声卡数据发送给设备端
+
+ LLong lSendSize = LoginModule.netsdk.CLIENT_TalkSendData(m_hTalkHandle, pDataBuf, dwBufSize);
+ if(lSendSize.longValue() != (long)dwBufSize) {
+ System.err.println("send incomplete" + lSendSize.longValue() + ":" + dwBufSize);
+ }
+ }else if (byAudioFlag == 1) { // 将收到的设备端发送过来的语音数据传给SDK解码播放
+ LoginModule.netsdk.CLIENT_AudioDecEx(m_hTalkHandle, pDataBuf, dwBufSize);
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/module/ThermalCameraModule.java b/src/main/java/com/netsdk/demo/module/ThermalCameraModule.java
new file mode 100644
index 0000000..94f10c4
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/ThermalCameraModule.java
@@ -0,0 +1,273 @@
+package com.netsdk.demo.module;
+
+import java.io.IOException;
+
+import com.netsdk.lib.ImageAlgLib;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.*;
+
+
+public class ThermalCameraModule {
+
+ static ImageAlgLib imageAlgApi = ImageAlgLib.IMAGEALG_INSTANCE;
+
+ public static class ThermalCameraStatus {
+ public boolean bSearching = false; // 是否正在查找
+ public int nFinderHanle; // 取到的查询句柄
+ public int nTotalCount; // 符合此次查询条件的结果总条数
+ public LLong hRadiometryHandle = new LLong(0); // 订阅句柄
+ }
+
+ private static ThermalCameraStatus status = new ThermalCameraStatus();
+
+ /**
+ * 订阅温度分布数据(热图)
+ */
+ public static boolean radiometryAttach(int nChannel, fRadiometryAttachCB cbNotify) {
+ /*
+ * 入参
+ */
+ NET_IN_RADIOMETRY_ATTACH stIn = new NET_IN_RADIOMETRY_ATTACH();
+ stIn.nChannel = nChannel; // 通道号
+ stIn.cbNotify = cbNotify; // 回调函数
+
+ /*
+ * 出参
+ */
+ NET_OUT_RADIOMETRY_ATTACH stOut = new NET_OUT_RADIOMETRY_ATTACH();
+ status.hRadiometryHandle = LoginModule.netsdk.CLIENT_RadiometryAttach(LoginModule.m_hLoginHandle, stIn, stOut, 3000);
+
+ if(status.hRadiometryHandle.longValue() == 0) {
+ System.err.printf("RadiometryAttach Failed!" + ToolKits.getErrorCodePrint());
+ }
+
+ return status.hRadiometryHandle.longValue() != 0;
+ }
+
+ /**
+ * 获取查询总个数
+ */
+ public static boolean isAttaching() {
+ return status.hRadiometryHandle.longValue() != 0;
+ }
+
+ /**
+ * 开始获取热图数据
+ */
+ public static int radiometryFetch(int nChannel) {
+
+ int nStatus = -1;
+
+ /*
+ * 入参
+ */
+ NET_IN_RADIOMETRY_FETCH stIn = new NET_IN_RADIOMETRY_FETCH();
+ stIn.nChannel = nChannel; // 通道号
+
+ /*
+ * 出参
+ */
+ NET_OUT_RADIOMETRY_FETCH stOut = new NET_OUT_RADIOMETRY_FETCH();
+
+ if(!LoginModule.netsdk.CLIENT_RadiometryFetch(LoginModule.m_hLoginHandle, stIn, stOut, 3000)) {
+ System.err.printf("RadiometryFetch Failed!" + ToolKits.getErrorCodePrint());
+ } else {
+ nStatus = stOut.nStatus;
+ }
+
+ return nStatus;
+ }
+
+ /**
+ * 处理回调数据(热图)
+ * @throws IOException
+ */
+ public static boolean saveData(NET_RADIOMETRY_DATA radiometryData) throws IOException {
+
+ if (radiometryData == null) {
+ return false;
+ }
+
+ int nWidth = radiometryData.stMetaData.nWidth;
+ int nHeight = radiometryData.stMetaData.nHeight;
+
+ short[] pGrayImg = new short[nWidth * nHeight];
+ float[] pTempForPixels = new float[nWidth * nHeight];
+
+ if(LoginModule.netsdk.CLIENT_RadiometryDataParse(radiometryData, pGrayImg, pTempForPixels)) {
+ byte[] pYData = new byte[nWidth*nHeight*2];
+ imageAlgApi.drcTable(pGrayImg, (short)nWidth, (short)nHeight, 0, pYData, null);
+ ToolKits.savePicture(pYData, "./GrayscaleMap.yuv");
+ } else {
+ System.err.println("saveData failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * 取消订阅温度分布数据
+ */
+ public static void radiometryDetach() {
+ if(status.hRadiometryHandle.longValue() != 0) {
+ LoginModule.netsdk.CLIENT_RadiometryDetach(status.hRadiometryHandle);
+ status.hRadiometryHandle.setValue(0);
+ }
+ }
+
+ /**
+ * 查询测温点
+ */
+ public static NET_RADIOMETRYINFO queryPointTemper(int nChannel, short x, short y) {
+ int nQueryType = NetSDKLib.NET_QUERY_DEV_RADIOMETRY_POINT_TEMPER;
+
+ // 入参
+ NET_IN_RADIOMETRY_GETPOINTTEMPER stIn = new NET_IN_RADIOMETRY_GETPOINTTEMPER();
+ stIn.nChannel = nChannel;
+ stIn.stCoordinate.nx = x;
+ stIn.stCoordinate.ny = y;
+
+ // 出参
+ NET_OUT_RADIOMETRY_GETPOINTTEMPER stOut = new NET_OUT_RADIOMETRY_GETPOINTTEMPER();
+
+ stIn.write();
+ stOut.write();
+ boolean bRet = LoginModule.netsdk.CLIENT_QueryDevInfo(LoginModule.m_hLoginHandle, nQueryType, stIn.getPointer(), stOut.getPointer(), null, 3000);
+ if(!bRet) {
+ System.err.printf("QueryPointTemper Failed!" + ToolKits.getErrorCodePrint());
+ return null;
+ }
+
+ stOut.read();
+ return stOut.stPointTempInfo;
+ }
+
+ /**
+ * 查询测温项
+ */
+ public static NET_RADIOMETRYINFO queryItemTemper(int nChannel, int nPresetId, int nRuleId, int nMeterType) {
+ int nQueryType = NetSDKLib.NET_QUERY_DEV_RADIOMETRY_TEMPER;
+
+ // 入参
+ NET_IN_RADIOMETRY_GETTEMPER stIn = new NET_IN_RADIOMETRY_GETTEMPER();
+ stIn.stCondition.nPresetId = nPresetId;
+ stIn.stCondition.nRuleId = nRuleId;
+ stIn.stCondition.nMeterType = nMeterType; // eg: NET_RADIOMETRY_METERTYPE.NET_RADIOMETRY_METERTYPE_AREA;
+ stIn.stCondition.nChannel = nChannel;
+
+ // 出参
+ NET_OUT_RADIOMETRY_GETTEMPER stOut = new NET_OUT_RADIOMETRY_GETTEMPER();
+
+ stIn.write();
+ stOut.write();
+ boolean bRet = LoginModule.netsdk.CLIENT_QueryDevInfo(LoginModule.m_hLoginHandle, nQueryType, stIn.getPointer(), stOut.getPointer(), null, 3000);
+ if(!bRet) {
+ System.err.printf("QueryPointTemper Failed!" + ToolKits.getErrorCodePrint());
+ return null;
+ }
+
+ stOut.read();
+ return stOut.stTempInfo;
+ }
+
+ /**
+ * 开始查询信息
+ */
+ public static boolean startFind(NET_IN_RADIOMETRY_STARTFIND stuIn) {
+ if(status.bSearching) {
+ stopFind();
+ }
+
+ /*
+ * 出参
+ */
+ NET_OUT_RADIOMETRY_STARTFIND stuOut = new NET_OUT_RADIOMETRY_STARTFIND();
+ stuIn.write();
+ stuOut.write();
+ status.bSearching = LoginModule.netsdk.CLIENT_StartFind(LoginModule.m_hLoginHandle,
+ NET_FIND.NET_FIND_RADIOMETRY, stuIn.getPointer(), stuOut.getPointer(), 5000);
+ if (status.bSearching) {
+ stuOut.read();
+ status.nFinderHanle = stuOut.nFinderHanle;
+ status.nTotalCount = stuOut.nTotalCount;
+ }else {
+ System.err.printf("startFind Failed!" + ToolKits.getErrorCodePrint());
+ }
+
+ return status.bSearching;
+ }
+
+ /**
+ * 获取查询总个数
+ */
+ public static int getTotalCount() {
+ return status.nTotalCount;
+ }
+
+ /**
+ * 查询信息
+ */
+ public static NET_OUT_RADIOMETRY_DOFIND doFind(int nOffset, int nCount) {
+ if(!status.bSearching) {
+ System.err.printf("DoFind Failed! [need startFind]");
+ return null;
+ }
+
+ /*
+ * 入参
+ */
+ NET_IN_RADIOMETRY_DOFIND stuIn = new NET_IN_RADIOMETRY_DOFIND();
+ stuIn.nFinderHanle = status.nFinderHanle;
+ stuIn.nBeginNumber = nOffset;
+ stuIn.nCount = nCount;
+
+ /*
+ * 出参
+ */
+ NET_OUT_RADIOMETRY_DOFIND stuOut = new NET_OUT_RADIOMETRY_DOFIND();
+
+ stuIn.write();
+ stuOut.write();
+ if (!LoginModule.netsdk.CLIENT_DoFind(LoginModule.m_hLoginHandle,
+ NET_FIND.NET_FIND_RADIOMETRY, stuIn.getPointer(), stuOut.getPointer(), 5000)) {
+ System.err.printf("DoFind Failed!" + ToolKits.getErrorCodePrint());
+ return null;
+ }
+
+ stuOut.read();
+ return stuOut;
+ }
+
+ /**
+ * 停止查询信息
+ */
+ public static void stopFind() {
+ if(!status.bSearching) {
+ return;
+ }
+
+ /*
+ * 入参
+ */
+ NET_IN_RADIOMETRY_STOPFIND stuIn = new NET_IN_RADIOMETRY_STOPFIND();
+ stuIn.nFinderHanle = status.nFinderHanle;
+
+ /*
+ * 出参
+ */
+ NET_OUT_RADIOMETRY_STOPFIND stuOut = new NET_OUT_RADIOMETRY_STOPFIND();
+
+ stuIn.write();
+ stuOut.write();
+ LoginModule.netsdk.CLIENT_StopFind(LoginModule.m_hLoginHandle,
+ NET_FIND.NET_FIND_RADIOMETRY, stuIn.getPointer(), stuOut.getPointer(), 5000);
+
+ status.bSearching = false;
+ status.nFinderHanle = 0;
+// status.nTotalCount = 0;
+
+ return;
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/module/TrafficEventModule.java b/src/main/java/com/netsdk/demo/module/TrafficEventModule.java
new file mode 100644
index 0000000..6c0ddc8
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/TrafficEventModule.java
@@ -0,0 +1,106 @@
+package com.netsdk.demo.module;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.LLong;
+import com.netsdk.lib.ToolKits;
+
+/**
+ * 智能交通接口实现
+ * 主要有 :智能订阅、开闸、关闸功能
+ */
+public class TrafficEventModule {
+ // 智能订阅句柄
+ public static LLong m_hAttachHandle = new LLong(0);
+
+ /**
+ * 新版本开闸
+ */
+ public static boolean New_OpenStrobe() {
+ NetSDKLib.NET_CTRL_OPEN_STROBE openStrobe = new NetSDKLib.NET_CTRL_OPEN_STROBE();
+ openStrobe.nChannelId = 0;
+ String plate = new String("浙A888888");
+
+ System.arraycopy(plate.getBytes(), 0, openStrobe.szPlateNumber, 0, plate.getBytes().length);
+ openStrobe.write();
+ if (LoginModule.netsdk.CLIENT_ControlDeviceEx(LoginModule.m_hLoginHandle, NetSDKLib.CtrlType.CTRLTYPE_CTRL_OPEN_STROBE, openStrobe.getPointer(), null, 3000)) {
+ System.out.println("Open Success!");
+ } else {
+ System.err.println("Failed to Open." + ToolKits.getErrorCodePrint());
+ return false;
+ }
+ openStrobe.read();
+
+ return true;
+ }
+
+ /**
+ * 新版本关闸
+ */
+ public static void New_CloseStrobe() {
+ NetSDKLib.NET_CTRL_CLOSE_STROBE closeStrobe = new NetSDKLib.NET_CTRL_CLOSE_STROBE();
+ closeStrobe.nChannelId = 0;
+ closeStrobe.write();
+ if (LoginModule.netsdk.CLIENT_ControlDeviceEx(LoginModule.m_hLoginHandle, NetSDKLib.CtrlType.CTRLTYPE_CTRL_CLOSE_STROBE, closeStrobe.getPointer(), null, 3000)) {
+ System.out.println("Close Success!");
+ } else {
+ System.err.println("Failed to Close." + ToolKits.getErrorCodePrint());
+ }
+ closeStrobe.read();
+ }
+
+ /**
+ * 手动抓图按钮事件
+ */
+ public static boolean manualSnapPicture(int chn) {
+ NetSDKLib.MANUAL_SNAP_PARAMETER snapParam = new NetSDKLib.MANUAL_SNAP_PARAMETER();
+ snapParam.nChannel = chn;
+ String sequence = "11111"; // 抓图序列号,必须用数组拷贝
+ System.arraycopy(sequence.getBytes(), 0, snapParam.bySequence, 0, sequence.getBytes().length);
+
+ snapParam.write();
+ boolean bRet = LoginModule.netsdk.CLIENT_ControlDeviceEx(LoginModule.m_hLoginHandle, NetSDKLib.CtrlType.CTRLTYPE_MANUAL_SNAP, snapParam.getPointer(), null, 5000);
+ if (!bRet) {
+ System.err.println("Failed to manual snap, last error " + ToolKits.getErrorCodePrint());
+ return false;
+ } else {
+ System.out.println("Seccessed to manual snap");
+ }
+ snapParam.read();
+ return true;
+ }
+
+ /**
+ * 订阅实时上传智能分析数据
+ * @return
+ */
+ public static boolean attachIVSEvent(int ChannelId, NetSDKLib.fAnalyzerDataCallBack m_AnalyzerDataCB) {
+ /**
+ * 说明:
+ * 通道数可以在有登录是返回的信息 m_stDeviceInfo.byChanNum 获取
+ * 下列仅订阅了0通道的智能事件.
+ */
+ int bNeedPicture = 1; // 是否需要图片
+
+ m_hAttachHandle = LoginModule.netsdk.CLIENT_RealLoadPictureEx(LoginModule.m_hLoginHandle, ChannelId, NetSDKLib.EVENT_IVS_ALL,
+ bNeedPicture , m_AnalyzerDataCB , null , null);
+ if( m_hAttachHandle.longValue() != 0 ) {
+ System.out.println("CLIENT_RealLoadPictureEx Success ChannelId : \n" + ChannelId);
+ } else {
+ System.err.println("CLIENT_RealLoadPictureEx Failed!" + ToolKits.getErrorCodePrint());
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * 停止上传智能分析数据-图片
+ */
+ public static void detachIVSEvent() {
+ if (0 != m_hAttachHandle.longValue()) {
+ LoginModule.netsdk.CLIENT_StopLoadPic(m_hAttachHandle);
+ System.out.println("Stop detach IVS event");
+ m_hAttachHandle.setValue(0);
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/module/VideoStateSummaryModule.java b/src/main/java/com/netsdk/demo/module/VideoStateSummaryModule.java
new file mode 100644
index 0000000..ea00aab
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/module/VideoStateSummaryModule.java
@@ -0,0 +1,128 @@
+package com.netsdk.demo.module;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+
+import java.util.*;
+
+/**
+ * @author : 47040
+ * @since : Created in 2020/7/25 17:59
+ */
+public class VideoStateSummaryModule {
+
+ public static Map getM_hAttachMap() {
+ return m_hAttachMap;
+ }
+
+ // handle map
+ private static Map m_hAttachMap = new HashMap();
+
+ // Attach 订阅 人数统计事件
+ public static boolean attachVideoStatSummary(int channel, NetSDKLib.fVideoStatSumCallBack fVideoStatSumCallBack) {
+
+ if (!m_hAttachMap.containsKey(channel)) {
+
+ NetSDKLib.NET_IN_ATTACH_VIDEOSTAT_SUM inParam = new NetSDKLib.NET_IN_ATTACH_VIDEOSTAT_SUM();
+ inParam.nChannel = channel;
+ inParam.cbVideoStatSum = fVideoStatSumCallBack;
+
+ NetSDKLib.NET_OUT_ATTACH_VIDEOSTAT_SUM outParam = new NetSDKLib.NET_OUT_ATTACH_VIDEOSTAT_SUM();
+ NetSDKLib.LLong m_hAttachHandle = LoginModule.netsdk.CLIENT_AttachVideoStatSummary(LoginModule.m_hLoginHandle, inParam, outParam, 5000);
+ if (m_hAttachHandle.longValue() == 0) {
+ System.err.printf("Attach Failed!LastError = %s\n", ToolKits.getErrorCodePrint());
+ return false;
+ }
+ m_hAttachMap.put(channel, m_hAttachHandle);
+ System.out.printf("Attach Succeed at Channel %d ! AttachHandle: %d. Wait Device Notify Information\n", channel, m_hAttachHandle.longValue());
+ return true;
+ } else { // 非 0 说明正在订阅,先退订,再返回订阅失败
+ System.err.print("Attach Handle is not Zero, Please Detach First.\n");
+ return false;
+ }
+ }
+
+ // Check if Channel is Attached 是否订阅通道
+ public static boolean channelAttached(int channel) {
+
+ return m_hAttachMap.containsKey(channel);
+ }
+
+ // Detach 退订 人数统计事件
+ public static boolean detachVideoStatSummary(int channel) {
+ if (m_hAttachMap.containsKey(channel)) {
+
+ NetSDKLib.LLong m_hAttachHandle = m_hAttachMap.get(channel);
+
+ if (m_hAttachHandle.longValue() != 0) {
+ if (!LoginModule.netsdk.CLIENT_DetachVideoStatSummary(m_hAttachHandle)) {
+ System.err.printf("Detach Failed!LastError = %s\n", ToolKits.getErrorCodePrint());
+ return false;
+ }
+ System.out.println("Channel " + channel + ". Handle: " + m_hAttachHandle.longValue() + ". Detach Succeed!");
+ m_hAttachHandle.setValue(0);
+ m_hAttachMap.remove(channel);
+ return true;
+ } else {
+ System.err.print("Attach Handle is Zero, no Need for Detach.\n");
+ return false;
+ }
+ } else {
+ System.err.print("Attach Handle not found.\n");
+ return false;
+ }
+ }
+
+ // Detach All 退订 人数统计事件
+ public static void detachAllVideoStatSummary() {
+ Set keySet = m_hAttachMap.keySet();
+
+ for (Iterator iter = keySet.iterator(); iter.hasNext(); ) {
+ int channel = iter.next();
+
+ NetSDKLib.LLong m_hAttachHandle = m_hAttachMap.get(channel);
+ if (!LoginModule.netsdk.CLIENT_DetachVideoStatSummary(m_hAttachHandle)) {
+ System.err.printf("Detach Failed!LastError = %s\n", ToolKits.getErrorCodePrint());
+ }
+ System.out.println("Channel " + channel + ". Handle: " + m_hAttachHandle.longValue() + ". Detach Succeed!");
+ iter.remove();
+ }
+ }
+
+ // reAttach 重订 人数统计事件
+ public static void reAttachAllVideoStatSummary(NetSDKLib.fVideoStatSumCallBack fVideoStatSumCallBack) {
+ Set keySet = m_hAttachMap.keySet();
+ for (int channel : keySet) {
+ NetSDKLib.LLong m_hAttachHandle = m_hAttachMap.get(channel);
+ if (!LoginModule.netsdk.CLIENT_DetachVideoStatSummary(m_hAttachHandle)) {
+ System.err.printf("Detach Failed!LastError = %s\n", ToolKits.getErrorCodePrint());
+ }
+ System.out.println("Channel " + channel + ". Handle: " + m_hAttachHandle.longValue() + ". Detach Succeed!");
+
+ NetSDKLib.NET_IN_ATTACH_VIDEOSTAT_SUM inParam = new NetSDKLib.NET_IN_ATTACH_VIDEOSTAT_SUM();
+ inParam.nChannel = channel;
+ inParam.cbVideoStatSum = fVideoStatSumCallBack;
+
+ NetSDKLib.NET_OUT_ATTACH_VIDEOSTAT_SUM outParam = new NetSDKLib.NET_OUT_ATTACH_VIDEOSTAT_SUM();
+ m_hAttachHandle = LoginModule.netsdk.CLIENT_AttachVideoStatSummary(LoginModule.m_hLoginHandle, inParam, outParam, 5000);
+ if (m_hAttachHandle.longValue() == 0) {
+ System.err.printf("Attach Failed!LastError = %s\n", ToolKits.getErrorCodePrint());
+ }
+ m_hAttachMap.put(channel, m_hAttachHandle);
+ System.out.printf("Attach Succeed at Channel %d ! AttachHandle: %d. Wait Device Notify Information\n", channel, m_hAttachHandle.longValue());
+ }
+ }
+
+ // clear OSD info
+ public static boolean clearVideoStateSummary(int channel) {
+ NetSDKLib.NET_CTRL_CLEAR_SECTION_STAT_INFO info = new NetSDKLib.NET_CTRL_CLEAR_SECTION_STAT_INFO();
+ info.nChannel = channel;
+ info.write();
+ if (!LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle, NetSDKLib.CtrlType.CTRLTYPE_CTRL_CLEAR_SECTION_STAT, info.getPointer(), 5000)) {
+ System.err.printf("Clear Video State Summary Failed!LastError = %s\n", ToolKits.getErrorCodePrint());
+ return false;
+ }
+ System.out.println("Clear Video State Summary Succeed!");
+ return true;
+ }
+}
diff --git a/src/main/java/com/netsdk/demo/util/CaseMenu.java b/src/main/java/com/netsdk/demo/util/CaseMenu.java
new file mode 100644
index 0000000..b6c7d78
--- /dev/null
+++ b/src/main/java/com/netsdk/demo/util/CaseMenu.java
@@ -0,0 +1,93 @@
+package com.netsdk.demo.util;
+
+import java.lang.reflect.Method;
+import java.util.NoSuchElementException;
+import java.util.Scanner;
+import java.util.Vector;
+
+public class CaseMenu {
+
+ public static class Item {
+ private Object object;
+ private String itemName;
+ private String methodName;
+
+ public Item(Object object, String itemName, String methodName) {
+ super();
+ this.object = object;
+ this.itemName = itemName;
+ this.methodName = methodName;
+ }
+
+ public Object getObject() {
+ return object;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public String getMethodName() {
+ return methodName;
+ }
+ }
+
+ private Vector- items;
+
+ public CaseMenu() {
+ super();
+ items = new Vector
- ();
+ }
+
+ public void addItem(Item item) {
+ items.add(item);
+ }
+
+ private void showItem() {
+ final String format = "%2d\t%-20s\n";
+ int index = 0;
+ System.out.printf(format, index++, "exit App");
+ for (Item item : items) {
+ System.out.printf(format, index++, item.getItemName());
+ }
+ System.out.println("Please input a item index to invoke the method:");
+ }
+
+ public void run() {
+ Scanner scanner = new Scanner(System.in);
+ while(true) {
+ showItem();
+ try {
+ int input = Integer.parseInt(scanner.nextLine());
+
+ if (input <= 0 ) {
+ System.err.println("input <= 0 || scanner.nextLine() == null");
+// scanner.close();
+// System.exit(0);
+ break;
+ }
+
+ if (input < 0 || input > items.size()) {
+ System.err.println("Input Error Item Index.");
+ continue;
+ }
+
+ Item item = items.get(input - 1);
+ Class> itemClass = item.getObject().getClass();
+ Method method = itemClass.getMethod(item.getMethodName());
+ method.invoke(item.getObject());
+ } catch (NoSuchElementException e) {
+// scanner.close();
+// System.exit(0);
+ break;
+ } catch (NumberFormatException e) {
+ System.err.println("Input Error NumberFormat.");
+ continue;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ scanner.close();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/DynamicParseUtil.java b/src/main/java/com/netsdk/lib/DynamicParseUtil.java
new file mode 100644
index 0000000..8708812
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/DynamicParseUtil.java
@@ -0,0 +1,124 @@
+package com.netsdk.lib;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.*;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description
+ * @date 2021/3/10
+ */
+public class DynamicParseUtil {
+ private DynamicLibParseHandler handler;
+ private SAXParserFactory saxParserFactory;
+ private SAXParser saxParser;
+
+ /**
+ * 适配各系统动态库名称大小写不同,以及lib前缀造成的找不到库的问题
+ *
+ * @param currentSystem 当前系统:win64,win32,linux64,linux32,mac64
+ * @param libName 动态库名称
+ * @return
+ */
+ public String compareLibName(String currentSystem, String libName) {
+ String dynamicLibName = libName;
+ List
libs = handler.getLibsBySystem(currentSystem);
+ if (currentSystem.toLowerCase().contains("win")) {
+ return findLibs(libs, libName);
+ }
+ if (libName.startsWith("lib")) {
+ dynamicLibName = libName.substring(3);
+ }
+ return findLibs(libs, dynamicLibName);
+ }
+
+ private String findLibs(List libs, String libName) {
+ for (String lib : libs) {
+ if (libName.equalsIgnoreCase(lib)) {
+ return lib;
+ }
+ }
+ return "";
+ }
+
+ public List getLibsSystem(String system) {
+ return handler.getLibsBySystem(system);
+ }
+
+ private DynamicParseUtil() throws ParserConfigurationException {
+ // 获取SAX分析器的工厂实例,专门负责创建SAXParser分析器
+ saxParserFactory = SAXParserFactory.newInstance();
+ // 获取SAXParser分析器的实例
+ try {
+ saxParser = saxParserFactory.newSAXParser();
+ handler = new DynamicLibParseHandler();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public DynamicParseUtil(InputStream inputSteam)
+ throws ParserConfigurationException, IOException, SAXException {
+ this();
+ saxParser.parse(inputSteam, handler);
+ }
+
+ /** xml解析handler */
+ private class DynamicLibParseHandler extends DefaultHandler {
+ private HashMap> dynamics = new HashMap>();
+ private List systems =
+ Arrays.asList("win64", "win32", "linux64", "linux32", "mac64", "linuxARM");
+ private String currentDynamicSystem;
+ private List libs;
+
+ public List getLibsBySystem(String system) {
+ return dynamics.get(system);
+ }
+
+ @Override
+ public void startDocument() throws SAXException {
+ super.startDocument();
+ }
+
+ @Override
+ public void startElement(String uri, String localName, String qName, Attributes attributes)
+ throws SAXException {
+ super.startElement(uri, localName, qName, attributes);
+ if (systems.contains(qName)) {
+ currentDynamicSystem = qName;
+ if (libs == null) {
+ libs = new ArrayList();
+ }
+ }
+ }
+
+ @Override
+ public void endElement(String uri, String localName, String qName) throws SAXException {
+ super.endElement(uri, localName, qName);
+ if (systems.contains(qName)) {
+ // 保存到hashmap中
+ dynamics.put(currentDynamicSystem, libs);
+ // 清除libs
+ libs = null;
+ }
+ }
+
+ @Override
+ public void characters(char[] ch, int start, int length) throws SAXException {
+ super.characters(ch, start, length);
+ String lib = new String(ch, start, length);
+ if (!lib.trim().isEmpty()) {
+ libs.add(lib);
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/ImageAlgLib.java b/src/main/java/com/netsdk/lib/ImageAlgLib.java
new file mode 100644
index 0000000..90f615f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/ImageAlgLib.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib;
+
+import com.sun.jna.Library;
+import com.sun.jna.Native;
+
+/**
+ * SDK JNA接口封装
+ */
+public interface ImageAlgLib extends Library {
+ ImageAlgLib IMAGEALG_INSTANCE = (ImageAlgLib)Native.loadLibrary(Utils.getLoadLibrary("ImageAlg"), ImageAlgLib.class);
+
+
+ /*******************************************************************************
+ * 函数名 : drcTable
+ * 描 述 : raw数据转换成Y数据
+ * 输 入 : - pRaw: 14bit裸数据
+ * 输 入 : - height: 输入裸数据的高
+ * 输 入 : - width: 输入裸数据的宽
+ * 输 入 : - sel: 默认填0
+ * 输 入 : - lut: 当sel为1时,该参数为本地drc表,默认填0
+ * 输 出 : pYData:转换后的Y数据
+ * 返回值 : 0 : 成功
+ * -1: 失败
+ *******************************************************************************/
+ int drcTable(short[] pRaw, short width, short height, int sel, byte[] pYData, short[] lut);
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/LastError.java b/src/main/java/com/netsdk/lib/LastError.java
new file mode 100644
index 0000000..aec2a57
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/LastError.java
@@ -0,0 +1,497 @@
+package com.netsdk.lib;
+
+/**
+ * 错误类型代号,对应CLIENT_GetLastError接口的返回值, 十进制
+ *
+ * @author 29779
+ */
+public class LastError {
+ public static final int NET_NOERROR = 0; // 没有错误
+ public static final int NET_ERROR = -1; // 未知错误
+ public static final int NET_SYSTEM_ERROR = (0x80000000 | 1); // Windows系统出错
+ public static final int NET_NETWORK_ERROR = (0x80000000 | 2); // 网络错误,可能是因为网络超时
+ public static final int NET_DEV_VER_NOMATCH = (0x80000000 | 3); // 设备协议不匹配
+ public static final int NET_INVALID_HANDLE = (0x80000000 | 4); // 句柄无效
+ public static final int NET_OPEN_CHANNEL_ERROR = (0x80000000 | 5); // 打开通道失败
+ public static final int NET_CLOSE_CHANNEL_ERROR = (0x80000000 | 6); // 关闭通道失败
+ public static final int NET_ILLEGAL_PARAM = (0x80000000 | 7); // 用户参数不合法
+ public static final int NET_SDK_INIT_ERROR = (0x80000000 | 8); // SDK初始化出错
+ public static final int NET_SDK_UNINIT_ERROR = (0x80000000 | 9); // SDK清理出错
+ public static final int NET_RENDER_OPEN_ERROR = (0x80000000 | 10); // 申请render资源出错
+ public static final int NET_DEC_OPEN_ERROR = (0x80000000 | 11); // 打开解码库出错
+ public static final int NET_DEC_CLOSE_ERROR = (0x80000000 | 12); // 关闭解码库出错
+ public static final int NET_MULTIPLAY_NOCHANNEL = (0x80000000 | 13); // 多画面预览中检测到通道数为0
+ public static final int NET_TALK_INIT_ERROR = (0x80000000 | 14); // 录音库初始化失败
+ public static final int NET_TALK_NOT_INIT = (0x80000000 | 15); // 录音库未经初始化
+ public static final int NET_TALK_SENDDATA_ERROR = (0x80000000 | 16); // 发送音频数据出错
+ public static final int NET_REAL_ALREADY_SAVING = (0x80000000 | 17); // 实时数据已经处于保存状态
+ public static final int NET_NOT_SAVING = (0x80000000 | 18); // 未保存实时数据
+ public static final int NET_OPEN_FILE_ERROR = (0x80000000 | 19); // 打开文件出错
+ public static final int NET_PTZ_SET_TIMER_ERROR = (0x80000000 | 20); // 启动云台控制定时器失败
+ public static final int NET_RETURN_DATA_ERROR = (0x80000000 | 21); // 对返回数据的校验出错
+ public static final int NET_INSUFFICIENT_BUFFER = (0x80000000 | 22); // 没有足够的缓存
+ public static final int NET_NOT_SUPPORTED = (0x80000000 | 23); // 当前SDK未支持该功能
+ public static final int NET_NO_RECORD_FOUND = (0x80000000 | 24); // 查询不到录像
+ public static final int NET_NOT_AUTHORIZED = (0x80000000 | 25); // 无操作权限
+ public static final int NET_NOT_NOW = (0x80000000 | 26); // 暂时无法执行
+ public static final int NET_NO_TALK_CHANNEL = (0x80000000 | 27); // 未发现对讲通道
+ public static final int NET_NO_AUDIO = (0x80000000 | 28); // 未发现音频
+ public static final int NET_NO_INIT = (0x80000000 | 29); // 网络SDK未经初始化
+ public static final int NET_DOWNLOAD_END = (0x80000000 | 30); // 下载已结束
+ public static final int NET_EMPTY_LIST = (0x80000000 | 31); // 查询结果为空
+ public static final int NET_ERROR_GETCFG_SYSATTR = (0x80000000 | 32); // 获取系统属性配置失败
+ public static final int NET_ERROR_GETCFG_SERIAL = (0x80000000 | 33); // 获取序列号失败
+ public static final int NET_ERROR_GETCFG_GENERAL = (0x80000000 | 34); // 获取常规属性失败
+ public static final int NET_ERROR_GETCFG_DSPCAP = (0x80000000 | 35); // 获取DSP能力描述失败
+ public static final int NET_ERROR_GETCFG_NETCFG = (0x80000000 | 36); // 获取网络配置失败
+ public static final int NET_ERROR_GETCFG_CHANNAME = (0x80000000 | 37); // 获取通道名称失败
+ public static final int NET_ERROR_GETCFG_VIDEO = (0x80000000 | 38); // 获取视频属性失败
+ public static final int NET_ERROR_GETCFG_RECORD = (0x80000000 | 39); // 获取录象配置失败
+ public static final int NET_ERROR_GETCFG_PRONAME = (0x80000000 | 40); // 获取解码器协议名称失败
+ public static final int NET_ERROR_GETCFG_FUNCNAME = (0x80000000 | 41); // 获取232串口功能名称失败
+ public static final int NET_ERROR_GETCFG_485DECODER = (0x80000000 | 42); // 获取解码器属性失败
+ public static final int NET_ERROR_GETCFG_232COM = (0x80000000 | 43); // 获取232串口配置失败
+ public static final int NET_ERROR_GETCFG_ALARMIN = (0x80000000 | 44); // 获取外部报警输入配置失败
+ public static final int NET_ERROR_GETCFG_ALARMDET = (0x80000000 | 45); // 获取动态检测报警失败
+ public static final int NET_ERROR_GETCFG_SYSTIME = (0x80000000 | 46); // 获取设备时间失败
+ public static final int NET_ERROR_GETCFG_PREVIEW = (0x80000000 | 47); // 获取预览参数失败
+ public static final int NET_ERROR_GETCFG_AUTOMT = (0x80000000 | 48); // 获取自动维护配置失败
+ public static final int NET_ERROR_GETCFG_VIDEOMTRX = (0x80000000 | 49); // 获取视频矩阵配置失败
+ public static final int NET_ERROR_GETCFG_COVER = (0x80000000 | 50); // 获取区域遮挡配置失败
+ public static final int NET_ERROR_GETCFG_WATERMAKE = (0x80000000 | 51); // 获取图象水印配置失败
+ public static final int NET_ERROR_GETCFG_MULTICAST = (0x80000000 | 52); // 获取配置失败位置:组播端口按通道配置
+ public static final int NET_ERROR_SETCFG_GENERAL = (0x80000000 | 55); // 修改常规属性失败
+ public static final int NET_ERROR_SETCFG_NETCFG = (0x80000000 | 56); // 修改网络配置失败
+ public static final int NET_ERROR_SETCFG_CHANNAME = (0x80000000 | 57); // 修改通道名称失败
+ public static final int NET_ERROR_SETCFG_VIDEO = (0x80000000 | 58); // 修改视频属性失败
+ public static final int NET_ERROR_SETCFG_RECORD = (0x80000000 | 59); // 修改录象配置失败
+ public static final int NET_ERROR_SETCFG_485DECODER = (0x80000000 | 60); // 修改解码器属性失败
+ public static final int NET_ERROR_SETCFG_232COM = (0x80000000 | 61); // 修改232串口配置失败
+ public static final int NET_ERROR_SETCFG_ALARMIN = (0x80000000 | 62); // 修改外部输入报警配置失败
+ public static final int NET_ERROR_SETCFG_ALARMDET = (0x80000000 | 63); // 修改动态检测报警配置失败
+ public static final int NET_ERROR_SETCFG_SYSTIME = (0x80000000 | 64); // 修改设备时间失败
+ public static final int NET_ERROR_SETCFG_PREVIEW = (0x80000000 | 65); // 修改预览参数失败
+ public static final int NET_ERROR_SETCFG_AUTOMT = (0x80000000 | 66); // 修改自动维护配置失败
+ public static final int NET_ERROR_SETCFG_VIDEOMTRX = (0x80000000 | 67); // 修改视频矩阵配置失败
+ public static final int NET_ERROR_SETCFG_COVER = (0x80000000 | 68); // 修改区域遮挡配置失败
+ public static final int NET_ERROR_SETCFG_WATERMAKE = (0x80000000 | 69); // 修改图象水印配置失败
+ public static final int NET_ERROR_SETCFG_WLAN = (0x80000000 | 70); // 修改无线网络信息失败
+ public static final int NET_ERROR_SETCFG_WLANDEV = (0x80000000 | 71); // 选择无线网络设备失败
+ public static final int NET_ERROR_SETCFG_REGISTER = (0x80000000 | 72); // 修改主动注册参数配置失败
+ public static final int NET_ERROR_SETCFG_CAMERA = (0x80000000 | 73); // 修改摄像头属性配置失败
+ public static final int NET_ERROR_SETCFG_INFRARED = (0x80000000 | 74); // 修改红外报警配置失败
+ public static final int NET_ERROR_SETCFG_SOUNDALARM = (0x80000000 | 75); // 修改音频报警配置失败
+ public static final int NET_ERROR_SETCFG_STORAGE = (0x80000000 | 76); // 修改存储位置配置失败
+ public static final int NET_AUDIOENCODE_NOTINIT = (0x80000000 | 77); // 音频编码接口没有成功初始化
+ public static final int NET_DATA_TOOLONGH = (0x80000000 | 78); // 数据过长
+ public static final int NET_UNSUPPORTED = (0x80000000 | 79); // 设备不支持该操作
+ public static final int NET_DEVICE_BUSY = (0x80000000 | 80); // 设备资源不足
+ public static final int NET_SERVER_STARTED = (0x80000000 | 81); // 服务器已经启动
+ public static final int NET_SERVER_STOPPED = (0x80000000 | 82); // 服务器尚未成功启动
+ public static final int NET_LISTER_INCORRECT_SERIAL = (0x80000000 | 83); // 输入序列号有误
+ public static final int NET_QUERY_DISKINFO_FAILED = (0x80000000 | 84); // 获取硬盘信息失败
+ public static final int NET_ERROR_GETCFG_SESSION = (0x80000000 | 85); // 获取连接Session信息
+ public static final int NET_USER_FLASEPWD_TRYTIME = (0x80000000 | 86); // 输入密码错误超过限制次数
+ public static final int NET_LOGIN_ERROR_PASSWORD = (0x80000000 | 100); // 密码不正确
+ public static final int NET_LOGIN_ERROR_USER = (0x80000000 | 101); // 帐户不存在
+ public static final int NET_LOGIN_ERROR_TIMEOUT = (0x80000000 | 102); // 等待登录返回超时
+ public static final int NET_LOGIN_ERROR_RELOGGIN = (0x80000000 | 103); // 帐号已登录
+ public static final int NET_LOGIN_ERROR_LOCKED = (0x80000000 | 104); // 帐号已被锁定
+ public static final int NET_LOGIN_ERROR_BLACKLIST = (0x80000000 | 105); // 帐号已被列为禁止名单
+ public static final int NET_LOGIN_ERROR_BUSY = (0x80000000 | 106); // 资源不足,系统忙
+ public static final int NET_LOGIN_ERROR_CONNECT = (0x80000000 | 107); // 登录设备超时,请检查网络并重试
+ public static final int NET_LOGIN_ERROR_NETWORK = (0x80000000 | 108); // 网络连接失败
+ public static final int NET_LOGIN_ERROR_SUBCONNECT = (0x80000000 | 109); // 登录设备成功,但无法创建视频通道,请检查网络状况
+ public static final int NET_LOGIN_ERROR_MAXCONNECT = (0x80000000 | 110); // 超过最大连接数
+ public static final int NET_LOGIN_ERROR_PROTOCOL3_ONLY = (0x80000000 | 111); // 只支持3代协议
+ public static final int NET_LOGIN_ERROR_UKEY_LOST = (0x80000000 | 112); // 未插入U盾或U盾信息错误
+ public static final int NET_LOGIN_ERROR_NO_AUTHORIZED = (0x80000000 | 113); // 客户端IP地址没有登录权限
+ public static final int NET_LOGIN_ERROR_USER_OR_PASSOWRD = (0x80000000 | 117); // 账号或密码错误
+ public static final int NET_LOGIN_ERROR_DEVICE_NOT_INIT = (0x80000000 | 118); // 设备尚未初始化,不能登录,请先初始化设备
+ public static final int NET_RENDER_SOUND_ON_ERROR = (0x80000000 | 120); // Render库打开音频出错
+ public static final int NET_RENDER_SOUND_OFF_ERROR = (0x80000000 | 121); // Render库关闭音频出错
+ public static final int NET_RENDER_SET_VOLUME_ERROR = (0x80000000 | 122); // Render库控制音量出错
+ public static final int NET_RENDER_ADJUST_ERROR = (0x80000000 | 123); // Render库设置画面参数出错
+ public static final int NET_RENDER_PAUSE_ERROR = (0x80000000 | 124); // Render库暂停播放出错
+ public static final int NET_RENDER_SNAP_ERROR = (0x80000000 | 125); // Render库抓图出错
+ public static final int NET_RENDER_STEP_ERROR = (0x80000000 | 126); // Render库步进出错
+ public static final int NET_RENDER_FRAMERATE_ERROR = (0x80000000 | 127); // Render库设置帧率出错
+ public static final int NET_RENDER_DISPLAYREGION_ERROR = (0x80000000 | 128); // Render库设置显示区域出错
+ public static final int NET_RENDER_GETOSDTIME_ERROR = (0x80000000 | 129); // Render库获取当前播放时间出错
+ public static final int NET_GROUP_EXIST = (0x80000000 | 140); // 组名已存在
+ public static final int NET_GROUP_NOEXIST = (0x80000000 | 141); // 组名不存在
+ public static final int NET_GROUP_RIGHTOVER = (0x80000000 | 142); // 组的权限超出权限列表范围
+ public static final int NET_GROUP_HAVEUSER = (0x80000000 | 143); // 组下有用户,不能删除
+ public static final int NET_GROUP_RIGHTUSE = (0x80000000 | 144); // 组的某个权限被用户使用,不能删除
+ public static final int NET_GROUP_SAMENAME = (0x80000000 | 145); // 新组名同已有组名重复
+ public static final int NET_USER_EXIST = (0x80000000 | 146); // 用户已存在
+ public static final int NET_USER_NOEXIST = (0x80000000 | 147); // 用户不存在
+ public static final int NET_USER_RIGHTOVER = (0x80000000 | 148); // 用户权限超出组权限
+ public static final int NET_USER_PWD = (0x80000000 | 149); // 保留帐号,不容许修改密码
+ public static final int NET_USER_FLASEPWD = (0x80000000 | 150); // 密码不正确
+ public static final int NET_USER_NOMATCHING = (0x80000000 | 151); // 密码不匹配
+ public static final int NET_USER_INUSE = (0x80000000 | 152); // 账号正在使用中
+ public static final int NET_ERROR_GETCFG_ETHERNET = (0x80000000 | 300); // 获取网卡配置失败
+ public static final int NET_ERROR_GETCFG_WLAN = (0x80000000 | 301); // 获取无线网络信息失败
+ public static final int NET_ERROR_GETCFG_WLANDEV = (0x80000000 | 302); // 获取无线网络设备失败
+ public static final int NET_ERROR_GETCFG_REGISTER = (0x80000000 | 303); // 获取主动注册参数失败
+ public static final int NET_ERROR_GETCFG_CAMERA = (0x80000000 | 304); // 获取摄像头属性失败
+ public static final int NET_ERROR_GETCFG_INFRARED = (0x80000000 | 305); // 获取红外报警配置失败
+ public static final int NET_ERROR_GETCFG_SOUNDALARM = (0x80000000 | 306); // 获取音频报警配置失败
+ public static final int NET_ERROR_GETCFG_STORAGE = (0x80000000 | 307); // 获取存储位置配置失败
+ public static final int NET_ERROR_GETCFG_MAIL = (0x80000000 | 308); // 获取邮件配置失败
+ public static final int NET_CONFIG_DEVBUSY = (0x80000000 | 309); // 暂时无法设置
+ public static final int NET_CONFIG_DATAILLEGAL = (0x80000000 | 310); // 配置数据不合法
+ public static final int NET_ERROR_GETCFG_DST = (0x80000000 | 311); // 获取夏令时配置失败
+ public static final int NET_ERROR_SETCFG_DST = (0x80000000 | 312); // 设置夏令时配置失败
+ public static final int NET_ERROR_GETCFG_VIDEO_OSD = (0x80000000 | 313); // 获取视频OSD叠加配置失败
+ public static final int NET_ERROR_SETCFG_VIDEO_OSD = (0x80000000 | 314); // 设置视频OSD叠加配置失败
+ public static final int NET_ERROR_GETCFG_GPRSCDMA = (0x80000000 | 315); // 获取CDMA\GPRS网络配置失败
+ public static final int NET_ERROR_SETCFG_GPRSCDMA = (0x80000000 | 316); // 设置CDMA\GPRS网络配置失败
+ public static final int NET_ERROR_GETCFG_IPFILTER = (0x80000000 | 317); // 获取IP过滤配置失败
+ public static final int NET_ERROR_SETCFG_IPFILTER = (0x80000000 | 318); // 设置IP过滤配置失败
+ public static final int NET_ERROR_GETCFG_TALKENCODE = (0x80000000 | 319); // 获取语音对讲编码配置失败
+ public static final int NET_ERROR_SETCFG_TALKENCODE = (0x80000000 | 320); // 设置语音对讲编码配置失败
+ public static final int NET_ERROR_GETCFG_RECORDLEN = (0x80000000 | 321); // 获取录像打包长度配置失败
+ public static final int NET_ERROR_SETCFG_RECORDLEN = (0x80000000 | 322); // 设置录像打包长度配置失败
+ public static final int NET_DONT_SUPPORT_SUBAREA = (0x80000000 | 323); // 不支持网络硬盘分区
+ public static final int NET_ERROR_GET_AUTOREGSERVER = (0x80000000 | 324); // 获取设备上主动注册服务器信息失败
+ public static final int NET_ERROR_CONTROL_AUTOREGISTER = (0x80000000 | 325); // 主动注册重定向注册错误
+ public static final int NET_ERROR_DISCONNECT_AUTOREGISTER = (0x80000000 | 326); // 断开主动注册服务器错误
+ public static final int NET_ERROR_GETCFG_MMS = (0x80000000 | 327); // 获取mms配置失败
+ public static final int NET_ERROR_SETCFG_MMS = (0x80000000 | 328); // 设置mms配置失败
+ public static final int NET_ERROR_GETCFG_SMSACTIVATION = (0x80000000 | 329); // 获取短信激活无线连接配置失败
+ public static final int NET_ERROR_SETCFG_SMSACTIVATION = (0x80000000 | 330); // 设置短信激活无线连接配置失败
+ public static final int NET_ERROR_GETCFG_DIALINACTIVATION = (0x80000000 | 331); // 获取拨号激活无线连接配置失败
+ public static final int NET_ERROR_SETCFG_DIALINACTIVATION = (0x80000000 | 332); // 设置拨号激活无线连接配置失败
+ public static final int NET_ERROR_GETCFG_VIDEOOUT = (0x80000000 | 333); // 查询视频输出参数配置失败
+ public static final int NET_ERROR_SETCFG_VIDEOOUT = (0x80000000 | 334); // 设置视频输出参数配置失败
+ public static final int NET_ERROR_GETCFG_OSDENABLE = (0x80000000 | 335); // 获取osd叠加使能配置失败
+ public static final int NET_ERROR_SETCFG_OSDENABLE = (0x80000000 | 336); // 设置osd叠加使能配置失败
+ public static final int NET_ERROR_SETCFG_ENCODERINFO = (0x80000000 | 337); // 设置数字通道前端编码接入配置失败
+ public static final int NET_ERROR_GETCFG_TVADJUST = (0x80000000 | 338); // 获取TV调节配置失败
+ public static final int NET_ERROR_SETCFG_TVADJUST = (0x80000000 | 339); // 设置TV调节配置失败
+ public static final int NET_ERROR_CONNECT_FAILED = (0x80000000 | 340); // 请求建立连接失败
+ public static final int NET_ERROR_SETCFG_BURNFILE = (0x80000000 | 341); // 请求刻录文件上传失败
+ public static final int NET_ERROR_SNIFFER_GETCFG = (0x80000000 | 342); // 获取抓包配置信息失败
+ public static final int NET_ERROR_SNIFFER_SETCFG = (0x80000000 | 343); // 设置抓包配置信息失败
+ public static final int NET_ERROR_DOWNLOADRATE_GETCFG = (0x80000000 | 344); // 查询下载限制信息失败
+ public static final int NET_ERROR_DOWNLOADRATE_SETCFG = (0x80000000 | 345); // 设置下载限制信息失败
+ public static final int NET_ERROR_SEARCH_TRANSCOM = (0x80000000 | 346); // 查询串口参数失败
+ public static final int NET_ERROR_GETCFG_POINT = (0x80000000 | 347); // 获取预制点信息错误
+ public static final int NET_ERROR_SETCFG_POINT = (0x80000000 | 348); // 设置预制点信息错误
+ public static final int NET_SDK_LOGOUT_ERROR = (0x80000000 | 349); // SDK没有正常登出设备
+ public static final int NET_ERROR_GET_VEHICLE_CFG = (0x80000000 | 350); // 获取车载配置失败
+ public static final int NET_ERROR_SET_VEHICLE_CFG = (0x80000000 | 351); // 设置车载配置失败
+ public static final int NET_ERROR_GET_ATM_OVERLAY_CFG = (0x80000000 | 352); // 获取atm叠加配置失败
+ public static final int NET_ERROR_SET_ATM_OVERLAY_CFG = (0x80000000 | 353); // 设置atm叠加配置失败
+ public static final int NET_ERROR_GET_ATM_OVERLAY_ABILITY = (0x80000000 | 354); // 获取atm叠加能力失败
+ public static final int NET_ERROR_GET_DECODER_TOUR_CFG = (0x80000000 | 355); // 获取解码器解码轮巡配置失败
+ public static final int NET_ERROR_SET_DECODER_TOUR_CFG = (0x80000000 | 356); // 设置解码器解码轮巡配置失败
+ public static final int NET_ERROR_CTRL_DECODER_TOUR = (0x80000000 | 357); // 控制解码器解码轮巡失败
+ public static final int NET_GROUP_OVERSUPPORTNUM = (0x80000000 | 358); // 超出设备支持最大用户组数目
+ public static final int NET_USER_OVERSUPPORTNUM = (0x80000000 | 359); // 超出设备支持最大用户数目
+ public static final int NET_ERROR_GET_SIP_CFG = (0x80000000 | 368); // 获取SIP配置失败
+ public static final int NET_ERROR_SET_SIP_CFG = (0x80000000 | 369); // 设置SIP配置失败
+ public static final int NET_ERROR_GET_SIP_ABILITY = (0x80000000 | 370); // 获取SIP能力失败
+ public static final int NET_ERROR_GET_WIFI_AP_CFG = (0x80000000 | 371); // 获取WIFI ap配置失败
+ public static final int NET_ERROR_SET_WIFI_AP_CFG = (0x80000000 | 372); // 设置WIFI ap配置失败
+ public static final int NET_ERROR_GET_DECODE_POLICY = (0x80000000 | 373); // 获取解码策略配置失败
+ public static final int NET_ERROR_SET_DECODE_POLICY = (0x80000000 | 374); // 设置解码策略配置失败
+ public static final int NET_ERROR_TALK_REJECT = (0x80000000 | 375); // 拒绝对讲
+ public static final int NET_ERROR_TALK_OPENED = (0x80000000 | 376); // 对讲被其他客户端打开
+ public static final int NET_ERROR_TALK_RESOURCE_CONFLICIT = (0x80000000 | 377); // 资源冲突
+ public static final int NET_ERROR_TALK_UNSUPPORTED_ENCODE = (0x80000000 | 378); // 不支持的语音编码格式
+ public static final int NET_ERROR_TALK_RIGHTLESS = (0x80000000 | 379); // 无权限
+ public static final int NET_ERROR_TALK_FAILED = (0x80000000 | 380); // 请求对讲失败
+ public static final int NET_ERROR_GET_MACHINE_CFG = (0x80000000 | 381); // 获取机器相关配置失败
+ public static final int NET_ERROR_SET_MACHINE_CFG = (0x80000000 | 382); // 设置机器相关配置失败
+ public static final int NET_ERROR_GET_DATA_FAILED = (0x80000000 | 383); // 设备无法获取当前请求数据
+ public static final int NET_ERROR_MAC_VALIDATE_FAILED = (0x80000000 | 384); // MAC地址验证失败
+ public static final int NET_ERROR_GET_INSTANCE = (0x80000000 | 385); // 获取服务器实例失败
+ public static final int NET_ERROR_JSON_REQUEST = (0x80000000 | 386); // 生成的json字符串错误
+ public static final int NET_ERROR_JSON_RESPONSE = (0x80000000 | 387); // 响应的json字符串错误
+ public static final int NET_ERROR_VERSION_HIGHER = (0x80000000 | 388); // 协议版本低于当前使用的版本
+ public static final int NET_SPARE_NO_CAPACITY = (0x80000000 | 389); // 设备操作失败, 容量不足
+ public static final int NET_ERROR_SOURCE_IN_USE = (0x80000000 | 390); // 显示源被其他输出占用
+ public static final int NET_ERROR_REAVE = (0x80000000 | 391); // 高级用户抢占低级用户资源
+ public static final int NET_ERROR_NETFORBID = (0x80000000 | 392); // 禁止入网
+ public static final int NET_ERROR_GETCFG_MACFILTER = (0x80000000 | 393); // 获取MAC过滤配置失败
+ public static final int NET_ERROR_SETCFG_MACFILTER = (0x80000000 | 394); // 设置MAC过滤配置失败
+ public static final int NET_ERROR_GETCFG_IPMACFILTER = (0x80000000 | 395); // 获取IP/MAC过滤配置失败
+ public static final int NET_ERROR_SETCFG_IPMACFILTER = (0x80000000 | 396); // 设置IP/MAC过滤配置失败
+ public static final int NET_ERROR_OPERATION_OVERTIME = (0x80000000 | 397); // 当前操作超时
+ public static final int NET_ERROR_SENIOR_VALIDATE_FAILED = (0x80000000 | 398); // 高级校验失败
+ public static final int NET_ERROR_DEVICE_ID_NOT_EXIST = (0x80000000 | 399); // 设备ID不存在
+ public static final int NET_ERROR_UNSUPPORTED = (0x80000000 | 400); // 不支持当前操作
+ public static final int NET_ERROR_PROXY_DLLLOAD = (0x80000000 | 401); // 代理库加载失败
+ public static final int NET_ERROR_PROXY_ILLEGAL_PARAM = (0x80000000 | 402); // 代理用户参数不合法
+ public static final int NET_ERROR_PROXY_INVALID_HANDLE = (0x80000000 | 403); // 代理句柄无效
+ public static final int NET_ERROR_PROXY_LOGIN_DEVICE_ERROR = (0x80000000 | 404); // 代理登入前端设备失败
+ public static final int NET_ERROR_PROXY_START_SERVER_ERROR = (0x80000000 | 405); // 启动代理服务失败
+ public static final int NET_ERROR_SPEAK_FAILED = (0x80000000 | 406); // 请求喊话失败
+ public static final int NET_ERROR_NOT_SUPPORT_F6 = (0x80000000 | 407); // 设备不支持此F6接口调用
+ public static final int NET_ERROR_CD_UNREADY = (0x80000000 | 408); // 光盘未就绪
+ public static final int NET_ERROR_DIR_NOT_EXIST = (0x80000000 | 409); // 目录不存在
+ public static final int NET_ERROR_UNSUPPORTED_SPLIT_MODE = (0x80000000 | 410); // 设备不支持的分割模式
+ public static final int NET_ERROR_OPEN_WND_PARAM = (0x80000000 | 411); // 开窗参数不合法
+ public static final int NET_ERROR_LIMITED_WND_COUNT = (0x80000000 | 412); // 开窗数量超过限制
+ public static final int NET_ERROR_UNMATCHED_REQUEST = (0x80000000 | 413); // 请求命令与当前模式不匹配
+ public static final int NET_RENDER_ENABLELARGEPICADJUSTMENT_ERROR = (0x80000000 | 414); // Render库启用高清图像内部调整策略出错
+ public static final int NET_ERROR_UPGRADE_FAILED = (0x80000000 | 415); // 设备升级失败
+ public static final int NET_ERROR_NO_TARGET_DEVICE = (0x80000000 | 416); // 找不到目标设备
+ public static final int NET_ERROR_NO_VERIFY_DEVICE = (0x80000000 | 417); // 找不到验证设备
+ public static final int NET_ERROR_CASCADE_RIGHTLESS = (0x80000000 | 418); // 无级联权限
+ public static final int NET_ERROR_LOW_PRIORITY = (0x80000000 | 419); // 低优先级
+ public static final int NET_ERROR_REMOTE_REQUEST_TIMEOUT = (0x80000000 | 420); // 远程设备请求超时
+ public static final int NET_ERROR_LIMITED_INPUT_SOURCE = (0x80000000 | 421); // 输入源超出最大路数限制
+ public static final int NET_ERROR_SET_LOG_PRINT_INFO = (0x80000000 | 422); // 设置日志打印失败
+ public static final int NET_ERROR_PARAM_DWSIZE_ERROR = (0x80000000 | 423); // 入参的dwsize字段出错
+ public static final int NET_ERROR_LIMITED_MONITORWALL_COUNT = (0x80000000 | 424); // 电视墙数量超过上限
+ public static final int NET_ERROR_PART_PROCESS_FAILED = (0x80000000 | 425); // 部分过程执行失败
+ public static final int NET_ERROR_TARGET_NOT_SUPPORT = (0x80000000 | 426); // 该功能不支持转发
+ public static final int NET_ERROR_VISITE_FILE = (0x80000000 | 510); // 访问文件失败
+ public static final int NET_ERROR_DEVICE_STATUS_BUSY = (0x80000000 | 511); // 设备忙
+ public static final int NET_USER_PWD_NOT_AUTHORIZED = (0x80000000 | 512); // 修改密码无权限
+ public static final int NET_USER_PWD_NOT_STRONG = (0x80000000 | 513); // 密码强度不够
+ public static final int NET_ERROR_NO_SUCH_CONFIG = (0x80000000 | 514); // 没有对应的配置
+ public static final int NET_ERROR_AUDIO_RECORD_FAILED = (0x80000000 | 515); // 录音失败
+ public static final int NET_ERROR_SEND_DATA_FAILED = (0x80000000 | 516); // 数据发送失败
+ public static final int NET_ERROR_OBSOLESCENT_INTERFACE = (0x80000000 | 517); // 废弃接口
+ public static final int NET_ERROR_INSUFFICIENT_INTERAL_BUF = (0x80000000 | 518); // 内部缓冲不足
+ public static final int NET_ERROR_NEED_ENCRYPTION_PASSWORD = (0x80000000 | 519); // 修改设备ip时,需要校验密码
+ public static final int NET_ERROR_NOSUPPORT_RECORD = (0x80000000 | 520); // 设备不支持此记录集
+ public static final int NET_ERROR_SERIALIZE_ERROR = (0x80000000 | 1010);// 数据序列化错误
+ public static final int NET_ERROR_DESERIALIZE_ERROR = (0x80000000 | 1011);// 数据反序列化错误
+ public static final int NET_ERROR_LOWRATEWPAN_ID_EXISTED = (0x80000000 | 1012);// 该无线ID已存在
+ public static final int NET_ERROR_LOWRATEWPAN_ID_LIMIT = (0x80000000 | 1013);// 无线ID数量已超限
+ public static final int NET_ERROR_LOWRATEWPAN_ID_ABNORMAL = (0x80000000 | 1014);// 无线异常添加
+ public static final int NET_ERROR_ENCRYPT = (0x80000000 | 1015);// 加密数据失败
+ public static final int NET_ERROR_PWD_ILLEGAL = (0x80000000 | 1016);// 新密码不合规范
+ public static final int NET_ERROR_DEVICE_ALREADY_INIT = (0x80000000 | 1017);// 设备已经初始化
+ public static final int NET_ERROR_SECURITY_CODE = (0x80000000 | 1018);// 安全码错误
+ public static final int NET_ERROR_SECURITY_CODE_TIMEOUT = (0x80000000 | 1019);// 安全码超出有效期
+ public static final int NET_ERROR_GET_PWD_SPECI = (0x80000000 | 1020);// 获取密码规范失败
+ public static final int NET_ERROR_NO_AUTHORITY_OF_OPERATION = (0x80000000 | 1021);// 无权限进行该操作
+ public static final int NET_ERROR_DECRYPT = (0x80000000 | 1022);// 解密数据失败
+ public static final int NET_ERROR_2D_CODE = (0x80000000 | 1023);// 2D code校验失败
+ public static final int NET_ERROR_INVALID_REQUEST = (0x80000000 | 1024);// 非法的RPC请求
+ public static final int NET_ERROR_PWD_RESET_DISABLE = (0x80000000 | 1025);// 密码重置功能已关闭
+ public static final int NET_ERROR_PLAY_PRIVATE_DATA = (0x80000000 | 1026);// 显示私有数据,比如规则框等失败
+ public static final int NET_ERROR_ROBOT_OPERATE_FAILED = (0x80000000 | 1027);// 机器人操作失败
+ public static final int NET_ERROR_PHOTOSIZE_EXCEEDSLIMIT = (0x80000000 | 1028);// 图片大小超限
+ public static final int NET_ERROR_USERID_INVALID = (0x80000000 | 1029);// 用户ID不存在
+ public static final int NET_ERROR_EXTRACTFEATURE_FAILED = (0x80000000 | 1030);// 照片特征值提取失败
+ public static final int NET_ERROR_PHOTO_EXIST = (0x80000000 | 1031);// 照片已存在
+ public static final int NET_ERROR_PHOTO_OVERFLOW = (0x80000000 | 1032);// 照片数量超过上限
+ public static final int NET_ERROR_CHANNEL_ALREADY_OPENED = (0x80000000 | 1033);// 通道已经打开
+ public static final int NET_ERROR_CREATE_SOCKET = (0x80000000 | 1034);// 创建套接字失败
+ public static final int NET_ERROR_CHANNEL_NUM = (0x80000000 | 1035);// 通道号错误
+ public static final int NET_ERROR_PHOTO_FORMAT = (0x80000000 | 1036);// 图片格式错误
+ public static final int NET_ERROR_DIGITAL_CERTIFICATE_INTERNAL_ERROR = (0x80000000 | 1037); // 内部错误(比如:相关硬件问题,获取公钥失败,内部接口调用失败,写文件失败等等)
+ public static final int NET_ERROR_DIGITAL_CERTIFICATE_GET_ID_FAILED = (0x80000000 | 1038); // 获取设备ID失败
+ public static final int NET_ERROR_DIGITAL_CERTIFICATE_IMPORT_ILLEGAL = (0x80000000 | 1039); // 证书文件非法(格式不支持或者不是证书文件)
+ public static final int NET_ERROR_DIGITAL_CERTIFICATE_SN_ERROR = (0x80000000 | 1040); // 证书sn重复或错误或不规范
+ public static final int NET_ERROR_DIGITAL_CERTIFICATE_COMMON_NAME_ILLEGAL = (0x80000000 | 1041);// 证书commonName非法(本地设备证书与系统中的不匹配devid_cryptoID,或者对端的不符合规则(devid_crytoID))
+ public static final int NET_ERROR_DIGITAL_CERTIFICATE_NO_ROOT_CERT = (0x80000000 | 1042); // 根证书未导入或不存在
+ public static final int NET_ERROR_DIGITAL_CERTIFICATE_CERT_REVOKED = (0x80000000 | 1043); // 证书被吊销
+ public static final int NET_ERROR_DIGITAL_CERTIFICATE_CERT_INVALID = (0x80000000 | 1044); // 证书不可用或未生效或已过期
+ public static final int NET_ERROR_DIGITAL_CERTIFICATE_CERT_ERROR_SIGN = (0x80000000 | 1045); // 证书签名不匹配
+ public static final int NET_ERROR_DIGITAL_CERTIFICATE_COUNTS_UPPER_LIMIT = (0x80000000 | 1046); // 超出证书导入上限
+ public static final int NET_ERROR_DIGITAL_CERTIFICATE_CERT_NO_EXIST = (0x80000000 | 1047); // 证书文件不存在(导出证书或者获取对应证书的公钥)#define NET_ERROR_DEFULAT_SEARCH_PORT _EC(1048) // 默认搜索端口无法使用(5050,37810)
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_MULTI_APPEND_STOUP = (0x80000000 | 1049); // 批量添加人脸停止
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_MULTI_APPEND_ERROR = (0x80000000 | 1050); // 批量添加人脸失败
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_ID_EXCEED = (0x80000000 | 1051); // 组ID超过最大值
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_ID_NOT_IN_REGISTER_GROUP = (0x80000000 | 1052); // 组ID不存在或为空
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_PICTURE_NOT_FOUND = (0x80000000 | 1053); // 无图片数据
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_GENERATE_GROUP_ID_FAILED = (0x80000000 | 1054); // 生成组ID超出范围
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_SET_CONFIG_FAILED = (0x80000000 | 1055); // 设置配置失败
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_FILE_OPEN_FAILED = (0x80000000 | 1056); // 图片文件打开失败
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_FILE_READ_FAILED = (0x80000000 | 1057); // 图片文件读取失败
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_FILE_WRITE_FAILED = (0x80000000 | 1058); // 图片文件写入失败
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_PICTURE_DPI_ERROR = (0x80000000 | 1059); // 图片分辨率异常
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_PICTURE_PX_ERROR = (0x80000000 | 1060); // 图片像素异常
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_PICTURE_SIZE_ERROR = (0x80000000 | 1061); // 图片大小不对
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_DATA_BASE_ERROR = (0x80000000 | 1062); // 数据库操作失败
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_FACE_MAX_NUM = (0x80000000 | 1063); // 人员数量超过限制
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_BIRTH_DAY_FORMAT_ERROR = (0x80000000 | 1064); // 生日日期格式错误
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_UID_ERROR = (0x80000000 | 1065); // 人员UID不存在或为空
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_TOKEN_ERROR = (0x80000000 | 1066); // 令牌不存在或为空
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_BEGIN_NUM_OVER_RUN = (0x80000000 | 1067); // 查询起始数大于总数
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_ABSTRACT_NUM_ZERO = (0x80000000 | 1068); // 需手动建模人数为0
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_ABSTRACT_INIT_ERROR = (0x80000000 | 1069); // 建模分析器启动失败
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_AUTO_ABSTRACT_STATE = (0x80000000 | 1070); // 设备正在自动建模
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_ABSTRACT_STATE = (0x80000000 | 1071); // 设备正在手动建模
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_IM_EX_STATE = (0x80000000 | 1072); // 设备正在导入导出
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_PIC_WRITE_FAILED = (0x80000000 | 1073); // 图片写入失败
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_SPACE_EXCEED = (0x80000000 | 1074); // 超出人脸库空间大小限制
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_PIC_COUNT_EXCEED = (0x80000000 | 1075); // 超出人脸库图片数量限制
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_NOT_FOUND = (0x80000000 | 1076); // 人脸库不存在
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_FIND_RECORDS_ERROR = (0x80000000 | 1077); // 查询原人脸库数据结果无效
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_DELETE_PERSON_ERROR = (0x80000000 | 1078); // 删除原人脸库数据失败
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_DELETE_GROUP_ERROR = (0x80000000 | 1079); // 删除人脸库失败
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_NAME_FORMAT_ERROR = (0x80000000 | 1080); // 命名格式错误
+ public static final int NET_ERROR_FACE_RECOGNITION_SERVER_FILEPATH_NOT_SET = (0x80000000 | 1081); // 图片保存路径未设置
+ public static final int NET_ERROR_DEVICE_PARSE_PROTOCOL = (0x80000000 | 1079); // 设备解析协议错误
+ public static final int NET_ERROR_DEVICE_INVALID_REQUEST = (0x80000000 | 1080); // 设备返回无效请求
+ public static final int NET_ERROR_DEVICE_INTERNAL_ERROR = (0x80000000 | 1081); // 设备内部错误
+ public static final int NET_ERROR_DEVICE_REQUEST_TIMEOUT = (0x80000000 | 1082); // 设备内部请求超时
+ public static final int NET_ERROR_DEVICE_KEEPALIVE_FAIL = (0x80000000 | 1083); // 设备保活失败
+ public static final int NET_ERROR_DEVICE_NETWORK_ERROR = (0x80000000 | 1084); // 设备网络错误
+ public static final int NET_ERROR_DEVICE_UNKNOWN_ERROR = (0x80000000 | 1085); // 设备内部未知错误
+ public static final int NET_ERROR_DEVICE_COM_INTERFACE_NOTFOUND = (0x80000000 | 1086); // 设备组件接口没有找到
+ public static final int NET_ERROR_DEVICE_COM_IMPLEMENT_NOTFOUND = (0x80000000 | 1087); // 设备组件实现没有找到
+ public static final int NET_ERROR_DEVICE_COM_NOTFOUND = (0x80000000 | 1088); // 设备接入组件没有找到
+ public static final int NET_ERROR_DEVICE_COM_INSTANCE_NOTEXIST = (0x80000000 | 1089); // 设备接入组件实例不存在
+ public static final int NET_ERROR_DEVICE_CREATE_COM_FAIL = (0x80000000 | 1090); // 设备组件工厂创建组件失败
+ public static final int NET_ERROR_DEVICE_GET_COM_FAIL = (0x80000000 | 1091); // 设备组件工厂获取组件实例失败
+ public static final int NET_ERROR_DEVICE_BAD_REQUEST = (0x80000000 | 1092); // 设备业务请求不被接受
+ public static final int NET_ERROR_DEVICE_REQUEST_IN_PROGRESS = (0x80000000 | 1093); // 设备已经在处理请求,不接受重复请求
+ public static final int NET_ERROR_DEVICE_LIMITED_RESOURCE = (0x80000000 | 1094); // 设备资源不足
+ public static final int NET_ERROR_DEVICE_BUSINESS_TIMEOUT = (0x80000000 | 1095); // 设备业务超时
+ public static final int NET_ERROR_DEVICE_TOO_MANY_REQUESTS = (0x80000000 | 1096); // 设备接收过多请求
+ public static final int NET_ERROR_DEVICE_NOT_ALREADY = (0x80000000 | 1097); // 设备未准备就绪,不接受业务请求
+ public static final int NET_ERROR_DEVICE_SEARCHRECORD_TIMEOUT = (0x80000000 | 1098); // 设备录像查询超时
+ public static final int NET_ERROR_DEVICE_SEARCHTIME_INVALID = (0x80000000 | 1099); // 设备录像查询时间无效
+ public static final int NET_ERROR_DEVICE_SSID_INVALID = (0x80000000 | 1100); // 设备校验SSID无效
+ public static final int NET_ERROR_DEVICE_CHANNEL_STREAMTYPE_ERROR = (0x80000000 | 1101); // 设备校验通道号或码流类型无效
+ public static final int NET_ERROR_DEVICE_STREAM_PACKINGFORMAT_UNSUPPORT = (0x80000000 | 1102); // 设备不支持该码流打包格式
+ public static final int NET_ERROR_DEVICE_AUDIO_ENCODINGFORMAT_UNSUPPORT = (0x80000000 | 1103); // 设备不支持该语音编码格式
+ public static final int NET_ERROR_SECURITY_ERROR_SUPPORT_GUI = (0x80000000 | 1104); // 校验请求安全码失败,可使用本地GUI方式重置密码
+ public static final int NET_ERROR_SECURITY_ERROR_SUPPORT_MULT = (0x80000000 | 1105); // 校验请求安全码失败,可使用DH渠道APP、configtool工具重置密码
+ public static final int NET_ERROR_SECURITY_ERROR_SUPPORT_UNIQUE = (0x80000000 | 1106); // 校验请求安全码失败,可登陆Web页面重置密码
+ public static final int NET_ERROR_STREAMCONVERTOR_DEFECT = (0x80000000 | 1107); // 转码库缺失
+
+
+ public static final int NET_ERROR_SECURITY_GENERATE_SAFE_CODE = (0x8000000 | 1108); // 调用DH加密库产生安全码失败
+ public static final int NET_ERROR_SECURITY_GET_CONTACT = (0x8000000 | 1109); // 获取联系方式失败
+ public static final int NET_ERROR_SECURITY_GET_QRCODE = (0x8000000 | 1110); // 获取重置密码的二维码信息失败
+ public static final int NET_ERROR_SECURITY_CANNOT_RESET = (0x8000000 | 1111); // 设备未初始化,无法重置
+ public static final int NET_ERROR_SECURITY_NOT_SUPPORT_CONTACT_MODE = (0x8000000 | 1112); // 不支持设置该种联系方式,如只支持设置手机号,却请求设置邮箱
+ public static final int NET_ERROR_SECURITY_RESPONSE_TIMEOUT = (0x8000000 | 1113); // 对端响应超时
+ public static final int NET_ERROR_SECURITY_AUTHCODE_FORBIDDEN = (0x8000000 | 1114); // 尝试校验AuthCode次数过多,禁止校验
+ public static final int NET_ERROR_TRANCODE_LOGIN_REMOTE_DEV = (0x8000000 | 1115); // (虚拟转码)登陆远程设备失败
+ public static final int NET_ERROR_TRANCODE_NOFREE_CHANNEL = (0x8000000 | 1116); // (虚拟转码)没有可用的通道资源
+ public static final int NET_ERROR_VK_INFO_DECRYPT_FAILED = (0x8000000 | 1117); // VK信息解密失败
+ public static final int NET_ERROR_VK_INFO_DESERIALIZE_FAILED = (0x8000000 | 1118); // VK信息解析失败
+ public static final int NET_ERROR_GDPR_ABILITY_NOT_ENABLE = (0x8000000 | 1119); // SDK GDPR功能未使能
+
+ /*门禁快速导入及复核错误码 start*/
+ public static final int NET_ERROR_FAST_CHECK_NO_AUTH = (0x80000000 | 1120); // 门禁快速复核:无权限
+ public static final int NET_ERROR_FAST_CHECK_NO_FILE = (0x80000000 | 1121); // 门禁快速复核:文件不存在
+ public static final int NET_ERROR_FAST_CHECK_FILE_FAIL = (0x80000000 | 1122); // 门禁快速复核:文件准备失败
+ public static final int NET_ERROR_FAST_CHECK_BUSY = (0x80000000 | 1123); // 门禁快速复核:系统忙
+ public static final int NET_ERROR_FAST_CHECK_NO_PASSWORD = (0x80000000 | 1124); // 门禁快速复核:未定义密码, 不允许导出
+ public static final int NET_ERROR_IMPORT_ACCESS_SEND_FAILD = (0x80000000 | 1125); // 门禁快速导入:发送门禁数据失败
+ public static final int NET_ERROR_IMPORT_ACCESS_BUSY = (0x80000000 | 1126); // 门禁快速导入:系统忙, 已经有导入任务
+ public static final int NET_ERROR_IMPORT_ACCESS_DATAERROR = (0x80000000 | 1127); // 门禁快速导入:数据包检验失败
+ public static final int NET_ERROR_IMPORT_ACCESS_DATAINVALID = (0x80000000 | 1128); // 门禁快速导入:数据包非法
+ public static final int NET_ERROR_IMPORT_ACCESS_SYNC_FALID = (0x80000000 | 1129); // 门禁快速导入:同步失败,数据库无法生成
+ public static final int NET_ERROR_IMPORT_ACCESS_DBFULL = (0x80000000 | 1130); // 门禁快速导入:数据库已满, 无法导入
+ public static final int NET_ERROR_IMPORT_ACCESS_SDFULL = (0x80000000 | 1131); // 门禁快速导入:存储空间已满, 无法导入
+ public static final int NET_ERROR_IMPORT_ACCESS_CIPHER_ERROR = (0x80000000 | 1132); // 门禁快速导入:导入压缩包密码不对
+ /*门禁快速导入及复核错误码 end*/
+
+ public static final int NET_ERROR_INVALID_PARAM = (0x80000000 | 1133); // 参数无效
+ public static final int NET_ERROR_INVALID_PASSWORD = (0x80000000 | 1134); // 密码无效
+ public static final int NET_ERROR_INVALID_FINGERPRINT = (0x80000000 | 1135); // 信息无效
+ public static final int NET_ERROR_INVALID_FACE = (0x80000000 | 1136); // 人脸无效
+ public static final int NET_ERROR_INVALID_CARD = (0x80000000 | 1137); // 卡无效
+ public static final int NET_ERROR_INVALID_USER = (0x80000000 | 1138); // 用户无效
+ public static final int NET_ERROR_GET_SUBSERVICE = (0x80000000 | 1139); // 能力集子服务获取失败
+ public static final int NET_ERROR_GET_METHOD = (0x80000000 | 1140); // 获取组件的方法集失败
+ public static final int NET_ERROR_GET_SUBCAPS = (0x80000000 | 1141); // 获取资源实体能力集失败
+ public static final int NET_ERROR_UPTO_INSERT_LIMIT = (0x80000000 | 1142); // 已达插入上限
+ public static final int NET_ERROR_UPTO_MAX_INSERT_RATE = (0x80000000 | 1143); // 已达最大插入速度
+ public static final int NET_ERROR_ERASE_FINGERPRINT = (0x80000000 | 1144); // 清除信息数据失败
+ public static final int NET_ERROR_ERASE_FACE = (0x80000000 | 1145); // 清除人脸数据失败
+ public static final int NET_ERROR_ERASE_CARD = (0x80000000 | 1146); // 清除卡数据失败
+ public static final int NET_ERROR_NO_RECORD = (0x80000000 | 1147); // 没有记录
+ public static final int NET_ERROR_NOMORE_RECORDS = (0x80000000 | 1148); // 查找到最后,没有更多记录
+ public static final int NET_ERROR_RECORD_ALREADY_EXISTS = (0x80000000 | 1149); // 下发卡或信息时,数据重复
+ public static final int NET_ERROR_EXCEED_MAX_FINGERPRINT_PERUSER = (0x80000000 | 1150); // 超过个人最大信息记录数
+ public static final int NET_ERROR_EXCEED_MAX_CARD_PERUSER = (0x80000000 | 1151); // 超过个人最大卡片记录数
+ public static final int NET_ERROR_EXCEED_ADMINISTRATOR_LIMIT = (0x80000000 | 1152); // 超过门禁管理员个数限制
+
+ public static final int NET_LOGIN_ERROR_DEVICE_NOT_SUPPORT_HIGHLEVEL_SECURITY_LOGIN = (0x80000000 | 1153); // 设备不支持高安全等级登录
+ public static final int NET_LOGIN_ERROR_DEVICE_ONLY_SUPPORT_HIGHLEVEL_SECURITY_LOGIN = (0x80000000 | 1154); // 设备只支持高安全等级登录
+
+ public static final int NET_ERROR_VIDEO_CHANNEL_OFFLINE = (0x80000000 | 1155); // 表示此视频通道处于离线,拉流失败
+ public static final int NET_ERROR_USERID_FORMAT_INCORRECT = (0x80000000 | 1156); // 用户编号不规范
+ public static final int NET_ERROR_CANNOT_FIND_CHANNEL_RELATE_TO_SN = (0x80000000 | 1157); // 找不到该SN对应的通道
+ public static final int NET_ERROR_TASK_QUEUE_OF_CHANNEL_IS_FULL = (0x80000000 | 1158); // 该通道的任务队列满
+ public static final int NET_ERROR_APPLY_USER_INFO_BLOCK_FAIL = (0x80000000 | 1159); // 申请不到新的用户信息(权限)块
+ public static final int NET_ERROR_EXCEED_MAX_PASSWD_PERUSER = (0x80000000 | 1160); // 用户密码数量超过限制
+ public static final int NET_ERROR_PARSE_PROTOCOL = (0x80000000 | 1161); // 设备内部异常引起协议解析错误
+ public static final int NET_ERROR_CARD_NUM_EXIST = (0x80000000 | 1162); // 卡号已存在
+ public static final int NET_ERROR_FINGERPRINT_EXIST = (0x80000000 | 1163); // 信息已存在
+
+ public static final int NET_ERROR_OPEN_PLAYGROUP_FAIL = (0x80000000 | 1164); // 打开播放组失败
+ public static final int NET_ERROR_ALREADY_IN_PLAYGROUP = (0x80000000 | 1165); // 已位于播放组中
+ public static final int NET_ERROR_QUERY_PLAYGROUP_TIME_FAIL = (0x80000000 | 1166); // 查询播放组时间失败
+ public static final int NET_ERROR_SET_PLAYGROUP_BASECHANNEL_FAIL = (0x80000000 | 1167); // 设置播放组基准通道失败
+ public static final int NET_ERROR_SET_PLAYGROUP_DIRECTION_FAIL = (0x80000000 | 1168); // 设置播放组方向失败
+ public static final int NET_ERROR_SET_PLAYGROUP_SPEED_FAIL = (0x80000000 | 1169); // 设置播放组速度失败
+ public static final int NET_ERROR_ADD_PLAYGROUP_FAIL = (0x80000000 | 1170); // 加入播放组失败
+
+ public static final int NET_ERROR_EXPORT_AOL_LOGFILE_NO_AUTH = (0x80000000 | 1171); // 导出AOL日志:无权限
+ public static final int NET_ERROR_EXPORT_AOL_LOGFILE_NO_FILE = (0x80000000 | 1172); // 导出AOL日志:文件不存在
+ public static final int NET_ERROR_EXPORT_AOL_LOGFILE_FILE_FAIL = (0x80000000 | 1173); // 导出AOL日志:文件准备失败
+ public static final int NET_ERROR_EXPORT_AOL_LOGFILE_BUSY = (0x80000000 | 1174); // 导出AOL日志:系统忙
+
+ // 设备上APP安装相关错误码
+ public static final int NET_ERROR_EMPTY_LICENSE = (0x80000000 | 1175); // License为空
+ public static final int NET_ERROR_UNSUPPORTED_MODE = (0x80000000 | 1176); // 不支持该模式
+ public static final int NET_ERROR_URL_APP_NOT_MATCH = (0x80000000 | 1177); // URL与APP不匹配
+ public static final int NET_ERROR_READ_INFO_FAILED = (0x80000000 | 1178); // 读取信息失败
+ public static final int NET_ERROR_WRITE_FAILED = (0x80000000 | 1179); // 写入失败
+ public static final int NET_ERROR_NO_SUCH_APP = (0x80000000 | 1180); // 未找到APP
+ public static final int NET_ERROR_VERIFIF_FAILED = (0x80000000 | 1181); // 校验失败
+ public static final int NET_ERROR_LICENSE_OUT_DATE = (0x80000000 | 1182); // License已过期
+
+ public static final int NET_ERROR_UPGRADE_PROGRAM_TOO_OLD = (0x80000000 | 1183); // 升级程序版本过低
+ public static final int NET_ERROR_SECURE_TRANSMIT_BEEN_CUT = (0x80000000 | 1184); // 加密传输被裁剪
+ public static final int NET_ERROR_DEVICE_NOT_SUPPORT_SECURE_TRANSMIT = (0x80000000 | 1185); // 设备不支持安全传输
+
+ public static final int NET_ERROR_EXTRA_STREAM_LOGIN_FAIL_CAUSE_BY_MAIN_STREAM = (0x80000000 | 1186); // 主码流成功的情况下,辅码流登录失败
+ public static final int NET_ERROR_EXTRA_STREAM_CLOSED_BY_REMOTE_DEVICE = (0x80000000 | 1187); // 辅码流被前端关闭
+
+ /*人脸库导入导出错误码 start*/
+ public static final int NET_ERROR_IMPORT_FACEDB_SEND_FAILD = (0x80000000 | 1188); // 人脸库导入:发送人脸库数据失败
+ public static final int NET_ERROR_IMPORT_FACEDB_BUSY = (0x80000000 | 1189); // 人脸库导入:系统忙, 已经有导入任务
+ public static final int NET_ERROR_IMPORT_FACEDB_DATAERROR = (0x80000000 | 1190); // 人脸库导入:数据包检验失败
+ public static final int NET_ERROR_IMPORT_FACEDB_DATAINVALID = (0x80000000 | 1191); // 人脸库导入:数据包非法
+ public static final int NET_ERROR_IMPORT_FACEDB_UPGRADE_FAILD = (0x80000000 | 1192); // 人脸库导入:上传失败
+ public static final int NET_ERROR_IMPORT_FACEDB_NO_AUTHORITY = (0x80000000 | 1193); // 人脸库导入:用户无权限
+ public static final int NET_ERROR_IMPORT_FACEDB_ABNORMAL_FILE = (0x80000000 | 1194); // 人脸库导入:文件格式异常
+ public static final int NET_ERROR_IMPORT_FACEDB_SYNC_FALID = (0x80000000 | 1195); // 人脸库导入:同步失败,数据库无法生成
+ public static final int NET_ERROR_IMPORT_FACEDB_DBFULL = (0x80000000 | 1196); // 人脸库导入:数据库已满, 无法导入
+ public static final int NET_ERROR_IMPORT_FACEDB_SDFULL = (0x80000000 | 1197); // 人脸库导入:存储空间已满, 无法导入
+ public static final int NET_ERROR_IMPORT_FACEDB_CIPHER_ERROR = (0x80000000 | 1198); // 人脸库导入:导入压缩包密码不对
+
+ public static final int NET_ERROR_EXPORT_FACEDB_NO_AUTH = (0x80000000 | 1199); // 人脸库导出:无权限
+ public static final int NET_ERROR_EXPORT_FACEDB_NO_FILE = (0x80000000 | 1200); // 人脸库导出:文件不存在
+ public static final int NET_ERROR_EXPORT_FACEDB_FILE_FAIL = (0x80000000 | 1201); // 人脸库导出:文件准备失败
+ public static final int NET_ERROR_EXPORT_FACEDB_BUSY = (0x80000000 | 1202); // 人脸库导出:系统忙
+ public static final int NET_ERROR_EXPORT_FACEDB_NO_PASSWORD = (0x80000000 | 1203); // 人脸库导出:未定义密码, 不允许导出
+ /*人脸库导入导出错误码 end*/
+
+ /* 人脸图片操作错误码 范围 _EC(1300) ~ _EC(1400) */
+ public static final int NET_ERROR_FACEMANAGER_NO_FACE_DETECTED = (0x80000000 | 1300); // 图片中检测到0个人脸目标
+ public static final int NET_ERROR_FACEMANAGER_MULTI_FACE_DETECTED = (0x80000000 | 1301); // 图片中检测到多个人脸,无法返回特征
+ public static final int NET_ERROR_FACEMANAGER_PICTURE_DECODING_ERROR = (0x80000000 | 1302); // 图片解码错误
+ public static final int NET_ERROR_FACEMANAGER_LOW_PICTURE_QUALITY = (0x80000000 | 1303); // 图片质量太低
+ public static final int NET_ERROR_FACEMANAGER_NOT_RECOMMENDED = (0x80000000 | 1304); // 结果不推荐使用,比如:对外国人,特征提取成功,但算法支持不好,容易造成误识别
+ public static final int NET_ERROR_FACEMANAGER_FACE_FEATURE_ALREADY_EXIST = (0x80000000 | 1305); // 人脸特征已存在
+ public static final int NET_ERROR_FACEMANAGER_FACE_ANGLE_OVER_THRESHOLDS = (0x80000000 | 1307); // 人脸角度超过配置阈值
+ public static final int NET_ERROR_FACEMANAGER_FACE_RADIO_EXCEEDS_RANGE = (0x80000000 | 1308); // 人脸占比超出范围,算法建议占比:不要超过2/3;不要小于1/3
+ public static final int NET_ERROR_FACEMANAGER_FACE_OVER_EXPOSED = (0x80000000 | 1309); // 人脸过爆
+ public static final int NET_ERROR_FACEMANAGER_FACE_UNDER_EXPOSED = (0x80000000 | 1310); // 人脸欠爆
+ public static final int NET_ERROR_FACEMANAGER_BRIGHTNESS_IMBALANCE = (0x80000000 | 1311); // 人脸亮度不均衡 ,用于判断阴阳脸
+ public static final int NET_ERROR_FACEMANAGER_FACE_LOWER_CONFIDENCE = (0x80000000 | 1312); // 人脸的置信度低
+ public static final int NET_ERROR_FACEMANAGER_FACE_LOW_ALIGN = (0x80000000 | 1313); // 人脸对齐分数低
+ public static final int NET_ERROR_FACEMANAGER_FRAGMENTARY_FACE_DETECTED = (0x80000000 | 1314); // 人脸存在遮挡、残缺不全
+ public static final int NET_ERROR_FACEMANAGER_PUPIL_DISTANCE_NOT_ENOUGH = (0x80000000 | 1315); // 人脸瞳距小于阈值
+ public static final int NET_ERROR_FACEMANAGER_FACE_DATA_DOWNLOAD_FAILED = (0x80000000 | 1316); // 人脸数据下载失败
+
+}
diff --git a/src/main/java/com/netsdk/lib/LibraryLoad.java b/src/main/java/com/netsdk/lib/LibraryLoad.java
new file mode 100644
index 0000000..13072fb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/LibraryLoad.java
@@ -0,0 +1,189 @@
+package com.netsdk.lib;
+
+import com.netsdk.lib.DynamicParseUtil;
+import org.xml.sax.SAXException;
+
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.*;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 动态库加载
+ * @date 2020/11/14
+ */
+public class LibraryLoad {
+ private static final String ARCH_WINDOWS = "win";
+ private static final String ARCH_LINUX = "linux";
+ private static final String ARCH_MAC = "mac";
+ private static final int PREFIX_64 = 64;
+ private static final int PREFIX_32 = 32;
+ private static final String PREFIX_ARM = "ARM";
+ private static final String EXTERNAL_WIN = ".dll";
+ private static final String EXTERNAL_LINUX = ".so";
+ private static final String EXTERNAL_MAC = ".dylib";
+ private static DynamicParseUtil dynamicParseUtil;
+ /** 当前读取的目录 */
+ private static String currentFold;
+ /** 动态库需要写入的目录 */
+ private static String EXTRACT_PATH = System.getProperty("java.io.tmpdir");
+
+ private static boolean written = false;
+
+ /**
+ * 设置动态库写入的路径,适用于需要自定义加载路径的用户
+ *
+ * @param path 动态库写入的文件夹,从该文件夹下加载sdk的动态库
+ */
+ public static void setExtractPath(String path) {
+ EXTRACT_PATH = path;
+ }
+
+ public static String getExtractPath() {
+ return EXTRACT_PATH;
+
+ }
+ /** 动态库路径 */
+ private static String INNER_PATH;
+
+ // private static final String EXTERNAL_MAC = ".so";
+
+ private static String extractNetSDKLib(String libName) {
+ return extractLibrary(libName);
+ }
+
+ public static String getLoadLibrary(String libraryName) {
+ currentFold = getLibraryFold();
+ if (dynamicParseUtil == null) {
+ try {
+ dynamicParseUtil =
+ new DynamicParseUtil(
+ LibraryLoad.class.getClassLoader().getResourceAsStream("dynamic-lib-load.xml"));
+ if (!written) {
+ for (String libName : dynamicParseUtil.getLibsSystem(currentFold)) {
+ extractLibrary(libName);
+ }
+ written = true;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ String fullName = getLibraryName(libraryName);
+ String path = EXTRACT_PATH;
+ if (!(EXTRACT_PATH.endsWith("/") || EXTRACT_PATH.endsWith("\\"))) {
+ path = EXTRACT_PATH + "/";
+ }
+ System.out.println("load library: " + path + fullName);
+ return path + fullName;
+ }
+
+ /**
+ * 将jar包里的动态库写入到系统缓存目录,使用绝对路径加载动态库
+ *
+ * @param libName
+ * @return
+ */
+ private static String extractLibrary(String libName) {
+ return extractLibrary("", libName);
+ }
+
+ /**
+ * 相对路径文件夹
+ *
+ * @param relativePath 相对路径
+ * @param libName 动态库路径
+ * @return
+ */
+ private static String extractLibrary(String relativePath, String libName) {
+ if (libName.trim().equals("")) {
+ return "";
+ }
+ String libFullName = getLibraryName(libName);
+ String dir = getLibraryFold();
+ if (!(relativePath.endsWith("/") || relativePath.endsWith("\\"))) {
+ relativePath = relativePath + "/";
+ }
+ String fileName = relativePath + dir + "/" + libFullName;
+ InputStream in = LibraryLoad.class.getResourceAsStream(fileName);
+ BufferedInputStream reader;
+ FileOutputStream writer;
+ File extractedLibFile = null;
+ try {
+ if (in == null) {
+ in = new FileInputStream(fileName);
+ }
+ String nativeTempDir = EXTRACT_PATH;
+ if (!(nativeTempDir.endsWith("/") || nativeTempDir.endsWith("\\"))) {
+ nativeTempDir = nativeTempDir + "/";
+ }
+ extractedLibFile = new File(nativeTempDir + libFullName);
+ reader = new BufferedInputStream(in);
+ writer = new FileOutputStream(extractedLibFile);
+ byte[] buffer = new byte[1024];
+ while (true) {
+ int len = reader.read(buffer);
+ if (len == 0 || len == -1) break;
+ writer.write(buffer, 0, len);
+ }
+ reader.close();
+ writer.close();
+ in.close();
+ } catch (Exception e) {
+ //System.out.println("dynamic file[ "+ fileName+ " ] not found in project.please ensure you need this library.");
+ }
+ return extractedLibFile != null ? extractedLibFile.getAbsolutePath() : "";
+ }
+
+ /**
+ * 获取动态库完整名称
+ *
+ * @param libName
+ * @return
+ */
+ private static String getLibraryName(String libName) {
+ String dir = currentFold;
+ String libPrefix = "";
+ String libExtension = EXTERNAL_WIN;
+
+ if (!dir.contains("win")) {
+ libPrefix = "lib";
+ if (dir.contains("linux")) {
+ libExtension = EXTERNAL_LINUX;
+ } else {
+ // libExtension=".dylib";
+ libExtension = EXTERNAL_MAC;
+ }
+ }
+ libName = dynamicParseUtil.compareLibName(currentFold, libName);
+ // 动态库以lib开头,则不添加lib前缀
+ // 以lib开头的库则不添加lib前缀
+ return (libName.startsWith("lib") ? "" : libPrefix) + libName + libExtension;
+ }
+
+ // 获取系统对应的动态库文件夹
+ private static String getLibraryFold() {
+ String osType;
+ String osName = System.getProperty("os.name");
+ if (osName.toLowerCase().startsWith("linux")) {
+ osType = ARCH_LINUX;
+ } else if (osName.toLowerCase().startsWith("mac")
+ || osName.toLowerCase().startsWith("darwin")) {
+ osType = ARCH_MAC;
+ } else if (osName.toLowerCase().startsWith("windows")) {
+ osType = ARCH_WINDOWS;
+ } else {
+ osType = "";
+ }
+ String arch = System.getProperty("os.arch");
+ arch = arch.toLowerCase().trim();
+ if ("i386".equals(arch) || "i686".equals(arch)||"x86".equals(arch)) {
+ arch = PREFIX_32 + "";
+ } else if ("x86_64".equals(arch) || "amd64".equals(arch)) {
+ arch = PREFIX_64 + "";
+ } else if (arch.startsWith("arm")) {
+ arch = PREFIX_ARM + "";
+ }
+ return osType + arch;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/NativeString.java b/src/main/java/com/netsdk/lib/NativeString.java
new file mode 100644
index 0000000..541daeb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/NativeString.java
@@ -0,0 +1,124 @@
+package com.netsdk.lib;
+
+import java.io.UnsupportedEncodingException;
+import java.nio.CharBuffer;
+
+import com.sun.jna.Memory;
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+
+
+/** Provides a temporary allocation of an immutable C string
+ * (const char* or const wchar_t*) for use when
+ * converting a Java String into a native memory function argument.
+ *
+ * @author Todd Fast, todd.fast@sun.com
+ * @author twall@users.sf.net
+ */
+public class NativeString implements CharSequence, Comparable {
+
+ private Pointer pointer;
+ private boolean wide;
+
+ /** Create a native string (NUL-terminated array of char).
+ * If the system property jna.encoding is set, its value will
+ * be used to encode the native string. If not set or if the encoding
+ * is unavailable, the default platform encoding will be used.
+ */
+ public NativeString(String string) {
+ this(string, false);
+ }
+
+ /** Create a native string as a NUL-terminated array of wchar_t
+ * (if wide is true) or char.
+ * If the system property jna.encoding is set, its value will
+ * be used to encode the native charstring.
+ * If not set or if the encoding is unavailable, the default platform
+ * encoding will be used.
+ *
+ * @param string value to write to native memory
+ * @param wide whether to store the String as wchar_t
+ */
+ public NativeString(String string, boolean wide) {
+ if (string == null) {
+ throw new NullPointerException("String must not be null");
+ }
+ // Allocate the memory to hold the string. Note, we have to
+ // make this 1 element longer in order to accommodate the terminating
+ // NUL (which is generated in Pointer.setString()).
+ this.wide = wide;
+ if (wide) {
+ int len = (string.length() + 1 ) * Native.WCHAR_SIZE;
+ pointer = new Memory(len);
+ pointer.setString(0, string);
+ }
+ else {
+ byte[] data = getBytes(string);
+ pointer = new Memory(data.length + 1);
+ pointer.write(0, data, 0, data.length);
+ pointer.setByte(data.length, (byte)0);
+ }
+ }
+
+ static byte[] getBytes(String s) {
+ try {
+ return getBytes(s, System.getProperty("jna.encoding"));
+ }
+ catch (UnsupportedEncodingException e) {
+ return s.getBytes();
+ }
+ }
+
+ /** Return a byte array corresponding to the given String, using the given
+ encoding.
+ */
+ static byte[] getBytes(String s, String encoding) throws UnsupportedEncodingException {
+ if (encoding != null) {
+ return s.getBytes(encoding);
+ }
+ return s.getBytes();
+ }
+
+ public int hashCode() {
+ return toString().hashCode();
+ }
+
+ public boolean equals(Object other) {
+
+ if (other instanceof CharSequence) {
+ return compareTo(other) == 0;
+ }
+ return false;
+ }
+
+ public String toString() {
+ String s = wide ? "const wchar_t*" : "const char*";
+ s += "(" + pointer.getString(0) + ")";
+ return s;
+ }
+
+ public Pointer getPointer() {
+ return pointer;
+ }
+
+ public char charAt(int index) {
+ return toString().charAt(index);
+ }
+
+ public int length() {
+ return toString().length();
+ }
+
+ public CharSequence subSequence(int start, int end) {
+ return CharBuffer.wrap(toString()).subSequence(start, end);
+ }
+
+ public int compareTo(Object other) {
+
+ if (other == null)
+ return 1;
+
+ return toString().compareTo(other.toString());
+ }
+}
+
diff --git a/src/main/java/com/netsdk/lib/NetSDKLib.java b/src/main/java/com/netsdk/lib/NetSDKLib.java
new file mode 100644
index 0000000..ffd4fa4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/NetSDKLib.java
@@ -0,0 +1,37330 @@
+package com.netsdk.lib;
+import com.netsdk.lib.enumeration.*;
+import com.netsdk.lib.structure.*;
+import com.sun.jna.*;
+import com.sun.jna.ptr.IntByReference;
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.sun.jna.win32.StdCallLibrary.StdCallCallback;
+
+/**
+ * NetSDK JNA接口封装
+ */
+public interface NetSDKLib extends Library {
+
+ NetSDKLib NETSDK_INSTANCE = Native.load(LibraryLoad.getLoadLibrary("dhnetsdk"), NetSDKLib.class);
+
+ NetSDKLib CONFIG_INSTANCE = Native.load(LibraryLoad.getLoadLibrary("dhconfigsdk"), NetSDKLib.class);
+
+ //NetSDKLib CONFIG_JNI = (NetSDKLib)Native.loadLibrary(util.getLoadLibrary("JNI1.dll"), INetSDK.class);
+ class LLong extends IntegerType {
+ private static final long serialVersionUID = 1L;
+
+ /** Size of a native long, in bytes. */
+ public static int size;
+ static {
+ size = Native.LONG_SIZE;
+ if (Utils.getOsPrefix().equalsIgnoreCase("linux-amd64")
+ || Utils.getOsPrefix().equalsIgnoreCase("win32-amd64")
+ || Utils.getOsPrefix().equalsIgnoreCase("mac-64")) {
+ size = 8;
+ } else if (Utils.getOsPrefix().equalsIgnoreCase("linux-i386")
+ || Utils.getOsPrefix().equalsIgnoreCase("win32-x86")) {
+ size = 4;
+ }
+ }
+
+ /** Create a zero-valued LLong. */
+ public LLong() {
+ this(0);
+ }
+
+ /** Create a LLong with the given value. */
+ public LLong(long value) {
+ super(size, value);
+ }
+ }
+ public static class SdkStructure extends Structure {
+ @Override
+ protected List getFieldOrder(){
+ List fieldOrderList = new ArrayList();
+ for (Class> cls = getClass();
+ !cls.equals(SdkStructure.class);
+ cls = cls.getSuperclass()) {
+ Field[] fields = cls.getDeclaredFields();
+ int modifiers;
+ for (Field field : fields) {
+ modifiers = field.getModifiers();
+ if (Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) {
+ continue;
+ }
+ fieldOrderList.add(field.getName());
+ }
+ }
+ // System.out.println(fieldOrderList);
+
+ return fieldOrderList;
+ }
+
+ @Override
+ public int fieldOffset(String name){
+ return super.fieldOffset(name);
+ }
+ }
+
+ /************************************************************************
+ ** 常量定义
+ ***********************************************************************/
+ public static final int MAX_INSIDEOBJECT_NUM = 32; // 最大包裹内物品个数
+ public static final int NET_SERIALNO_LEN = 48; // 设备序列号字符长度
+ public static final int NET_CFG_Max_VideoColor = 24; // 每个通道最大视频输入颜色配置数量
+ public static final int NET_CFG_Custom_Title_Len = 1024; // 自定义标题名称长度(扩充到1024)
+ public static final int NET_CFG_Custom_TitleType_Len = 32; // 自定义标题类型长度
+ public static final int NET_CFG_Max_Video_Widget_Cover = 16; // 编码区域覆盖最大数量
+ public static final int NET_CFG_Max_Video_Widget_Custom_Title = 8; // 编码物件自定义标题最大数量
+ public static final int NET_CFG_Max_Video_Widget_Sensor_Info = 2; // 编码物件叠加传感器信息的最大数目
+ public static final int NET_CFG_Max_Description_Num = 4; // 叠加区域描述信息的最大个数
+ public static final int NET_GATEWAY_MAX_SIM_NUM =8; // 网关SIM卡最大个数
+ // 错误类型代号,对应CLIENT_GetLastError接口的返回值, 十进制
+
+ // CLIENT_StartListenEx报警事件
+ public static final int NET_ALARM_ALARM_EX = 0x2101; // 外部报警,数据字节数与设备报警通道个数相同,每个字节表示一个报警通道的报警状态,1为有报警,0为无报警。
+ public static final int NET_MOTION_ALARM_EX = 0x2102; // 动态检测报警,数据字节数与设备视频通道个数相同,每个字节表示一个视频通道的动态检测报警状态,1为有报警,0为无报警。
+ public static final int NET_VIDEOLOST_ALARM_EX = 0x2103; // 视频丢失报警,数据字节数与设备视频通道个数相同,每个字节表示一个视频通道的视频丢失报警状态,1为有报警,0为无报警。
+ public static final int NET_SHELTER_ALARM_EX = 0x2104; // 视频遮挡报警,数据字节数与设备视频通道个数相同,每个字节表示一个视频通道的遮挡(黑屏)报警状态,1为有报警,0为无报警。
+ public static final int NET_DISKFULL_ALARM_EX = 0x2106; // 硬盘满报警,数据为1个字节,1为有硬盘满报警,0为无报警。
+ public static final int NET_DISKERROR_ALARM_EX = 0x2107; // 坏硬盘报警,数据为32个字节,每个字节表示一个硬盘的故障报警状态,1为有报警,0为无报警。
+ public static final int NET_TRAF_CONGESTION_ALARM_EX = 0x211A; // 交通阻塞报警(车辆出现异常停止或者排队)(对应结构体 ALARM_TRAF_CONGESTION_INFO)
+ public static final int NET_ALARM_ACC_POWEROFF = 0x211E; // ACC断电报警,数据为 DWORD 0:ACC通电 1:ACC断电
+ public static final int NET_ALARM_3GFLOW_EXCEED = 0x211F; // 3G流量超出阈值报警(对应结构体 DHDEV_3GFLOW_EXCEED_STATE_INFO)
+ public static final int NET_ALARM_ENCLOSURE = 0x2126; // 电子围栏报警(对应结构体 ALARM_ENCLOSURE_INFO)
+ public static final int NET_ALARM_RAID_STATE = 0x2128; // RAID异常报警(对应结构体 ALARM_RAID_INFO)
+ public static final int NET_ALARM_TRAFFIC_FLUX_STAT = 0x212E; // 交通流量统计报警(对应结构体ALARM_TRAFFIC_FLUX_LANE_INFO)
+ public static final int NET_ALARM_FRONTDISCONNECT = 0x2132; // 前端IPC断网报警(对应结构体 ALARM_FRONTDISCONNET_INFO)
+ public static final int NET_ALARM_BATTERYLOWPOWER = 0x2134; // 电池电量低报警(对应结构体 ALARM_BATTERYLOWPOWER_INFO)
+ public static final int NET_ALARM_TEMPERATURE = 0x2135; // 温度过高报警(对应结构体 ALARM_TEMPERATURE_INFO)
+ public static final int NET_ALARM_STORAGE_FAILURE_EX = 0x2163; // 存储错误报警(对应结构体 ALARM_STORAGE_FAILURE_EX)
+ public static final int NET_ALARM_TALKING_INVITE = 0x2171; // 设备请求对方发起对讲事件(对应结构体 ALARM_TALKING_INVITE_INFO)
+ public static final int NET_ALARM_ALARM_EX2 = 0x2175; // 本地报警事件(对应结构体ALARM_ALARM_INFO_EX2,对NET_ALARM_ALARM_EX升级)
+ public static final int NET_ALARM_IPC = 0x218c; // IPC报警,IPC通过DVR或NVR上报的本地报警(对应结构体 ALARM_IPC_INFO)
+ public static final int NET_EVENT_VIDEOABNORMALDETECTION = 0x218e; // 视频异常事件(对应ALARM_VIDEOABNORMAL_DETECTION_INFO)
+ public static final int NET_ALARM_USER_PASS_CONFIRM = 0x21A2; // 用户通过闸机进入或离开事件(对应结构体 NET_ALARM_USER_PASS_CONFIRM_INFO)
+ public static final int NET_ALARM_REID_CLUSTER_STATE = 0x21A5; // REID项目上报设备聚档状态事件(对应结构体 NET_ALARM_REID_CLUSTER_STATE_INFO)
+
+ public static final int NET_CONFIG_RESULT_EVENT_EX = 0x3000; // 修改配置的返回码;返回结构见 DEV_SET_RESULT
+ public static final int NET_START_LISTEN_FINISH_EVENT = 0x300c; // 订阅事件接口完成异步通知事件, 信息为 START_LISTEN_FINISH_RESULT_INFO
+ public static final int NET_ALARM_STORAGE_NOT_EXIST = 0x3167; // 存储组不存在事件(对应结构体 ALARM_STORAGE_NOT_EXIST_INFO)
+ public static final int NET_ALARM_SCADA_DEV_ALARM = 0x31a2; // 检测采集设备报警事件(对应结构体 ALARM_SCADA_DEV_INFO)
+ public static final int NET_ALARM_PARKING_CARD = 0x31a4; // 停车刷卡事件(对应结构体 ALARM_PARKING_CARD)
+ public static final int NET_ALARM_VEHICLE_ACC = 0x31a6; // 车辆ACC报警事件(对应结构体 ALARM_VEHICLE_ACC_INFO)
+ public static final int NET_ALARM_HEATIMG_TEMPER = 0x31aa; // 热成像测温点温度异常报警事件(对应结构体 ALARM_HEATIMG_TEMPER_INFO)
+ public static final int NET_ALARM_NEW_FILE = 0x31b3; // 新文件事件(对应 ALARM_NEW_FILE_INFO)
+ public static final int NET_ALARM_HUMAM_NUMBER_STATISTIC = 0x31cc; // 人数量/客流量统计事件 (对应结构体 ALARM_HUMAN_NUMBER_STATISTIC_INFO)
+ public static final int NET_ALARM_ARMMODE_CHANGE_EVENT = 0x3175; // 布撤防状态变化事件(对应结构体 ALARM_ARMMODE_CHANGE_INFO)
+ public static final int NET_ALARM_ACCESS_CTL_NOT_CLOSE = 0x3177; // 门禁未关事件(对应结构体 ALARM_ACCESS_CTL_NOT_CLOSE_INFO)
+ public static final int NET_ALARM_ACCESS_CTL_BREAK_IN = 0x3178; // 闯入事件(对应结构体 ALARM_ACCESS_CTL_BREAK_IN_INFO)
+ public static final int NET_ALARM_ACCESS_CTL_EVENT = 0x3181; // 门禁事件(对应结构体 ALARM_ACCESS_CTL_EVENT_INFO)
+ public static final int NET_URGENCY_ALARM_EX2 = 0x3182; // 紧急报警EX2(对 NET_URGENCY_ALARM_EX 的升级,对应结构体 ALARM_URGENCY_ALARM_EX2, 人为触发的紧急事件, 一般处理是联动外部通讯功能请求帮助
+ public static final int NET_ALARM_ACCESS_CTL_STATUS = 0x3185; // 门禁状态事件(对应结构体 ALARM_ACCESS_CTL_STATUS_INFO)
+ public static final int NET_ALARM_ALARMCLEAR = 0x3187; // 消警事件(对应结构体 ALARM_ALARMCLEAR_INFO )
+ public static final int NET_ALARM_RCEMERGENCY_CALL = 0x318b; // 紧急呼叫报警事件(对应结构体 ALARM_RCEMERGENCY_CALL_INFO)
+ public static final int NET_ALARM_FINGER_PRINT = 0x318d; // 获取信息事件(对应结构体 ALARM_CAPTURE_FINGER_PRINT_INFO)
+ public static final int NET_ALARM_MODULE_LOST = 0x3195; // 扩展模块掉线事件(对应结构体 ALARM_MODULE_LOST_INFO)
+ public static final int NET_ALARM_ENCLOSURE_ALARM = 0x319B; // 电子围栏事件(对应结构体 ALARM_ENCLOSURE_ALARM_INFO)
+ public static final int NET_ALARM_BUS_SHARP_ACCELERATE = 0x31ae; // 车辆急加速事件(对应结构体 ALARM_BUS_SHARP_ACCELERATE_INFO)
+ public static final int NET_ALARM_BUS_SHARP_DECELERATE = 0x31af; // 车辆急减速事件(对应结构体 ALARM_BUS_SHARP_DECELERATE_INFO)
+ public static final int NET_ALARM_ACCESS_CARD_OPERATE = 0x31b0; // 门禁卡数据操作事件(对应结构体ALARM_ACCESS_CARD_OPERATE_INFO)
+ public static final int NET_ALARM_FIREWARNING = 0x31b5; // 热成像着火点事件 (对应结构体 ALARM_FIREWARNING_INFO)
+ public static final int NET_ALARM_WIFI_SEARCH = 0x31c7; // 获取到周围环境中WIFI设备上报事件(对应结构体 ALARM_WIFI_SEARCH_INFO)
+ public static final int NET_ALARM_WIFI_SEARCH_EX = 0x8000; // 获取到周围环境中WIFI设备上报事件(对应结构体 ALARM_WIFI_SEARCH_INFO_EX)
+ public static final int NET_ALARM_HOTSPOT_WARNING = 0X31d8; // 热成像热点异常报警(对应结构体 ALARM_HOTSPOT_WARNING_INFO)
+ public static final int NET_ALARM_COLDSPOT_WARNING = 0X31d9; // 热成像冷点异常报警(对应结构体 ALARM_COLDSPOT_WARNING_INFO)
+ public static final int NET_ALARM_FIREWARNING_INFO = 0X31da; // 热成像火情事件信息上报(对应结构体 ALARM_FIREWARNING_INFO_DETAIL)
+ public static final int NET_ALARM_RADAR_HIGH_SPEED = 0x31df; // 雷达监测超速报警事件 智能楼宇专用 (对应结构体 ALARM_RADAR_HIGH_SPEED_INFO)
+ public static final int NET_ALARM_RAID_STATE_EX = 0x31fc; // RAID异常报警(对应结构体 ALARM_RAID_INFO_EX)
+ public static final int NET_ALARM_STORAGE_IPC_FAILURE = 0x31fd; // IPC的存储介质故障事件(IPC SD卡异常)(对应结构体 ALARM_STORAGE_IPC_FAILURE_INFO)
+ public static final int NET_ALARM_POLLING_ALARM = 0x31e0; // 设备巡检报警事件 智能楼宇专用 (对应结构体 ALARM_POLLING_ALARM_INFO)
+ public static final int NET_ALARM_TRAFFICSTROBESTATE = 0x31e2; // 道闸栏状态事件(对应结构体 ALARM_TRAFFICSTROBESTATE_INFO)
+ public static final int NET_ALARM_WIFI_VIRTUALINFO_SEARCH = 0x31ef; // WIFI虚拟身份上报事件(对应结构体 ALARM_WIFI_VIRTUALINFO_SEARCH_INFO)
+ public static final int NET_ALARM_GPS_NOT_ALIGNED = 0x321d; // GPS未定位报警(对应结构体 ALARM_GPS_NOT_ALIGNED_INFO)
+ public static final int NET_ALARM_TRAFFIC_VEHICLE_POSITION = 0x323c; // 车辆位置事件(对应的结构体 ALARM_TRAFFIC_VEHICLE_POSITION)
+ public static final int NET_ALARM_VIDEOBLIND = 0x323e; // 视频遮挡事件(对应结构体 ALARM_VIDEO_BLIND_INFO)
+ public static final int NET_ALARM_AUDIO_ANOMALY =0x2178; // 音频异常事件(对应结构体ALARM_AUDIO_ANOMALY)
+ public static final int NET_ALARM_DRIVER_NOTCONFIRM = 0x323f; // 司机未按确认按钮报警事件(对应结构体 ALARM_DRIVER_NOTCONFIRM_INFO)
+ public static final int NET_ALARM_FACEINFO_COLLECT = 0x3240; // 人脸信息录入事件(对应 ALARM_FACEINFO_COLLECT_INFO)
+ public static final int NET_ALARM_HIGH_SPEED = 0x3241; // 车辆超速报警事件(对应 ALARM_HIGH_SPEED_INFO )
+ public static final int NET_ALARM_VIDEO_LOSS = 0x3242; // 视频丢失事件(对应 ALARM_VIDEO_LOSS_INFO )
+ public static final int NET_ALARM_DOWNLOAD_REMOTE_FILE = 0x3301; // 下载远程文件事件(对应 ALARM_DOWNLOAD_REMOTE_FILE_INFO)
+ public static final int NET_ALARM_TRAFFIC_LINKAGEALARM = 0x3353; // 各种违章事件联动报警输出事件(对应结构体 ALARM_TRAFFIC_LINKAGEALARM_INFO)
+ public static final int NET_ALARM_LABELINFO = 0x3233; // IPC新增(2017.4),RFID标签信息采集事件(对应结构体 ALARM_LABELINFO)
+ public static final int NET_ALARM_FLOATINGOBJECT_DETECTION = 0x3442; // 漂浮物检测事件(对应结构体 ALARM_FLOATINGOBJECT_DETECTION_INFO)
+ public static final int NET_ALARM_WATER_LEVEL_DETECTION = 0x3443; // 水位检测事件(对应结构体 ALARM_WATER_LEVEL_DETECTION_INFO)
+ public static final int NET_ALARM_TRAFFIC_JUNCTION = 0x3445; // 交通路口事件(对应结构体 ALARM_TAFFIC_JUNCTION_INFO)
+ public static final int NET_EVENT_CROSSLINE_DETECTION = 0x2188; // 警戒线事件( 对应结构体 ALARM_EVENT_CROSSLINE_INFO )
+ public static final int NET_EVENT_CROSSREGION_DETECTION = 0x2189; // 警戒区事件( 对应结构体 ALARM_EVENT_CROSSREGION_INFO )
+ public static final int NET_ALARM_POWERFAULT = 0x3172; // 电源故障事件(对应结构体ALARM_POWERFAULT_INFO)
+ public static final int NET_ALARM_CHASSISINTRUDED = 0x3173; // 机箱入侵(防拆)报警事件(对应结构体ALARM_CHASSISINTRUDED_INFO)
+ public static final int NET_ALARM_BYPASSMODE_CHANGE_EVENT = 0x3176; // 旁路状态变化事件(对应结构体ALARM_BYPASSMODE_CHANGE_INFO)
+ public static final int NET_ALARM_ACCESS_CTL_REPEAT_ENTER = 0x3179; // 反复进入事件(对应结构体ALARM_ACCESS_CTL_REPEAT_ENTER_INFO)
+ public static final int NET_ALARM_ACCESS_CTL_DURESS = 0x3180; // 胁迫卡刷卡事件(对应结构体ALARM_ACCESS_CTL_DURESS_INFO)
+ public static final int NET_ALARM_INPUT_SOURCE_SIGNAL = 0x3183; // 报警输入源信号事件(只要有输入就会产生该事件, 不论防区当前的模式,无法屏蔽, 对应 ALARM_INPUT_SOURCE_SIGNAL_INFO )
+ public static final int NET_ALARM_OPENDOORGROUP = 0x318c; // 多人组合开门事件(对应结构体ALARM_OPEN_DOOR_GROUP_INFO)
+ public static final int NET_ALARM_SUBSYSTEM_STATE_CHANGE = 0x318f; // 子系统状态改变事件(对应结构体ALARM_SUBSYSTEM_STATE_CHANGE_INFO)
+ public static final int NET_ALARM_PSTN_BREAK_LINE = 0x3196; // PSTN掉线事件(对应结构体ALARM_PSTN_BREAK_LINE_INFO)
+ public static final int NET_ALARM_DEFENCE_ARMMODE_CHANGE = 0x31d2; // 防区布撤防状态改变事件(对应结构体 ALARM_DEFENCE_ARMMODECHANGE_INFO)
+ public static final int NET_ALARM_SUBSYSTEM_ARMMODE_CHANGE = 0x31d3; // 子系统布撤防状态改变事件(对应结构体 ALARM_SUBSYSTEM_ARMMODECHANGE_INFO)
+ public static final int NET_ALARM_SENSOR_ABNORMAL = 0x31dc; // 探测器异常报警(对应结构体 ALARM_SENSOR_ABNORMAL_INFO)
+ public static final int NET_ALARM_CROWD_DETECTION = 0x3305; // 人群密度检测事件(对应结构体 ALARM_CROWD_DETECTION_INFO)
+ public static final int NET_ALARM_CITIZEN_PICTURE_COMPARE = 0x330d; // 人证比对事件(对应结构体 ALARM_CITIZEN_PICTURE_COMPARE_INFO)
+ public static final int NET_ALARM_MAN_NUM_DETECTION = 0x3223; // 立体视觉区域内人数统计报警(对应结构体ALARM_MAN_NUM_INFO)
+ public static final int NET_ALARM_ENGINE_FAILURE_STATUS = 0x344F; // 发动机故障状态上报(对应 ALARM_ENGINE_FAILURE_STATUS_INFO)
+ public static final int NET_ALARM_ANATOMY_TEMP_DETECT = 0x3454; // 人体温智能检测事件(对应结构体 ALARM_ANATOMY_TEMP_DETECT_INFO)
+ public static final int NET_ALARM_REGULATOR_ABNORMAL = 0x3455; // 标准黑体源异常报警事件(对应结构体 ALARM_REGULATOR_ABNORMAL_INFO)
+ public static final int NET_ALARM_MINIINDOOR_RADAR_ALARM = 0x34A7; // Mini雷达报警事件(对应结构体 NET_ALARM_MINIINDOOR_RADAR_ALARM_INFO)
+ public static final int NET_ALARM_QR_CODE_CHECK = 0x335a; // 二维码上报事件(对应结构体 ALARM_QR_CODE_CHECK_INFO)
+ public static final int NET_ALARM_TRAFFIC_XINKONG = 0x335f; // 交通态势报警事件(对接结构体 ALARM_TRAFFIC_XINKONG_INFO)
+ public static final int NET_ALARM_WIRELESSDEV_LOWPOWER = 0x31C8; // 获取无线设备低电量上报事件(对应结构体ALARM_WIRELESSDEV_LOWPOWER_INFO)
+ public static final int NET_ALARM_RF_JAMMING = 0x34C0; // RF干扰事件(对应结构体 NET_ALARM_RF_JAMMING_INFO)
+ public static final int NET_ALARM_ARMING_FAILURE = 0x34C1; // 布防失败事件(对应结构体 NET_ALARM_ARMING_FAILURE_INFO)
+ public static final int NET_ALARM_USER_MODIFIED = 0x34C2; // 用户信息被修改(增加、删除、修改)事件(对应结构体 NET_ALARM_USER_MODIFIED_INFO)
+ public static final int NET_ALARM_MANUAL_TEST = 0x34C3; // 手动测试事件(对应结构体 NET_ALARM_MANUAL_TEST_INFO)
+ public static final int NET_ALARM_DEVICE_MODIFIED = 0x34C4; // 设备设息修改(增加、删除、修改)事件(对应结构体 NET_ALARM_DEVICE_MODIFIED_INFO)
+ public static final int NET_ALARM_ATS_FAULT = 0x34C5; // 报警传输系统故障事件(对应结构体 NET_ALARM_ATS_FAULT_INFO)
+ public static final int NET_ALARM_ARC_OFFLINE = 0x34C6; // 报警接收中心离线事件(对应结构体 NET_ALARM_ARC_OFFLINE_INFO)
+ public static final int NET_ALARM_WIFI_FAILURE = 0x34C7; // wifi故障事件(对应结构体 NET_ALARM_WIFI_FAILURE_INFO)
+ public static final int NET_ALARM_OVER_TEMPERATURE = 0x34C8; // 超温报警事件(对应结构体 NET_ALARM_OVER_TEMPERATURE_INFO)
+ public static final int NET_ALARM_WIRELESSDEV_POWERLESS = 0x3498; // 探测器主电丢失事件 (对应结构体 ALARM_WIRELESSDEV_POWERLESS_INFO)
+ public static final int NET_ALARM_KEYPAD_LOCK = 0x219E; // 键盘锁定事件(对应结构体 ALARM_KEYPAD_LOCK_INFO)
+
+ /* start 西欧报警主机事件,预留58个事件*/
+ public static final int NET_ALARM_AREAARM_MODECHANGE =0x330e; // 区域防区模式改变(对应结构体ALARM_AREAARM_MODECHANGE_INFO)
+ public static final int NET_ALARM_AREAALARM =0x3310; // 区域报警(对应结构体ALARM_AREAALARM_INFO)
+ /* end 西欧报警主机事件,预留58个事件 */
+ /* start 雷球联动事件,预留64个事件*/
+ public static final int NET_ALARM_RADAR_REGIONDETECTION = 0x3370; // 雷达区域检测事件(对应结构体 ALARM_RADAR_REGIONDETECTION_INFO)
+
+ public static final int NET_ALARM_TRAFFIC_PARKING_TIMEOUT = 0x334C; // 停车时长超限事件(对应的结构体 ALARM_TRAFFIC_PARKING_TIMEOUT_INFO)
+ public static final int NET_ALARM_TRAFFIC_SUSPICIOUSCAR = 0x31a7; // 嫌疑车辆上报事件(对应结构体 ALARM_TRAFFIC_SUSPICIOUSCAR_INFO)
+ public static final int NET_ALARM_PARKING_LOT_STATUS_DETECTION = 0x3451; // 室外停车位状态检测事件 (对应结构体 ALARM_REGION_PARKING_TIMEOUT_INFO)
+ public static final int NET_ALARM_REGION_PARKING_TIMEOUT = 0x3460; // 区间车位停车超时(对应结构体 ALARM_REGION_PARKING_TIMEOUT_INFO)
+ public static final int NET_ALARM_REGION_PARKING_NO_ENTRY_RECORD = 0x3461; // 区间车位停车,检测到车辆驶出区域时没有匹配到入场信息(对应结构体 ALARM_REGION_PARKING_NO_ENTRY_RECORD_INFO)
+ public static final int NET_ALARM_TRAFFIC_LIGHT_STATE = 0x3458; // 交通灯状态报警(对应 ALARM_TRAFFIC_LIGHT_STATE_INFO)
+ public static final int NET_ALARM_VEHICLE_INOUT = 0x346A; // 车辆出入事件(对应结构体 ALARM_VEHICLE_INOUT_INFO)
+ public static final int NET_ALARM_FIRE_DETECTION = 0x343D; // 火警事件(对于的结构体 ALARM_FIRE_DETECTION_INFO)
+ public static final int NET_ALARM_WORKSUIT_FEATURE_ABSTRACT = 0x3481; // 工装特征向量建模结果上报事件(对应结构体ALARM_WORKSUIT_FEATURE_ABSTRACT_INFO)
+
+ public static final int NET_ALARM_TRAFFIC_FLOW_QUEUE = 0x349C; // 交通路口排队事件(对应结构体 ALARM_TRAFFIC_FLOW_QUEUE_INFO)
+ public static final int NET_ALARM_TRAFFIC_FLOW_JUNTION = 0x349D; // 交通路口过车事件(对应结构体 ALARM_TRAFFIC_FLOW_JUNTION_INFO)
+ public static final int NET_ALARM_TRAFFIC_FLOW_VEHICLE_STOP =0x349E; // 交通路口停车事件(对应结构体 ALARM_TRAFFIC_FLOW_VEHICLE_STOP_INFO)
+ public static final int NET_ALARM_TRAFFIC_FLOW_STAT = 0x349F; // 交通路口车道统计事件(对应结构体 ALARM_TRAFFIC_FLOW_STAT_INFO)
+ public static final int NET_ALARM_TRAFFIC_FLOW_STAT_EX = 0x34A0; // 交通路口车道统计拓展事件(对应结构体 ALARM_TRAFFIC_FLOW_STAT_EX_INFO)
+ public static final int NET_ALARM_DYNAMIC_PWDLOCK_UPLOAD_RANDOMCODE =0x34B5; // 密码锁上报随机码事件(对应结构体 NET_ALARM_DYNAMIC_LOCK_UPLOAD_RANDOMCODE_INFO)
+ public static final int NET_ALARM_DYNAMIC_PWDLOCK_CLOSE = 0x34B7; // 密码锁闭锁事件(对应结构体 NET_ALARM_DYNAMIC_PWDLOCK_CLOSE_INFO)
+
+ // 信号机事件
+ public static final int NET_ALARM_RTSC_PHASE_RUNING = 0x5001; // RTSC跑动暂停事件(对应ALARM_RTSC_PHASE_RUNNING_INFO)
+ public static final int NET_ALARM_RTSC_LAMP_RUNING = 0x5002; // RTSC灯暂停事件(对应ALARM_RTSC_LAMP_RUNNING_INFO)
+ public static final int NET_ALARM_RTSC_RUNING = 0x5003; // 信号机运行事件(对应ALARM_RTSC_RUNNING_INFO)
+ public static final int NET_ALARM_RTSC_TRAFFIC = 0x5004; // 信号机交通信息事件(对应ALARM_RTSC_TRAFFIC_INFO)
+
+
+ // 订阅Bus状态对应事件上报(CLIENT_AttachBusState)
+ public static final int NET_ALARM_BUS_PASSENGER_CARD_CHECK = 0x0009; // 乘客刷卡事件(对应结构体 ALARM_PASSENGER_CARD_CHECK )
+
+ // 帧类型掩码定义
+ public static final int FRAME_TYPE_MOTION = 0x00000001; // 动检帧
+
+
+ // CLIENT_RealLoadPictureEx 智能抓图事件
+ public static final int EVENT_IVS_ALL = 0x00000001; // 订阅所有事件
+ public static final int EVENT_IVS_CROSSLINEDETECTION = 0x00000002; // 警戒线事件(对应 DEV_EVENT_CROSSLINE_INFO)
+ public static final int EVENT_IVS_CROSSREGIONDETECTION = 0x00000003; // 警戒区事件(对应 DEV_EVENT_CROSSREGION_INFO)
+ public static final int EVENT_IVS_LEFTDETECTION = 0x00000005; // 物品遗留事件(对应 DEV_EVENT_LEFT_INFO)
+ public static final int EVENT_IVS_STAYDETECTION = 0x00000006; // 停留事件(对应 DEV_EVENT_STAY_INFO)
+ public static final int EVENT_IVS_WANDERDETECTION = 0x00000007; // 徘徊事件(对应 DEV_EVENT_WANDER_INFO)
+ public static final int EVENT_IVS_PRESERVATION = 0x00000008; // 物品保全事件(对应 DEV_EVENT_PRESERVATION_INFO)
+ public static final int EVENT_IVS_MOVEDETECTION = 0x00000009; // 移动事件(对应 DEV_EVENT_MOVE_INFO)
+ public static final int EVENT_IVS_NUMBERSTAT = 0x00000010; // 数量统计事件(对应 DEV_EVENT_NUMBERSTAT_INFO)
+ public static final int EVENT_IVS_RIOTERDETECTION = 0x0000000B; // 聚众事件(对应 DEV_EVENT_RIOTERL_INFO)
+ public static final int EVENT_IVS_FIGHTDETECTION = 0x0000000E; // 斗殴事件(对应 DEV_EVENT_FIGHT_INFO)
+ public static final int EVENT_IVS_VIDEOABNORMALDETECTION = 0x00000013; // 视频异常事件(对应 DEV_EVENT_VIDEOABNORMALDETECTION_INFO)
+ public static final int EVENT_IVS_TRAFFICJUNCTION = 0x00000017; // 交通路口事件----老规则(对应 DEV_EVENT_TRAFFICJUNCTION_INFO)
+ public static final int EVENT_IVS_TRAFFICGATE = 0x00000018; // 交通卡口事件----老规则(对应 DEV_EVENT_TRAFFICGATE_INFO)
+ public static final int EVENT_IVS_FACEDETECT = 0x0000001A; // 人脸检测事件 (对应 DEV_EVENT_FACEDETECT_INFO)(智能规则对应 EVENT_IVS_FACEDETECT)
+ public static final int EVENT_IVS_TRAFFICJAM = 0x0000001B; // 交通拥堵事件(对应 DEV_EVENT_TRAFFICJAM_INFO)
+ public static final int EVENT_IVS_TRAFFIC_RUNREDLIGHT = 0x00000100; // 交通违章-闯红灯事件(对应 DEV_EVENT_TRAFFIC_RUNREDLIGHT_INFO)
+ public static final int EVENT_IVS_TRAFFIC_OVERLINE = 0x00000101; // 交通违章-压车道线事件(对应 DEV_EVENT_TRAFFIC_OVERLINE_INFO)
+ public static final int EVENT_IVS_TRAFFIC_RETROGRADE = 0x00000102; // 交通违章-逆行事件(对应 DEV_EVENT_TRAFFIC_RETROGRADE_INFO)
+ public static final int EVENT_IVS_TRAFFIC_TURNLEFT = 0x00000103; // 交通违章-违章左转(对应 DEV_EVENT_TRAFFIC_TURNLEFT_INFO)
+ public static final int EVENT_IVS_TRAFFIC_TURNRIGHT = 0x00000104; // 交通违章-违章右转(对应 DEV_EVENT_TRAFFIC_TURNRIGHT_INFO)
+ public static final int EVENT_IVS_TRAFFIC_UTURN = 0x00000105; // 交通违章-违章掉头(对应 DEV_EVENT_TRAFFIC_UTURN_INFO)
+ public static final int EVENT_IVS_TRAFFIC_OVERSPEED = 0x00000106; // 交通违章-超速(对应 DEV_EVENT_TRAFFIC_OVERSPEED_INFO)
+ public static final int EVENT_IVS_TRAFFIC_UNDERSPEED = 0x00000107; // 交通违章-低速(对应 DEV_EVENT_TRAFFIC_UNDERSPEED_INFO)
+ public static final int EVENT_IVS_TRAFFIC_PARKING = 0x00000108; // 交通违章-违章停车(对应 DEV_EVENT_TRAFFIC_PARKING_INFO)
+ public static final int EVENT_IVS_TRAFFIC_WRONGROUTE = 0x00000109; // 交通违章-不按车道行驶(对应 DEV_EVENT_TRAFFIC_WRONGROUTE_INFO)
+ public static final int EVENT_IVS_TRAFFIC_CROSSLANE = 0x0000010A; // 交通违章-违章变道(对应 DEV_EVENT_TRAFFIC_CROSSLANE_INFO)
+ public static final int EVENT_IVS_TRAFFIC_OVERYELLOWLINE = 0x0000010B; // 交通违章-压黄线 (对应 DEV_EVENT_TRAFFIC_OVERYELLOWLINE_INFO)
+ public static final int EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE = 0x0000010E; // 交通违章-黄牌车占道事件(对应 DEV_EVENT_TRAFFIC_YELLOWPLATEINLANE_INFO)
+ public static final int EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY = 0x0000010F; // 交通违章-斑马线行人优先事件(对应 DEV_EVENT_TRAFFIC_PEDESTRAINPRIORITY_INFO)
+ public static final int EVENT_IVS_TRAFFIC_NOPASSING = 0x00000111; // 交通违章-禁止通行事件(对应 DEV_EVENT_TRAFFIC_NOPASSING_INFO)
+ public static final int EVENT_IVS_ABNORMALRUNDETECTION = 0x00000112; // 异常奔跑事件(对应 DEV_EVENT_ABNORMALRUNDETECTION_INFO)
+ public static final int EVENT_IVS_RETROGRADEDETECTION = 0x00000113; // 人员逆行事件(对应 DEV_EVENT_RETROGRADEDETECTION_INFO)
+ public static final int EVENT_IVS_TAKENAWAYDETECTION = 0x00000115; // 物品搬移事件(对应 DEV_EVENT_TAKENAWAYDETECTION_INFO)
+ public static final int EVENT_IVS_PARKINGDETECTION = 0x00000116; // 非法停车事件(对应 DEV_EVENT_PARKINGDETECTION_INFO)
+ public static final int EVENT_IVS_FACERECOGNITION = 0x00000117; // 目标识别事件(对应 DEV_EVENT_FACERECOGNITION_INFO, (对应的智能规则配置 CFG_FACERECOGNITION_INFO)
+ public static final int EVENT_IVS_TRAFFIC_MANUALSNAP = 0x00000118; // 交通手动抓拍事件(对应 DEV_EVENT_TRAFFIC_MANUALSNAP_INFO)
+ public static final int EVENT_IVS_TRAFFIC_FLOWSTATE = 0x00000119; // 交通流量统计事件(对应 DEV_EVENT_TRAFFIC_FLOW_STATE)
+ public static final int EVENT_IVS_TRAFFIC_VEHICLEINROUTE = 0x0000011B; // 有车占道事件(对应 DEV_EVENT_TRAFFIC_VEHICLEINROUTE_INFO)
+ public static final int EVENT_ALARM_LOCALALARM = 0x0000011D; // 外部报警事件(对应 DEV_EVENT_ALARM_INFO)
+ public static final int EVENT_IVS_PSRISEDETECTION = 0x0000011E; // 囚犯起身事件(对应 DEV_EVENT_PSRISEDETECTION_INFO)
+ public static final int EVENT_IVS_TRAFFIC_TOLLGATE = 0x00000120; // 交通违章--卡口事件----新规则(对应 DEV_EVENT_TRAFFICJUNCTION_INFO)
+ public static final int EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE = 0x00000124; // 交通违章--占用公交车道事件(对应 DEV_EVENT_TRAFFIC_VEHICLEINBUSROUTE_INFO)
+ public static final int EVENT_IVS_TRAFFIC_BACKING = 0x00000125; // 交通违章--违章倒车事件(对应 DEV_EVENT_IVS_TRAFFIC_BACKING_INFO)
+ public static final int EVENT_IVS_AUDIO_ABNORMALDETECTION = 0x00000126; // 声音异常检测(对应 DEV_EVENT_IVS_AUDIO_ABNORMALDETECTION_INFO)
+ public static final int EVENT_IVS_TRAFFIC_RUNYELLOWLIGHT = 0x00000127; // 交通违章-闯黄灯事件(对应 DEV_EVENT_TRAFFIC_RUNYELLOWLIGHT_INFO)
+ public static final int EVENT_IVS_CLIMBDETECTION = 0x00000128; // 攀高检测事件(对应 DEV_EVENT_IVS_CLIMB_INFO)
+ public static final int EVENT_IVS_LEAVEDETECTION = 0x00000129; // 离岗检测事件(对应 DEV_EVENT_IVS_LEAVE_INFO)
+ public static final int EVENT_IVS_TRAFFIC_PARKINGONYELLOWBOX = 0x0000012A; // 交通违章--黄网格线抓拍事件(对应 DEV_EVENT_TRAFFIC_PARKINGONYELLOWBOX_INFO)
+ public static final int EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING = 0x0000012B; // 车位有车事件(对应 DEV_EVENT_TRAFFIC_PARKINGSPACEPARKING_INFO )
+ public static final int EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING = 0x0000012C; // 车位无车事件(对应 DEV_EVENT_TRAFFIC_PARKINGSPACENOPARKING_INFO )
+ public static final int EVENT_IVS_TRAFFIC_PEDESTRAIN = 0x0000012D; // 交通行人事件(对应 DEV_EVENT_TRAFFIC_PEDESTRAIN_INFO)
+ public static final int EVENT_IVS_TRAFFIC_THROW = 0x0000012E; // 交通抛洒物品事件(对应 DEV_EVENT_TRAFFIC_THROW_INFO)
+ public static final int EVENT_IVS_TRAFFIC_PARKINGSPACEOVERLINE = 0x00000134; // 车位压线事件(对应 DEV_EVENT_TRAFFIC_PARKINGSPACEOVERLINE_INFO)
+ public static final int EVENT_IVS_TRAFFIC_OVERSTOPLINE = 0X00000137; // 交通违章--压停止线事件(对应 DEV_EVENT_TRAFFIC_OVERSTOPLINE)
+ public static final int EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT = 0x00000138; // 交通违章--交通未系安全带事件(对应 DEV_EVENT_TRAFFIC_WITHOUT_SAFEBELT)
+ public static final int EVENT_IVS_TRAFFIC_DRIVER_SMOKING = 0x00000139; // 驾驶员抽烟事件(对应 DEV_EVENT_TRAFFIC_DRIVER_SMOKING)
+ public static final int EVENT_IVS_TRAFFIC_DRIVER_CALLING = 0x0000013A; // 驾驶员打电话事件(对应 DEV_EVENT_TRAFFIC_DRIVER_CALLING)
+ public static final int EVENT_IVS_TRAFFIC_PASSNOTINORDER = 0x0000013C; // 交通违章--未按规定依次通行(对应 DEV_EVENT_TRAFFIC_PASSNOTINORDER_INFO)
+ public static final int EVENT_IVS_CROSSLINEDETECTION_EX = 0x00000151; // 警戒线扩展事件
+ public static final int EVENT_ALARM_VIDEOBLIND = 0x00000153; // 视频遮挡事件(对应 DEV_EVENT_ALARM_VIDEOBLIND)
+ public static final int EVENT_IVS_TRAFFIC_JAM_FORBID_INTO = 0x00000163; // 交通违章--车辆拥堵禁入事件(对应 DEV_EVENT_ALARM_JAMFORBIDINTO_INFO)
+ public static final int EVENT_IVS_TRAFFIC_FCC = 0x0000016B; // 加油站提枪、挂枪事件(对应 DEV_EVENT_TRAFFIC_FCC_INFO)
+ public static final int EVENT_IVS_TUMBLE_DETECTION = 0x00000177; // 倒地报警事件(对应 DEV_EVENT_TUMBLE_DETECTION_INFO)
+ public static final int EVENT_IVS_DISTANCE_DETECTION = 0x0000024A; // 异常间距事件 (对应 DEV_EVENT_DISTANCE_DETECTION_INFO)
+ public static final int EVENT_IVS_ACCESS_CTL = 0x00000204; // 门禁事件 (对应 DEV_EVENT_ACCESS_CTL_INFO)
+ public static final int EVENT_IVS_SNAPMANUAL = 0x00000205; // SnapManual事件(对应 DEV_EVENT_SNAPMANUAL)
+ public static final int EVENT_IVS_TRAFFIC_ELETAGINFO = 0x00000206; // RFID电子车牌标签事件(对应 DEV_EVENT_TRAFFIC_ELETAGINFO_INFO)
+ public static final int EVENT_IVS_TRAFFIC_TIREDPHYSIOLOGICAL = 0x00000207; // 生理疲劳驾驶事件(对应 DEV_EVENT_TIREDPHYSIOLOGICAL_INFO)
+ public static final int EVENT_IVS_CITIZEN_PICTURE_COMPARE = 0x00000209; // 人证比对事件(对应 DEV_EVENT_CITIZEN_PICTURE_COMPARE_INFO )
+ public static final int EVENT_IVS_TRAFFIC_TIREDLOWERHEAD = 0x0000020A; // 开车低头报警事件(对应DEV_EVENT_TIREDLOWERHEAD_INFO)
+ public static final int EVENT_IVS_TRAFFIC_DRIVERLOOKAROUND = 0x0000020B; // 开车左顾右盼报警事件(对应DEV_EVENT_DRIVERLOOKAROUND_INFO)
+ public static final int EVENT_IVS_TRAFFIC_DRIVERLEAVEPOST = 0x0000020C; // 开车离岗报警事件(对应DEV_EVENT_DRIVERLEAVEPOST_INFO)
+ public static final int EVENT_IVS_MAN_STAND_DETECTION = 0x0000020D; // 立体视觉站立事件(对应DEV_EVENT_MANSTAND_DETECTION_INFO)
+ public static final int EVENT_IVS_MAN_NUM_DETECTION = 0x0000020E; // 立体视觉区域内人数统计事件(对应DEV_EVENT_MANNUM_DETECTION_INFO)
+ public static final int EVENT_IVS_TRAFFIC_DRIVERYAWN = 0x00000210; // 开车打哈欠事件(对应DEV_EVENT_DRIVERYAWN_INFO)
+ public static final int EVENT_IVS_HUMANTRAIT = 0x00000215; // 人体特征事件(对应 DEV_EVENT_HUMANTRAIT_INFO)
+ public static final int EVENT_IVS_FACEANALYSIS = 0x00000217; // 人脸分析事件 (暂未有具体事件)
+ public static final int EVENI_IVS_XRAY_DETECTION = 0x00000223; // X光检测事件 (对应 DEV_EVENT_XRAY_DETECTION_INFO)
+ public static final int EVENT_IVS_HIGHSPEED = 0x0000022B; // 车辆超速报警事件(对应 DEV_EVENT_HIGHSPEED_INFO)
+ public static final int EVENT_IVS_CROWDDETECTION = 0x0000022C; // 人群密度检测事件(对应结构体 DEV_EVENT_CROWD_DETECTION_INFO)
+ public static final int EVENT_IVS_TRAFFIC_CARDISTANCESHORT = 0x0000022D; // 车间距过小报警事件(对应 DEV_EVENT_TRAFFIC_CARDISTANCESHORT_INFO)
+ public static final int EVENT_IVS_PEDESTRIAN_JUNCTION = 0x00000230; // 行人卡口事件(对应 DEV_EVENT_PEDESTRIAN_JUNCTION_INFO)
+ public static final int EVENT_IVS_VEHICLE_RECOGNITION = 0x00000231; // 车牌对比事件(智慧加油站项目)(对应 DEV_EVENT_VEHICLE_RECOGNITION_INFO)
+ public static final int EVENT_IVS_BANNER_DETECTION = 0x0000023B; // 拉横幅事件(对应 DEV_EVENT_BANNER_DETECTION_INFO)
+ public static final int EVENT_IVS_ELEVATOR_ABNORMAL = 0x0000023D; // 电动扶梯运行异常事件 (对应DEV_EVENT_ELEVATOR_ABNORMAL_INFO)
+ public static final int EVENT_IVSS_FACEATTRIBUTE = 0x00000243; // IVSS人脸检测事件 (暂未有具体事件)
+ public static final int EVENT_IVSS_FACECOMPARE = 0x00000244; // IVSS目标识别事件 (暂未有具体事件)
+ public static final int EVENT_IVS_FIREWARNING = 0x00000245; // 火警事件(对应 DEV_EVENT_FIREWARNING_INFO)
+ public static final int EVENT_IVS_SHOPPRESENCE = 0x00000246; // 商铺占道经营事件(对应 DEV_EVENT_SHOPPRESENCE_INFO)
+ public static final int EVENT_IVS_FLOWBUSINESS = 0x0000024E; // 流动摊贩事件 (对应 DEV_EVENT_FLOWBUSINESS_INFO)
+ public static final int EVENT_IVS_LANEDEPARTURE_WARNNING = 0X00000251; // 车道偏移预警(对应 DEV_EVENT_LANEDEPARTURE_WARNNING_INFO)
+ public static final int EVENT_IVS_FORWARDCOLLISION_WARNNING = 0x00000252; // 前向碰撞预警(对应 DEV_EVENT_FORWARDCOLLISION_WARNNING_INFO)
+ public static final int EVENT_IVS_FLOATINGOBJECT_DETECTION = 0x00000257; // 漂浮物检测事件 (对应 DEV_EVENT_FLOATINGOBJECT_DETECTION_INFO)
+ public static final int EVENT_IVS_PHONECALL_DETECT = 0x0000025A; // 打电话检测事件(对应 DEV_EVENT_PHONECALL_DETECT_INFO)
+ public static final int EVENT_IVS_SMOKING_DETECT = 0x0000025B; // 吸烟检测事件(对应 DEV_EVENT_SMOKING_DETECT_INFO)
+ public static final int EVENT_IVS_RADAR_SPEED_LIMIT_ALARM = 0x0000025C; // 雷达限速报警事件(对应 DEV_EVENT_RADAR_SPEED_LIMIT_ALARM_INFO)
+ public static final int EVENT_IVS_WATER_LEVEL_DETECTION = 0x0000025D; // 水位检测事件 (对应 DEV_EVENT_WATER_LEVEL_DETECTION_INFO)
+ public static final int EVENT_IVS_CITY_MOTORPARKING = 0x0000024F; // 城市机动车违停事件 (对应 DEV_EVENT_CITY_MOTORPARKING_INFO)
+ public static final int EVENT_IVS_CITY_NONMOTORPARKING = 0x00000250; // 城市机非动车违停事件 (对应 DEV_EVENT_CITY_NONMOTORPARKING_INFO)
+ public static final int EVENT_IVS_HOLD_UMBRELLA = 0x0000025E; // 违规撑伞检测事件 (对应 DEV_EVENT_HOLD_UMBRELLA_INFO)
+ public static final int EVENT_IVS_GARBAGE_EXPOSURE = 0x0000025F; // 垃圾暴露检测事件 (对应 DEV_EVENT_GARBAGE_EXPOSURE_INFO)
+ public static final int EVENT_IVS_DUSTBIN_OVER_FLOW = 0x00000260; // 垃圾桶满溢检测事件 (对应 DEV_EVENT_DUSTBIN_OVER_FLOW_INFO)
+ public static final int EVENT_IVS_DOOR_FRONT_DIRTY = 0x00000261; // 门前脏乱检测事件 (对应 DEV_EVENT_DOOR_FRONT_DIRTY_INFO)
+ public static final int EVENT_IVS_QUEUESTAY_DETECTION = 0X00000262; // 排队滞留时间报警事件 (对应 DEV_EVENT_QUEUESTAY_DETECTION_INFO)
+ public static final int EVENT_IVS_QUEUENUM_DETECTION = 0X00000263; // 排队人数异常报警事件(对应 DEV_EVENT_QUEUENUM_DETECTION_INFO)
+ public static final int EVENT_IVS_GENERATEGRAPH_DETECTION = 0X00000264; // 生成图规则事件(对应 DEV_EVENT_GENERATEGRAPH_DETECTION_INFO)
+ public static final int EVENT_IVS_TRAFFIC_PARKING_MANUAL = 0x00000265; // 交通违章-手动取证(对应 DEV_EVENT_TRAFFIC_PARKING_MANUAL_INFO)
+ public static final int EVENT_IVS_HELMET_DETECTION = 0x00000266; // 安全帽检测事件(对应 DEV_EVENT_HELMET_DETECTION_INFO)
+ public static final int EVENT_IVS_DEPOSIT_DETECTION = 0x00000267; // 包裹堆积程度检测事件(对应 DEV_EVENT_DEPOSIT_DETECTION_INFO)
+ public static final int EVENT_IVS_HOTSPOT_WARNING = 0x00000268; // 热点异常报警事件(对应 DEV_EVENT_HOTSPOT_WARNING_INFO)
+ public static final int EVENT_IVS_WEIGHING_PLATFORM_DETECTION = 0x00000269; // 称重平台检测事件(对应 DEV_EVENT_WEIGHING_PLATFORM_DETECTION_INFO)
+ public static final int EVENT_IVS_CLASSROOM_BEHAVIOR = 0x0000026A; // 课堂行为分析事件(对应 DEV_EVENT_CLASSROOM_BEHAVIOR_INFO)
+ public static final int EVENT_IVS_TRAFFIC_DRIVER_ABNORMAL = 0x0000026C; // 驾驶员异常报警事件(对应 DEV_EVENT_TRAFFIC_DRIVER_ABNORMAL_INFO)
+ public static final int EVENT_IVS_WORKCLOTHES_DETECT = 0x0000026E; // 工装(安全帽/工作服等)检测事件(对应 DEV_EVENT_WORKCLOTHES_DETECT_INFO)
+ public static final int EVENT_IVS_SECURITYGATE_PERSONALARM = 0x0000026F; // 安检门人员报警事件(对应 DEV_EVENT_SECURITYGATE_PERSONALARM_INFO)
+ public static final int EVENT_IVS_STAY_ALONE_DETECTION = 0x00000270; // 单人独处事件(对应 DEV_EVENT_STAY_ALONE_DETECTION_INFO)
+ public static final int EVENT_IVS_WORKSTATDETECTION = 0x00000274; // 作业统计事件(对应 DEV_EVENT_WORKSTATDETECTION_INFO)
+ public static final int EVENT_IVS_INTELLI_SHELF = 0x00000277; // 智能补货事件(对应 DEV_EVENT_INTELLI_SHELF_INFO)
+ public static final int EVENT_IVS_CAR_DRIVING_IN_OUT = 0x0000027B; // 车辆驶入驶出状态事件(对应 DEV_EVENT_CAR_DRIVING_IN_OUT_INFO)
+ public static final int EVENT_IVS_VIOLENT_THROW_DETECTION = 0x0000027D; // 暴力抛物检测(对应 DEV_EVENT_VIOLENT_THROW_DETECTION_INFO)
+ public static final int EVENT_IVS_GASSTATION_VEHICLE_DETECT = 0x00000283; // 加油站车辆检测事件 (对应 DEV_EVENT_GASSTATION_VEHICLE_DETECT_INFO)
+ public static final int EVENT_IVS_HIGH_TOSS_DETECT = 0x0000028D; // 高空抛物检测(对应DEV_EVENT_HIGH_TOSS_DETECT_INFO)
+ public static final int EVENT_IVS_BREED_DETECTION = 0x00000289; // 智慧养殖检测事件 (对应 DEV_EVENT_BREED_DETECTION_INFO)
+ public static final int EVENT_IVS_PARKING_LOT_STATUS_DETECTION = 0x00000297; // 室外停车位状态检测 (对应 DEV_EVENT_PARKING_LOT_STATUS_DETECTION_INFO)
+ public static final int EVENT_IVS_SMART_KITCHEN_CLOTHES_DETECTION=0x0000029D; // 智慧厨房穿着检测事件(对不戴口罩、厨师帽以及颜色不符合规定的厨师服进行报警)(对应 DEV_EVENT_SMART_KITCHEN_CLOTHES_DETECTION_INFO)
+ public static final int EVENT_IVS_ANATOMY_TEMP_DETECT = 0x00000303; // 人体温智能检测事件(对应 DEV_EVENT_ANATOMY_TEMP_DETECT_INFO)
+ public static final int EVENT_IVS_FOG_DETECTION = 0x00000308; // 起雾检测事件(对应 DEV_EVENT_FOG_DETECTION)
+ public static final int EVENT_IVS_WATER_STAGE_MONITOR = 0x0000030A; // 水位监测事件
+ public static final int EVENT_IVS_NONMOTOR_ENTRYING = 0x0000030C; // 非机动车进入电梯(对应 DEV_EVENT_NONMOTOR_ENTRYING_INFO)
+ public static final int EVENT_IVS_TRAFFIC_ROAD_ALERT = 0x0000030E; // 道路安全预警(对应 DEV_EVENT_TRAFFIC_ROAD_ALERT_INFO)
+ public static final int EVENT_IVS_BREAK_RULE_BUILDING_DETECTION= 0x0000030F; // 违章建筑检测事件(对应 DEV_EVENT_BREAK_RULE_BUILDIING_DETECTION_INFO)
+ public static final int EVENT_IVS_TRAFFIC_CAR_MEASUREMENT =0x00000320; // 交通卡口测量(车辆长、宽、高度、重量等)事件 (对应 DEV_EVENT_TRAFFIC_CAR_MEASUREMENT_INFO)
+
+ public static final int EVENT_IVS_CAR_DRIVING_IN = 0x00000330; // 车辆驶入事件(对应 DEV_EVENT_CAR_DRIVING_IN_INFO)
+ public static final int EVENT_IVS_CAR_DRIVING_OUT = 0x00000331; // 车辆驶出事件(对应 DEV_EVENT_CAR_DRIVING_OUT_INFO)
+ public static final int EVENT_IVS_TRUCKNOTCLEAN_FOR_PRMA = 0x0000033A; // 工程车未清洗 对应 DEV_EVENT_TRUCKNOTCLEAN_FOR_PRMA_INFO
+ public static final int EVENT_IVS_DRIVE_ACTION_ANAYLSE = 0x00000342; // 驾驶行为分析 (只用于规则配置)
+ public static final int EVENT_IVS_TRAFFIC_PARKINGSPACE_MANUALSNAP = 0x00000346; // 路侧停车位手动抓图 (对应 DEV_EVENT_PARKINGSPACE_MANUALSNAP_INFO )
+ public static final int EVENT_IVS_CONVEYER_BELT_BULK = 0x00000351; // 传送带大块异物检测事件(对应DEV_EVENT_CONVEYER_BELT_BULK_INFO )
+ public static final int EVENT_IVS_CONVEYER_BELT_NONLOAD = 0x00000352; // 传送带空载检测事件(对应DEV_EVENT_CONVEYER_BELT_NONLOAD_INFO )
+ public static final int EVENT_IVS_CONVEYER_BELT_RUNOFF = 0x00000353; // 传送带跑偏检测事件(对应 DEV_EVENT_CONVEYER_BELT_RUNOFF_INFO )
+ public static final int EVENT_IVS_OBJECT_REMOVAL_DETECTION = 0x0000036A; // 物品拿取检测事件(对应DEV_EVENT_OBJECT_REMOVAL_DETECTION_INFO)
+ public static final int EVENT_IVS_WATERCOLOR_DETECTION = 0x00000363; // 水体颜色事件(对应 DEV_EVENT_WATERCOLOR_DETECTION_INFO)
+ public static final int EVENT_IVS_SEWAGE_DETECTION = 0x00000362; // 排污检测事件(对应 DEV_EVENT_SEWAGE_DETECTION_INFO)
+ public static final int EVENT_IVS_OBJECT_PLACEMENT_DETECTION = 0x00000369; // 物品放置检测事件(对应DEV_EVENT_OBJECT_PLACEMENT_DETECTION_INFO)
+ public static final int EVENT_IVS_DIALRECOGNITION = 0x00000371; // 仪表检测事件(对应DEV_EVENT_DIALRECOGNITION_INFO)
+ public static final int EVENT_IVS_ELECTRICFAULT_DETECT = 0x00000372; // 仪表类缺陷检测事件(对应DEV_EVENT_ELECTRICFAULTDETECT_INFO)
+ public static final int EVENT_IVS_BARELAND_DETECTION = 0x00000380; // 裸土检测事件(DEV_EVENT_BARELAND_DETECTION_INFO)
+ public static final int EVENT_IVS_CONSUMPTION_EVENT = 0x00000381; // 消费事件(对应 DEV_EVENT_CONSUMPTION_EVENT_INFO)
+ public static final int EVENT_IVS_XRAY_UNPACKING_CHECK = 0x00000384; // X光开包检查事件(对应DEV_EVENT_XRAY_UPACKING_CHECK_INFO)
+ public static final int EVENT_IVS_FISHING_DETECTION = 0x00000390; // 钓鱼检测事件(对应 DEV_EVENT_FISHING_DETECTION_INFO )
+ public static final int EVENT_IVS_VIDEO_NORMAL_DETECTION =0x00000365; // 视频正常事件,在视频诊断检测周期结束时,将未报错的诊断项上报正常事件 DEV_EVENT_VIDEO_NORMAL_DETECTION_INFO
+ public static final int EVENT_IVS_OPEN_INTELLI =0x0000039D; // 开放智能事件(对应 DEV_EVENT_OPEN_INTELLI_INFO)
+ public static final int EVENT_IVS_TRAFFIC_SPEED_DROP_SHARPLY = 0x00000404; // 车辆速度剧减事件(对应 DEV_EVENT_TRAFFIC_SPEED_DROP_SHARPLY_INFO)
+ public static final int EVENT_IVS_REMOTE_APPROVAL_ALARM =0x00000438; // 金融远程审批事件(对应 NET_DEV_EVENT_REMOTE_APPROVAL_ALARM_INFO)
+ public static final int EVENT_IVS_ANTI_COUNTERFEIT =0x00000439; // 防造假检测事件(对应 NET_DEV_EVENT_ANTI_COUNTERFEIT_INFO)
+ public static final int EVENT_IVS_POSITION_SNAP =0x00000447; // 按位置抓图事件(对应 NET_DEV_EVENT_POSITION_SNAP_INFO)
+ public static final int EVENT_IVS_CIGARETTE_CASE_DETECTION =0x00000450; // 烟盒检测事件(对应 NET_DEV_EVENT_CIGARETTE_CASE_DETECTION_INFO)
+ public static final int EVENT_IVS_TRAFFIC_ACCELERATION_RAPID =0x00000457; // 急加速事件(对应 NET_DEV_EVENT_TRAFFIC_ACCELERATION_RAPID_INFO)
+ public static final int EVENT_IVS_TRAFFIC_TURN_SHARP =0x00000458; // 急转弯事件(对应 NET_DEV_EVENT_TRAFFIC_TURN_SHARP_INFO)
+ public static final int EVENT_IVS_COLLISION_CONFLICT =0x0000045B; // 碰撞冲突事件(对应 NET_DEV_EVENT_COLLISION_CONFLICT_INFO)
+ // CLIENT_GetNewDevConfig / CLIENT_SetNewDevConfig 配置项
+ public static final String CFG_CMD_MOTIONDETECT = "MotionDetect"; // 动态检测报警配置(对应 CFG_MOTION_INFO)
+ public static final String CFG_CMD_VIDEOWIDGET = "VideoWidget"; // 视频编码物件配置(对应 NET_CFG_VideoWidget )
+ public static final String CFG_CMD_ANALYSEGLOBAL = "VideoAnalyseGlobal"; // 视频分析全局配置(对应 CFG_ANALYSEGLOBAL_INFO)
+ public static final String CFG_CMD_ANALYSEMODULE = "VideoAnalyseModule"; // 物体的检测模块配置(对应 CFG_ANALYSEMODULES_INFO)
+ public static final String CFG_CMD_ANALYSERULE = "VideoAnalyseRule"; // 视频分析规则配置(对应 CFG_ANALYSERULES_INFO)
+ public static final String CFG_CMD_VIDEOINOPTIONS = "VideoInOptions"; // 视频输入前端选项(对应CFG_VIDEO_IN_OPTIONS)
+ public static final String CFG_CMD_RTSP = "RTSP"; // RTSP的配置( 对应 CFG_RTSP_INFO_IN和CFG_RTSP_INFO_OUT )
+ public static final String CFG_CMD_RAINBRUSHMODE = "RainBrushMode"; // 雨刷模式相关配置(对应CFG_RAINBRUSHMODE_INFO数组)
+ public static final String CFG_CMD_RAINBRUSH = "RainBrush"; // 雨刷配置(对应CFG_RAINBRUSH_INFO)
+ public static final String CFG_CMD_ENCODE = "Encode"; // 图像通道属性配置(对应CFG_ENCODE_INFO)
+ public static final String CFG_CMD_VIDEOIN_FOCUS = "VideoInFocus"; // 聚焦设置(对应 CFG_VIDEO_IN_FOCUS)
+ public static final String CFG_CMD_VIDEO_IN_ZOOM = "VideoInZoom"; // 云台通道变倍配置(对应CFG_VIDEO_IN_ZOOM)
+ public static final String CFG_CMD_REMOTEDEVICE = "RemoteDevice"; // 远程设备信息(对应 AV_CFG_RemoteDevice 数组, 通道无关)
+ public static final String CFG_CMD_ANALYSESOURCE = "VideoAnalyseSource"; // 视频分析资源配置(对应 CFG_ANALYSESOURCE_INFO)
+ public static final String CFG_CMD_TRAFFICGLOBAL = "TrafficGlobal"; // 智能交通全局配置(CFG_TRAFFICGLOBAL_INFO)
+ public static final String CFG_CMD_RECORDMODE = "RecordMode"; // 录像模式(对应 AV_CFG_RecordMode )
+ public static final String CFG_CMD_ALARMLAMP = "AlarmLamp"; // 警灯配置(对应 CFG_ALARMLAMP_INFO)
+ public static final String CFG_CMD_ALARMOUT = "AlarmOut"; // 报警输出通道配置(对应 CFG_ALARMOUT_INFO )
+ public static final String CFG_CMD_INTELLECTIVETRAFFIC = "TrafficSnapshot"; // 智能交通抓拍(对应 CFG_TRAFFICSNAPSHOT_INFO )
+ public static final String CFG_CMD_TRAFFICSNAPSHOT_MULTI = "TrafficSnapshotNew" ; // 智能交通抓拍( CFG_TRAFFICSNAPSHOT_NEW_INFO )
+ public static final String CFG_CMD_NTP = "NTP"; // 时间同步服务器(对应 CFG_NTP_INFO )
+ public static final String CFG_CMD_ALARMINPUT = "Alarm"; // 外部输入报警配置(对应 CFG_ALARMIN_INFO)
+ public static final String CFG_CMD_DVRIP = "DVRIP"; // 网络协议配置(对应 CFG_DVRIP_INFO)
+ public static final String CFG_CMD_NETWORK = "Network"; // 网络配置(对应 CFG_NETWORK_INFO)
+ public static final String CFG_CMD_NASEX = "NAS"; // 网络存储服务器配置, 多服务器(对应 CFG_NAS_INFO_EX)
+ public static final String CFG_CMD_MONITORWALL = "MonitorWall"; // 电视墙配置(对应 AV_CFG_MonitorWall 数组, 通道无关)
+ public static final String CFG_CMD_RTMP = "RTMP"; // RTMP配置(对应 CFG_RTMP_INFO)
+ public static final String CFG_CMD_ACCESS_EVENT = "AccessControl"; // 门禁事件配置(对应 CFG_ACCESS_EVENT_INFO 数组)
+ public static final String CFG_CMD_ACCESSTIMESCHEDULE = "AccessTimeSchedule"; // 门禁刷卡时间段(对应 CFG_ACCESS_TIMESCHEDULE_INFO)
+ public static final String CFG_CMD_DEV_GENERRAL = "General"; // 普通配置 (对应 CFG_DEV_DISPOSITION_INFO)
+ public static final String CFG_CMD_VIDEODIAGNOSIS_PROFILE = "VideoDiagnosisProfile";// 视频诊断参数表(CFG_VIDEODIAGNOSIS_PROFILE)
+ public static final String CFG_CMD_VIDEODIAGNOSIS_TASK = "VideoDiagnosisTask"; // 视频诊断任务表(CFG_VIDEODIAGNOSIS_TASK)
+ public static final String CFG_CMD_VIDEODIAGNOSIS_TASK_ONE = "VideoDiagnosisTask.x"; // 视频诊断任务表(CFG_VIDEODIAGNOSIS_TASK)
+ public static final String CFG_CMD_VIDEODIAGNOSIS_PROJECT = "VideoDiagnosisProject";// 视频诊断计划表(CFG_VIDEODIAGNOSIS_PROJECT)
+ public static final String CFG_CMD_THERMO_GRAPHY = "ThermographyOptions"; // 热成像摄像头属性配置(CFG_THERMOGRAPHY_INFO)
+ public static final String CFG_CMD_THERMOMETRY_RULE = "ThermometryRule"; // 热成像测温规则配置(对应 CFG_RADIOMETRY_RULE_INFO)
+ public static final String CFG_CMD_TEMP_STATISTICS = "TemperatureStatistics"; // 温度统计配置(CFG_TEMP_STATISTICS_INFO)
+ public static final String CFG_CMD_THERMOMETRY = "HeatImagingThermometry";// 热成像测温全局配置(CFG_THERMOMETRY_INFO)
+ public static final String CFG_CMD_DEVRECORDGROUP = "DevRecordGroup"; // 通道录像组状态(对应 CFG_DEVRECORDGROUP_INFO)
+ public static final String CFG_CMD_STORAGEGROUP = "StorageGroup"; // 存储组信息(对应 AV_CFG_StorageGroup数组, 通道无关)
+ public static final String CFG_CMD_PTZTOUR = "PtzTour"; // 云台巡航路径配置(对应 CFG_PTZTOUR_INFO)
+ public static final String CFG_CMD_PTZ_PRESET = "PtzPreset"; // 云台预置点配置(对应结构 PTZ_PRESET_INFO)
+ public static final String CFG_CMD_VIDEOIN = "VideoIn"; // 输入通道配置(对应 CFG_VIDEO_IN_INFO)
+ public static final String CFG_CMD_CHANNELTITLE = "ChannelTitle"; // 通道名称(对应 AV_CFG_ChannelName)
+ public static final String CFG_CMD_WIFI_SEARCH = "AroudWifiSearch"; // 设备通过Wifi模块扫描周围无线设备配置(CFG_WIFI_SEARCH_INFO)
+ public static final String CFG_CMD_RECORD = "Record"; // 定时录像配置(对应 CFG_RECORD_INFO)
+ public static final String CFG_CMD_SCADA_DEV = "SCADADev"; // 检测采集设备配置(CFG_SCADA_DEV_INFO)
+ public static final String CFG_CMD_ALARM_SHIELD_RULE = "AlarmShieldRule"; // 告警屏蔽规则( CFG_ALARM_SHIELD_RULE_INFO)
+ public static final String CFG_CMD_JUDICATURE = "Judicature"; // 刻录配置(对应 CFG_JUDICATURE_INFO)
+ public static final String CFG_CMD_PTZ = "Ptz"; // 云台配置(对应 CFG_PTZ_INFO)
+ public static final String CFG_CMD_PTZ_AUTO_MOVEMENT = "PtzAutoMovement"; //云台定时动作配置(对应 CFG_PTZ_AUTOMOVE_INFO)
+ public static final String CFG_CMD_OPEN_DOOR_GROUP = "OpenDoorGroup"; // 多人多开门方式组合配置(CFG_OPEN_DOOR_GROUP_INFO)
+ public static final String CFG_CMD_PARKING_SPACE_LIGHT_GROUP= "ParkingSpaceLightGroup";// 车位指示灯本机配置(对应 CFG_PARKING_SPACE_LIGHT_GROUP_INFO_ALL)
+ public static final String CFG_CMD_LIGHT = "Light"; // 灯光设备配置 (对应结构体 CFG_LIGHT_INFO)
+ public static final String CFG_CMD_LIGHTING = "Lighting"; // 灯光设置(CFG_LIGHTING_INFO)
+ public static final String CFG_CMD_COMPOSE_CHANNEL = "ComposeChannel"; // 合成通道配置(对应 CFG_COMPOSE_CHANNEL)
+ public static final String CFG_CMD_PICINPIC = "PicInPic"; // 审讯画中画(对应 CFG_PICINPIC_INFO)改为数组方式,兼容以前单个配置,根据长度区分
+ public static final String CFG_CMD_IDLEMOTION_INFO = "IdleMotion"; // 空闲动作配置(CFG_IDLE_MOTION_INFO)
+ public static final String CFG_CMD_INFRARED_CONFIG = "InfraredSet"; // 红外功能配置 (对应 CFG_INFRARED_INFO, 手持设备使用)
+ public static final String CFG_CMD_REGULATOR_DETECT ="RegulatorDetect"; // 标准黑体源异常报警,对应结构体 CFG_REGULATOR_DETECT_INFO. 热成像通道有效
+ /**
+ * 扬声器播放能力(CFG_CAP_SPEAK)
+ */
+ public static final String CFG_CAP_CMD_SPEAK = "speak.getCaps";
+ // CLIENT_FileTransmit接口传输文件类型
+ public static final int NET_DEV_BLACKWHITETRANS_START = 0x0003; // 开始发送禁止/允许名单(对应结构体 NETDEV_BLACKWHITE_LIST_INFO)
+ public static final int NET_DEV_BLACKWHITETRANS_SEND = 0x0004; // 发送禁止/允许名单
+ public static final int NET_DEV_BLACKWHITETRANS_STOP = 0x0005; // 停止发送禁止/允许名单
+
+ // 配置类型,对应CLIENT_GetDevConfig和CLIENT_SetDevConfig接口
+ public static final int NET_DEV_DEVICECFG = 0x0001; // 设备属性配置
+ public static final int NET_DEV_VIDEO_OSD_CFG = 0x0023; // 视频OSD叠加配置(对应结构体 NET_DVR_VIDEOOSD_CFG)
+ public static final int NET_DEV_NETCFG_EX = 0x005b; // 网络扩展配置(对应结构体 NETDEV_NET_CFG_EX )
+ public static final int NET_DEV_TIMECFG = 0x0008; // DVR时间配置
+ public static final int NET_DEV_AUTOMTCFG = 0x000A; // 自动维护配置(对应结构体NETDEV_AUTOMT_CFG)
+ public static final int NET_DEV_ENCLOSURE_CFG = 0x0066; // 电子围栏配置(对应结构体 NETDEV_ENCLOSURE_CFG)
+ public static final int NET_DEV_ENCLOSURE_VERSION_CFG = 0x0067; // 电子围栏版本号配置(对应结构体 NETDEV_ENCLOSURE_VERSION_CFG)
+ public static final int NET_DEV_ENCODER_CFG = 0x0040; // 数字通道的前端编码器信息(混合DVR使用,结构体DEV_ENCODER_CFG)
+
+ public static final int NET_EM_CFG_RADIO_REGULATOR = 11102; // 人体测温标准黑体配置, 对应结构体 NET_CFG_RADIO_REGULATOR,通道号不能为-1
+ // 命令类型, 对应 CLIENT_QueryNewSystemInfo 接口
+ public static final String CFG_CAP_CMD_DEVICE_STATE = "trafficSnap.getDeviceStatus"; // 获取设备状态信息 (对应 CFG_CAP_TRAFFIC_DEVICE_STATUS)
+ public static final String CFG_CAP_CMD_RECORDFINDER = "RecordFinder.getCaps"; // 获取查询记录能力集, (对应结构体 CFG_CAP_RECORDFINDER_INFO)
+ public static final String CFG_CMD_VIDEODIAGNOSIS_GETSTATE = "videoDiagnosisServer.getState"; // 获取视频诊断进行状态(CFG_VIDEODIAGNOSIS_STATE_INFO)
+ public static final String CFG_CAP_CMD_PTZ_ENABLE = "ptz.factory.instance"; // 获取云台支持信息(CFG_CAP_PTZ_ENABLEINFO)
+
+ // 远程配置结构体相关常量
+ public static final int NET_MAX_MAIL_ADDR_LEN = 128; // 邮件发(收)地址最大长度
+ public static final int NET_MAX_MAIL_SUBJECT_LEN = 64; // 邮件主题最大长度
+ public static final int NET_MAX_IPADDR_LEN = 16; // IP地址字符串长度
+ public static final int NET_MAX_IPADDR_LEN_EX = 40; // 扩展IP地址字符串长度, 支持IPV6
+ public static final int NET_USER_NAME_LEN_EX = 32; // 用户名长度,用于新平台扩展
+ public static final int NET_USER_PSW_LEN_EX = 32; // 用户密码长度,用于新平台扩展
+
+ public static final int NET_MAX_DEV_ID_LEN = 48; // 机器编号最大长度
+ public static final int NET_MAX_HOST_NAMELEN = 64; // 主机名长度,
+ public static final int NET_MAX_HOST_PSWLEN = 32; // 密码长度
+ public static final int NET_MAX_ETHERNET_NUM = 2; // 以太网口最大个数
+ public static final int NET_MAX_ETHERNET_NUM_EX = 10; // 扩展以太网口最大个数
+ public static final int NET_DEV_CLASS_LEN = 16; // 设备类型字符串(如"IPC")长度
+ public static final int NET_N_WEEKS = 7; // 一周的天数
+ public static final int NET_N_TSECT = 6; // 通用时间段个数
+ public static final int NET_N_REC_TSECT = 6; // 录像时间段个数
+ public static final int NET_N_COL_TSECT = 2; // 颜色时间段个数
+ public static final int NET_N_ENCODE_AUX = 3; // 扩展码流个数
+ public static final int NET_N_TALK = 1; // 最多对讲通道个数
+ public static final int NET_N_COVERS = 1; // 遮挡区域个数
+ public static final int NET_N_CHANNEL = 16; // 最大通道个数
+ public static final int NET_N_ALARM_TSECT = 2; // 报警提示时间段个数
+ public static final int NET_MAX_ALARMOUT_NUM = 16; // 报警输出口个数上限
+ public static final int NET_MAX_AUDIO_IN_NUM = 16; // 音频输入口个数上限
+ public static final int NET_MAX_VIDEO_IN_NUM = 16; // 视频输入口个数上限
+ public static final int NET_MAX_ALARM_IN_NUM = 16; // 报警输入口个数上限
+ public static final int NET_MAX_DISK_NUM = 16; // 硬盘个数上限,暂定为16
+ public static final int NET_MAX_DECODER_NUM = 16; // 解码器(485)个数上限
+ public static final int NET_MAX_232FUNCS = 10; // 232串口功能个数上限
+ public static final int NET_MAX_232_NUM = 2; // 232串口个数上限
+ public static final int NET_MAX_232_NUM_EX = 16; // 扩展串口配置个数上限
+ public static final int NET_MAX_DECPRO_LIST_SIZE = 100; // 解码器协议列表个数上限
+ public static final int NET_FTP_MAXDIRLEN = 240; // FTP文件目录最大长度
+ public static final int NET_MATRIX_MAXOUT = 16; // 矩阵输出口最大个数
+ public static final int NET_TOUR_GROUP_NUM = 6; // 矩阵输出组最大个数
+ public static final int NET_MAX_DDNS_NUM = 10; // 设备支持的ddns服务器最大个数
+ public static final int NET_MAX_SERVER_TYPE_LEN = 32; // ddns服务器类型,最大字符串长度
+ public static final int NET_MAX_DOMAIN_NAME_LEN = 256; // ddns域名,最大字符串长度
+ public static final int NET_MAX_DDNS_ALIAS_LEN = 32; // ddns服务器别名,最大字符串长度
+ public static final int NET_MAX_DEFAULT_DOMAIN_LEN = 60; // ddns默认域名,最大字符串长度
+ public static final int NET_MOTION_ROW = 32; // 动态检测区域的行数
+ public static final int NET_MOTION_COL = 32; // 动态检测区域的列数
+ public static final int NET_STATIC_ROW = 32; // 静态检测区域的行数
+ public static final int NET_STATIC_COL = 32; // 静态检测区域的列数
+ public static final int NET_FTP_USERNAME_LEN = 64; // FTP配置,用户名最大长度
+ public static final int NET_FTP_PASSWORD_LEN = 64; // FTP配置,密码最大长度
+ public static final int NET_TIME_SECTION = 2; // FTP配置,每天时间段个数
+ public static final int NET_FTP_MAX_PATH = 240; // FTP配置,文件路径名最大长度
+ public static final int NET_FTP_MAX_SUB_PATH = 128; // FTP配置,文件路径名最大长度
+ public static final int NET_INTERVIDEO_UCOM_CHANID = 32; // 平台接入配置,U网通通道ID
+ public static final int NET_INTERVIDEO_UCOM_DEVID = 32; // 平台接入配置,U网通设备ID
+ public static final int NET_INTERVIDEO_UCOM_REGPSW = 16; // 平台接入配置,U网通注册密码
+ public static final int NET_INTERVIDEO_UCOM_USERNAME = 32; // 平台接入配置,U网通用户名
+ public static final int NET_INTERVIDEO_UCOM_USERPSW = 32; // 平台接入配置,U网通密码
+ public static final int NET_INTERVIDEO_NSS_IP = 32; // 平台接入配置,力维IP
+ public static final int NET_INTERVIDEO_NSS_SERIAL = 32; // 平台接入配置,力维serial
+ public static final int NET_INTERVIDEO_NSS_USER = 32; // 平台接入配置,力维user
+ public static final int NET_INTERVIDEO_NSS_PWD = 50; // 平台接入配置,力维password
+ public static final int NET_MAX_VIDEO_COVER_NUM = 16; // 遮挡区域最大个数
+ public static final int NET_MAX_WATERMAKE_DATA = 4096; // 水印图片数据最大长度
+ public static final int NET_MAX_WATERMAKE_LETTER = 128; // 水印文字最大长度
+ public static final int NET_MAX_WLANDEVICE_NUM = 10; // 最多搜索出的无线设备个数
+ public static final int NET_MAX_WLANDEVICE_NUM_EX = 32; // 最多搜索出的无线设备个数
+ public static final int NET_MAX_ALARM_NAME = 64; // 地址长度
+ public static final int NET_MAX_REGISTER_SERVER_NUM = 10; // 主动注册服务器个数
+ public static final int NET_SNIFFER_FRAMEID_NUM = 6; // 6个FRAME ID 选项
+ public static final int NET_SNIFFER_CONTENT_NUM = 4; // 每个FRAME对应的4个抓包内容
+ public static final int NET_SNIFFER_CONTENT_NUM_EX = 8; // 每个FRAME对应的8个抓包内容
+ public static final int NET_SNIFFER_PROTOCOL_SIZE = 20; // 协议名字长度
+ public static final int NET_MAX_PROTOCOL_NAME_LENGTH = 20;
+ public static final int NET_SNIFFER_GROUP_NUM = 4; // 4组抓包设置
+ public static final int NET_ALARM_OCCUR_TIME_LEN = 40; // 新的报警上传时间的长度
+ public static final int NET_VIDEO_OSD_NAME_NUM = 64; // 叠加的名称长度,目前支持32个英文,16个中文
+ public static final int NET_VIDEO_CUSTOM_OSD_NUM = 8; // 支持的自定义叠加的数目,不包含时间和通道
+ public static final int NET_VIDEO_CUSTOM_OSD_NUM_EX = 256; // 支持的自定义叠加的数目,不包含时间和通道
+ public static final int NET_CONTROL_AUTO_REGISTER_NUM = 100; // 支持定向主动注册服务器的个数
+ public static final int NET_MMS_RECEIVER_NUM = 100; // 支持短信接收者的个数
+ public static final int NET_MMS_SMSACTIVATION_NUM = 100; // 支持短信发送者的个数
+ public static final int NET_MMS_DIALINACTIVATION_NUM = 100; // 支持拨号发送者的个数
+ public static final int NET_MAX_ALARM_IN_NUM_EX = 32; // 报警输入口个数上限
+ public static final int NET_MAX_IPADDR_OR_DOMAIN_LEN = 64; // IP地址字符串长度
+ public static final int NET_MAX_CALLID = 32; // 呼叫ID
+ public static final int DH_MAX_OBJECT_NUM = 32; // 最大object个数
+ public static final int NET_MAX_OBJECT_NUM = 32; // 最大object个数
+ public static final int NET_MAX_FENCE_LINE_NUM = 2; // 围栏最大曲线数
+ public static final int MAX_SMART_VALUE_NUM = 30; // 最多的smart信息个数
+ public static final int NET_INTERVIDEO_AMP_DEVICESERIAL = 48; // 平台接入配置,天地阳光 设备序列号字符串长度
+ public static final int NET_INTERVIDEO_AMP_DEVICENAME = 16; // 平台接入配置,天地阳光 设备名称字符串长度
+ public static final int NET_INTERVIDEO_AMP_USER = 32; // 平台接入配置,天地阳光 注册用户名字符串长度
+ public static final int NET_INTERVIDEO_AMP_PWD = 32; // 平台接入配置,天地阳光 注册密码字符串长度
+ public static final int MAX_SUBMODULE_NUM = 32; // 最多子模块信息个数
+ public static final int NET_MAX_CARWAY_NUM = 8; // 交通抓拍,最大车道数
+ public static final int NET_MAX_SNAP_SIGNAL_NUM = 3; // 一个车道的最大抓拍张数
+ public static final int NET_MAX_CARD_NUM = 128; // 卡号的最大个数
+ public static final int NET_MAX_CARDINFO_LEN = 32; // 每条卡号最长字符数
+ public static final int NET_MAX_CONTROLER_NUM = 64; // 最大支持控制器数目
+ public static final int NET_MAX_LIGHT_NUM = 32; // 最多控制灯组数
+ public static final int NET_MAX_SNMP_COMMON_LEN = 64; // snmp 读写数据长度
+ public static final int NET_MAX_DDNS_STATE_LEN = 128; // DDNS 状态信息长度
+ public static final int NET_MAX_PHONE_NO_LEN = 16; // 电话号码长度
+ public static final int NET_MAX_MSGTYPE_LEN = 32; // 导航类型或短信息类型长度
+ public static final int NET_MAX_MSG_LEN = 256; // 导航和短信息长度
+ public static final int NET_MAX_GRAB_INTERVAL_NUM = 4; // 多张图片抓拍个数
+ public static final int NET_MAX_FLASH_NUM = 5; // 最多支持闪光灯个数
+ public static final int NET_MAX_ISCSI_PATH_NUM = 64; // ISCSI远程目录最大数量
+ public static final int NET_MAX_WIRELESS_CHN_NUM = 256; // 无线路由最大信道数
+ public static final int NET_PROTOCOL3_BASE = 100; // 三代协议版本基数
+ public static final int NET_PROTOCOL3_SUPPORT = 11; // 只支持3代协议
+ public static final int NET_MAX_STAFF_NUM = 20; // 浓缩视频配置信息中标尺数上限
+ public static final int NET_MAX_CALIBRATEBOX_NUM = 10; // 浓缩视频配置信息中标定区域数上限
+ public static final int NET_MAX_EXCLUDEREGION_NUM = 10; // 浓缩视频配置信息中排除区域数上限
+ public static final int NET_MAX_POLYLINE_NUM = 20; // 浓缩视频配置信息中标尺线数
+ public static final int NET_MAX_COLOR_NUM = 16; // 最大颜色数目
+ public static final int MAX_OBJFILTER_NUM = 16; // 最大过滤种类个数
+ public static final int NET_MAX_SYNOPSIS_STATE_NAME = 64; // 视频浓缩状态字符串长度
+ public static final int NET_MAX_SYNOPSIS_QUERY_FILE_COUNT = 10; // 视频浓缩相关原始文件按照路径查找时文件个数上限
+ public static final int NET_MAX_SSID_LEN = 36; // SSID长度
+ public static final int NET_MAX_APPIN_LEN = 16; // PIN码长度
+ public static final int NET_NETINTERFACE_NAME_LEN = 260; // 网口名称长度
+ public static final int NET_NETINTERFACE_TYPE_LEN = 260; // 网络类型长度
+ public static final int NET_MAX_CONNECT_STATUS_LEN = 260; // 连接状态字符串长度
+ public static final int NET_MAX_MODE_LEN = 64; // 3G支持的网络模式长度
+ public static final int NET_MAX_MODE_NUM = 64; // 3G支持的网络模式个数
+ public static final int NET_MAX_COMPRESSION_TYPES_NUM = 16; // 视频编码格式最多种类个数
+ public static final int NET_MAX_CAPTURE_SIZE_NUM = 64; // 视频分辨率个数
+ public static final int NET_NODE_NAME_LEN = 64; // 组织结构节点名称长度
+ public static final int MAX_CALIBPOINTS_NUM = 256; // 支持最大标定点数
+ public static final int NET_MAX_ATTR_NUM = 32; // 显示单元属性最大数量
+ public static final int NET_MAX_CLOUDCONNECT_STATE_LEN = 128; // 云注册连接状态信息长度
+ public static final int NET_MAX_IPADDR_EX_LEN = 128; // 扩展IP地址最大长度
+ public static final int MAX_EVENT_NAME = 128; // 最长事件名
+ public static final int NET_MAX_ETH_NAME = 64; // 最大网卡名
+ public static final int NET_N_SCHEDULE_TSECT = 8; // 时间表元素个数
+ public static final int NET_MAX_URL_NUM = 8; // URL最大个数
+ public static final int NET_MAX_LOWER_MITRIX_NUM = 16; // 最大下位矩阵数
+ public static final int NET_MAX_BURN_CHANNEL_NUM = 32; // 最大刻录通道数
+ public static final int NET_MAX_NET_STRORAGE_BLOCK_NUM = 64; // 最大远程存储区块数量
+ public static final int NET_MAX_CASE_PERSON_NUM = 32; // 案件人员最大数量
+ public static final int NET_MAX_MULTIPLAYBACK_CHANNEL_NUM = 64; // 最大多通道预览回放通道数
+ public static final int NET_MAX_MULTIPLAYBACK_SPLIT_NUM = 32; // 最大多通道预览回放分割模式数
+ public static final int NET_MAX_AUDIO_ENCODE_TYPE = 64; // 最大语音编码类型个数
+ public static final int MAX_CARD_RECORD_FIELD_NUM = 16; // 卡号录像最大域数量
+ public static final int NET_BATTERY_NUM_MAX = 16; // 最大电池数量
+ public static final int NET_POWER_NUM_MAX = 16; // 最大电源数量
+ public static final int NET_MAX_AUDIO_PATH = 260; // 最大音频文件路长度
+ public static final int NET_MAX_DOORNAME_LEN = 128; // 最大门禁名称长度
+ public static final int NET_MAX_CARDPWD_LEN = 64; // 最大门禁名称长度
+ public static final int NET_MAX_FISHEYE_MOUNTMODE_NUM = 4; // 最大鱼眼安装模式个数
+ public static final int NET_MAX_FISHEYE_CALIBRATEMODE_NUM = 16; // 最大鱼眼矫正模式个数
+ public static final int NET_MAX_FISHEYE_EPTZCMD_NUM = 64; // 最大鱼眼电子云台操作个数
+ public static final int POINT_NUM_IN_PAIR = 2; // 标定点对中的点数量
+ public static final int MAX_POINT_PAIR_NUM = 128; // 标定点最大数量
+ public static final int CHANNEL_NUM_IN_POINT_GROUP = 2; // 标定点中的视频通道数
+ public static final int MAX_POINT_GROUP_NUM = 32; // 标定点组最大数量, 每两个通道进行拼接需要一组标定点
+ public static final int MAX_LANE_INFO_NUM = 32; // 最大车道信息数
+ public static final int MAX_LANE_DIRECTION_NUM = 8; // 车道方向总数
+ public static final int NET_MAX_MONITORWALL_NUM = 32; // 电视墙最大数量
+ public static final int NET_MAX_OPTIONAL_URL_NUM = 8; // 备用url最大数量
+ public static final int NET_MAX_CAMERA_CHANNEL_NUM = 1024; // 最大摄像机通道数
+ public static final int MAX_FILE_SUMMARY_NUM = 32; // 最大文件摘要数
+ public static final int MAX_AUDIO_ENCODE_NUM = 64; // 最大支持音频编码个数
+
+ public static final int MAX_FLASH_LIGHT_NUM = 8; // 最大支持的爆闪灯(闪光灯)个数
+ public static final int MAX_STROBOSCOPIC_LIGHT_NUM = 8; // 最大支持的频闪灯个数
+ public static final int MAX_MOSAIC_NUM = 8; // 最大支持的马赛克数量
+ public static final int MAX_MOSAIC_CHANNEL_NUM = 256; // 支持马赛克叠加的最多通道数量
+ public static final int MAX_FIREWARNING_INFO_NUM = 4; // 最大热成像着火点报警信息个数
+ public static final int MAX_AXLE_NUM = 8; // 最大车轴数量
+ public static final int MAX_ACCESSDOOR_NUM = 128; // 最大门数量
+ public static final int MAX_SIMILARITY_COUNT = 1024; // 最大人脸对比库阈值个数
+ public static final int MAX_FEATURESTATE_NUM = 4; // 最大人脸组建模状态个数
+
+ public static final int NET_MAX_BULLET_HOLES = 10; // 最大的弹孔数
+
+ public static final int MAX_NTP_SERVER = 4; // 最大备用NTP服务器地址
+ public static final int MAX_PLATE_NUM = 64; // 每张图片中包含的最大车牌个数
+ public static final int MAX_PREVIEW_CHANNEL_NUM = 64; // 最大导播预览的通道数量
+ public static final int MAX_ADDRESS_LEN = 256; // 最大的地址长度
+ public static final int MAX_DNS_SERVER_NUM = 2; // DNS最大数量
+ public static final int MAX_NETWORK_INTERFACE_NUM = 32; // 最大网卡数量
+
+ public static final int MAX_EVENT_RESTORE_UUID = 36; // 事件重传uuid数组大小
+ public static final int MAX_EVENT_RESTORE_CODE_NUM = 8; // 最大事件重传类型个数
+ public static final int MAX_EVENT_RESOTER_CODE_TYPE = 32; // 事件重传类型数组大小
+ public static final int MAX_SNAP_TYPE = 3; // 抓图类型数量
+ public static final int MAX_MAINFORMAT_NUM = 4; // 最大支持主码流类型数量
+
+ public static final int CUSTOM_TITLE_LEN = 1024; // 自定义标题名称长度(扩充到1024)
+ public static final int MAX_CUSTOM_TITLE_NUM = 8; // 编码物件自定义标题最大数量
+ public static final int FORMAT_TYPE_LEN = 16; // 编码类型名最大长度
+
+ public static final int MAX_CHANNEL_NAME_LEN = 256; // 通道名称最大长度
+
+ public static final int MAX_VIRTUALINFO_DOMAIN_LEN = 64; // 虚拟身份上网域名长度
+ public static final int MAX_VIRTUALINFO_TITLE_LEN = 64; // 虚拟身份上网标题长度
+ public static final int MAX_VIRTUALINFO_USERNAME_LEN = 32; // 虚拟身份用户名长度
+ public static final int MAX_VIRTUALINFO_PASSWORD_LEN = 32; // 虚拟身份密码长度
+ public static final int MAX_VIRTUALINFO_PHONENUM_LEN = 12; // 虚拟身份手机号长度
+ public static final int MAX_VIRTUALINFO_IMEI_LEN = 16; // 虚拟身份国际移动设备标识长度
+ public static final int MAX_VIRTUALINFO_IMSI_LEN = 16; // 虚拟身份国际移动用户识别码长度
+ public static final int MAX_VIRTUALINFO_LATITUDE_LEN = 16; // 虚拟身份经度长度
+ public static final int MAX_VIRTUALINFO_LONGITUDE_LEN = 16; // 虚拟身份纬度长度
+ public static final int MAX_VIRTUALINFO_NUM = 1024; // 最大虚拟身份信息个数
+ public static final int MAX_SCREENTIME_COUNT = 8; // 诱导屏最大开关屏时间个数
+ public static final int MAX_PLAYDATES_COUNT = 32; // 最大日期个数
+ public static final int MAX_ELEMENTS_COUNT = 8; // 诱导屏窗口支持的最大元素个数
+ public static final int MAX_ELEMENTTEXT_LENGTH = 512; // 文本元素最大文本长度
+ public static final int MAX_NOTE_COUNT = 4; // 诱导屏窗口元素注释信息最大个数
+ public static final int MAX_PROGRAMMES_COUNT = 32; // 最多支持的节目个数
+ public static final int MAX_CALL_ID_LEN = 64; // 呼叫ID长度
+ public static final int MAX_GD_COUNT = 170;
+ public static final int MAX_SUNTIME_COUNT = 12; // 日出日落时间个数
+ public static final int MAX_DOOR_TIME_SECTION = 4; // 门禁每天分时时间段最大个数
+ public static final int MAX_SCADA_POINT_LIST_INDEX = 8; // 最大SCADADev配置下标个数, 即最大通道
+ public static final int MAX_SCADA_YX_NUM = 128; // 最大遥信个数
+ public static final int MAX_SCADA_YC_NUM = 128; // 最大遥测个数
+ public static final int MAX_SCADA_POINT_INFO_NUM = 8; // 最大点表个数
+ public static final int MAX_NET_SCADA_CAPS_TYPE = 16;
+ public static final int MAX_NET_SCADA_CAPS_NAME = 16;
+ public static final int MAX_SCADA_ID_NUM = 1024; // 监测点位id的最大个数
+ public static final int MAX_SCADA_ID_OF_SENSOR_NUM = 128; // 最大检测点位ID个数
+
+ public static final int MAX_REMOTEDEVICEINFO_IPADDR_LEN = 128; // 远程设备IP地址最大长度
+ public static final int MAX_REMOTEDEVICEINFO_USERNAME_LEN = 128; // 远程设备用户名最大长度
+ public static final int MAX_REMOTEDEVICEINFO_USERPSW_LENGTH = 128; // 远程设备密码最大长度
+
+ public static final int MAX_MANUFACTURER_LEN = 32; // 最大的 MAC地址所属制造商长度
+ public static final int MAX_MACHISTORY_SSID_LEN = 24; // 最大的历史SSID长度
+ public static final int MAX_MACHISTORY_SSID_NUM = 5; // 历史SSID的最大个数
+
+ public static final int CFG_MAX_SN_LEN = 32; // 最大设备序列号长度
+ public static final int CFG_MAX_ACCESS_CONTROL_ADDRESS_LEN = 64; // 最大的地址长度
+
+ public static final int MAX_MACADDR_NUM = 8; // 最大物理地址个数
+ public static final int MAX_ADD_DEVICE_NUM = 16; // 最大添加设备个数
+ public static final int MAX_LINK_DEVICE_NUM = 1024; // 最大连接设备个数
+ public static final int MAX_DEVICE_CHANNEL_NUM = 1024; // 设备最大通道个数
+ public static final int NET_CFG_MAX_CTRLTYPE_NUM = 16; // 最大道闸控制方式
+ public static final int NET_MAX_ALL_SNAP_CAR_COUNT = 32; // 所有车开闸种类个数
+ public static final int NET_MAX_BURNING_DEV_NUM = 32; // 最大刻录设备个数
+ public static final int NET_BURNING_DEV_NAMELEN = 32; // 刻录设备名字最大长度
+ public static final int PTZ_PRESET_NAME_LEN = 64; // 云台预置点名称长度
+ public static final int NET_RADIOMETRY_DOFIND_MAX = 32; // 热成像温度统计最大个数
+ public static final int CFG_MAX_PTZTOUR_NUM = 64; // 巡航路径数量
+ public static final int CFG_MAX_PTZTOUR_PRESET_NUM = 64; // 巡航路径包含的预置点数量
+ public static final int MAX_PTZ_PRESET_NAME_LEN = 64; // 云台预置点名称长度
+ public static final int MAX_COMPANY_NAME_LEN = 200; // 单位名称最大长度
+ public static final int NET_MAX_PLAYAUDIO_COUNT = 16; // 最大播报内容数目
+ public static final int MAX_TARGET_OBJECT_NUM = 100; // 最大目标物体信息个数
+ public static final int MAX_CROWD_DETECTION_NAME_LEN = 128; // 最大人群密度检测事件名称长度
+ public static final int MAX_CROWD_LIST_NUM = 5; // 最大全局拥挤人群密度列表个数
+ public static final int MAX_REGION_LIST_NUM = 8; // 最大人数超限的报警区域ID列表个数
+ public static final int MAX_CROWD_RECT_LIST = 5; // 矩形描述信息的最大个数
+ public static final int RECT_POINT = 2; // 表示矩形的2个点(左上角与右下角)
+
+ public static final int MAX_OBJECT_NUM = 32; // 最大物体个数
+ // 查询类型,对应CLIENT_QueryDevState接口
+ public static final int NET_DEVSTATE_COMM_ALARM = 0x0001; // 查询普通报警状态(包括外部报警,视频丢失,动态检测)
+ public static final int NET_DEVSTATE_SHELTER_ALARM = 0x0002; // 查询遮挡报警状态
+ public static final int NET_DEVSTATE_RECORDING = 0x0003; // 查询录象状态
+ public static final int NET_DEVSTATE_DISK = 0x0004; // 查询硬盘信息
+ public static final int NET_DEVSTATE_RESOURCE = 0x0005; // 查询系统资源状态
+ public static final int NET_DEVSTATE_BITRATE = 0x0006; // 查询通道码流
+ public static final int NET_DEVSTATE_CONN = 0x0007; // 查询设备连接状态
+ public static final int NET_DEVSTATE_PROTOCAL_VER = 0x0008; // 查询网络协议版本号,pBuf = int*
+ public static final int NET_DEVSTATE_TALK_ECTYPE = 0x0009; // 查询设备支持的语音对讲格式列表,见结构体NETDEV_TALKFORMAT_LIST
+ public static final int NET_DEVSTATE_SD_CARD = 0x000A; // 查询SD卡信息(IPC类产品)
+ public static final int NET_DEVSTATE_BURNING_DEV = 0x000B; // 查询刻录机信息,见结构体NET_BURNING_DEVINFO
+ public static final int NET_DEVSTATE_BURNING_PROGRESS = 0x000C; // 查询刻录进度
+ public static final int NET_DEVSTATE_PLATFORM = 0x000D; // 查询设备支持的接入平台
+ public static final int NET_DEVSTATE_CAMERA = 0x000E; // 查询摄像头属性信息(IPC类产品),pBuf = NETDEV_CAMERA_INFO *,可以有多个结构体
+ public static final int NET_DEVSTATE_SOFTWARE = 0x000F; // 查询设备软件版本信息 NETDEV_VERSION_INFO
+ public static final int NET_DEVSTATE_LANGUAGE = 0x0010; // 查询设备支持的语音种类
+ public static final int NET_DEVSTATE_DSP = 0x0011; // 查询DSP能力描述(对应结构体NET_DEV_DSP_ENCODECAP)
+ public static final int NET_DEVSTATE_OEM = 0x0012; // 查询OEM信息
+ public static final int NET_DEVSTATE_NET = 0x0013; // 查询网络运行状态信息
+ public static final int NET_DEVSTATE_TYPE = 0x0014; // 查询设备类型
+ public static final int NET_DEVSTATE_SNAP = 0x0015; // 查询功能属性(IPC类产品)
+ public static final int NET_DEVSTATE_RECORD_TIME = 0x0016; // 查询最早录像时间和最近录像时间
+ public static final int NET_DEVSTATE_NET_RSSI = 0x0017; // 查询无线网络信号强度,见结构体NETDEV_WIRELESS_RSS_INFO
+ public static final int NET_DEVSTATE_BURNING_ATTACH = 0x0018; // 查询附件刻录选项
+ public static final int NET_DEVSTATE_BACKUP_DEV = 0x0019; // 查询备份设备列表
+ public static final int NET_DEVSTATE_BACKUP_DEV_INFO = 0x001a; // 查询备份设备详细信息 NETDEV_BACKUP_INFO
+ public static final int NET_DEVSTATE_BACKUP_FEEDBACK = 0x001b; // 备份进度反馈
+ public static final int NET_DEVSTATE_ATM_QUERY_TRADE = 0x001c; // 查询ATM交易类型
+ public static final int NET_DEVSTATE_SIP = 0x001d; // 查询sip状态
+ public static final int NET_DEVSTATE_VICHILE_STATE = 0x001e; // 查询车载wifi状态
+ public static final int NET_DEVSTATE_TEST_EMAIL = 0x001f; // 查询邮件配置是否成功
+ public static final int NET_DEVSTATE_SMART_HARD_DISK = 0x0020; // 查询硬盘smart信息 ,(见结构体 DHDEV_SMART_HARDDISK)
+ public static final int NET_DEVSTATE_TEST_SNAPPICTURE = 0x0021; // 查询抓图设置是否成功
+ public static final int NET_DEVSTATE_STATIC_ALARM = 0x0022; // 查询静态报警状态
+ public static final int NET_DEVSTATE_SUBMODULE_INFO = 0x0023; // 查询设备子模块信息
+ public static final int NET_DEVSTATE_DISKDAMAGE = 0x0024; // 查询硬盘坏道能力
+ public static final int NET_DEVSTATE_IPC = 0x0025; // 查询设备支持的IPC能力, 见结构体NET_DEV_IPC_INFO
+ public static final int NET_DEVSTATE_ALARM_ARM_DISARM = 0x0026; // 查询报警布撤防状态
+ public static final int NET_DEVSTATE_ACC_POWEROFF_ALARM = 0x0027; // 查询ACC断电报警状态(返回一个DWORD, 1表示断电,0表示通电)
+ public static final int NET_DEVSTATE_TEST_FTP_SERVER = 0x0028; // 测试FTP服务器连接
+ public static final int NET_DEVSTATE_3GFLOW_EXCEED = 0x0029; // 查询3G流量超出阈值状态,(见结构体 NETDEV_3GFLOW_EXCEED_STATE_INFO)
+ public static final int NET_DEVSTATE_3GFLOW_INFO = 0x002a; // 查询3G网络流量信息,见结构体 NET_DEV_3GFLOW_INFO
+ public static final int NET_DEVSTATE_VIHICLE_INFO_UPLOAD = 0x002b; // 车载自定义信息上传(见结构体 ALARM_VEHICLE_INFO_UPLOAD)
+ public static final int NET_DEVSTATE_SPEED_LIMIT = 0x002c; // 查询限速报警状态(见结构体ALARM_SPEED_LIMIT)
+ public static final int NET_DEVSTATE_DSP_EX = 0x002d; // 查询DSP扩展能力描述(对应结构体 NET_DEV_DSP_ENCODECAP_EX)
+ public static final int NET_DEVSTATE_3GMODULE_INFO = 0x002e; // 查询3G模块信息(对应结构体NET_DEV_3GMODULE_INFO)
+ public static final int NET_DEVSTATE_MULTI_DDNS = 0x002f; // 查询多DDNS状态信息(对应结构体NET_DEV_MULTI_DDNS_INFO)
+ public static final int NET_DEVSTATE_CONFIG_URL = 0x0030; // 查询设备配置URL信息(对应结构体NET_DEV_URL_INFO)
+ public static final int NET_DEVSTATE_HARDKEY = 0x0031; // 查询HardKey状态(对应结构体NETDEV_HARDKEY_STATE)
+ public static final int NET_DEVSTATE_ISCSI_PATH = 0x0032; // 查询ISCSI路径列表(对应结构体NETDEV_ISCSI_PATHLIST)
+ public static final int NET_DEVSTATE_DLPREVIEW_SLIPT_CAP = 0x0033; // 查询设备本地预览支持的分割模式(对应结构体DEVICE_LOCALPREVIEW_SLIPT_CAP)
+ public static final int NET_DEVSTATE_WIFI_ROUTE_CAP = 0x0034; // 查询无线路由能力信息(对应结构体NETDEV_WIFI_ROUTE_CAP)
+ public static final int NET_DEVSTATE_ONLINE = 0x0035; // 查询设备的在线状态(返回一个DWORD, 1表示在线, 0表示断线)
+ public static final int NET_DEVSTATE_PTZ_LOCATION = 0x0036; // 查询云台状态信息(对应结构体 NET_PTZ_LOCATION_INFO)
+ public static final int NET_DEVSTATE_MONITOR_INFO = 0x0037; // 画面监控辅助信息(对应结构体NETDEV_MONITOR_INFO)
+ public static final int NET_DEVSTATE_SUBDEVICE = 0x0300; // 查询子设备(电源, 风扇等)状态(对应结构体CFG_DEVICESTATUS_INFO)
+ public static final int NET_DEVSTATE_RAID_INFO = 0x0038; // 查询RAID状态(对应结构体ALARM_RAID_INFO)
+ public static final int NET_DEVSTATE_TEST_DDNSDOMAIN = 0x0039; // 测试DDNS域名是否可用
+ public static final int NET_DEVSTATE_VIRTUALCAMERA = 0x003a; // 查询虚拟摄像头状态(对应 NETDEV_VIRTUALCAMERA_STATE_INFO)
+ public static final int NET_DEVSTATE_TRAFFICWORKSTATE = 0x003b; // 获取设备工作视频/线圈模式状态等(对应NETDEV_TRAFFICWORKSTATE_INFO)
+ public static final int NET_DEVSTATE_ALARM_CAMERA_MOVE = 0x003c; // 获取摄像机移位报警事件状态(对应ALARM_CAMERA_MOVE_INFO)
+ public static final int NET_DEVSTATE_ALARM = 0x003e; // 获取外部报警状态(对应 NET_CLIENT_ALARM_STATE)
+ public static final int NET_DEVSTATE_VIDEOLOST = 0x003f; // 获取视频丢失报警状态(对应 NET_CLIENT_VIDEOLOST_STATE)
+ public static final int NET_DEVSTATE_MOTIONDETECT = 0x0040; // 获取动态监测报警状态(对应 NET_CLIENT_MOTIONDETECT_STATE)
+ public static final int NET_DEVSTATE_DETAILEDMOTION = 0x0041; // 获取详细的动态监测报警状态(对应 NET_CLIENT_DETAILEDMOTION_STATE)
+ public static final int NET_DEVSTATE_VEHICLE_INFO = 0x0042; // 获取车载自身各种硬件信息(对应 NETDEV_VEHICLE_INFO)
+ public static final int NET_DEVSTATE_VIDEOBLIND = 0x0043; // 获取视频遮挡报警状态(对应 NET_CLIENT_VIDEOBLIND_STATE)
+ public static final int NET_DEVSTATE_3GSTATE_INFO = 0x0044; // 查询3G模块相关信息(对应结构体NETDEV_VEHICLE_3GMODULE)
+ public static final int NET_DEVSTATE_NETINTERFACE = 0x0045; // 查询网络接口信息(对应 NETDEV_NETINTERFACE_INFO)
+
+ public static final int NET_DEVSTATE_PICINPIC_CHN = 0x0046; // 查询画中画通道号(对应DWORD数组)
+ public static final int NET_DEVSTATE_COMPOSITE_CHN = 0x0047; // 查询融合屏通道信息(对应 NET_COMPOSITE_CHANNEL数组)
+ public static final int NET_DEVSTATE_WHOLE_RECORDING = 0x0048; // 查询设备整体录像状态(对应BOOL), 只要有一个通道在录像,即为设备整体状态为录像
+ public static final int NET_DEVSTATE_WHOLE_ENCODING = 0x0049; // 查询设备整体编码状态(对应BOOL), 只要有一个通道在编码,即为设备整体状态为编码
+ public static final int NET_DEVSTATE_DISK_RECORDE_TIME = 0x004a; // 查询设备硬盘录像时间信息(pBuf = DEV_DISK_RECORD_TIME*,可以有多个结构体)
+ public static final int NET_DEVSTATE_BURNER_DOOR = 0x004b; // 是否已弹出刻录机光驱门(对应结构体 NET_DEVSTATE_BURNERDOOR)
+ public static final int NET_DEVSTATE_GET_DATA_CHECK = 0x004c; // 查询光盘数据校验进度(对应 NET_DEVSTATE_DATA_CHECK)
+ public static final int NET_DEVSTATE_ALARM_IN_CHANNEL = 0x004f; // 查询报警输入通道信息(对应NET_ALARM_IN_CHANNEL数组)
+ public static final int NET_DEVSTATE_ALARM_CHN_COUNT = 0x0050; // 查询报警通道数(对应NET_ALARM_CHANNEL_COUNT)
+ public static final int NET_DEVSTATE_PTZ_VIEW_RANGE = 0x0051; // 查询云台可视域状态(对应 NET_OUT_PTZ_VIEW_RANGE_STATUS )
+ public static final int NET_DEVSTATE_DEV_CHN_COUNT = 0x0052; // 查询设备通道信息(对应NET_DEV_CHN_COUNT_INFO)
+ public static final int NET_DEVSTATE_RTSP_URL = 0x0053; // 查询设备支持的RTSP URL列表,见结构体DEV_RTSPURL_LIST
+ public static final int NET_DEVSTATE_LIMIT_LOGIN_TIME = 0x0054; // 查询设备登录的在线超时时间,返回一个BTYE,(单位:分钟) ,0表示不限制,非零正整数表示限制的分钟数
+ public static final int NET_DEVSTATE_GET_COMM_COUNT = 0x0055; // 获取串口数 见结构体NET_GET_COMM_COUNT
+ public static final int NET_DEVSTATE_RECORDING_DETAIL = 0x0056; // 查询录象状态详细信息(pBuf = NET_RECORD_STATE_DETAIL*)
+ public static final int NET_DEVSTATE_PTZ_PRESET_LIST = 0x0057; // 获取当前云台的预置点列表(对应结构NET_PTZ_PRESET_LIST)
+ public static final int NET_DEVSTATE_EXTERNAL_DEVICE = 0x0058; // 外接设备信息(pBuf = NET_EXTERNAL_DEVICE*)
+ public static final int NET_DEVSTATE_GET_UPGRADE_STATE = 0x0059; // 获取设备升级状态(对应结构 NETDEV_UPGRADE_STATE_INFO)
+ public static final int NET_DEVSTATE_MULTIPLAYBACK_SPLIT_CAP = 0x005a; // 获取多通道预览分割能力( 对应结构体 NET_MULTIPLAYBACK_SPLIT_CAP )
+ public static final int NET_DEVSTATE_BURN_SESSION_NUM = 0x005b; // 获取刻录会话总数(pBuf = int*)
+ public static final int NET_DEVSTATE_PROTECTIVE_CAPSULE = 0X005c; // 查询防护舱状态(对应结构体ALARM_PROTECTIVE_CAPSULE_INFO)
+ public static final int NET_DEVSTATE_GET_DOORWORK_MODE = 0X005d; // 获取门锁控制模式( 对应 NET_GET_DOORWORK_MODE)
+ public static final int NET_DEVSTATE_PTZ_ZOOM_INFO = 0x005e; // 查询云台获取光学变倍信息(对应 NET_OUT_PTZ_ZOOM_INFO )
+
+ public static final int NET_DEVSTATE_POWER_STATE = 0x0152; // 查询电源状态(对应结构体NET_POWER_STATUS)
+ public static final int NET_DEVSTATE_ALL_ALARM_CHANNELS_STATE = 0x153; // 查询报警通道状态(对应结构体 NET_CLIENT_ALARM_CHANNELS_STATE)
+ public static final int NET_DEVSTATE_ALARMKEYBOARD_COUNT = 0x0154; // 查询串口上连接的报警键盘数(对应结构体NET_ALARMKEYBOARD_COUNT)
+ public static final int NET_DEVSTATE_EXALARMCHANNELS = 0x0155; // 查询扩展报警模块通道映射关系(对应结构体 NET_EXALARMCHANNELS)
+ public static final int NET_DEVSTATE_GET_BYPASS = 0x0156; // 查询通道旁路状态(对应结构体 NET_DEVSTATE_GET_BYPASS)
+ public static final int NET_DEVSTATE_ACTIVATEDDEFENCEAREA = 0x0157; // 获取激活的防区信息(对应结构体 NET_ACTIVATEDDEFENCEAREA)
+ public static final int NET_DEVSTATE_DEV_RECORDSET = 0x0158; // 查询设备记录集信息(对应 NET_CTRL_RECORDSET_PARAM)
+ public static final int NET_DEVSTATE_DOOR_STATE = 0x0159; // 查询门禁状态(对应NET_DOOR_STATUS_INFO)
+ public static final int NET_DEVSTATE_ANALOGALARM_CHANNELS = 0x1560; // 模拟量报警输入通道映射关系(对应NET_ANALOGALARM_CHANNELS)
+ public static final int NET_DEVSTATE_GET_SENSORLIST = 0x1561; // 获取设备支持的传感器列表(对应 NET_SENSOR_LIST)
+ public static final int NET_DEVSTATE_ALARM_CHANNELS = 0x1562; // 查询开关量报警模块通道映射关系(对应结构体 NET_ALARM_CHANNELS)
+ // 如果设备不支持查询扩展报警模块通道,可以用该功能查询扩展通道的逻辑通道号,并当做本地报警通道使用
+ public static final int NET_DEVSTATE_GET_ALARM_SUBSYSTEM_ACTIVATESTATUS = 0x1563; // 获取当前子系统启用状态( 对应 NET_GET_ALARM_SUBSYSTEM_ACTIVATE_STATUES)
+ public static final int NET_DEVSTATE_AIRCONDITION_STATE = 0x1564; // 获取空调工作状态(对应 NET_GET_AIRCONDITION_STATE)
+ public static final int NET_DEVSTATE_ALARMSUBSYSTEM_STATE = 0x1565; // 获取子系统状态(对应NET_ALARM_SUBSYSTEM_STATE)
+ public static final int NET_DEVSTATE_ALARM_FAULT_STATE = 0x1566; // 获取故障状态(对应 NET_ALARM_FAULT_STATE_INFO)
+ public static final int NET_DEVSTATE_DEFENCE_STATE = 0x1567; // 获取防区状态(对应 NET_DEFENCE_STATE_INFO, 和旁路状态变化事件、本地报警事件、报警信号源事件的状态描述有区别,不能混用,仅个别设备使用)
+ public static final int NET_DEVSTATE_CLUSTER_STATE = 0x1568; // 获取集群状态(对应 NET_CLUSTER_STATE_INFO)
+ public static final int NET_DEVSTATE_SCADA_POINT_LIST = 0x1569; // 获取点位表路径信息(对应 NET_SCADA_POINT_LIST_INFO)
+ public static final int NET_DEVSTATE_SCADA_INFO = 0x156a; // 获取监测点位信息(对应 NET_SCADA_INFO)
+ public static final int NET_DEVSTATE_SCADA_CAPS = 0X156b; // 获取SCADA能力集(对应 NET_SCADA_CAPS)
+ public static final int NET_DEVSTATE_GET_CODEID_COUNT = 0x156c; // 获取对码成功的总条数(对应 NET_GET_CODEID_COUNT)
+ public static final int NET_DEVSTATE_GET_CODEID_LIST = 0x156d; // 查询对码信息(对应 NET_GET_CODEID_LIST)
+ public static final int NET_DEVSTATE_ANALOGALARM_DATA = 0x156e; // 查询模拟量通道数据(对应 NET_GET_ANALOGALARM_DATA)
+ public static final int NET_DEVSTATE_VTP_CALLSTATE = 0x156f; // 获取视频电话呼叫状态(对应 NET_GET_VTP_CALLSTATE)
+ public static final int NET_DEVSTATE_SCADA_INFO_BY_ID = 0x1570; // 通过设备、获取监测点位信息(对应 NET_SCADA_INFO_BY_ID)
+ public static final int NET_DEVSTATE_SCADA_DEVICE_LIST = 0x1571; // 获取当前主机所接入的外部设备ID(对应 NET_SCADA_DEVICE_LIST)
+ public static final int NET_DEVSTATE_DEV_RECORDSET_EX = 0x1572; // 查询设备记录集信息(带二进制数据)(对应NET_CTRL_RECORDSET_PARAM)
+ public static final int NET_DEVSTATE_ACCESS_LOCK_VER = 0x1573; // 获取门锁软件版本号(对应 NET_ACCESS_LOCK_VER)
+ public static final int NET_DEVSTATE_MONITORWALL_TVINFO = 0x1574; // 获取电视墙显示信息(对应 NET_CTRL_MONITORWALL_TVINFO)
+ public static final int NET_DEVSTATE_GET_ALL_POS = 0x1575; // 获取所有用户可用Pos设备配置信息(对应 NET_POS_ALL_INFO)
+ public static final int NET_DEVSTATE_GET_ROAD_LIST = 0x1576; // 获取城市及路段编码信息(对应 NET_ROAD_LIST_INFO)
+ public static final int NET_DEVSTATE_GET_HEAT_MAP = 0x1577; // 获取热度统计信息(对应 NET_QUERY_HEAT_MAP)
+ public static final int NET_DEVSTATE_GET_WORK_STATE = 0x1578; // 获取盒子工作状态信息(对应 NET_QUERY_WORK_STATE )
+ public static final int NET_DEVSTATE_GET_WIRESSLESS_STATE = 0x1579; // 获取无线设备状态信息(对应 NET_GET_WIRELESS_DEVICE_STATE)
+ public static final int NET_DEVSTATE_GET_REDUNDANCE_POWER_INFO = 0x157a; // 获取冗余电源信息(对应 NET_GET_REDUNDANCE_POWER_INFO)
+ public static final int NET_DEVSTATE_GET_ACCESSORY_INFO =0x157e; // 获取配件信息(对应 NET_GET_ACCESSORY_INFO)
+
+ // 查询设备信息类型, 对应接口 CLIENT_QueryDevInfo
+ // 设备信息类型,对应CLIENT_QueryDevInfo接口
+ public static final int NET_QUERY_DEV_STORAGE_NAMES = 0x01; // 查询设备的存储模块名列表 , pInBuf=NET_IN_STORAGE_DEV_NAMES *, pOutBuf=NET_OUT_STORAGE_DEV_NAMES *
+ public static final int NET_QUERY_DEV_STORAGE_INFOS = 0x02; // 查询设备的存储模块信息列表, pInBuf=NET_IN_STORAGE_DEV_INFOS*, pOutBuf= NET_OUT_STORAGE_DEV_INFOS *
+ public static final int NET_QUERY_RECENCY_JNNCTION_CAR_INFO = 0x03; // 查询最近的卡口车辆信息接口, pInBuf=NET_IN_GET_RECENCY_JUNCTION_CAR_INFO*, pOutBuf=NET_OUT_GET_RECENCY_JUNCTION_CAR_INFO*
+ public static final int NET_QUERY_LANES_STATE = 0x04; // 查询车道信息,pInBuf = NET_IN_GET_LANES_STATE , pOutBuf = NET_OUT_GET_LANES_STATE
+ public static final int NET_QUERY_DEV_FISHEYE_WININFO = 0x05; // 查询鱼眼窗口信息 , pInBuf= NET_IN_FISHEYE_WININFO*, pOutBuf=NET_OUT_FISHEYE_WININFO *
+ public static final int NET_QUERY_DEV_REMOTE_DEVICE_INFO = 0x06;; // 查询远程设备信息 , pInBuf= NET_IN_GET_DEVICE_INFO*, pOutBuf= NET_OUT_GET_DEVICE_INFO *
+ public static final int NET_QUERY_SYSTEM_INFO = 0x07; // 查询设备系统信息 , pInBuf= NET_IN_SYSTEM_INFO*, pOutBuf= NET_OUT_SYSTEM_INFO*
+ public static final int NET_QUERY_REG_DEVICE_NET_INFO = 0x08; // 查询主动注册设备的网络连接 , pInBuf=NET_IN_REGDEV_NET_INFO * , pOutBuf=NET_OUT_REGDEV_NET_INFO *
+ public static final int NET_QUERY_DEV_THERMO_GRAPHY_PRESET = 0x09; // 查询热成像预设信息 , pInBuf= NET_IN_THERMO_GET_PRESETINFO*, pOutBuf= NET_OUT_THERMO_GET_PRESETINFO *
+ public static final int NET_QUERY_DEV_THERMO_GRAPHY_OPTREGION = 0x0a; // 查询热成像感兴趣区域信息,pInBuf= NET_IN_THERMO_GET_OPTREGION*, pOutBuf= NET_OUT_THERMO_GET_OPTREGION *
+ public static final int NET_QUERY_DEV_THERMO_GRAPHY_EXTSYSINFO = 0x0b; // 查询热成像外部系统信息, pInBuf= NET_IN_THERMO_GET_EXTSYSINFO*, pOutBuf= NET_OUT_THERMO_GET_EXTSYSINFO *
+ public static final int NET_QUERY_DEV_RADIOMETRY_POINT_TEMPER = 0x0c; // 查询测温点的参数值, pInBuf= NET_IN_RADIOMETRY_GETPOINTTEMPER*, pOutBuf= NET_OUT_RADIOMETRY_GETPOINTTEMPER *
+ public static final int NET_QUERY_DEV_RADIOMETRY_TEMPER = 0x0d; // 查询测温项的参数值, pInBuf= NET_IN_RADIOMETRY_GETTEMPER*, pOutBuf= NET_OUT_RADIOMETRY_GETTEMPER *
+ public static final int NET_QUERY_GET_CAMERA_STATE = 0x0e; // 获取摄像机状态, pInBuf= NET_IN_GET_CAMERA_STATEINFO*, pOutBuf= NET_OUT_GET_CAMERA_STATEINFO *
+ public static final int NET_QUERY_GET_REMOTE_CHANNEL_AUDIO_ENCODE = 0x0f; // 获取远程通道音频编码方式, pInBuf= NET_IN_GET_REMOTE_CHANNEL_AUDIO_ENCODEINFO*, pOutBuf= NET_OUT_GET_REMOTE_CHANNEL_AUDIO_ENCODEINFO *
+ public static final int NET_QUERY_GET_COMM_PORT_INFO = 0x10; // 获取设备串口信息, pInBuf=NET_IN_GET_COMM_PORT_INFO* , pOutBuf=NET_OUT_GET_COMM_PORT_INFO*
+ public static final int NET_QUERY_GET_LINKCHANNELS = 0x11; // 查询某视频通道的关联通道列表,pInBuf=NET_IN_GET_LINKCHANNELS* , pOutBuf=NET_OUT_GET_LINKCHANNELS*
+ public static final int NET_QUERY_GET_VIDEOOUTPUTCHANNELS = 0x12; // 获取解码通道数量统计信息, pInBuf=NET_IN_GET_VIDEOOUTPUTCHANNELS*, pOutBuf=NET_OUT_GET_VIDEOOUTPUTCHANNELS*
+ public static final int NET_QUERY_GET_VIDEOINFO = 0x13; // 获取解码通道信息, pInBuf=NET_IN_GET_VIDEOINFO*, pOutBuf=NET_OUT_GET_VIDEOINFO*
+ public static final int NET_QUERY_GET_ALLLINKCHANNELS = 0x14; // 查询全部视频关联通道列表,pInBuf=NET_IN_GET_ALLLINKCHANNELS* , pOutBuf=NET_OUT_GET_ALLLINKCHANNELS*
+ public static final int NET_QUERY_VIDEOCHANNELSINFO = 0x15; // 查询视频通道信息,pInBuf=NET_IN_GET_VIDEOCHANNELSINFO* , pOutBuf=NET_OUT_GET_VIDEOCHANNELSINFO*
+ public static final int NET_QUERY_TRAFFICRADAR_VERSION = 0x16; // 查询雷达设备版本,pInBuf=NET_IN_TRAFFICRADAR_VERSION* , pOutBuf=NET_OUT_TRAFFICRADAR_VERSION*
+ public static final int NET_QUERY_WORKGROUP_NAMES = 0x17; // 查询所有的工作目录组名,pInBuf=NET_IN_WORKGROUP_NAMES* , pOutBuf=NET_OUT_WORKGROUP_NAMES*
+ public static final int NET_QUERY_WORKGROUP_INFO = 0x18; // 查询工作组信息,pInBuf=NET_IN_WORKGROUP_INFO* , pOutBuf=NET_OUT_WORKGROUP_INFO*
+ public static final int NET_QUERY_WLAN_ACCESSPOINT = 0x19; // 查询无线网络接入点信息,pInBuf=NET_IN_WLAN_ACCESSPOINT* , pOutBuf=NET_OUT_WLAN_ACCESSPOINT*
+ public static final int NET_QUERY_GPS_INFO = 0x1a; // 查询设备GPS信息,pInBuf=NET_IN_DEV_GPS_INFO* , pOutBuf=NET_OUT_DEV_GPS_INFO*
+ public static final int NET_QUERY_IVS_REMOTE_DEVICE_INFO = 0x1b; // 查询IVS的前端设备所关联的远程设备信息, pInBuf = NET_IN_IVS_REMOTE_DEV_INFO*, pOutBuf = NET_OUT_IVS_REMOTE_DEV_INFO*
+ public static final int NET_QUERY_VIDEO_ENCODE_CAPS = 0x1e; // 获取视频编码能力集, pInBuf = NET_IN_VIDEO_ENCODE_CAPS*, pOutBuf = NET_OUT_VIDEO_ENCODE_CAPS*
+ public static final int NET_ACCESSCONTROL_CAPS = 0x20; // 获取门禁能力, pInBuf = NET_IN_AC_CAPS*, pOutBuf = NET_OUT_AC_CAPS*
+ public static final int NET_QUERY_HARDDISK_TEMPERATURE = 0x22; // 获取硬盘温度,pInBuf = NET_IN_HDD_TEMPERATURE*, pOutBuf = NET_OUT_HDD_TEMPERATURE*
+ public static final int NET_QUERY_AUDIO_DECODE_CAPS = 0x25; // 获取音频解码能力集, pInBuf = NET_IN_AUDIO_DECODE_CAPS*, pOutBuf = NET_OUT_AUDIO_DECODE_CAPS*
+ public static final int NET_QUERY_REMOTE_DEVICE_CAPS = 0x27; // 获取远程设备管理能力集, pInBuf = NET_IN_REMOTEDEVICE_CAP*, pOutBuf= NET_OUT_REMOTEDEVICE_CAP
+ public static final int NET_QUERY_TRAFFIC_SNAP_RADAR = 0x28; // 获取智能交通雷达信息, pInfo = NET_IN_TRAFFIC_SNAP_RADAR_INFO*, pOutBuf = NET_OUT_TRAFFIC_SNAP_RADAR_INFO*
+ public static final int NET_QUERY_TRAFFIC_SNAP_STROBE = 0x29; // 获取智能交通道闸信息, pInfo = NET_IN_TRAFFIC_SNAP_STROBE_INFO*, pOutBuf = NET_OUT_TRAFFIC_SNAP_STROBE_INFO*
+ public static final int NET_QUERY_PTZ_CURRENT_FOV_VALUE = 0x36; // 获取镜头当前倍率下水平视场角参数,pInBuf = NET_IN_PTZ_CURRENT_FOV_VALUE*,pOutBuf = NET_OUT_PTZ_CURRENT_FOV_VALUE*
+ public static final int NET_QUERY_DEV_IO_STATS = 0x37; // 获取所有存储设备的io信息参数,pInBuf = NET_IN_DEV_IO_STATS*,pOutBuf = NET_OUT_DEV_IO_STAT*
+ public static final int NET_QUERY_PTZBASE_GET_HFOV_VALUE = 0x39; // 获取镜头不同倍率下水平视场角参数,pInBuf = NET_IN_PTZBASE_GET_HFOV_VALUE*,pOutBuf = NET_OUT_PTZBASE_GET_HFOV_VALUE*
+ public static final int NET_QUERY_PTZBASE_GET_CENTER_GPS = 0x3a; // 获取中心位置GPS信息,pInBuf = NET_IN_PTZBASE_GET_CENTER_GPS*,pOutBuf = NET_OUT_PTZBASE_GET_CENTER_GPS*
+ public static final int NET_QUERY_PTZBASE_GET_VFOV_VALUE = 0x3f; // 获取镜头不同倍率下垂直视场角参数,pInBuf = NET_IN_PTZBASE_GET_VFOV_VALUE*,pOutBuf = NET_OUT_PTZBASE_GET_VFOV_VALUE*
+
+ // 设备能力类型, 对应CLIENT_GetDevCaps接口
+ public static final int NET_THERMO_GRAPHY_CAPS = 0x06; // 热成像摄像头属性能力,pInBuf=NET_IN_THERMO_GETCAPS*, pOutBuf=NET_OUT_THERMO_GETCAPS*
+ public static final int NET_RADIOMETRY_CAPS = 0x07; // 热成像测温全局配置能力,pInBuf=NET_IN_RADIOMETRY_GETCAPS*, pOutBuf=NET_OUT_RADIOMETRY_GETCAPS*
+
+ public static final int NET_QUERY_TRAFFIC_RADAR_GET_OBJECT = 0x35; // 获取雷达物体目标信息,pInBuf = NET_IN_TRAFFIC_RADAR_GET_OBJECT_INFO*,pOutBuf = NET_OUT_TRAFFIC_RADAR_GET_OBJECT_INFO*
+
+ /////////////////////////////////// 矩阵 ///////////////////////////////////////
+
+ public static final int NET_MATRIX_INTERFACE_LEN = 16; // 信号接口名称长度
+ public static final int NET_MATRIX_MAX_CARDS = 128; // 矩阵子卡最大数量
+ public static final int NET_SPLIT_PIP_BASE = 1000; // 分割模式画中画的基础值
+ public static final int NET_MAX_SPLIT_MODE_NUM = 64; // 最大分割模式数
+ public static final int NET_MATRIX_MAX_CHANNEL_IN = 1500; // 矩阵最大输入通道数
+ public static final int NET_MATRIX_MAX_CHANNEL_OUT = 256; // 矩阵最大输出通道数
+ public static final int NET_DEVICE_NAME_LEN = 64; // 设备名称长度
+ public static final int NET_MAX_CPU_NUM = 16; // 最大CPU数量
+ public static final int NET_MAX_FAN_NUM = 16; // 最大风扇数量
+ public static final int NET_MAX_POWER_NUM = 16; // 最大电源数量
+ public static final int NET_MAX_BATTERY_NUM = 16; // 最大电池数量
+ public static final int NET_MAX_RAID_DEVICE_NAME = 16; // RAID异常信息-RAID设备名称
+ public static final int NET_MAX_TEMPERATURE_NUM = 256; // 最大温度传感器数量
+ public static final int NET_MAX_ISCSI_NAME_LEN = 128; // ISCSI名称长度
+ public static final int NET_VERSION_LEN = 64; // 版本信息长度
+ public static final int NET_MAX_STORAGE_PARTITION_NUM = 32; // 存储分区最大数量
+ public static final int NET_STORAGE_MOUNT_LEN = 64; // 挂载点长度
+ public static final int NET_STORAGE_FILE_SYSTEM_LEN = 16; // 文件系统名称长度
+ public static final int NET_MAX_MEMBER_PER_RAID = 32; // RAID成员最大数量
+ public static final int NET_DEV_ID_LEN_EX = 128; // 设备ID最大长度
+ public static final int NET_MAX_BLOCK_NUM = 32; // 最大区块数量
+ public static final int NET_MAX_SPLIT_WINDOW = 128; // 最大分割窗口数量
+ public static final int NET_FILE_TYPE_LEN = 64; // 文件类型长度
+ public static final int NET_DEV_ID_LEN = 128; // 设备ID最大长度
+ public static final int NET_DEV_NAME_LEN = 128; // 设备名称最大长度
+ public static final int NET_TSCHE_DAY_NUM = 8; // 时间表第一维大小, 表示天数
+ public static final int NET_TSCHE_SEC_NUM = 6; // 时间表第二维大小, 表示时段数
+ public static final int NET_SPLIT_INPUT_NUM = 256; // 设备二级切换时第一级split支持的输入通道数
+
+ public static final String NET_DEVICE_ID_LOCAL = "Local"; // 本地设备ID
+ public static final String NET_DEVICE_ID_REMOTE = "Remote"; // 远程设备ID
+ public static final String NET_DEVICE_ID_UNIQUE = "Unique"; // 设备内统一编
+
+ public static final String NET_DIAGNOSIS_DITHER = "VideoDitherDetection"; // 视频抖动检测 对应结构体(NET_VIDEO_DITHER_DETECTIONRESULT)
+ public static final String NET_DIAGNOSIS_STRIATION = "VideoStriationDetection"; // 视频条纹检测 对应结构体(NET_VIDEO_STRIATION_DETECTIONRESULT)
+ public static final String NET_DIAGNOSIS_LOSS = "VideoLossDetection"; // 视频丢失检测 对应结构体(NET_VIDEO_LOSS_DETECTIONRESULT)
+ public static final String NET_DIAGNOSIS_COVER ="VideoCoverDetection"; // 视频遮挡检测 对应结构体(NET_VIDEO_COVER_DETECTIONRESULT)
+ public static final String NET_DIAGNOSIS_FROZEN = "VideoFrozenDetection"; // 视频冻结检测 对应结构体(NET_VIDEO_FROZEN_DETECTIONRESULT)
+ public static final String NET_DIAGNOSIS_BRIGHTNESS ="VideoBrightnessDetection"; // 视频亮度异常检测 对应结构体(NET_VIDEO_BRIGHTNESS_DETECTIONRESULT)
+ public static final String NET_DIAGNOSIS_CONTRAST ="VideoContrastDetection"; // 视频对比度异常检测 对应结构体(NET_VIDEO_CONTRAST_DETECTIONRESULT)
+ public static final String NET_DIAGNOSIS_UNBALANCE ="VideoUnbalanceDetection"; // 视频偏色检测 对应结构体(NET_VIDEO_UNBALANCE_DETECTIONRESULT)
+ public static final String NET_DIAGNOSIS_NOISE ="VideoNoiseDetection"; // 视频噪声检测 对应结构体(NET_VIDEO_NOISE_DETECTIONRESULT)
+ public static final String NET_DIAGNOSIS_BLUR ="VideoBlurDetection"; // 视频模糊检测 对应结构体(NET_VIDEO_BLUR_DETECTIONRESULT)
+ public static final String NET_DIAGNOSIS_SCENECHANGE ="VideoSceneChangeDetection"; // 视频场景变化检测 对应结构体(NET_VIDEO_SCENECHANGE_DETECTIONRESULT)
+ public static final String NET_DIAGNOSIS_VIDEO_DELAY ="VideoDelay"; // 视频延时检测 对应结构体(NET_VIDEO_DELAY_DETECTIONRESUL)
+ public static final String NET_DIAGNOSIS_PTZ_MOVING ="PTZMoving"; // 云台移动检测 对应结构体(NET_PTZ_MOVING_DETECTIONRESULT)
+ public static final String NET_DIAGNOSIS_BLACK_WHITE ="VideoBlackAndWhite"; // 黑白图像检测, 对应结构体(NET_BLACK_WHITE_DETECTIONRESULT)
+ public static final String NET_DIAGNOSIS_DRAMATIC_CHANGE ="VideoDramaticChange"; // 场景剧变检测, 对应结构体(NET_DIAGNOSIS_DRAMATIC_DETECTIONRESULT)
+ public static final String NET_DIAGNOSIS_VIDEO_AVAILABILITY ="VideoAvailability"; // 视频完好率监测, 对应结构体(NET_VIDEO_AVAILABILITY_DETECTIONRESULT)
+ public static final String NET_DIAGNOSIS_SNOWFLAKE ="SnowflakeDetection"; // 雪花屏检测, 对应结构体(NET_VIDEO_SNOWFLAKE_DETECTIONRESULT)
+ public static final String NET_DIAGNOSIS_VIDEO_ALGORITHMTYPE ="VideoAlgorithmType"; // 视频算法类型检测,对应结构体(NET_VIDEO_ALGORITHMTYPE_DETECTIONRESULT)
+ public static final String NET_DIAGNOSIS_VIDEO_FILCKERING_DETECTION ="VideoFilckeringDetection"; // 视频闪频检测, 对应结构体(NET_VIDEO_FILCKERING_DETECTION_RESULT)
+ public static final String NET_DIAGNOSIS_VIDEO_LOSS_FRAME_DETECTION ="VideoLossFrameDetection"; // 视频丢帧检测, 对应结构体(NET_VIDEO_LOSS_FRAME_DETECTION_RESULT)
+
+ //其他定义
+ public static final int NET_MAX_NAME_LEN = 16; // 通用名字字符串长度
+ public static final int NET_MAX_PERSON_ID_LEN = 32; // 人员id最大长度
+ public static final int NET_MAX_PERSON_IMAGE_NUM = 48; // 每个人员对应的最大人脸图片数
+ public static final int NET_MAX_PROVINCE_NAME_LEN = 64; // 省份名称最大长度
+ public static final int NET_MAX_CITY_NAME_LEN = 64; // 城市名称最大长度
+ public static final int NET_MAX_PERSON_NAME_LEN = 64; // 人员名字最大长度
+ public static final int MAX_FACE_AREA_NUM = 8; // 最大人脸区域个数
+ public static final int MAX_PATH = 260;
+ public static final int MAX_FACE_DB_NUM = 8; // 最大人脸数据库个数
+ public static final int MAX_GOURP_NUM = 128; // 人脸库最大个数
+ public static final int MAX_AGE_NUM = 2; // 最大年龄个数
+ public static final int MAX_EMOTION_NUM = 8; // 最大表情条件的个数
+
+ public static final int MAX_FIND_COUNT = 20;
+ public static final int NET_MAX_POLYGON_NUM = 16; // 多边形最大顶点个数
+ public static final int NET_MAX_CANDIDATE_NUM = 50; // 目标识别最大匹配数
+ public static final int MAX_POLYGON_NUM = 20; // 视频分析设备区域顶点个数上限
+ public static final int MAX_CALIBRATEBOX_NUM = 10; // 智能分析校准框个数上限
+ public static final int MAX_NAME_LEN = 128; // 通用名字字符串长度
+ public static final int MAX_EXCLUDEREGION_NUM = 10; // 智能分析检测区域中需要排除的区域个数上限
+ public static final int MAX_SCENE_LIST_SIZE = 32; // 视频分析设备支持的场景类型列表个数上限
+ public static final int MAX_OBJECT_LIST_SIZE = 16; // 视频分析设备支持的检测物体类型列表个数上限
+ public static final int MAX_RULE_LIST_SIZE = 128; // 视频分析设备支持的规则列表个数上限
+ public static final int MAX_ACTION_LIST_SIZE = 16; // 视频分析设备支持的规则的动作类型列表个数上限
+ public static final int MAX_SPECIALDETECT_NUM = 10; // 智能分析特殊检测区域上限
+ public static final int MAX_OBJECT_ATTRIBUTES_SIZE = 16; // 视频分析设备支持的检测物体属性类型列表个数上限
+ public static final int MAX_CATEGORY_TYPE_NUMBER = 128; // 子类别类型数
+ public static final int MAX_ANALYSE_MODULE_NUM = 16; // 视频分析设备最大检测模块个数
+ public static final int MAX_LOG_PATH_LEN = 260; // 日志路径名最大长度
+ public static final int MAX_CHANNELNAME_LEN = 64; // 最大通道名称长度
+ public static final int MAX_VIDEO_CHANNEL_NUM = 256; // 最大通道数256
+ public static final int MAX_PSTN_SERVER_NUM = 8; // 最大报警电话服务器数
+ public static final int MAX_TIME_SCHEDULE_NUM = 8; // 时间表元素个数
+ public static final int MAX_REC_TSECT = 6; // 录像时间段个数
+ public static final int MAX_REC_TSECT_EX = 10; // 录像时间段扩展个数
+ public static final int MAX_NAS_TIME_SECTION = 2; // 网络存储时间段个数
+ public static final int MAX_CHANNEL_COUNT = 16;
+ public static final int MAX_ACCESSCONTROL_NUM = 8; // 最大门禁操作的组合数
+ public static final int MAX_DBKEY_NUM = 64; // 数据库关键字最大值
+ public static final int MAX_SUMMARY_LEN = 1024; // 叠加到JPEG图片的摘要信息最大长度
+ public static final int WEEK_DAY_NUM = 7; // 一周的天数
+ public static final int NET_MAX_FACEDETECT_FEATURE_NUM = 32; // 人脸特征最大个数
+ public static final int NET_MAX_OBJECT_LIST = 16; // 智能分析设备检测到的物体ID个数上限
+ public static final int NET_MAX_RULE_LIST = 16; // 智能分析设备规则个数上限
+ public static final int MAX_HUMANFACE_LIST_SIZE = 8; // 视频分析设备支持的人脸检测类型列表个数上限
+ public static final int MAX_FEATURE_LIST_SIZE = 32; // 视频分析设备支持的人脸属性列表个数上限
+ public static final int NET_MAX_DETECT_REGION_NUM = 20; // 规则检测区域最大顶点数
+ public static final int NET_MAX_DETECT_LINE_NUM = 20; // 规则检测线最大顶点数
+ public static final int NET_MAX_TRACK_LINE_NUM = 20; // 物体运动轨迹最大顶点数
+ public static final int NET_MACADDR_LEN = 40; // MAC地址字符串长度
+ public static final int NET_DEV_TYPE_LEN = 32; // 设备型号字符串(如"IPC-F725")长度
+ public static final int NET_DEV_SERIALNO_LEN = 48; // 序列号字符串长度
+ public static final int NET_MAX_URL_LEN = 128; // URL字符串长度
+ public static final int NET_MAX_STRING_LEN = 128;
+ public static final int NET_MACHINE_NAME_NUM = 64; // 机器名称长度
+ public static final int NET_USER_NAME_LENGTH_EX = 16; // 用户名长度
+ public static final int NET_USER_NAME_LENGTH = 8; // 用户名长度
+ public static final int NET_USER_PSW_LENGTH = 8; // 用户密码长度
+ public static final int NET_EVENT_NAME_LEN = 128; // 事件名称长度
+ public static final int NET_MAX_LANE_NUM = 8; // 视频分析设备每个通道对应车道数上限
+ public static final int MAX_DRIVING_DIR_NUM = 16; // 车道行驶方向最大个数
+ public static final int FLOWSTAT_ADDR_NAME = 16; // 上下行地点名长
+ public static final int NET_MAX_DRIVINGDIRECTION = 256; // 行驶方向字符串长度
+ public static final int COMMON_SEAT_MAX_NUMBER = 8; // 默认检测最大座驾个数
+ public static final int NET_MAX_ATTACHMENT_NUM = 8; // 最大车辆物件数量
+ public static final int NET_MAX_ANNUUALINSPECTION_NUM = 8; // 最大年检标识位置
+ public static final int NET_MAX_EVENT_PIC_NUM = 6; // 最大原始图片张数
+ public static final int NET_COMMON_STRING_4 = 4; // 通用字符串长度4
+ public static final int NET_COMMON_STRING_8 = 8; // 通用字符串长度8
+ public static final int NET_COMMON_STRING_16 = 16; // 通用字符串长度16
+ public static final int NET_COMMON_STRING_20 = 20; // 通用字符串长度20
+ public static final int NET_COMMON_STRING_32 = 32; // 通用字符串长度32
+ public static final int NET_COMMON_STRING_64 = 64; // 通用字符串长度64
+ public static final int NET_COMMON_STRING_128 = 128; // 通用字符串长度128
+ public static final int NET_COMMON_STRING_256 = 256; // 通用字符串长度256
+ public static final int NET_COMMON_STRING_512 = 512; // 通用字符串长度512
+ public static final int NET_COMMON_STRING_1024 = 1024; // 通用字符串长度1024
+ public static final int NET_COMMON_STRING_2048 = 2048; // 通用字符串长度2048
+ public static final int MAX_VIDEOSTREAM_NUM = 4; // 最大码流个数
+ public static final int MAX_VIDEO_COVER_NUM = 16; // 最大遮挡区域个数
+ public static final int MAX_VIDEO_IN_ZOOM = 32; // 单通道最大变速配置个数
+ public static final int NET_EVENT_CARD_LEN = 36; // 卡片名称长度
+ public static final int NET_EVENT_MAX_CARD_NUM = 16; // 事件上报信息包含最大卡片个数
+ public static final int MAX_STATUS_NUM = 16; // 交通设备状态最大个数
+ public static final int NET_MAX_CHANMASK = 64; // 通道掩码最大值
+ public static final int NET_CHAN_NAME_LEN = 32; // 通道名长度,DVR DSP能力限制,最多32字节
+ public static final int MAX_LANE_NUM = 8; // 视频分析设备每个通道对应车道数上限
+ public static final int MAX_STAFF_NUM = 20; // 视频分析设备每个通道对应的标尺数上限
+ public static final int MAX_ANALYSE_RULE_NUM = 32; // 视频分析设备最大规则个数
+ public static final int MAX_POLYLINE_NUM = 20; // 视频分析设备折线顶点个数上限
+ public static final int MAX_TEMPLATEREGION_NUM = 32; // 视频分析设备模拟区域信息点对个数上限
+ public static final int POINT_PAIR_NUM = 2; // 视频分析设备模拟区域点对包含的点个数
+ public static final int MAX_VEHICLE_SIZE_LIST = 4; // 视频分析设备车辆大小个数上限
+ public static final int MAX_VEHICLE_TYPE_LIST = 4; // 视频分析设备车辆类型个数上限
+ public static final int MAX_PLATE_TYPE_LIST = 32; // 视频分析设备车牌类型个数上限
+ public static final int MAX_CALIBRATEAREA_NUM = 20; // 视频分析设备标定区域的上限
+ public static final int MAX_ANALYSE_SCENE_NUM = 32; // 视频分析全局配置场景最大数量
+ public static final int MAX_PLATEHINT_NUM = 8; // 车牌字符暗示个数上限
+ public static final int MAX_LIGHT_NUM = 8; // 交通灯个数上限
+ public static final int MAX_LIGHTGROUP_NUM = 8; // 交通灯组个数上限
+ public static final int MAX_LIGHT_TYPE = 8; // 交通灯类型上限
+ public static final int MAX_PARKING_SPACE_NUM = 6; // 最多配置6个车位信息
+ public static final int MAX_SHIELD_AREA_NUM = 16; // 1个车位最多对应16个屏蔽区域
+ public static final int MAX_SCENE_TYPE_LIST_SIZE = 8; // 场景列表中最多支持的场景个数
+ public static final int MAX_LIGHT_DIRECTION = 8; // 交通灯指示方向数上限
+ public static final int CFG_FLOWSTAT_ADDR_NAME = 16; //上下行地点名长
+ public static final int MAX_ACCESS_READER_NUM = 32; // 门禁单个门最大读卡器数量
+ public static final int MAX_ACCESSSUBCONTROLLER_NUM = 64; // 最大门禁分控器数量
+ public static final int MAX_BACKPIC_COUNT = 8; // 最大背景图片个数
+ public static final int NET_WIRELESS_DEVICE_SERIAL_NUMBER_MAX_LEN = 32;// 无线设备序列号最大长度
+ public static final int NET_MAX_CUSTOM_PERSON_INFO_NUM = 4; // 注册人员信息扩展最大个数
+ public static final int NET_MAX_PERSON_INFO_LEN = 64; // 人员扩展信息最大长度
+ public static final int MAX_ALARMEXT_MODULE_NUM = 256; // 最大扩展模块数目
+ public static final int MAX_CALIBRATEAREA_TYPE_NUM = 4; // 标定区域类型上限
+ public static final int MAX_SCENE_SUBTYPE_LEN = 64; // 场景子类型字符串长度
+ public static final int MAX_SCENE_SUBTYPE_NUM = 32; // 场景子类型最大个数
+ public static final int MAX_SUPPORTED_COMP_SIZE = 4; // 最大支持的场景组合项
+ public static final int MAX_SUPPORTED_COMP_DATA = 8; // 每个组合项里最多支持的场景个数
+ public static final int MAX_NUMBER_STAT_MAULT_NUM = 32; // 最大客流量统计场景PD个数
+
+ public static final int NET_NEW_MAX_RIGHT_NUM = 1024; // 用户权限个数上限
+ public static final int NET_MAX_GROUP_NUM = 20; // 用户组个数上限
+ public static final int NET_MAX_USER_NUM = 200; // 用户个数上限
+ public static final int NET_RIGHT_NAME_LENGTH = 32; // 权限名长度
+ public static final int NET_MEMO_LENGTH = 32; // 备注长度
+ public static final int NET_NEW_USER_NAME_LENGTH = 128; // 用户名长度
+ public static final int NET_NEW_USER_PSW_LENGTH = 128; // 密码
+ public static final int NET_MAX_RIGHT_NUM = 100; // 用户权限个数上限
+ public static final int NET_COMMENT_LENGTH = 100; // 备注信息长度
+ public static final int NET_GROUPID_LENGTH = 64; // group id 信息长度
+ public static final int NET_GROUPNAME_LENGTH = 128; // group name 信息长度
+ public static final int NET_FEATUREVALUE_LENGTH = 128; // 人脸特征 信息长度
+
+ public static final int MAX_GROUP_ID_LEN = 64; // 最大布控组ID长度
+ public static final int MAX_COLOR_NAME_LEN = 32; // 最大颜色名长度
+ public static final int MAX_COLOR_HEX_LEN = 8; // 最大HEX颜色长度
+ public static final int MAX_LINK_GROUP_NUM = 20; // 联动的布控组最大数量
+ public static final int MAX_PATH_LEN = 260; // 最大路径长度
+ public static final int MAX_RIDER_NUM = 16; // 骑车人数组上限
+ public static final int MAX_ALARM_CHANNEL_NAME_LEN = 64; // 最大报警名称长度
+ public static final int MAX_ATTACHMENT_NUM = 8; // 最大车内物品个数
+ public static final int NET_MAX_FRAMESEQUENCE_NUM = 2; // 最大帧序号个数
+ public static final int NET_MAX_TIMESTAMP_NUM = 2; // 最大时间戳个数
+ public static final int NET_VIDEOANALYSE_SCENES = 32; // 最大场景个数
+ public static final int NET_VIDEOANALYSE_RULES = 64; // 最大规则个数
+ public static final int SDK_EVENT_NAME_LEN = 128; // 事件名称长度
+ // 支持用户名最大长度为8位或16位的设备,对应扩展接口CLIENT_QueryUserInfoEx和CLIENT_OperateUserInfoEx
+ public static final int NET_USER_PSW_LENGTH_EX = 16; // 密码
+
+ public static final int AV_CFG_Device_ID_Len = 64; // 设备ID长度
+ public static final int AV_CFG_Channel_Name_Len = 64; // 通道名称长度
+ public static final int AV_CFG_Monitor_Name_Len = 64; // 电视墙名称长度
+ public static final int AV_CFG_Max_TV_In_Block = 128; // 区块中TV的最大数量
+ public static final int AV_CFG_Max_Block_In_Wall = 128; // 电视墙中区块的最大数量
+ public static final int AV_CFG_IP_Address_Len = 32; // IP 长度
+ public static final int AV_CFG_Protocol_Len = 32; // 协议名长度
+ public static final int AV_CFG_User_Name_Len = 64; // 用户名长度
+ public static final int AV_CFG_Password_Len = 64; // 密码长度
+ public static final int AV_CFG_Serial_Len = 32; // 序列号长度
+ public static final int AV_CFG_Device_Class_Len = 16; // 设备类型长度
+ public static final int AV_CFG_Device_Type_Len = 32; // 设备具体型号长度
+ public static final int AV_CFG_Device_Name_Len = 128; // 机器名称
+ public static final int AV_CFG_Address_Len = 128; // 机器部署地点
+ public static final int AV_CFG_Max_Path = 260; // 路径长度
+ public static final int AV_CFG_Group_Name_Len = 64; // 分组名称长度
+ public static final int AV_CFG_DeviceNo_Len = 32; // 设备编号长度
+ public static final int AV_CFG_Group_Memo_Len = 128; // 分组说明长度
+ public static final int AV_CFG_Max_Channel_Num = 1024; // 最大通道数量
+ public static final int MAX_DEVICE_NAME_LEN = 64; // 机器名称
+ public static final int MAX_DEV_ID_LEN_EX = 128; // 设备ID最大长度
+ public static final int MAX_PATH_STOR = 240; // 远程目录的长度
+ public static final int MAX_REMOTE_DEV_NUM = 256; // 最大远程设备数量
+ public static final int NET_MAX_PLATE_NUMBER_LEN = 32; // 车牌字符长度
+ public static final int NET_MAX_AUTHORITY_LIST_NUM = 16; // 权限列表最大个数
+ public static final int NET_MAX_ALARMOUT_NUM_EX = 32; //报警输出口个数上限扩展
+ public static final int NET_MAX_VIDEO_IN_NUM_EX = 32; //视频输入口个数上限扩展
+ public static final int NET_MAX_SAERCH_IP_NUM = 256; // 最大搜索IP个数
+ public static final int NET_MAX_POS_MAC_NUM = 8; // 刷卡机Mac码最大长度
+ public static final int NET_MAX_BUSCARD_NUM = 64; // 公交卡号最大长度
+ public static final int NET_STORAGE_NAME_LEN = 128; // 存储设备名称长度
+
+ public static final int NET_MAX_DOOR_NUM = 32; // 最大有权限门禁数目
+ public static final int NET_MAX_TIMESECTION_NUM = 32; // 最大有效时间段数目
+ public static final int NET_MAX_CARDNAME_LEN = 64; // 门禁卡命名最大长度
+ public static final int NET_MAX_CARDNO_LEN = 32; // 门禁卡号最大长度
+ public static final int NET_MAX_USERID_LEN = 32; // 门禁卡用户ID最大长度
+ public static final int NET_MAX_IC_LEN = 32; // 证件最大长度
+ public static final int NET_MAX_QRCODE_LEN = 128; // QRCode 最大长度
+ public static final int NET_MAX_CARD_INFO_LEN = 256; // 卡号信息最大长度
+ public static final int NET_MAX_SIM_LEN = 16; // SIM卡的值的最大长度
+ public static final int NET_MAX_DISKNUM = 256; // 最大硬盘个数
+ public static final int MAX_FACE_DATA_NUM = 20; // 人脸模版最大个数
+ public static final int MAX_FINGERPRINT_NUM = 10; // 最大信息个数
+ public static final int MAX_FACE_DATA_LEN = 2 * 1024; // 人脸模版数据最大长度
+ public static final int MAX_COMMON_STRING_8 = 8; // 通用字符串长度8
+ public static final int MAX_COMMON_STRING_16 = 16; // 通用字符串长度16
+ public static final int MAX_COMMON_STRING_32 = 32; // 通用字符串长度32
+ public static final int MAX_COMMON_STRING_64 = 64; // 通用字符串长度64
+ public static final int MAX_COMMON_STRING_128 = 128; // 通用字符串长度128
+ public static final int MAX_USER_NAME_LEN = 128; // 最大用户名长度
+ public static final int MAX_ROOMNUM_COUNT = 32; // 房间最大个数
+ public static final int MAX_FACE_COUTN = 20; // 人脸模板数据最大个数
+ public static final int MAX_PHOTO_COUNT = 5; // 人脸照片最大个数
+ public static final int MAX_WINDOWS_COUNT = 16; // 诱导屏最大窗口个数
+ public static final int MAX_CLASS_NUMBER_LEN = 32; // 最大班级长度
+ public static final int MAX_PHONENUMBER_LEN = 16; // 最大电话长度
+ public static final int MAX_NASFILE_NUM = 8; // 最大NAS文件个数
+ public static final int MAX_CELL_PHONE_NUMBER_LEN = 32; // 最大手机号长度
+ public static final int MAX_MAIL_LEN = 64; // 邮箱最大长度
+ public static final int MAX_PWD_LEN = 128; // 最大密码长度
+ public static final int MAX_ACCESS_FLOOR_NUM = 64; // 最大楼层数量
+ public static final int MAX_ORDER_NUMBER = 6; // 排序规则的最大数量
+ public static final int MAX_NUMBER_REGISTER_INFO = 32;
+ public static final int MAX_COMPANION_CARD_NUM = 6; // 陪同者卡号最大个数
+
+ public static final int CFG_COMMON_STRING_8 = 8; // 通用字符串长度8
+ public static final int CFG_COMMON_STRING_16 = 16; // 通用字符串长度16
+ public static final int CFG_COMMON_STRING_32 = 32; // 通用字符串长度32
+ public static final int CFG_COMMON_STRING_64 = 64; // 通用字符串长度64
+ public static final int CFG_COMMON_STRING_128 = 128; // 通用字符串长度128
+ public static final int CFG_COMMON_STRING_256 = 256; // 通用字符串长度256
+ public static final int CFG_COMMON_STRING_512 = 512; // 通用字符串长度512
+
+ public static final int MAX_COILCONFIG = 3; // 智能交通车检器线圈配置上限
+ public static final int MAX_DETECTOR = 6; // 智能交通车检器配置上限
+ public static final int MAX_VIOLATIONCODE = 16; // 智能交通违章代码长度上限
+ public static final int MAX_LANE_CONFIG_NUMBER = 32; // 车道最大个数
+ public static final int MAX_VIOLATIONCODE_DESCRIPT = 64; // 智能交通违章代码长度上限
+ public static final int MAX_ROADWAYNO = 128; // 道路编号 由32个数字和字母构成
+ public static final int MAX_PRIORITY_NUMBER = 256; // 违章优先级包含违章最大个数
+ public static final int MAX_DRIVINGDIRECTION = 256; // 行驶方向字符串长度
+
+ public static final int MAX_OSD_CUSTOM_SORT_NUM = 8;
+ public static final int MAX_OSD_CUSTOM_SORT_ELEM_NUM = 8;
+ public static final int MAX_OSD_CUSTOM_GENERAL_NUM = 8;
+ public static final int MAX_OSD_ITEM_ATTR_NUM = 8;
+ public static final int MAX_PRE_POX_STR_LEN = 32;
+ public static final int MAX_OSD_CUSTOM_NAME_LEN = 32;
+ public static final int MAX_OSD_CUSTOM_VALUE_LEN = 256;
+ public static final int MAX_CONF_CHAR = 256;
+ public static final int MAX_IVS_EVENT_NUM = 256;
+ public static final int MAX_QUERY_USER_NUM = 4; // 最大查询用户个数
+ public static final int MAX_DEVICE_ADDRESS = 256; // TrafficSnapshot智能交通设备地址
+ public static final int MAX_STORAGE_NUM = 8; // 存储设备最大个数
+ public static final int MAX_PARTITION_NUM = 8; // 最大分区个数
+ public static final int MAX_SCADA_POINT_LIST_INFO_NUM = 256; // 最大点位表路径个数
+ public static final int MAX_SCADA_POINT_LIST_ALARM_INFO_NUM = 256; // 最大点位表报警个数
+ public static final int MAX_LABEL_ARRAY = 1024;
+
+ public static final int MAX_DELIVERY_FILE_NUM = 128; // 最大投放文件数量
+ public static final int DELIVERY_FILE_URL_LEN = 128; // 投放文件的URL长度
+
+ public static final int MAX_COMMON_STRING_512 = 512; // 通用字符串长度512
+ public static final int MAX_RFIDELETAG_CARDID_LEN = 16; // RFID 电子车牌标签信息中卡号最大长度
+ public static final int MAX_RFIDELETAG_DATE_LEN = 16; // RFID 电子车牌标签信息中时间最大长度
+ public static final int MAX_REPEATENTERROUTE_NUM = 12; //反潜路径个数
+ public static final int ECK_SCREEN_NUM_MAX = 8; // 智能停车系统出入口机最大屏数量
+ public static final int MAX_CAR_CANDIDATE_NUM = 50;
+ public static final int MAX_REGISTER_NUM = 10; // 主动注册配置最大个数
+ public static final int MAX_SERVER_NUM = 10; // 服务器最大个数
+ public static final int NET_COUNTRY_LENGTH = 3; // 国家缩写长度
+ public static final int MAX_ATTENDANCE_USERNAME_LEN = 36; // 考勤用户名长度
+ public static final int NET_MAX_FINGER_PRINT = 10; // 信息最大个数
+ public static final int MAX_EVENT_ID_LEN = 52; // 国标事件ID最大长度
+ public static final int MAX_HUMANTRAIT_EVENT_LEN = 36; // 补充人体特征上报事件最大长度
+ public static final int MAX_EXIT_MAN_NUM = 32; // 最大支持的离开人员数量
+ public static final int NET_MAX_CALLTYPE_LIST_NUM = 16; // 呼叫类型查询条件列表最大个数
+ public static final int NET_MAX_ENDSTATE_LIST_NUM = 16; // 最终状态查询条件列表最大个数
+ public static final int MAX_CHAN_NUM = 256; // 最大通道数上限
+ public static final int AV_CFG_Max_ChannelRule = 32; // 通道存储规则最大长度, 仅通道部分
+ public static final int MAX_DEV_NUM = 16; // 最大设备上限
+ public static final int CFG_MAX_CHANNEL_NAME_LEN = 256; // 通道名称最大长度
+ public static final int HDBJ_MAX_OBJECTS_NUM = 200; // 检测到目标的最大个数
+ public static final int NET_MAX_RAID_NUM = 16; // Raid最大个数
+ public static final int MAX_PLATE_NUMBER_LEN = 64; // 最大车牌号码长度
+ public static final int MAX_MASTER_OF_CAR_LEN = 32; // 最大车主姓名长度
+ public static final int MAX_USER_TYPE_LEN = 32; // 最大用户类型长度
+ public static final int MAX_SUB_USER_TYPE_LEN = 64; // 最大用户子类型长度
+ public static final int MAX_REMARKS_LEN = 64; // 最大备注信息长度
+ public static final int MAX_PARK_CHARGE_LEN = 32; // 最大停车费长度
+ public static final int MAX_CUSTOM_LEN = 128; // 最大自定义显示长度
+ public static final int MAX_RESOURCE_LEN = 64; // 最大资源文件长度
+ public static final int MAX_PARKINGLOCK_STATE_NUM = 6; // 最大车位锁状态个数
+ public static final int MAX_SMALLPIC_NUM = 32; // 最大小图张数
+ public static final int MAX_PASSWORD_LEN = 64; // 最大密码长度
+ public static final int MAX_OSD_SUMMARY_LEN = 256; // osd叠加内容最大长度
+ public static final int MAX_OSD_TITLE_LEN = 128; // osd叠加标题最大长度
+ public static final int MAX_CUSTOMCASE_NUM = 16; // 自定义案件最大个数
+ public static final int MAX_CARGO_CHANNEL_NUM = 8; // 最大货物通道数
+ public static final int MAX_MAN_LIST_COUNT = 64; // 人员列表最大数量
+ public static final int MAX_SNAP_SHOT_NUM = 8; // 最大抓拍张数
+ public static final int MAX_TEMPERATUREEX_POINT_NUM = 12; //最大监测温度点的个数
+
+ // 矩阵子卡类型, 多种类型可以组合
+ public static final int NET_MATRIX_CARD_MAIN = 0x10000000; // 主卡
+ public static final int NET_MATRIX_CARD_INPUT = 0x00000001; // 输入卡
+ public static final int NET_MATRIX_CARD_OUTPUT = 0x00000002; // 输出卡
+ public static final int NET_MATRIX_CARD_ENCODE = 0x00000004; // 编码卡
+ public static final int NET_MATRIX_CARD_DECODE = 0x00000008; // 解码卡
+ public static final int NET_MATRIX_CARD_CASCADE = 0x00000010; // 级联卡
+ public static final int NET_MATRIX_CARD_INTELLIGENT = 0x00000020; // 智能卡
+ public static final int NET_MATRIX_CARD_ALARM = 0x00000040; // 报警卡
+ public static final int NET_MATRIX_CARD_RAID = 0x00000080; // 硬Raid卡
+ public static final int NET_MATRIX_CARD_NET_DECODE = 0x00000100; // 网络解码卡
+
+ public static final int RESERVED_TYPE_FOR_INTEL_BOX = 0x00000001;
+ public static final int RESERVED_TYPE_FOR_COMMON = 0x00000010;
+ public static final int RESERVED_TYPE_FOR_PATH = 0x00000100;
+
+ public static final int NET_DATA_CALL_BACK_VALUE = 1000; // 配合EM_REAL_DATA_TYPE使用,码流转换后的数据回调函数(fRealDataCallBackEx,fDataCallBack)中的参数dwDataType的值
+ // 为所转换的码流类型加上NET_DATA_CALL_BACK_VALUE.
+ // 即,dwDataType = NET_DATA_CALL_BACK_VALUE + emDataType
+ // 在回调函数中接受码流转换后的数据,必须要先判断 dwDataType 的值是否为 NET_DATA_CALL_BACK_VALUE和emDataType之和
+ // 另,EM_REAL_DATA_TYPE_PRIVATE不用做此判断
+
+ public static final int DH_MAX_PERSON_INFO_LEN = 64; // 人员扩展信息最大长度
+
+ public static final int ARM_DISARM_ZONE_MAX = 256; // 防区最大个数
+ public static final int MAX_AREA_NUMBER = 8; //最大area数量
+ public static final int MAX_AREA_NUMBER_EX = 64; //最大area数量扩展
+
+ /**************************录像二次分析接口*************************/
+ public static final int MAX_SECONDARY_ANALYSE_TASK_NUM = 32; // 二次分析任务支持的最大个数
+ public static final int MAX_SECONDARY_ANALYSE_RULE_NUM = 8; // 二次分析规则支持的最大个数
+ public static final int MAX_SECONDARY_ANALYSE_EVENT_NUM = 8; // 二次分析事件支持的最大个数
+
+ /************************************************************************
+ ** 结构体
+ ***********************************************************************/
+ // 设置登入时的相关参数
+ public static class NET_PARAM extends SdkStructure
+ {
+ public int nWaittime; // 等待超时时间(毫秒为单位),为0默认5000ms
+ public int nConnectTime; // 连接超时时间(毫秒为单位),为0默认1500ms
+ public int nConnectTryNum; // 连接尝试次数,为0默认1次
+ public int nSubConnectSpaceTime; // 子连接之间的等待时间(毫秒为单位),为0默认10ms
+ public int nGetDevInfoTime; // 获取设备信息超时时间,为0默认1000ms
+ public int nConnectBufSize; // 每个连接接收数据缓冲大小(字节为单位),为0默认250*1024
+ public int nGetConnInfoTime; // 获取子连接信息超时时间(毫秒为单位),为0默认1000ms
+ public int nSearchRecordTime; // 按时间查询录像文件的超时时间(毫秒为单位),为0默认为3000ms
+ public int nsubDisconnetTime; // 检测子链接断线等待时间(毫秒为单位),为0默认为60000ms
+ public byte byNetType; // 网络类型, 0-LAN, 1-WAN
+ public byte byPlaybackBufSize; // 回放数据接收缓冲大小(M为单位),为0默认为4M
+ public byte bDetectDisconnTime; // 心跳检测断线时间(单位为秒),为0默认为60s,最小时间为2s
+ public byte bKeepLifeInterval; // 心跳包发送间隔(单位为秒),为0默认为10s,最小间隔为2s
+ public int nPicBufSize; // 实时图片接收缓冲大小(字节为单位),为0默认为2*1024*1024
+ public byte[] bReserved = new byte[4]; // 保留字段字段
+ }
+
+ // 设备设备参数
+ public static class NET_DEVICE_SEARCH_PARAM extends SdkStructure {
+
+ public int dwSize; // 结构体大小
+ /**
+ * 是否使用默认配置,默认为TRUE
+ */
+ public int bUseDefault;
+ /**
+ * 广播本地端口, 默认5050, 值为0时使用最近一次配置
+ */
+ public short wBroadcastLocalPort;
+ /**
+ * 广播远程端口, 默认5050, 值为0时使用最近一次配置
+ */
+ public short wBroadcastRemotePort;
+ /**
+ * 组播远程端口, 默认37810, 值为0时使用最近一次配置
+ */
+ public short wMulticastRemotePort;
+ /**
+ * 组播修改设备时是否只支持组播回复,默认FALSE表示单播或组播回复
+ */
+ public int bMulticastModifyRespond;
+ /**
+ * 组播本地端口, 默认37810, 值为0时使用最近一次配置
+ */
+ public short wMulticastLocalPort;
+ /**
+ * 端口不可用时自动更新端口次数,默认50次,范围[0-65534]
+ */
+ public int iAutoUpdatePortTimes;
+ /**
+ * AOL 组播远程端口, 默认8087, 值为0时使用最近一次配置
+ */
+ public short wAOLMulticastRemotePort;
+ /**
+ * AOL 组播本地端口, 默认37811, 值为0时使用最近一次配置
+ */
+ public short wAOLMulticastLocalPort;
+
+ public NET_DEVICE_SEARCH_PARAM() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 设备信息
+ public static class NET_DEVICEINFO extends SdkStructure {
+ public byte[] sSerialNumber = new byte[NET_SERIALNO_LEN]; // 序列号
+ public byte byAlarmInPortNum; // DVR报警输入个数
+ public byte byAlarmOutPortNum; // DVR报警输出个数
+ public byte byDiskNum; // DVR硬盘个数
+ public byte byDVRType; // DVR类型, 见枚举NET_DEV_DEVICE_TYPE
+ public union union = new union();
+ public static class union extends Union {
+ public byte byChanNum; // DVR通道个数
+ public byte byLeftLogTimes; // 当登陆失败原因为密码错误时,通过此参数通知用户,剩余登陆次数,为0时表示此参数无效
+ }
+ }
+
+ // 设备信息扩展///////////////////////////////////////////////////
+ public static class NET_DEVICEINFO_Ex extends SdkStructure {
+ public byte[] sSerialNumber = new byte[NET_SERIALNO_LEN]; // 序列号
+ public int byAlarmInPortNum; // DVR报警输入个数
+ public int byAlarmOutPortNum; // DVR报警输出个数
+ public int byDiskNum; // DVR硬盘个数
+ public int byDVRType; // DVR类型,见枚举NET_DEVICE_TYPE
+ public int byChanNum; // DVR通道个数
+ public byte byLimitLoginTime; // 在线超时时间,为0表示不限制登陆,非0表示限制的分钟数
+ public byte byLeftLogTimes; // 当登陆失败原因为密码错误时,通过此参数通知用户,剩余登陆次数,为0时表示此参数无效
+ public byte[] bReserved = new byte[2]; // 保留字节,字节对齐
+ public int byLockLeftTime; // 当登陆失败,用户解锁剩余时间(秒数), -1表示设备未设置该参数
+ public byte[] Reserved = new byte[24]; // 保留
+ }
+
+ // 对应接口 CLIENT_LoginEx2/////////////////////////////////////////////////////////
+ public static class EM_LOGIN_SPAC_CAP_TYPE extends SdkStructure {
+ public static final int EM_LOGIN_SPEC_CAP_TCP = 0; // TCP登陆, 默认方式
+ public static final int EM_LOGIN_SPEC_CAP_ANY = 1; // 无条件登陆
+ public static final int EM_LOGIN_SPEC_CAP_SERVER_CONN = 2; // 主动注册的登入
+ public static final int EM_LOGIN_SPEC_CAP_MULTICAST = 3; // 组播登陆
+ public static final int EM_LOGIN_SPEC_CAP_UDP = 4; // UDP方式下的登入
+ public static final int EM_LOGIN_SPEC_CAP_MAIN_CONN_ONLY = 6; // 只建主连接下的登入
+ public static final int EM_LOGIN_SPEC_CAP_SSL = 7; // SSL加密方式登陆
+
+ public static final int EM_LOGIN_SPEC_CAP_INTELLIGENT_BOX = 9; // 登录智能盒远程设备
+ public static final int EM_LOGIN_SPEC_CAP_NO_CONFIG = 10; // 登录设备后不做取配置操作
+ public static final int EM_LOGIN_SPEC_CAP_U_LOGIN = 11; // 用U盾设备的登入
+ public static final int EM_LOGIN_SPEC_CAP_LDAP = 12; // LDAP方式登录
+ public static final int EM_LOGIN_SPEC_CAP_AD = 13; // AD(ActiveDirectory)登录方式
+ public static final int EM_LOGIN_SPEC_CAP_RADIUS = 14; // Radius 登录方式
+ public static final int EM_LOGIN_SPEC_CAP_SOCKET_5 = 15; // Socks5登陆方式
+ public static final int EM_LOGIN_SPEC_CAP_CLOUD = 16; // 云登陆方式
+ public static final int EM_LOGIN_SPEC_CAP_AUTH_TWICE = 17; // 二次鉴权登陆方式
+ public static final int EM_LOGIN_SPEC_CAP_TS = 18; // TS码流客户端登陆方式
+ public static final int EM_LOGIN_SPEC_CAP_P2P = 19; // 为P2P登陆方式
+ public static final int EM_LOGIN_SPEC_CAP_MOBILE = 20; // 手机客户端登陆
+ }
+
+ // 时间
+ public static class NET_TIME extends SdkStructure {
+ public int dwYear; // 年
+ public int dwMonth; // 月
+ public int dwDay; // 日
+ public int dwHour; // 时
+ public int dwMinute; // 分
+ public int dwSecond; // 秒
+
+ public NET_TIME() {
+ this.dwYear = 0;
+ this.dwMonth = 0;
+ this.dwDay = 0;
+ this.dwHour = 0;
+ this.dwMinute = 0;
+ this.dwSecond = 0;
+ }
+
+ public void setTime(int year, int month, int day, int hour, int minute, int second) {
+ this.dwYear = year;
+ this.dwMonth = month;
+ this.dwDay = day;
+ this.dwHour = hour;
+ this.dwMinute = minute;
+ this.dwSecond = second;
+ }
+
+ public NET_TIME(NET_TIME other) {
+ this.dwYear = other.dwYear;
+ this.dwMonth = other.dwMonth;
+ this.dwDay = other.dwDay;
+ this.dwHour = other.dwHour;
+ this.dwMinute = other.dwMinute;
+ this.dwSecond = other.dwSecond;
+ }
+
+ //用于列表中显示
+ public String toStringTime() {
+ return String.format("%02d/%02d/%02d %02d:%02d:%02d", dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond);
+ }
+
+ public String toStringTimeEx() {
+ return String.format("%02d-%02d-%02d %02d:%02d:%02d", dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond);
+ }
+
+ public String toString() {
+ return String.format("%02d%02d%02d%02d%02d%02d", dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond);
+ }
+ }
+
+ public static class NET_TIME_EX extends SdkStructure
+ {
+ public int dwYear; // 年
+ public int dwMonth; // 月
+ public int dwDay; // 日
+ public int dwHour; // 时
+ public int dwMinute; // 分
+ public int dwSecond; // 秒
+ public int dwMillisecond; // 毫秒
+ public int dwUTC; // utc时间(获取时0表示无效,非0有效 下发无效)
+ public int[] dwReserved = new int[1]; // 保留字段
+
+ public void setTime(int year, int month, int day, int hour, int minute, int second) {
+ this.dwYear = year;
+ this.dwMonth = month;
+ this.dwDay = day;
+ this.dwHour = hour;
+ this.dwMinute = minute;
+ this.dwSecond = second;
+ this.dwMillisecond = 0;
+ }
+
+ public String toString() {
+ return dwYear + "/" + dwMonth + "/" + dwDay + " " + dwHour + ":" + dwMinute + ":" + dwSecond;
+ }
+
+ //用于列表中显示
+ public String toStringTime()
+ {
+ return String.format("%02d/%02d/%02d %02d:%02d:%02d", dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond);
+ }
+
+ //存储文件名使用
+ public String toStringTitle()
+ {
+ return String.format("Time_%02d%02d%02d_%02d%02d%02d", dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond);
+ }
+ }
+
+ // 区域
+ public static class NET_CFG_Rect extends SdkStructure
+ {
+ public int nStructSize;
+ public int nLeft;
+ public int nTop;
+ public int nRight;
+ public int nBottom;
+
+ public NET_CFG_Rect()
+ {
+ this.nStructSize = this.size();
+ }
+ }
+
+ // 颜色
+ public static class NET_CFG_Color extends SdkStructure
+ {
+ public int nStructSize;
+ public int nRed; // 红
+ public int nGreen; // 绿
+ public int nBlue; // 蓝
+ public int nAlpha; // 透明
+
+ public NET_CFG_Color()
+ {
+ this.nStructSize = this.size();
+ }
+ }
+
+ // 编码物件-通道标题
+ public static class NET_CFG_VideoWidgetChannelTitle extends SdkStructure
+ {
+ public int nStructSize;
+ public int bEncodeBlend; // 叠加到主码流, 类型为BOOL, 取值0或者1
+ public int bEncodeBlendExtra1; // 叠加到辅码流1, 类型为BOOL, 取值0或者1
+ public int bEncodeBlendExtra2; // 叠加到辅码流2, 类型为BOOL, 取值0或者1
+ public int bEncodeBlendExtra3; // 叠加到辅码流3, 类型为BOOL, 取值0或者1
+ public int bEncodeBlendSnapshot; // 叠加到抓图, 类型为BOOL, 取值0或者1
+ public NET_CFG_Color stuFrontColor = new NET_CFG_Color(); // 前景色
+ public NET_CFG_Color stuBackColor = new NET_CFG_Color(); // 背景色
+ public NET_CFG_Rect stuRect = new NET_CFG_Rect(); // 区域, 坐标取值0~8191, 仅使用left和top值, 点(left,top)应和(right,bottom)设置成同样的点
+ public int bPreviewBlend; // 叠加到预览视频, 类型为BOOL, 取值0或者1
+
+ public NET_CFG_VideoWidgetChannelTitle()
+ {
+ this.nStructSize = this.size();
+ }
+ }
+
+ // 编码物件-时间标题
+ public static class NET_CFG_VideoWidgetTimeTitle extends SdkStructure
+ {
+ public int nStructSize;
+ public int bEncodeBlend; // 叠加到主码流, 类型为BOOL, 取值0或者1
+ public int bEncodeBlendExtra1; // 叠加到辅码流1, 类型为BOOL, 取值0或者1
+ public int bEncodeBlendExtra2; // 叠加到辅码流2, 类型为BOOL, 取值0或者1
+ public int bEncodeBlendExtra3; // 叠加到辅码流3, 类型为BOOL, 取值0或者1
+ public int bEncodeBlendSnapshot; // 叠加到抓图, 类型为BOOL, 取值0或者1
+ public NET_CFG_Color stuFrontColor = new NET_CFG_Color(); // 前景色
+ public NET_CFG_Color stuBackColor = new NET_CFG_Color(); // 背景色
+ public NET_CFG_Rect stuRect = new NET_CFG_Rect(); // 区域, 坐标取值0~8191, 仅使用left和top值, 点(left,top)应和(right,bottom)设置成同样的点
+ public int bShowWeek; // 是否显示星期, 类型为BOOL, 取值0或者1
+ public int bPreviewBlend; // 叠加到预览视频, 类型为BOOL, 取值0或者1
+
+ public NET_CFG_VideoWidgetTimeTitle()
+ {
+ this.nStructSize = this.size();
+ }
+ }
+
+ // 编码物件-区域覆盖配置
+ public static class NET_CFG_VideoWidgetCover extends SdkStructure
+ {
+ public int nStructSize;
+ public int bEncodeBlend; // 叠加到主码流, 类型为BOOL, 取值0或者1
+ public int bEncodeBlendExtra1; // 叠加到辅码流1, 类型为BOOL, 取值0或者1
+ public int bEncodeBlendExtra2; // 叠加到辅码流2, 类型为BOOL, 取值0或者1
+ public int bEncodeBlendExtra3; // 叠加到辅码流3, 类型为BOOL, 取值0或者1
+ public int bEncodeBlendSnapshot; // 叠加到抓图, 类型为BOOL, 取值0或者1
+ public NET_CFG_Color stuFrontColor = new NET_CFG_Color(); // 前景色
+ public NET_CFG_Color stuBackColor = new NET_CFG_Color(); // 背景色
+ public NET_CFG_Rect stuRect = new NET_CFG_Rect(); // 区域, 坐标取值0~8191
+ public int bPreviewBlend; // 叠加到预览视频, 类型为BOOL, 取值0或者1
+
+ public NET_CFG_VideoWidgetCover()
+ {
+ this.nStructSize = this.size();
+ }
+ }
+
+ public class EM_TITLE_TEXT_ALIGN
+ {
+ public static final int EM_TEXT_ALIGN_INVALID = 0; // 无效的对齐方式
+ public static final int EM_TEXT_ALIGN_LEFT = 1; // 左对齐
+ public static final int EM_TEXT_ALIGN_XCENTER = 2; // X坐标中对齐
+ public static final int EM_TEXT_ALIGN_YCENTER = 3; // Y坐标中对齐
+ public static final int EM_TEXT_ALIGN_CENTER = 4; // 居中
+ public static final int EM_TEXT_ALIGN_RIGHT = 5; // 右对齐
+ public static final int EM_TEXT_ALIGN_TOP = 6; // 按照顶部对齐
+ public static final int EM_TEXT_ALIGN_BOTTOM = 7; // 按照底部对齐
+ public static final int EM_TEXT_ALIGN_LEFTTOP = 8; // 按照左上角对齐
+ public static final int EM_TEXT_ALIGN_CHANGELINE = 9; // 换行对齐
+ }
+
+ // 编码物件-自定义标题
+ public static class NET_CFG_VideoWidgetCustomTitle extends SdkStructure
+ {
+ public int nStructSize;
+ public int bEncodeBlend; // 叠加到主码流, 类型为BOOL, 取值0或者1
+ public int bEncodeBlendExtra1; // 叠加到辅码流1, 类型为BOOL, 取值0或者1
+ public int bEncodeBlendExtra2; // 叠加到辅码流2, 类型为BOOL, 取值0或者1
+ public int bEncodeBlendExtra3; // 叠加到辅码流3, 类型为BOOL, 取值0或者1
+ public int bEncodeBlendSnapshot; // 叠加到抓图, 类型为BOOL, 取值0或者1
+ public NET_CFG_Color stuFrontColor = new NET_CFG_Color(); // 前景色
+ public NET_CFG_Color stuBackColor = new NET_CFG_Color(); // 背景色
+ public NET_CFG_Rect stuRect = new NET_CFG_Rect(); // 区域, 坐标取值0~8191, 仅使用left和top值, 点(left,top)应和(right,bottom)设置成同样的点
+ public byte[] szText = new byte[NET_CFG_Custom_Title_Len];// 标题内容
+ public int bPreviewBlend; // 叠加到预览视频, 类型为BOOL, 取值0或者1
+ public byte[] szType = new byte[NET_CFG_Custom_TitleType_Len];// 标题类型 "Rtinfo" 实时刻录信息 "Custom" 自定义叠加、温湿度叠加 "Title" :片头信息 "Check" 校验码
+ // 地理信息 "Geography" ATM卡号信息 "ATMCardInfo" 摄像机编号 "CameraID"
+ public int emTextAlign; // 标题对齐方式 (参见EM_TITLE_TEXT_ALIGN)
+ public int bUpdate; // 是否需要设备端更新叠加内容 true:更新 false:不更新, 类型为BOOL, 取值0或者1
+
+ public NET_CFG_VideoWidgetCustomTitle()
+ {
+ this.nStructSize = this.size();
+ }
+ }
+
+ // 编码物件-叠加传感器信息-叠加内容描述
+ public static class NET_CFG_VideoWidgetSensorInfo_Description extends SdkStructure
+ {
+ public int nStructSize;
+ public int nSensorID; // 需要描述的传感器的ID(即模拟量报警通道号)
+ public byte[] szDevID = new byte[CFG_COMMON_STRING_32]; // 设备ID
+ public byte[] szPointID = new byte[CFG_COMMON_STRING_32];// 测点ID
+ public byte[] szText = new byte[CFG_COMMON_STRING_256]; // 需要叠加的内容
+ public NET_CFG_VideoWidgetSensorInfo_Description()
+ {
+ this.nStructSize = this.size();
+ }
+ }
+
+ // 编码物件-叠加传感器信息
+ public static class NET_CFG_VideoWidgetSensorInfo extends SdkStructure
+ {
+ public int nStructSize;
+ public int bPreviewBlend; // 叠加到预览视频, 类型为BOOL, 取值0或者1
+ public int bEncodeBlend; // 叠加到主码流视频编码, 类型为BOOL, 取值0或者1
+ public NET_CFG_Rect stuRect = new NET_CFG_Rect(); // 区域, 坐标取值0~8191
+ public int nDescriptionNum; // 叠加区域描述数目
+ public NET_CFG_VideoWidgetSensorInfo_Description[] stuDescription = (NET_CFG_VideoWidgetSensorInfo_Description[])new NET_CFG_VideoWidgetSensorInfo_Description().toArray(NET_CFG_Max_Description_Num);// 叠加区域描述信息
+
+ public NET_CFG_VideoWidgetSensorInfo()
+ {
+ this.nStructSize = this.size();
+ }
+ }
+
+ // 视频编码物件配置
+ public static class NET_CFG_VideoWidget extends SdkStructure
+ {
+ public int nStructSize;
+ public NET_CFG_VideoWidgetChannelTitle stuChannelTitle = new NET_CFG_VideoWidgetChannelTitle(); // 通道标题
+ public NET_CFG_VideoWidgetTimeTitle stuTimeTitle = new NET_CFG_VideoWidgetTimeTitle(); // 时间标题
+ public int nConverNum; // 区域覆盖数量
+ public NET_CFG_VideoWidgetCover[] stuCovers = new NET_CFG_VideoWidgetCover[NET_CFG_Max_Video_Widget_Cover]; // 覆盖区域
+ public int nCustomTitleNum; // 自定义标题数量
+ public NET_CFG_VideoWidgetCustomTitle[] stuCustomTitle = new NET_CFG_VideoWidgetCustomTitle[NET_CFG_Max_Video_Widget_Custom_Title]; // 自定义标题
+ public int nSensorInfo; // 传感器信息叠加区域数目
+ public NET_CFG_VideoWidgetSensorInfo[] stuSensorInfo = new NET_CFG_VideoWidgetSensorInfo[NET_CFG_Max_Video_Widget_Sensor_Info]; // 传感器信息叠加区域信息
+ public double fFontSizeScale; //叠加字体大小放大比例
+ //当fFontSizeScale≠0时,nFontSize不起作用
+ //当fFontSizeScale=0时,nFontSize起作用
+ //设备默认fFontSizeScale=1.0
+ //如果需要修改倍数,修改该值
+ //如果需要按照像素设置,则置该值为0,nFontSize的值生效
+ public int nFontSize; //叠加到主码流上的全局字体大小,单位 px.
+ //和fFontSizeScale共同作用
+ public int nFontSizeExtra1; //叠加到辅码流1上的全局字体大小,单位 px
+ public int nFontSizeExtra2; //叠加到辅码流2上的全局字体大小,单位 px
+ public int nFontSizeExtra3; //叠加到辅码流3上的全局字体大小,单位 px
+ public int nFontSizeSnapshot; //叠加到抓图流上的全局字体大小, 单位 px
+ public int nFontSizeMergeSnapshot; //叠加到抓图流上合成图片的字体大小,单位 px
+ public int emFontSolutionSnapshot; //叠加到抓图流上的字体方案 // 0 未知 ; 1- 默认字体 "default-font" 2-楷体 "simkai" 3- 宋体"simsun"
+ public NET_CFG_VideoWidgetCover stuGPSTitle; //GPS标题显示, 车载设备用
+ public NET_CFG_VideoWidgetCover stuCarNoTitle; //车牌标题显示, 车载设备用
+
+ public byte[] szChannelName = new byte[256]; // 通道名称(只为Onvif使用)
+
+ public NET_CFG_VideoWidget()
+ {
+ this.nStructSize = this.size();
+ for (int i = 0; i < stuCustomTitle.length; i++) {
+ stuCustomTitle[i] = new NET_CFG_VideoWidgetCustomTitle();
+ }
+
+ for (int i = 0; i < stuCovers.length; i++) {
+ stuCovers[i] = new NET_CFG_VideoWidgetCover();
+ }
+
+ for (int i = 0; i < stuSensorInfo.length; i++) {
+ stuSensorInfo[i] = new NET_CFG_VideoWidgetSensorInfo();
+ }
+ }
+ }
+
+ // 报警事件类型 NET_EVENT_VIDEOABNORMALDETECTION 对应的数据描述信息
+ public static class ALARM_VIDEOABNORMAL_DETECTION_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannelID; // 通道号
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public int nType; // 检测类型,0-视频丢失, 1-视频遮挡, 2-画面冻结, 3-过亮, 4-过暗, 5-场景变化
+ // 6-条纹检测 , 7-噪声检测 , 8-偏色检测 , 9-视频模糊检测 , 10-对比度异常检测
+ // 11-视频运动, 12-视频闪烁, 13-视频颜色, 14-虚焦检测, 15-过曝检测
+ public int nValue; // 检测值,值越高表示视频质量越差, GB30147定义
+ public int nOccurrenceCount; // 规则被触发生次数
+
+ public ALARM_VIDEOABNORMAL_DETECTION_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 停车发卡刷卡类型
+ public static class NET_PARKING_CARD_TYPE extends SdkStructure
+ {
+ public static final int NET_PARKING_CARD_TYPE_UNKNOWN = 0;
+ public static final int NET_PARKING_CARD_TYPE_SEND = 1; // 发卡
+ public static final int NET_PARKING_CARD_TYPE_DETECT = 2; // 刷卡
+ }
+
+ // 报警事件类型 NET_ALARM_PARKING_CARD (停车刷卡事件)对应的数据描述信息
+ public static class ALARM_PARKING_CARD extends SdkStructure {
+ public int dwSize;
+ public int emType; // 类型, 参考 NET_PARKING_CARD_TYPE
+ public int dwCardNo; // 卡号
+ public byte[] szPlate = new byte[NET_COMMON_STRING_16]; // 车牌
+
+ public ALARM_PARKING_CARD() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 报警事件类型 NET_ALARM_NEW_FILE 对应的数据描述信息
+ public static class ALARM_NEW_FILE_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannel; // 抓图通道号
+ public int nEventID; // 事件ID
+ public int dwEvent; // 事件类型
+ public int FileSize; // 文件大小,单位是字节
+ public int nIndex; // 事件源通道
+ public int dwStorPoint; // 存储点
+ public byte[] szFileName = new byte[128]; // 文件名
+
+ public ALARM_NEW_FILE_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 人数越上限类型
+ public static class EM_UPPER_LIMIT_TYPE extends SdkStructure
+ {
+ public static final int EM_UPPER_LIMIT_TYPE_UNKNOWN = 0;
+ public static final int EM_UPPER_LIMIT_TYPE_ENTER_OVER = 1; // 进入越上限
+ public static final int EM_UPPER_LIMIT_TYPE_EXIT_OVER = 2; // 出来越上限
+ public static final int EM_UPPER_LIMIT_TYPE_INSIDE_OVER = 3; // 内部越上限
+ public static final int EM_UPPER_LIMIT_TYPE_PASS_OVER = 4; // 经过越上限
+ }
+
+
+ // 事件类型 NET_ALARM_HUMAM_NUMBER_STATISTIC (人数量/客流量统计事件NumberStat对应的数据描述信息)
+ public static class ALARM_HUMAN_NUMBER_STATISTIC_INFO extends SdkStructure
+ {
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventAction; // 事件动作,0-事件持续, 1-表示事件开始, 2-表示事件结束;
+ public int nNumber; // 区域内物体的个数
+ public int nEnteredNumber; // 进入区域或者出入口内的物体个数
+ public int nExitedNumber; // 出来区域或者出入口内的物体个数
+ public int emUpperLimitType; // 人数越上限类型,参见EM_UPPER_LIMIT_TYPE定义
+ public int nChannelID; // 通道号
+ public int nPassedNumber; // 经过区域物体的个数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] reserved = new byte[504]; // 预留
+ }
+
+ /////////////////////////////////智能支持/////////////////////////////////
+ //物体对应图片文件信息,对应DH_PIC_INFO
+ public static class NET_PIC_INFO extends SdkStructure
+ {
+ public int dwOffSet; // 文件在二进制数据块中的偏移位置,单位:字节
+ public int dwFileLenth; // 文件大小,单位:字节
+ public short wWidth; // 图片宽度,单位:像素
+ public short wHeight; // 图片高度,单位:像素
+ public Pointer pszFilePath; // 鉴于历史原因,该成员只在事件上报时有效, char *
+ // 文件路径
+ // 用户使用该字段时需要自行申请空间进行拷贝保存
+ public byte bIsDetected; // 图片是否算法检测出来的检测过的提交识别服务器时,
+ // 则不需要再时检测定位抠图,1:检测过的,0:没有检测过
+ public byte[] bReserved = new byte[2]; // 预留字节数
+ public byte byQulityScore; // 人脸抓拍质量分数, 0-100
+ public int nFilePathLen; // 文件路径长度 既pszFilePath 用户申请的大小
+ public NET_POINT stuPoint; // 小图左上角在大图的位置,使用绝对坐标系
+ public int nIndexInData; // 在上传图片数据中的图片序号
+ public NET_PIC_INFO() {
+ }
+ }
+
+ // 人员类型
+ public static class EM_PERSON_TYPE extends SdkStructure
+ {
+ public static final int PERSON_TYPE_UNKNOWN = 0;
+ public static final int PERSON_TYPE_NORMAL = 1; //普通人员
+ public static final int PERSON_TYPE_SUSPICION = 2; //
+ }
+
+ // 证件类型
+ public static class EM_CERTIFICATE_TYPE extends SdkStructure
+ {
+ public static final int CERTIFICATE_TYPE_UNKNOWN = 0;
+ public static final int CERTIFICATE_TYPE_IC = 1; //证件
+ public static final int CERTIFICATE_TYPE_PASSPORT = 2; //护照
+ public static final int CERTIFICATE_TYPE_OUTERGUARD = 3; //军官证
+ public static final int CERTIFICATE_TYPE_STUDENT = 4; //学生证
+ public static final int CERTIFICATE_TYPE_POLICE = 5; //警官证
+ public static final int CERTIFICATE_TYPE_LAWYER = 6; //律师
+ }
+
+ //人员信息
+ public static class FACERECOGNITION_PERSON_INFO extends SdkStructure
+ {
+ public byte[] szPersonName = new byte[NET_MAX_NAME_LEN]; // 姓名,此参数作废
+ public short wYear; // 出生年,作为查询条件时,此参数填0,则表示此参数无效
+ public byte byMonth; // 出生月,作为查询条件时,此参数填0,则表示此参数无效
+ public byte byDay; // 出生日,作为查询条件时,此参数填0,则表示此参数无效
+ public byte[] szID = new byte[NET_MAX_PERSON_ID_LEN]; // 人员唯一标示(证件号码,工号,或其他编号)
+ public byte bImportantRank; // 人员重要等级,1~10,数值越高越重要,作为查询条件时,此参数填0,则表示此参数无效
+ public byte bySex; // 性别,1-男,2-女,作为查询条件时,此参数填0,则表示此参数无效
+ public short wFacePicNum; // 图片张数
+ public NET_PIC_INFO[] szFacePicInfo = (NET_PIC_INFO[])new NET_PIC_INFO().toArray(NET_MAX_PERSON_IMAGE_NUM);//当前人员对应的图片信息
+ public byte byType; // 人员类型,详见EM_PERSON_TYPE
+ public byte byIDType; // 证件类型,详见EM_CERTIFICATE_TYPE
+ public byte byGlasses; // 是否戴眼镜,0-未知 1-不戴 2-戴
+ public byte byAge; // 年龄,0表示未知
+ public byte[] szProvince = new byte[NET_MAX_PROVINCE_NAME_LEN];// 省份
+ public byte[] szCity = new byte[NET_MAX_CITY_NAME_LEN]; // 城市
+ public byte[] szPersonNameEx = new byte[NET_MAX_PERSON_NAME_LEN];// 姓名,因存在姓名过长,16字节无法存放问题,故增加此参数,
+ public byte[] szUID = new byte[NET_MAX_PERSON_ID_LEN]; // 人员唯一标识符,首次由服务端生成,区别于ID字段
+ // 修改,删除操作时必填
+ public byte[] szCountry = new byte[NET_COUNTRY_LENGTH]; // 国籍,符合ISO3166规范
+ public byte byIsCustomType; // 人员类型是否为自定义: 0 使用Type规定的类型 1 自定义,使用szPersonName字段
+ public Pointer pszComment; // 备注信息, 用户自己申请内存的情况时,
+ // 下方bCommentLen需填写对应的具体长度值,推荐长度 NET_COMMENT_LENGTH
+
+ public Pointer pszGroupID; // 人员所属组ID, 用户自己申请内存的情况时,
+ // 下方bGroupIdLen需填写对应的具体长度值,推荐长度 NET_GROUPID_LENGTH
+
+ public Pointer pszGroupName; // 人员所属组名, 用户自己申请内存的情况时,
+ // 下方bGroupNameLen需填写对应的具体长度值,推荐长度 NET_GROUPNAME_LENGTH
+
+ public Pointer pszFeatureValue; // 人脸特征, 用户自己申请内存的情况时,
+ // 下方bFeatureValueLen需填写对应的具体长度值,推荐长度 NET_FEATUREVALUE_LENGTH
+
+ public byte bGroupIdLen; // pszGroupID的长度
+ public byte bGroupNameLen; // pszGroupName的长度
+ public byte bFeatureValueLen; // pszFeatureValue的长度
+ public byte bCommentLen; // pszComment的长度
+ public int emEmotion; // 表情, 参考 EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE
+
+ public FACERECOGNITION_PERSON_INFO() {
+ }
+ }
+
+ ///////////////////////////////////目标识别模块相关结构体///////////////////////////////////////
+ public static class NET_UID_CHAR extends SdkStructure
+ {
+ public byte[] szUID = new byte[NET_MAX_PERSON_ID_LEN];//UID内容
+ }
+
+ public static class NET_UUID_CHAR extends SdkStructure
+ {
+ public byte[] szUUID = new byte[NET_MAX_PERSON_ID_LEN];//UUID内容
+ }
+
+ //目标识别数据库操作
+ public static class EM_OPERATE_FACERECONGNITIONDB_TYPE
+ {
+ public static final int NET_FACERECONGNITIONDB_UNKOWN = 0;
+ public static final int NET_FACERECONGNITIONDB_ADD = 1; //添加人员信息和人脸样本,如果人员已经存在,图片数据和原来的数据合并
+ public static final int NET_FACERECONGNITIONDB_DELETE = 2; //删除人员信息和人脸样本
+ public static final int NET_FACERECONGNITIONDB_MODIFY = 3; //修改人员信息和人脸样本,人员的UID标识必填
+ public static final int NET_FACERECONGNITIONDB_DELETE_BY_UID = 4; //通过UID删除人员信息和人脸样本
+ }
+
+ //CLIENT_OperateFaceRecognitionDB接口输入参数
+ public static class NET_IN_OPERATE_FACERECONGNITIONDB extends SdkStructure
+ {
+ public int dwSize;
+ public int emOperateType; //操作类型, 取EM_OPERATE_FACERECONGNITIONDB_TYPE中的值
+ public FACERECOGNITION_PERSON_INFO stPersonInfo; //人员信息
+ //emOperateType操作类型为ET_FACERECONGNITIONDB_DELETE_BY_UID时使用,stPeronInfo字段无效
+ public int nUIDNum; //UID个数
+ public Pointer stuUIDs; //人员唯一标识符,首次由服务端生成,区别于ID字段, NET_UID_CHAR[]
+
+ // 图片二进制数据
+ public Pointer pBuffer; //缓冲地址, char *
+ public int nBufferLen; //缓冲数据长度
+
+ public int bUsePersonInfoEx; // 使用人员扩展信息, 1:true 0:false
+ public FACERECOGNITION_PERSON_INFOEX stPersonInfoEx; // 人员信息扩展
+
+
+ //emOperateType操作类型为NET_FACERECONGNITIONDB_DELETE_BY_UUID时使用,stPeronInfo字段无效
+ public int nUUIDNum; //UUID个数
+ public Pointer stuUUIDs; //人员唯一标识符,由平台端下发,区别于UID字段. 由用户申请内存,大小为sizeof(NET_UUID_CHAR)*nUUIDNum
+
+ public NET_IN_OPERATE_FACERECONGNITIONDB()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 错误代码,emOperateType操作类型为ET_FACERECONGNITIONDB_DELETE_BY_UID时使用
+ public static class EM_ERRORCODE_TYPE extends SdkStructure
+ {
+ public static final int EM_ERRORCODE_TYPE_UNKNOWN = -1; // 未知错误
+ public static final int EM_ERRORCODE_TYPE_SUCCESS=0; // 成功
+ public static final int EM_ERRORCODE_TYPE_PERSON_NOT_EXIST=1; // 人员不存在
+ public static final int EM_ERRORCODE_TYPE_DATABASE_ERROR=2; // 数据库操作失败
+ };
+
+ //CLIENT_OperateFaceRecognitionDB接口输出参数
+ public static class NET_OUT_OPERATE_FACERECONGNITIONDB extends SdkStructure
+ {
+ public int dwSize;
+ public byte[] szUID = new byte[NET_MAX_PERSON_ID_LEN]; // 人员唯一标识符, 只有在操作类型为NET_FACERECONGNITIONDB_ADD时有效
+
+ //emOperateType操作类型为ET_FACERECONGNITIONDB_DELETE_BY_UID时使用
+ public int nErrorCodeNum; // 错误码个数
+ public int[] emErrorCodes=new int[512]; // 错误码
+ // emOperateType操作类型为ET_FACERECONGNITIONDB_DELETE_BY_UID时使用
+
+ public NET_OUT_OPERATE_FACERECONGNITIONDB()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ //人脸对比模式
+ public static class EM_FACE_COMPARE_MODE extends SdkStructure
+ {
+ public static final int NET_FACE_COMPARE_MODE_UNKOWN = 0;
+ public static final int NET_FACE_COMPARE_MODE_NORMAL = 1; //正常
+ public static final int NET_FACE_COMPARE_MODE_AREA = 2; //指定人脸区域组合区域
+ public static final int NET_FACE_COMPARE_MODE_AUTO = 3; //智能模式,算法根据人脸各个区域情况自动选取组合
+ }
+
+ //人脸区域
+ public static class EM_FACE_AREA_TYPE extends SdkStructure
+ {
+ public static final int NET_FACE_AREA_TYPE_UNKOWN = 0;
+ public static final int NET_FACE_AREA_TYPE_EYEBROW = 1; //眉毛
+ public static final int NET_FACE_AREA_TYPE_EYE = 2; //眼睛
+ public static final int NET_FACE_AREA_TYPE_NOSE= 3; //鼻子
+ public static final int NET_FACE_AREA_TYPE_MOUTH = 4; //嘴巴
+ public static final int NET_FACE_AREA_TYPE_CHEEK =5; //脸颊
+ }
+
+ public static class NET_FACE_MATCH_OPTIONS extends SdkStructure
+ {
+ public int dwSize;
+ public int nMatchImportant; // 人员重要等级1~10,数值越高越重要,(查询重要等级大于等于此等级的人员), 类型为unsigned int
+ public int emMode; // 人脸比对模式,详见EM_FACE_COMPARE_MODE, 取EM_FACE_COMPARE_MODE中的值
+ public int nAreaNum; // 人脸区域个数
+ public int[] szAreas= new int[MAX_FACE_AREA_NUM]; // 人脸区域组合,emMode为NET_FACE_COMPARE_MODE_AREA时有效, 数组元素取EM_FACE_AREA_TYPE中的值
+ public int nAccuracy; // 识别精度(取值1~10,随着值增大,检测精度提高,检测速度下降。最小值为1表示检测速度优先,最大值为10表示检测精度优先。暂时只对人脸检测有效)
+ public int nSimilarity; // 相似度(必须大于该相识度才报告;百分比表示,1~100)
+ public int nMaxCandidate; // 报告的最大候选个数(根据相似度进行排序,取相似度最大的候选人数报告)
+ public int emQueryMode; // 以图搜图查询模式,详见EM_FINDPIC_QUERY_MODE
+ public int emOrdered; // 以图搜图结果上报排序方式,详见EM_FINDPIC_QUERY_ORDERED
+
+ public NET_FACE_MATCH_OPTIONS()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 以图搜图查询模式
+ public static class EM_FINDPIC_QUERY_MODE extends SdkStructure
+ {
+ public static final int EM_FINDPIC_QUERY_UNKNOWN = 0; // 未知
+ public static final int EM_FINDPIC_QUERY_PASSIVE = 1; // 被动查询
+ public static final int EM_FINDPIC_QUERY_ACTIVE = 2; // 主动推送
+ }
+
+ // 以图搜图结果上报排序方式
+ public static class EM_FINDPIC_QUERY_ORDERED extends SdkStructure
+ {
+ public static final int EM_FINDPIC_QUERY_BY_SIMILARITY = 0; // 按相似度从高到底
+ public static final int EM_FINDPIC_QUERY_BY_TIME_FORWARD = 1; // 按时间正序
+ public static final int EM_FINDPIC_QUERY_BY_TIME_REVERSE = 2; // 按时间倒序
+ }
+
+ //目标识别人脸类型
+ public static class EM_FACERECOGNITION_FACE_TYPE extends SdkStructure
+ {
+ public static final int EM_FACERECOGNITION_FACE_TYPE_UNKOWN = 0;
+ public static final int EM_FACERECOGNITION_FACE_TYPE_ALL = 1; // 所有人脸
+ public static final int EM_FACERECOGNITION_FACE_TYPE_REC_SUCCESS= 2; // 识别成功
+ public static final int EM_FACERECOGNITION_FACE_TYPE_REC_FAIL = 3; // 识别失败
+ }
+
+ public static class NET_FACE_FILTER_CONDTION extends SdkStructure
+ {
+ public int dwSize;
+ public NET_TIME stStartTime; // 开始时间
+ public NET_TIME stEndTime; // 结束时间
+ public byte[] szMachineAddress = new byte[MAX_PATH]; // 地点,支持模糊匹配
+ public int nRangeNum; // 实际数据库个数
+ public byte[] szRange = new byte[MAX_FACE_DB_NUM]; // 待查询数据库类型,详见EM_FACE_DB_TYPE
+ public int emFaceType; // 待查询人脸类型,详见EM_FACERECOGNITION_FACE_TYPE, 取EM_FACERECOGNITION_FACE_TYPE中的值
+ public int nGroupIdNum; // 人员组数
+ public GROUP_ID[] szGroupIdArr = (GROUP_ID[])new GROUP_ID().toArray(MAX_GOURP_NUM); // 人员组ID
+ public NET_TIME stBirthdayRangeStart; // 生日起始时间
+ public NET_TIME stBirthdayRangeEnd; // 生日结束时间
+ public byte[] byAge = new byte[MAX_AGE_NUM]; // 年龄区间,当byAge[0]=0与byAge[1]=0时,表示查询全年龄
+ public byte[] byReserved = new byte[2]; // 保留字节对齐
+ public int[] emEmotion = new int[MAX_EMOTION_NUM]; // 表情条件
+ public int nEmotionNum; // 表情条件的个数
+ public int nUIDNum; // 人员唯一标识数
+ public byte[] szUIDs=new byte[64*32]; // 人员唯一标识列表
+ public int nUUIDNum; // 平台端人员唯一标识数
+ public byte[] szUUIDs=new byte[64*32]; // 平台端人员唯一标识列表,根据faceRecognitionServer.getCaps获取到的能力是否存在字段SupportIDFromServer且值为true时有效
+ public NET_FACE_FILTER_CONDTION()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 人员组ID
+ public static class GROUP_ID extends SdkStructure
+ {
+ public byte[] szGroupId= new byte[NET_COMMON_STRING_64]; //人员组ID
+ }
+
+ //CLIENT_StartFindFaceRecognition接口输入参数
+ public static class NET_IN_STARTFIND_FACERECONGNITION extends SdkStructure
+ {
+ public int dwSize;
+ public int bPersonEnable; // 人员信息查询条件是否有效, BOOL类型,取值0或1
+ public FACERECOGNITION_PERSON_INFO stPerson; // 人员信息查询条件
+ public NET_FACE_MATCH_OPTIONS stMatchOptions; // 人脸匹配选项
+ public NET_FACE_FILTER_CONDTION stFilterInfo; // 查询过滤条件
+
+ // 图片二进制数据
+ public Pointer pBuffer; // 缓冲地址, char *
+ public int nBufferLen; // 缓冲数据长度
+ public int nChannelID; // 通道号
+
+ public int bPersonExEnable; // 人员信息查询条件是否有效, 并使用扩展结构体
+ public FACERECOGNITION_PERSON_INFOEX stPersonInfoEx; // 人员信息扩展
+ public int nSmallPicIDNum; // 小图ID数量
+ public int[] nSmallPicID = new int[MAX_SMALLPIC_NUM]; // 小图ID
+ public int emObjectType; // 搜索的目标类型,参考EM_OBJECT_TYPE
+ public byte[] szChannel = new byte[NET_COMMON_STRING_32]; // 通道号(使用)
+ public NET_IN_STARTFIND_FACERECONGNITION()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ //CLIENT_StartFindFaceRecognition接口输出参数
+ public static class NET_OUT_STARTFIND_FACERECONGNITION extends SdkStructure {
+ public int dwSize;
+ public int nTotalCount; // 返回的符合查询条件的记录个数
+ // -1表示总条数未生成,要推迟获取
+ // 使用CLIENT_AttachFaceFindState接口状态
+ public LLong lFindHandle; // 查询句柄
+ public int nToken; // 获取到的查询令牌
+
+ public NET_OUT_STARTFIND_FACERECONGNITION() {
+ this.dwSize = this.size();
+ }
+ }
+
+ //CLIENT_DoFindFaceRecognition 接口输入参数
+ public static class NET_IN_DOFIND_FACERECONGNITION extends SdkStructure {
+ public int dwSize;
+ public LLong lFindHandle; // 查询句柄
+ public int nBeginNum; // 查询起始序号
+ public int nCount; // 当前想查询的记录条数
+ public int emDataType; // 指定查询结果返回图片的格式. 参考 EM_NEEDED_PIC_RETURN_TYPE
+
+ public NET_IN_DOFIND_FACERECONGNITION()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 查询结果返回图片的格式
+ public static class EM_NEEDED_PIC_RETURN_TYPE extends SdkStructure {
+ public static final int EM_NEEDED_PIC_TYPE_UNKOWN = 0; // 未知类型
+ public static final int EM_NEEDED_PIC_TYPE_HTTP_URL = 1; // 返回图片HTTP链接
+ public static final int EM_NEEDED_PIC_TYPE_BINARY_DATA = 2; // 返回图片二进制数据
+ public static final int EM_NEEDED_PIC_TYPE_HTTP_AND_BINARY = 3; // 返回二进制和HTTP链接
+ }
+
+ //候选人员信息
+ public static class CANDIDATE_INFO extends SdkStructure {
+ public FACERECOGNITION_PERSON_INFO stPersonInfo; // 人员信息
+ // 布控(禁止名单)库,指布控库中人员信息;
+ // 历史库,指历史库中人员信息
+ // 报警库,指布控库的人员信息
+ public byte bySimilarity; // 和查询图片的相似度,百分比表示,1~100
+ public byte byRange; // 人员所属数据库范围,详见EM_FACE_DB_TYPE
+ public byte[] byReserved1 = new byte[2];
+ public NET_TIME stTime; // 当byRange为历史数据库时有效,表示查询人员出现的时间
+ public byte[] szAddress = new byte[MAX_PATH]; // 当byRange为历史数据库时有效,表示查询人员出现的地点
+ public int bIsHit; // BOOL类型,是否有识别结果,指这个检测出的人脸在库中有没有比对结果
+ public NET_PIC_INFO_EX3 stuSceneImage; // 人脸全景图
+ public int nChannelID; // 通道号
+ public byte[] byReserved = new byte[32]; // 保留字节
+
+ public CANDIDATE_INFO() {}
+ }
+
+ // 物体对应图片文件信息(包含图片路径),对应C++头文件DH_PIC_INFO_EX3
+ public static class NET_PIC_INFO_EX3 extends SdkStructure
+ {
+ public int dwOffSet; // 文件在二进制数据块中的偏移位置, 单位:字节
+ public int dwFileLenth; // 文件大小, 单位:字节
+ public short wWidth; // 图片宽度, 单位:像素
+ public short wHeight; // 图片高度, 单位:像素
+ public byte[] szFilePath = new byte[64]; // 文件路径
+ public byte bIsDetected; // 图片是否算法检测出来的检测过的提交识别服务器时,
+ // 则不需要再时检测定位抠图,1:检测过的,0:没有检测过
+ public byte[] bReserved = new byte[11]; // 保留
+ }
+
+ //CLIENT_DoFindFaceRecognition接口输出参数
+ public static class NET_OUT_DOFIND_FACERECONGNITION extends SdkStructure
+ {
+ public int dwSize;
+ public int nCadidateNum; // 实际返回的候选信息结构体个数
+ public CANDIDATE_INFO[] stCadidateInfo = (CANDIDATE_INFO[])new CANDIDATE_INFO().toArray(MAX_FIND_COUNT);//候选信息数组
+
+ // 图片二进制数据
+ public Pointer pBuffer; // 缓冲地址, char *
+ public int nBufferLen; // 缓冲数据长度
+
+ public int bUseCandidatesEx; // 是否使用候选对象扩展结构体,
+ // 若为1-true, 则表示使用stuCandidatesEx, 且stuCandidates无效, 否则相反
+ public int nCadidateExNum; // 实际返回的候选信息结构体个数
+ public CANDIDATE_INFOEX[] stuCandidatesEx = (CANDIDATE_INFOEX[])new CANDIDATE_INFOEX().toArray(MAX_FIND_COUNT); // 当前人脸匹配到的候选对象信息, 实际返回个数同nCandidateNum
+
+ public NET_OUT_DOFIND_FACERECONGNITION()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ /////////////////////////////////智能支持/////////////////////////////////
+ //CLIENT_DetectFace接口输入参数
+ public static class NET_IN_DETECT_FACE extends SdkStructure
+ {
+ public int dwSize;
+ public NET_PIC_INFO stPicInfo;//大图信息
+ // 图片二进制数据
+ public Pointer pBuffer;//缓冲地址, char *
+ public int nBufferLen;//缓冲数据长度
+
+ public NET_IN_DETECT_FACE()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ //CLIENT_DetectFace接口输出参数
+ public static class NET_OUT_DETECT_FACE extends SdkStructure
+ {
+ public int dwSize;
+ public Pointer pPicInfo;//检测出的人脸图片信息,由用户申请空间, NET_PIC_INFO*
+ public int nMaxPicNum;//最大人脸图片信息个数
+ public int nRetPicNum;//实际返回的人脸图片个数
+ // 图片二进制数据
+ public Pointer pBuffer;//缓冲地址,由用户申请空间,存放检测出的人脸图片数据, char *
+ public int nBufferLen;//缓冲数据长度
+
+ public NET_OUT_DETECT_FACE()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 目标识别事件类型
+ public static class EM_FACERECOGNITION_ALARM_TYPE extends SdkStructure
+ {
+ public static final int NET_FACERECOGNITION_ALARM_TYPE_UNKOWN = 0;
+ public static final int NET_FACERECOGNITION_ALARM_TYPE_ALL = 1; //禁止/允许名单
+ public static final int NET_FACERECOGNITION_ALARM_TYPE_BLACKLIST = 2; //禁止名单
+ public static final int NET_FACERECOGNITION_ALARM_TYPE_WHITELIST = 3; //允许名单
+ }
+
+ // NET_FILE_QUERY_FACE 对应的目标识别服务查询参数
+ public static class MEDIAFILE_FACERECOGNITION_PARAM extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+
+ //////// 查询过滤条件
+ public NET_TIME stStartTime; // 开始时间
+ public NET_TIME stEndTime; // 结束时间
+ public byte[] szMachineAddress = new byte[MAX_PATH];//地点,支持模糊匹配
+ public int nAlarmType; // 待查询报警类型,详见 EM_FACERECOGNITION_ALARM_TYPE
+ public int abPersonInfo; // 人员信息是否有效, BOOL类型,取值0或1
+ public FACERECOGNITION_PERSON_INFO stPersonInfo; // 人员信息
+ public int nChannelId; // 通道号
+ public int nGroupIdNum; // 人员组数
+ public GROUP_ID[] szGroupIdArr = (GROUP_ID[])new GROUP_ID().toArray(MAX_GOURP_NUM); // 人员组ID
+ public int abPersonInfoEx; // 人员信息扩展是否有效
+ public FACERECOGNITION_PERSON_INFOEX stPersonInfoEx; // 人员信息扩展
+ public int bSimilaryRangeEnable; //相似度是否有效
+ public int[] nSimilaryRange=new int[2]; //相似度范围
+ public int nFileType; // 文件类型,0:查询任意类型,1:查询jpg图片,2:查询dav
+ public int bOnlySupportRealUTC;// 为TRUE表示仅下发stuStartTimeRealUTC和stuEndTimeRealUTC(不下发stStartTime, stEndTime), 为FALSE表示仅下发stStartTime, stEndTime(不下发stuStartTimeRealUTC和stuEndTimeRealUTC)
+ public NET_TIME stuStartTimeRealUTC;// UTC开始时间(标准UTC时间), 与stuEndTimeRealUTC配对使用,与(stStartTime, stEndTime)互斥
+ public NET_TIME stuEndTimeRealUTC;// UTC结束时间(标准UTC时间), 与stuStartTimeRealUTC配对使用,与(stStartTime, stEndTime)互斥
+ public MEDIAFILE_FACERECOGNITION_PARAM()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 图片类型
+ public static class EM_FACEPIC_TYPE extends SdkStructure
+ {
+ public static final int NET_FACEPIC_TYPE_UNKOWN = 0; // 未知类型
+ public static final int NET_FACEPIC_TYPE_GLOBAL_SENCE = 1; // 人脸全景大图
+ public static final int NET_FACEPIC_TYPE_SMALL = 2; // 人脸小图
+ }
+
+ // 参数详细信息
+ public static class MEDIAFILE_FACE_DETECTION_DETAIL_PARAM extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int dwObjectId; // 物体ID
+ public int dwFrameSequence; // 帧序号
+ public NET_TIME_EX stTime; // 发生时间
+
+ public MEDIAFILE_FACE_DETECTION_DETAIL_PARAM()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 人脸检测人脸戴眼镜特征类型
+ public static class EM_FACEDETECT_GLASSES_TYPE extends SdkStructure
+ {
+ public static final int EM_FACEDETECT_GLASSES_UNKNOWN = 0; // 未知
+ public static final int EM_FACEDETECT_WITH_GLASSES = 1; // 戴眼镜
+ public static final int EM_FACEDETECT_WITHOUT_GLASSES = 2; // 不戴眼镜
+ }
+
+ //体温类型
+ public static class EM_TEMPERATURE_TYPE extends SdkStructure
+ {
+ public static final int EM_TEMPERATURE_TYPE_UNKNOWN = -1; // 未知
+ public static final int EM_TEMPERATURE_TYPE_UNDEFINE=0; // 未识别
+ public static final int EM_TEMPERATURE_TYPE_LOW=1; // 体温过低
+ public static final int EM_TEMPERATURE_TYPE_NORMAL=2; // 体温正常
+ public static final int EM_TEMPERATURE_TYPE_HIGH=3; // 体温过高
+
+ }
+
+
+ // NET_FILE_QUERY_FACE_DETECTION 对应的目标识别服务查询参数
+ public static class MEDIAFILE_FACE_DETECTION_PARAM extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ ////////查询过滤条件
+ public int nChannelID; // 通道号
+ public NET_TIME stuStartTime; // 起始时间
+ public NET_TIME stuEndTime; // 结束时间
+ public int emPicType; // 图片类型,对应枚举 EM_FACEPIC_TYPE
+ public int bDetailEnable; // 是否有详细信息,boolean类型,为1或者0
+ public MEDIAFILE_FACE_DETECTION_DETAIL_PARAM stuDetail; // 参数详细信息
+ public int emSex; // 性别类型, 参考 EM_DEV_EVENT_FACEDETECT_SEX_TYPE
+ public int bAgeEnable; // 是否指定年龄段
+ public int[] nAgeRange = new int[2]; // 年龄范围
+ public int nEmotionValidNum; // 人脸特征数组有效个数,与 emFeature 结合使用, 如果为0则表示查询所有表情
+ public int[] emEmotion = new int[NET_MAX_FACEDETECT_FEATURE_NUM]; // 人脸特征数组,与 byFeatureValidNum 结合使用,对应 EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE
+ public int emGlasses; // 是否戴眼镜,参考 EM_FACEDETECT_GLASSES_TYPE
+ public int emMask; // 是否带口罩,参考 EM_MASK_STATE_TYPE
+ public int emBeard; // 是否有胡子,参考 EM_BEARD_STATE_TYPE
+ public int nIsStranger; // 0-都查询;1-仅查未开启陌生人模式;2-仅查开启陌生人模式
+ public int bOnlySupportRealUTC;// 为TRUE表示仅下发stuStartTimeRealUTC和stuEndTimeRealUTC(不下发stuStartTime, stuEndTime), 为FALSE表示仅下发stuStartTime, stuEndTime(不下发stuStartTimeRealUTC和stuEndTimeRealUTC)
+ public NET_TIME stuStartTimeRealUTC;// UTC开始时间(标准UTC时间), 与stuEndTimeRealUTC配对使用,与(stuStartTime, stuEndTime)互斥
+ public NET_TIME stuEndTimeRealUTC;// UTC结束时间(标准UTC时间), 与stuStartTimeRealUTC配对使用,与(stuStartTime, stuEndTime)互斥
+ public int[] nChannelIDs = new int[256]; // 通道号数组
+ public int nChannelNum; // 通道号数组数量
+
+ public MEDIAFILE_FACE_DETECTION_PARAM()
+ {
+ this.dwSize = this.size();
+ }
+
+ }
+
+ // NET_FILE_QUERY_FACE_DETECTION对应的目标识别服务FINDNEXT查询返回参数
+ public static class MEDIAFILE_FACE_DETECTION_INFO extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int ch; // 通道号
+ public byte[] szFilePath = new byte[128]; // 文件路径
+ public int size; // 文件长度,该字段废弃,请使用sizeEx
+ public NET_TIME starttime; // 开始时间
+ public NET_TIME endtime; // 结束时间
+ public int nWorkDirSN; // 工作目录编号
+ public byte nFileType; // 文件类型 1:jpg图片
+ public byte bHint; // 文件定位索引
+ public byte bDriveNo; // 磁盘号
+ public byte byPictureType; // 图片类型, 0-普通, 1-合成, 2-抠图
+ public int nCluster; // 簇号
+ public int emPicType; // 图片类型,详见 EM_FACEPIC_TYPE
+ public int dwObjectId; // 物体ID
+ public int[] dwFrameSequence = new int[NET_MAX_FRAMESEQUENCE_NUM]; // 帧序号,数组有2个元素时,第一个表示小图,第二个表示大图
+ public int nFrameSequenceNum; // 帧序号个数
+ public NET_TIME_EX[] stTimes = (NET_TIME_EX[])new NET_TIME_EX().toArray(NET_MAX_TIMESTAMP_NUM); // 发生时间,数组有2个元素时,第一个表示小图,第二个表示大图
+ public int nTimeStampNum; // 表示在簇中的图片序号
+ public int nPicIndex; // 表示在簇中的图片序号
+ // 对于同一个簇中打包多张图片,提供索引方式定位图片
+ public int emSex; // 性别类型,参考 EM_DEV_EVENT_FACEDETECT_SEX_TYPE
+ public int nAge; // 年龄
+ public int emEmotion; // 人脸表情,参考 EM_DEV_EVENT_FACEDETECT_FEATURE_TYPE
+ public int emGlasses; // 是否戴眼镜,参考 EM_FACEDETECT_GLASSES_TYPE
+ public long sizeEx; // 文件长度扩展,支持文件长度大于4G,单位字节
+ public int emMask; // 是否带口罩,参考 EM_MASK_STATE_TYPE
+ public int emBeard; // 是否有胡子,参考 EM_BEARD_STATE_TYPE
+ public byte[] szReserved = new byte[4];
+ public int emEye; // 眼睛状态,参考 EM_EYE_STATE_TYPE
+ public int emMouth; // 嘴巴状态,参考 EM_MOUTH_STATE_TYPE
+ public int nAttractive; // 魅力值
+ public int nIsStranger; // 0-未知;1-未开启陌生人模式;2-开启了陌生人模式
+ public byte[] szFaceObjectUrl = new byte[128]; // 当 emPicType 为 NET_FACEPIC_TYPE_GLOBAL_SENCE 时, 代表人脸小图路径
+ public NET_EULER_ANGLE stuFaceCaptureAngle; // 人脸在抓拍图片中的角度信息, nPitch:抬头低头的俯仰角, nYaw左右转头的偏航角, nRoll头在平面内左偏右偏的翻滚角
+ // 角度值取值范围[-90,90], 三个角度值都为999表示此角度信息无效
+ public int nFaceQuality; // 人脸抓拍质量分数
+ public NET_FACEDETECT_IMAGE_INFO stuSceneImage; // 大图信息
+ public NET_POINT stuFaceCenter; // 人脸型心(不是包围盒中心), 0-8191相对坐标, 相对于小图
+ public int bRealUTC; // 为TRUE表示仅stuStartTimeRealUTC和stuEndTimeRealUTC有效(仅使用stuStartTimeRealUTC和stuEndTimeRealUTC), 为FALSE表示仅starttime和endtime有效(仅使用starttime和endtime)
+ public NET_TIME stuStartTimeRealUTC; // UTC开始时间(标准UTC时间), 与stuEndTimeRealUTC配对使用
+ public NET_TIME stuEndTimeRealUTC; // UTC结束时间(标准UTC时间), 与stuStartTimeRealUTC配对使用
+ public MEDIAFILE_FACE_DETECTION_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // NET_MEDIA_QUERY_TRAFFICCAR对应的查询条件
+ public static class MEDIA_QUERY_TRAFFICCAR_PARAM extends SdkStructure
+ {
+ public int nChannelID; // 通道号从0开始,-1表示查询所有通道
+ public NET_TIME StartTime; // 开始时间
+ public NET_TIME EndTime; // 结束时间
+ public int nMediaType; // 文件类型,0:任意类型, 1:jpg图片, 2:dav文件
+ public int nEventType; // 事件类型,详见"智能分析事件类型", 0:表示查询任意事件,此参数废弃,请使用pEventTypes
+ public byte[] szPlateNumber = new byte[32]; // 车牌号, "\0"则表示查询任意车牌号
+ public int nSpeedUpperLimit; // 查询的车速范围; 速度上限 单位: km/h
+ public int nSpeedLowerLimit; // 查询的车速范围; 速度下限 单位: km/h
+ public int bSpeedLimit; // 是否按速度查询; TRUE:按速度查询,nSpeedUpperLimit和nSpeedLowerLimit有效。
+ public int dwBreakingRule; // 违章类型:
+ // 当事件类型为 EVENT_IVS_TRAFFICGATE时
+ // 第一位:逆行; 第二位:压线行驶; 第三位:超速行驶;
+ // 第四位:欠速行驶; 第五位:闯红灯;
+ // 当事件类型为 EVENT_IVS_TRAFFICJUNCTION
+ // 第一位:闯红灯; 第二位:不按规定车道行驶;
+ // 第三位:逆行; 第四位:违章掉头;
+ // 第五位:压线行驶;
+
+ public byte[] szPlateType=new byte[32]; // 车牌类型,"Unknown" 未知,"Normal" 蓝牌黑牌,"Yellow" 黄牌,"DoubleYellow" 双层黄尾牌,"Police" 警牌 ,
+ // "SAR" 港澳特区号牌,"Trainning" 教练车号牌
+ // "Personal" 个性号牌,"Agri" 农用牌,"Embassy" 使馆号牌,"Moto" 摩托车号牌,"Tractor" 拖拉机号牌,"Other" 其他号牌
+ public byte[] szPlateColor = new byte[16]; // 车牌颜色, "Blue"蓝色,"Yellow"黄色, "White"白色,"Black"黑色
+ public byte[] szVehicleColor = new byte[16]; // 车身颜色:"White"白色, "Black"黑色, "Red"红色, "Yellow"黄色, "Gray"灰色, "Blue"蓝色,"Green"绿色
+ public byte[] szVehicleSize = new byte[16]; // 车辆大小类型:"Light-duty":小型车;"Medium":中型车; "Oversize":大型车; "Unknown": 未知
+ public int nGroupID; // 事件组编号(此值>=0时有效)
+ public short byLane; // 车道号(此值>=0时表示具体车道,-1表示所有车道,即不下发此字段)
+ public byte byFileFlag; // 文件标志, 0xFF-使用nFileFlagEx, 0-表示所有录像, 1-定时文件, 2-手动文件, 3-事件文件, 4-重要文件, 5-合成文件
+ public byte byRandomAccess; // 是否需要在查询过程中随意跳转,0-不需要,1-需要
+ public int nFileFlagEx; // 文件标志, 按位表示: bit0-定时文件, bit1-手动文件, bit2-事件文件, bit3-重要文件, bit4-合成文件, bit5-禁止名单图片 0xFFFFFFFF-所有录像
+ public int nDirection; // 车道方向(车开往的方向) 0-北 1-东北 2-东 3-东南 4-南 5-西南 6-西 7-西北 8-未知 -1-所有方向
+ public Pointer szDirs; // 工作目录列表,一次可查询多个目录,为空表示查询所有目录。目录之间以分号分隔,如“/mnt/dvr/sda0;/mnt/dvr/sda1”,szDirs==null 或"" 表示查询所有
+ public Pointer pEventTypes; // 待查询的事件类型数组指针,事件类型,详见"智能分析事件类型",若为NULL则认为查询所有事件(缓冲需由用户申请)
+ public int nEventTypeNum; // 事件类型数组大小
+ public Pointer pszDeviceAddress; // 设备地址, NULL表示该字段不起作用
+ public Pointer pszMachineAddress; // 机器部署地点, NULL表示该字段不起作用
+ public Pointer pszVehicleSign; // 车辆标识, 例如 "Unknown"-未知, "Audi"-奥迪, "Honda"-本田... NULL表示该字段不起作用
+ public short wVehicleSubBrand; // 车辆子品牌 需要通过映射表得到真正的子品牌 映射表详见开发手册
+ public short wVehicleYearModel; // 车辆品牌年款 需要通过映射表得到真正的年款 映射表详见开发手册
+ public int emSafeBeltState; // 安全带状态, 参考枚举 EM_SAFE_BELT_STATE
+ public int emCallingState; // 打电话状态, 参考枚举 EM_CALLING_STATE
+ public int emAttachMentType; // 车内饰品类型, 参考枚举 EM_ATTACHMENT_TYPE
+ public int emCarType; // 车辆类型, 参考枚举 EM_CATEGORY_TYPE
+ public Pointer pstuTrafficCarParamEx; // 参数扩展,对应结构体NET_MEDIA_QUERY_TRAFFICCAR_PARAM_EX
+ public int[] bReserved=new int[4]; // 保留字段
+ }
+
+ // NET_MEDIA_QUERY_TRAFFICCAR_EX对应的查询条件
+ public static class MEDIA_QUERY_TRAFFICCAR_PARAM_EX extends SdkStructure
+ {
+ public int dwSize;
+ public MEDIA_QUERY_TRAFFICCAR_PARAM stuParam; // 基本查询参数
+
+ public MEDIA_QUERY_TRAFFICCAR_PARAM_EX() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // NET_MEDIA_QUERY_TRAFFICCAR查询出来的media文件信息
+ public static class MEDIAFILE_TRAFFICCAR_INFO extends SdkStructure
+ {
+ public int ch; // 通道号
+ public byte[] szFilePath = new byte[128]; // 文件路径
+ public int size; // 文件长度
+ public NET_TIME starttime; // 开始时间
+ public NET_TIME endtime; // 结束时间
+ public int nWorkDirSN; // 工作目录编号
+ public byte nFileType; // 文件类型 1:jpg图片
+ public byte bHint; // 文件定位索引
+ public byte bDriveNo; // 磁盘号
+ public byte bReserved2;
+ public int nCluster; // 簇号
+ public byte byPictureType; // 图片类型, 0-普通, 1-合成, 2-抠图
+ public byte[] bReserved = new byte[3]; // 保留字段
+
+ //以下是交通车辆信息
+ public byte[] szPlateNumber = new byte[32]; // 车牌号码
+ public byte[] szPlateType = new byte[32]; // 号牌类型"Unknown" 未知; "Normal" 蓝牌黑牌; "Yellow" 黄牌; "DoubleYellow" 双层黄尾牌
+ // "Police" 警牌;
+ // "SAR" 港澳特区号牌; "Trainning" 教练车号牌; "Personal" 个性号牌; "Agri" 农用牌
+ // "Embassy" 使馆号牌; "Moto" 摩托车号牌; "Tractor" 拖拉机号牌; "Other" 其他号牌
+ public byte[] szPlateColor = new byte[16]; // 车牌颜色:"Blue","Yellow", "White","Black"
+ public byte[] szVehicleColor = new byte[16]; // 车身颜色:"White", "Black", "Red", "Yellow", "Gray", "Blue","Green"
+ public int nSpeed; // 车速,单位 Km/H
+ public int nEventsNum; // 关联的事件个数
+ public int[] nEvents = new int[32]; // 关联的事件列表,数组值表示相应的事件,详见"智能分析事件类型"
+ public int dwBreakingRule; // 具体违章类型掩码,第一位:闯红灯; 第二位:不按规定车道行驶;
+ // 第三位:逆行; 第四位:违章掉头;否则默认为:交通路口事件
+ public byte[] szVehicleSize = new byte[16]; // 车辆大小类型:"Light-duty":小型车;"Medium":中型车; "Oversize":大型车
+ public byte[] szChannelName = new byte[NET_CHAN_NAME_LEN]; // 本地或远程的通道名称
+ public byte[] szMachineName = new byte[NET_MAX_NAME_LEN]; // 本地或远程设备名称
+
+ public int nSpeedUpperLimit; // 速度上限 单位: km/h
+ public int nSpeedLowerLimit; // 速度下限 单位: km/h
+ public int nGroupID; // 事件里的组编号
+ public byte byCountInGroup; // 一个事件组内的抓拍张数
+ public byte byIndexInGroup; // 一个事件组内的抓拍序号
+ public byte byLane; // 车道,参见MEDIA_QUERY_TRAFFICCAR_PARAM
+ public byte[] bReserved1 = new byte[21]; // 保留
+ public NET_TIME stSnapTime; // 抓拍时间
+ public int nDirection; // 车道方向,参见MEDIA_QUERY_TRAFFICCAR_PARAM
+ public byte[] szMachineAddress = new byte[MAX_PATH]; // 机器部署地点
+ public long sizeEx; // 文件长度扩展,支持文件长度大于4G,单位字节
+ }
+
+ // NET_MEDIA_QUERY_TRAFFICCAR_EX查询出来的文件信息
+ public static class MEDIAFILE_TRAFFICCAR_INFO_EX extends SdkStructure
+ {
+
+ public int dwSize;
+ /**
+ * 基本信息
+ */
+ public MEDIAFILE_TRAFFICCAR_INFO stuInfo = new MEDIAFILE_TRAFFICCAR_INFO();
+ /**
+ * 设备地址
+ */
+ public byte[] szDeviceAddr = new byte[256];
+ /**
+ * 车辆标识, 例如 "Unknown"-未知, "Audi"-奥迪, "Honda"-本田...
+ */
+ public byte[] szVehicleSign = new byte[32];
+ /**
+ * 自定义车位号(停车场用)
+ */
+ public byte[] szCustomParkNo = new byte[64];
+ /**
+ * 车辆子品牌,需要通过映射表得到真正的子品牌
+ */
+ public short wVehicleSubBrand;
+ /**
+ * 车辆年款,需要通过映射表得到真正的年款
+ */
+ public short wVehicleYearModel;
+ /**
+ * 对应电子车牌标签信息中的过车时间(ThroughTime)
+ */
+ public NET_TIME stuEleTagInfoUTC = new NET_TIME();
+ /**
+ * 录像或抓图文件标志
+ */
+ public int[] emFalgLists = new int[EM_RECORD_SNAP_FLAG_TYPE.FLAG_TYPE_MAX];
+ /**
+ * 标志总数
+ */
+ public int nFalgCount;
+ /**
+ * 安全带状态 {@link NetSDKLib.EM_SAFE_BELT_STATE}
+ */
+ public int emSafeBelSate;
+ /**
+ * 打电话状态 {@link NetSDKLib.EM_CALLING_STATE}
+ */
+ public int emCallingState;
+ /**
+ * 车内物品个数
+ */
+ public int nAttachMentNum;
+ /**
+ * 车内物品信息
+ */
+ public NET_ATTACH_MENET_INFO[] stuAttachMent = new NET_ATTACH_MENET_INFO[8];
+ /**
+ * 车牌所属国家和地区
+ */
+ public byte[] szCountry = new byte[32];
+ /**
+ * 车辆类型 {@link NetSDKLib.EM_CATEGORY_TYPE}
+ */
+ public int emCarType;
+ /**
+ * 遮阳板状态 {@link NetSDKLib.NET_SUNSHADE_STATE}
+ */
+ public int emSunShadeState;
+ /**
+ * 是否抽烟 {@link NetSDKLib.EM_SMOKING_STATE}
+ */
+ public int emSmokingState;
+ /**
+ * 年检标个数
+ */
+ public int nAnnualInspection;
+ /**
+ * 字节对齐
+ */
+ public byte[] byReserved = new byte[4];
+ /**
+ * PictureID高四字节
+ */
+ public int nPicIDHigh;
+ /**
+ * PictureID低四字节
+ */
+ public int nPicIDLow;
+ /**
+ * 平台客户端1上传信息
+ */
+ public NET_UPLOAD_CLIENT_INFO stuClient1 = new NET_UPLOAD_CLIENT_INFO();
+ /**
+ * 平台客户端2上传信息
+ */
+ public NET_UPLOAD_CLIENT_INFO stuClient2 = new NET_UPLOAD_CLIENT_INFO();
+ /**
+ * 三地车牌
+ */
+ public byte[] szExtraPlateNumber = new byte[3 * 32];
+ /**
+ * 车牌个数
+ */
+ public int nExtraPlateNumberNum;
+ /**
+ * 车辆进站时间,时间格式:UTC时间(IVSS, 用于加油站场景)
+ */
+ public int nEntranceTime;
+ /**
+ * 车辆加油时间,时间格式:UTC时间(IVSS, 用于加油站场景)
+ */
+ public int nOilTime;
+ /**
+ * 车辆出站时间,时间格式:UTC时间(IVSS, 用于加油站场景)
+ */
+ public int nExitTime;
+ /**
+ * 为TRUE表示仅stuStartTimeRealUTC和stuEndTimeRealUTC有效(仅使用stuStartTimeRealUTC和stuEndTimeRealUTC), 为FALSE表示仅starttime和endtime有效(仅使用starttime和endtime, starttime和endtime在MEDIAFILE_TRAFFICCAR_INFO中)
+ */
+ public int bRealUTC;
+ /**
+ * UTC开始时间(标准UTC时间), 与stuEndTimeRealUTC配对使用
+ */
+ public NET_TIME stuStartTimeRealUTC = new NET_TIME();
+ /**
+ * UTC结束时间(标准UTC时间), 与stuStartTimeRealUTC配对使用
+ */
+ public NET_TIME stuEndTimeRealUTC = new NET_TIME();
+ /**
+ * 字节补齐
+ */
+ public byte[] byReserved1 = new byte[784];
+
+ public MEDIAFILE_TRAFFICCAR_INFO_EX() {
+ for (int i = 0; i < stuAttachMent.length; i++) {
+ stuAttachMent[i] = new NET_ATTACH_MENET_INFO();
+ }
+ this.dwSize = this.size();
+ }
+ }
+
+
+
+
+ // 车内饰品信息
+ public static class NET_ATTACH_MENET_INFO extends SdkStructure
+ {
+ public int emAttachMentType; // 车内物品类型, 对应枚举 EM_ATTACHMENT_TYPE
+ public byte[] bReserved1 = new byte[128]; // 保留字节
+ }
+
+ // 安全带状态
+ public static class EM_SAFE_BELT_STATE extends SdkStructure
+ {
+ public static final int EM_SAFE_BELT_UNKNOWN = 0; // 未知
+ public static final int EM_SAFE_BELT_OTHER = 1; // 未识别
+ public static final int EM_SAFE_BELT_WITH = 2; // 有安全带
+ public static final int EM_SAFE_BELT_WITHOUT = 3; // 无安全带
+ }
+
+ // 车内饰品类型
+ public static class EM_ATTACHMENT_TYPE extends SdkStructure
+ {
+ public static final int EM_ATTACHMENT_UNKNOWN = 0; // 未知
+ public static final int EM_ATTACHMENT_OTHER = 1; // 其他类型
+ public static final int EM_ATTACHMENT_FURNITURE = 2; // 摆件
+ public static final int EM_ATTACHMENT_PENDANT = 3; // 挂件
+ public static final int EM_ATTACHMENT_TISSUEBOX = 4; // 纸巾盒
+ public static final int EM_ATTACHMENT_DANGER = 5; // 危险品
+ public static final int EM_ATTACHMENT_PERFUMEBOX = 6; // 香水
+ }
+
+ // 打电话状态
+ public static class EM_CALLING_STATE extends SdkStructure
+ {
+ public static final int EM_CALLING_UNKNOWN = 0; // 未知
+ public static final int EM_CALLING_OTHER = 1; // 未识别
+ public static final int EM_CALLING_NO = 2; // 未打电话
+ public static final int EM_CALLING_YES = 3; // 打电话
+ }
+
+ // 车辆类型
+ public static class EM_CATEGORY_TYPE extends SdkStructure
+ {
+ public static final int EM_CATEGORY_UNKNOWN = 0; // 未知
+ public static final int EM_CATEGORY_OTHER = 1; // 其他
+ public static final int EM_CATEGORY_MOTOR = 2; // 机动车
+ public static final int EM_CATEGORY_BUS = 3; // 公交车
+ public static final int EM_CATEGORY_UNLICENSED_MOTOR = 4; // 无牌机动车
+ public static final int EM_CATEGORY_LARGE_CAR = 5; // 大型汽车
+ public static final int EM_CATEGORY_MICRO_CAR = 6; // 小型汽车
+ public static final int EM_CATEGORY_EMBASSY_CAR = 7; // 使馆汽车
+ public static final int EM_CATEGORY_MARGINAL_CAR = 8; // 领馆汽车
+ public static final int EM_CATEGORY_AREAOUT_CAR = 9; // 境外汽车
+ public static final int EM_CATEGORY_FOREIGN_CAR = 10; // 外籍汽车
+ public static final int EM_CATEGORY_FARMTRANSMIT_CAR = 11; // 农用运输车
+ public static final int EM_CATEGORY_TRACTOR = 12; // 拖拉机
+ public static final int EM_CATEGORY_TRAILER = 13; // 挂车
+ public static final int EM_CATEGORY_COACH_CAR = 14; // 教练汽车
+ public static final int EM_CATEGORY_TRIAL_CAR = 15; // 试验汽车
+ public static final int EM_CATEGORY_TEMPORARY_ENTRY_CAR = 16; // 临时入境汽车
+ public static final int EM_CATEGORY_TEMPORARY_ENTRY_MOTORCYCLE = 17; // 临时入境摩托
+ public static final int EM_CATEGORY_TEMPORARY_STEER_CAR = 18; // 临时行驶车
+ public static final int EM_CATEGORY_LARGE_TRUCK = 19; // 大货车
+ public static final int EM_CATEGORY_MID_TRUCK = 20; // 中货车
+ public static final int EM_CATEGORY_MICRO_TRUCK = 21; // 小货车
+ public static final int EM_CATEGORY_MICROBUS = 22; // 面包车
+ public static final int EM_CATEGORY_SALOON_CAR = 23; // 轿车
+ public static final int EM_CATEGORY_CARRIAGE = 24; // 小轿车
+ public static final int EM_CATEGORY_MINI_CARRIAGE = 25; // 微型轿车
+ public static final int EM_CATEGORY_SUV_MPV = 26; // SUV或者MPV
+ public static final int EM_CATEGORY_SUV = 27; // SUV
+ public static final int EM_CATEGORY_MPV = 28; // MPV
+ public static final int EM_CATEGORY_PASSENGER_CAR = 29; // 客车
+ public static final int EM_CATEGORY_MOTOR_BUS = 30; // 大客
+ public static final int EM_CATEGORY_MID_PASSENGER_CAR = 31; // 中客车
+ public static final int EM_CATEGORY_MINI_BUS = 32; // 小客车
+ public static final int EM_CATEGORY_PICKUP = 33; // 皮卡车
+ public static final int EM_CATEGORY_OILTANK_TRUCK = 34; // 油罐车
+ public static final int EM_CATEGORY_TANK_CAR = 35; // 危化品车辆
+ public static final int EM_CATEGORY_SLOT_TANK_CAR = 36; // 槽罐车
+ public static final int EM_CATEGORY_DREGS_CAR = 37; // 渣土车
+ public static final int EM_CATEGORY_CONCRETE_MIXER_TRUCK = 38; // 混凝土搅拌车
+ public static final int EM_CATEGORY_TAXI = 39; // 出租车
+ public static final int EM_CATEGORY_POLICE = 40; // 警车
+ public static final int EM_CATEGORY_AMBULANCE = 41; // 救护车
+ public static final int EM_CATEGORY_GENERAL = 42; // 普通车
+ public static final int EM_CATEGORY_WATERING_CAR = 43; // 洒水车
+ public static final int EM_CATEGORY_FIRE_ENGINE = 44; // 消防车
+ public static final int EM_CATEGORY_MACHINE_TRUCK = 45; // 工程车
+ public static final int EM_CATEGORY_POWER_LOT_VEHICLE = 46; // 粉粒物料车
+ public static final int EM_CATEGORY_SUCTION_SEWAGE_TRUCK = 47; // 吸污车
+ public static final int EM_CATEGORY_NORMAL_TANK_TRUCK = 48; // 普通罐车
+ }
+
+ // 是否抽烟
+ public static class EM_SMOKING_STATE
+ {
+ public static final int EM_SMOKING_UNKNOWN = 0; // 未知
+ public static final int EM_SMOKING_NO = 1; // 未抽烟
+ public static final int EM_SMOKING_YES = 2; // 抽烟
+ }
+
+ // 对应C++头文件DH_PIC_INFO_EX
+ public static class NET_PIC_INFO_EX extends SdkStructure
+ {
+ public int dwSize;//结构体大小
+ public int dwFileLenth;//文件大小,单位:字节
+ public byte[] szFilePath = new byte[MAX_PATH];// 文件路径
+
+ public NET_PIC_INFO_EX()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ //区域;各边距按整长8192的比例
+ public static class NET_RECT extends SdkStructure
+ {
+ public int left;
+ public int top;
+ public int right;
+ public int bottom;
+
+ public String toString() {
+ return "[" + left + " " + top + " " + right + " " + bottom + "]";
+ }
+ }
+
+
+ // 时间段结构
+ public static class NET_TSECT extends SdkStructure
+ {
+ public int bEnable; // 当表示录像时间段时,按位表示四个使能,从低位到高位分别表示动检录象、报警录象、普通录象、动检和报警同时发生才录像
+ // 当表示布撤防时间段时, 表示使能
+ // 当表示推送时间段时, 表示使能:1表示使能,0表示非使能
+ public int iBeginHour;
+ public int iBeginMin;
+ public int iBeginSec;
+ public int iEndHour;
+ public int iEndMin;
+ public int iEndSec;
+
+ public String startTime() {
+ return iBeginHour + ":" + iBeginMin + ":" + iBeginSec;
+ }
+
+ public String endTime() {
+ return iEndHour + ":" + iEndMin + ":" + iEndSec;
+ }
+ }
+
+
+ public static class DH_RECT extends SdkStructure
+ {
+ public NativeLong left;
+ public NativeLong top;
+ public NativeLong right;
+ public NativeLong bottom;
+ }
+
+ //二维空间点
+ public static class NET_POINT extends SdkStructure
+ {
+ public short nx;
+ public short ny;
+
+ @Override
+ public String toString() {
+ return "NET_POINT{" +
+ "nx=" + nx +
+ ", ny=" + ny +
+ '}';
+ }
+
+ public NET_POINT() {
+ }
+ }
+
+ //二维空间点
+ public static class DH_POINT extends SdkStructure
+ {
+ public short nx;
+ public short ny;
+
+ public DH_POINT(){}
+
+ public DH_POINT(short x, short y){
+ this.nx = x;
+ this.ny = y;
+ }
+ }
+
+ public static class NET_CANDIDAT_PIC_PATHS extends SdkStructure
+ {
+ public int dwSize;//结构体大小
+ public int nFileCount;//实际文件个数
+ public NET_PIC_INFO_EX[] stFiles = (NET_PIC_INFO_EX[])new NET_PIC_INFO_EX().toArray(NET_MAX_PERSON_IMAGE_NUM);//文件信息
+
+ public NET_CANDIDAT_PIC_PATHS()
+ {
+ this.dwSize = this.size();
+ }
+
+ public int fieldOffset(String name) {
+ return super.fieldOffset(name);
+ }
+ }
+
+ //颜色类型
+ public static class EM_COLOR_TYPE extends SdkStructure
+ {
+ public static final int NET_COLOR_TYPE_RED = 0;//红色
+ public static final int NET_COLOR_TYPE_YELLOW = 1;//黄色
+ public static final int NET_COLOR_TYPE_GREEN = 2; //绿色
+ public static final int NET_COLOR_TYPE_CYAN = 3; //青色
+ public static final int NET_COLOR_TYPE_BLUE = 4; //蓝色
+ public static final int NET_COLOR_TYPE_PURPLE = 5; //紫色
+ public static final int NET_COLOR_TYPE_BLACK = 6; //黑色
+ public static final int NET_COLOR_TYPE_WHITE = 7; //白色
+ public static final int NET_COLOR_TYPE_MAX = 8;
+ }
+
+ //视频分析物体信息结构体
+ public static class NET_MSG_OBJECT extends SdkStructure
+ {
+ public int nObjectID; //物体ID,每个ID表示一个唯一的物体
+ public byte[] szObjectType = new byte[128]; //物体类型
+ public int nConfidence; //置信度(0~255),值越大表示置信度越高
+ public int nAction; //物体动作:1:Appear2:Move3:Stay
+ public DH_RECT BoundingBox; //包围盒
+ public NET_POINT Center; //物体型心
+ public int nPolygonNum; //多边形顶点个数
+ public NET_POINT[] Contour = (NET_POINT[])new NET_POINT().toArray(NET_MAX_POLYGON_NUM);//较精确的轮廓多边形
+ public int rgbaMainColor; //表示车牌、车身等物体主要颜色;按字节表示,分别为红、绿、蓝和透明度,例如:RGB值为(0,255,0),透明度为0时,其值为0x00ff0000.
+
+ public byte[] szText = new byte[128]; // 物体上相关的带0结束符文本,比如车牌,集装箱号等等
+ // "ObjectType"为"Vehicle"或者"Logo"时(尽量使用Logo。Vehicle是为了兼容老产品)表示车标,支持:
+ // "Unknown"未知
+ // "Audi" 奥迪
+ // "Honda" 本田
+ // "Buick" 别克
+ // "Volkswagen" 大众
+ // "Toyota" 丰田
+ // "BMW" 宝马
+ // "Peugeot" 标致
+ // "Ford" 福特
+ // "Mazda" 马自达
+ // "Nissan" 尼桑
+ // "Hyundai" 现代
+ // "Suzuki" 铃木
+ // "Citroen" 雪铁龙
+ // "Benz" 奔驰
+ // "BYD" 比亚迪
+ // "Geely" 吉利
+ // "Lexus" 雷克萨斯
+ // "Chevrolet" 雪佛兰
+ // "Chery" 奇瑞
+ // "Kia" 起亚
+ // "Charade" 夏利
+ // "DF" 东风
+ // "Naveco" 依维柯
+ // "SGMW" 五菱
+ // "Jinbei" 金杯
+ // "JAC" 江淮
+ // "Emgrand" 帝豪
+ // "ChangAn" 长安
+ // "Great Wall" 长城
+ // "Skoda" 斯柯达
+ // "BaoJun" 宝骏
+ // "Subaru" 斯巴鲁
+ // "LandWind" 陆风
+ // "Luxgen" 纳智捷
+ // "Renault" 雷诺
+ // "Mitsubishi" 三菱
+ // "Roewe" 荣威
+ // "Cadillac" 凯迪拉克
+ // "MG" 名爵
+ // "Zotye" 众泰
+ // "ZhongHua" 中华
+ // "Foton" 福田
+ // "SongHuaJiang" 松花江
+ // "Opel" 欧宝
+ // "HongQi" 一汽红旗
+ // "Fiat" 菲亚特
+ // "Jaguar" 捷豹
+ // "Volvo" 沃尔沃
+ // "Acura" 讴歌
+ // "Porsche" 保时捷
+ // "Jeep" 吉普
+ // "Bentley" 宾利
+ // "Bugatti" 布加迪
+ // "ChuanQi" 传祺
+ // "Daewoo" 大宇
+ // "DongNan" 东南
+ // "Ferrari" 法拉利
+ // "Fudi" 福迪
+ // "Huapu" 华普
+ // "HawTai" 华泰
+ // "JMC" 江铃
+ // "JingLong" 金龙客车
+ // "JoyLong" 九龙
+ // "Karry" 开瑞
+ // "Chrysler" 克莱斯勒
+ // "Lamborghini" 兰博基尼
+ // "RollsRoyce" 劳斯莱斯
+ // "Linian" 理念
+ // "LiFan" 力帆
+ // "LieBao" 猎豹
+ // "Lincoln" 林肯
+ // "LandRover" 路虎
+ // "Lotus" 路特斯
+ // "Maserati" 玛莎拉蒂
+ // "Maybach" 迈巴赫
+ // "Mclaren" 迈凯轮
+ // "Youngman" 青年客车
+ // "Tesla" 特斯拉
+ // "Rely" 威麟
+ // "Lsuzu" 五十铃
+ // "Yiqi" 一汽
+ // "Infiniti" 英菲尼迪
+ // "YuTong" 宇通客车
+ // "AnKai" 安凯客车
+ // "Canghe" 昌河
+ // "HaiMa" 海马
+ // "Crown" 丰田皇冠
+ // "HuangHai" 黄海
+ // "JinLv" 金旅客车
+ // "JinNing" 精灵
+ // "KuBo" 酷博
+ // "Europestar" 莲花
+ // "MINI" 迷你
+ // "Gleagle" 全球鹰
+ // "ShiDai" 时代
+ // "ShuangHuan" 双环
+ // "TianYe" 田野
+ // "WeiZi" 威姿
+ // "Englon" 英伦
+ // "ZhongTong" 中通客车
+ // "Changan" 长安轿车
+ // "Yuejin" 跃进
+ // "Taurus" 金牛星
+ // "Alto" 奥拓
+ // "Weiwang" 威旺
+ // "Chenglong" 乘龙
+ // "Haige" 海格
+ // "Shaolin" 少林客车
+ // "Beifang" 北方客车
+ // "Beijing" 北京汽车
+ // "Hafu" 哈弗
+
+ public byte[] szObjectSubType = new byte[62]; // 物体子类别,根据不同的物体类型,可以取以下子类型:
+ // Vehicle Category:"Unknown" 未知,"Motor" 机动车,"Non-Motor":非机动车,"Bus": 公交车,"Bicycle" 自行车,"Motorcycle":摩托车,"PassengerCar":客车,
+ // "LargeTruck":大货车, "MidTruck":中货车,"SaloonCar":轿车,"Microbus":面包车,"MicroTruck":小货车,"Tricycle":三轮车, "Passerby":行人
+ // Plate Category:"Unknown" 未知,"Normal" 蓝牌黑牌,"Yellow" 黄牌,"DoubleYellow" 双层黄尾牌,"Police" 警牌,
+ // "SAR" 港澳特区号牌,"Trainning" 教练车号牌
+ // "Personal" 个性号牌,"Agri" 农用牌,"Embassy" 使馆号牌,"Moto" 摩托车号牌,"Tractor" 拖拉机号牌,"Other" 其他号牌
+ // HumanFace Category:"Normal" 普通人脸,"HideEye" 眼部遮挡,"HideNose" 鼻子遮挡,"HideMouth" 嘴部遮挡
+
+ public short wColorLogoIndex; // 车标索引
+ public short wSubBrand; // 车辆子品牌 需要通过映射表得到真正的子品牌 映射表详见开发手册
+ public byte byReserved1;
+ public byte bPicEnble; //是否有物体对应图片文件信息, 类型小bool, 取值0或者1
+ public NET_PIC_INFO stPicInfo; //物体对应图片信息
+ public byte bShotFrame; //是否是抓拍张的识别结果, 类型小bool, 取值0或者1
+ public byte bColor; //物体颜色(rgbaMainColor)是否可用, 类型小bool, 取值0或者1
+ public byte byReserved2;
+ public byte byTimeType; //时间表示类型,详见 EM_TIME_TYPE 说明
+ public NET_TIME_EX stuCurrentTime; //针对视频浓缩,当前时间戳(物体抓拍或识别时,会将此识别智能帧附在一个视频帧或jpeg图片中,此帧所在原始视频中的出现时间)
+ public NET_TIME_EX stuStartTime; //开始时间戳(物体开始出现时)
+ public NET_TIME_EX stuEndTime; //结束时间戳(物体最后出现时)
+ public DH_RECT stuOriginalBoundingBox; //包围盒(绝对坐标)
+ public DH_RECT stuSignBoundingBox; //车标坐标包围盒
+ public int dwCurrentSequence; //当前帧序号(抓下这个物体时的帧)
+ public int dwBeginSequence; //开始帧序号(物体开始出现时的帧序号)
+ public int dwEndSequence; //结束帧序号(物体消逝时的帧序号)
+ public long nBeginFileOffse; //开始时文件偏移,单位:字(物体开始出现时,视频帧在原始视频文件中相对于文件起始处的偏移)
+ public long nEndFileOffset; //结束时文件偏移,单位:字节(物体消逝时,视频帧在原始视频文件中相对于文件起始处的偏移)
+ public byte[] byColorSimilar = new byte[EM_COLOR_TYPE.NET_COLOR_TYPE_MAX]; //物体颜色相似度,取值范围:0-100,数组下标值代表某种颜色,详见 EM_COLOR_TYPE
+ public byte[] byUpperBodyColorSimilar = new byte[EM_COLOR_TYPE.NET_COLOR_TYPE_MAX]; //上半身物体颜色相似度(物体类型为人时有效)
+ public byte[] byLowerBodyColorSimilar = new byte[EM_COLOR_TYPE.NET_COLOR_TYPE_MAX]; //下半身物体颜色相似度(物体类型为人时有效)
+ public int nRelativeID; //相关物体ID
+ public byte[] szSubText = new byte[20]; //"ObjectType"为"Vehicle"或者"Logo"时,表示车标下的某一车系,比如奥迪A6L,由于车系较多,SDK实现时透传此字段,设备如实填写。
+ public short wBrandYear; // 车辆品牌年款 需要通过映射表得到真正的年款 映射表详见开发手册
+
+ protected int getNativeAlignment(Class> type, Object value, boolean isFirstElement) {
+ int alignment = super.getNativeAlignment(type, value, isFirstElement);
+ return Math.min(4, alignment);
+ }
+ }
+
+
+ // 物体截图信息
+ public static class IMAGE_INFO extends SdkStructure
+ {
+ public int nLength; // 图片大小,单位:字节
+ public int nWidth; // 图片宽度
+ public int nHeight; // 图片高度
+ public byte[] szFilePath=new byte[260]; // 文件路径
+ public byte[] byReserved=new byte[512]; // 预留字节
+ };
+
+ // 目标人脸信息
+ public static class FACE_INFO_OBJECT extends SdkStructure
+ {
+ public IMAGE_INFO stuImageInfo; // 物体截图信息
+ public int emSex; // 性别类型
+ public int nAge; // 年龄
+ public int emGlasses; // 是否戴眼镜
+ public int emEmotion; // 人脸表情
+ public byte[] szReserved = new byte[4];
+ public int emEye; // 眼睛状态
+ public int emMouth; // 嘴巴状态
+ public int emMask; // 是否带口罩
+ public int emBeard; // 是否有胡子
+ public int nAttractive; // 魅力值,0表示未识别,识别时范围1-100,得分高魅力高
+ public NET_EULER_ANGLE stuFaceCaptureAngle; // 人脸在抓拍图片中的角度信息, nPitch:抬头低头的俯仰角, nYaw左右转头的偏航角, nRoll头在平面内左偏右偏的翻滚角
+ // 角度值取值范围[-90,90], 三个角度值都为999表示此角度信息无效
+ public int nFaceQuality; // 人脸抓拍质量分数
+ public double fMaxTemp; // 温度信息
+ public int nIsOverTemp; // 是否温度异常
+ public int nIsUnderTemp; // 是否温度异常
+ public int emTempUnit; // 温度单位 EM_TEMPERATURE_UNIT
+ public byte[] byReserved=new byte[2012]; // 保留字段
+ };
+
+ public static class EM_TEMPERATURE_UNIT extends SdkStructure
+ {
+ public final static int EM_TEMPERATURE_CENTIGRADE = 0; // 摄氏度
+ public final static int EM_TEMPERATURE_FAHRENHEIT = 1; // 华氏度
+ public final static int EM_TEMPERATURE_KELVIN = 2; // 开尔文
+ }
+
+ // NET_FILE_QUERY_FACE 对应的目标识别服务FINDNEXT查询返回参数
+ public static class MEDIAFILE_FACERECOGNITION_INFO extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int bGlobalScenePic; // 全景图是否存在, BOOL类型,取值0或1
+ public NET_PIC_INFO_EX stGlobalScenePic; // 全景图片文件路径
+ public NET_MSG_OBJECT stuObject; // 目标人脸物体信息
+ public NET_PIC_INFO_EX stObjectPic; // 目标人脸文件路径
+ public int nCandidateNum; // 当前人脸匹配到的候选对象数量
+ public CANDIDATE_INFO[] stuCandidates = (CANDIDATE_INFO[])new CANDIDATE_INFO().toArray(NET_MAX_CANDIDATE_NUM); //当前人脸匹配到的候选对象信息
+ public NET_CANDIDAT_PIC_PATHS[] stuCandidatesPic = (NET_CANDIDAT_PIC_PATHS[])new NET_CANDIDAT_PIC_PATHS().toArray(NET_MAX_CANDIDATE_NUM);// 当前人脸匹配到的候选对象图片文件路径
+ public NET_TIME stTime; // 报警发生时间
+ public byte[] szAddress = new byte[MAX_PATH]; // 报警发生地点
+ public int nChannelId; // 通道号
+ public int bUseCandidatesEx; // 是否使用候选对象扩展结构体, 1-true, 0-false
+ // 若为TRUE, 则表示使用stuCandidatesEx, 且stuCandidates无效, 否则相反
+ public int nCandidateExNum; // 当前人脸匹配到的候选对象(扩展结构体) 数量
+ public CANDIDATE_INFOEX[] stuCandidatesEx = (CANDIDATE_INFOEX[])new CANDIDATE_INFOEX().toArray(NET_MAX_CANDIDATE_NUM); // 当前人脸匹配到的候选对象信息, 实际返回个数同nCandidateNum
+ public FACE_INFO_OBJECT stuFaceInfoObject; // 目标人脸信息
+ public NET_POINT stuFaceCenter; // 人脸型心(不是包围盒中心), 0-8191相对坐标, 相对于小图
+ public NET_MEDIAFILE_GENERAL_INFO stuGeneralInfo; // 通用信息
+ public int nRecNo; // 数据库记录号
+ public int bRealUTC; // 为TRUE表示仅stuStartTimeRealUTC和stuEndTimeRealUTC有效(仅使用stuStartTimeRealUTC和stuEndTimeRealUTC), 为FALSE表示stuStartTimeRealUTC和stuEndTimeRealUTC无效
+ public NET_TIME stuStartTimeRealUTC; // UTC开始时间(标准UTC时间), 与stuEndTimeRealUTC配对使用
+ public NET_TIME stuEndTimeRealUTC; // UTC结束时间(标准UTC时间), 与stuStartTimeRealUTC配对使用
+ public MEDIAFILE_FACERECOGNITION_INFO()
+ {
+ this.dwSize = this.size();
+ }
+
+ public int fieldOffset(String name) {
+ return super.fieldOffset(name);
+ }
+
+ }
+
+ //每个视频输入通道对应的所有事件规则:缓冲区pRuleBuf填充多个事件规则信息,每个事件规则信息内容为 CFG_RULE_INFO + "事件类型对应的规则配置结构体"。
+ public static class CFG_ANALYSERULES_INFO extends SdkStructure
+ {
+ public int nRuleCount; // 事件规则个数
+ public Pointer pRuleBuf; // 每个视频输入通道对应的视频分析事件规则配置缓冲, 对应 CFG_RULE_INFO[]
+ public int nRuleLen; // 缓冲大小
+ }
+
+ // 规则通用信息
+ public static class CFG_RULE_COMM_INFO extends SdkStructure
+ {
+ public byte bRuleId; // 规则编号
+ public int emClassType; // 规则所属的场景, EM_SCENE_TYPE
+ public byte[] bReserved = new byte[512]; // 保留字节
+ }
+
+ public static class CFG_RULE_INFO extends SdkStructure
+ {
+ public int dwRuleType; // 事件类型,详见dhnetsdk.h中"智能分析事件类型"
+ public int nRuleSize; // 该事件类型规则配置结构体大小
+ public CFG_RULE_COMM_INFO stuRuleCommInfo; // 规则通用信息
+ }
+
+ // 应用场景, 内容与 EM_SCENE_CLASS_TYPE 一致
+ public static class EM_SCENE_TYPE extends SdkStructure
+ {
+ public static final int EM_SCENE_UNKNOW = 0; // 未知
+ public static final int EM_SCENE_NORMAL = 1; // "Normal" 普通场景
+ public static final int EM_SCENE_TRAFFIC = 2; // "Traffic" 交通场景
+ public static final int EM_SCENE_TRAFFIC_PATROL = 3; // "TrafficPatrol" 交通巡视
+ public static final int EM_SCENE_FACEDETECTION = 4; // "FaceDetection" 人脸检测/目标识别
+ public static final int EM_SCENE_ATM = 5; // "ATM"
+ public static final int EM_SCENE_INDOOR = 6; // "Indoor" 室内行为分析,和普通规则相同,对室内场景的算法优化版
+ public static final int EM_SCENE_FACERECOGNITION = 7; // "FaceRecognition" 目标识别
+ public static final int EM_SCENE_PS = 8;
+ public static final int EM_SCENE_NUMBERSTAT = 9; // "NumberStat" 客流量统计
+ public static final int EM_SCENE_HEAT_MAP = 10; // "HeatMap" 热度图
+ public static final int EM_SCENE_VIDEODIAGNOSIS = 11; // "VideoDiagnosis" 视频诊断
+ public static final int EM_SCENE_VEHICLEANALYSE = 12; // "VehicleAnalyse" 车辆特征检测分析
+ public static final int EM_SCENE_COURSERECORD = 13; // "CourseRecord" 自动录播
+ public static final int EM_SCENE_VEHICLE = 14; // "Vehicle" 车载场景(车载行业用,不同于智能交通的Traffic)
+ public static final int EM_SCENE_STANDUPDETECTION = 15; // "StandUpDetection" 起立检测
+ public static final int EM_SCENE_GATE = 16; // "Gate" 卡口
+ public static final int EM_SCENE_SDFACEDETECTION = 17; // "SDFaceDetect" 多预置点人脸检测,配置一条规则但可以在不同预置点下生效
+ public static final int EM_SCENE_HEAT_MAP_PLAN = 18; // "HeatMapPlan" 球机热度图计划
+ public static final int EM_SCENE_NUMBERSTAT_PLAN = 19; // "NumberStatPlan" 球机客流量统计计划
+ public static final int EM_SCENE_ATMFD = 20; // "ATMFD"金融人脸检测,包括正常人脸、异常人脸、相邻人脸、头盔人脸等针对ATM场景特殊优化
+ public static final int EM_SCENE_HIGHWAY = 21; // "Highway" 高速交通事件检测
+ public static final int EM_SCENE_CITY = 22; // "City" 城市交通事件检测
+ public static final int EM_SCENE_LETRACK = 23; // "LeTrack" 民用简易跟踪
+ public static final int EM_SCENE_SCR = 24; // "SCR"打靶相机
+ public static final int EM_SCENE_STEREO_VISION = 25; // "StereoVision"立体视觉(双目)
+ public static final int EM_SCENE_HUMANDETECT = 26; // "HumanDetect"人体检测
+ public static final int EM_SCENE_FACEANALYSIS = 27; // "FaceAnalysis" 人脸分析(同时支持人脸检测、目标识别、人脸属性等综合型业务)
+ public static final int EM_SCENE_XRAY_DETECTION = 28; // "XRayDetection" X光检测
+ public static final int EM_SCENE_STEREO_NUMBER = 29; // "StereoNumber" 双目相机客流量统计
+ public static final int EM_SCENE_CROWD_DISTRI_MAP = 30; // "CrowdDistriMap" 人群分布图
+ public static final int EM_SCENE_CLASS_OBJECTDETECT = 31; // "ObjectDetect"目标检测
+
+ public static final int EM_SCENE_FACEATTRIBUTE = 32; // "FaceAttribute" IVSS人脸检测
+ public static final int EM_SCENE_FACECOMPARE = 33; // "FaceCompare" IVSS目标识别
+ public static final int EM_SCENE_STEREO_BEHAVIOR = 34; // "StereoBehavior" 立体行为分析(典型场景ATM舱)
+ public static final int EM_SCENE_INTELLICITYMANAGER = 35;// "IntelliCityMgr" 智慧城管
+ public static final int EM_SCENE_PROTECTIVECABIN = 36; // "ProtectiveCabin" 防护舱(ATM舱内)
+ public static final int EM_SCENE_AIRPLANEDETECT = 37; // "AirplaneDetect" 飞机行为检测
+ public static final int EM_SCENE_CROWDPOSTURE = 38; // "CrowdPosture" 人群态势(人群分布图服务)
+ public static final int EM_SCENE_PHONECALLDETECT = 39; // "PhoneCallDetect" 打电话检测
+ public static final int EM_SCENE_SMOKEDETECTION = 40; // "SmokeDetection" 烟雾检测
+ public static final int EM_SCENE_BOATDETECTION = 41; // "BoatDetection" 船只检测
+ public static final int EM_SCENE_SMOKINGDETECT = 42; // "SmokingDetect" 吸烟检测
+ public static final int EM_SCENE_WATERMONITOR = 43; // "WaterMonitor" 水利监测
+ public static final int EM_SCENE_GENERATEGRAPHDETECTION = 44; // GenerateGraphDetection 生成图规则
+ public static final int EM_SCENE_TRAFFIC_PARK = 45; // "TrafficPark" 交通停车
+ public static final int EM_SCENE_OPERATEMONITOR = 46; // "OperateMonitor" 作业检测
+ public static final int EM_SCENE_INTELLI_RETAIL = 47; // "IntelliRetail" 智慧零售大类
+ public static final int EM_SCENE_CLASSROOM_ANALYSE = 48; // "ClassroomAnalyse" 教育智慧课堂
+ public static final int EM_SCENE_FEATURE_ABSTRACT = 49; // "FeatureAbstract" 特征向量提取大类
+ public static final int EM_SCENE_FACEBODY_DETECT = 50; // "FaceBodyDetect"人体检测
+ public static final int EM_SCENE_FACEBODY_ANALYSE = 51; // "FaceBodyAnalyse"人体识别
+ public static final int EM_SCENE_VEHICLES_DISTRI = 52; // "VehiclesDistri"车辆密度
+ public static final int EM_SCENE_INTELLI_BREED = 53; // "IntelliBreed" 智慧养殖检测
+ public static final int EM_SCENE_INTELLI_PS = 54;
+ public static final int EM_SCENE_ELECTRIC_DETECT = 55; // "ElectricDetect" 电力检测
+ public static final int EM_SCENE_RADAR_DETECT = 56; // "RadarDetect" 雷检检测
+ public static final int EM_SCENE_PARKINGSPACE=57; // "ParkingSpace" 车位检测大类
+ public static final int EM_SCENE_INTELLI_FINANCE = 58; // "IntelliFinance" 智慧金融
+ public static final int EM_SCENE_CROWD_ABNORMAL = 59; // "CrowdAbnormal"
+ public static final int EM_SCENE_ANATOMYTEMP_DETECT = 60; // "AnatomyTempDetect" 超温检测
+ public static final int EM_SCENE_WEATHER_MONITOR = 61; // "WeatherMonitor"天气监控
+ public static final int EM_SCENE_ELEVATOR_ACCESS_CONTROL = 62;// "ElevatorAccessControl" 电梯门禁
+ public static final int EM_SCENE_BREAK_RULE_BUILDING = 63; // "BreakRuleBuilding"违章建筑
+ public static final int EM_SCENE_PANORAMA_TRAFFIC = 64; // "PanoramaTraffic"全景交通
+ public static final int EM_SCENE_PORTRAIT_DETECT = 65; // "PortraitDetect"人像检测
+ public static final int EM_SCENE_CONVEY_OR_BLOCK = 66; // "ConveyorBlock" 传送带阻塞
+ public static final int EM_SCENE_KITCHEN_ANIMAL = 67; // "KitchenAnimal" 厨房有害动物检测
+ public static final int EM_SCENE_ALLSEEINGEYE = 68; // "AllSeeingEye" 万物检测
+ public static final int EM_SCENE_DRIVE = 69; // "Drive" 驾驶行为分析
+ public static final int EM_SCENE_DRIVEASSISTANT = 70; // "DriveAssistant" 高级驾驶辅助系统
+ public static final int EM_SCENE_INCABINMONITOR = 71; // "InCabinMonitor" 车内驾驶舱监测
+ public static final int EM_SCENE_BLINDSPOTDETECTION = 72; // "BlindSpotDetection" 盲区检测
+ public static final int EM_SCENE_CONVERYER_BELT = 73; // "ConveyerBelt" 传送带检测
+ public static final int EM_SCENE_INTELLI_LOGISTICS = 74; // "IntelliLogistics" 智慧物流
+ public static final int EM_SCENE_SMOKE_FIRE = 75; // "SmokeFire" 烟火检测
+ public static final int EM_SCENE_OBJECT_MONITOR = 76; // "ObjectMonitor" 物品监控
+ public static final int EM_SCENE_FIRE_FACILITIES = 77; // "FireFacilities" 消防设施检测
+ public static final int EM_SCENE_FIRE_CONTROL = 78; // "IntelliFireControl" 智慧消防
+ public static final int EM_SCENE_INTELLI_PARKING = 79; // "IntelliParking" 智能停车
+ public static final int EM_SCENE_FINANCE_REGULATION = 80; // "FinanceRegulation" 金融常规
+ public static final int EM_SCENE_ENERGY = 81; // "Energy" 智慧能源
+ public static final int EM_SCENE_FIRE_CONTROL_EX = 82; // "FireControl" 智慧消防
+ public static final int EM_SCENE_ANIMAL_DETECTION = 83; // "AnimalDetection" 动物检测
+ public static final int EM_SCENE_FIRE_CONTROL_MONITOR = 84; // "FireControlMonitor" 火警监控
+ public static final int EM_SCENE_PROTECTIVE_SUIT = 85; // "ProtectiveSuit" 防护服或工作服检测
+ public static final int EM_SCENE_FISH_MONITOR = 86; // "FishMonitor" 鱼群监测
+ public static final int EM_SCENE_SHOPTRUCK_DETECT = 87; // "ShopTruckDetect" 工程车检测
+
+ }
+
+ public static class EM_SCENE_CLASS_TYPE extends SdkStructure
+ {
+
+ public static final int EM_SCENE_CLASS_UNKNOW = 0; // 未知
+ public static final int EM_SCENE_CLASS_NORMAL = 1; // "Normal" 普通场景
+ public static final int EM_SCENE_CLASS_TRAFFIC = 2; // "Traffic" 交通场景
+ public static final int EM_SCENE_CLASS_TRAFFIC_PATROL = 3; // "TrafficPatrol" 交通巡视
+ public static final int EM_SCENE_CLASS_FACEDETECTION = 4; // "FaceDetection" 人脸检测/目标识别
+ public static final int EM_SCENE_CLASS_ATM = 5; // "ATM"
+ public static final int EM_SENCE_CLASS_INDOOR = 6; // "Indoor" 室内行为分析,和普通规则相同,对室内场景的算法优化版
+ public static final int EM_SENCE_CLASS_FACERECOGNITION = 7; // "FaceRecognition" 目标识别
+ public static final int EM_SENCE_CLASS_PS = 8;
+ public static final int EM_SENCE_CLASS_NUMBERSTAT = 9; // "NumberStat" 客流量统计
+ public static final int EM_SENCE_CLASS_HEAT_MAP = 10; // "HeatMap" 热度图
+ public static final int EM_SENCE_CLASS_VIDEODIAGNOSIS = 11; // "VideoDiagnosis" 视频诊断
+ public static final int EM_SENCE_CLASS_VEHICLEANALYSE = 12; // "VehicleAnalyse" 车辆特征检测分析
+ public static final int EM_SENCE_CLASS_COURSERECORD = 13; // "CourseRecord" 自动录播
+ public static final int EM_SENCE_CLASS_VEHICLE = 14; // "Vehicle" 车载场景(车载行业用,不同于智能交通的Traffic)
+ public static final int EM_SENCE_CLASS_STANDUPDETECTION = 15; // "StandUpDetection" 起立检测
+ public static final int EM_SCENE_CLASS_GATE = 16; // "Gate" 卡口
+ public static final int EM_SCENE_CLASS_SDFACEDETECTION = 17; // "SDFaceDetect" 多预置点人脸检测,配置一条规则但可以在不同预置点下生效
+ public static final int EM_SCENE_CLASS_HEAT_MAP_PLAN = 18; // "HeatMapPlan" 球机热度图计划
+ public static final int EM_SCENE_CLASS_NUMBERSTAT_PLAN = 19; // "NumberStatPlan" 球机客流量统计计划
+ public static final int EM_SCENE_CLASS_ATMFD = 20; // "ATMFD"金融人脸检测,包括正常人脸、异常人脸、相邻人脸、头盔人脸等针对ATM场景特殊优化
+ public static final int EM_SCENE_CLASS_HIGHWAY = 21; // "Highway" 高速交通事件检测
+ public static final int EM_SCENE_CLASS_CITY = 22; // "City" 城市交通事件检测
+ public static final int EM_SCENE_CLASS_LETRACK = 23; // "LeTrack" 民用简易跟踪
+ public static final int EM_SCENE_CLASS_SCR = 24; // "SCR" 打靶相机
+ public static final int EM_SCENE_CLASS_STEREO_VISION = 25; // "StereoVision" 立体视觉(双目)
+ public static final int EM_SCENE_CLASS_HUMANDETECT = 26; // "HumanDetect"人体检测
+ public static final int EM_SCENE_CLASS_FACEANALYSIS = 27; // "FaceAnalysis" 人脸分析
+ public static final int EM_SCENE_CLASS_XRAY_DETECTION = 28; // "XRayDetection" X光检测
+ public static final int EM_SCENE_CLASS_STEREO_NUMBER = 29; // "StereoNumber" 双目相机客流量统计
+ public static final int EM_SCENE_CLASS_CROWDDISTRIMAP = 30; // "CrowdDistriMap"人群分布图
+ public static final int EM_SCENE_CLASS_OBJECTDETECT = 31; // "ObjectDetect"目标检测
+ public static final int EM_SCENE_CLASS_FACEATTRIBUTE = 32; // "FaceAttribute" IVSS人脸检测
+ public static final int EM_SCENE_CLASS_FACECOMPARE = 33; // "FaceCompare" IVSS目标识别
+ public static final int EM_SCENE_CLASS_STEREO_BEHAVIOR = 34; // "StereoBehavior" 立体行为分析(典型场景ATM舱)
+ public static final int EM_SCENE_CLASS_INTELLICITYMANAGER = 35; // "IntelliCityMgr" 智慧城管
+ public static final int EM_SCENE_CLASS_PROTECTIVECABIN = 36; // "ProtectiveCabin" 防护舱(ATM舱内)
+ public static final int EM_SCENE_CLASS_AIRPLANEDETECT = 37; // "AirplaneDetect" 飞机行为检测
+ public static final int EM_SCENE_CLASS_CROWDPOSTURE = 38; // "CrowdPosture" 人群态势(人群分布图服务)
+ public static final int EM_SCENE_CLASS_PHONECALLDETECT = 39; // "PhoneCallDetect" 打电话检测
+ public static final int EM_SCENE_CLASS_SMOKEDETECTION = 40; // "SmokeDetection" 烟雾检测
+ public static final int EM_SCENE_CLASS_BOATDETECTION = 41; // "BoatDetection" 船只检测
+ public static final int EM_SCENE_CLASS_SMOKINGDETECT = 42; // "SmokingDetect" 吸烟检测
+ public static final int EM_SCENE_CLASS_WATERMONITOR = 43; // "WaterMonitor" 水利监测
+ public static final int EM_SCENE_CLASS_GENERATEGRAPHDETECTION = 44;// "GenerateGraphDetection" 生成图规则
+ public static final int EM_SCENE_CLASS_TRAFFIC_PARK = 45; // "TrafficPark" 交通停车
+ public static final int EM_SCENE_CLASS_OPERATEMONITOR = 46; // "OperateMonitor" 作业检测
+ public static final int EM_SCENE_CLASS_INTELLI_RETAIL = 47; // IntelliRetail" 智慧零售大类
+ public static final int EM_SCENE_CLASS_CLASSROOM_ANALYSE = 48;// "ClassroomAnalyse" 教育智慧课堂
+ public static final int EM_SCENE_CLASS_FEATURE_ABSTRACT = 49; // "FeatureAbstract" 特征向量提取大类
+ public static final int EM_SCENE_CLASS_FACEBODY_DETECT = 50; // "FaceBodyDetect" 人像检测大类
+ public static final int EM_SCENE_CLASS_FACEBODY_ANALYSE = 51;// "FaceBodyAnalyse"人像识别大类
+ public static final int EM_SCENE_CLASS_VEHICLES_DISTRI = 52; // "VehiclesDistri" 车辆密度
+ public static final int EM_SCENE_CLASS_INTELLI_BREED = 53; // "IntelliBreed"智慧养殖检测
+ public static final int EM_SCENE_CLASS_INTELLI_PS = 54;
+ public static final int EM_SCENE_CLASS_ELECTRIC_DETECT = 55; // "ElectricDetect" 电力检测
+ public static final int EM_SCENE_CLASS_RADAR_DETECT = 56; // "RadarDetect"雷达检测
+ public static final int EM_SCENE_CLASS_PARKINGSPACE = 57; // "ParkingSpace" 车位检测大类
+ public static final int EM_SCENE_CLASS_INTELLI_FINANCE = 58; // "IntelliFinance"智慧金融
+ public static final int EM_SCENE_CLASS_CROWD_ABNORMAL=59; // "CrowdAbnormal" 人群异常检测
+ public static final int EM_SCENE_CLASS_ANATOMYTEMP_DETECT = 60; // "AnatomyTempDetect"
+ public static final int EM_CLASS_WEATHER_MONITOR = 61; // 天气监控 "WeatherMonitor"
+ public static final int EM_SCENE_CLASS_ELEVATOR_ACCESS_CONTROL = 62; // "ElevatorAccessControl" 电梯门禁
+ public static final int EM_SCENE_CLASS_BREAK_RULE_BUILDING = 63; // "BreakRuleBuilding"违章建筑
+ public static final int EM_SCENE_CLASS_PANORAMA_TRAFFIC = 64; // "PanoramaTraffic"全景交通
+ public static final int EM_SCENE_CLASS_PORTRAIT_DETECT = 65; // "PortraitDetect"人像检测
+ public static final int EM_SCENE_CLASS_CONVEY_OR_BLOCK = 66; // "ConveyorBlock" 传送带阻塞
+ public static final int EM_SCENE_CLASS_KITCHEN_ANIMAL = 67; // "KitchenAnimal" 厨房有害动物检测
+ public static final int EM_SCENE_CLASS_ALLSEEINGEYE = 68; // "AllSeeingEye" 万物检测
+ public static final int EM_SCENE_CLASS_DRIVE = 69; // "Drive" 驾驶行为分析
+ public static final int EM_SCENE_CLASS_DRIVEASSISTANT = 70; // "DriveAssistant" 高级驾驶辅助系统
+ public static final int EM_SCENE_CLASS_INCABINMONITOR = 71; // "InCabinMonitor" 车内驾驶舱监测
+ public static final int EM_SCENE_CLASS_BLINDSPOTDETECTION =72; // "BlindSpotDetection" 盲区检测
+ public static final int EM_SCENE_CLASS_CONVERYER_BELT = 73; // "ConveyerBelt" 传送带检测
+ public static final int EM_SCENE_CLASS_INTELLI_LOGISTICS = 74; // "IntelliLogistics" 智慧物流
+ public static final int EM_SCENE_CLASS_SMOKE_FIRE = 75; // "SmokeFire" 烟火检测
+ public static final int EM_SCENE_CLASS_OBJECT_MONITOR = 76; // "ObjectMonitor" 物品监控
+ public static final int EM_SCENE_CLASS_FIRE_FACILITIES = 77; // "FireFacilities" 消防设施检测
+ public static final int EM_SCENE_CLASS_FIRE_CONTROL = 78; // "IntelliFireControl" 智慧消防
+ public static final int EM_SCENE_CLASS_INTELLI_PARKING = 79; // "IntelliParking" 智能停车
+ public static final int EM_SCENE_CLASS_FINANCE_REGULATION = 80; // "FinanceRegulation" 金融常规
+ public static final int EM_SCENE_CLASS_ENERGY = 81; // "Energy" 智慧能源
+ public static final int EM_SCENE_CLASS_FIRE_CONTROL_EX = 82; // "FireControl" 智慧消防
+ public static final int EM_SCENE_CLASS_ANIMAL_DETECTION = 83; // "AnimalDetection" 动物检测
+ public static final int EM_SCENE_CLASS_FIRE_CONTROL_MONITOR = 84; // "FireControlMonitor" 火警监控
+ public static final int EM_SCENE_CLASS_PROTECTIVE_SUIT =85; // "ProtectiveSuit" 防护服或工作服检测
+ public static final int EM_SCENE_CLASS_FISH_MONITOR = 86; // "FishMonitor" 鱼群监测
+ public static final int EM_SCENE_CLASS_SHOPTRUCK_DETECT = 87; // "ShopTruckDetect"工程车检测
+ }
+
+ //区域顶点信息
+ public static class CFG_POLYGON extends SdkStructure
+ {
+ public int nX;//0~8191
+ public int nY;
+ }
+
+ //区域信息
+ public static class CFG_REGION extends SdkStructure
+ {
+ public int nPointNum;
+ public CFG_POLYGON[] stuPolygon = (CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYGON_NUM);
+ }
+
+ public static class CFG_SIZE_Attribute extends Union
+ {
+ public float nWidth;//宽
+ public float nArea;//面积
+ }
+
+ //Size
+ public static class CFG_SIZE extends SdkStructure
+ {
+ public CFG_SIZE_Attribute attr=new CFG_SIZE_Attribute();
+ public float nHeight;//高
+ }
+
+ public static class NET_SIZE extends SdkStructure
+ {
+ public int nWidth; // 宽度
+ public int nHeight; // 高度
+ }
+
+ //校准框信息
+ public static class CFG_CALIBRATEBOX_INFO extends SdkStructure
+ {
+ public CFG_POLYGON stuCenterPoint;//校准框中心点坐标(点的坐标归一化到[0,8191]区间)
+ public float fRatio;//相对基准校准框的比率(比如1表示基准框大小,0.5表示基准框大小的一半)
+ }
+
+ //尺寸过滤器
+ public static class CFG_SIZEFILTER_INFO extends SdkStructure
+ {
+ public int nCalibrateBoxNum;//校准框个数
+ public CFG_CALIBRATEBOX_INFO[] stuCalibrateBoxs = (CFG_CALIBRATEBOX_INFO[])new CFG_CALIBRATEBOX_INFO().toArray(MAX_CALIBRATEBOX_NUM);//校准框(远端近端标定模式下有效)
+ public byte bMeasureModeEnable;//计量方式参数是否有效, 类型bool, 取值0或1
+ public byte bMeasureMode;//计量方式,0-像素,不需要远端、近端标定,1-实际长度,单位:米,2-远端近端标定后的像素
+ public byte bFilterTypeEnable;//过滤类型参数是否有效, 类型bool, 取值0或1
+ // ByArea,ByRatio仅作兼容,使用独立的ByArea和ByRatio选项代替 2012/03/06
+ public byte bFilterType;//过滤类型:0:"ByLength",1:"ByArea",2"ByWidthHeight"
+ public byte[] bReserved=new byte[2]; // 保留字段
+ public byte bFilterMinSizeEnable;//物体最小尺寸参数是否有效, 类型bool, 取值0或1
+ public byte bFilterMaxSizeEnable;//物体最大尺寸参数是否有效, 类型bool, 取值0或1
+ public CFG_SIZE stuFilterMinSize;//物体最小尺寸"ByLength"模式下表示宽高的尺寸,"ByArea"模式下宽表示面积,高无效(远端近端标定模式下表示基准框的宽高尺寸)。
+ public CFG_SIZE stuFilterMaxSize;//物体最大尺寸"ByLength"模式下表示宽高的尺寸,"ByArea"模式下宽表示面积,高无效(远端近端标定模式下表示基准框的宽高尺寸)。
+ public byte abByArea;//类型bool, 取值0或1
+ public byte abMinArea;//类型bool, 取值0或1
+ public byte abMaxArea;//类型bool, 取值0或1
+ public byte abMinAreaSize;//类型bool, 取值0或1
+ public byte abMaxAreaSize;//类型bool, 取值0或1
+ public byte bByArea;//是否按面积过滤通过能力ComplexSizeFilter判断是否可用, 类型bool, 取值0或1
+ public byte[] bReserved1 = new byte[2]; // 补齐
+ public float nMinArea;//最小面积
+ public float nMaxArea;//最大面积
+ public CFG_SIZE stuMinAreaSize;//最小面积矩形框尺寸"计量方式"为"像素"时,表示最小面积矩形框的宽高尺寸;"计量方式"为"远端近端标定模式"时,表示基准框的最小宽高尺寸;
+ public CFG_SIZE stuMaxAreaSize;//最大面积矩形框尺寸,同上
+ public byte abByRatio;//类型bool, 取值0或1
+ public byte abMinRatio;//类型bool, 取值0或1
+ public byte abMaxRatio;//类型bool, 取值0或1
+ public byte abMinRatioSize;//类型bool, 取值0或1
+ public byte abMaxRatioSize;//类型bool, 取值0或1
+ public byte bByRatio;//是否按宽高比过滤通过能力ComplexSizeFilter判断是否可用, 类型bool, 取值0或1
+ public byte[] bReserved2 = new byte[6];
+ public double dMinRatio;//最小宽高比
+ public double dMaxRatio;//最大宽高比
+ public CFG_SIZE stuMinRatioSize;//最小宽高比矩形框尺寸,最小宽高比对应矩形框的宽高尺寸。
+ public CFG_SIZE stuMaxRatioSize;//最大宽高比矩形框尺寸,同上
+ public byte nAreaCalibrateBoxNum;//面积校准框个数
+ public CFG_CALIBRATEBOX_INFO[] stuAreaCalibrateBoxs = (CFG_CALIBRATEBOX_INFO[])new CFG_CALIBRATEBOX_INFO().toArray(MAX_CALIBRATEBOX_NUM);//面积校准框
+ public byte nRatioCalibrateBoxs;//宽高校准框个数
+ public CFG_CALIBRATEBOX_INFO[] stuRatioCalibrateBoxs = (CFG_CALIBRATEBOX_INFO[])new CFG_CALIBRATEBOX_INFO().toArray(MAX_CALIBRATEBOX_NUM);//宽高校准框
+ public byte abBySize;//长宽过滤使能参数是否有效, 类型bool, 取值0或1
+ public byte bBySize;//长宽过滤使能, 类型bool, 取值0或1
+ public byte[] bReserved3=new byte[6]; // 保留字段
+ }
+
+ //各种物体特定的过滤器
+ public static class CFG_OBJECT_SIZEFILTER_INFO extends SdkStructure
+ {
+ public byte[] szObjectType = new byte[MAX_NAME_LEN];//物体类型
+ public CFG_SIZEFILTER_INFO stSizeFilter;//对应的尺寸过滤器
+ }
+
+ //特殊区域的属性类型
+ public static class EM_SEPCIALREGION_PROPERTY_TYPE extends SdkStructure
+ {
+ public static final int EM_SEPCIALREGION_PROPERTY_TYPE_HIGHLIGHT = 1;//高亮,键盘检测区域具有此特性
+ public static final int EM_SEPCIALREGION_PROPERTY_TYPE_REGULARBLINK = 2; //规律的闪烁,插卡区域具有此特性
+ public static final int EM_SEPCIALREGION_PROPERTY_TYPE_IREGULARBLINK = 3; //不规律的闪烁,屏幕区域具有此特性
+ public static final int EM_SEPCIALREGION_PROPERTY_TYPE_NUM = 4;
+ }
+
+ //特殊检测区,是指从检测区中区分出来,有特殊检测属性的区域
+ public static class CFG_SPECIALDETECT_INFO extends SdkStructure
+ {
+ public int nDetectNum;//检测区域顶点数
+ public CFG_POLYGON[] stDetectRegion = (CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYGON_NUM);//检测区域
+ public int nPropertyNum;//特殊检测区属性个数
+ public int[] nPropertys = new int[EM_SEPCIALREGION_PROPERTY_TYPE.EM_SEPCIALREGION_PROPERTY_TYPE_NUM];//特殊检测区属性
+ }
+
+ //各类物体的子类型
+ public static class CFG_CATEGORY_TYPE extends SdkStructure
+ {
+ public static final int CFG_CATEGORY_TYPE_UNKNOW = 0; //未知类型
+ //车型相关子类别
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_MOTOR = 1; //"Motor"机动车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_NON_MOTOR = 2; //"Non-Motor"非机动车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_BUS = 3; //"Bus"公交车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_BICYCLE = 4; //"Bicycle"自行车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_MOTORCYCLE = 5; //"Motorcycle"摩托车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_UNLICENSEDMOTOR = 6; //"UnlicensedMotor":无牌机动车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_LARGECAR = 7; //"LargeCar"大型汽车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_MICROCAR = 8; //"MicroCar"小型汽车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_EMBASSYCAR = 9; //"EmbassyCar"使馆汽车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_MARGINALCAR = 10; //"MarginalCar"领馆汽车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_AREAOUTCAR = 11; //"AreaoutCar"境外汽车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_FOREIGNCAR = 12; //"ForeignCar"外籍汽车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_DUALTRIWHEELMOTORCYCLE = 13; //"DualTriWheelMotorcycle"两、三轮摩托车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_LIGHTMOTORCYCLE = 14; //"LightMotorcycle"轻便摩托车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_EMBASSYMOTORCYCLE = 15 ; //"EmbassyMotorcycle"使馆摩托车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_MARGINALMOTORCYCLE = 16; //"MarginalMotorcycle"领馆摩托车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_AREAOUTMOTORCYCLE = 17; //"AreaoutMotorcycle"境外摩托车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_FOREIGNMOTORCYCLE = 18; //"ForeignMotorcycle"外籍摩托车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_FARMTRANSMITCAR = 19; //"FarmTransmitCar"农用运输车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_TRACTOR = 20; //"Tractor"拖拉机
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_TRAILER = 21; //"Trailer"挂车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_COACHCAR = 22; //"CoachCar"教练汽车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_COACHMOTORCYCLE = 23; //"CoachMotorcycle"教练摩托车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_TRIALCAR = 24; //"TrialCar"试验汽车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_TRIALMOTORCYCLE = 25; //"TrialMotorcycle"试验摩托车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_TEMPORARYENTRYCAR = 26; //"TemporaryEntryCar"临时入境汽车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_TEMPORARYENTRYMOTORCYCLE = 27; //"TemporaryEntryMotorcycle"临时入境摩托车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_TEMPORARYSTEERCAR = 28; //"TemporarySteerCar"临时行驶车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_PASSENGERCAR = 29; //"PassengerCar"客车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_LARGETRUCK = 30; //"LargeTruck"大货车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_MIDTRUCK =31 ; //"MidTruck"中货车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_SALOONCAR = 32; //"SaloonCar"轿车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_MICROBUS = 33; //"Microbus"面包车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_MICROTRUCK = 34; //"MicroTruck"小货车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_TRICYCLE = 35; //"Tricycle"三轮车
+ public static final int CFG_CATEGORY_VEHICLE_TYPE_PASSERBY = 36; //"Passerby"行人
+ //车牌相关子类别
+ public static final int CFG_CATEGORY_PLATE_TYPE_NORMAL = 37; //"Normal"蓝牌黑字
+ public static final int CFG_CATEGORY_PLATE_TYPE_YELLOW = 38; //"Yellow"黄牌
+ public static final int CFG_CATEGORY_PLATE_TYPE_DOUBLEYELLOW = 39; //"DoubleYellow"双层黄尾牌
+ public static final int CFG_CATEGORY_PLATE_TYPE_POLICE = 40; //"Police"警牌
+ public static final int CFG_CATEGORY_PLATE_TYPE_WJ = 41; //
+ public static final int CFG_CATEGORY_PLATE_TYPE_OUTERGUARD = 42; //
+ public static final int CFG_CATEGORY_PLATE_TYPE_DOUBLEOUTERGUARD = 43; //
+ public static final int CFG_CATEGORY_PLATE_TYPE_SAR = 44; //"SAR"港澳特区号牌
+ public static final int CFG_CATEGORY_PLATE_TYPE_TRAINNING = 45; //"Trainning"教练车号牌
+ public static final int CFG_CATEGORY_PLATE_TYPE_PERSONAL = 46; //"Personal"个性号牌
+ public static final int CFG_CATEGORY_PLATE_TYPE_AGRI = 47; //"Agri"农用牌
+ public static final int CFG_CATEGORY_PLATE_TYPE_EMBASSY = 48; //"Embassy"使馆号牌
+ public static final int CFG_CATEGORY_PLATE_TYPE_MOTO = 49; //"Moto"摩托车号牌
+ public static final int CFG_CATEGORY_PLATE_TYPE_TRACTOR = 50; //"Tractor"拖拉机号牌
+ public static final int CFG_CATEGORY_PLATE_TYPE_OFFICIALCAR = 51; //"OfficialCar"公务车
+ public static final int CFG_CATEGORY_PLATE_TYPE_PERSONALCAR = 52; //"PersonalCar"私家车
+ public static final int CFG_CATEGORY_PLATE_TYPE_WARCAR = 53; //
+ public static final int CFG_CATEGORY_PLATE_TYPE_OTHER = 54; //"Other"其他号牌
+ public static final int CFG_CATEGORY_PLATE_TYPE_CIVILAVIATION = 55; //"Civilaviation"民航号牌
+ public static final int CFG_CATEGORY_PLATE_TYPE_BLACK = 56; //"Black"黑牌
+ }
+
+ //不同区域各种类型物体的检测模块配置
+ public static class CFG_MODULE_INFO extends SdkStructure
+ {
+ // 信息
+ public byte[] szObjectType = new byte[MAX_NAME_LEN];//默认物体类型,详见"支持的检测物体类型列表"
+ public byte bSnapShot;//是否对识别物体抓图,类型bool,取值0或1
+ public byte bSensitivity;//灵敏度,取值1-10,值越小灵敏度越低
+ public byte bMeasureModeEnable;//计量方式参数是否有效,类型bool,取值0或1
+ public byte bMeasureMode;//计量方式,0-像素,不需要远端、近端标定,1-实际长度,单位:米,2-远端近端标定后的像素
+ public int nDetectRegionPoint;//检测区域顶点数
+ public CFG_POLYGON[] stuDetectRegion = (CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYGON_NUM);//检测区域
+ public int nTrackRegionPoint;//跟踪区域顶点数
+ public CFG_POLYGON[] stuTrackRegion = (CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYGON_NUM);//跟踪区域
+ public byte bFilterTypeEnable;//过滤类型参数是否有效,类型bool,取值0或1
+ // ByArea,ByRatio仅作兼容使枚懒⒌腂yArea和ByRatio选项代替 2012/03/06
+ public byte nFilterType;//过滤类型:0:"ByLength",1:"ByArea",2:"ByWidthHeight",3:"ByRatio":
+ public byte bBackgroudEnable;//区域的背景类型参数是否有效,类型bool,取值0或1
+ public byte bBackgroud;//区域的背景类型,0-普通类型,1-高光类型
+ public byte abBySize;//长宽过滤使能参数是否有效,类型bool,取值0或1
+ public byte bBySize;//长宽过滤使能,类型bool,取值0或1
+ public byte bFilterMinSizeEnable;//物体最小尺寸参数是否有效,类型bool,取值0或1
+ public byte bFilterMaxSizeEnable;//物体最大尺寸参数是否有效,类型bool,取值0或1
+ public CFG_SIZE stuFilterMinSize;//物体最小尺寸"ByLength"模式下表示宽高的尺寸,"ByArea"模式下宽表示面积,高无效。
+ public CFG_SIZE stuFilterMaxSize;//物体最大尺寸"ByLength"模式下表示宽高的尺寸,"ByArea"模式下宽表示面积,高无效。
+ public int nExcludeRegionNum;//排除区域数
+ public CFG_REGION[] stuExcludeRegion = (CFG_REGION[])new CFG_REGION().toArray(MAX_EXCLUDEREGION_NUM);//排除区域
+ public int nCalibrateBoxNum;//校准框个数
+ public CFG_CALIBRATEBOX_INFO[] stuCalibrateBoxs = (CFG_CALIBRATEBOX_INFO[])new CFG_CALIBRATEBOX_INFO().toArray(MAX_CALIBRATEBOX_NUM);//校准框(远端近端标定模式下有效)
+ public byte bAccuracy;//检测精度是否有效,类型bool,取值0或1
+ public byte byAccuracy;//检测精度
+ public byte bMovingStep;//算法移动步长是否有效,类型bool,取值0或1
+ public byte byMovingStep;//算法移动步长
+ public byte bScalingFactor;//算法缩放因子是否有效,类型bool,取值0或1
+ public byte byScalingFactor;//算法缩放因子
+ public byte[] bReserved2 = new byte[1];//保留字段
+ public byte abDetectBalance;//漏检和误检平衡参数是否有效,类型bool,取值0或1
+ public int nDetectBalance;//漏检和误检平衡0-折中模式(默认)1-漏检更少2-误检更少
+ public byte abByRatio;//类型bool,取值0或1
+ public byte abMinRatio;;//类型bool,取值0或1
+ public byte abMaxRatio;;//类型bool,取值0或1
+ public byte abMinAreaSize;;//类型bool,取值0或1
+ public byte abMaxAreaSize;;//类型bool,取值0或1
+ public byte bByRatio;//是否按宽高比过滤通过能力ComplexSizeFilter判断是否可用可以和nFilterType复用,类型bool,取值0或1
+ public byte byLowDetectSensitivity; // 车辆检测低灵敏度, 取值1~100
+ public byte byHighDetectSensitivity;// 车辆检测高灵敏度, 取值1~100
+ public double dMinRatio;//最小宽高比
+ public double dMaxRatio;//最大宽高比
+ public CFG_SIZE stuMinAreaSize;//最小面积矩形框尺寸"计量方式"为"像素"时,表示最小面积矩形框的宽高尺寸;"计量方式"为"远端近端标定模式"时,表示基准框的最小宽高尺寸;
+ public CFG_SIZE stuMaxAreaSize;//最大面积矩形框尺寸,同上
+ public byte abByArea;//类型bool,取值0或1
+ public byte abMinArea;//类型bool,取值0或1
+ public byte abMaxArea;//类型bool,取值0或1
+ public byte abMinRatioSize;//类型bool,取值0或1
+ public byte abMaxRatioSize;//类型bool,取值0或1
+ public byte bByArea;//是否按面积过滤通过能力ComplexSizeFilter判断是否可用可以和nFilterType复用,类型bool,取值0或1
+ public byte[] bReserved3 = new byte[2];
+ public float nMinArea;//最小面积
+ public float nMaxArea;//最大面积
+ public CFG_SIZE stuMinRatioSize;//最小宽高比矩形框尺寸,最小宽高比对应矩形框的宽高尺寸。
+ public CFG_SIZE stuMaxRatioSize;//最大宽高比矩形框尺寸,同上
+ public int nAreaCalibrateBoxNum;//面积校准框个数
+ public CFG_CALIBRATEBOX_INFO[] stuAreaCalibrateBoxs = (CFG_CALIBRATEBOX_INFO[])new CFG_CALIBRATEBOX_INFO().toArray(MAX_CALIBRATEBOX_NUM);//面积校准框
+ public int nRatioCalibrateBoxs;//比例校准框个数
+ public CFG_CALIBRATEBOX_INFO[] stuRatioCalibrateBoxs = (CFG_CALIBRATEBOX_INFO[])new CFG_CALIBRATEBOX_INFO().toArray(MAX_CALIBRATEBOX_NUM);//比例校准框个数
+ public byte bAntiDisturbance;//是否开启去扰动模块,类型bool,取值0或1
+ public byte bBacklight;//是否有逆光,类型bool,取值0或1
+ public byte bShadow;//是否有阴影,类型bool,取值0或1
+ public byte bContourAssistantTrack;//是否开启轮廓辅助跟踪,例:在目标识别时可以通过跟踪人体来辅助识别脸,类型bool,取值0或1
+ public int nPtzPresetId;//云台预置点,0~255,0表示固定场景,忽略预置点。大于0表示在此预置点时模块有效
+ public int nObjectFilterNum;//物体特定的过滤器个数
+ public CFG_OBJECT_SIZEFILTER_INFO[] stObjectFilter= (CFG_OBJECT_SIZEFILTER_INFO[])new CFG_OBJECT_SIZEFILTER_INFO().toArray(MAX_OBJECT_LIST_SIZE);//物体特定的过滤器信息
+ public int abObjectImageSize; //BOOL类型,取值0或1
+ public CFG_SIZE stObjectImageSize;//保证物体图像尺寸相同,单位是像素,不支持小数,取值:>=0,0表示自动调整大小
+ public int nSpecailDetectNum;//特殊检测区域个数
+ public CFG_SPECIALDETECT_INFO[] stSpecialDetectRegions= (CFG_SPECIALDETECT_INFO[])new CFG_SPECIALDETECT_INFO().toArray(MAX_SPECIALDETECT_NUM);//特殊检测区信息
+ public int nAttribute;//需要识别物体的属性个数, 类型为unsigned int
+ public byte[] szAttributes = new byte[MAX_OBJECT_ATTRIBUTES_SIZE*MAX_NAME_LEN];//需要识别物体的属性列表,“Category”
+ public int abPlateAnalyseMode;//nPlateAnalyseMode是否有效, BOOL类型,取值0或1
+ public int nPlateAnalyseMode;//车牌识别模式,0-只识别车头牌照1-只识别车尾牌照2-车头牌照优先(场景中大部分车均是车头牌照)3-车尾牌照优先(场景中大部分车均是车尾牌照)
+ //szAttributes属性存在"Category"时生效
+ public int nCategoryNum;//需要识别物体的子类型总数
+ public int[] emCategoryType= new int[MAX_CATEGORY_TYPE_NUMBER];//子类型信息, 元素取CFG_CATEGORY_TYPE中的值
+ public byte[] szSceneType = new byte[CFG_COMMON_STRING_16]; // 检测区参数用于的场景类型
+ public CFG_LENGTH_FILETER_INFO stuLengthFilter; // 物体类型过滤器,如果指定新的过滤器以新的为准
+ public boolean bSceneTypeEx; // szSceneTypeEx 是否有效
+ public byte[] szSceneTypeEx=new byte[128]; // 检测区参数用于的场景类型扩展
+ }
+
+ // 计量方式
+ public static class EM_CFG_MEASURE_MODE_TYPE extends SdkStructure
+ {
+ public static final int EM_CFG_NEASURE_MODE_TYPE_UNKNOW=0; // 未知
+ public static final int EM_CFG_NEASURE_MODE_TYPE_PIXEL=1; // 像素
+ public static final int EM_CFG_NEASURE_MODE_TYPE_METRIC=2; // 实际长度
+ };
+
+ // 过滤类型
+ public static class CFG_FILTER_HEIGHT_TYPE extends SdkStructure
+ {
+ public static final int CFG_FILTER_HEIGHT_TYPE_UNKNOW=0; // 未知
+ public static final int CFG_FILTER_HEIGHT_TYPE_BYHEIGHT=1; // 高度
+ };
+
+ // 物体类型长度过滤器
+ public static class CFG_LENGTH_FILETER_INFO extends SdkStructure
+ {
+ public int emMeasureMode; // 计量方式
+ public int emFilterType; // 过滤类型
+ public int nDetectType; // 0:大于且小于 1:大于或等于且小于或等于 2:大于且小于或等于 3:大于或等于且小于
+ public int nMinLen; // 最小检测长度,单位:cm
+ public int nMaxLen; // 最大检测长度,单位:cm
+ };
+
+ public static class CFG_ANALYSEMODULES_INFO extends SdkStructure
+ {
+ public int nMoudlesNum;//检测模块数
+ public CFG_MODULE_INFO[] stuModuleInfo= (CFG_MODULE_INFO[])new CFG_MODULE_INFO().toArray(MAX_ANALYSE_MODULE_NUM);//每个视频输入通道对应的各种类型物体的检测模块配置
+ }
+
+ // CLIENT_FindGroupInfo接口输入参数
+ public static class NET_IN_FIND_GROUP_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public byte[] szGroupId = new byte[NET_COMMON_STRING_64];//人员组ID,唯一标识一组人员,为空表示查询全部人员组信息
+
+ public NET_IN_FIND_GROUP_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 人脸数据类型
+ public static class EM_FACE_DB_TYPE extends SdkStructure
+ {
+ public static final int NET_FACE_DB_TYPE_UNKOWN = 0;
+ public static final int NET_FACE_DB_TYPE_HISTORY = 1; // 历史数据库,存放的是检测出的人脸信息,一般没有包含人脸对应人员信息
+ public static final int NET_FACE_DB_TYPE_BLACKLIST = 2; // 禁止名单数据库
+ public static final int NET_FACE_DB_TYPE_WHITELIST = 3; // 允许名单数据库,废弃
+ public static final int NET_FACE_DB_TYPE_ALARM = 4; // 报警库
+ public static final int NET_FACE_DB_TYPE_PASSERBY = 5; // 路人库
+ }
+
+ // 人员组信息
+ public static class NET_FACERECONGNITION_GROUP_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int emFaceDBType; // 人员组类型,详见EM_FACE_DB_TYPE, 取值为EM_FACE_DB_TYPE中的值
+ public byte[] szGroupId = new byte[NET_COMMON_STRING_64]; // 人员组ID,唯一标识一组人员(不可修改,添加操作时无效)
+ public byte[] szGroupName = new byte[NET_COMMON_STRING_128]; // 人员组名称
+ public byte[] szGroupRemarks = new byte[NET_COMMON_STRING_256]; // 人员组备注信息
+ public int nGroupSize; // 当前组内人员数
+ public int nRetSimilarityCount; // 实际返回的库相似度阈值个数
+ public int[] nSimilarity = new int[MAX_SIMILARITY_COUNT]; // 库相似度阈值,人脸比对高于阈值认为匹配成功
+ public int nRetChnCount; // 实际返回的通道号个数
+ public int[] nChannel = new int[NET_MAX_CAMERA_CHANNEL_NUM]; // 当前组绑定到的视频通道号列表
+ public int[] nFeatureState = new int[MAX_FEATURESTATE_NUM]; // 人脸组建模状态信息:
+ // [0]-准备建模的人员数量,不保证一定建模成功
+ // [1]-建模失败的人员数量,图片不符合算法要求,需要更换图片
+ // [2]-已建模成功人员数量,数据可用于算法进行目标识别
+ // [3]-曾经建模成功,但因算法升级变得不可用的数量,重新建模就可用
+ public int emRegisterDbType; // 注册库类型,详见EM_REGISTER_DB_TYPE
+ public byte[] byReserved1=new byte[4]; // 字节对齐
+ public NET_PASSERBY_DB_CONFIG_INFO stuPasserbyDBConfig; // 路人库配置(选填)
+ public int nGroupSimilarity; // 组相似度阈值,人脸比对高于阈值认为匹配成功
+ public int nMaskSimilarity; // 库口罩相似度阈值,取值范围0-100,可用于口罩检测
+ public NET_FACERECONGNITION_GROUP_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 注册库属性
+ public static class EM_REGISTER_DB_TYPE extends SdkStructure
+ {
+ public static final int EM_REGISTER_DB_TYPE_UNKNOWN = 0; // 未知
+ public static final int EM_REGISTER_DB_TYPE_NORMAL = 1; // 普通库
+ public static final int EM_REGISTER_DB_TYPE_BLACKLIST = 2; // 禁止名单
+ public static final int EM_REGISTER_DB_TYPE_WHITELIST = 3; // 允许名单
+ public static final int EM_REGISTER_DB_TYPE_VIP = 4; //
+ public static final int EM_REGISTER_DB_TYPE_STAFF = 5; // 员工库
+ public static final int EM_REGISTER_DB_TYPE_LEADER = 6; // 领导库
+ }
+
+ // CLIENT_FindGroupInfo接口输出参数
+ public static class NET_OUT_FIND_GROUP_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public Pointer pGroupInfos; // 人员组信息,由用户申请空间, 指向 NET_FACERECONGNITION_GROUP_INFO 的指针
+ public int nMaxGroupNum; // 当前申请的数组大小
+ public int nRetGroupNum; // 设备返回的人员组个数
+
+ public NET_OUT_FIND_GROUP_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 人员组操作枚举
+ public static class EM_OPERATE_FACERECONGNITION_GROUP_TYPE extends SdkStructure
+ {
+ public static final int NET_FACERECONGNITION_GROUP_UNKOWN = 0;
+ public static final int NET_FACERECONGNITION_GROUP_ADD = 1; // 添加人员组信息, 对应结构体为 NET_ADD_FACERECONGNITION_GROUP_INFO
+ public static final int NET_FACERECONGNITION_GROUP_MODIFY = 2; // 修改人员组信息, 对应结构体为 NET_MODIFY_FACERECONGNITION_GROUP_INFO
+ public static final int NET_FACERECONGNITION_GROUP_DELETE = 3; // 删除人员组信息, 对应结构体为 NET_DELETE_FACERECONGNITION_GROUP_INFO
+ }
+
+ // CLIENT_OperateFaceRecognitionGroup 接口输入参数
+ public static class NET_IN_OPERATE_FACERECONGNITION_GROUP extends SdkStructure
+ {
+ public int dwSize;
+ public int emOperateType; // 操作类型, 取值为 EM_OPERATE_FACERECONGNITION_GROUP_TYPE 中的值
+ public Pointer pOPerateInfo; // 相关操作信息,指向void *
+
+ public NET_IN_OPERATE_FACERECONGNITION_GROUP()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // CLIENT_OperateFaceRecognitionGroup接口输出参数
+ public static class NET_OUT_OPERATE_FACERECONGNITION_GROUP extends SdkStructure
+ {
+ public int dwSize;
+ public byte[] szGroupId = new byte[NET_COMMON_STRING_64]; // 新增记录的人员组ID,唯一标识一组人员
+
+ public NET_OUT_OPERATE_FACERECONGNITION_GROUP()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 添加人员组信息
+ public static class NET_ADD_FACERECONGNITION_GROUP_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public NET_FACERECONGNITION_GROUP_INFO stuGroupInfo; // 人员组信息
+
+ public NET_ADD_FACERECONGNITION_GROUP_INFO() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 修改人员组信息
+ public static class NET_MODIFY_FACERECONGNITION_GROUP_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public NET_FACERECONGNITION_GROUP_INFO stuGroupInfo; // 人员组信息
+
+ public NET_MODIFY_FACERECONGNITION_GROUP_INFO() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 删除人员组信息
+ public static class NET_DELETE_FACERECONGNITION_GROUP_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public byte[] szGroupId = new byte[NET_COMMON_STRING_64]; // 人员组ID,唯一标识一组人员
+
+ public NET_DELETE_FACERECONGNITION_GROUP_INFO() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // CLIENT_SetGroupInfoForChannel接口输入参数
+ public static class NET_IN_SET_GROUPINFO_FOR_CHANNEL extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannelID; // 通道号
+ public int nGroupIdNum; // 人员组数
+ public GROUP_ID[] szGroupIdArr = (GROUP_ID[])new GROUP_ID().toArray(MAX_GOURP_NUM); // 人员组ID
+ public int nSimilaryNum; // 相似度阈值个数, 与人员组数相同
+ public int[] nSimilary = new int[MAX_GOURP_NUM]; // 每个人脸组的相似度阈值, 0-100
+
+ public NET_IN_SET_GROUPINFO_FOR_CHANNEL()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // CLIENT_SetGroupInfoForChannel接口输出参数
+ public static class NET_OUT_SET_GROUPINFO_FOR_CHANNEL extends SdkStructure
+ {
+ public int dwSize;
+
+ public NET_OUT_SET_GROUPINFO_FOR_CHANNEL()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 人脸查询状态信息回调函数, lAttachHandle是CLIENT_AttachFaceFindState的返回值
+ public static class NET_CB_FACE_FIND_STATE extends SdkStructure
+ {
+ public int dwSize;
+ public int nToken; // 视频浓缩任务数据库主键ID
+ public int nProgress; // 正常取值范围:0-100,-1,表示查询token不存在(当订阅一个不存在或结束的查询时)
+ public int nCurrentCount; // 目前符合查询条件的人脸数量
+
+ public NET_CB_FACE_FIND_STATE()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ //CLIENT_AttachFaceFindState接口输入参数
+ public static class NET_IN_FACE_FIND_STATE extends SdkStructure
+ {
+ public int dwSize; //结构体大小,必须填写
+ public int nTokenNum; //查询令牌数,为0时,表示订阅所有的查询任务
+ public IntByReference nTokens; //查询令牌, 指向int的指针
+ public Callback cbFaceFindState; //回调函数 fFaceFindState 回调
+ public Pointer dwUser; //用户数据
+
+ public NET_IN_FACE_FIND_STATE()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ //CLIENT_AttachFaceFindState接口输入参数
+ public static class NET_OUT_FACE_FIND_STATE extends SdkStructure
+ {
+ public int dwSize;
+
+ public NET_OUT_FACE_FIND_STATE()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // SDK全局日志打印信息
+ public static class LOG_SET_PRINT_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int bSetFilePath;//是否重设日志路径, BOOL类型,取值0或1
+ public byte[] szLogFilePath = new byte[MAX_LOG_PATH_LEN];//日志路径(默认"./sdk_log/sdk_log.log")
+ public int bSetFileSize;//是否重设日志文件大小, BOOL类型,取值0或1
+ public int nFileSize;//每个日志文件的大小(默认大小10240),单位:比特, 类型为unsigned int
+ public int bSetFileNum;//是否重设日志文件个数, BOOL类型,取值0或1
+ public int nFileNum;//绕接日志文件个数(默认大小10), 类型为unsigned int
+ public int bSetPrintStrategy;//是否重设日志打印输出策略, BOOL类型,取值0或1
+ public int nPrintStrategy;//日志输出策略,0:输出到文件(默认); 1:输出到窗口, 类型为unsigned int
+ public byte[] byReserved=new byte[4]; // 字节对齐
+ public Pointer cbSDKLogCallBack; // 日志回调,需要将sdk日志回调出来时设置,默认为NULL
+ public Pointer dwUser; // 用户数据
+ public LOG_SET_PRINT_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // media文件查询条件
+ public static class EM_FILE_QUERY_TYPE extends SdkStructure
+ {
+ public static final int NET_FILE_QUERY_TRAFFICCAR = 0; // 交通车辆信息, 对应结构体为 MEDIA_QUERY_TRAFFICCAR_PARAM
+ public static final int NET_FILE_QUERY_ATM = 1; // ATM信息
+ public static final int NET_FILE_QUERY_ATMTXN = 2; // ATM交易信息
+ public static final int NET_FILE_QUERY_FACE = 3; // 人脸信息 MEDIAFILE_FACERECOGNITION_PARAM 和 MEDIAFILE_FACERECOGNITION_INFO
+ public static final int NET_FILE_QUERY_FILE = 4; // 文件信息对应 NET_IN_MEDIA_QUERY_FILE 和 NET_OUT_MEDIA_QUERY_FILE
+ public static final int NET_FILE_QUERY_TRAFFICCAR_EX = 5; // 交通车辆信息,扩展 NET_FILE_QUERY_TRAFFICCAR,支持更多的字段, 对应结构体为 MEDIA_QUERY_TRAFFICCAR_PARAM_EX
+ public static final int NET_FILE_QUERY_FACE_DETECTION = 6; // 人脸检测事件信息MEDIAFILE_FACE_DETECTION_PARAM和 MEDIAFILE_FACE_DETECTION_INFO
+ public static final int NET_FILE_QUERY_SNAPSHOT_WITH_MARK = 17; // 标记抓图查询, 对应MEDIAFILE_SNAPSHORT_WITH_MARK_PARAM 和MEDIAFILE_SNAPSHORT_WITH_MARK_INFO
+ public static final int NET_FILE_QUERY_ANATOMY_TEMP_DETECT = 18;// 人体测温信息查询, 对应 MEDIAFILE_ANATOMY_TEMP_DETECT_PARAM 和 MEDIAFILE_ANATOMY_TEMP_DETECT_INFO
+ public static final int NET_FILE_QUERY_MOBILE_ENFORCE = 27; // 采集站和手持终端文件信息查询,对应 MEDIAFILE_MOBILE_ENFORCE_PARAM 和 MEDIAFILE_MOBILE_ENFORCE_INFO
+ public static final int NET_FILE_QUERY_SMART_KITCHEN_CLOTHES_DETECTION=28; // 智慧厨房查询,对应 MEDIAFILE_SMART_KITCHEN_CLOTHES_DETECTION_PARAM 和 MEDIAFILE_SMART_KITCHEN_CLOTHES_DETECTION_INFO
+ public static final int NET_FILE_QUERY_EXAM=33; //按照考生或考场信息查找录像, 对应 NET_MEDIAFILE_EXAM_PARAM 和 NET_MEDIAFILE_EXAM_INFO
+ }
+
+ // 查询跳转条件
+ public static class NET_FINDING_JUMP_OPTION_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int nOffset;//查询结果偏移量,是相对于当前查询的第一条查询结果的位置偏移
+
+ public NET_FINDING_JUMP_OPTION_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 云台联动类型
+ public static class CFG_LINK_TYPE extends SdkStructure
+ {
+ public static final int LINK_TYPE_NONE = 0; //无联动
+ public static final int LINK_TYPE_PRESET = 1; //联动预置点
+ public static final int LINK_TYPE_TOUR = 2; //联动巡航
+ public static final int LINK_TYPE_PATTERN = 3; //联动轨迹
+ public static final int LINK_TYPE_ZOOM = 4; // 联动变倍
+ public static final int LINK_TYPE_SINGLESCENE = 5; // 联动智能单场景
+ public static final int LINK_TYPE_QUICKFOCUS = 6; // 热成像云台联动快速定位
+ }
+
+ // 联动云台信息
+ public static class CFG_PTZ_LINK extends SdkStructure
+ {
+ public int emType;//联动类型, 取值为CFG_LINK_TYPE中的值
+ public int nValue;//联动取值分别对应预置点号,巡航号等等
+ }
+
+ // 联动云台信息扩展
+ public static class CFG_PTZ_LINK_EX extends SdkStructure
+ {
+ public int emType;//联动类型, 取值为CFG_LINK_TYPE中的值
+ public int nParam1;//联动参数1
+ public int nParam2;//联动参数2
+ public int nParam3;//联动参数3
+ public int nChannelID;//所联动云台通道
+ }
+
+ // RGBA信息
+ public static class CFG_RGBA extends SdkStructure
+ {
+ public int nRed;
+ public int nGreen;
+ public int nBlue;
+ public int nAlpha;
+ }
+
+ // 事件标题内容结构体
+ public static class CFG_EVENT_TITLE extends SdkStructure
+ {
+ public byte[] szText=new byte[64];
+ /**
+ 标题左上角坐标, 采用0-8191相对坐标系
+ */
+ public CFG_POLYGON stuPoint=new CFG_POLYGON();
+ /**
+ 标题的宽度和高度,采用0-8191相对坐标系,某项或者两项为0表示按照字体自适应宽高
+ */
+ public CFG_SIZE stuSize=new CFG_SIZE();
+ /**
+ 前景颜色
+ */
+ public CFG_RGBA stuFrontColor=new CFG_RGBA();
+ /**
+ 背景颜色
+ */
+ public CFG_RGBA stuBackColor=new CFG_RGBA();
+ }
+
+ public static class NET_CFG_EVENT_TITLE extends SdkStructure
+ {
+ public byte[] szText = new byte[MAX_CHANNELNAME_LEN];
+ public NET_POINT stuPoint;//标题左上角坐标,采用0-8191相对坐标系
+ public NET_SIZE stuSize;//标题的宽度和高度,采用0-8191相对坐标系,某项或者两项为0表示按照字体自适应宽高
+ public CFG_RGBA stuFrontColor;//前景颜色
+ public CFG_RGBA stuBackColor;//背景颜色
+ }
+
+
+ // 邮件附件类型
+ public static class CFG_ATTACHMENT_TYPE extends SdkStructure
+ {
+ public static final int ATTACHMENT_TYPE_PIC = 0; //图片附件
+ public static final int ATTACHMENT_TYPE_VIDEO = 1; //视频附件
+ public static final int ATTACHMENT_TYPE_NUM = 2; //附件类型总数
+ }
+
+ // 分割模式
+ public static class CFG_SPLITMODE extends SdkStructure
+ {
+ public static final int SPLITMODE_1 =1;//1画面
+ public static final int SPLITMODE_2 =2;//2画面
+ public static final int SPLITMODE_4 =4;//4画面
+ public static final int SPLITMODE_5 =5;//5画面
+ public static final int SPLITMODE_6 =6;//6画面
+ public static final int SPLITMODE_8 =8;//8画面
+ public static final int SPLITMODE_9 =9;//9画面
+ public static final int SPLITMODE_3 = 10; // 3画面
+ public static final int SPLITMODE_3B = 11; // 3画面倒品
+ public static final int SPLITMODE_12 =12;//12画面
+ public static final int SPLITMODE_16 =16;//16画面
+ public static final int SPLITMODE_20 =20;//20画面
+ public static final int SPLITMODE_25 =25;//25画面
+ public static final int SPLITMODE_36 =36;//36画面
+ public static final int SPLITMODE_64 =64;//64画面
+ public static final int SPLITMODE_144 =144;//144画面
+ public static final int SPLITMODE_PIP =1000;//画中画分割模式基础值
+ public static final int SPLITMODE_PIP1 =SPLITMODE_PIP+1;//画中画模式, 1个全屏大画面+1个小画面窗口
+ public static final int SPLITMODE_PIP3 =SPLITMODE_PIP+3;//画中画模式, 1个全屏大画面+3个小画面窗口
+ public static final int SPLITMODE_FREE =SPLITMODE_PIP*2;//自由开窗模式,可以自由创建、关闭窗口,自由设置窗口位置和Z轴次序
+ public static final int SPLITMODE_COMPOSITE_1 = SPLITMODE_PIP * 3 + 1; // 融合屏成员1分割
+ public static final int SPLITMODE_COMPOSITE_4 = SPLITMODE_PIP * 3 + 4; // 融合屏成员4分割
+ public static final int SPLITMODE_4A = SPLITMODE_PIP * 4 + 1;
+ public static final int SPLITMODE_EOF = SPLITMODE_COMPOSITE_4+1; //结束标识
+ }
+
+ // 轮巡联动配置
+ public static class CFG_TOURLINK extends SdkStructure
+ {
+ public int bEnable;//轮巡使能, BOOL类型,取值0或1
+ public int emSplitMode;//轮巡时的分割模式,取值范围为CFG_SPLITMODE中的值
+ public int[] nChannels = new int[MAX_VIDEO_CHANNEL_NUM];//轮巡通道号列表
+ public int nChannelCount;//轮巡通道数量
+ }
+
+ // 门禁操作类型
+ public static class EM_CFG_ACCESSCONTROLTYPE extends SdkStructure
+ {
+ public static final int EM_CFG_ACCESSCONTROLTYPE_NULL = 0;//不做操作
+ public static final int EM_CFG_ACCESSCONTROLTYPE_AUTO = 1; //自动
+ public static final int EM_CFG_ACCESSCONTROLTYPE_OPEN = 2; //开门
+ public static final int EM_CFG_ACCESSCONTROLTYPE_CLOSE = 3; //关门
+ public static final int EM_CFG_ACCESSCONTROLTYPE_OPENALWAYS = 4; //永远开启
+ public static final int EM_CFG_ACCESSCONTROLTYPE_CLOSEALWAYS = 5; //永远关闭
+ }
+
+ // 邮件详细内容
+ public static class CFG_MAIL_DETAIL extends SdkStructure
+ {
+ public int emAttachType;//附件类型, 取值范围为CFG_ATTACHMENT_TYPE中的值
+ public int nMaxSize;//文件大小上限,单位kB
+ public int nMaxTimeLength;//最大录像时间长度,单位秒,对video有效
+ }
+
+ // 语音呼叫发起方
+ public static class EM_CALLER_TYPE extends SdkStructure
+ {
+ public static final int EM_CALLER_DEVICE = 0;//设备发起
+ }
+
+ // 呼叫协议
+ public static class EM_CALLER_PROTOCOL_TYPE extends SdkStructure
+ {
+ public static final int EM_CALLER_PROTOCOL_CELLULAR = 0;//手机方式
+ }
+
+ // 语音呼叫联动信息
+ public static class CFG_TALKBACK_INFO extends SdkStructure
+ {
+ public int bCallEnable;//语音呼叫使能, BOOL类型,取值0或1
+ public int emCallerType;//语音呼叫发起方, 取值范围为EM_CALLER_TYPE中的值
+ public int emCallerProtocol;//语音呼叫协议, 取值范围为EM_CALLER_PROTOCOL_TYPE中的值
+ }
+
+ // 电话报警中心联动信息
+ public static class CFG_PSTN_ALARM_SERVER extends SdkStructure
+ {
+ public int bNeedReport;//是否上报至电话报警中心, BOOL类型,取值0或1
+ public int nServerCount;//电话报警服务器个数
+ public byte[] byDestination = new byte[MAX_PSTN_SERVER_NUM];//上报的报警中心下标,详见配置CFG_PSTN_ALARM_CENTER_INFO
+ }
+
+ // 时间表信息
+ public static class CFG_TIME_SCHEDULE extends SdkStructure
+ {
+ /**
+ 是否支持节假日配置,默认为不支持,除非获取配置后返回为TRUE,不要使能假日配置
+ */
+ public int bEnableHoliday;
+ /**
+ 第一维前7个元素对应每周7天,第8个元素对应节假日,每天最多6个时间段
+ */
+ public CFG_TIME_SECTION[] stuTimeSectionWeekDay=new CFG_TIME_SECTION[8*6];
+
+ public CFG_TIME_SCHEDULE(){
+ for(int i=0;i0,禁止名单数据记录
+ public NET_COLOR_RGBA stuRGBA; // 车身颜色RGBA
+ public NET_TIME stSnapTime; // 抓拍时间
+ public int nRecNo; // 记录编号
+ public byte[] szCustomParkNo= new byte[NET_COMMON_STRING_32+1];// 自定义车位号(停车场用)
+ public byte[] byReserved1 = new byte[3];
+ public int nDeckNo; // 车板位号
+ public int nFreeDeckCount; // 空闲车板数量
+ public int nFullDeckCount; // 占用车板数量
+ public int nTotalDeckCount; // 总共车板数量
+ public byte[] szViolationName = new byte[64]; // 违章名称
+ public int nWeight; // 车重(单位Kg), 类型为unsigned int
+
+ public byte[] szCustomRoadwayDirection = new byte[32];// 自定义车道方向,byDirection为9时有效
+ public byte byPhysicalLane; // 物理车道号,取值0到5
+ public byte[] byReserved2 = new byte[3];
+ public int emMovingDirection; // 车辆行驶方向 EM_TRAFFICCAR_MOVE_DIRECTION
+ public NET_TIME stuEleTagInfoUTC; // 对应电子车牌标签信息中的过车时间(ThroughTime)
+ public NET_RECT stuCarWindowBoundingBox; // 车窗包围盒,0~8191
+ public NET_TRAFFICCAR_WHITE_LIST stuWhiteList; // 允许名单信息
+ public int emCarType; // 车辆类型, 详见 EM_TRAFFICCAR_CAR_TYPE
+ public int emLaneType; // 车道类型, 详见EM_TRAFFICCAR_LANE_TYPE
+ public byte[] szVehicleBrandYearText = new byte[64]; // 车系年款翻译后文本内容
+ public byte[] szCategory = new byte[32]; // 车辆子类型
+ public NET_TRAFFICCAR_BLACK_LIST stuBlackList; // 禁止名单信息
+ public int emFlowDirection; // 车流量方向 EM_VEHICLE_DIRECTION
+ /**
+ * 收费公路车辆通行费车型分类 {@link com.netsdk.lib.enumeration.EM_TOLLS_VEHICLE_TYPE}
+ */
+ public int emTollsVehicleType;
+ /**
+ * 轴型代码,参考轴型国标 0代表其他
+ */
+ public int nAxleType;
+ /**
+ * 车轴数量
+ */
+ public int nAxleCount;
+ /**
+ * 车轮数量
+ */
+ public int nWheelNum;
+ /**
+ * 车身抠图
+ */
+ public NET_TRAFFICCAR_ORIGINAL_VEHICLE stuOriginalVehicle = new NET_TRAFFICCAR_ORIGINAL_VEHICLE();
+ /**
+ * 按功能划分的车辆类型 {@link NetSDKLib.EM_VEHICLE_TYPE_BY_FUNC}
+ */
+ public int emVehicleTypeByFunc;
+ /**
+ * 车辆子品牌
+ */
+ public short nSunBrand;
+ /**
+ * 车辆年款
+ */
+ public short nBrandYear;
+ /**
+ * 交通灯类型,仅在EVENT_IVS_TRAFFIC_RUNREDLIGHT中有效, 0;未知, 1:箭头灯, 2:圆形灯
+ */
+ public int nTrafficLightType;
+ /**
+ * 车牌属性 {@link com.netsdk.lib.enumeration.EM_PLATE_ATTRIBUTE}
+ */
+ public int emPlateAttribute;
+ /**
+ * 保留字节,留待扩展.
+ */
+ public byte[] bReserved = new byte[132];
+ }
+
+ // 禁止名单信息
+ public static class NET_TRAFFICCAR_BLACK_LIST extends SdkStructure
+ {
+ /**
+ 是否已启用禁止名单
+ */
+ public int bEnable;
+ /**
+ 车牌是否属于禁止名单
+ */
+ public int bIsBlackCar;
+ /**
+ 禁止名单起始时间
+ */
+ public NET_TIME stuBeginTime=new NET_TIME();
+ /**
+ 禁止名单过期时间
+ */
+ public NET_TIME stuCancelTime=new NET_TIME();
+ /**
+ 布控类型 {@link com.netsdk.lib.enumeration.EM_NET_TRAFFIC_CAR_CONTROL_TYPE}
+ */
+ public int emControlType;
+ /**
+ 布控路线ID
+ */
+ public int nControlledRouteID;
+ /**
+ 保留字节
+ */
+ public byte[] bReserved=new byte[24];
+
+ public NET_TRAFFICCAR_BLACK_LIST(){
+ }
+ }
+
+ // 车辆类型
+ public static class EM_TRAFFICCAR_CAR_TYPE extends SdkStructure
+ {
+ public static final int EM_TRAFFICCAR_CAR_TYPE_UNKNOWN = 0; // 未知
+ public static final int EM_TRAFFICCAR_CAR_TYPE_TRUST_CAR = 1; // 允许名单车辆
+ public static final int EM_TRAFFICCAR_CAR_TYPE_SUSPICIOUS_CAR = 2; // 禁止名单车辆
+ public static final int EM_TRAFFICCAR_CAR_TYPE_NORMAL_CAR = 3; // 非允许名单且非禁止名单车辆
+ }
+
+ // 车道类型
+ public static class EM_TRAFFICCAR_LANE_TYPE extends SdkStructure
+ {
+ public static final int EM_TRAFFICCAR_LANE_TYPE_UNKNOWN = 0; // 未知
+ public static final int EM_TRAFFICCAR_LANE_TYPE_NORMAL = 1; // 普通车道
+ public static final int EM_TRAFFICCAR_LANE_TYPE_NONMOTOR = 2; // 非机动车车道
+ public static final int EM_TRAFFICCAR_LANE_TYPE_LIGHT_DUTY = 3; // 小型车车道
+ public static final int EM_TRAFFICCAR_LANE_TYPE_BUS = 4; // 公交车车道
+ public static final int EM_TRAFFICCAR_LANE_TYPE_EMERGENCY = 5; // 应急车道
+ public static final int EM_TRAFFICCAR_LANE_TYPE_DANGEROUS = 6; // 危险品车道
+ }
+
+ // 允许名单信息
+ public static class NET_TRAFFICCAR_WHITE_LIST extends SdkStructure
+ {
+ public int bTrustCar; // 车牌是否属于允许名单
+ public NET_TIME stuBeginTime; // 允许名单起始时间
+ public NET_TIME stuCancelTime; // 允许名单过期时间
+ public NET_WHITE_LIST_AUTHORITY_LIST stuAuthorityList; // 允许名单权限列表
+ public byte[] bReserved = new byte[32];// 保留字节
+ }
+
+ // 允许名单权限列表
+ public static class NET_WHITE_LIST_AUTHORITY_LIST extends SdkStructure
+ {
+ public int bOpenGate; // 是否有开闸权限
+ public byte[] bReserved = new byte[16]; // 保留字节
+ }
+
+ // 事件类型EVENT_IVS_TRAFFIC_PARKING(交通违章停车事件)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_PARKING_INFO extends SdkStructure {
+ public int nChannelID;//通道号
+ public byte[] szName = new byte[128];//事件名称
+ public byte[] bReserved1 = new byte[4];//字节对齐
+ public double PTS;//时间戳(单位是毫秒)
+ public NET_TIME_EX UTC = new NET_TIME_EX();//事件发生的时间
+ public int nEventID;//事件ID
+ public NET_MSG_OBJECT stuObject = new NET_MSG_OBJECT();//检测到的物体
+ public NET_MSG_OBJECT stuVehicle = new NET_MSG_OBJECT();//车身信息
+ public int nLane;//对应车道号
+ public NET_EVENT_FILE_INFO stuFileInfo = new NET_EVENT_FILE_INFO();//事件对应文件信息
+ public byte bEventAction;//事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] reserved = new byte[2];//保留字节
+ public byte byImageIndex;//图片的序号,同一时间内(精确到秒)可能有多张图片,从0开始
+ public NET_TIME_EX stuStartParkingTime = new NET_TIME_EX();//开始停车时间
+ public int nSequence;//表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束(bEventAction=2时此参数有效)
+ public int nAlarmIntervalTime;//报警时间间隔,单位:秒。(此事件为连续性事件,在收到第一个此事件之后,若在超过间隔时间后未收到此事件的后续事件,则认为此事件异常结束了)
+ public int nParkingAllowedTime;//允许停车时长,单位:秒。
+ public int nDetectRegionNum;//规则检测区域顶点数
+ public NET_POINT[] DetectRegion = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM);//规则检测区域
+ public int dwSnapFlagMask;//抓图标志(按位),具体见NET_RESERVED_COMMON
+ public NET_RESOLUTION_INFO stuResolution = new NET_RESOLUTION_INFO();//对应图片的分辨率
+ public int bIsExistAlarmRecord;//true:有对应的报警录像;false:无对应的报警录像, 类型为BOOL, 取值为0或1
+ public int dwAlarmRecordSize;//录像大小
+ public byte[] szAlarmRecordPath = new byte[NET_COMMON_STRING_256];//录像路径
+ public byte[] szFTPPath = new byte[NET_COMMON_STRING_256];//FTP路径
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo = new EVENT_INTELLI_COMM_INFO();//智能事件公共信息
+ public byte byPreAlarm; // 是否为违章预警图片,0 违章停车事件1 预警事件(预警触发后一定时间,车辆还没有离开,才判定为违章)由于此字段会导致事件含义改变,必须和在平台识别预警事件后,才能有此字段,
+ public byte[] bReserved2 = new byte[3]; // 保留字节,留待扩展.
+ public NET_GPS_INFO stuGPSInfo = new NET_GPS_INFO(); // GPS信息 车载
+ public Pointer pstuImageInfo;//图片信息数组,{@link NET_IMAGE_INFO_EX2}
+ public int nImageInfoNum;//图片信息个数
+ public int nPresetID;//预置点编号,从1开始
+ public byte[] szSN = new byte[32];//设备SN号
+ public byte[] bReserved = new byte[184];//保留字节,留待扩展.
+ public com.netsdk.lib.structure.DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar = new com.netsdk.lib.structure.DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO();//交通车辆信息
+ public EVENT_COMM_INFO stCommInfo = new EVENT_COMM_INFO();//公共信息
+ public VA_OBJECT_NONMOTOR stuNonMotor = new VA_OBJECT_NONMOTOR();//非机动车对象
+ public int bHasNonMotor;//是否有非机动车对象
+ public int nParkingDuration;//违停持续时间,单位:秒, 0表示无意义
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND();//事件公共扩展字段结构体
+
+ public DEV_EVENT_TRAFFIC_PARKING_INFO() {
+ for (int i = 0; i < DetectRegion.length; i++) {
+ DetectRegion[i] = new NET_POINT();
+ }
+ }
+ }
+
+ //停车场信息
+ public static class DEV_TRAFFIC_PARKING_INFO extends SdkStructure
+ {
+ public int nFeaturePicAreaPointNum; // 特征图片区点个数
+ public NET_POINT[] stFeaturePicArea = (NET_POINT[])new NET_POINT().toArray(NET_MAX_POLYGON_NUM); // 特征图片区信息
+ public byte[] bReserved = new byte[572]; // 保留字节
+ }
+
+ //事件类型 EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING(车位有车事件)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_PARKINGSPACEPARKING_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public byte[] bReserved1 = new byte[8]; // 字节对齐
+ public int PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nLane; // 对应车道号
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+
+ public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息
+ public int nParkingSpaceStatus; // 车位状态,0-占用,1-空闲,2-压线
+ public DEV_TRAFFIC_PARKING_INFO stTrafficParingInfo; // 停车场信息
+ public byte byPlateTextSource; // 车牌识别来源, 0:本地算法识别,1:后端服务器算法识别
+ public byte[] byReserved2 = new byte[3]; // 字节对齐
+ public byte[] szParkingNum = new byte[32]; // 车位(地磁)编号,球机项目
+ public int dwPresetNum; // 球机预置位编号,球机项目
+ public int bParkingFault; // 车位是否有故障,球机项目
+ public byte[] bReserved = new byte[364]; // 保留字节
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public NET_INTELLIGENCE_IMAGE_INFO stuParkingImage; // 车位图片信息
+ public int nConfidence; // 事件置信度(0-100)
+ public int emAcrossParking; // 是否跨位(参考EM_ACROSS_PARKING)
+ public int emParkingDirection; // 停车方向(参考EM_PARKINGSPACE_DIRECTION)
+ public int emForbidParkingStatus; // 禁停状态(参考EM_FORBID_PARKING_STATUS)
+ public byte[] byReserved1 = new byte[1004]; // 为图片信息做预留字节,新增的字段请在该保留字节下面添加
+ public int emTriggerType; // 触发类型(参考EM_PARKING_TRIGGER_TYPE)
+ public DEV_OCCUPIED_WARNING_INFO stuOccupiedWarningInfo; // 一位多车信息, 如果车位此前没有车占用, 不会带有本字段信息
+ public ParkingNoWithSize32[] szAllParkingNo = new ParkingNoWithSize32[12]; // 所有使能的车位号
+ public int nParkingNoNum; // 使能车位号的个数
+ public int emParkingSpaceType; // 车位有车的事件类型 EM_PARKING_SPACE_TYPE
+ public NET_PARKING_CHANGE_INFO stuParkingChangeInfo; // 停车变更信息
+ public Pointer pstuImageInfo; // 图片信息数组 ,结构体NET_IMAGE_INFO_EX2数组指针
+ public int nImageInfoNum; // 图片信息个数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] szReserved=new byte[4]; // 字节对齐
+ public DEV_EVENT_TRAFFIC_PARKINGSPACEPARKING_INFO() {
+ for(int i = 0;i 0,禁止名单数据记录
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public byte[] bReserved = new byte[452]; // 保留字节,留待扩展.
+ }
+
+ //事件类型EVENT_IVS_TRAFFIC_RUNREDLIGHT(交通-闯红灯事件)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_RUNREDLIGHT_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nLane; // 对应车道号
+ public NET_MSG_OBJECT stuObject; // 车牌信息
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nLightState; // 红绿灯状态 0:未知 1:绿灯 2:红灯 3:黄灯
+ public int nSpeed; // 车速,km/h
+ public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_TIME_EX stRedLightUTC; // 红灯开始时间
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public byte byRedLightMargin; // 红灯容许间隔时间,单位:秒
+ public byte[] byAlignment = new byte[3]; // 字节对齐
+ public int nRedLightPeriod; // 表示红灯周期时间,单位毫秒
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] bReserved = new byte[928]; // 保留字节
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public int bHasNonMotor; // 是否有非机动车对象
+ public VA_OBJECT_NONMOTOR stuNonMotor; // 非机动车对象
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ }
+
+ //事件类型EVENT_IVS_TRAFFIC_OVERLINE(交通-压线事件)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_OVERLINE_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nLane; // 对应车道号
+ public NET_MSG_OBJECT stuObject; // 车牌信息
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束
+ public int nSpeed; // 车辆实际速度,Km/h
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] bReserved = new byte[968]; // 保留字节
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ }
+
+ // 事件类型EVENT_IVS_TRAFFIC_RETROGRADE(交通-逆行事件)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_RETROGRADE_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nLane; // 对应车道号
+ public NET_MSG_OBJECT stuObject; // 车牌信息
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束
+ public int nSpeed; // 车辆实际速度,Km/h
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public int bIsExistAlarmRecord; // rue:有对应的报警录像; false:无对应的报警录像
+ public int dwAlarmRecordSize; // 录像大小
+ public byte[] szAlarmRecordPath = new byte[NET_COMMON_STRING_256]; // 录像路径
+ public EVENT_INTELLI_COMM_INFO intelliCommInfo; // 智能事件公共信息
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] bReserved = new byte[484]; // 保留字节
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息
+ public int nDetectNum; // 规则检测区域顶点数
+ public NET_POINT[] DetectRegion = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public int bHasNonMotor; // 是否有非机动车对象
+ public VA_OBJECT_NONMOTOR stuNonMotor; // 非机动车对象
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ }
+
+ //事件类型EVENT_IVS_TRAFFIC_OVERSPEED(交通超速事件)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_OVERSPEED_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nLane; // 对应车道号
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nSpeed; // 车辆实际速度Km/h
+ public int nSpeedUpperLimit; // 速度上限 单位:km/h
+ public int nSpeedLowerLimit; // 速度下限 单位:km/h
+ public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public byte[] szFilePath = new byte[MAX_PATH]; // 文件路径
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public int nSpeedingPercentage; // 超速百分比
+ public byte[] bReserved = new byte[572]; // 保留字节
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public NET_REGION_INFO stRegionInfo; // 区间测速信息
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx; // 事件公共扩展字段结构体
+ public VA_OBJECT_NONMOTOR stuNonMotor; // 非机动车信息
+ public int bHasNonMotor; // 是否有非机动车对象
+ }
+
+ //事件类型EVENT_IVS_TRAFFIC_UNDERSPEED(交通欠速事件)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_UNDERSPEED_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved2 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nLane; // 对应车道号
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nSpeed; // 车辆实际速度Km/h
+ public int nSpeedUpperLimit; // 速度上限 单位:km/h
+ public int nSpeedLowerLimit; // 速度下限 单位:km/h
+ public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] bReserved1 = new byte[2]; // 对齐
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int nUnderSpeedingPercentage; // 欠速百分比
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] bReserved = new byte[832]; // 保留字节
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ }
+
+ //事件类型EVENT_IVS_TRAFFIC_WRONGROUTE(交通违章-不按车道行驶)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_WRONGROUTE_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public int nLane; // 对应车道号
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int nSpeed; // 车辆实际速度,km/h
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] bReserved = new byte[972]; // 保留字节,留待扩展.
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ }
+
+ // 事件类型 EVENT_IVS_TRAFFIC_TURNLEFT(交通-违章左转)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_TURNLEFT_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC ; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nLane; // 对应车道号
+ public NET_MSG_OBJECT stuObject; // 车牌信息
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束
+ public int nSpeed; // 车辆实际速度,Km/h
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] bReserved = new byte[968]; // 保留字节
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public VA_OBJECT_NONMOTOR stuNonMotor; // 非机动车对象
+ public int bHasNonMotor; // 是否有非机动车对象
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ }
+
+ // 事件类型 EVENT_IVS_TRAFFIC_TURNRIGHT (交通-违章右转)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_TURNRIGHT_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nLane; // 对应车道号
+ public NET_MSG_OBJECT stuObject; // 车牌信息
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束
+ public int nSpeed; // 车辆实际速度,Km/h
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] bReserved = new byte[968]; // 保留字节
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public VA_OBJECT_NONMOTOR stuNonMotor; // 非机动车对象
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ }
+
+ // 事件类型EVENT_IVS_TRAFFIC_UTURN(违章调头事件)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_UTURN_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nLane; // 对应车道号
+ public NET_MSG_OBJECT stuObject; // 车牌信息
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束
+ public int nSpeed; // 车辆实际速度,Km/h
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] bReserved = new byte[968]; // 保留字节
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public VA_OBJECT_NONMOTOR stuNonMotor; // 非机动车对象
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ }
+
+ //事件类型 EVENT_IVS_TRAFFIC_RUNYELLOWLIGHT(交通违章-闯黄灯事件)对应数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_RUNYELLOWLIGHT_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nLane; // 对应车道号
+ public NET_MSG_OBJECT stuObject; // 车牌信息
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nLightState; // 红绿灯状态 0:未知 1:绿灯 2:红灯 3:黄灯
+ public int nSpeed; // 车速,km/h
+ public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_TIME_EX stYellowLightUTC; // 黄灯开始时间
+ public int nYellowLightPeriod; // 黄灯周期间隔时间,单位秒
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public byte byRedLightMargin; // 黄灯容许间隔时间,单位:秒
+ public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息
+ public byte[] bReserved = new byte[1024]; // 保留字节
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+
+ }
+
+ //事件类型EVENT_IVS_TRAFFIC_OVERYELLOWLINE(交通违章-压黄线)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_OVERYELLOWLINE_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public int nLane; // 对应车道号
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int nSpeed; // 车辆实际速度,km/h
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public int bIsExistAlarmRecord; // bool 类型: 1:有对应的报警录像; 0:无对应的报警录像
+ public int dwAlarmRecordSize; // 录像大小
+ public byte[] szAlarmRecordPath = new byte[NET_COMMON_STRING_256]; // 录像路径
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public byte[] bReserved = new byte[532]; // 保留字节,留待扩展.
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息
+
+ public int nDetectNum; // 规则检测区域顶点数
+ public NET_POINT[] DetectRegion = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ }
+
+ //事件类型EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE(交通违章-黄牌车占道事件)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_YELLOWPLATEINLANE_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public int nLane; // 对应车道号
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int nSpeed; // 车辆实际速度,km/h
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public byte[] bReserved = new byte[1016]; // 保留字节,留待扩展.
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ }
+
+ //事件类型 EVENT_IVS_TRAFFIC_VEHICLEINROUTE(有车占道事件)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_VEHICLEINROUTE_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public int nLane; // 对应车道号
+ public int nSequence; // 抓拍序号,如3-2-1/0,1表示抓拍正常结束,0表示抓拍异常结束
+ public int nSpeed; // 车速
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 表示交通车辆的数据库记录
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved0 = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public byte[] byReserved = new byte[884];
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ }
+
+ //事件类型EVENT_IVS_TRAFFIC_CROSSLANE(交通违章-违章变道)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_CROSSLANE_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public int nLane; // 对应车道号
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int nSpeed; // 车辆实际速度,km/h
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] bReserved = new byte[836]; // 保留字节,留待扩展.留待扩展.
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stuTrafficCar; // 交通车辆信息
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ }
+
+ // 事件类型EVENT_IVS_TRAFFIC_NOPASSING(交通违章-禁止通行事件)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_NOPASSING_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public int nTriggerType; // TriggerType:触发类型,0车检器,1雷达,2视频
+ public int PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int UTCMS; //
+ public int nMark; // 底层产生的触发抓拍帧标记
+ public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public byte[] byReserved1 = new byte[3];
+ public int nLane; // 对应车道号
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public int nFrameSequence; // 视频分析帧序号
+ public int nSource; // 视频分析的数据源地址
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] byReserved = new byte[984]; // 保留字节
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ }
+
+ //事件类型 EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY(斑马线行人优先事件)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_PEDESTRAINPRIORITY_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nLane; // 对应车道号
+ public double dInitialUTC; // 事件初始UTC时间 UTC为事件的UTC (1970-1-1 00:00:00)秒数。
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 表示交通车辆的数据库记录
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] bReserved = new byte[984]; // 保留字节,留待扩展.
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+
+ }
+
+ //事件类型 EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE(占用公交车道事件)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_VEHICLEINBUSROUTE_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nLane; // 对应车道号
+ public int nSequence; // 抓拍序号,如3-2-1/0,1表示抓拍正常结束,0表示抓拍异常结束
+ public int nSpeed; // 车速,km/h
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 表示交通车辆的数据库记录
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] bReserved = new byte[980]; // 保留字节,留待扩展.
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+
+ }
+
+ //事件类型 EVENT_IVS_TRAFFIC_BACKING(违章倒车事件)对应的数据块描述信息
+ public static class DEV_EVENT_IVS_TRAFFIC_BACKING_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nLane; // 对应车道号
+ public int nSequence; // 抓拍序号,如3-2-1/0,1表示抓拍正常结束,0表示抓拍异常结束
+ public int nSpeed; // 车速,km/h
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 表示交通车辆的数据库记录
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] bReserved = new byte[848]; // 保留字节,留待扩展.
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+
+ }
+
+ // GPS信息
+ public static class NET_GPS_INFO extends SdkStructure
+ {
+ public int nLongitude; // 经度(单位是百万分之一度)
+ // 西经:0 - 180000000 实际值应为: 180*1000000 – dwLongitude
+ // 东经:180000000 - 360000000 实际值应为: dwLongitude – 180*1000000
+ // 如: 300168866应为(300168866 - 180*1000000)/1000000 即东经120.168866度
+ public int nLatidude; // 纬度(单位是百万分之一度)
+ // 南纬:0 - 90000000 实际值应为: 90*1000000 – dwLatidude
+ // 北纬:90000000 – 180000000 实际值应为: dwLatidude – 90*1000000
+ // 如: 120186268应为 (120186268 - 90*1000000)/1000000 即北纬30. 186268度
+ public double dbAltitude; // 高度,单位为米
+ public double dbSpeed; // 速度,单位km/H
+ public double dbBearing; // 方向角,单位°
+ public byte[] bReserved = new byte[8]; // 保留字段
+
+ protected int getNativeAlignment(Class> type, Object value, boolean isFirstElement) {
+ int alignment = super.getNativeAlignment(type, value, isFirstElement);
+ return Math.min(4, alignment);
+ }
+
+ @Override
+ public String toString() {
+ return "NET_GPS_INFO{" +
+ "nLongitude=" + nLongitude +
+ ", nLatidude=" + nLatidude +
+ ", dbAltitude=" + dbAltitude +
+ ", dbSpeed=" + dbSpeed +
+ ", dbBearing=" + dbBearing +
+ '}';
+ }
+ }
+
+ // 事件类型 EVENT_IVS_TRAFFIC_OVERSTOPLINE (压停车线事件)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_OVERSTOPLINE extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public int nTriggerType; // TriggerType:触发类型,0车检器,1雷达,2视频
+ public int PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束
+ public byte byEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public byte[] byReserved1 = new byte[2];
+ public int nLane; // 对应车道号
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nMark; // 底层产生的触发抓拍帧标记
+ public int nFrameSequence; // 视频分析帧序号
+ public int nSource; // 视频分析的数据源地址
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stuTrafficCar; // 交通车辆信息
+ public int nSpeed; // 车辆实际速度,Km/h
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] byReserved = new byte[984]; // 保留字节
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public boolean bHasNonMotor; // stuNonMotor 字段是否有效
+ public VA_OBJECT_NONMOTOR stuNonMotor; // 非机动车对象
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ }
+
+ //事件类型 EVENT_IVS_TRAFFIC_PARKINGONYELLOWBOX(黄网格线抓拍事件)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_PARKINGONYELLOWBOX_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[8]; // 字节对齐
+ public int PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nLane; // 对应车道号
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+
+ public int nInterval1; // 第二张和第一张的延时时间,单位秒
+ public int nInterval2; // 第三张和第二张的延时时间,单位秒
+ public int nFollowTime; // 跟随时间,如果一辆车与前一辆车进入黄网格的时间差小于此值,就认为是跟车进入,跟车进入情况下如果停车则不算违章
+
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] bReserved = new byte[984]; // 保留字节
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+
+ }
+
+ // 事件类型EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT(交通未系安全带事件事件)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_WITHOUT_SAFEBELT extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public int nTriggerType; // TriggerType:触发类型,0车检器,1雷达,2视频
+ public int PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束
+ public byte byEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; public byte byReserved1[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public byte[] byReserved1 = new byte[2];
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nLane; // 对应车道号
+ public int nMark; // 底层产生的触发抓拍帧标记
+ public int nFrameSequence; // 视频分析帧序号
+ public int nSource; // 视频分析的数据源地址
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stuTrafficCar; // 交通车辆信息
+ public int nSpeed; // 车辆实际速度,Km/h
+ public int emMainSeat; // 主驾驶座位安全带状态 参考 NET_SAFEBELT_STATE
+ public int emSlaveSeat; // 副驾驶座位安全带状态 参考 NET_SAFEBELT_STATE
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON , 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] byReserved = new byte[728]; // 保留字节
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public byte[] szVideoPath = new byte[256]; // 违章关联视频FTP上传路径
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ }
+
+ //事件类型EVENT_IVS_TRAFFIC_JAM_FORBID_INTO(交通拥堵禁入事件)对应的数据块描述信息
+ public static class DEV_EVENT_ALARM_JAMFORBIDINTO_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public int PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEveID; // 事件ID
+ ///////////////////////////////以上为公共字段//////////////////////////////
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nMark; // 底层产生的触发抓拍帧标记
+ public int nSource; // 视频分析的数据源地址
+ public int nSequence; // 表示抓拍序号,如3-2-1/0,1表示抓拍正常结束,0表示抓拍异常结束
+ public int nFrameSequence; // 帧序号
+ public int nLane; // 车道号
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] bReserved = new byte[984]; // 保留字节
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stuTrafficCar; // 交通车辆信息
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ }
+
+ //事件类型EVENT_IVS_TRAFFIC_PASSNOTINORDER(交通-未按规定依次通过)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_PASSNOTINORDER_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nLane; // 对应车道号
+ public NET_MSG_OBJECT stuObject; // 车牌信息
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON , 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; // 交通车辆信息
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] bReserved = new byte[984]; // 保留字节
+ }
+
+ /**
+ * @author 260611
+ * @description 事件类型EVENT_IVS_TRAFFIC_MANUALSNAP(交通手动抓拍事件)对应的数据块描述信息
+ * @date 2023/01/11 15:02:23
+ */
+ public class DEV_EVENT_TRAFFIC_MANUALSNAP_INFO extends SdkStructure {
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 事件名称
+ */
+ public byte[] szName = new byte[128];
+ /**
+ * 字节对齐
+ */
+ public byte[] bReserved1 = new byte[4];
+ /**
+ * 时间戳(单位是毫秒)
+ */
+ public double PTS;
+ /**
+ * 事件发生的时间
+ */
+ public NetSDKLib.NET_TIME_EX UTC = new NetSDKLib.NET_TIME_EX();
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * 对应车道号
+ */
+ public int nLane;
+ /**
+ * 手动抓拍序号
+ */
+ public byte[] szManualSnapNo = new byte[64];
+ /**
+ * 检测到的物体
+ */
+ public NET_MSG_OBJECT stuObject = new NET_MSG_OBJECT();
+ /**
+ * 检测到的车身信息
+ */
+ public NET_MSG_OBJECT stuVehicle = new NET_MSG_OBJECT();
+ /**
+ * 表示交通车辆的数据库记录
+ */
+ public com.netsdk.lib.structure.DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar = new com.netsdk.lib.structure.DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO();
+ /**
+ * 事件对应文件信息
+ */
+ public NET_EVENT_FILE_INFO stuFileInfo = new NET_EVENT_FILE_INFO();
+ /**
+ * 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ */
+ public byte bEventAction;
+ /**
+ * 开闸状态, 具体请见 EM_OPEN_STROBE_STATE
+ */
+ public byte byOpenStrobeState;
+
+ public byte[] byReserved = new byte[1];
+ /**
+ * 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ */
+ public byte byImageIndex;
+ /**
+ * 抓图标志(按位),具体见NET_RESERVED_COMMON
+ */
+ public int dwSnapFlagMask;
+ /**
+ * 对应图片的分辨率
+ */
+ public NET_RESOLUTION_INFO stuResolution = new NET_RESOLUTION_INFO();
+ /**
+ * 停车位数据信息数组实际有效大小
+ */
+ public int nParkingInfoNum;
+ /**
+ * 保留字节,留待扩展.
+ */
+ public byte[] bReserved = new byte[500];
+ /**
+ * 手动抓拍专用上报内容
+ */
+ public EVENT_MANUALSNAP_CUSTOM_DATA stuCustom = new EVENT_MANUALSNAP_CUSTOM_DATA();
+ /**
+ * 公共信息
+ */
+ public EVENT_COMM_INFO stCommInfo = new EVENT_COMM_INFO();
+ /**
+ * 停车位数据信息
+ */
+ public EVENT_MANUALSNAP_PARKING_INFO[] stuParkingInfo = new EVENT_MANUALSNAP_PARKING_INFO[32];
+
+ public DEV_EVENT_TRAFFIC_MANUALSNAP_INFO() {
+ for (int i = 0; i < stuParkingInfo.length; i++) {
+ stuParkingInfo[i] = new EVENT_MANUALSNAP_PARKING_INFO();
+ }
+ }
+ }
+
+ // 手动抓拍专用上报内容
+ public static class EVENT_MANUALSNAP_CUSTOM_DATA extends SdkStructure
+ {
+ public EVENT_CUSTOM_WEIGHT_INFO stuWeighInfo; // 称重信息
+ public byte[] byReserved = new byte[472]; // 保留字节
+ }
+
+ // 事件类型 EVENT_IVS_CROSSLINEDETECTION(警戒线事件)对应的数据块描述信息
+ public static class DEV_EVENT_CROSSLINE_INFO extends SdkStructure {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public NET_POINT[] DetectLine = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_LINE_NUM);// 规则检测线
+ public int nDetectLineNum; // 规则检测线顶点数
+ public NET_POINT[] TrackLine = (NET_POINT[])new NET_POINT().toArray(NET_MAX_TRACK_LINE_NUM); // 物体运动轨迹
+ public int nTrackLineNum; // 物体运动轨迹顶点数
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte bDirection; // 表示入侵方向, 0-由左至右, 1-由右至左
+ public byte[] byReserved=new byte[1];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见 NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public int nSourceIndex; // 事件源设备上的index,-1表示数据无效,-1表示数据无效
+ public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ public int nOccurrenceCount; // 事件触发累计次数, 类型为unsigned int
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public NET_EXTENSION_INFO stuExtensionInfo; // 扩展信息
+ public SCENE_IMAGE_INFO_EX stuSceneImage; // 全景广角图
+ public int nObjetcHumansNum; // 检测到人的数量
+ public NET_VAOBJECT_NUMMAN []stuObjetcHumans = (NET_VAOBJECT_NUMMAN [])new NET_VAOBJECT_NUMMAN().toArray(100); // 检测的到人
+
+ public int nRuleID; // 规则编号,用于标示哪个规则触发的事件,缺省时默认为0
+ public int emEventType; // 事件级别,参考EM_EVENT_LEVEL
+ public NET_PRESET_POSITION stPosition; // 预置点的坐标和放大倍数
+ public int nVisibleHFOV; // 可见光横向视场角,单位度 实际角度乘以100
+ public int nVisibleVFOV; // 可见光纵向视场角,单位度 实际角度乘以100
+ public int nCurChannelHFOV; // 当前报警通道的横向视场角,单位度,实际角度乘以100
+ public int nCurChannelVFOV; // 当前报警通道的纵向视场角,单位度,实际角度乘以100
+ public int nImageNum; // 图片信息个数
+ public Pointer pImageArray; // 图片信息数组,结构体NET_IMAGE_INFO_EX2数组指针
+ public int nCarMirrorStatus; // 车的后视镜状态,-1: 未知, 0: 正常, 1: 不正常(如数量缺失等)
+ public int nCarLightStatus; // 车的车灯状态,-1: 未知, 0: 正常, 1:不正常(如灯未亮等)
+ public int nObjectBoatsNum; // 船只物体个数
+ public NET_BOAT_OBJECT[] stuBoatObjects = new NET_BOAT_OBJECT[100]; // 船只物品信息
+ public int nUpDownGoing; // 车道/航道方向, 0:未知, 1:上行, 2:下行
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] byReserved1 = new byte[452]; // 预留字节
+ }
+
+ /**
+ * 检测到的人信息
+ * @author 29779
+ */
+ public static class NET_VAOBJECT_NUMMAN extends SdkStructure {
+ public int nObjectID; // 物体ID,每个ID表示一个唯一的物体
+ /**
+ * @link EM_UNIFORM_STYLE 制服样式
+ */
+ public int emUniformStyle;
+ public NET_RECT stuBoundingBox; // 包围盒,手套对象在全景图中的框坐标,为0~8191相对坐标
+ public NET_RECT stuOriginalBoundingBox; // 包围盒,绝对坐标
+ public byte[] byReserved = new byte[128]; // 预留字节
+ }
+
+ // 事件类型 EVENT_IVS_CROSSREGIONDETECTION(警戒区事件)对应的数据块描述信息
+ public static class DEV_EVENT_CROSSREGION_INFO extends SdkStructure {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public NET_POINT[] DetectRegion = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public NET_POINT[] TrackLine = (NET_POINT[])new NET_POINT().toArray(NET_MAX_TRACK_LINE_NUM); // 物体运动轨迹
+ public int nTrackLineNum; // 物体运动轨迹顶点数
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte bDirection; // 表示入侵方向, 0-进入, 1-离开,2-出现,3-消失
+ public byte bActionType; // 表示检测动作类型,0-出现 1-消失 2-在区域内 3-穿越区域
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON , 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public int nSourceIndex; // 事件源设备上的index,-1表示数据无效
+ public byte[] szSourceDevice = new byte[MAX_PATH];// 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ public int nOccurrenceCount; // 事件触发累计次数, unsigned int 类型
+ public NET_CUSTOM_INFO stuCustom; // 货物通道信息
+ public NET_EXTENSION_INFO stuExtensionInfo; // 扩展信息
+ public int nRuleID; // 智能事件规则编号,用于标示哪个规则触发的事件
+ public NET_PRESET_POSITION stPosition; // 预置点的坐标和放大倍数
+ public int nVisibleHFOV; // 可见光横向视场角,单位度 实际角度乘以100
+ public int nVisibleVFOV; // 可见光纵向视场角,单位度 实际角度乘以100
+ public int nCurChannelHFOV; // 当前报警通道的横向视场角,单位度,实际角度乘以100
+ public int nCurChannelVFOV; // 当前报警通道的纵向视场角,单位度,实际角度乘以100
+ public byte[] szRealEventType=new byte[32]; // 采用该字段区分是区域入侵还是事件,该字段不携带则是通用的区域入侵事件,携带则根据内容区分实际的事件类型,目前只有IllegalDumping(垃圾违规投放)
+ public byte[] bReserved = new byte[264]; // 保留字节,留待扩展.
+ public int nObjectNum; // 检测到的物体个数
+ public NET_MSG_OBJECT[] stuObjectIDs = (NET_MSG_OBJECT[]) new NET_MSG_OBJECT().toArray(NET_MAX_OBJECT_LIST); // 检测到的物体
+ public int nTrackNum; // 轨迹数(与检测到的物体个数 nObjectNum 对应)
+ public NET_POLY_POINTS[] stuTrackInfo = (NET_POLY_POINTS[]) new NET_POLY_POINTS().toArray(NET_MAX_OBJECT_LIST); // 轨迹信息(与检测到的物体对应)
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public SCENE_IMAGE_INFO_EX stuSceneImage; // 全景广角图
+ public int nObjetcHumansNum; // 检测到人的数量
+ public NET_VAOBJECT_NUMMAN[] stuObjetcHumans = (NET_VAOBJECT_NUMMAN[])new NET_VAOBJECT_NUMMAN().toArray(100); // 检测的到人
+ public NET_MSG_OBJECT stuVehicle; //车身信息
+ public int emTriggerType; //触发类型,参考EM_TRIGGER_TYPE
+ public int nMark; // 标记抓拍帧
+ public int nSource; // 视频分析的数据源地址
+ public int nFrameSequence; // 视频分析帧序号
+ public int emCaptureProcess; // 抓拍过程,参考EM_CAPTURE_PROCESS_END_TYPE
+ public NetSDKLib.DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar; //交通车辆信息
+ public NetSDKLib.EVENT_COMM_INFO stuCommInfo; //公共信息
+ public NET_PTZSPACE_UNNORMALIZED stuAbsPosition; // 云台方向与放大倍数(扩大100倍表示)
+ // 第一个元素为水平角度,0-36000;
+ // 第二个元素为垂直角度,(-18000)-(18000);
+ // 第三个元素为显示放大倍数,0-MaxZoom*100
+ public int nHFovValue; // 对应倍率水平视场角, 单位0.01度, 扩大100倍表示
+ public double dbFocusPosition; // 聚焦位置
+ public byte[] byReserved = new byte[19500]; // 预留字节
+
+ }
+
+ // 事件类型 EVENT_IVS_WANDERDETECTION(徘徊事件)对应的数据块描述信息
+ public static class DEV_EVENT_WANDER_INFO extends SdkStructure {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2]; // 保留字节
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int nObjectNum; // 检测到的物体个数
+ public NET_MSG_OBJECT[] stuObjectIDs = (NET_MSG_OBJECT[]) new NET_MSG_OBJECT().toArray(NET_MAX_OBJECT_LIST); // 检测到的物体
+ public int nTrackNum; // 轨迹数(与检测到的物体个数对应)
+ public NET_POLY_POINTS[] stuTrackInfo = (NET_POLY_POINTS[]) new NET_POLY_POINTS().toArray(NET_MAX_OBJECT_LIST); // 轨迹信息(与检测到的物体对应)
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public NET_POINT[] DetectRegion = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON , 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public int nSourceIndex; // 事件源设备上的index,-1表示数据无效
+ public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ public int nOccurrenceCount; // 事件触发累计次数, unsigned int 类型
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public short nPreserID; // 事件触发的预置点号,从1开始(没有表示未知)
+ public byte[] szPresetName = new byte[64]; // 事件触发的预置名称
+ public NET_EXTENSION_INFO stuExtensionInfo; // 扩展信息
+ public NET_POSTION stuPostion; // 坐标与放大倍数
+ public byte[] byReserved2=new byte[4]; // 字节对齐
+ public int nCurChannelHFOV; // 当前报警通道的横向视场角,单位:度,实际角度乘以100
+ public int nCurChannelVFOV; // 当前报警通道的垂直视场角,单位:度,实际角度乘以100
+ public NET_IMAGE_INFO_EX2[] stuImageInfo = (NET_IMAGE_INFO_EX2[])new NET_IMAGE_INFO_EX2().toArray(32); //图片信息数组
+ public int nImageInfoNum; // 图片信息个数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] bReserved = new byte[402]; // 保留字节,留待扩展.
+ }
+
+ //事件类型 EVENT_IVS_LEAVEDETECTION(离岗检测事件)对应数据块描述信息
+ public static class DEV_EVENT_IVS_LEAVE_INFO extends SdkStructure {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public NET_POINT[] DetectRegion = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM);// 规则检测区域
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public int emTriggerMode; // 离岗的触发模式,参考EM_LEAVEDETECTION_TRIGGER_MODE
+ public int emState; // 检测状态,参考EM_LEAVEDETECTION_STATE
+ public int bSceneImage; // stuSceneImage 是否有效
+ public SCENE_IMAGE_INFO_EX stuSceneImage; // 全景广角图
+ public byte[] szUserName= new byte[32]; // 用户名称
+ public Pointer pstuImageInfo; // 图片信息数组 ,结构体NET_IMAGE_INFO_EX2数组指针
+ public int nImageInfoNum; // 图片信息个数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] bReserved = new byte[50]; // 保留字节
+ }
+
+ //事件类型 EVENT_IVS_AUDIO_ABNORMALDETECTION(声音异常检测)对应数据块描述信息
+ public static class DEV_EVENT_IVS_AUDIO_ABNORMALDETECTION_INFO extends SdkStructure {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nDecibel; // 声音强度
+ public int nFrequency; // 声音频率
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public byte[] bReserved = new byte[1024]; // 保留字节,留待扩展.
+ }
+
+ //事件类型 EVENT_IVS_CLIMBDETECTION(攀高检测事件)对应数据块描述信息
+ public static class DEV_EVENT_IVS_CLIMB_INFO extends SdkStructure {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public int nDetectLineNum; // 规则检测线顶点数
+ public NET_POINT[] DetectLine = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_LINE_NUM); // 规则检测线
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int nOccurrenceCount; // 事件触发累计次数, unsigned int
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public byte[] bReserved = new byte[890]; // 保留字节
+ }
+
+ // 事件类型 EVENT_IVS_FIGHTDETECTION(斗殴事件)对应的数据块描述信息
+ public static class DEV_EVENT_FIGHT_INFO extends SdkStructure {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nObjectNum; // 检测到的物体个数
+ public NET_MSG_OBJECT[] stuObjectIDs = (NET_MSG_OBJECT[])new NET_MSG_OBJECT().toArray(NET_MAX_OBJECT_LIST); // 检测到的物体列表
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2]; // 保留字节
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public NET_POINT[] DetectRegion = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域
+
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON, 0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public int nSourceIndex; // 事件源设备上的index,-1表示数据无效
+ public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ public int nOccurrenceCount; // 事件触发累计次数, unsigned int 类型
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public NET_EXTENSION_INFO stuExtensionInfo; // 扩展信息
+ public byte[] szSourceID = new byte[32]; // 事件关联ID。应用场景是同一个物体或者同一张图片做不同分析,产生的多个事件的SourceID相同
+ // 缺省时为空字符串,表示无此信息
+ // 格式:类型+时间+序列号,其中类型2位,时间14位,序列号5位
+ public int emActionType; // 动作类型 ,参考枚举EM_STEREO_ACTION_TYPE
+ public SCENE_IMAGE_INFO stuSceneImage; // 全景广角图
+ public Pointer pstuImageInfo; // 图片信息数组,对应结构体NET_IMAGE_INFO_EX2的数组
+ public int nImageInfoNum; // 图片信息个数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] bReserved = new byte[240]; // 保留字节,留待扩展.
+
+ }
+
+ // 加油类型
+ public static class EM_REFUEL_TYPE extends SdkStructure {
+ public static final int EM_REFUEL_TYPE_UNKNOWN = 0; // unknown
+ public static final int EM_REFUEL_TYPE_NINETY_EIGHT = 1; // "98#"
+ public static final int EM_REFUEL_TYPE_NINETY_SEVEN = 2; // "97#"
+ public static final int EM_REFUEL_TYPE_NINETY_FIVE = 3; // "95#"
+ public static final int EM_REFUEL_TYPE_NINETY_THREE = 4; // "93#"
+ public static final int EM_REFUEL_TYPE_NINETY = 5; // "90#"
+ public static final int EM_REFUEL_TYPE_TEN = 6; // "10#"
+ public static final int EM_REFUEL_TYPE_FIVE = 7; // "5#"
+ public static final int EM_REFUEL_TYPE_ZERO = 8; // "0#"
+ public static final int EM_REFUEL_TYPE_NEGATIVE_TEN = 9; // "-10#"
+ public static final int EM_REFUEL_TYPE_NEGATIVE_TWENTY = 10; // "-20#"
+ public static final int EM_REFUEL_TYPE_NEGATIVE_THIRTY_FIVE = 11; // "-35#"
+ public static final int EM_REFUEL_TYPE_NEGATIVE_FIFTY = 12; // "-50#"
+ }
+
+ // 车辆抓拍图片信息
+ public static class DEV_EVENT_TRAFFIC_FCC_IMAGE extends SdkStructure {
+ public int dwOffSet; // 图片文件在二进制数据块中的偏移位置, 单位:字节
+ public int dwLength; // 图片大小, 单位:字节
+ public short wWidth; // 图片宽度, 单位:像素
+ public short wHeight; // 图片高度, 单位:像素
+ }
+
+ // 车辆抓图信息
+ public static class DEV_EVENT_TRAFFIC_FCC_OBJECT extends SdkStructure {
+ public DEV_EVENT_TRAFFIC_FCC_IMAGE stuImage; // 车辆抓拍图片信息
+ }
+
+ // 事件类型 EVENT_IVS_TRAFFIC_FCC 加油站提枪、挂枪事件
+ public static class DEV_EVENT_TRAFFIC_FCC_INFO extends SdkStructure {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public int nTriggerID; // 触发类型: 1表示提枪, 2表示挂枪
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ ///////////////////////////////以上为公共字段//////////////////////////////
+
+ public int nNum; // 加油枪号
+ public int nLitre; // 加油升数,单位 0.01升
+ public int emType; // 加油类型: 取值范围{"90#","93#","10#","-20#"}, 具体参考 EM_REFUEL_TYPE
+ public int dwMoney; // 加油金额,单位 0.01元
+ public byte[] szText = new byte[NET_COMMON_STRING_16]; // 车牌号
+ public byte[] szTime = new byte[NET_COMMON_STRING_32]; // 事件发生时间: "2016-05-23 10:31:17"
+ public DEV_EVENT_TRAFFIC_FCC_OBJECT stuObject; // 车辆抓图信息
+ public byte[] bReserved = new byte[1024]; // 保留字节,留待扩展
+ }
+
+ // 区域或曲线顶点信息
+ public static class NET_POLY_POINTS extends SdkStructure
+ {
+ public int nPointNum; // 顶点数
+ public NET_POINT[] stuPoints = new NET_POINT[NET_MAX_DETECT_REGION_NUM]; // 顶点信息
+
+ public NET_POLY_POINTS(){
+ for(int i=0;i时,bImportantRecID<<8 +bHint ,组成图片定位索引 )
+ public byte bRecType; // 0-主码流录像 1-辅码1流录像 2-辅码流2 3-辅码流3录像
+
+ public static class ByValue extends NET_RECORDFILE_INFO implements SdkStructure.ByValue { }
+ }
+
+ // 录像查询类型
+ public static class EM_QUERY_RECORD_TYPE extends SdkStructure {
+ public static final int EM_RECORD_TYPE_ALL = 0; // 所有录像
+ public static final int EM_RECORD_TYPE_ALARM = 1; // 外部报警录像
+ public static final int EM_RECORD_TYPE_MOTION_DETECT = 2; // 动态检测报警录像
+ public static final int EM_RECORD_TYPE_ALARM_ALL = 3; // 所有报警录像
+ public static final int EM_RECORD_TYPE_CARD = 4; // 卡号查询
+ public static final int EM_RECORD_TYPE_CONDITION = 5; // 按条件查询
+ public static final int EM_RECORD_TYPE_JOIN = 6; // 组合查询
+ public static final int EM_RECORD_TYPE_CARD_PICTURE = 8; // 按卡号查询图片,HB-U、NVS等使用
+ public static final int EM_RECORD_TYPE_PICTURE = 9; // 查询图片,HB-U、NVS等使用
+ public static final int EM_RECORD_TYPE_FIELD = 10; // 按字段查询
+ public static final int EM_RECORD_TYPE_INTELLI_VIDEO = 11; // 智能录像查询
+ public static final int EM_RECORD_TYPE_NET_DATA = 15; // 查询网络数据,金桥网吧等使用
+ public static final int EM_RECORD_TYPE_TRANS_DATA = 16; // 查询透明串口数据录像
+ public static final int EM_RECORD_TYPE_IMPORTANT = 17; // 查询重要录像
+ public static final int EM_RECORD_TYPE_TALK_DATA = 18; // 查询录音文件
+
+ public static final int EM_RECORD_TYPE_INVALID = 256; // 无效的查询类型
+ }
+
+ // 语言种类
+ public static class NET_LANGUAGE_TYPE extends SdkStructure
+ {
+ public static final int NET_LANGUAGE_ENGLISH = 0; //英文
+ public static final int NET_LANGUAGE_CHINESE_SIMPLIFIED = NET_LANGUAGE_ENGLISH+1; //简体中文
+ public static final int NET_LANGUAGE_CHINESE_TRADITIONAL = NET_LANGUAGE_CHINESE_SIMPLIFIED+1; //繁体中文
+ public static final int NET_LANGUAGE_ITALIAN = NET_LANGUAGE_CHINESE_TRADITIONAL+1; //意大利文
+ public static final int NET_LANGUAGE_SPANISH = NET_LANGUAGE_ITALIAN+1; //西班牙文
+ public static final int NET_LANGUAGE_JAPANESE = NET_LANGUAGE_SPANISH+1; //日文版
+ public static final int NET_LANGUAGE_RUSSIAN = NET_LANGUAGE_JAPANESE+1; //俄文版
+ public static final int NET_LANGUAGE_FRENCH = NET_LANGUAGE_RUSSIAN+1; //法文版
+ public static final int NET_LANGUAGE_GERMAN = NET_LANGUAGE_FRENCH+1; //德文版
+ public static final int NET_LANGUAGE_PORTUGUESE = NET_LANGUAGE_GERMAN+1; //葡萄牙语
+ public static final int NET_LANGUAGE_TURKEY = NET_LANGUAGE_PORTUGUESE+1; //土尔其语
+ public static final int NET_LANGUAGE_POLISH = NET_LANGUAGE_TURKEY+1; //波兰语
+ public static final int NET_LANGUAGE_ROMANIAN = NET_LANGUAGE_POLISH+1; //罗马尼亚
+ public static final int NET_LANGUAGE_HUNGARIAN = NET_LANGUAGE_ROMANIAN+1; //匈牙利语
+ public static final int NET_LANGUAGE_FINNISH = NET_LANGUAGE_HUNGARIAN+1; //芬兰语
+ public static final int NET_LANGUAGE_ESTONIAN = NET_LANGUAGE_FINNISH+1; //爱沙尼亚语
+ public static final int NET_LANGUAGE_KOREAN = NET_LANGUAGE_ESTONIAN+1; //韩语
+ public static final int NET_LANGUAGE_FARSI = NET_LANGUAGE_KOREAN+1; //波斯语
+ public static final int NET_LANGUAGE_DANSK = NET_LANGUAGE_FARSI+1; //丹麦语
+ public static final int NET_LANGUAGE_CZECHISH = NET_LANGUAGE_DANSK+1; //捷克文
+ public static final int NET_LANGUAGE_BULGARIA = NET_LANGUAGE_CZECHISH+1; //保加利亚文
+ public static final int NET_LANGUAGE_SLOVAKIAN = NET_LANGUAGE_BULGARIA+1; //斯洛伐克语
+ public static final int NET_LANGUAGE_SLOVENIA = NET_LANGUAGE_SLOVAKIAN+1; //斯洛文尼亚文
+ public static final int NET_LANGUAGE_CROATIAN = NET_LANGUAGE_SLOVENIA+1; //克罗地亚语
+ public static final int NET_LANGUAGE_DUTCH = NET_LANGUAGE_CROATIAN+1; //荷兰语
+ public static final int NET_LANGUAGE_GREEK = NET_LANGUAGE_DUTCH+1; //希腊语
+ public static final int NET_LANGUAGE_UKRAINIAN = NET_LANGUAGE_GREEK+1; //乌克兰语
+ public static final int NET_LANGUAGE_SWEDISH = NET_LANGUAGE_UKRAINIAN+1; //瑞典语
+ public static final int NET_LANGUAGE_SERBIAN = NET_LANGUAGE_SWEDISH+1; //塞尔维亚语
+ public static final int NET_LANGUAGE_VIETNAMESE = NET_LANGUAGE_SERBIAN+1; //越南语
+ public static final int NET_LANGUAGE_LITHUANIAN = NET_LANGUAGE_VIETNAMESE+1; //立陶宛语
+ public static final int NET_LANGUAGE_FILIPINO = NET_LANGUAGE_LITHUANIAN+1; //菲律宾语
+ public static final int NET_LANGUAGE_ARABIC = NET_LANGUAGE_FILIPINO+1; //阿拉伯语
+ public static final int NET_LANGUAGE_CATALAN = NET_LANGUAGE_ARABIC+1; //加泰罗尼亚语
+ public static final int NET_LANGUAGE_LATVIAN = NET_LANGUAGE_CATALAN+1; //拉脱维亚语
+ public static final int NET_LANGUAGE_THAI = NET_LANGUAGE_LATVIAN+1; //泰语
+ public static final int NET_LANGUAGE_HEBREW = NET_LANGUAGE_THAI+1; //希伯来语
+ public static final int NET_LANGUAGE_Bosnian = NET_LANGUAGE_HEBREW+1; //波斯尼亚文
+ }
+
+ // 区域信息
+ public static class CFG_RECT extends SdkStructure
+ {
+ public int nLeft;
+ public int nTop;
+ public int nRight;
+ public int nBottom;
+ }
+
+ // 视频输入夜晚特殊配置选项,在晚上光线较暗时自动切换到夜晚的配置参数
+ public static class CFG_VIDEO_IN_NIGHT_OPTIONS extends SdkStructure
+ {
+ public byte bySwitchMode;//已废弃,使用CFG_VIDEO_IN_OPTIONS里面的bySwitchMode
+ //0-不切换,总是使用白天配置;1-根据亮度切换;2-根据时间切换;3-不切换,总是使用夜晚配置;4-使用普通配置
+ public byte byProfile;//当前使用的配置文件.
+ // 0-白天
+ // 1-晚上
+ // 2-Normal
+ // 0,1,2都为临时配置,使图像生效,便于查看图像调试效果,不点击确定,离开页面不保存至设备。
+ ///3-非临时配置,点击确定后保存至设备,与SwitchMode结合使用,根据SwitchMode决定最终生效的配置。
+ // SwitchMode=0,Profile=3,设置白天配置到设备;
+ // SwitchMode=1,Profile=3,则设置夜晚配置到设备
+ // SwitchMode=2,Profile=3,根据日出日落时间段切换,白天时间段使用白天配置,夜晚时间段使用夜晚配置,保存至设备;
+ // SwitchMode=4,Profile=3;使用普通配置,保存至设备
+ public byte byBrightnessThreshold;//亮度阈值0~100
+ public byte bySunriseHour;//大致日出和日落时间,日落之后日出之前,将采用夜晚特殊的配置。
+ public byte bySunriseMinute;//00:00:00 ~ 23:59:59
+ public byte bySunriseSecond;
+ public byte bySunsetHour;
+ public byte bySunsetMinute;
+ public byte bySunsetSecond;
+ public byte byGainRed;//红色增益调节,白平衡为"Custom"模式下有效0~100
+ public byte byGainBlue;//绿色增益调节,白平衡为"Custom"模式下有效0~100
+ public byte byGainGreen;//蓝色增益调节,白平衡为"Custom"模式下有效0~100
+ public byte byExposure;//曝光模式;取值范围取决于设备能力集:0-自动曝光,1-曝光等级1,2-曝光等级2…n-1最大曝光等级数n带时间上下限的自动曝光n+1自定义时间手动曝光 (n==byExposureEn)
+ public float fExposureValue1;//自动曝光时间下限或者手动曝光自定义时间,毫秒为单位,取值0.1ms~80ms
+ public float fExposureValue2;//自动曝光时间上限,毫秒为单位,取值0.1ms~80ms
+ public byte byWhiteBalance;//白平衡,0-"unAble", 1-"Auto", 2-"Custom", 3-"Sunny", 4-"Cloudy", 5-"Home", 6-"Office", 7-"Night", 8-"HighColorTemperature", 9-"LowColorTemperature", 10-"AutoColorTemperature", 11-"CustomColorTemperature"
+ public byte byGain;//0~100,GainAuto为true时表示自动增益的上限,否则表示固定的增益值
+ public byte bGainAuto;//自动增益, 类型为bool, 取值0或1
+ public byte bIrisAuto;//自动光圈, 类型为bool, 取值0或1
+ public float fExternalSyncPhase;//外同步的相位设置0~360
+ public byte byGainMin;//增益下限
+ public byte byGainMax;//增益上限
+ public byte byBacklight;//背光补偿:取值范围取决于设备能力集:0-关闭1-启用2-指定区域背光补偿
+ public byte byAntiFlicker;//防闪烁模式0-Outdoor1-50Hz防闪烁 2-60Hz防闪烁
+ public byte byDayNightColor;//日/夜模式;0-总是彩色,1-根据亮度自动切换,2-总是黑白
+ public byte byExposureMode;//曝光模式调节曝光等级为自动曝光时有效,取值:0-默认自动,1-增益优先,2-快门优先
+ public byte byRotate90;//0-不旋转,1-顺时针90°,2-逆时针90°
+ public byte bMirror;//镜像, 类型为bool, 取值0或1
+ public byte byWideDynamicRange;//宽动态值0-关闭,1~100-为真实范围值
+ public byte byGlareInhibition;//强光抑制0-关闭,1~100为范围值
+ public CFG_RECT stuBacklightRegion = new CFG_RECT();//背光补偿区域
+ public byte byFocusMode;//0-关闭,1-辅助聚焦,2-自动聚焦
+ public byte bFlip;//翻转, 类型为bool, 取值0或1
+ public byte[] reserved = new byte[74];//保留
+ }
+
+ // 闪光灯配置
+ public static class CFG_FLASH_CONTROL extends SdkStructure
+ {
+ public byte byMode;//工作模式,0-禁止闪光,1-始终闪光,2-自动闪光
+ public byte byValue;//工作值,0-0us,1-64us, 2-128us, 3-192...15-960us
+ public byte byPole;//触发模式,0-低电平1-高电平 2-上升沿 3-下降沿
+ public byte byPreValue;//亮度预设值区间0~100
+ public byte byDutyCycle;//占空比,0~100
+ public byte byFreqMultiple;//倍频,0~10
+ public byte[] reserved = new byte[122];//保留
+ }
+
+ // 抓拍参数特殊配置
+ public static class CFG_VIDEO_IN_SNAPSHOT_OPTIONS extends SdkStructure
+ {
+ public byte byGainRed;//红色增益调节,白平衡为"Custom"模式下有效0~100
+ public byte byGainBlue;//绿色增益调节,白平衡为"Custom"模式下有效0~100
+ public byte byGainGreen;//蓝色增益调节,白平衡为"Custom"模式下有效0~100
+ public byte byExposure;//曝光模式;取值范围取决于设备能力集:0-自动曝光,1-曝光等级1,2-曝光等级2…n-1最大曝光等级数n带时间上下限的自动曝光n+1自定义时间手动曝光 (n==byExposureEn)
+ public float fExposureValue1;//自动曝光时间下限或者手动曝光自定义时间,毫秒为单位,取值0.1ms~80ms
+ public float fExposureValue2;//自动曝光时间上限,毫秒为单位,取值0.1ms~80ms
+ public byte byWhiteBalance;//白平衡,0-"unAble", 1-"Auto", 2-"Custom", 3-"Sunny", 4-"Cloudy", 5-"Home", 6-"Office", 7-"Night", 8-"HighColorTemperature", 9-"LowColorTemperature", 10-"AutoColorTemperature", 11-"CustomColorTemperature"
+ public byte byColorTemperature;//色温等级,白平衡为"CustomColorTemperature"模式下有效
+ public byte bGainAuto;//自动增益, 类型为bool, 取值0或1
+ public byte byGain;//增益调节,GainAuto为true时表示自动增益的上限,否则表示固定的增益值
+ public byte[] reversed = new byte[112];//保留
+ }
+
+ // 鱼眼镜头配置
+ public static class CFG_FISH_EYE extends SdkStructure
+ {
+ public CFG_POLYGON stuCenterPoint;//鱼眼圆心坐标,范围[0,8192]
+ public int nRadius;//鱼眼半径大小,范围[0,8192], 类型为unsigned int
+ public float fDirection;//镜头旋转方向,旋转角度[0,360.0]
+ public byte byPlaceHolder;//镜头安装方式1顶装,2壁装;3地装,默认1
+ public byte byCalibrateMode;//鱼眼矫正模式,详见CFG_CALIBRATE_MODE枚举值
+ public byte[] reversed = new byte[31];//保留
+ }
+
+ public static class CFG_VIDEO_IN_NORMAL_OPTIONS extends SdkStructure
+ {
+ public byte byGainRed;//红色增益调节,白平衡为"Custom"模式下有效0~100
+ public byte byGainBlue;//绿色增益调节,白平衡为"Custom"模式下有效0~100
+ public byte byGainGreen;//蓝色增益调节,白平衡为"Custom"模式下有效0~100
+ public byte byExposure;//曝光模式;取值范围取决于设备能力集:0-自动曝光,1-曝光等级1,2-曝光等级2…n-1最大曝光等级数n带时间上下限的自动曝光n+1自定义时间手动曝光 (n==byExposureEn)
+ public float fExposureValue1;//自动曝光时间下限或者手动曝光自定义时间,毫秒为单位,取值0.1ms~80ms
+ public float fExposureValue2;//自动曝光时间上限,毫秒为单位,取值0.1ms~80ms
+ public byte byWhiteBalance;//白平衡,0-"unAble", 1-"Auto", 2-"Custom", 3-"Sunny", 4-"Cloudy", 5-"Home", 6-"Office", 7-"Night", 8-"HighColorTemperature", 9-"LowColorTemperature", 10-"AutoColorTemperature", 11-"CustomColorTemperature"
+ public byte byGain;//0~100,GainAuto为true时表示自动增益的上限,否则表示固定的增益值
+ public byte bGainAuto;//自动增益, 类型为bool, 取值0或1
+ public byte bIrisAuto;//自动光圈, 类型为bool, 取值0或1
+ public float fExternalSyncPhase;//外同步的相位设置0~360
+ public byte byGainMin;//增益下限
+ public byte byGainMax;//增益上限
+ public byte byBacklight;//背光补偿:取值范围取决于设备能力集:0-关闭1-启用2-指定区域背光补偿
+ public byte byAntiFlicker;//防闪烁模式0-Outdoor1-50Hz防闪烁 2-60Hz防闪烁
+ public byte byDayNightColor;//日/夜模式;0-总是彩色,1-根据亮度自动切换,2-总是黑白
+ public byte byExposureMode;//曝光模式调节曝光等级为自动曝光时有效,取值:0-默认自动,1-增益优先,2-快门优先
+ public byte byRotate90;//0-不旋转,1-顺时针90°,2-逆时针90°
+ public byte bMirror;//镜像, 类型为bool, 取值0或1
+ public byte byWideDynamicRange;//宽动态值0-关闭,1~100-为真实范围值
+ public byte byGlareInhibition;//强光抑制0-关闭,1~100为范围值
+ public CFG_RECT stuBacklightRegion;//背光补偿区域
+ public byte byFocusMode;//0-关闭,1-辅助聚焦,2-自动聚焦
+ public byte bFlip;//翻转, 类型为bool, 取值0或1
+ public byte[] reserved = new byte[74];//保留
+ }
+
+ // 视频输入前端选项
+ public static class CFG_VIDEO_IN_OPTIONS extends SdkStructure
+ {
+ public byte byBacklight;//背光补偿:取值范围取决于设备能力集:0-关闭1-启用2-指定区域背光补偿
+ public byte byDayNightColor;//日/夜模式;0-总是彩色,1-根据亮度自动切换,2-总是黑白
+ public byte byWhiteBalance;//白平衡,0-"unAble", 1-"Auto", 2-"Custom", 3-"Sunny", 4-"Cloudy", 5-"Home", 6-"Office", 7-"Night", 8-"HighColorTemperature", 9-"LowColorTemperature", 10-"AutoColorTemperature", 11-"CustomColorTemperature"
+ public byte byColorTemperature;//色温等级,白平衡为"CustomColorTemperature"模式下有效
+ public byte bMirror;//镜像, 类型为bool, 取值0或1
+ public byte bFlip;//翻转, 类型为bool, 取值0或1
+ public byte bIrisAuto;//自动光圈, 类型为bool, 取值0或1
+ public byte bInfraRed;//根据环境光自动开启红外补偿灯, 类型为bool, 取值0或1
+ public byte byGainRed;//红色增益调节,白平衡为"Custom"模式下有效0~100
+ public byte byGainBlue;//绿色增益调节,白平衡为"Custom"模式下有效0~100
+ public byte byGainGreen;//蓝色增益调节,白平衡为"Custom"模式下有效0~100
+ public byte byExposure;//曝光模式;取值范围取决于设备能力集:0-自动曝光,1-曝光等级1,2-曝光等级2…n-1最大曝光等级数n带时间上下限的自动曝光n+1自定义时间手动曝光 (n==byExposureEn)
+ public float fExposureValue1;//自动曝光时间下限或者手动曝光自定义时间,毫秒为单位,取值0.1ms~80ms
+ public float fExposureValue2;//自动曝光时间上限,毫秒为单位,取值0.1ms~80ms
+ public byte bGainAuto;//自动增益, 类型为bool, 取值0或1
+ public byte byGain;//增益调节,GainAuto为true时表示自动增益的上限,否则表示固定的增益值
+ public byte bySignalFormat;//信号格式,0-Inside(内部输入)1-BT656 2-720p 3-1080p 4-1080i 5-1080sF
+ public byte byRotate90;//0-不旋转,1-顺时针90°,2-逆时针90°
+ public float fExternalSyncPhase;//外同步的相位设置 0~360
+ public byte byExternalSync;//外部同步信号输入,0-内部同步 1-外部同步
+ public byte bySwitchMode;//0-不切换,总是使用白天配置;1-根据亮度切换;2-根据时间切换;3-不切换,总是使用夜晚配置;4-使用普通配置
+ public byte byDoubleExposure;//双快门,0-不启用,1-双快门全帧率,即图像和视频只有快门参数不同,2-双快门半帧率,即图像和视频快门及白平衡参数均不同
+ public byte byWideDynamicRange;//宽动态值
+ public CFG_VIDEO_IN_NIGHT_OPTIONS stuNightOptions;//夜晚参数
+ public CFG_FLASH_CONTROL stuFlash;//闪光灯配置
+ public CFG_VIDEO_IN_SNAPSHOT_OPTIONS stuSnapshot;//抓拍参数,双快门时有效
+ public CFG_FISH_EYE stuFishEye;//鱼眼镜头
+ public byte byFocusMode;//0-关闭,1-辅助聚焦,2-自动聚焦
+ public byte[] reserved = new byte[28];//保留
+ public byte byGainMin;//增益下限
+ public byte byGainMax;//增益上限
+ public byte byAntiFlicker;//防闪烁模式 0-Outdoor 1-50Hz防闪烁 2-60Hz防闪烁
+ public byte byExposureMode;//曝光模式调节曝光等级为自动曝光时有效,取值:0-默认自动,1-增益优先,2-快门优先,4-手动
+ public byte byGlareInhibition;//强光抑制0-关闭,1~100为范围值
+ public CFG_RECT stuBacklightRegion;//背光补偿区域
+ public CFG_VIDEO_IN_NORMAL_OPTIONS stuNormalOptions;//普通参数
+ }
+
+ // 通用云台控制命令
+ public static class NET_PTZ_ControlType extends SdkStructure
+ {
+ public static final int NET_PTZ_UP_CONTROL = 0;//上
+ public static final int NET_PTZ_DOWN_CONTROL = NET_PTZ_UP_CONTROL+1; //下
+ public static final int NET_PTZ_LEFT_CONTROL = NET_PTZ_DOWN_CONTROL+1; //左
+ public static final int NET_PTZ_RIGHT_CONTROL = NET_PTZ_LEFT_CONTROL+1; //右
+ public static final int NET_PTZ_ZOOM_ADD_CONTROL = NET_PTZ_RIGHT_CONTROL+1; //变倍+
+ public static final int NET_PTZ_ZOOM_DEC_CONTROL = NET_PTZ_ZOOM_ADD_CONTROL+1; //变倍-
+ public static final int NET_PTZ_FOCUS_ADD_CONTROL = NET_PTZ_ZOOM_DEC_CONTROL+1; //调焦+
+ public static final int NET_PTZ_FOCUS_DEC_CONTROL = NET_PTZ_FOCUS_ADD_CONTROL+1; //调焦-
+ public static final int NET_PTZ_APERTURE_ADD_CONTROL = NET_PTZ_FOCUS_DEC_CONTROL+1; //光圈+
+ public static final int NET_PTZ_APERTURE_DEC_CONTROL = NET_PTZ_APERTURE_ADD_CONTROL+1; //光圈-
+ public static final int NET_PTZ_POINT_MOVE_CONTROL = NET_PTZ_APERTURE_DEC_CONTROL+1; //转至预置点
+ public static final int NET_PTZ_POINT_SET_CONTROL = NET_PTZ_POINT_MOVE_CONTROL+1; //设置
+ public static final int NET_PTZ_POINT_DEL_CONTROL = NET_PTZ_POINT_SET_CONTROL+1; //删除
+ public static final int NET_PTZ_POINT_LOOP_CONTROL = NET_PTZ_POINT_DEL_CONTROL+1; //点间巡航
+ public static final int NET_PTZ_LAMP_CONTROL = NET_PTZ_POINT_LOOP_CONTROL+1; //灯光雨刷
+ }
+
+ // 云台控制扩展命令
+ public static class NET_EXTPTZ_ControlType extends SdkStructure
+ {
+ public static final int NET_EXTPTZ_LEFTTOP = 0x20;//左上
+ public static final int NET_EXTPTZ_RIGHTTOP = NET_EXTPTZ_LEFTTOP+1; //右上
+ public static final int NET_EXTPTZ_LEFTDOWN = NET_EXTPTZ_RIGHTTOP+1; //左下
+ public static final int NET_EXTPTZ_RIGHTDOWN = NET_EXTPTZ_LEFTDOWN+1; //右下
+ public static final int NET_EXTPTZ_ADDTOLOOP = NET_EXTPTZ_RIGHTDOWN+1; //加入预置点到巡航巡航线路预置点值
+ public static final int NET_EXTPTZ_DELFROMLOOP = NET_EXTPTZ_ADDTOLOOP+1; //删除巡航中预置点巡航线路预置点值
+ public static final int NET_EXTPTZ_CLOSELOOP = NET_EXTPTZ_DELFROMLOOP+1; //清除巡航巡航线路
+ public static final int NET_EXTPTZ_STARTPANCRUISE = NET_EXTPTZ_CLOSELOOP+1; //开始水平旋转
+ public static final int NET_EXTPTZ_STOPPANCRUISE = NET_EXTPTZ_STARTPANCRUISE+1; //停止水平旋转
+ public static final int NET_EXTPTZ_SETLEFTBORDER = NET_EXTPTZ_STOPPANCRUISE+1; //设置左边界
+ public static final int NET_EXTPTZ_SETRIGHTBORDER = NET_EXTPTZ_SETLEFTBORDER+1; //设置右边界
+ public static final int NET_EXTPTZ_STARTLINESCAN = NET_EXTPTZ_SETRIGHTBORDER+1; //开始线扫
+ public static final int NET_EXTPTZ_CLOSELINESCAN = NET_EXTPTZ_STARTLINESCAN+1; //停止线扫
+ public static final int NET_EXTPTZ_SETMODESTART = NET_EXTPTZ_CLOSELINESCAN+1; //设置模式开始模式线路
+ public static final int NET_EXTPTZ_SETMODESTOP = NET_EXTPTZ_SETMODESTART+1; //设置模式结束模式线路
+ public static final int NET_EXTPTZ_RUNMODE = NET_EXTPTZ_SETMODESTOP+1; //运行模式模式线路
+ public static final int NET_EXTPTZ_STOPMODE = NET_EXTPTZ_RUNMODE+1; //停止模式模式线路
+ public static final int NET_EXTPTZ_DELETEMODE = NET_EXTPTZ_STOPMODE+1; //清除模式模式线路
+ public static final int NET_EXTPTZ_REVERSECOMM = NET_EXTPTZ_DELETEMODE+1; //翻转命令
+ public static final int NET_EXTPTZ_FASTGOTO = NET_EXTPTZ_REVERSECOMM+1; //快速定位水平坐标(8192)垂直坐标(8192)变倍(4)
+ public static final int NET_EXTPTZ_AUXIOPEN = NET_EXTPTZ_FASTGOTO+1; //辅助开关开辅助点
+ public static final int NET_EXTPTZ_AUXICLOSE = NET_EXTPTZ_AUXIOPEN+1; //辅助开关关辅助点
+ public static final int NET_EXTPTZ_OPENMENU = 0x36;//打开球机菜单
+ public static final int NET_EXTPTZ_CLOSEMENU = NET_EXTPTZ_OPENMENU+1; //关闭菜单
+ public static final int NET_EXTPTZ_MENUOK = NET_EXTPTZ_CLOSEMENU+1; //菜单确定
+ public static final int NET_EXTPTZ_MENUCANCEL = NET_EXTPTZ_MENUOK+1; //菜单取消
+ public static final int NET_EXTPTZ_MENUUP = NET_EXTPTZ_MENUCANCEL+1; //菜单上
+ public static final int NET_EXTPTZ_MENUDOWN = NET_EXTPTZ_MENUUP+1; //菜单下
+ public static final int NET_EXTPTZ_MENULEFT = NET_EXTPTZ_MENUDOWN+1; //菜单左
+ public static final int NET_EXTPTZ_MENURIGHT = NET_EXTPTZ_MENULEFT+1; //菜单右
+ public static final int NET_EXTPTZ_ALARMHANDLE = 0x40;//报警联动云台parm1:报警输入通道;parm2:报警联动类型1-预置点2-线扫3-巡航;parm3:联动值,如预置点号
+ public static final int NET_EXTPTZ_MATRIXSWITCH = 0x41;//矩阵切换parm1:预览器号(视频输出号);parm2:视频输入号;parm3:矩阵号
+ public static final int NET_EXTPTZ_LIGHTCONTROL= NET_EXTPTZ_MATRIXSWITCH+1; //灯光控制器
+ public static final int NET_EXTPTZ_EXACTGOTO = NET_EXTPTZ_LIGHTCONTROL+1; //三维精确定位parm1:水平角度(0~3600);parm2:垂直坐标(0~900);parm3:变倍(1~128)
+ public static final int NET_EXTPTZ_RESETZERO = NET_EXTPTZ_EXACTGOTO+1; //三维定位重设零位
+ public static final int NET_EXTPTZ_MOVE_ABSOLUTELY = NET_EXTPTZ_RESETZERO+1; //绝对移动控制命令,param4对应结构PTZ_CONTROL_ABSOLUTELY
+ public static final int NET_EXTPTZ_MOVE_CONTINUOUSLY = NET_EXTPTZ_MOVE_ABSOLUTELY+1; //持续移动控制命令,param4对应结构PTZ_CONTROL_CONTINUOUSLY
+ public static final int NET_EXTPTZ_GOTOPRESET = NET_EXTPTZ_MOVE_CONTINUOUSLY+1; //云台控制命令,以一定速度转到预置位点,parm4对应结构PTZ_CONTROL_GOTOPRESET
+ public static final int NET_EXTPTZ_SET_VIEW_RANGE = 0x49;//设置可视域(param4对应结构PTZ_VIEW_RANGE_INFO)
+ public static final int NET_EXTPTZ_FOCUS_ABSOLUTELY = 0x4A;//绝对聚焦(param4对应结构PTZ_FOCUS_ABSOLUTELY)
+ public static final int NET_EXTPTZ_HORSECTORSCAN = 0x4B;//水平扇扫(param4对应PTZ_CONTROL_SECTORSCAN,param1、param2、param3无效)
+ public static final int NET_EXTPTZ_VERSECTORSCAN = 0x4C;//垂直扇扫(param4对应PTZ_CONTROL_SECTORSCAN,param1、param2、param3无效)
+ public static final int NET_EXTPTZ_SET_ABS_ZOOMFOCUS = 0x4D;//设定绝对焦距、聚焦值,param1为焦距,范围:0,255],param2为聚焦,范围:[0,255],param3、param4无效
+ public static final int NET_EXTPTZ_SET_FISHEYE_EPTZ = 0x4E;//控制鱼眼电子云台,param4对应结构PTZ_CONTROL_SET_FISHEYE_EPTZ
+ public static final int NET_EXTPTZ_UP_TELE = 0x70; //上 + TELE param1=速度(1-8),下同
+ public static final int NET_EXTPTZ_DOWN_TELE = NET_EXTPTZ_UP_TELE+1; //下 + TELE
+ public static final int NET_EXTPTZ_LEFT_TELE = NET_EXTPTZ_DOWN_TELE+1; //左 + TELE
+ public static final int NET_EXTPTZ_RIGHT_TELE = NET_EXTPTZ_LEFT_TELE+1; //右 + TELE
+ public static final int NET_EXTPTZ_LEFTUP_TELE = NET_EXTPTZ_RIGHT_TELE+1; //左上 + TELE
+ public static final int NET_EXTPTZ_LEFTDOWN_TELE = NET_EXTPTZ_LEFTUP_TELE+1; //左下 + TELE
+ public static final int NET_EXTPTZ_TIGHTUP_TELE = NET_EXTPTZ_LEFTDOWN_TELE+1; //右上 + TELE
+ public static final int NET_EXTPTZ_RIGHTDOWN_TELE = NET_EXTPTZ_TIGHTUP_TELE+1; //右下 + TELE
+ public static final int NET_EXTPTZ_UP_WIDE = NET_EXTPTZ_RIGHTDOWN_TELE+1; // 上 + WIDEparam1=速度(1-8),下同
+ public static final int NET_EXTPTZ_DOWN_WIDE = NET_EXTPTZ_UP_WIDE+1; //下 + WIDE
+ public static final int NET_EXTPTZ_LEFT_WIDE = NET_EXTPTZ_DOWN_WIDE+1; //左 + WIDE
+ public static final int NET_EXTPTZ_RIGHT_WIDE = NET_EXTPTZ_LEFT_WIDE+1; //右 + WIDE
+ public static final int NET_EXTPTZ_LEFTUP_WIDE = NET_EXTPTZ_RIGHT_WIDE+1; //左上 + WIDENET_IN_PTZBASE_SET_FOCUS_MAP_VALUE_INFO
+ public static final int NET_EXTPTZ_LEFTDOWN_WIDE = NET_EXTPTZ_LEFTUP_WIDE+1; //左下 + WIDE
+ public static final int NET_EXTPTZ_TIGHTUP_WIDE = NET_EXTPTZ_LEFTDOWN_WIDE+1; //右上 + WIDE
+ public static final int NET_EXTPTZ_RIGHTDOWN_WIDE = NET_EXTPTZ_TIGHTUP_WIDE+1; //右下 + WIDE
+ public static final int NET_EXTPTZ_GOTOPRESETSNAP = 0x80; // 转至预置点并抓图
+ public static final int NET_EXTPTZ_DIRECTIONCALIBRATION = 0x82; // 校准云台方向(双方向校准)
+ public static final int NET_EXTPTZ_SINGLEDIRECTIONCALIBRATION = 0x83; // 校准云台方向(单防线校准),param4对应结构 NET_IN_CALIBRATE_SINGLEDIRECTION
+ public static final int NET_EXTPTZ_MOVE_RELATIVELY = 0x84; // 云台相对定位,param4对应结构 NET_IN_MOVERELATIVELY_INFO
+ public static final int NET_EXTPTZ_SET_DIRECTION = 0x85; // 设置云台方向, param4对应结构 NET_IN_SET_DIRECTION_INFO
+ public static final int NET_EXTPTZ_BASE_MOVE_ABSOLUTELY = 0x86; // 精准绝对移动控制命令, param4对应结构 NET_IN_PTZBASE_MOVEABSOLUTELY_INFO(通过 CFG_CAP_CMD_PTZ 命令获取云台能力集( CFG_PTZ_PROTOCOL_CAPS_INFO ),若bSupportReal为TRUE则设备支持该操作)
+ public static final int NET_EXTPTZ_BASE_MOVE_CONTINUOUSLY = NET_EXTPTZ_BASE_MOVE_ABSOLUTELY+1; // 云台连续移动控制命令, param4 对应结构 NET_IN_PTZBASE_MOVE_CONTINUOUSLY_INFO. 通过 CFG_CAP_CMD_PTZ 命令获取云台能力集
+ // 若 CFG_PTZ_PROTOCOL_CAPS_INFO 中 stuMoveContinuously 字段的 stuType.bSupportExtra 为 TRUE, 表示设备支持该操作
+ public static final int NET_EXTPTZ_BASE_SET_FOCUS_MAP_VALUE = NET_EXTPTZ_BASE_MOVE_CONTINUOUSLY+1; // 设置当前位置聚焦值, param4对应结构体 NET_IN_PTZBASE_SET_FOCUS_MAP_VALUE_INFO
+ public static final int NET_EXTPTZ_BASE_MOVE_ABSOLUTELY_ONLYPT=NET_EXTPTZ_BASE_SET_FOCUS_MAP_VALUE+1;// 绝对定位独立控制PT并能以度/秒为单位的速度控制, param4对应结构 NET_IN_PTZBASE_MOVEABSOLUTELY_ONLYPT_INFO
+ public static final int NET_EXTPTZ_BASE_MOVE_ABSOLUTELY_ONLYZOOM=NET_EXTPTZ_BASE_MOVE_ABSOLUTELY_ONLYPT+1; // 绝对定位独立控制zoom,并能控制变倍速度, param4对应结构 NET_IN_PTZBASE_MOVEABSOLUTELY_ONLYZOOM_INFO
+ public static final int NET_EXTPTZ_STOP_MOVE=NET_EXTPTZ_BASE_MOVE_ABSOLUTELY_ONLYZOOM+1; // 云台移动停止,同时也停止巡航模式,param4对应结构体 NET_IN_STOP_MOVE_INFO
+ public static final int NET_EXTPTZ_START=NET_EXTPTZ_STOP_MOVE+1; // 开始云台控制,param4对应结构体 NET_IN_PTZ_START_INFO
+ public static final int NET_EXTPTZ_STOP=NET_EXTPTZ_START+1; // 结束云台控制,param4对应结构体 NET_IN_PTZ_STOP_INFO
+ public static final int NET_EXTPTZ_START_PATTERN_RECORD=NET_EXTPTZ_STOP+1; // 开始模式记录,param4对应结构体 NET_IN_START_PATTERN_RECORD_INFO
+ public static final int NET_EXTPTZ_STOP_PATTERN_RECORD=NET_EXTPTZ_START_PATTERN_RECORD+1; // 停止模式记录,param4对应结构体 NET_IN_STOP_PATTERN_RECORD_INFO
+ public static final int NET_EXTPTZ_START_PATTERN_REPLAY=NET_EXTPTZ_STOP_PATTERN_RECORD+1; // 开始模式回放,param4对应结构体 NET_IN_START_PATTERN_REPLAY_INFO
+ public static final int NET_EXTPTZ_STOP_PATTERN_REPLAY=NET_EXTPTZ_START_PATTERN_REPLAY+1; // 停止模式回放,param4对应结构体 NET_IN_STOP_PATTERN_REPLAY_INFO
+ public static final int NET_EXTPTZ_MOVE_DIRECTLY=NET_EXTPTZ_STOP_PATTERN_REPLAY+1; // 云台三维定位, param4对应结构体 NET_IN_MOVE_DIRECTLY_INFO
+ public static final int NET_EXTPTZ_TOTAL = NET_EXTPTZ_MOVE_DIRECTLY+1; //最大命令值
+ }
+
+ // 雨刷工作模式
+ public static class EM_CFG_RAINBRUSHMODE_MODE extends SdkStructure
+ {
+ public static final int EM_CFG_RAINBRUSHMODE_MODE_UNKNOWN = 0; //未知
+ public static final int EM_CFG_RAINBRUSHMODE_MODE_MANUAL = EM_CFG_RAINBRUSHMODE_MODE_UNKNOWN+1; //手动模式
+ public static final int EM_CFG_RAINBRUSHMODE_MODE_TIMING = EM_CFG_RAINBRUSHMODE_MODE_MANUAL+1; //定时模式
+ }
+
+ // 雨刷使能电平模式
+ public static class EM_CFG_RAINBRUSHMODE_ENABLEMODE extends SdkStructure
+ {
+ public static final int EM_CFG_RAINBRUSHMODE_ENABLEMODE_UNKNOWN = 0; //未知
+ public static final int EM_CFG_RAINBRUSHMODE_ENABLEMODE_LOW = EM_CFG_RAINBRUSHMODE_ENABLEMODE_UNKNOWN+1; //低电平有效(常闭)
+ public static final int EM_CFG_RAINBRUSHMODE_ENABLEMODE_HIGH = EM_CFG_RAINBRUSHMODE_ENABLEMODE_LOW+1; //高电平有效(常开)
+ }
+
+ // 雨刷模式相关配置(对应 CFG_RAINBRUSHMODE_INFO 命令)
+ public static class CFG_RAINBRUSHMODE_INFO extends SdkStructure
+ {
+ public int emMode;//雨刷工作模式, 取值为EM_CFG_RAINBRUSHMODE_MODE中的值
+ public int emEnableMode;//雨刷使能电平模式, 取值为EM_CFG_RAINBRUSHMODE_ENABLEMODE中的值
+ public int nPort;//雨刷使用的IO端口,-1表示未接入设备,-2表示该字段无效(设备未传送该字段)
+ public int nSensitivity; // 雨刷灵敏度, 只有当mode为Auto时有效, 范围[0, 10]
+ }
+
+ public static class CFG_RAINBRUSH_INFO extends SdkStructure
+ {
+ public byte bEnable; // 雨刷使能, 类型为bool, 取值0或1
+ public byte bSpeedRate; // 雨刷速度,1:快速;2:中速;3:慢速
+ public byte[] bReserved = new byte[2]; // 保留对齐
+ public TIME_SECTION_WEEK_DAY_6[] stuTimeSectionWeekDay =
+ (TIME_SECTION_WEEK_DAY_6[])new TIME_SECTION_WEEK_DAY_6().toArray(WEEK_DAY_NUM);// 事件响应时间段
+ public int nInterval; // 雨刷运动间隔事件, 单位: 秒
+ public int bProtectEnable; // 雨刷保护使能: true 保护开启, false 保护关闭
+ public int nProtectTime; // 保护时间, 单位: 秒
+ public CFG_RAINBRUSH_TOUR_INFO stuRainBrushTour=new CFG_RAINBRUSH_TOUR_INFO(); // 雨刷巡航模式配置,当CFG_RAINBRUSHMODE_INFO中EM_CFG_RAINBRUSHMODE_MODE为EM_CFG_RAINBRUSHMODE_MODE_TOUR时有效
+ }
+
+ // 控制类型,对应CLIENT_ControlDevice接口
+ public static class CtrlType extends SdkStructure
+ {
+ public static final int CTRLTYPE_CTRL_REBOOT = 0;//重启设备
+ public static final int CTRLTYPE_CTRL_SHUTDOWN = CTRLTYPE_CTRL_REBOOT+1; //关闭设备
+ public static final int CTRLTYPE_CTRL_DISK = CTRLTYPE_CTRL_SHUTDOWN+1; //硬盘管理
+ public static final int CTRLTYPE_KEYBOARD_POWER =3;//网络键盘
+ public static final int CTRLTYPE_KEYBOARD_ENTER = CTRLTYPE_KEYBOARD_POWER+1;
+ public static final int CTRLTYPE_KEYBOARD_ESC = CTRLTYPE_KEYBOARD_ENTER+1;
+ public static final int CTRLTYPE_KEYBOARD_UP = CTRLTYPE_KEYBOARD_ESC+1;
+ public static final int CTRLTYPE_KEYBOARD_DOWN = CTRLTYPE_KEYBOARD_UP+1;
+ public static final int CTRLTYPE_KEYBOARD_LEFT = CTRLTYPE_KEYBOARD_DOWN+1;
+ public static final int CTRLTYPE_KEYBOARD_RIGHT = CTRLTYPE_KEYBOARD_LEFT+1;
+ public static final int CTRLTYPE_KEYBOARD_BTN0 = CTRLTYPE_KEYBOARD_RIGHT+1;
+ public static final int CTRLTYPE_KEYBOARD_BTN1 = CTRLTYPE_KEYBOARD_BTN0+1;
+ public static final int CTRLTYPE_KEYBOARD_BTN2 = CTRLTYPE_KEYBOARD_BTN1+1;
+ public static final int CTRLTYPE_KEYBOARD_BTN3 = CTRLTYPE_KEYBOARD_BTN2+1;
+ public static final int CTRLTYPE_KEYBOARD_BTN4 = CTRLTYPE_KEYBOARD_BTN3+1;
+ public static final int CTRLTYPE_KEYBOARD_BTN5 = CTRLTYPE_KEYBOARD_BTN4+1;
+ public static final int CTRLTYPE_KEYBOARD_BTN6 = CTRLTYPE_KEYBOARD_BTN5+1;
+ public static final int CTRLTYPE_KEYBOARD_BTN7 = CTRLTYPE_KEYBOARD_BTN6+1;
+ public static final int CTRLTYPE_KEYBOARD_BTN8 = CTRLTYPE_KEYBOARD_BTN7+1;
+ public static final int CTRLTYPE_KEYBOARD_BTN9 = CTRLTYPE_KEYBOARD_BTN8+1;
+ public static final int CTRLTYPE_KEYBOARD_BTN10 = CTRLTYPE_KEYBOARD_BTN9+1;
+ public static final int CTRLTYPE_KEYBOARD_BTN11 = CTRLTYPE_KEYBOARD_BTN10+1;
+ public static final int CTRLTYPE_KEYBOARD_BTN12 = CTRLTYPE_KEYBOARD_BTN11+1;
+ public static final int CTRLTYPE_KEYBOARD_BTN13 = CTRLTYPE_KEYBOARD_BTN12+1;
+ public static final int CTRLTYPE_KEYBOARD_BTN14 = CTRLTYPE_KEYBOARD_BTN13+1;
+ public static final int CTRLTYPE_KEYBOARD_BTN15 = CTRLTYPE_KEYBOARD_BTN14+1;
+ public static final int CTRLTYPE_KEYBOARD_BTN16 = CTRLTYPE_KEYBOARD_BTN15+1;
+ public static final int CTRLTYPE_KEYBOARD_SPLIT = CTRLTYPE_KEYBOARD_BTN16+1;
+ public static final int CTRLTYPE_KEYBOARD_ONE = CTRLTYPE_KEYBOARD_SPLIT+1;
+ public static final int CTRLTYPE_KEYBOARD_NINE = CTRLTYPE_KEYBOARD_ONE+1;
+ public static final int CTRLTYPE_KEYBOARD_ADDR = CTRLTYPE_KEYBOARD_NINE+1;
+ public static final int CTRLTYPE_KEYBOARD_INFO = CTRLTYPE_KEYBOARD_ADDR+1;
+ public static final int CTRLTYPE_KEYBOARD_REC = CTRLTYPE_KEYBOARD_INFO+1;
+ public static final int CTRLTYPE_KEYBOARD_FN1 = CTRLTYPE_KEYBOARD_REC+1;
+ public static final int CTRLTYPE_KEYBOARD_FN2 = CTRLTYPE_KEYBOARD_FN1+1;
+ public static final int CTRLTYPE_KEYBOARD_PLAY = CTRLTYPE_KEYBOARD_FN2+1;
+ public static final int CTRLTYPE_KEYBOARD_STOP = CTRLTYPE_KEYBOARD_PLAY+1;
+ public static final int CTRLTYPE_KEYBOARD_SLOW = CTRLTYPE_KEYBOARD_STOP+1;
+ public static final int CTRLTYPE_KEYBOARD_FAST = CTRLTYPE_KEYBOARD_SLOW+1;
+ public static final int CTRLTYPE_KEYBOARD_PREW = CTRLTYPE_KEYBOARD_FAST+1;
+ public static final int CTRLTYPE_KEYBOARD_NEXT = CTRLTYPE_KEYBOARD_PREW+1;
+ public static final int CTRLTYPE_KEYBOARD_JMPDOWN = CTRLTYPE_KEYBOARD_NEXT+1;
+ public static final int CTRLTYPE_KEYBOARD_JMPUP = CTRLTYPE_KEYBOARD_JMPDOWN+1;
+ public static final int CTRLTYPE_KEYBOARD_10PLUS = CTRLTYPE_KEYBOARD_JMPUP+1;
+ public static final int CTRLTYPE_KEYBOARD_SHIFT = CTRLTYPE_KEYBOARD_10PLUS+1;
+ public static final int CTRLTYPE_KEYBOARD_BACK = CTRLTYPE_KEYBOARD_SHIFT+1;
+ public static final int CTRLTYPE_KEYBOARD_LOGIN = CTRLTYPE_KEYBOARD_BACK+1; // 新网络键盘功能
+ public static final int CTRLTYPE_KEYBOARD_CHNNEL = CTRLTYPE_KEYBOARD_LOGIN+1; // 切换视频通道
+ public static final int CTRLTYPE_TRIGGER_ALARM_IN =100; // 触发报警输入
+ public static final int CTRLTYPE_TRIGGER_ALARM_OUT = CTRLTYPE_TRIGGER_ALARM_IN+1; // 触发报警输出
+ public static final int CTRLTYPE_CTRL_MATRIX = CTRLTYPE_TRIGGER_ALARM_OUT+1; // 矩阵控制
+ public static final int CTRLTYPE_CTRL_SDCARD = CTRLTYPE_CTRL_MATRIX+1; // SD卡控制(IPC产品)参数同硬盘控制
+ public static final int CTRLTYPE_BURNING_START = CTRLTYPE_CTRL_SDCARD+1; // 刻录机控制,开始刻录
+ public static final int CTRLTYPE_BURNING_STOP = CTRLTYPE_BURNING_START+1; // 刻录机控制,结束刻录
+ public static final int CTRLTYPE_BURNING_ADDPWD = CTRLTYPE_BURNING_STOP+1; // 刻录机控制,叠加密码(以'\0'为结尾的字符串,最大长度8位)
+ public static final int CTRLTYPE_BURNING_ADDHEAD = CTRLTYPE_BURNING_ADDPWD+1; // 刻录机控制,叠加片头(以'\0'为结尾的字符串,最大长度1024字节,支持分行,行分隔符'\n')
+ public static final int CTRLTYPE_BURNING_ADDSIGN = CTRLTYPE_BURNING_ADDHEAD+1; // 刻录机控制,叠加打点到刻录信息(参数无)
+ public static final int CTRLTYPE_BURNING_ADDCURSTOMINFO = CTRLTYPE_BURNING_ADDSIGN+1; // 刻录机控制,自定义叠加(以'\0'为结尾的字符串,最大长度1024字节,支持分行,行分隔符'\n')
+ public static final int CTRLTYPE_CTRL_RESTOREDEFAULT = CTRLTYPE_BURNING_ADDCURSTOMINFO+1; // 恢复设备的默认设置
+ public static final int CTRLTYPE_CTRL_CAPTURE_START = CTRLTYPE_CTRL_RESTOREDEFAULT+1; // 触发设备抓图
+ public static final int CTRLTYPE_CTRL_CLEARLOG = CTRLTYPE_CTRL_CAPTURE_START+1; // 清除日志
+ public static final int CTRLTYPE_TRIGGER_ALARM_WIRELESS =200; // 触发无线报警(IPC产品)
+ public static final int CTRLTYPE_MARK_IMPORTANT_RECORD = CTRLTYPE_TRIGGER_ALARM_WIRELESS+1; // 标识重要录像文件
+ public static final int CTRLTYPE_CTRL_DISK_SUBAREA = CTRLTYPE_MARK_IMPORTANT_RECORD+1; // 网络硬盘分区
+ public static final int CTRLTYPE_BURNING_ATTACH = CTRLTYPE_CTRL_DISK_SUBAREA+1; // 刻录机控制,附件刻录.
+ public static final int CTRLTYPE_BURNING_PAUSE = CTRLTYPE_BURNING_ATTACH+1; // 刻录暂停
+ public static final int CTRLTYPE_BURNING_CONTINUE = CTRLTYPE_BURNING_PAUSE+1; // 刻录继续
+ public static final int CTRLTYPE_BURNING_POSTPONE = CTRLTYPE_BURNING_CONTINUE+1; // 刻录顺延
+ public static final int CTRLTYPE_CTRL_OEMCTRL = CTRLTYPE_BURNING_POSTPONE+1; // 报停控制
+ public static final int CTRLTYPE_BACKUP_START = CTRLTYPE_CTRL_OEMCTRL+1; // 设备备份开始
+ public static final int CTRLTYPE_BACKUP_STOP = CTRLTYPE_BACKUP_START+1; // 设备备份停止
+ public static final int CTRLTYPE_VIHICLE_WIFI_ADD = CTRLTYPE_BACKUP_STOP+1; // 车载手动增加WIFI配置
+ public static final int CTRLTYPE_VIHICLE_WIFI_DEC = CTRLTYPE_VIHICLE_WIFI_ADD+1; // 车载手动删除WIFI配置
+ public static final int CTRLTYPE_BUZZER_START = CTRLTYPE_VIHICLE_WIFI_DEC+1; // 蜂鸣器控制开始
+ public static final int CTRLTYPE_BUZZER_STOP = CTRLTYPE_BUZZER_START+1; // 蜂鸣器控制结束
+ public static final int CTRLTYPE_REJECT_USER = CTRLTYPE_BUZZER_STOP+1; // 剔除用户
+ public static final int CTRLTYPE_SHIELD_USER = CTRLTYPE_REJECT_USER+1; // 屏蔽用户
+ public static final int CTRLTYPE_RAINBRUSH = CTRLTYPE_SHIELD_USER+1; // 智能交通,雨刷控制
+ public static final int CTRLTYPE_MANUAL_SNAP = CTRLTYPE_RAINBRUSH+1; // 智能交通,手动抓拍(对应结构体MANUAL_SNAP_PARAMETER)
+ public static final int CTRLTYPE_MANUAL_NTP_TIMEADJUST = CTRLTYPE_MANUAL_SNAP+1; // 手动NTP校时
+ public static final int CTRLTYPE_NAVIGATION_SMS = CTRLTYPE_MANUAL_NTP_TIMEADJUST+1; // 导航信息和短消息
+ public static final int CTRLTYPE_CTRL_ROUTE_CROSSING = CTRLTYPE_NAVIGATION_SMS+1; // 路线点位信息
+ public static final int CTRLTYPE_BACKUP_FORMAT = CTRLTYPE_CTRL_ROUTE_CROSSING+1; // 格式化备份设备
+ public static final int CTRLTYPE_DEVICE_LOCALPREVIEW_SLIPT = CTRLTYPE_BACKUP_FORMAT+1; // 控制设备端本地预览分割(对应结构体DEVICE_LOCALPREVIEW_SLIPT_PARAMETER)
+ public static final int CTRLTYPE_CTRL_INIT_RAID = CTRLTYPE_DEVICE_LOCALPREVIEW_SLIPT+1; // RAID初始化
+ public static final int CTRLTYPE_CTRL_RAID = CTRLTYPE_CTRL_INIT_RAID+1; // RAID操作
+ public static final int CTRLTYPE_CTRL_SAPREDISK = CTRLTYPE_CTRL_RAID+1; // 热备盘操作
+ public static final int CTRLTYPE_WIFI_CONNECT = CTRLTYPE_CTRL_SAPREDISK+1; // 手动发起WIFI连接(对应结构体WIFI_CONNECT)
+ public static final int CTRLTYPE_WIFI_DISCONNECT = CTRLTYPE_WIFI_CONNECT+1; // 手动断开WIFI连接(对应结构体WIFI_CONNECT)
+ public static final int CTRLTYPE_CTRL_ARMED = CTRLTYPE_WIFI_DISCONNECT+1; // 布撤防操作
+ public static final int CTRLTYPE_CTRL_IP_MODIFY = CTRLTYPE_CTRL_ARMED+1; // 修改前端IP(对应结构体 NET_CTRL_IPMODIFY_PARAM)
+ public static final int CTRLTYPE_CTRL_WIFI_BY_WPS = CTRLTYPE_CTRL_IP_MODIFY+1; // wps连接wifi(对应结构体NET_CTRL_CONNECT_WIFI_BYWPS)
+ public static final int CTRLTYPE_CTRL_FORMAT_PATITION = CTRLTYPE_CTRL_WIFI_BY_WPS+1; // 格式化分区(对应结构体NET_FORMAT_PATITION)
+ public static final int CTRLTYPE_CTRL_EJECT_STORAGE = CTRLTYPE_CTRL_FORMAT_PATITION+1; // 手动卸载设备(对应结构体NET_EJECT_STORAGE_DEVICE)
+ public static final int CTRLTYPE_CTRL_LOAD_STORAGE = CTRLTYPE_CTRL_EJECT_STORAGE+1; // 手动装载设备(对应结构体NET_LOAD_STORAGE_DEVICE)
+ public static final int CTRLTYPE_CTRL_CLOSE_BURNER = CTRLTYPE_CTRL_LOAD_STORAGE+1; // 关闭刻录机光驱门(对应结构体NET_CTRL_BURNERDOOR)一般需要等6
+ public static final int CTRLTYPE_CTRL_EJECT_BURNER = CTRLTYPE_CTRL_CLOSE_BURNER+1; // 弹出刻录机光驱门(对应结构体NET_CTRL_BURNERDOOR)一般需要等4秒
+ public static final int CTRLTYPE_CTRL_CLEAR_ALARM = CTRLTYPE_CTRL_EJECT_BURNER+1; // 消警(对应结构体NET_CTRL_CLEAR_ALARM)
+ public static final int CTRLTYPE_CTRL_MONITORWALL_TVINFO = CTRLTYPE_CTRL_CLEAR_ALARM+1; // 电视墙信息显示(对应结构体NET_CTRL_MONITORWALL_TVINFO)
+ public static final int CTRLTYPE_CTRL_START_VIDEO_ANALYSE = CTRLTYPE_CTRL_MONITORWALL_TVINFO+1; // 开始视频智能分析(对应结构体NET_CTRL_START_VIDEO_ANALYSE)
+ public static final int CTRLTYPE_CTRL_STOP_VIDEO_ANALYSE = CTRLTYPE_CTRL_START_VIDEO_ANALYSE+1; // 停止视频智能分析(对应结构体NET_CTRL_STOP_VIDEO_ANALYSE)
+ public static final int CTRLTYPE_CTRL_UPGRADE_DEVICE = CTRLTYPE_CTRL_STOP_VIDEO_ANALYSE+1; // 控制启动设备升级,由设备独立完成升级过程,不需要传输升级文件
+ public static final int CTRLTYPE_CTRL_MULTIPLAYBACK_CHANNALES = CTRLTYPE_CTRL_UPGRADE_DEVICE+1; // 切换多通道预览回放的通道(对应结构体NET_CTRL_MULTIPLAYBACK_CHANNALES)
+ public static final int CTRLTYPE_CTRL_SEQPOWER_OPEN = CTRLTYPE_CTRL_MULTIPLAYBACK_CHANNALES+1; // 电源时序器打开开关量输出口(对应NET_CTRL_SEQPOWER_PARAM)
+ public static final int CTRLTYPE_CTRL_SEQPOWER_CLOSE = CTRLTYPE_CTRL_SEQPOWER_OPEN+1; // 电源时序器关闭开关量输出口(对应NET_CTRL_SEQPOWER_PARAM)
+ public static final int CTRLTYPE_CTRL_SEQPOWER_OPEN_ALL = CTRLTYPE_CTRL_SEQPOWER_CLOSE+1; // 电源时序器打开开关量输出口组(对应NET_CTRL_SEQPOWER_PARAM)
+ public static final int CTRLTYPE_CTRL_SEQPOWER_CLOSE_ALL = CTRLTYPE_CTRL_SEQPOWER_OPEN_ALL+1; // 电源时序器关闭开关量输出口组(对应NET_CTRL_SEQPOWER_PARAM)
+ public static final int CTRLTYPE_CTRL_PROJECTOR_RISE = CTRLTYPE_CTRL_SEQPOWER_CLOSE_ALL+1; // 投影仪上升(对应NET_CTRL_PROJECTOR_PARAM)
+ public static final int CTRLTYPE_CTRL_PROJECTOR_FALL = CTRLTYPE_CTRL_PROJECTOR_RISE+1; // 投影仪下降(对应NET_CTRL_PROJECTOR_PARAM)
+ public static final int CTRLTYPE_CTRL_PROJECTOR_STOP = CTRLTYPE_CTRL_PROJECTOR_FALL+1; // 投影仪停止(对应NET_CTRL_PROJECTOR_PARAM)
+ public static final int CTRLTYPE_CTRL_INFRARED_KEY = CTRLTYPE_CTRL_PROJECTOR_STOP+1; // 红外按键(对应NET_CTRL_INFRARED_KEY_PARAM)
+ public static final int CTRLTYPE_CTRL_START_PLAYAUDIO = CTRLTYPE_CTRL_INFRARED_KEY+1; // 设备开始播放音频文件(对应结构体NET_CTRL_START_PLAYAUDIO)
+ public static final int CTRLTYPE_CTRL_STOP_PLAYAUDIO = CTRLTYPE_CTRL_START_PLAYAUDIO+1; // 设备停止播放音频文件
+ public static final int CTRLTYPE_CTRL_START_ALARMBELL = CTRLTYPE_CTRL_STOP_PLAYAUDIO+1; // 开启警号(对应结构体 NET_CTRL_ALARMBELL )
+ public static final int CTRLTYPE_CTRL_STOP_ALARMBELL = CTRLTYPE_CTRL_START_ALARMBELL+1; // 关闭警号(对应结构体 NET_CTRL_ALARMBELL )
+ public static final int CTRLTYPE_CTRL_ACCESS_OPEN = CTRLTYPE_CTRL_STOP_ALARMBELL+1; // 门禁控制-开门(对应结构体 NET_CTRL_ACCESS_OPEN)
+ public static final int CTRLTYPE_CTRL_SET_BYPASS = CTRLTYPE_CTRL_ACCESS_OPEN+1; // 设置旁路功能(对应结构体NET_CTRL_SET_BYPASS)
+ public static final int CTRLTYPE_CTRL_RECORDSET_INSERT = CTRLTYPE_CTRL_SET_BYPASS+1; // 添加记录,获得记录集编号(对应NET_CTRL_RECORDSET_INSERT_PARAM)
+ public static final int CTRLTYPE_CTRL_RECORDSET_UPDATE = CTRLTYPE_CTRL_RECORDSET_INSERT+1; // 更新某记录集编号的记录(对应 NET_CTRL_RECORDSET_PARAM)
+ public static final int CTRLTYPE_CTRL_RECORDSET_REMOVE = CTRLTYPE_CTRL_RECORDSET_UPDATE+1; // 根据记录集编号删除某记录(对应 NET_CTRL_RECORDSET_PARAM)
+ public static final int CTRLTYPE_CTRL_RECORDSET_CLEAR = CTRLTYPE_CTRL_RECORDSET_REMOVE+1; // 清除所有记录集信息(对应NET_CTRL_RECORDSET_PARAM)
+ public static final int CTRLTYPE_CTRL_ACCESS_CLOSE = CTRLTYPE_CTRL_RECORDSET_CLEAR+1; // 门禁控制-关门(对应结构体NET_CTRL_ACCESS_CLOSE)
+ public static final int CTRLTYPE_CTRL_ALARM_SUBSYSTEM_ACTIVE_SET = CTRLTYPE_CTRL_ACCESS_CLOSE+1;// 报警子系统激活设置(对应结构体NET_CTRL_ALARM_SUBSYSTEM_SETACTIVE)
+ public static final int CTRLTYPE_CTRL_FORBID_OPEN_STROBE = CTRLTYPE_CTRL_ALARM_SUBSYSTEM_ACTIVE_SET+1; // 禁止设备端开闸(对应结构体NET_CTRL_FORBID_OPEN_STROBE)
+ public static final int CTRLTYPE_CTRL_OPEN_STROBE = CTRLTYPE_CTRL_FORBID_OPEN_STROBE+1; // 开启道闸(对应结构体 NET_CTRL_OPEN_STROBE)
+ public static final int CTRLTYPE_CTRL_TALKING_REFUSE = CTRLTYPE_CTRL_OPEN_STROBE+1; // 对讲拒绝接听(对应结构体NET_CTRL_TALKING_REFUSE)
+ public static final int CTRLTYPE_CTRL_ARMED_EX = CTRLTYPE_CTRL_TALKING_REFUSE+1; // 布撤防操作(对应结构体CTRL_ARM_DISARM_PARAM_EX),对CTRL_ARM_DISARM_PARAM升级,建议用这个
+ public static final int CTRLTYPE_CTRL_NET_KEYBOARD =400; // 网络键盘控制(对应结构体NET_CTRL_NET_KEYBOARD)
+ public static final int CTRLTYPE_CTRL_AIRCONDITION_OPEN = CTRLTYPE_CTRL_NET_KEYBOARD+1; // 打开空调(对应结构体NET_CTRL_OPEN_AIRCONDITION)
+ public static final int CTRLTYPE_CTRL_AIRCONDITION_CLOSE = CTRLTYPE_CTRL_AIRCONDITION_OPEN+1; // 关闭空调(对应结构体NET_CTRL_CLOSE_AIRCONDITION)
+ public static final int CTRLTYPE_CTRL_AIRCONDITION_SET_TEMPERATURE = CTRLTYPE_CTRL_AIRCONDITION_CLOSE+1; // 设定空调温度(对应结构体NET_CTRL_SET_TEMPERATURE)
+ public static final int CTRLTYPE_CTRL_AIRCONDITION_ADJUST_TEMPERATURE = CTRLTYPE_CTRL_AIRCONDITION_SET_TEMPERATURE+1; // 调节空调温度(对应结构体NET_CTRL_ADJUST_TEMPERATURE)
+ public static final int CTRLTYPE_CTRL_AIRCONDITION_SETMODE = CTRLTYPE_CTRL_AIRCONDITION_ADJUST_TEMPERATURE+1; // 设置空调工作模式(对应结构体NET_CTRL_ADJUST_TEMPERATURE)
+ public static final int CTRLTYPE_CTRL_AIRCONDITION_SETWINDMODE = CTRLTYPE_CTRL_AIRCONDITION_SETMODE+1; // 设置空调送风模式(对应结构体NET_CTRL_AIRCONDITION_SETMODE)
+ public static final int CTRLTYPE_CTRL_RESTOREDEFAULT_EX = CTRLTYPE_CTRL_AIRCONDITION_SETWINDMODE+1; // 恢复设备的默认设置新协议(对应结构体 NET_CTRL_RESTORE_DEFAULT )
+ // 恢复配置优先使用该枚举,如果接口失败,
+ // 且CLIENT_GetLastError返回NET_UNSUPPORTED,再尝试使用NET_CTRL_RESTOREDEFAULT恢复配置
+ public static final int CTRLTYPE_CTRL_NOTIFY_EVENT = CTRLTYPE_CTRL_RESTOREDEFAULT_EX+1; // 向设备发送事件(对应结构体NET_NOTIFY_EVENT_DATA)
+ public static final int CTRLTYPE_CTRL_SILENT_ALARM_SET = CTRLTYPE_CTRL_NOTIFY_EVENT+1; // 无声报警设置
+ public static final int CTRLTYPE_CTRL_START_PLAYAUDIOEX = CTRLTYPE_CTRL_SILENT_ALARM_SET+1; // 设备开始语音播报(对应结构体NET_CTRL_START_PLAYAUDIOEX)
+ public static final int CTRLTYPE_CTRL_STOP_PLAYAUDIOEX = CTRLTYPE_CTRL_START_PLAYAUDIOEX+1; // 设备停止语音播报
+ public static final int CTRLTYPE_CTRL_CLOSE_STROBE = CTRLTYPE_CTRL_STOP_PLAYAUDIOEX+1; // 关闭道闸(对应结构体 NET_CTRL_CLOSE_STROBE)
+ public static final int CTRLTYPE_CTRL_SET_ORDER_STATE = CTRLTYPE_CTRL_CLOSE_STROBE+1; // 设置车位预定状态(对应结构体NET_CTRL_SET_ORDER_STATE)
+ public static final int CTRLTYPE_CTRL_RECORDSET_INSERTEX = CTRLTYPE_CTRL_SET_ORDER_STATE+1; // 添加记录,获得记录集编号(对应 NET_CTRL_RECORDSET_INSERT_PARAM )
+ public static final int CTRLTYPE_CTRL_RECORDSET_UPDATEEX = CTRLTYPE_CTRL_RECORDSET_INSERTEX+1; // 更新某记录集编号的记录(对应NET_CTRL_RECORDSET_PARAM)
+ public static final int CTRLTYPE_CTRL_CAPTURE_FINGER_PRINT = CTRLTYPE_CTRL_RECORDSET_UPDATEEX+1; // 信息采集(对应结构体NET_CTRL_CAPTURE_FINGER_PRINT)
+ public static final int CTRLTYPE_CTRL_ECK_LED_SET = CTRLTYPE_CTRL_CAPTURE_FINGER_PRINT+1; // 停车场出入口控制器LED设置(对应结构体NET_CTRL_ECK_LED_SET_PARAM)
+ public static final int CTRLTYPE_CTRL_ECK_IC_CARD_IMPORT = CTRLTYPE_CTRL_ECK_LED_SET+1; // 智能停车系统出入口机IC卡信息导入(对应结构体NET_CTRL_ECK_IC_CARD_IMPORT_PARAM)
+ public static final int CTRLTYPE_CTRL_ECK_SYNC_IC_CARD = CTRLTYPE_CTRL_ECK_IC_CARD_IMPORT+1; // 智能停车系统出入口机IC卡信息同步指令,收到此指令后,设备删除原有IC卡信息(对应结构体NET_CTRL_ECK_SYNC_IC_CARD_PARAM)
+ public static final int CTRLTYPE_CTRL_LOWRATEWPAN_REMOVE = CTRLTYPE_CTRL_ECK_SYNC_IC_CARD+1; // 删除指定无线设备(对应结构体NET_CTRL_LOWRATEWPAN_REMOVE)
+ public static final int CTRLTYPE_CTRL_LOWRATEWPAN_MODIFY = CTRLTYPE_CTRL_LOWRATEWPAN_REMOVE+1; // 修改无线设备信息(对应结构体NET_CTRL_LOWRATEWPAN_MODIFY)
+ public static final int CTRLTYPE_CTRL_ECK_SET_PARK_INFO = CTRLTYPE_CTRL_LOWRATEWPAN_MODIFY+1; // 智能停车系统出入口机设置车位信息(对应结构体NET_CTRL_ECK_SET_PARK_INFO_PARAM)
+ public static final int CTRLTYPE_CTRL_VTP_DISCONNECT = CTRLTYPE_CTRL_ECK_SET_PARK_INFO+1; // 挂断视频电话(对应结构体NET_CTRL_VTP_DISCONNECT)
+ public static final int CTRLTYPE_CTRL_UPDATE_FILES = CTRLTYPE_CTRL_VTP_DISCONNECT+1; // 远程投放多媒体文件更新(对应结构体NET_CTRL_UPDATE_FILES)
+ public static final int CTRLTYPE_CTRL_MATRIX_SAVE_SWITCH = CTRLTYPE_CTRL_UPDATE_FILES+1; // 保存上下位矩阵输出关系(对应结构体NET_CTRL_MATRIX_SAVE_SWITCH)
+ public static final int CTRLTYPE_CTRL_MATRIX_RESTORE_SWITCH = CTRLTYPE_CTRL_MATRIX_SAVE_SWITCH+1; // 恢复上下位矩阵输出关系(对应结构体NET_CTRL_MATRIX_RESTORE_SWITCH)
+ public static final int CTRLTYPE_CTRL_VTP_DIVERTACK = CTRLTYPE_CTRL_MATRIX_RESTORE_SWITCH+1; // 呼叫转发响应(对应结构体NET_CTRL_VTP_DIVERTACK)
+ public static final int CTRLTYPE_CTRL_RAINBRUSH_MOVEONCE = CTRLTYPE_CTRL_VTP_DIVERTACK+1; // 雨刷来回刷一次,雨刷模式配置为手动模式时有效(对应结构体NET_CTRL_RAINBRUSH_MOVEONCE)
+ public static final int CTRLTYPE_CTRL_RAINBRUSH_MOVECONTINUOUSLY = CTRLTYPE_CTRL_RAINBRUSH_MOVEONCE+1; // 雨刷来回循环刷,雨刷模式配置为手动模式时有效(对应结构体NET_CTRL_RAINBRUSH_MOVECONTINUOUSLY)
+ public static final int CTRLTYPE_CTRL_RAINBRUSH_STOPMOVE = CTRLTYPE_CTRL_RAINBRUSH_MOVECONTINUOUSLY+1; // 雨刷停止刷,雨刷模式配置为手动模式时有效(对应结构体NET_CTRL_RAINBRUSH_STOPMOVE)
+ public static final int CTRLTYPE_CTRL_ALARM_ACK = CTRLTYPE_CTRL_RAINBRUSH_STOPMOVE+1; // 报警事件确认(对应结构体NET_CTRL_ALARM_ACK)
+ // NET_CTRL_ALARM_ACK 该操作切勿在报警回调接口中调用
+ public static final int CTRLTYPE_CTRL_RECORDSET_IMPORT = CTRLTYPE_CTRL_ALARM_ACK + 1; // 批量导入记录集信息(对应 NET_CTRL_RECORDSET_PARAM )
+ public static final int CTRLTYPE_CTRL_DELIVERY_FILE = CTRLTYPE_CTRL_RECORDSET_IMPORT + 1; // 向视频输出口投放视频和图片文件, 楼宇对讲使用,同一时间投放(对应 NET_CTRL_DELIVERY_FILE )
+ public static final int CTRLTYPE_CTRL_FORCE_BREAKING = CTRLTYPE_CTRL_DELIVERY_FILE + 1; // 强制产生违章类型(对应 NET_CTRL_FORCE_BREAKING)
+ public static final int CTRLTYPE_CTRL_RESTORE_EXCEPT = CTRLTYPE_CTRL_FORCE_BREAKING + 1; // 恢复除指定配置外的其他配置为默认。
+ public static final int CTRLTYPE_CTRL_SET_PARK_INFO = CTRLTYPE_CTRL_RESTORE_EXCEPT + 1; // 设置停车信息,平台设置给相机,内容用于点阵屏显示(对应结构体 NET_CTRL_SET_PARK_INFO)
+ public static final int CTRLTYPE_CTRL_CLEAR_SECTION_STAT = CTRLTYPE_CTRL_SET_PARK_INFO + 1; // 清除当前时间段内人数统计信息, 重新从0开始计算(对应结构体NET_CTRL_CLEAR_SECTION_STAT_INFO)
+ public static final int CTRLTYPE_CTRL_DELIVERY_FILE_BYCAR = CTRLTYPE_CTRL_CLEAR_SECTION_STAT + 1; // 向视频输出口投放视频和图片文件, 车载使用,广告单独时间投放(对应NET_CTRL_DELIVERY_FILE_BYCAR)
+ public static final int CTRLTYPE_CTRL_ECK_GUIDINGPANEL_CONTENT = CTRLTYPE_CTRL_DELIVERY_FILE_BYCAR + 1; // 设置诱导屏显示内容(对应结构体 NET_CTRL_ECK_GUIDINGPANEL_CONTENT)
+ public static final int CTRLTYPE_CTRL_SET_SAFE_LEVEL = CTRLTYPE_CTRL_ECK_GUIDINGPANEL_CONTENT + 1; // 设置门禁安全等级(对应结构体,pInBuf= NET_IN_SET_SAFE_LEVEL*, pOutBuf= NET_OUT_SET_SAFE_LEVEL * )
+ public static final int CTRLTYPE_CTRL_VTP_INVITEACK = CTRLTYPE_CTRL_SET_SAFE_LEVEL + 1; // 对讲请求回复(对应结构体 NET_CTRL_VTP_INVITEACK)
+ public static final int CTRLTYPE_CTRL_ACCESS_RESET_PASSWORD = CTRLTYPE_CTRL_VTP_INVITEACK + 1; // 门禁控制-重置密码(对应结构体 NET_CTRL_ACCESS_RESET_PASSWORD)
+ public static final int CTRLTYPE_CTRL_ACCESS_CALL_LIFT=CTRLTYPE_CTRL_ACCESS_RESET_PASSWORD+1; // 门禁控制-呼梯(对应结构体 NET_CTRL_ACCESS_CALL_LIFT)
+ /**
+ * 以下命令只在 CLIENT_ControlDeviceEx 上有效
+ */
+ public static final int CTRLTYPE_CTRL_THERMO_GRAPHY_ENSHUTTER = 0x10000; // 设置热成像快门启用/禁用,pInBuf= NET_IN_THERMO_EN_SHUTTER*, pOutBuf= NET_OUT_THERMO_EN_SHUTTER *
+ public static final int CTRLTYPE_CTRL_RADIOMETRY_SETOSDMARK = CTRLTYPE_CTRL_THERMO_GRAPHY_ENSHUTTER+1; // 设置测温项的osd为高亮,pInBuf=NET_IN_RADIOMETRY_SETOSDMARK*,pOutBuf= NET_OUT_RADIOMETRY_SETOSDMARK *
+ public static final int CTRLTYPE_CTRL_AUDIO_REC_START_NAME = CTRLTYPE_CTRL_RADIOMETRY_SETOSDMARK+1; // 开启音频录音并得到录音名,pInBuf = NET_IN_AUDIO_REC_MNG_NAME *, pOutBuf = NET_OUT_AUDIO_REC_MNG_NAME *
+ public static final int CTRLTYPE_CTRL_AUDIO_REC_STOP_NAME = CTRLTYPE_CTRL_AUDIO_REC_START_NAME+1; // 关闭音频录音并返回文件名称,pInBuf = NET_IN_AUDIO_REC_MNG_NAME *, pOutBuf = NET_OUT_AUDIO_REC_MNG_NAME *
+ public static final int CTRLTYPE_CTRL_SNAP_MNG_SNAP_SHOT = CTRLTYPE_CTRL_AUDIO_REC_STOP_NAME+1; // 即时抓图(又名手动抓图),pInBuf =NET_IN_SNAP_MNG_SHOT *, pOutBuf = NET_OUT_SNAP_MNG_SHOT *
+ public static final int CTRLTYPE_CTRL_LOG_STOP = CTRLTYPE_CTRL_SNAP_MNG_SNAP_SHOT+1; // 强制同步缓存数据到数据库并关闭数据库,pInBuf = NET_IN_LOG_MNG_CTRL *, pOutBuf = NET_OUT_LOG_MNG_CTRL *
+ public static final int CTRLTYPE_CTRL_LOG_RESUME = CTRLTYPE_CTRL_LOG_STOP+1; // 恢复数据库,pInBuf = NET_IN_LOG_MNG_CTRL *, pOutBuf = NET_OUT_LOG_MNG_CTRL *
+
+ public static final int CTRLTYPE_CTRL_POS_ADD = CTRLTYPE_CTRL_LOG_RESUME + 1; // 增加一个Pos设备, pInBuf = NET_IN_POS_ADD *, pOutBuf = NET_OUT_POS_ADD *
+ public static final int CTRLTYPE_CTRL_POS_REMOVE = CTRLTYPE_CTRL_POS_ADD + 1; // 删除一个Pos设备, pInBuf = NET_IN_POS_REMOVE *, pOutBuf = NET_OUT_POS_REMOVE *
+ public static final int CTRLTYPE_CTRL_POS_REMOVE_MULTI = CTRLTYPE_CTRL_POS_REMOVE + 1; // 批量删除Pos设备, pInBuf = NET_IN_POS_REMOVE_MULTI *, pOutBuf = NET_OUT_POS_REMOVE_MULTI *
+ public static final int CTRLTYPE_CTRL_POS_MODIFY = CTRLTYPE_CTRL_POS_REMOVE_MULTI + 1; // 修改一个Pos设备, pInBuf = NET_IN_POS_ADD *, pOutBuf = NET_OUT_POS_ADD *
+ public static final int CTRLTYPE_CTRL_SET_SOUND_ALARM = CTRLTYPE_CTRL_POS_MODIFY + 1; // 触发有声报警, pInBuf = NET_IN_SOUND_ALARM *, pOutBuf = NET_OUT_SOUND_ALARM *
+ public static final int CTRLTYPE_CTRL_AUDIO_MATRIX_SILENCE = CTRLTYPE_CTRL_SET_SOUND_ALARM + 1; // 音频举证一键静音控制(对应pInBuf = NET_IN_AUDIO_MATRIX_SILENCE, pOutBuf = NET_OUT_AUDIO_MATRIX_SILENCE)
+ public static final int CTRLTYPE_CTRL_MANUAL_UPLOAD_PICTURE = CTRLTYPE_CTRL_AUDIO_MATRIX_SILENCE + 1; // 设置手动上传, pInBuf = NET_IN_MANUAL_UPLOAD_PICTURE *, pOutBUf = NET_OUT_MANUAL_UPLOAD_PICTURE *
+ public static final int CTRLTYPE_CTRL_REBOOT_NET_DECODING_DEV = CTRLTYPE_CTRL_MANUAL_UPLOAD_PICTURE + 1; // 重启网络解码设备, pInBuf = NET_IN_REBOOT_NET_DECODING_DEV *, pOutBuf = NET_OUT_REBOOT_NET_DECODING_DEV *
+ public static final int CTRLTYPE_CTRL_SET_IC_SENDER = CTRLTYPE_CTRL_REBOOT_NET_DECODING_DEV + 1; // ParkingControl 设置发卡设备, pInBuf = NET_IN_SET_IC_SENDER *, pOutBuf = NET_OUT_SET_IC_SENDER *
+ public static final int CTRLTYPE_CTRL_SET_MEDIAKIND = CTRLTYPE_CTRL_SET_IC_SENDER + 1; // 设置预览码流组成,如仅音频,仅视频,音视频 pInBuf = NET_IN_SET_MEDIAKIND *, pOutBuf = NET_OUT_SET_MEDIAKIND *// 配合功能列表能力集使用, EN_ENCODE_CHN,2-预览支持音视频分开获取
+ public static final int CTRLTYPE_CTRL_LOWRATEWPAN_ADD = CTRLTYPE_CTRL_SET_MEDIAKIND + 1; // 增加无线设备信息(对应结构体 pInBuf = NET_CTRL_LOWRATEWPAN_ADD *, pOutBUf = NULL)
+ public static final int CTRLTYPE_CTRL_LOWRATEWPAN_REMOVEALL = CTRLTYPE_CTRL_LOWRATEWPAN_ADD + 1; // 删除所有的无线设备信息(对应结构体 pInBuf = NET_CTRL_LOWRATEWPAN_REMOVEALL *, pOutBUf = NULL)
+ public static final int CTRLTYPE_CTRL_SET_DOOR_WORK_MODE = CTRLTYPE_CTRL_LOWRATEWPAN_REMOVEALL + 1; // 设置门锁工作模式(对应结构体 pInBuf = NET_IN_CTRL_ACCESS_SET_DOOR_WORK_MODE *, pOutBUf = NULL)
+ public static final int CTRLTYPE_CTRL_TEST_MAIL = CTRLTYPE_CTRL_SET_DOOR_WORK_MODE + 1; // 测试邮件 pInBuf = NET_IN_TEST_MAIL *, pOutBUf = NET_OUT_TEST_MAIL *
+ public static final int CTRLTYPE_CTRL_CONTROL_SMART_SWITCH = CTRLTYPE_CTRL_TEST_MAIL + 1; // 控制智能开关 pInBuf = NET_IN_CONTROL_SMART_SWITCH *, pOutBUf = NET_OUT_CONTROL_SMART_SWITCH *
+ public static final int CTRLTYPE_CTRL_LOWRATEWPAN_SETWORKMODE = CTRLTYPE_CTRL_CONTROL_SMART_SWITCH + 1; // 设置探测器的工作模式(对应结构体pInBuf = NET_IN_CTRL_LOWRATEWPAN_SETWORKMODE *, pOutBUf = NULL)
+ public static final int CTRLTYPE_CTRL_COAXIAL_CONTROL_IO = CTRLTYPE_CTRL_LOWRATEWPAN_SETWORKMODE + 1; // 发送同轴IO控制命令(对应结构体pInBuf = NET_IN_CONTROL_COAXIAL_CONTROL_IO*, pOutBUf = NET_OUT_CONTROL_COAXIAL_CONTROL_IO*)
+ public static final int CTRLTYPE_CTRL_START_REMOTELOWRATEWPAN_ALARMBELL = CTRLTYPE_CTRL_COAXIAL_CONTROL_IO + 1; // 开启无线警号 (对应结构体pInBuf = NET_IN_START_REMOTELOWRATEWPAN_ALARMBELL*, pOutBUf = NET_OUT_START_REMOTELOWRATEWPAN_ALARMBELL*)
+ public static final int CTRLTYPE_CTRL_STOP_REMOTELOWRATEWPAN_ALARMBELL = CTRLTYPE_CTRL_START_REMOTELOWRATEWPAN_ALARMBELL + 1; // 关闭无线警号 (对应结构体pInBuf = NET_IN_STOP_REMOTELOWRATEWPAN_ALARMBELL*, pOutBUf = NET_OUT_STOP_REMOTELOWRATEWPAN_ALARMBELL*)
+ public static final int CTRLTYPE_CTRL_THERMO_DO_FFC = CTRLTYPE_CTRL_STOP_REMOTELOWRATEWPAN_ALARMBELL + 1; // 热成像FFC校准(对应结构体 pInBuf = NET_IN_THERMO_DO_FFC *,pOutBuf = NET_OUT_THERMO_DO_FFC *)
+ public static final int CTRLTYPE_CTRL_THERMO_FIX_FOCUS = CTRLTYPE_CTRL_THERMO_DO_FFC + 1; // 热成像双目定焦调(对应结构体 pInBuf = NET_IN_THERMO_FIX_FOCUS *,pOutBuf = NET_OUT_THERMO_FIX_FOCUS *)
+ public static final int CTRLTYPE_CTRL_SET_THIRD_CALLSTATUS = CTRLTYPE_CTRL_THERMO_FIX_FOCUS + 1; // 设置对讲状态(对应结构体pInBuf = NET_IN_VTP_THIRDCALL_STATUS*, pOutBuf = NET_OUT_VTP_THIRDCALL_STATUS*)
+ public static final int CTRL_ACCESS_CLEAR_STATUS = CTRLTYPE_CTRL_SET_THIRD_CALLSTATUS + 1; // 门禁-清除用户进出门状态 (对应结构体pInBuf = NET_IN_ACCESS_CLEAR_STATUS*, pOutBuf = NET_OUT_ACCESS_CLEAR_STATUS *)
+ public static final int CTRL_ACCESS_DEAL_RECORD = CTRL_ACCESS_CLEAR_STATUS + 1; // 门禁-查询/设置用户进出门记录 (对应结构体pInBuf = NET_IN_ACCESS_DEAL_RECORD*, pOutBuf = NET_OUT_ACCESS_DEAL_RECORD*)
+ public static final int CTRL_QUERY_DELIVERED_FILE = CTRL_ACCESS_DEAL_RECORD + 1; // 向视频输出口查询广告信息,楼宇对讲使用,(对应NET_CTRL_QUERY_DELIVERY_FILE)
+ public static final int CTRL_SET_PARK_CONTROL_INFO = CTRL_QUERY_DELIVERED_FILE + 1; // 设置停车控制信息(点阵屏和语音播报的控制)(对应结构体pInBuf = NET_IN_SET_PARK_CONTROL_INFO*, pOutBuf = NET_OUT_SET_PARK_CONTROL_INFO*)
+ /**********LowRateWPAN控制(0x10100-0x10150)**********************************************************************************/
+ public static final int CTRL_LOWRATEWPAN_GETWIRELESSDEVSIGNAL = 0x10100; // 获取无线设备信号强度(对应结构体 pInBuf = NET_IN_CTRL_LOWRATEWPAN_GETWIRELESSDEVSIGNAL *,pOutBuf = NET_OUT_CTRL_LOWRATEWPAN_GETWIRELESSDEVSIGNAL *)
+ public static final int CTRL_LOWRATEWPAN_SET_ACCESSORY_PARAM= CTRL_LOWRATEWPAN_GETWIRELESSDEVSIGNAL+1; // 设置配件信息(对应结构体pInBuf = NET_IN_CTRL_LOWRATEWPAN_ACCESSORY_PARAM *,pOutBuf = NULL)
+ }
+
+ // 视频压缩格式
+ public static class CFG_VIDEO_COMPRESSION extends SdkStructure
+ {
+ public static final int VIDEO_FORMAT_MPEG4 = 0; //MPEG4
+ public static final int VIDEO_FORMAT_MS_MPEG4 = VIDEO_FORMAT_MPEG4+1; //MS-MPEG4
+ public static final int VIDEO_FORMAT_MPEG2 = VIDEO_FORMAT_MS_MPEG4+1; //MPEG2
+ public static final int VIDEO_FORMAT_MPEG1 = VIDEO_FORMAT_MPEG2+1; //MPEG1
+ public static final int VIDEO_FORMAT_H263 = VIDEO_FORMAT_MPEG1+1; //H.263
+ public static final int VIDEO_FORMAT_MJPG = VIDEO_FORMAT_H263+1; //MJPG
+ public static final int VIDEO_FORMAT_FCC_MPEG4 = VIDEO_FORMAT_MJPG+1; //FCC-MPEG4
+ public static final int VIDEO_FORMAT_H264 = VIDEO_FORMAT_FCC_MPEG4+1; //H.264
+ public static final int VIDEO_FORMAT_H265 = VIDEO_FORMAT_H264+1; //H.265
+ }
+
+ // 码流控制模式
+ public static class CFG_BITRATE_CONTROL extends SdkStructure
+ {
+ public static final int BITRATE_CBR = 0; //固定码流
+ public static final int BITRATE_VBR = BITRATE_CBR+1; //可变码流
+ }
+
+ // H264 编码级别
+ public static class CFG_H264_PROFILE_RANK extends SdkStructure
+ {
+ public static final int PROFILE_BASELINE = 1;//提供I/P帧,仅支持progressive(逐行扫描)和CAVLC
+ public static final int PROFILE_MAIN = PROFILE_BASELINE+1; //提供I/P/B帧,支持progressiv和interlaced,提供CAVLC或CABAC
+ public static final int PROFILE_EXTENDED = PROFILE_MAIN+1; //提供I/P/B/SP/SI帧,仅支持progressive(逐行扫描)和CAVLC
+ public static final int PROFILE_HIGH = PROFILE_EXTENDED+1; //即FRExt,Main_Profile基础上新增:8x8intraprediction(8x8帧内预测), custom
+ // quant(自定义量化), lossless video coding(无损视频编码), 更多的yuv格式
+ }
+
+ // 画质
+ public static class CFG_IMAGE_QUALITY extends SdkStructure
+ {
+ public static final int IMAGE_QUALITY_Q10 = 1;//图像质量10%
+ public static final int IMAGE_QUALITY_Q30 = IMAGE_QUALITY_Q10+1; //图像质量30%
+ public static final int IMAGE_QUALITY_Q50 = IMAGE_QUALITY_Q30+1; //图像质量50%
+ public static final int IMAGE_QUALITY_Q60 = IMAGE_QUALITY_Q50+1; //图像质量60%
+ public static final int IMAGE_QUALITY_Q80 = IMAGE_QUALITY_Q60+1; //图像质量80%
+ public static final int IMAGE_QUALITY_Q100 = IMAGE_QUALITY_Q80+1; //图像质量100%
+ }
+
+ // 视频格式
+ public static class CFG_VIDEO_FORMAT extends SdkStructure
+ {
+ // 能力
+ public byte abCompression;// 类型为bool, 取值0或1
+ public byte abWidth;// 类型为bool, 取值0或1
+ public byte abHeight;// 类型为bool, 取值0或1
+ public byte abBitRateControl;// 类型为bool, 取值0或1
+ public byte abBitRate;// 类型为bool, 取值0或1
+ public byte abFrameRate;// 类型为bool, 取值0或1
+ public byte abIFrameInterval;// 类型为bool, 取值0或1
+ public byte abImageQuality;// 类型为bool, 取值0或1
+ public byte abFrameType;// 类型为bool, 取值0或1
+ public byte abProfile;// 类型为bool, 取值0或1
+ // 信息
+ public int emCompression;//视频压缩格式, 取值为CFG_VIDEO_COMPRESSION中的值
+ public int nWidth;//视频宽度
+ public int nHeight;//视频高度
+ public int emBitRateControl;//码流控制模式, 取值为CFG_BITRATE_CONTROL中的值
+ public int nBitRate;//视频码流(kbps)
+ public float nFrameRate;//视频帧率
+ public int nIFrameInterval;//I帧间隔(1-100),比如50表示每49个B帧或P帧,设置一个I帧。
+ public int emImageQuality;//图像质量, 取值为CFG_IMAGE_QUALITY中的值
+ public int nFrameType;//打包模式,0-DHAV,1-"PS"
+ public int emProfile;//H.264编码级别, 取值为CFG_H264_PROFILE_RANK中的值
+ public int nMaxBitrate;// 最大码流单位是kbps(博世专用)
+ }
+
+ // 音频编码模式
+ public static class CFG_AUDIO_FORMAT extends SdkStructure
+ {
+ public static final int AUDIO_FORMAT_G711A = 0; //G711a
+ public static final int AUDIO_FORMAT_PCM = AUDIO_FORMAT_G711A+1; //PCM
+ public static final int AUDIO_FORMAT_G711U = AUDIO_FORMAT_PCM+1; //G711u
+ public static final int AUDIO_FORMAT_AMR = AUDIO_FORMAT_G711U+1; //AMR
+ public static final int AUDIO_FORMAT_AAC = AUDIO_FORMAT_AMR+1; //AAC
+ }
+
+ // 音频格式
+ public static class CFG_AUDIO_ENCODE_FORMAT extends SdkStructure
+ {
+ // 能力
+ public byte abCompression;// 类型为bool, 取值0或1
+ public byte abDepth;// 类型为bool, 取值0或1
+ public byte abFrequency;// 类型为bool, 取值0或1
+ public byte abMode;// 类型为bool, 取值0或1
+ public byte abFrameType;// 类型为bool, 取值0或1
+ public byte abPacketPeriod;// 类型为bool, 取值0或1
+ // 信息
+ public int emCompression;//音频压缩模式,取值为CFG_AUDIO_FORMAT中的值
+ public int nDepth;//音频采样深度
+ public int nFrequency;//音频采样频率
+ public int nMode;//音频编码模式
+ public int nFrameType;//音频打包模式,0-DHAV,1-PS
+ public int nPacketPeriod;//音频打包周期,ms
+ public int nChannelsNum; // 视频通道的伴音通道号列表个数
+ public int arrChannels[] = new int[8]; // 视频通道的伴音通道号列表
+ public int bMix; // 是否同源
+ }
+
+ // 视频编码参数
+ public static class CFG_VIDEOENC_OPT extends SdkStructure
+ {
+ // 能力
+ public byte abVideoEnable;// 类型为bool, 取值0或1
+ public byte abAudioEnable;// 类型为bool, 取值0或1
+ public byte abSnapEnable;// 类型为bool, 取值0或1
+ public byte abAudioAdd;//音频叠加能力, 类型为bool, 取值0或1
+ public byte abAudioFormat;// 类型为bool, 取值0或1
+ // 信息
+ public int bVideoEnable;//视频使能, 类型为BOOL, 取值0或者1
+ public CFG_VIDEO_FORMAT stuVideoFormat;//视频格式
+ public int bAudioEnable;//音频使能, 类型为BOOL, 取值0或者1
+ public int bSnapEnable;//定时抓图使能, 类型为BOOL, 取值0或者1
+ public int bAudioAddEnable;//音频叠加使能, 类型为BOOL, 取值0或者1
+ public CFG_AUDIO_ENCODE_FORMAT stuAudioFormat;//音频格式
+ }
+
+ // 遮挡信息
+ public static class CFG_COVER_INFO extends SdkStructure
+ {
+ // 能力
+ public byte abBlockType;// 类型为bool, 取值0或1
+ public byte abEncodeBlend;// 类型为bool, 取值0或1
+ public byte abPreviewBlend;// 类型为bool, 取值0或1
+ // 信息
+ public CFG_RECT stuRect = new CFG_RECT();//覆盖的区域坐标
+ public CFG_RGBA stuColor = new CFG_RGBA();//覆盖的颜色
+ public int nBlockType;//覆盖方式;0-黑块,1-马赛克
+ public int nEncodeBlend;//编码级遮挡;1-生效,0-不生效
+ public int nPreviewBlend;//预览遮挡;1-生效,0-不生效
+ }
+
+ // 多区域遮挡配置
+ public static class CFG_VIDEO_COVER extends SdkStructure
+ {
+ public int nTotalBlocks;//支持的遮挡块数
+ public int nCurBlocks;//已设置的块数
+ public CFG_COVER_INFO[] stuCoverBlock = (CFG_COVER_INFO[])new CFG_COVER_INFO().toArray(MAX_VIDEO_COVER_NUM);// 覆盖的区域
+ }
+
+ // OSD信息
+ public static class CFG_OSD_INFO extends SdkStructure
+ {
+ // 能力
+ public byte abShowEnable;// 类型为bool, 取值0或1
+ // 信息
+ public CFG_RGBA stuFrontColor = new CFG_RGBA();//前景颜色
+ public CFG_RGBA stuBackColor = new CFG_RGBA();//背景颜色
+ public CFG_RECT stuRect = new CFG_RECT();//矩形区域
+ public int bShowEnable;//显示使能, 类型为BOOL, 取值0或者1
+ }
+
+ // 画面颜色属性
+ public static class CFG_COLOR_INFO extends SdkStructure
+ {
+ public int nBrightness;//亮度(0-100)
+ public int nContrast;//对比度(0-100)
+ public int nSaturation;//饱和度(0-100)
+ public int nHue;//色度(0-100)
+ public int nGain;//增益(0-100)
+ public int bGainEn;//增益使能, 类型为BOOL, 取值0或者1
+ }
+
+ // 图像通道属性信息
+ public static class CFG_ENCODE_INFO extends SdkStructure
+ {
+ public int nChannelID;//通道号(0开始),获取时,该字段有效;设置时,该字段无效
+ public byte[] szChnName = new byte[MAX_CHANNELNAME_LEN];//无效字段
+ public CFG_VIDEOENC_OPT[] stuMainStream = (CFG_VIDEOENC_OPT[])new CFG_VIDEOENC_OPT().toArray(MAX_VIDEOSTREAM_NUM); // 主码流,0-普通录像,1-动检录像,2-报警录像
+ public int nValidCountMainStream; // 主码流数组中有效的个数
+ public CFG_VIDEOENC_OPT[] stuExtraStream = (CFG_VIDEOENC_OPT[])new CFG_VIDEOENC_OPT().toArray(MAX_VIDEOSTREAM_NUM); // 辅码流,0-辅码流1,1-辅码流2,2-辅码流3
+ public int nValidCountExtraStream; // 辅码流数组中有效的个数
+ public CFG_VIDEOENC_OPT[] stuSnapFormat = (CFG_VIDEOENC_OPT[])new CFG_VIDEOENC_OPT().toArray(MAX_VIDEOSTREAM_NUM); // 抓图,0-普通抓图,1-动检抓图,2-报警抓图
+ public int nValidCountSnapFormat; // 抓图数组中有效的个数
+ public int dwCoverAbilityMask;//无效字段
+ public int dwCoverEnableMask;//无效字段
+ public CFG_VIDEO_COVER stuVideoCover;//无效字段
+ public CFG_OSD_INFO stuChnTitle;//无效字段
+ public CFG_OSD_INFO stuTimeTitle;//无效字段
+ public CFG_COLOR_INFO stuVideoColor;//无效字段
+ public int emAudioFormat;//无效字段, 取值为CFG_AUDIO_FORMAT中的值
+ public int nProtocolVer;//协议版本号,只读,获取时,该字段有效;设置时,该字段无效
+ }
+
+ // 设备软件版本信息,高16位表示主版本号,低16位表示次版本号
+ public static class NET_VERSION_INFO extends SdkStructure
+ {
+ public int dwSoftwareVersion;
+ public int dwSoftwareBuildDate;
+ public int dwDspSoftwareVersion;
+ public int dwDspSoftwareBuildDate;
+ public int dwPanelVersion;
+ public int dwPanelSoftwareBuildDate;
+ public int dwHardwareVersion;
+ public int dwHardwareDate;
+ public int dwWebVersion;
+ public int dwWebBuildDate;
+ }
+
+ // 设备软件版本信息,对应CLIENT_QueryDevState接口
+ public static class NETDEV_VERSION_INFO extends SdkStructure
+ {
+ public byte[] szDevSerialNo = new byte[NET_DEV_SERIALNO_LEN]; // 序列号
+ public int byDevType; // 设备类型,见枚举 NET_DEVICE_TYPE
+ public byte[] szDevType = new byte[NET_DEV_TYPE_LEN]; // 设备详细型号,字符串格式,可能为空
+ public int nProtocalVer; // 协议版本号
+ public byte[] szSoftWareVersion = new byte[NET_MAX_URL_LEN];
+ public int dwSoftwareBuildDate;
+ public byte[] szPeripheralSoftwareVersion = new byte[NET_MAX_URL_LEN];// 从片版本信息,字符串格式,可能为空
+ public int dwPeripheralSoftwareBuildDate;
+ public byte[] szGeographySoftwareVersion = new byte[NET_MAX_URL_LEN]; // 地理信息定位芯片版本信息,字符串格式,可能为空
+ public int dwGeographySoftwareBuildDate;
+ public byte[] szHardwareVersion = new byte[NET_MAX_URL_LEN];
+ public int dwHardwareDate;
+ public byte[] szWebVersion = new byte[NET_MAX_URL_LEN];
+ public int dwWebBuildDate;
+ public byte[] reserved = new byte[256];
+ }
+
+ // 设备类型
+ public static class NET_DEVICE_TYPE extends SdkStructure
+ {
+ public static final int NET_PRODUCT_NONE = 0;
+ public static final int NET_DVR_NONREALTIME_MACE = 1; // 非实时MACE
+ public static final int NET_DVR_NONREALTIME = 2; // 非实时
+ public static final int NET_NVS_MPEG1 = 3; // 网络视频服务器
+ public static final int NET_DVR_MPEG1_2 = 4; // MPEG1二路录像机
+ public static final int NET_DVR_MPEG1_8 = 5; // MPEG1八路录像机
+ public static final int NET_DVR_MPEG4_8 = 6; // MPEG4八路录像机
+ public static final int NET_DVR_MPEG4_16 = 7; // MPEG4十六路录像机
+ public static final int NET_DVR_MPEG4_SX2 = 8; // LB系列录像机
+ public static final int NET_DVR_MEPG4_ST2 = 9; // GB系列录像机
+ public static final int NET_DVR_MEPG4_SH2 = 10; // HB系列录像机 10
+ public static final int NET_DVR_MPEG4_GBE = 11; // GBE系列录像机
+ public static final int NET_DVR_MPEG4_NVSII = 12; // II代网络视频服务器
+ public static final int NET_DVR_STD_NEW = 13; // 新标准配置协议
+ public static final int NET_DVR_DDNS = 14; // DDNS服务器
+ public static final int NET_DVR_ATM = 15; // ATM机
+ public static final int NET_NB_SERIAL = 16; // 二代非实时NB系列机器
+ public static final int NET_LN_SERIAL = 17; // LN系列产品
+ public static final int NET_BAV_SERIAL = 18; // BAV系列产品
+ public static final int NET_SDIP_SERIAL = 19; // SDIP系列产品
+ public static final int NET_IPC_SERIAL = 20; // IPC系列产品 20
+ public static final int NET_NVS_B = 21; // NVS B系列
+ public static final int NET_NVS_C = 22; // NVS H系列
+ public static final int NET_NVS_S = 23; // NVS S系列
+ public static final int NET_NVS_E = 24; // NVS E系列
+ public static final int NET_DVR_NEW_PROTOCOL = 25; // 从QueryDevState中查询设备类型,以字符串格式
+ public static final int NET_NVD_SERIAL = 26; // 解码器
+ public static final int NET_DVR_N5 = 27; // N5
+ public static final int NET_DVR_MIX_DVR = 28; // 混合DVR
+ public static final int NET_SVR_SERIAL = 29; // SVR系列
+ public static final int NET_SVR_BS = 30; // SVR-BS 30
+ public static final int NET_NVR_SERIAL = 31; // NVR系列
+ public static final int NET_DVR_N51 = 32; // N51
+ public static final int NET_ITSE_SERIAL = 33; // ITSE 智能分析盒
+ public static final int NET_ITC_SERIAL = 34; // 智能交通像机设备
+ public static final int NET_HWS_SERIAL = 35; // 雷达测速仪HWS
+ public static final int NET_PVR_SERIAL = 36; // 便携式音视频录像机
+ public static final int NET_IVS_SERIAL = 37; // IVS(智能视频服务器系列)
+ public static final int NET_IVS_B = 38; // 通用智能视频侦测服务器
+ public static final int NET_IVS_F = 39; // 目标识别服务器
+ public static final int NET_IVS_V = 40; // 视频质量诊断服务器 40
+ public static final int NET_MATRIX_SERIAL = 41; // 矩阵
+ public static final int NET_DVR_N52 = 42; // N52
+ public static final int NET_DVR_N56 = 43; // N56
+ public static final int NET_ESS_SERIAL = 44; // ESS
+ public static final int NET_IVS_PC = 45; // 人数统计服务器
+ public static final int NET_PC_NVR = 46; // pc-nvr
+ public static final int NET_DSCON = 47; // 大屏控制器
+ public static final int NET_EVS = 48; // 网络视频存储服务器
+ public static final int NET_EIVS = 49; // 嵌入式智能分析视频系统
+ public static final int NET_DVR_N6 = 50; // DVR-N6 50
+ public static final int NET_UDS = 51; // 万能解码器
+ public static final int NET_AF6016 = 52; // 银行报警主机
+ public static final int NET_AS5008 = 53; // 视频网络报警主机
+ public static final int NET_AH2008 = 54; // 网络报警主机
+ public static final int NET_A_SERIAL = 55; // 报警主机系列
+ public static final int NET_BSC_SERIAL = 56; // 门禁系列产品
+ public static final int NET_NVS_SERIAL = 57; // NVS系列产品
+ public static final int NET_VTO_SERIAL = 58; // VTO系列产品
+ public static final int NET_VTNC_SERIAL = 59; // VTNC系列产品
+ public static final int NET_TPC_SERIAL = 60; // TPC系列产品, 即热成像设备 60
+ public static final int NET_ASM_SERIAL = 61; // 无线中继设备
+ public static final int NET_VTS_SERIAL = 62; // 管理机
+ }
+
+ // DSP能力描述,对应CLIENT_GetDevConfig接口
+ public static class NET_DSP_ENCODECAP extends SdkStructure
+ {
+ public int dwVideoStandardMask;//视频制式掩码,按位表示设备能够支持的视频制式
+ public int dwImageSizeMask;//分辨率掩码,按位表示设备能够支持的分辨率设置
+ public int dwEncodeModeMask;//编码模式掩码,按位表示设备能够支持的编码模式设置
+ public int dwStreamCap; // 按位表示设备支持的多媒体功能,
+ // 第一位表示支持主码流
+ // 第二位表示支持辅码流1
+ // 第三位表示支持辅码流2
+ // 第五位表示支持jpg抓图
+ public int[] dwImageSizeMask_Assi = new int[8];//表示主码流为各分辨率时,支持的辅码流分辨率掩码。
+ public int dwMaxEncodePower;//DSP支持的最高编码能力
+ public short wMaxSupportChannel;//每块DSP支持最多输入视频通道数
+ public short wChannelMaxSetSync;//DSP每通道的最大编码设置是否同步;0:不同步,1:同步
+ }
+
+ // 系统信息
+ public static class NET_DEV_SYSTEM_ATTR_CFG extends SdkStructure
+ {
+ public int dwSize;
+ /* 下面是设备的只读部分 */
+ public NET_VERSION_INFO stVersion;
+ public NET_DSP_ENCODECAP stDspEncodeCap;//DSP能力描述
+ public byte[] szDevSerialNo = new byte[NET_DEV_SERIALNO_LEN];//序列号
+ public byte byDevType;//设备类型,见枚举NET_DEVICE_TYPE
+ public byte[] szDevType = new byte[NET_DEV_TYPE_LEN];//设备详细型号,字符串格式,可能为空
+ public byte byVideoCaptureNum;//视频口数量
+ public byte byAudioCaptureNum;//音频口数量
+ public byte byTalkInChanNum;//对讲输入接口数量
+ public byte byTalkOutChanNum;//对讲输出接口数量
+ public byte byDecodeChanNum;//NSP
+ public byte byAlarmInNum;//报警输入口数
+ public byte byAlarmOutNum;//报警输出口数
+ public byte byNetIONum;//网络口数
+ public byte byUsbIONum;//USB口数量
+ public byte byIdeIONum;//IDE数量
+ public byte byComIONum;//串口数量
+ public byte byLPTIONum;//并口数量
+ public byte byVgaIONum;//NSP
+ public byte byIdeControlNum;//NSP
+ public byte byIdeControlType;//NSP
+ public byte byCapability;//NSP,扩展描述
+ public byte byMatrixOutNum;//视频矩阵输出口数
+ /* 下面是设备的可写部分 */
+ public byte byOverWrite;//硬盘满处理方式(覆盖、停止)
+ public byte byRecordLen;//录象打包长度
+ public byte byDSTEnable;//是否实行夏令时1-实行0-不实行
+ public short wDevNo;//设备编号,用于遥控
+ public byte byVideoStandard;//视频制式:0-PAL,1-NTSC
+ public byte byDateFormat;//日期格式
+ public byte byDateSprtr;//日期分割符(0:".",1:"-",2:"/")
+ public byte byTimeFmt;//时间格式(0-24小时,1-12小时)
+ public byte byLanguage;//枚举值详见NET_LANGUAGE_TYPE
+
+ public NET_DEV_SYSTEM_ATTR_CFG()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 入侵方向
+ public static class EM_MSG_OBJ_PERSON_DIRECTION extends SdkStructure
+ {
+ public static final int EM_MSG_OBJ_PERSON_DIRECTION_UNKOWN = 0; //未知方向
+ public static final int EM_MSG_OBJ_PERSON_DIRECTION_LEFT_TO_RIGHT = EM_MSG_OBJ_PERSON_DIRECTION_UNKOWN+1; //从左向右
+ public static final int EM_MSG_OBJ_PERSON_DIRECTION_RIGHT_TO_LEFT = EM_MSG_OBJ_PERSON_DIRECTION_LEFT_TO_RIGHT+1; //从右向左
+ }
+
+ // 视频分析物体信息扩展结构体
+ public static class NET_MSG_OBJECT_EX extends SdkStructure
+ {
+ public int dwSize;
+ public int nObjectID;//物体ID,每个ID表示一个唯一的物体
+ public byte[] szObjectType = new byte[128];//物体类型
+ public int nConfidence;//置信度(0~255),值越大表示置信度越高
+ public int nAction;//物体动作:1:Appear2:Move3:Stay 4:Remove 5:Disappear 6:Split 7:Merge 8:Rename
+ public DH_RECT BoundingBox;//包围盒
+ public NET_POINT Center;//物体型心
+ public int nPolygonNum;//多边形顶点个数
+ public NET_POINT[] Contour = (NET_POINT[])new NET_POINT().toArray(NET_MAX_POLYGON_NUM);// 较精确的轮廓多边形
+ public int rgbaMainColor;//表示车牌、车身等物体主要颜色;按字节表示,分别为红、绿、蓝和透明度,例如:RGB值为(0,255,0),透明度为0时,其值为0x00ff0000.
+ public byte[] szText = new byte[128];//同NET_MSG_OBJECT相应字段
+ public byte[] szObjectSubType = new byte[64];//物体子类别,根据不同的物体类型,可以取以下子类型:
+ // 同NET_MSG_OBJECT相应字段
+ public byte[] byReserved1 = new byte[3];
+ public byte bPicEnble;//是否有物体对应图片文件信息, 类型为bool, 取值0或1
+ public NET_PIC_INFO stPicInfo;//物体对应图片信息
+ public byte bShotFrame;//是否是抓拍张的识别结果, 类型为bool, 取值0或1
+ public byte bColor;//物体颜色(rgbaMainColor)是否可用, 类型为bool, 取值0或1
+ public byte bLowerBodyColor;//下半身颜色(rgbaLowerBodyColor)是否可用
+ public byte byTimeType;//时间表示类型,详见EM_TIME_TYPE说明
+ public NET_TIME_EX stuCurrentTime;//针对视频浓缩,当前时间戳(物体抓拍或识别时,会将此识别智能帧附在一个视频帧或jpeg图片中,此帧所在原始视频中的出现时间)
+ public NET_TIME_EX stuStartTime;//开始时间戳(物体开始出现时)
+ public NET_TIME_EX stuEndTime;//结束时间戳(物体最后出现时)
+ public DH_RECT stuOriginalBoundingBox;//包围盒(绝对坐标)
+ public DH_RECT stuSignBoundingBox;//车标坐标包围盒
+ public int dwCurrentSequence;//当前帧序号(抓下这个物体时的帧)
+ public int dwBeginSequence;//开始帧序号(物体开始出现时的帧序号)
+ public int dwEndSequence;//结束帧序号(物体消逝时的帧序号)
+ public long nBeginFileOffset;//开始时文件偏移,单位:字节(物体开始出现时,视频帧在原始视频文件中相对于文件起始处的偏移)
+ public long nEndFileOffset;//结束时文件偏移,单位:字节(物体消逝时,视频帧在原始视频文件中相对于文件起始处的偏移)
+ public byte[] byColorSimilar = new byte[EM_COLOR_TYPE.NET_COLOR_TYPE_MAX];//物体颜色相似度,取值范围:0-100,数组下标值代表某种颜色,详见EM_COLOR_TYPE
+ public byte[] byUpperBodyColorSimilar = new byte[EM_COLOR_TYPE.NET_COLOR_TYPE_MAX];//上半身物体颜色相似度(物体类型为人时有效)
+ public byte[] byLowerBodyColorSimilar = new byte[EM_COLOR_TYPE.NET_COLOR_TYPE_MAX];//下半身物体颜色相似度(物体类型为人时有效)
+ public int nRelativeID;//相关物体ID
+ public byte[] szSubText = new byte[20];//"ObjectType"为"Vehicle"或者"Logo"时,表示车标下的某一车系,比如奥迪A6L,由于车系较多,SDK实现时透传此字段,设备如实填写。
+ public int nPersonStature;//入侵人员身高,单位cm
+ public int emPersonDirection;//人员入侵方向, 取值为EM_MSG_OBJ_PERSON_DIRECTION中的值
+ public int rgbaLowerBodyColor;//使用方法同rgbaMainColor,物体类型为人时有效
+
+ public NET_MSG_OBJECT_EX()
+ {
+ this.dwSize = this.size();
+ }
+
+ protected int getNativeAlignment(Class> type, Object value, boolean isFirstElement) {
+ int alignment = super.getNativeAlignment(type, value, isFirstElement);
+ return Math.min(4, alignment);
+ }
+ }
+
+ // 视频分析物体信息扩展结构体,扩展版本2
+ public static class NET_MSG_OBJECT_EX2 extends SdkStructure
+ {
+ public int dwSize;
+ public int nObjectID;//物体ID,每个ID表示一个唯一的物体
+ public byte[] szObjectType = new byte[128];//物体类型
+ public int nConfidence;//置信度(0~255),值越大表示置信度越高
+ public int nAction;//物体动作:1:Appear2:Move3:Stay 4:Remove 5:Disappear 6:Split 7:Merge 8:Rename
+ public DH_RECT BoundingBox;//包围盒
+ public NET_POINT Center;//物体型心
+ public int nPolygonNum;//多边形顶点个数
+ public NET_POINT[] Contour = (NET_POINT[])new NET_POINT().toArray(NET_MAX_POLYGON_NUM);//较精确的轮廓多边形
+ public int rgbaMainColor;//表示车牌、车身等物体主要颜色;按字节表示,分别为红、绿、蓝和透明度,例如:RGB值为(0,255,0),透明度为0时,其值为0x00ff0000.
+ public byte[] szText = new byte[128];//同NET_MSG_OBJECT相应字段
+ public byte[] szObjectSubType = new byte[64];//物体子类别,根据不同的物体类型,可以取以下子类型:
+ // 同NET_MSG_OBJECT相应字段
+ public byte[] byReserved1 = new byte[3];
+ public byte bPicEnble;//是否有物体对应图片文件信息, 类型为bool, 取值0或者1
+ public NET_PIC_INFO stPicInfo;//物体对应图片信息
+ public byte bShotFrame;//是否是抓拍张的识别结果, 类型为bool, 取值0或者1
+ public byte bColor;//物体颜色(rgbaMainColor)是否可用, 类型为bool, 取值0或者1
+ public byte bLowerBodyColor;//下半身颜色(rgbaLowerBodyColor)是否可用
+ public byte byTimeType;//时间表示类型,详见EM_TIME_TYPE说明
+ public NET_TIME_EX stuCurrentTime;//针对视频浓缩,当前时间戳(物体抓拍或识别时,会将此识别智能帧附在一个视频帧或jpeg图片中,此帧所在原始视频中的出现时间)
+ public NET_TIME_EX stuStartTime;//开始时间戳(物体开始出现时)
+ public NET_TIME_EX stuEndTime;//结束时间戳(物体最后出现时)
+ public DH_RECT stuOriginalBoundingBox;//包围盒(绝对坐标)
+ public DH_RECT stuSignBoundingBox;//车标坐标包围盒
+ public int dwCurrentSequence;//当前帧序号(抓下这个物体时的帧)
+ public int dwBeginSequence;//开始帧序号(物体开始出现时的帧序号)
+ public int dwEndSequence;//结束帧序号(物体消逝时的帧序号)
+ public long nBeginFileOffset;//开始时文件偏移,单位:字节(物体开始出现时,视频帧在原始视频文件中相对于文件起始处的偏移)
+ public long nEndFileOffset;//结束时文件偏移,单位:字节(物体消逝时,视频帧在原始视频文件中相对于文件起始处的偏移)
+ public byte[] byColorSimilar = new byte[EM_COLOR_TYPE.NET_COLOR_TYPE_MAX];//物体颜色相似度,取值范围:0-100,数组下标值代表某种颜色,详见EM_COLOR_TYPE
+ public byte[] byUpperBodyColorSimilar = new byte[EM_COLOR_TYPE.NET_COLOR_TYPE_MAX];//上半身物体颜色相似度(物体类型为人时有效)
+ public byte[] byLowerBodyColorSimilar = new byte[EM_COLOR_TYPE.NET_COLOR_TYPE_MAX];//下半身物体颜色相似度(物体类型为人时有效)
+ public int nRelativeID;//相关物体ID
+ public byte[] szSubText = new byte[20];//"ObjectType"为"Vehicle"或者"Logo"时,表示车标下的某一车系,比如奥迪A6L,由于车系较多,SDK实现时透传此字段,设备如实填写。
+ public int nPersonStature;//入侵人员身高,单位cm
+ public int emPersonDirection;//人员入侵方向, 取值为EM_MSG_OBJ_PERSON_DIRECTION中的值
+ public int rgbaLowerBodyColor;//使用方法同rgbaMainColor,物体类型为人时有效
+ //视频浓缩额外信息
+ public int nSynopsisSpeed;//浓缩速度域值,共分1~10共十个档位,5表示浓缩后只保留5以上速度的物体。是个相对单位
+ // 为0时,该字段无效
+ public int nSynopsisSize;//浓缩尺寸域值,共分1~10共十个档位,3表示浓缩后只保留3以上大小的物体。是个相对单位
+ // 为0时,该字段无效
+ public int bEnableDirection;//为True时,对物体运动方向做过滤, 类型为BOOL, 取值0或者1
+ // 为False时,不对物体运动方向做过滤,
+ public NET_POINT stuSynopsisStartLocation;//浓缩运动方向,起始坐标点,点的坐标归一化到[0,8192)区间,bEnableDirection为True时有效
+ public NET_POINT stuSynopsisEndLocation;//浓缩运动方向,终止坐标点,点的坐标归一化到[0,8192)区间,bEnableDirection为True时有效
+ public byte[] byReserved = new byte[2048];//扩展字节
+
+ public NET_MSG_OBJECT_EX2()
+ {
+ this.dwSize = this.size();
+ }
+
+ protected int getNativeAlignment(Class> type, Object value, boolean isFirstElement) {
+ int alignment = super.getNativeAlignment(type, value, isFirstElement);
+ return Math.min(4, alignment);
+ }
+ }
+
+ // 设备协议类型
+ public static class NET_DEVICE_PROTOCOL extends SdkStructure
+ {
+ public static final int NET_PROTOCOL_PRIVATE2 = 0; //私有2代协议
+ public static final int NET_PROTOCOL_PRIVATE3 = NET_PROTOCOL_PRIVATE2+1; //私有3代协议
+ public static final int NET_PROTOCOL_ONVIF = NET_PROTOCOL_PRIVATE3+1; //Onvif
+ public static final int NET_PROTOCOL_VNC = NET_PROTOCOL_ONVIF+1; //虚拟网络计算机
+ public static final int NET_PROTOCOL_TS = NET_PROTOCOL_VNC+1; //标准TS
+ public static final int NET_PROTOCOL_PRIVATE = 100;//私有协议
+ public static final int NET_PROTOCOL_AEBELL = NET_PROTOCOL_PRIVATE+1; //美电贝尔
+ public static final int NET_PROTOCOL_PANASONIC = NET_PROTOCOL_AEBELL+1; //松下
+ public static final int NET_PROTOCOL_SONY = NET_PROTOCOL_PANASONIC+1; //索尼
+ public static final int NET_PROTOCOL_DYNACOLOR = NET_PROTOCOL_SONY+1; //Dynacolor
+ public static final int NET_PROTOCOL_TCWS = NET_PROTOCOL_DYNACOLOR+1; //天城威视
+ public static final int NET_PROTOCOL_SAMSUNG = NET_PROTOCOL_TCWS+1; //三星
+ public static final int NET_PROTOCOL_YOKO = NET_PROTOCOL_SAMSUNG+1; //YOKO
+ public static final int NET_PROTOCOL_AXIS = NET_PROTOCOL_YOKO+1; //安讯视
+ public static final int NET_PROTOCOL_SANYO = NET_PROTOCOL_AXIS+1; //三洋
+ public static final int NET_PROTOCOL_BOSH = NET_PROTOCOL_SANYO+1; //Bosch
+ public static final int NET_PROTOCOL_PECLO = NET_PROTOCOL_BOSH+1; //Peclo
+ public static final int NET_PROTOCOL_PROVIDEO = NET_PROTOCOL_PECLO+1; //Provideo
+ public static final int NET_PROTOCOL_ACTI = NET_PROTOCOL_PROVIDEO+1; //ACTi
+ public static final int NET_PROTOCOL_VIVOTEK = NET_PROTOCOL_ACTI+1; //Vivotek
+ public static final int NET_PROTOCOL_ARECONT = NET_PROTOCOL_VIVOTEK+1; //Arecont
+ public static final int NET_PROTOCOL_PRIVATEEH = NET_PROTOCOL_ARECONT+1; //PrivateEH
+ public static final int NET_PROTOCOL_IMATEK = NET_PROTOCOL_PRIVATEEH+1; //IMatek
+ public static final int NET_PROTOCOL_SHANY = NET_PROTOCOL_IMATEK+1; //Shany
+ public static final int NET_PROTOCOL_VIDEOTREC = NET_PROTOCOL_SHANY+1; //动力盈科
+ public static final int NET_PROTOCOL_URA = NET_PROTOCOL_VIDEOTREC+1; //Ura
+ public static final int NET_PROTOCOL_BITICINO = NET_PROTOCOL_URA+1; //Bticino
+ public static final int NET_PROTOCOL_ONVIF2 = NET_PROTOCOL_BITICINO+1; //Onvif协议类型,同NET_PROTOCOL_ONVIF
+ public static final int NET_PROTOCOL_SHEPHERD = NET_PROTOCOL_ONVIF2+1; //视霸
+ public static final int NET_PROTOCOL_YAAN = NET_PROTOCOL_SHEPHERD+1; //亚安
+ public static final int NET_PROTOCOL_AIRPOINT = NET_PROTOCOL_YAAN+1; //Airpop
+ public static final int NET_PROTOCOL_TYCO = NET_PROTOCOL_AIRPOINT+1; //TYCO
+ public static final int NET_PROTOCOL_XUNMEI = NET_PROTOCOL_TYCO+1; //讯美
+ public static final int NET_PROTOCOL_HIKVISION = NET_PROTOCOL_XUNMEI+1; //
+ public static final int NET_PROTOCOL_LG = NET_PROTOCOL_HIKVISION+1; //LG
+ public static final int NET_PROTOCOL_AOQIMAN = NET_PROTOCOL_LG+1; //奥奇曼
+ public static final int NET_PROTOCOL_BAOKANG = NET_PROTOCOL_AOQIMAN+1; //宝康
+ public static final int NET_PROTOCOL_WATCHNET = NET_PROTOCOL_BAOKANG+1; //Watchnet
+ public static final int NET_PROTOCOL_XVISION = NET_PROTOCOL_WATCHNET+1; //Xvision
+ public static final int NET_PROTOCOL_FUSITSU = NET_PROTOCOL_XVISION+1; //富士通
+ public static final int NET_PROTOCOL_CANON = NET_PROTOCOL_FUSITSU+1; //Canon
+ public static final int NET_PROTOCOL_GE = NET_PROTOCOL_CANON+1; //GE
+ public static final int NET_PROTOCOL_Basler = NET_PROTOCOL_GE+1; //巴斯勒
+ public static final int NET_PROTOCOL_Patro = NET_PROTOCOL_Basler+1; //帕特罗
+ public static final int NET_PROTOCOL_CPKNC = NET_PROTOCOL_Patro+1; //CPPLUSK系列
+ public static final int NET_PROTOCOL_CPRNC = NET_PROTOCOL_CPKNC+1; //CPPLUSR系列
+ public static final int NET_PROTOCOL_CPUNC = NET_PROTOCOL_CPRNC+1; //CPPLUSU系列
+ public static final int NET_PROTOCOL_CPPLUS = NET_PROTOCOL_CPUNC+1; //CPPLUSIPC
+ public static final int NET_PROTOCOL_XunmeiS = NET_PROTOCOL_CPPLUS+1; //讯美s,实际协议为Onvif
+ public static final int NET_PROTOCOL_GDDW = NET_PROTOCOL_XunmeiS+1; //广东电网
+ public static final int NET_PROTOCOL_PSIA = NET_PROTOCOL_GDDW+1; //PSIA
+ public static final int NET_PROTOCOL_GB2818 = NET_PROTOCOL_PSIA+1; //GB2818
+ public static final int NET_PROTOCOL_GDYX = NET_PROTOCOL_GB2818+1; //GDYX
+ public static final int NET_PROTOCOL_OTHER = NET_PROTOCOL_GDYX+1; //由用户自定义
+ }
+
+ // 雨刷来回循环刷,雨刷模式配置为手动模式时有效(对应命令 CTRLTYPE_CTRL_RAINBRUSH_MOVECONTINUOUSLY)
+ public static class NET_CTRL_RAINBRUSH_MOVECONTINUOUSLY extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannel;//表示雨刷的索引
+ public int nInterval;//雨刷间隔
+
+ public NET_CTRL_RAINBRUSH_MOVECONTINUOUSLY()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 雨刷停止刷,雨刷模式配置为手动模式时有效(对应命令 CTRLTYPE_CTRL_RAINBRUSH_STOPMOVE)
+ public static class NET_CTRL_RAINBRUSH_STOPMOVE extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannel;//表示雨刷的索引
+
+ public NET_CTRL_RAINBRUSH_STOPMOVE()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 雨刷来回刷一次,雨刷模式配置为手动模式时有效(对应命令 CTRLTYPE_CTRL_RAINBRUSH_MOVEONCE)
+ public static class NET_CTRL_RAINBRUSH_MOVEONCE extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannel;//表示雨刷的索引
+
+ public NET_CTRL_RAINBRUSH_MOVEONCE()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // DSP能力描述,扩展类型,对应CLIENT_QueryDevState接口
+ public static class NET_DEV_DSP_ENCODECAP extends SdkStructure
+ {
+ public int dwVideoStandardMask; //视频制式掩码,按位表示设备能够支持的视频制式
+ public int dwImageSizeMask; //分辨率掩码,按位表示设备能够支持的分辨率
+ public int dwEncodeModeMask; //编码模式掩码,按位表示设备能够支持的编码模式
+ public int dwStreamCap; //按位表示设备支持的多媒体功能,
+ // 第一位表示支持主码流
+ // 第二位表示支持辅码流1
+ // 第三位表示支持辅码流2
+ // 第五位表示支持jpg抓图
+ public int[] dwImageSizeMask_Assi = new int[32];//表示主码流为各分辨率时,支持的辅码流分辨率掩码。
+ public int dwMaxEncodePower; //DSP支持的最高编码能力
+ public short wMaxSupportChannel;//每块DSP支持最多输入视频通道数
+ public short wChannelMaxSetSync;//DSP每通道的最大编码设置是否同步;0:不同步,1:同步
+ public byte[] bMaxFrameOfImageSize = new byte[32];//不同分辨率下的最大采集帧率,与dwVideoStandardMask按位对应
+ public byte bEncodeCap; //标志,配置时要求符合下面条件,否则配置不能生效;
+ // 0:主码流的编码能力+辅码流的编码能力 <= 设备的编码能力,
+ // 1:主码流的编码能力+辅码流的编码能力 <= 设备的编码能力,
+ // 辅码流的编码能力 <= 主码流的编码能力,
+ // 辅码流的分辨率 <= 主码流的分辨率,
+ // 主码流和辅码流的帧率 <= 前端视频采集帧率
+ // 2:N5的计算方法
+ // 辅码流的分辨率 <= 主码流的分辨率
+ // 查询支持的分辨率和相应最大帧率
+ public byte[] reserved = new byte[95];
+ }
+
+ //云台控制坐标单元
+ public static class PTZ_SPACE_UNIT extends SdkStructure
+ {
+ public int nPositionX; // 云台水平运动位置,有效范围:0,3600]
+ public int nPositionY; // 云台垂直运动位置,有效范围:-1800,1800]
+ public int nZoom; // 云台光圈变动位置,有效范围:0,128]
+ public byte[] szReserve = new byte[32];//预留32字节
+ }
+
+ //云台控制速度单元
+ public static class PTZ_SPEED_UNIT extends SdkStructure
+ {
+ public float fPositionX;//云台水平方向速率,归一化到-1~1
+ public float fPositionY;//云台垂直方向速率,归一化到-1~1
+ public float fZoom;//云台光圈放大倍率,归一化到0~1
+ public byte[] szReserve = new byte[32];//预留32字节
+ }
+
+ //持续控制云台对应结构
+ public static class PTZ_CONTROL_CONTINUOUSLY extends SdkStructure
+ {
+ public PTZ_SPEED_UNIT stuSpeed; //云台运行速度
+ public int nTimeOut; //连续移动超时时间,单位为秒
+ public byte[] szReserve = new byte[64]; //预留64字节
+ }
+
+ //绝对控制云台对应结构
+ public static class PTZ_CONTROL_ABSOLUTELY extends SdkStructure
+ {
+ public PTZ_SPACE_UNIT stuPosition; //云台绝对移动位置
+ public PTZ_SPEED_UNIT stuSpeed; //云台运行速度
+ public byte[] szReserve = new byte[64]; //预留64字节
+ }
+
+ //带速度转动到预置位点云台控制对应结构
+ public static class PTZ_CONTROL_GOTOPRESET extends SdkStructure
+ {
+ public int nPresetIndex; //预置位索引
+ public PTZ_SPEED_UNIT stuSpeed; //云台运行速度
+ public byte[] szReserve = new byte[64]; //预留64字节
+ }
+
+ //设置云台可视域信息
+ public static class PTZ_VIEW_RANGE_INFO extends SdkStructure
+ {
+ public int nStructSize;
+ public int nAzimuthH; //水平方位角度,0~3600,单位:度
+
+ public PTZ_VIEW_RANGE_INFO()
+ {
+ this.nStructSize = this.size();
+ }
+ }
+
+ //云台绝对聚焦对应结构
+ public static class PTZ_FOCUS_ABSOLUTELY extends SdkStructure
+ {
+ public int dwValue; //云台聚焦位置,取值范围(0~8191)
+ public int dwSpeed; //云台聚焦速度,取值范围(0~7)
+ public byte[] szReserve = new byte[64]; //预留64字节
+ }
+
+ // 云台控制-扇扫对应结构
+ public static class PTZ_CONTROL_SECTORSCAN extends SdkStructure
+ {
+ public int nBeginAngle; //起始角度,范围:-180,180]
+ public int nEndAngle; //结束角度,范围:-180,180]
+ public int nSpeed; //速度,范围:0,255]
+ public byte[] szReserve = new byte[64]; //预留64字节
+ }
+
+ // 控制鱼眼电子云台信息
+ public static class PTZ_CONTROL_SET_FISHEYE_EPTZ extends SdkStructure
+ {
+ public int dwSize; //结构体大小
+ public int dwWindowID; //进行EPtz控制的窗口编号
+ public int dwCommand; //电子云台命令
+ public int dwParam1; //命令对应参数1
+ public int dwParam2; //命令对应参数2
+ public int dwParam3; //命令对应参数3
+ public int dwParam4; //命令对应参数4
+ }
+
+ // 光照场景类型
+ public static class EM_LIGHT_SCENE extends SdkStructure
+ {
+ public static final int EM_LIGHT_SCENE_UNKNOWN=0; // 未知
+ public static final int EM_LIGHT_SCENE_DAY=1; // 白天
+ public static final int EM_LIGHT_SCENE_NIGHT=2; // 夜晚
+ public static final int EM_LIGHT_SCENE_NORMAL=3; // 普通
+ public static final int EM_LIGHT_SCENE_FRONT_LIGHT=4; // 顺光
+ public static final int EM_LIGHT_SCENE_BACK_LIGHT=5; // 一般逆光
+ public static final int EM_LIGHT_SCENE_STRONG_LIGHT=6; // 强逆光
+ public static final int EM_LIGHT_SCENE_LOW_LIGHT=7; // 低照度
+ public static final int EM_LIGHT_SCENE_CUSTOM=8; // 自定义
+ };
+
+ // 变倍设置基本信息单元
+ public static class CFG_VIDEO_IN_ZOOM_UNIT extends SdkStructure
+ {
+ public int nSpeed;//变倍速率(0~7)
+ public int bDigitalZoom;//是否数字变倍, 类型为BOOL, 取值0或者1
+ public int nZoomLimit;//当前速率下最大变倍上限(0~13)。
+ public int emLightScene; //光照场景名称 EM_LIGHT_SCENE
+ }
+
+ // 单通道变倍设置基本信息
+ public static class CFG_VIDEO_IN_ZOOM extends SdkStructure
+ {
+ public int nChannelIndex;//通道号
+ public int nVideoInZoomRealNum;//配置使用个数
+ public CFG_VIDEO_IN_ZOOM_UNIT[] stVideoInZoomUnit = new CFG_VIDEO_IN_ZOOM_UNIT[MAX_VIDEO_IN_ZOOM];//通道变速配置单元信息
+ public CFG_VIDEO_IN_ZOOM(){
+ for(int i=0;i*/
+ public byte byEmailMaxLength;/*<附件录像时的最大长度,单位MB>*/
+ public byte byEmailMaxTime;/*<附件是录像时最大时间长度,单位秒>*/
+ public byte[] byReserved = new byte[475];
+ }
+
+ public static class EM_NET_DEFENCE_AREA_TYPE extends SdkStructure
+ {
+ public static final int EM_NET_DEFENCE_AREA_TYPE_UNKNOW = 0; //未知
+ public static final int EM_NET_DEFENCE_AREA_TYPE_INTIME = 1; //即时防区
+ public static final int EM_NET_DEFENCE_AREA_TYPE_DELAY = 2; //延时防区
+ public static final int EM_NET_DEFENCE_AREA_TYPE_FULLDAY = 3; //24小时防区
+ public static final int EM_NET_DEFENCE_AREA_TYPE_Follow = 4; //跟随防区
+ public static final int EM_NET_DEFENCE_AREA_TYPE_MEDICAL = 5; //医疗紧急防区
+ public static final int EM_NET_DEFENCE_AREA_TYPE_PANIC = 6; //恐慌防区
+ public static final int EM_NET_DEFENCE_AREA_TYPE_FIRE = 7; //火警防区
+ public static final int EM_NET_DEFENCE_AREA_TYPE_FULLDAYSOUND = 8; //24小时有声防区
+ public static final int EM_NET_DEFENCE_AREA_TYPE_FULLDATSLIENT = 9; //24小时无声防区
+ public static final int EM_NET_DEFENCE_AREA_TYPE_ENTRANCE1 = 10; //出入防区1
+ public static final int EM_NET_DEFENCE_AREA_TYPE_ENTRANCE2 = 11; //出入防区2
+ public static final int EM_NET_DEFENCE_AREA_TYPE_INSIDE = 12; //内部防区
+ public static final int EM_NET_DEFENCE_AREA_TYPE_OUTSIDE = 13; //外部防区
+ public static final int EN_NET_DEFENCE_AREA_TYPE_PEOPLEDETECT = 14; //人员检测防区
+ }
+
+ // 本地报警事件(对NET_ALARM_ALARM_EX升级)
+ public static class ALARM_ALARM_INFO_EX2 extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannelID; //通道号
+ public int nAction; //0:开始, 1:停止
+ public NET_TIME stuTime; //报警事件发生的时间
+ public int emSenseType; //传感器类型, 取值范围为 NET_SENSE_METHOD 中的值
+ public NET_MSG_HANDLE_EX stuEventHandler; //联动信息
+ public int emDefenceAreaType; //防区类型, 取值类型为EM_NET_DEFENCE_AREA_TYPE中的值
+ public int nEventID; //事件ID
+ public byte[] szName = new byte[NET_COMMON_STRING_32]; // 通道名称
+ public int nCount; // 事件发生次数
+ public NET_GPS_STATUS_INFO stuGPS; // GPS信息
+ /**
+ * 本地报警时登陆的用户ID
+ */
+ public byte[] szUserID = new byte[32];
+ /**
+ * 本地报警时登陆的用户名
+ */
+ public byte[] szUserName = new byte[128];
+ /**
+ * 设备序列号
+ */
+ public byte[] szSN = new byte[32];
+ /**
+ * 外部输入报警
+ */
+ public int bExAlarmIn;
+ /**
+ * 报警通道所属区域的个数
+ */
+ public int nAreaNums;
+ /**
+ * 报警通道所属的区域
+ */
+ public int[] nAreas = new int[64];
+ /**
+ * 事件公共扩展字段结构体
+ */
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND();
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[568];
+
+ public ALARM_ALARM_INFO_EX2() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 布撤防状态变化事件的信息
+ public static class ALARM_ARMMODE_CHANGE_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public NET_TIME stuTime; // 报警事件发生的时间
+ public int bArm; // 变化后的状态,对应 NET_ALARM_MODE
+ public int emSceneMode; // 情景模式,对应 NET_SCENE_MODE
+ public int dwID; // ID号, 遥控器编号或键盘地址, emTriggerMode为NET_EM_TRIGGER_MODE_NET类型时为0
+ public int emTriggerMode; // 触发方式,对应 NET_EM_TRIGGER_MODE
+ public byte[] szNetClientAddr = new byte[64]; //网络用户IP地址或网络地址
+ public int nUserCode; //用户ID,0:管理员,1~20:普通用户,21:安装员,22:挟持用户
+
+ public ALARM_ARMMODE_CHANGE_INFO() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 布撤防模式
+ public static class NET_ALARM_MODE extends SdkStructure
+ {
+ public static final int NET_ALARM_MODE_UNKNOWN = -1; // 未知
+ public static final int NET_ALARM_MODE_DISARMING = 0; // 撤防
+ public static final int NET_ALARM_MODE_ARMING = 1; // 布防
+ public static final int NET_ALARM_MODE_FORCEON = 2; // 强制布防
+ public static final int NET_ALARM_MODE_PARTARMING = 3; // 部分布防
+ }
+
+ // 布撤防场景模式
+ public static class NET_SCENE_MODE extends SdkStructure
+ {
+ public static final int NET_SCENE_MODE_UNKNOWN = 0; // 未知场景
+ public static final int NET_SCENE_MODE_OUTDOOR = 1; // 外出模式
+ public static final int NET_SCENE_MODE_INDOOR = 2; // 室内模式
+ public static final int NET_SCENE_MODE_WHOLE = 3; // 全局模式
+ public static final int NET_SCENE_MODE_RIGHTNOW = 4; // 立即模式
+ public static final int NET_SCENE_MODE_SLEEPING = 5; // 就寝模式
+ public static final int NET_SCENE_MODE_CUSTOM = 6; // 自定义模式
+ }
+
+ // 触发方式
+ public static class NET_EM_TRIGGER_MODE extends SdkStructure
+ {
+ public static final int NET_EM_TRIGGER_MODE_UNKNOWN = 0;
+ public static final int NET_EM_TRIGGER_MODE_NET = 1; // 网络用户(平台或Web)
+ public static final int NET_EM_TRIGGER_MODE_KEYBOARD = 2; // 键盘
+ public static final int NET_EM_TRIGGER_MODE_REMOTECONTROL = 3; // 遥控器
+ }
+
+ // 紧急救助事件详情
+ public static class ALARM_RCEMERGENCY_CALL_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int nAction; // -1:未知 0:开始 1:停止
+ public int emType; // 紧急类型,对应 EM_RCEMERGENCY_CALL_TYPE
+ public NET_TIME stuTime; // 事件发生时间
+ public int emMode; // 报警方式,对应 EM_RCEMERGENCY_MODE_TYPE
+ public int dwID; // 用于标示不同的紧急事件(只有emMode是遥控器类型时有效, 表示遥控器的编号, 0表示无效ID)
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public ALARM_RCEMERGENCY_CALL_INFO() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 紧急救助事件类型
+ public static class EM_RCEMERGENCY_CALL_TYPE extends SdkStructure
+ {
+ public static final int EM_RCEMERGENCY_CALL_UNKNOWN = 0;
+ public static final int EM_RCEMERGENCY_CALL_FIRE = 1; // 火警
+ public static final int EM_RCEMERGENCY_CALL_DURESS = 2; // 胁迫
+ public static final int EM_RCEMERGENCY_CALL_ROBBER = 3; // 匪警
+ public static final int EM_RCEMERGENCY_CALL_MEDICAL = 4; // 医疗
+ public static final int EM_RCEMERGENCY_CALL_EMERGENCY = 5; // 紧急
+ }
+
+ // 报警方式
+ public static class EM_RCEMERGENCY_MODE_TYPE extends SdkStructure
+ {
+ public static final int EM_RCEMERGENCY_MODE_UNKNOWN = 0;
+ public static final int EM_RCEMERGENCY_MODE_KEYBOARD = 1; // 键盘
+ public static final int EM_RCEMERGENCY_MODE_WIRELESS_CONTROL = 2; // 遥控器
+ }
+
+ /////////////////////////////////////////////////////
+ ////////用户信息管理对应接口CLIENT_QueryUserInfoNew/////////
+ // 用户信息表
+ public static class USER_MANAGE_INFO_NEW extends SdkStructure {
+ public int dwSize; // 结构体大小
+ public int dwRightNum; // 权限信息有效个数
+ public OPR_RIGHT_NEW[] rightList = new OPR_RIGHT_NEW[NET_NEW_MAX_RIGHT_NUM]; // 权限信息,有效个数由 dwRightNum 成员决定, 用户权限个数上限NET_NEW_MAX_RIGHT_NUM = 1024
+ public int dwGroupNum; // 用户组信息有效个数
+ public USER_GROUP_INFO_NEW[] groupList = new USER_GROUP_INFO_NEW[NET_MAX_GROUP_NUM]; // 用户组信息,此参数废弃,请使用groupListEx
+ public int dwUserNum; // 用户数
+ public USER_INFO_NEW[] userList = new USER_INFO_NEW[NET_MAX_USER_NUM]; // 用户列表, 用户个数上限NET_MAX_USER_NUM=200
+ public int dwFouctionMask; // 掩码: 0x00000001 - 支持用户复用, 0x00000002 - 密码修改需要校验
+ public byte byNameMaxLength; // 支持的用户名最大长度
+ public byte byPSWMaxLength; // 支持的密码最大长度
+ public byte[] byReserve = new byte[254];
+ public USER_GROUP_INFO_EX2[] groupListEx = new USER_GROUP_INFO_EX2[NET_MAX_GROUP_NUM]; // 用户组信息扩展, 用户组个数上限NET_MAX_GROUP_NUM=20
+
+ public USER_MANAGE_INFO_NEW() {
+ this.dwSize = this.size();
+
+ for(int i = 0; i < NET_NEW_MAX_RIGHT_NUM; i++) {
+ rightList[i] = new OPR_RIGHT_NEW();
+ }
+
+ for(int i = 0; i < NET_MAX_USER_NUM; i++) {
+ userList[i] = new USER_INFO_NEW();
+ }
+
+ for(int i = 0; i < NET_MAX_GROUP_NUM; i++) {
+ groupList[i] = new USER_GROUP_INFO_NEW();
+ groupListEx[i] = new USER_GROUP_INFO_EX2();
+ }
+ }
+ }
+
+ // 权限信息
+ public static class OPR_RIGHT_NEW extends SdkStructure {
+ public int dwSize; //结构体大小
+ public int dwID; //权限ID,每个 权限都有各自的ID
+ public byte[] name = new byte[NET_RIGHT_NAME_LENGTH]; //名称 权限名长度 NET_RIGHT_NAME_LENGTH=32
+ public byte[] memo = new byte[NET_MEMO_LENGTH]; //说明备注长度NET_MEMO_LENGTH=32
+
+ public OPR_RIGHT_NEW() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 用户组信息
+ public static class USER_GROUP_INFO_NEW extends SdkStructure {
+ public int dwSize;
+ public int dwID; // 用户组ID, 每个用户组都有各自的ID
+ public byte[] name = new byte[NET_USER_NAME_LENGTH_EX]; // 用户组名称/NET_USER_NAME_LENGTH_EX=16
+ public int dwRightNum; // 用户组权限有效个数
+ public int[] rights = new int[NET_NEW_MAX_RIGHT_NUM]; // 用户组支持权限数组
+ public byte[] memo = new byte[NET_MEMO_LENGTH]; // 用户组备注说明
+ public USER_GROUP_INFO_NEW() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 用户组信息扩展,用户组名加长
+ public static class USER_GROUP_INFO_EX2 extends SdkStructure {
+ public int dwSize; // 结构体大小
+ public int dwID; // ID
+ public byte[] name = new byte[NET_NEW_USER_NAME_LENGTH]; // 用户名 长度NET_NEW_USER_NAME_LENGTH=128
+ public int dwRightNum; // 权限数量
+ public int[] rights = new int[NET_NEW_MAX_RIGHT_NUM]; // 用户权限 个数上限 NET_NEW_MAX_RIGHT_NUM = 1024
+ public byte[] memo = new byte[NET_MEMO_LENGTH]; // 说明, 备注长度NET_MEMO_LENGTH=32
+
+ public USER_GROUP_INFO_EX2() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 用户信息结构体
+ public static class USER_INFO_NEW extends SdkStructure {
+ public int dwSize; // 结构体大小
+ public int dwID; // 用户ID
+ public int dwGroupID; // 用户组组ID
+ public byte[] name = new byte[NET_NEW_USER_NAME_LENGTH]; // 用户名称,长度NET_NEW_USER_NAME_LENGTH=128
+ public byte[] passWord = new byte[NET_NEW_USER_PSW_LENGTH]; // 用户密码,NET_NEW_USER_PSW_LENGTH=128
+ public int dwRightNum; // 用户权限有效个数
+ public int[] rights = new int[NET_NEW_MAX_RIGHT_NUM]; // 用户支持权限数组,个数上限 NET_NEW_MAX_RIGHT_NUM = 1024
+ public byte[] memo = new byte[NET_MEMO_LENGTH]; // 用户备注说明, 备注长度NET_MEMO_LENGTH=32
+ public int dwFouctionMask; // 掩码,0x00000001 - 支持用户复用
+ public NET_TIME stuTime; // 最后修改时间
+ public byte byIsAnonymous; // 是否可以匿名登录, 0:不可匿名登录, 1: 可以匿名登录
+ public byte[] byReserve = new byte[7]; // 保留字节
+
+ public USER_INFO_NEW() {
+ this.dwSize = this.size();
+ }
+ }
+
+
+ //------------------------允许名单相关结构体-------------------------
+ // CLIENT_FindRecord接口输入参数
+ public static class NET_IN_FIND_RECORD_PARAM extends SdkStructure {
+ public int dwSize; // 结构体大小
+ public int emType; // 待查询记录类型,emType对应 EM_NET_RECORD_TYPE
+ public Pointer pQueryCondition; // 查询类型对应的查询条件
+
+ public NET_IN_FIND_RECORD_PARAM() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 交通禁止/允许名单账户记录查询条件
+ public static class FIND_RECORD_TRAFFICREDLIST_CONDITION extends SdkStructure {
+ public int dwSize;
+ public byte[] szPlateNumber = new byte[NET_MAX_PLATE_NUMBER_LEN]; // 车牌号
+ public byte[] szPlateNumberVague = new byte[NET_MAX_PLATE_NUMBER_LEN]; // 车牌号码模糊查询
+ public int nQueryResultBegin; // 第一个条返回结果在查询结果中的偏移量
+ public boolean bRapidQuery; // 是否快速查询, TRUE:为快速,快速查询时不等待所有增、删、改操作完成。默认为非快速查询
+
+ public FIND_RECORD_TRAFFICREDLIST_CONDITION() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 交通流量记录查询条件
+ public static class FIND_RECORD_TRAFFICFLOW_CONDITION extends SdkStructure {
+ public int dwSize;
+ public int abChannelId; // 通道号查询条件是否有效
+ public int nChannelId; // 通道号
+ public int abLane; // 车道号查询条件是否有效
+ public int nLane; // 车道号
+ public int bStartTime; // 开始时间查询条件是否有效
+ public NET_TIME stStartTime; // 开始时间
+ public int bEndTime; // 结束时间查询条件是否有效
+ public NET_TIME stEndTime; // 结束时间
+ public int bStatisticsTime; // 查询是否为统计时间,为BOOL类型,bStartTime及bEndTime均为1
+ public FIND_RECORD_TRAFFICFLOW_CONDITION() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 门禁出入记录查询条件
+ public static class FIND_RECORD_ACCESSCTLCARDREC_CONDITION_EX extends SdkStructure {
+ public int dwSize;
+ public int bCardNoEnable; // 启用卡号查询, 为BOOL类型
+ public byte[] szCardNo = new byte[NET_MAX_CARDNO_LEN]; // 卡号
+ public int bTimeEnable; // 启用时间段查询, 为BOOL类型
+ public NET_TIME stStartTime; // 起始时间
+ public NET_TIME stEndTime; // 结束时间
+ public int nOrderNum; // 规则数
+ public FIND_RECORD_ACCESSCTLCARDREC_ORDER[] stuOrders =
+ (FIND_RECORD_ACCESSCTLCARDREC_ORDER[])new FIND_RECORD_ACCESSCTLCARDREC_ORDER().toArray(MAX_ORDER_NUMBER); // 规则数组
+ public int bRealUTCTimeEnable; // 启动RealUTC时间查询, bRealUTCTimeEnable为TRUE时bTimeEnable无效
+ public NET_TIME stuStartRealUTCTime; // 真实UTC起始时间
+ public NET_TIME stuEndRealUTCTime; // 真实UTC结束时间
+
+ public FIND_RECORD_ACCESSCTLCARDREC_CONDITION_EX() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 门禁出入记录排序规则详情
+ public static class FIND_RECORD_ACCESSCTLCARDREC_ORDER extends SdkStructure
+ {
+ public int emField; // 排序字段, 对应枚举 EM_RECORD_ACCESSCTLCARDREC_ORDER_FIELD
+ public int emOrderType; // 排序类型, 对应枚举 EM_RECORD_ORDER_TYPE
+ public byte[] byReverse = new byte[64]; // 保留字节
+ }
+
+ // 门禁出入记录排序字段
+ public static class EM_RECORD_ACCESSCTLCARDREC_ORDER_FIELD extends SdkStructure
+ {
+ public static final int EM_RECORD_ACCESSCTLCARDREC_ORDER_FIELD_UNKNOWN = 0; // 未知
+ public static final int EM_RECORD_ACCESSCTLCARDREC_ORDER_FIELD_RECNO = 1; // 记录集编号
+ public static final int EM_RECORD_ACCESSCTLCARDREC_ORDER_FIELD_CREATETIME = 2; // 创建时间
+ }
+
+ // 排序类型
+ public static class EM_RECORD_ORDER_TYPE extends SdkStructure
+ {
+ public static final int EM_RECORD_ORDER_TYPE_UNKNOWN = 0; // 未知
+ public static final int EM_RECORD_ORDER_TYPE_ASCENT = 1; // 升序
+ public static final int EM_RECORD_ORDER_TYPE_DESCENT = 2; // 降序
+ }
+
+ // 开门方式(门禁事件,门禁出入记录,实际的开门方式)
+ public static class NET_ACCESS_DOOROPEN_METHOD extends SdkStructure {
+ public static final int NET_ACCESS_DOOROPEN_METHOD_UNKNOWN = 0;
+ public static final int NET_ACCESS_DOOROPEN_METHOD_PWD_ONLY = 1; // 密码开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_CARD = 2; // 刷卡开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_FIRST = 3; // 先刷卡后密码开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_PWD_FIRST = 4; // 先密码后刷卡开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_REMOTE = 5; // 远程开锁,如通过室内机或者平台对门口机开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_BUTTON = 6; // 开锁按钮进行开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT = 7; // 信息开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_PWD_CARD_FINGERPRINT = 8; // 密码+刷卡+信息组合开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_PWD_FINGERPRINT = 10; // 密码+信息组合开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_FINGERPRINT = 11; // 刷卡+信息组合开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_PERSONS = 12; // 多人开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_KEY = 13; // 钥匙开门
+ public static final int NET_ACCESS_DOOROPEN_METHOD_COERCE_PWD = 14; // 胁迫密码开门
+ public static final int NET_ACCESS_DOOROPEN_METHOD_QRCODE = 15; // 二维码开门
+ public static final int NET_ACCESS_DOOROPEN_METHOD_FACE_RECOGNITION = 16; // 目标识别开门
+ public static final int NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD = 18; // 人证对比
+ public static final int NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_AND_IDCARD = 19; // 证件+ 人证比对
+ public static final int NET_ACCESS_DOOROPEN_METHOD_BLUETOOTH = 20; // 蓝牙开门
+ public static final int NET_ACCESS_DOOROPEN_METHOD_CUSTOM_PASSWORD = 21; // 个性化密码开门
+ public static final int NET_ACCESS_DOOROPEN_METHOD_USERID_AND_PWD = 22; // UserID+密码
+ public static final int NET_ACCESS_DOOROPEN_METHOD_FACE_AND_PWD = 23; // 人脸+密码开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_PWD = 24; // 信息+密码开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE = 25; // 信息+人脸开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE = 26; // 刷卡+人脸开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_FACE_OR_PWD = 27; // 人脸或密码开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_PWD = 28; // 信息或密码开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE = 29; // 信息或人脸开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE = 30; // 刷卡或人脸开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT = 31; // 刷卡或信息开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_AND_FACE_AND_PWD = 32; // 信息+人脸+密码开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FACE_AND_PWD = 33; // 刷卡+人脸+密码开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_PWD = 34; // 刷卡+信息+密码开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_AND_PWD_AND_FACE = 35; // 卡+信息+人脸组合开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_FINGERPRINT_OR_FACE_OR_PWD = 36; // 信息或人脸或密码
+ public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FACE_OR_PWD = 37; // 卡或人脸或密码开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE = 38; // 卡或信息或人脸开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD = 39; // 卡+信息+人脸+密码组合开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD = 40; // 卡或信息或人脸或密码开锁
+ public static final int NET_ACCESS_DOOROPEN_METHOD_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE = 41; // (证件+人证比对)或 刷卡 或 人脸
+ public static final int NET_ACCESS_DOOROPEN_METHOD_FACEIDCARD_OR_CARD_OR_FACE = 42; // 人证比对 或 刷卡(二维码) 或 人脸
+ public static final int NET_ACCESS_DOOROPEN_METHOD_DTMF = 43; // DTMF开锁(包括SIPINFO,RFC2833,INBAND)
+ public static final int NET_ACCESS_DOOROPEN_METHOD_REMOTE_QRCODE = 44; // 远程二维码开门
+ public static final int NET_ACCESS_DOOROPEN_METHOD_REMOTE_FACE = 45; // 远程人脸开门
+ public static final int NET_ACCESS_DOOROPEN_METHOD_CITIZEN_FINGERPRINT = 46; // 人证比对开门(信息)
+ }
+
+ // 卡类型
+ public static class NET_ACCESSCTLCARD_TYPE {
+ public static final int NET_ACCESSCTLCARD_TYPE_UNKNOWN = -1;
+ public static final int NET_ACCESSCTLCARD_TYPE_GENERAL = 0; // 一般卡
+ public static final int NET_ACCESSCTLCARD_TYPE_VIP = 1; //
+ public static final int NET_ACCESSCTLCARD_TYPE_GUEST = 2; // 来宾卡
+ public static final int NET_ACCESSCTLCARD_TYPE_PATROL = 3; // 巡逻卡
+ public static final int NET_ACCESSCTLCARD_TYPE_BLACKLIST = 4; // 禁止名单卡
+ public static final int NET_ACCESSCTLCARD_TYPE_CORCE = 5; // 胁迫卡
+ public static final int NET_ACCESSCTLCARD_TYPE_POLLING = 6; // 巡检卡
+ public static final int NET_ACCESSCTLCARD_TYPE_MOTHERCARD = 0xff; // 母卡
+ }
+
+ // 门禁刷卡记录记录集信息
+ public static class NET_RECORDSET_ACCESS_CTL_CARDREC extends SdkStructure {
+ public int dwSize;
+ public int nRecNo; // 记录集编号,只读
+ public byte[] szCardNo = new byte[NET_MAX_CARDNO_LEN];// 卡号
+ public byte[] szPwd = new byte[NET_MAX_CARDPWD_LEN]; // 密码
+ public NET_TIME stuTime; // 刷卡时间
+ public int bStatus; // 刷卡结果,TRUE表示成功,FALSE表示失败
+ public int emMethod; // 开门方式 NET_ACCESS_DOOROPEN_METHOD
+ public int nDoor; // 门号,即CFG_CMD_ACCESS_EVENT配置CFG_ACCESS_EVENT_INFO的数组下标
+ public byte[] szUserID = new byte[NET_MAX_USERID_LEN];// 用户ID
+ public int nReaderID; // 读卡器ID (废弃,不再使用)
+ public byte[] szSnapFtpUrl = new byte[MAX_PATH]; // 开锁抓拍上传的FTP地址
+
+ public byte[] szReaderID = new byte[NET_COMMON_STRING_32];// 读卡器ID // 开门并上传抓拍照片,在记录集记录存储地址,成功才有
+ public int emCardType; // 卡类型 NET_ACCESSCTLCARD_TYPE
+
+ public int nErrorCode; // 开门失败的原因,仅在bStatus为FALSE时有效
+ // 0x00 没有错误
+ // 0x10 未授权
+ // 0x11 卡挂失或注销
+ // 0x12 没有该门权限
+ // 0x13 开门模式错误
+ // 0x14 有效期错误
+ // 0x15 防反潜模式
+ // 0x16 胁迫报警未打开
+ // 0x17 门常闭状态
+ // 0x18 AB互锁状态
+ // 0x19 巡逻卡
+ // 0x1A 设备处于闯入报警状态
+ // 0x20 时间段错误
+ // 0x21 假期内开门时间段错误
+ // 0x30 需要先验证有首卡权限的卡片
+ // 0x40 卡片正确,输入密码错误
+ // 0x41 卡片正确,输入密码超时
+ // 0x42 卡片正确,输入信息错误
+ // 0x43 卡片正确,输入信息超时
+ // 0x44 信息正确,输入密码错误
+ // 0x45 信息正确,输入密码超时
+ // 0x50 组合开门顺序错误
+ // 0x51 组合开门需要继续验证
+ // 0x60 验证通过,控制台未授权
+ // 0x61 卡片正确,人脸错误
+ // 0x62 卡片正确,人脸超时
+ // 0x63 重复进入
+ // 0x64 未授权,需要后端平台识别
+ // 0x65 体温过高
+ // 0x66 未戴口罩
+ // 0x67 健康码获取失败
+ // 0x68 黄码禁止通行
+ // 0x69 红码禁止通行
+ // 0x6a 健康码无效
+ // 0x6b 绿码验证通过
+ // 0x70 获取健康码信息
+ public byte[] szRecordURL = new byte[NET_COMMON_STRING_128]; // 刷卡录像的地址
+ public int nNumbers; // 抓图的张数
+ public int emAttendanceState; // 考勤状态 ,参考 NET_ATTENDANCESTATE
+ public int emDirection; // 开门方向, 参考 NET_ENUM_DIRECTION_ACCESS_CTL
+ public byte[] szClassNumber = new byte[MAX_CLASS_NUMBER_LEN]; // 班级(考勤)
+ public byte[] szPhoneNumber = new byte[MAX_PHONENUMBER_LEN]; // 电话(考勤)
+ public byte[] szCardName = new byte[NET_MAX_CARDNAME_LEN]; // 卡命名
+ public byte[] szSN = new byte[NET_COMMON_STRING_32]; // 智能锁序列号,无线配件需要该字段
+ public int bCitizenIDResult; // 人证比对结果
+ public byte[] szCitizenIDName = new byte[30]; // 名字
+ public byte[] byReserved1 = new byte[2]; // 字节对齐
+ public int emCitizenIDSex; // 性别, 详见EM_CITIZENIDCARD_SEX_TYPE
+ public int emCitizenIDEC; // 民族, 详见EM_CITIZENIDCARD_EC_TYPE
+ public NET_TIME stuCitizenIDBirth; // 出生日期(时分秒无效)
+ public byte[] szCitizenIDAddress = new byte[108]; // 住址
+ public byte[] szCitizenIDAuthority = new byte[48]; // 签发机关
+ public NET_TIME stuCitizenIDStart; // 有效起始日期(时分秒无效)
+ public NET_TIME stuCitizenIDEnd; // 有效截止日期(时分秒无效, 年为负数时表示长期有效)
+ public int bIsEndless; // 是否长期有效
+ public byte[] szSnapFaceURL = new byte[NET_COMMON_STRING_128];// 人脸图片保存地址
+ public byte[] szCitizenPictureURL = new byte[NET_COMMON_STRING_128]; // 证件图片保存地址
+ public byte[] szCitizenIDNo = new byte[20]; // 证件号码
+
+ public int emSex; // 性别, 详见NET_ACCESSCTLCARD_SEX
+ public byte[] szRole = new byte[MAX_COMMON_STRING_32]; // 角色
+ public byte[] szProjectNo = new byte[MAX_COMMON_STRING_32]; // 项目ID
+ public byte[] szProjectName = new byte[MAX_COMMON_STRING_64]; // 项目名称
+ public byte[] szBuilderName = new byte[MAX_COMMON_STRING_64]; // 施工单位全称
+ public byte[] szBuilderID = new byte[MAX_COMMON_STRING_32]; // 施工单位ID
+ public byte[] szBuilderType = new byte[MAX_COMMON_STRING_32]; // 施工单位类型
+ public byte[] szBuilderTypeID = new byte[MAX_COMMON_STRING_8];// 施工单位类别ID
+ public byte[] szPictureID = new byte[MAX_COMMON_STRING_64]; // 人员照片ID
+ public byte[] szContractID = new byte[MAX_COMMON_STRING_16]; // 原合同系统合同编号
+ public byte[] szWorkerTypeID = new byte[MAX_COMMON_STRING_8]; // 工种ID
+ public byte[] szWorkerTypeName = new byte[MAX_COMMON_STRING_32]; // 工种名称
+ public int bPersonStatus; // 人员状态, TRUE:启用, FALSE:禁用
+ public int emHatStyle; // 帽子类型
+ public int emHatColor; // 帽子颜色
+ public NET_MAN_TEMPERATURE_INFO stuManTemperatureInfo; // 人员温度信息
+ public int nCompanionInfo; // 陪同人员 stuCompanionInfo 个数
+ public NET_COMPANION_INFO[] stuCompanionInfo = new NET_COMPANION_INFO[12]; // 陪同人员信息:姓名、卡号字段有效
+ public int emMask; // 口罩状态(EM_MASK_STATE_UNKNOWN、EM_MASK_STATE_NOMASK、EM_MASK_STATE_WEAR 有效) EM_MASK_STATE_TYPE
+ public int nFaceIndex; // 一人多脸的人脸序号
+ public int nScore; // 人脸质量评分
+ public int nLiftNo; // 电梯编号
+ public byte[] szQRCode=new byte[512]; // 二维码
+ /**
+ * EM_FACE_CHECK
+ */
+ public int emFaceCheck; // 功能,刷卡开门时,门禁后台校验人脸是否是同一个人
+ /**
+ * EM_QRCODE_IS_EXPIRED
+ */
+ public int emQRCodeIsExpired; // 二维码是否过期。默认值0
+ /**
+ * EM_QRCODE_STATE
+ */
+ public int emQRCodeState; // 二维码状态
+ public NET_TIME stuQRCodeValidTo; // 二维码截止日期
+ /**
+ * EM_LIFT_CALLER_TYPE
+ */
+ public int emLiftCallerType; // 梯控方式触发者
+
+ public int nBlockId; // 上报事件数据序列号从1开始自增
+
+ public byte[] szSection=new byte[64]; // 部门名称
+
+ public byte[] szWorkClass=new byte[256]; // 工作班级
+ /**
+ * EM_TEST_ITEMS
+ * */
+ public int emTestItems; // 测试项目
+
+ /**
+ * NET_TEST_RESULT
+ */
+ public NET_TEST_RESULT stuTestResult; // ESD阻值测试结果
+ public int bUseCardNameEx; // 是否使用卡命名扩展
+ public byte[] szCardNameEx=new byte[128]; // 卡命名扩展
+ public int nHSJCResult; //核酸检测报告结果 -1: 未知 2: 未检测 3: 过期
+ public int nVaccinateFlag; //是否已接种新冠疫苗(0:否,1:是)
+ public byte[] szVaccineName=new byte[128]; //新冠疫苗名称
+ public int nDateCount; //历史接种日期有效数
+ // public byte[] szVaccinateDate=new byte[8*32]; //历史接种日期 历史接种日期 (yyyy-MM-dd)。 ”0000-00-00”,表示已接种,但无具体日期。
+ /**
+ * 历史接种日期 (yyyy-MM-dd). 如提供不了时间, 则填"0000-00-00", 表示已接种
+ */
+ public VaccinateDateByteArr[] szVaccinateDate = (VaccinateDateByteArr[])new VaccinateDateByteArr().toArray(8);
+ /**
+ * EM_TRAVELCODE_COLOR_STATE
+ */
+ public int emTravelCodeColor; //返回行程码状态信息
+ public int nCityCount; //最近14天经过的城市名有效数
+
+ /**
+ * 最近14天经过的城市名. 按时间顺序排列, 最早经过的城市放第一个
+ */
+ public PassingCityByteArr[] szPassingCity = (PassingCityByteArr[])new PassingCityByteArr().toArray(16);
+
+ public byte[] szTrafficPlate=new byte[32]; //车牌
+ public byte[] szRecordLocalUrl=new byte[128]; // 刷卡录像的地址
+ public byte[] szHSJCReportDate=new byte[32]; // 核酸检测报告日期(格式: yyyy-MM-dd)
+ public int nHSJCExpiresIn; // 核酸检测报告有效期(单位:天)
+ public byte[] szAntigenReportDate=new byte[32]; // 抗原检测报告日期(格式: yyyy-MM-dd)
+ public int nAntigenStatus; // 抗原检测报告结果: -1:未知2: 未检测 3: 过期
+ public int nAntigenExpiresIn; // 抗原检测报告有效期(单位:天)
+ public byte[] szCheckOutType = new byte[32]; // 签出类型
+ public byte[] szCheckOutCause = new byte[512]; // 签出原因
+ public NET_TIME stuCreateTimeRealUTC; // 刷卡时间,真实UTC时间
+ public byte[] szLocationName = new byte[256]; // 场所码名称
+ public byte[] szLocationAddress = new byte[256];// 场所码详细地址
+ public byte[] szLocationType = new byte[256]; // 场所码类型
+
+ public NET_RECORDSET_ACCESS_CTL_CARDREC() {
+ this.dwSize = this.size();
+ for(int i = 0; i0时表示支持多场景, stuMultiScene有效
+ //public CFG_ANALYSEGLOBAL_SCENE[] stuMultiScene = (CFG_ANALYSEGLOBAL_SCENE[])new CFG_ANALYSEGLOBAL_SCENE().toArray(MAX_ANALYSE_SCENE_NUM); // 多场景配置
+
+ public byte[] stuMultiScene=new byte[189872 * MAX_ANALYSE_SCENE_NUM];
+ public int nSceneCount; // 实际场景个数
+ public SCENE_TYPE_LIST[] szSceneTypeListArr = (SCENE_TYPE_LIST[])new SCENE_TYPE_LIST().toArray(MAX_SCENE_TYPE_LIST_SIZE);// 场景列别,同一视频通道下启用多个场景时,表示第2个之后的方案(可选)
+ public int emDepthType; // 画面景深, 参考 EM_DEPTH_TYPE
+ public int nPtzPresetId; // 云台预置点编号,0~255
+ public int unLongitude; // 经度 单位百万分之一度
+ public int unLatitude; // 纬度 单位百万分之一度
+
+ public int bSceneTypeListEx; // szSceneTypeListEx 是否有效,当为TRUE时,使用 szSceneTypeListEx;否则使用 szSceneTypeList
+ public int nSceneCountEx; // 实际场景个数扩展,szSceneTypeListEx 的有效个数
+ public byte[] szSceneTypeListEx=new byte[32*128]; // 场景列表扩展,szSceneTypeList 扩展字段
+
+ public CFG_ANATOMYTEMP_SCENCE_INFO stuAnatomyTempScene; // 人体测温场景配置
+ public Pointer pstuDetectRegionsInfo=new Pointer(new CFG_DETECT_REGIONS_INFO().size()); // 规则相关检测区域信息,CFG_DETECT_REGIONS_INFO
+ public int nMaxDetectRegions; // 最大规则相关检测区域个数,内存由客户申请
+ public int nDetectRegionsNum; // 规则相关检测区域信息个数
+ public CFG_DETAIL_DRIVEASSISTANT_INFO stuDriveAssistant=new CFG_DETAIL_DRIVEASSISTANT_INFO(); // 驾驶辅助场景配置
+ public int bParkingSpaceChangeEnable; // 车位变更使能 FALSE:不使能 TRUE:使能
+ public int emSceneType; // szSceneType的枚举形式
+ public int nSceneCountEm; // SceneTypeList数量
+ public int[] emSceneTypeList = new int[32]; // szSceneTypeList的枚举形式
+ public CFG_PARKING_STATISTICS_INFO stuParkingStatistics; // 车位统计场景配置信息, szSubType为ParkingStatistics时有效
+ @Override
+ public int fieldOffset(String name) {
+ return super.fieldOffset(name);
+ }
+ public CFG_ANALYSEGLOBAL_INFO(){
+
+ this.setAutoSynch(false);
+
+
+ }
+ }
+
+ // 人体测温场景配置
+ public static class CFG_ANATOMYTEMP_SCENCE_INFO extends SdkStructure
+ {
+ public int emFaceDetectType; // 人脸检测智能类型(参考CFG_EM_FACEDETECT_TYPE)
+ public CFG_FACEDETECT_VISUAL_INFO stuVisual; // 可见光配置,emFaceDetectType为CFG_EM_FACEDETECT_TYPE_VISUAL或CFG_EM_FACEDETECT_TYPE_TIMESECTION时有效
+ public CFG_TIME_SECTION stuTimeSection; // 可见光时间段,emFaceDetectType为CFG_EM_FACEDETECT_TYPE_TIMESECTION时有效
+ public byte[] byReserved=new byte[1024]; // 预留字段
+ };
+
+ // 可见光配置
+ public static class CFG_FACEDETECT_VISUAL_INFO extends SdkStructure
+ {
+ public int nFaceAngleUp; // 需要检测的人脸向上(向下)最大偏角,超过此角度不上报,单位度,0-90。
+ public int nFaceAngleRight; // 需要检测的人脸向右(向左)最大偏角,超过此角度不上报,单位度,0-90。
+ public int nFaceRollRight; // 需要检测的人脸向右(向左)歪头最大偏角,超过此角度不上报,单位度,0-90。
+ public byte[] byReserved=new byte[1024]; // 预留字段
+ };
+
+ public static class PLATE_HINT extends SdkStructure
+ {
+ public byte[] szPlateHints = new byte[MAX_NAME_LEN]; // 车牌字符暗示数组,在拍摄图片质量较差车牌识别不确定时,根据此数组中的字符进行匹配,数组下标越小,匹配优先级越高
+ }
+
+ public static class SCENE_TYPE_LIST extends SdkStructure
+ {
+ public byte[] szSceneTypeList = new byte[CFG_COMMON_STRING_16]; // 场景列别,同一视频通道下启用多个场景时,表示第2个之后的方案(可选)
+ }
+
+ // 车道信息
+ public static class CFG_LANE extends SdkStructure
+ {
+ public int nLaneId; // 车道编号
+ public int nDirection; // 车道方向(车开往的方向),0-北 1-东北 2-东 3-东南 4-南 5-西南 6-西 7-西北
+ public CFG_POLYLINE[] stuLeftLine = (CFG_POLYLINE[])new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 左车道线,车道线的方向表示车道方向,沿车道方向左边的称为左车道线
+ public int nLeftLineNum; // 左车道线顶点数
+ public CFG_POLYLINE[] stuRightLine = (CFG_POLYLINE[])new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 右车道线,车道线的方向表示车道方向,沿车道方向右边的称为右车道线
+ public int nRightLineNum; // 右车道线顶点数
+ public int nLeftLineType; // 左车道线属性,1-表示白实线,2- 白虚线,3- 黄线
+ public int nRightLineType; // 右车道线属性,1-表示白实线,2- 白虚线,3- 黄线
+ public int bDriveDirectionEnable; // 车道行驶方向使能, 1-true 0-false
+ public int nDriveDirectionNum; // 车道行驶方向数
+ public DRIVE_DIRECTION[] szDriveDirectionArr = (DRIVE_DIRECTION[])new DRIVE_DIRECTION().toArray(MAX_LIGHT_DIRECTION); // 车道行驶方向,"Straight" 直行,"TurnLeft" 左转,"TurnRight" 右转,"U-Turn":掉头
+ public int nStopLineNum; // 车道对应停止线顶点数
+ public CFG_POLYLINE[] stuStopLine = (CFG_POLYLINE[])new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 车道对应停止线
+ public int nTrafficLightNumber; // 车道对应的红绿灯组编号
+
+ public byte abDetectLine; // 对应能力集
+ public byte abPreLine;
+ public byte abPostLine;
+ public byte[] byReserved = new byte[1];
+
+ public int nDetectLine;
+ public CFG_POLYLINE[] stuDetectLine = (CFG_POLYLINE[])new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 车道对应的检测线
+ public int nPreLine;
+ public CFG_POLYLINE[] stuPreLine = (CFG_POLYLINE[])new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 车道对应的前置线
+ public int nPostLine;
+ public CFG_POLYLINE[] stuPostLine = (CFG_POLYLINE[])new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 车道对应的后置线
+ public CFG_TRAFFIC_FLOWSTAT_DIR_INFO stuTrafficFlowDir; // 车道流量信息
+ public int emRankType; // 道路等级,用于车流量统计上报交通状态, 参考 EM_LANE_RANK_TYPE
+ public int nRoadwayNumber; // 用户自定义车道号, 1-16
+ }
+
+ public static class DRIVE_DIRECTION extends SdkStructure
+ {
+ public byte[] szDriveDirection = new byte[MAX_NAME_LEN]; // 车道行驶方向,"Straight" 直行,"TurnLeft" 左转,"TurnRight" 右转,"U-Turn":掉头
+ }
+
+ // 折线的端点信息
+ public static class CFG_POLYLINE extends SdkStructure
+ {
+ public int nX; //0~8191
+ public int nY;
+ }
+
+ // 车辆流量统计车道方向信息
+ public static class CFG_TRAFFIC_FLOWSTAT_DIR_INFO extends SdkStructure
+ {
+ public int emDrivingDir; //行驶方向, 参考 CFG_FLOWSTAT_DIRECTION
+ public byte[] szUpGoing = new byte[CFG_FLOWSTAT_ADDR_NAME]; //上行地点
+ public byte[] szDownGoing = new byte[CFG_FLOWSTAT_ADDR_NAME]; //下行地点
+ }
+
+ // 交通灯组配置信息
+ public static class CFG_LIGHTGROUPS extends SdkStructure
+ {
+ public int nLightGroupId; // 灯组编号
+ public CFG_RECT stuLightLocation; // 灯组坐标
+ public int nDirection; // 灯组的方向,1- 灯组水平向,2- 灯组垂直向
+ public int bExternalDetection; // 是否为外接红绿灯信号,当外接红绿灯时,以外界信号为判断依据。外界信号每次跳变时通知
+ public int bSwingDetection; // 是否支持自适应灯组摇摆检测,在风吹或者容易震动的场景下,位置会进行一定的浮动偏差。如果由算法自行检测,会增加检测时间
+ public int nLightNum; // 灯组中交通灯的数量
+ public CFG_LIGHTATTRIBUTE[] stuLightAtrributes = (CFG_LIGHTATTRIBUTE[])new CFG_LIGHTATTRIBUTE().toArray(MAX_LIGHT_NUM); // 灯组中各交通灯的属性
+
+ }
+
+ // 交通灯属性
+ public static class CFG_LIGHTATTRIBUTE extends SdkStructure
+ {
+ public int bEnable; // 当前交通灯是否有效,与车辆通行无关的交通需要设置无效
+ public int nTypeNum;
+ public LIGHT_TYPE[] szLightTypeArr = (LIGHT_TYPE[])new LIGHT_TYPE().toArray(MAX_LIGHT_TYPE); // 当前交通灯显现内容(包括:红-Red,黄-Yellow,绿-Green,倒计时-Countdown),如某交通灯可以显示红黄绿三种颜色,某交通灯只显示倒计时
+ public int nDirectionNum;
+ public DIRECTION[] szDirectionArr = (DIRECTION[])new DIRECTION().toArray(MAX_LIGHT_DIRECTION); // 交通灯指示的行车方向,"Straight": 直行,"TurnLeft":左转,"TurnRight":右转,"U-Turn": 掉头
+ public int nYellowTime; // 黄灯亮时间
+ }
+
+ public static class LIGHT_TYPE extends SdkStructure
+ {
+ public byte[] szLightType = new byte[MAX_NAME_LEN]; // 当前交通灯显现内容(包括:红-Red,黄-Yellow,绿-Green,倒计时-Countdown),如某交通灯可以显示红黄绿三种颜色,某交通灯只显示倒计时
+ }
+
+ public static class DIRECTION extends SdkStructure
+ {
+ public byte[] szDirection = new byte[MAX_NAME_LEN]; // 交通灯指示的行车方向,"Straight": 直行,"TurnLeft":左转,"TurnRight":右转,"U-Turn": 掉头
+ }
+
+ // 交通灯颜色校正配置
+ public static class CFG_ADJUST_LIGHT_COLOR extends SdkStructure
+ {
+ public int nMode; // 红灯颜色校正模式 0:未定义 1:红绿灯才校正 2:一直校正
+ public int bEnable; // 是否允许图片红绿灯颜色校正
+ public int nLevel; // 校正等级 范围0~100,数值越大矫正越明显
+ public int bVideoEnable; // 是否启用视频涂红功能,存在此项时,Level值使用LevelSeparate下的Level值
+ public ADJUST_LEVEL_SEP[] stLevelSep = (ADJUST_LEVEL_SEP[])new ADJUST_LEVEL_SEP().toArray(4); // 分立等级,目前为4个
+ }
+
+ // 交通灯颜色校正配置,分立项
+ public static class ADJUST_LEVEL_SEP extends SdkStructure
+ {
+ public int nType; // 0:未定义,1:视频,2:图片
+ public int nTime; // 0:未定义,1:白天,2:夜晚
+ public int nLevel; // 范围0~100,数值越大矫正越明显
+ }
+
+ public static class CFG_PARKING_SPACE extends SdkStructure
+ {
+ public int nNumber; //车位编号
+ public CFG_REGION stArea; //检测区域
+ public int nShieldAreaNum; //有效屏蔽区个数
+ public CFG_REGION[] stShieldArea =
+ (CFG_REGION[])new CFG_REGION().toArray(MAX_SHIELD_AREA_NUM); //屏蔽区域
+ public byte[] szCustomParkNo=new byte[CFG_COMMON_STRING_32]; // 自定义车位名称
+ //public int nPtzPresetId; // 云台预置点编号,0~255
+ }
+
+ public static class CFG_STAFF extends SdkStructure
+ {
+ public CFG_POLYLINE stuStartLocation; // 起始坐标点
+ public CFG_POLYLINE stuEndLocation; // 终止坐标点
+ public float nLenth; // 实际长度,单位米
+ public int emType; // 标尺类型, 参考 EM_STAFF_TYPE
+ }
+
+ // 标定区域,普通场景使用
+ public static class CFG_CALIBRATEAREA_INFO extends SdkStructure
+ {
+ public int nLinePoint; // 水平方向标尺线顶点数
+ public CFG_POLYGON[] stuLine =
+ (CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYLINE_NUM);// 水平方向标尺线
+ public float fLenth; // 实际长度
+ public CFG_REGION stuArea; // 区域
+ public int nStaffNum; // 垂直标尺数
+ public CFG_STAFF[] stuStaffs =
+ (CFG_STAFF[])new CFG_STAFF().toArray(MAX_STAFF_NUM); // 垂直标尺
+ public int emType; // 区域类型, 参考 EM_CALIBRATEAREA_TYPE
+ public int emMethodType; // 标定方式, 参考 EM_METHOD_TYPE
+ }
+
+ // 目标识别场景
+ public static class CFG_FACERECOGNITION_SCENCE_INFO extends SdkStructure
+ {
+ public double dbCameraHeight; // 摄像头离地高度 单位:米
+ public double dbCameraDistance; // 摄像头离地面检测区域中心的水平距离 单位:米
+ public int nMainDirection; // 人流主要方向顶点数
+ public CFG_POLYGON[] stuMainDirection =
+ (CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYLINE_NUM); // 人流主要方向,第一个点是起始点,第二个点是终止点
+ public byte byFaceAngleDown; // 需要检测的人脸向下最大偏角, 单位度,-45~45,负数表示人脸向画面上边,正数表示人脸向画面下边,0表示人脸垂直方向上正对着摄像头。
+ public byte byFaceAngleUp; // 需要检测的人脸向上最大偏角,单位度,-45~45,负数表示人脸向画面上边,正数表示人脸向画面下边,0表示人脸垂直方向上正对着摄像头。
+ public byte byFaceAngleLeft; // 需要检测的人脸向左最大偏角,单位度,-45~45,负数表示人脸向画面左边,正数表示人脸向画面右边,0表示人脸水平方向上正对着摄像头
+ public byte byFaceAngleRight; // 需要检测的人脸向右最大偏角,单位度,-45~45,负数表示人脸向画面左边,正数表示人脸向画面右边,0表示人脸水平方向上正对着摄像头
+ public int emDetectType; // 人脸检测类型, 参考 EM_FACEDETECTION_TYPE
+ }
+
+ // 人脸检测场景
+ public static class CFG_FACEDETECTION_SCENCE_INFO extends SdkStructure
+ {
+ public double dbCameraHeight; // 摄像头离地高度 单位:米
+ public double dbCameraDistance; // 摄像头离地面检测区域中心的水平距离 单位:米
+ public int nMainDirection; // 人流主要方向顶点数
+ public CFG_POLYGON[] stuMainDirection = (CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYLINE_NUM); // 人流主要方向,第一个点是起始点,第二个点是终止点
+ public byte byFaceAngleDown; // 需要检测的人脸向下最大偏角, 单位度,-45~45,负数表示人脸向画面上边,正数表示人脸向画面下边,0表示人脸垂直方向上正对着摄像头。
+ public byte byFaceAngleUp; // 需要检测的人脸向上最大偏角,单位度,-45~45,负数表示人脸向画面上边,正数表示人脸向画面下边,0表示人脸垂直方向上正对着摄像头。
+ public byte byFaceAngleLeft; // 需要检测的人脸向左最大偏角,单位度,-45~45,负数表示人脸向画面左边,正数表示人脸向画面右边,0表示人脸水平方向上正对着摄像头
+ public byte byFaceAngleRight; // 需要检测的人脸向右最大偏角,单位度,-45~45,负数表示人脸向画面左边,正数表示人脸向画面右边,0表示人脸水平方向上正对着摄像头
+ public int emDetectType; // 人脸检测类型, 参考 EM_FACEDETECTION_TYPE
+ }
+
+ public static class CFG_TIME_PERIOD extends SdkStructure
+ {
+ public CFG_TIME stuStartTime;
+ public CFG_TIME stuEndTime;
+ }
+
+ public static class CFG_TIME extends SdkStructure
+ {
+ public int dwHour; // 时
+ public int dwMinute; // 分
+ public int dwSecond; // 秒
+ }
+
+ // 多场景标定白天和黑夜配置
+ public static class CFG_TIME_PERIOD_SCENE_INFO extends SdkStructure
+ {
+ public int dwMaxTimePeriodSceneNum; // 多场景标定白天和黑夜配置最大个数(需要申请此大小内存)
+ public int dwRetTimePeriodSceneNum; // 实际包含多场景标定白天和黑夜配置个数
+ public Pointer pstuTimePeriodScene; // 多场景标白天和黑夜配置域单元,由用户申请内存,大小为sizeof(CFG_TIME_PERIOD_SCENE_UNIT)*dwMaxTimePeriodSceneNum
+ // 指向 CFG_TIME_PERIOD_SCENE_UNIT[]
+ }
+
+ // 多场景标定区域配置
+ public static class CFG_CALIBRATEAREA_SCENE_INFO extends SdkStructure
+ {
+ public int dwMaxSceneCalibrateAreaNum; // 多场景标定区域最大个数(需要申请此大小内存)
+ public int dwRetSceneCalibrateAreaNum; // 实际包含多场景标定区域个数
+ public Pointer pstuCalibrateArea; // 多场景标定区域单元, 由用户申请内存, 指向 CFG_CALIBRATEAREA_SCENE_UNIT[]。
+ // 大小为 sizeof(CFG_CALIBRATEAREA_SCENE_UNIT)*dwMaxSceneCalibrateAreaNum
+ }
+
+ // 昼夜算法切换模式
+ public static class CFG_TIMEPERIOD_SWITCH_MODE extends SdkStructure
+ {
+ public static final int CFG_TIMEPERIOD_SWITCH_MODE_UNKNOWN = 0; // 未知
+ public static final int CFG_TIMEPERIOD_SWITCH_MODE_BYCOLOR = 1; // 通过色彩切换
+ public static final int CFG_TIMEPERIOD_SWITCH_MODE_BYBRIGHTNESS = 2; // 通过亮度切换
+ public static final int CFG_TIMEPERIOD_SWITCH_MODE_BYPOS = 3; // 通过经纬度计算日出日落时间切换
+ }
+
+ // 视频分析全局配置场景
+ public static class CFG_ANALYSEGLOBAL_SCENE extends SdkStructure
+ {
+ public byte[] szSceneType = new byte[MAX_NAME_LEN]; // 应用场景,详见"支持的场景列表"
+
+ public union union = new union();
+ // 以下为场景具体信息, 根据szSceneType决定哪个场景有效
+ public static class union extends Union {
+ public CFG_FACEDETECTION_SCENCE_INFO stuFaceDetectionScene; // 人脸检测场景/目标识别检查
+ public CFG_TRAFFIC_SCENE_INFO stuTrafficScene; // 交通场景
+ public CFG_NORMAL_SCENE_INFO stuNormalScene; // 普通场景/远景场景/中景场景/近景场景/室内场景/人数统计场景
+ public CFG_TRAFFIC_TOUR_SCENE_INFO stuTrafficTourScene; // 交通巡视场景
+ public CFG_CROWD_SCENE_INFO stuCrowdScene; // 人群态势和人群密度场景
+ public CFG_ANATOMYTEMP_SCENCE_INFO stuAnatomyTempScene; // 人体测温场景
+ }
+
+ public int emDepthType; // 画面景深, 参考 EM_DEPTH_TYPE
+ public int nPtzPresetId; // 云台预置点编号,0~255
+ // 以下是有多个大类业务的情况
+ public int nSceneListCount; // 实际场景个数
+ public SCENE_TYPE_LIST[] szSceneTypeListArr = (SCENE_TYPE_LIST[])new SCENE_TYPE_LIST().toArray(MAX_SCENE_TYPE_LIST_SIZE);// 场景列别,同一视频通道下启用多个场景时,表示第2个之后的方案
+ // 多个大类业务时有效
+ public CFG_INTELLI_UNIFORM_SCENE stuUniformScene; // 统一场景配置
+ public int bSceneTypeListEx; // szSceneTypeListEx 是否有效,当为TRUE时,使用szSceneTypeListEx
+ public int nSceneListCountEx; // 实际场景个数扩展,szSceneTypeListEx 的有效个数
+ public byte[] szSceneTypeListEx=new byte[32*128]; // 场景列表扩展,szSceneTypeList 的扩展字段
+ public Pointer pstuDetectRegionsInfo; // 规则相关检测区域信息,CFG_DETECT_REGIONS_INFO
+ public int nMaxDetectRegions; // 最大规则相关检测区域个数,内存由客户申请
+ public int nDetectRegionsNum; // 规则相关检测区域信息个数
+ }
+
+ public static class CFG_CROWD_SCENE_INFO extends SdkStructure{
+ public float fCameraHeight; // 摄像头离地高度 单位:米
+ }
+
+ // 交通场景
+ public static class CFG_TRAFFIC_SCENE_INFO extends SdkStructure
+ {
+ public int abCompatibleMode;
+ public int nCompatibleMode; // 0:"OldTrafficRule" : 交通老规则兼容模式;1:"NewTrafficRule" : 交通新规则兼容模式;-1:字符串错误
+ public float fCameraHeight; // 摄像头离地高度 单位:米
+ public float fCameraDistance; // 摄像头离地面检测区域中心的水平距离 单位:米
+ public byte[] szSubType = new byte[MAX_NAME_LEN]; // 交通场景的子类型,"Gate" 卡口类型,"Junction" 路口类型
+ // "Tunnel"隧道类型 , "ParkingSpace"车位检测类型
+ // "Bridge"桥梁类型
+ // "Freeway"高速公路类型
+ public CFG_POLYGON stuNearDetectPoint; // 近景检测点
+ public CFG_POLYGON stuFarDectectPoint; // 远景检测点
+ public int nNearDistance; // NearDetectPoint,转换到实际场景中时,离摄像头垂直线的水平距离
+ public int nFarDistance; // FarDectectPoint,转换到实际场景中时,离摄像头垂直线的水平距离
+ public int nPlateHintNum; // 车牌字符暗示个数
+ public PLATE_HINT[] szPlateHintsArr = (PLATE_HINT[])new PLATE_HINT().toArray(MAX_PLATEHINT_NUM); // 车牌字符暗示数组,在拍摄图片质量较差车牌识别不确定时,根据此数组中的字符进行匹配,数组下标越小,匹配优先级越高
+ public int nLaneNum; // 车道数
+ public CFG_LANE[] stuLanes = (CFG_LANE[])new CFG_LANE().toArray(MAX_LANE_NUM); // 车道信息
+ public int nLightGroupNum; // 灯组数
+ public CFG_LIGHTGROUPS[] stLightGroups = (CFG_LIGHTGROUPS[])new CFG_LIGHTGROUPS().toArray(MAX_LIGHTGROUP_NUM); // 灯组配置信息
+ public int bHangingWordPlate; // 是否识别挂字车牌
+ public int bNonStdPolicePlate; // 是否识别非标准警牌
+ public int bYellowPlateLetter; // 是否识别黄牌字母
+ public int nReportMode; // 上报模式,0:未定义,1:上报所有违章车辆,2:上报车牌识别成功的违章车辆
+ public int nPlateMatch; // 车牌匹配率,0~100,多次识别车牌使用,表示重复识别车牌和前一次识别车牌的一致性要求
+ public int nJudgment; // 违章判定依据,0:未定义,1:按车道,2:按行驶方向,3:按车道和行驶方向
+ public int nLeftDivisionPtCount; // 左转弯分界线点数
+ public CFG_POLYLINE[] stLeftDivisionLine = (CFG_POLYLINE[])new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 左转弯分界线
+ public int nRightDivisionPtCount; // 右转弯分界线点数
+ public CFG_POLYLINE[] stRightDivisionLine = (CFG_POLYLINE[])new CFG_POLYLINE().toArray(MAX_POLYLINE_NUM); // 右转弯分界线
+ public CFG_ADJUST_LIGHT_COLOR stAdjustLightColor; // 交通灯颜色校正配置
+ public int nParkingSpaceNum; // 车位数
+ public CFG_PARKING_SPACE[] stParkingSpaces = (CFG_PARKING_SPACE[])new CFG_PARKING_SPACE().toArray(MAX_PARKING_SPACE_NUM);// 车位配置信息,每个元素代表一个车位
+
+ }
+
+ // 普遍场景
+ public static class CFG_NORMAL_SCENE_INFO extends SdkStructure
+ {
+ public float fCameraHeight; // 摄像头离地高度 单位:米
+ public float fCameraAngle; // 摄像头与垂方向的夹角 单位度,0~90,
+ public float fCameraDistance; // 摄像头离地面检测区域中心的水平距离 单位:米
+ public CFG_POLYGON stuLandLineStart; // 地平线线段起始点(点的坐标坐标归一化到[0,8192)区间。)
+ public CFG_POLYGON stuLandLineEnd; // 地平线线段终止点(点的坐标坐标归一化到[0,8192)区间。)
+ }
+
+ // 交通巡视场景
+ public static class CFG_TRAFFIC_TOUR_SCENE_INFO extends SdkStructure
+ {
+ public int nPlateHintNum; // 车牌字符暗示个数
+ public PLATE_HINT[] szPlateHintsArr = (PLATE_HINT[])new PLATE_HINT().toArray(MAX_PLATEHINT_NUM); // 车牌字符暗示数组,在拍摄图片质量较差车牌识别不确定时,根据此数组中的字符进行匹配,数组下标越小,匹配优先级越高
+ }
+
+ // 统一场景配置,TypeList存在时配置此场景
+ public static class CFG_INTELLI_UNIFORM_SCENE extends SdkStructure
+ {
+ public byte[] szSubType = new byte[MAX_NAME_LEN]; // 交通场景的子类型,"Gate" 卡口类型,"Junction" 路口类型
+ // "Tunnel"隧道类型 , "ParkingSpace"车位检测类型
+ // "Bridge"桥梁类型
+ // "Freeway"高速公路类型
+ public int nPlateHintNum; // 车牌字符暗示个数
+ public PLATE_HINT[] szPlateHints = (PLATE_HINT[])new PLATE_HINT[MAX_PLATEHINT_NUM]; // 车牌字符暗示数组,在拍摄图片质量较差车牌识别不确定时,根据此数组中的字符进行匹配,数组下标越小,匹配优先级越高
+ public int nLaneNum; // 车道数
+ public CFG_LANE[] stuLanes = (CFG_LANE[])new CFG_LANE().toArray(MAX_LANE_NUM); // 车道信息
+ }
+
+ // CLIENT_MatrixAddCamerasByDevice 接口输入参数
+ public static class NET_IN_ADD_LOGIC_BYDEVICE_CAMERA extends SdkStructure
+ {
+ public int dwSize;
+ public byte[] pszDeviceID = new byte[NET_DEV_ID_LEN]; // 设备ID
+ public NET_REMOTE_DEVICE stuRemoteDevice; // 远程设备信息
+ public int nCameraCount; // 视频源信息数量
+ public Pointer pCameras; // 视频源信息数组,用户分配内存,大小为sizeof(NET_LOGIC_BYDEVICE_ADD_CAMERA_PARAM)*nCameraCount
+ // 对应 NET_LOGIC_BYDEVICE_ADD_CAMERA_PARAM[]
+
+ public NET_IN_ADD_LOGIC_BYDEVICE_CAMERA() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // CLIENT_MatrixAddCamerasByDevice 接口输出参数
+ public static class NET_OUT_ADD_LOGIC_BYDEVICE_CAMERA extends SdkStructure
+ {
+ public int dwSize;
+ public byte[] szDeviceID = new byte[NET_DEV_ID_LEN]; // 设备ID
+ public int nMaxResultCount; // 结果数组大小, 用户填写
+ public int nRetResultCount; // 实际结果数量
+ public Pointer pResults; // 添加视频源结果数组,用户分配内存,大小为sizeof(NET_LOGIC_BYDEVICE_ADD_CAMERA_RESULT)*nMaxResultCount
+ // 对应 NET_LOGIC_BYDEVICE_ADD_CAMERA_RESULT[]
+
+ public NET_OUT_ADD_LOGIC_BYDEVICE_CAMERA() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 视频源信息
+ public static class NET_LOGIC_BYDEVICE_ADD_CAMERA_PARAM extends SdkStructure
+ {
+ public int dwSize;
+ public int nUniqueChannel; // 统一编号
+ public int nChannel; // 通道号
+
+ public NET_LOGIC_BYDEVICE_ADD_CAMERA_PARAM() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 添加视频源结果信息
+ public static class NET_LOGIC_BYDEVICE_ADD_CAMERA_RESULT extends SdkStructure
+ {
+ public int dwSize;
+ public int nUniqueChannel; // 统一编号
+ public int nFailedCode; // 失败码, 0-成功,1-通道不支持设置
+
+ public NET_LOGIC_BYDEVICE_ADD_CAMERA_RESULT() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 事件类型 EVENT_IVS_FACEDETECT (人脸检测事件)对应的规则配置
+ public static class CFG_FACEDETECT_INFO extends SdkStructure
+ {
+ public byte[] szRuleName = new byte[MAX_NAME_LEN]; // 规则名称,不同规则不能重名
+ public byte bRuleEnable; // 规则使能, 1-true 0-false
+ public byte[] bReserved = new byte[3]; // 保留字段
+ public int nObjectTypeNum; // 相应物体类型个数
+ public byte[] szObjectTypes = new byte[MAX_OBJECT_LIST_SIZE*MAX_NAME_LEN]; // 相应物体类型列表
+ public int nDetectRegionPoint; // 检测区顶点数
+ public CFG_POLYGON[] stuDetectRegion = (CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYGON_NUM); // 检测区
+ public int nHumanFaceTypeCount; // 触发事件的人脸类型个数
+ public byte[] szHumanFaceType = new byte[MAX_HUMANFACE_LIST_SIZE*MAX_NAME_LEN]; // 触发事件的人脸类型
+ public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动
+ public CFG_TIME_SECTION[] stuTimeSection =
+ (CFG_TIME_SECTION[])new CFG_TIME_SECTION().toArray(WEEK_DAY_NUM*MAX_REC_TSECT_EX); // 事件响应时间段
+ public int nPtzPresetId; // 云台预置点编号 0~65535
+ public int nMinDuration; // 最短触发时间,单位:秒
+ public int nSensitivity; // 灵敏度,范围[1,10],灵敏度越高越容易检测
+ public int nReportInterval; // 重复报警间隔,单位:秒,[0,600](等于0表示不重复报警)
+ public int bSizeFileter; // 规则特定的尺寸过滤器是否有效
+ public CFG_SIZEFILTER_INFO stuSizeFileter; // 规则特定的尺寸过滤器, 1-true 0-false
+ public int bFeatureEnable; // 是否开启人脸属性识别, IPC增加, 1-true 0-false
+ // (通过FaceDetection能力中的FeatureSupport来确定该配置是否可以设置)
+ public int nFaceFeatureNum; // 需要检测的人脸属性个数
+ public int[] emFaceFeatureType = new int[MAX_FEATURE_LIST_SIZE]; // 需检测的人脸属性, 通过FaceDetection能力来获取支持哪些人脸属性, 参考 EM_FACEFEATURE_TYPE
+ }
+
+ public static class MAX_OBJECT_LIST extends SdkStructure
+ {
+ public byte[] szObjectTypes = new byte[MAX_NAME_LEN]; // 相应物体类型列表
+ }
+
+ public static class MAX_HUMANFACE_LIST extends SdkStructure
+ {
+ public byte[] szHumanFaceType = new byte[MAX_NAME_LEN]; // 触发事件的人脸类型
+ }
+
+ public static class TIME_SECTION_WEEK_DAY_10 extends SdkStructure
+ {
+ public CFG_TIME_SECTION[] stuTimeSection = (CFG_TIME_SECTION[])new CFG_TIME_SECTION().toArray(MAX_REC_TSECT_EX); // 事件响应时间段
+ public TIME_SECTION_WEEK_DAY_10(){
+ for(int i=0;idwSize == nBufLen
+ public interface fAttachBurnStateCB extends StdCallCallback {
+ public void invoke(LLong lLoginID, LLong lAttachHandle, NET_CB_BURNSTATE pBuf, int nBufLen, Pointer dwUser);
+ }
+
+ // 刻录设备回调扩展函数原形
+ public interface fAttachBurnStateCBEx extends StdCallCallback {
+ public void invoke(LLong lLoginID, LLong lAttachHandle, NET_OUT_BURN_GET_STATE pBuf, int nBufLen, Pointer dwUser);
+ }
+
+ //刻录设备回调函数,lUploadHandle是CLIENT_StartUploadFileBurned返回值
+ //typedef void (CALLBACK *fBurnFileCallBack) (LLONG lLoginID, LLONG lUploadHandle, int nTotalSize, int nSendSize, LDWORD dwUser);
+ public interface fBurnFileCallBack extends StdCallCallback {
+ public void invoke(LLong lLoginID, LLong lUploadHandle, int nTotalSize, int nSendSize, Pointer dwUser);
+ }
+
+
+ // 升级回调
+ public interface fUpgradeCallBackEx extends StdCallCallback {
+ public void invoke(LLong lLoginID, LLong lUpgradechannel, int nTotalSize, int nSendSize, Pointer dwUserData);
+ }
+
+ /************************************************************************
+ ** 接口
+ ***********************************************************************/
+ // JNA直接调用方法定义,cbDisConnect 实际情况并不回调Java代码,仅为定义可以使用如下方式进行定义。 fDisConnect 回调
+ public boolean CLIENT_Init(Callback cbDisConnect, Pointer dwUser);
+
+ // JNA直接调用方法定义,SDK退出清理
+ public void CLIENT_Cleanup();
+
+ // JNA直接调用方法定义,设置断线重连成功回调函数,设置后SDK内部断线自动重连, fHaveReConnect 回调
+ public void CLIENT_SetAutoReconnect(Callback cbAutoConnect, Pointer dwUser);
+
+ // 返回函数执行失败代码
+ public int CLIENT_GetLastError();
+
+ // 设置连接设备超时时间和尝试次数
+ public void CLIENT_SetConnectTime(int nWaitTime, int nTryTimes);
+
+ // 设置登陆网络环境
+ public void CLIENT_SetNetworkParam(NET_PARAM pNetParam);
+
+ //
+ public boolean CLIENT_SetDeviceSearchParam(NET_DEVICE_SEARCH_PARAM pstParam);
+
+ // 获取SDK的版本信息
+ public int CLIENT_GetSDKVersion();
+
+ // JNA直接调用方法定义,登陆接口
+ public LLong CLIENT_LoginEx(String pchDVRIP, int wDVRPort, String pchUserName, String pchPassword, int nSpecCap, Pointer pCapParam, NET_DEVICEINFO lpDeviceInfo, IntByReference error/*= 0*/);
+
+ // JNA直接调用方法定义,登陆扩展接口///////////////////////////////////////////////////
+ // nSpecCap 对应 EM_LOGIN_SPAC_CAP_TYPE 登陆类型
+ public LLong CLIENT_LoginEx2(String pchDVRIP, int wDVRPort, String pchUserName, String pchPassword, int nSpecCap, Pointer pCapParam, NET_DEVICEINFO_Ex lpDeviceInfo, IntByReference error/*= 0*/);
+
+ // JNA直接调用方法定义,向设备注销
+ public boolean CLIENT_Logout(LLong lLoginID);
+
+ // 获取配置
+ // error 为设备返回的错误码: 0-成功 1-失败 2-数据不合法 3-暂时无法设置 4-没有权限
+ public boolean CLIENT_GetNewDevConfig(LLong lLoginID, String szCommand, int nChannelID, byte[] szOutBuffer, int dwOutBufferSize, IntByReference error, int waiitime);
+
+ // 设置配置
+ public boolean CLIENT_SetNewDevConfig(LLong lLoginID, String szCommand, int nChannelID, byte[] szInBuffer, int dwInBufferSize, IntByReference error, IntByReference restart, int waittime);
+
+ // 删除配置接口(Json格式)
+ public boolean CLIENT_DeleteDevConfig(LLong lLoginID, NET_IN_DELETECFG pInParam, NET_OUT_DELETECFG pOutParam, int waittime);
+
+ // 获取配置成员名称接口(Json格式)(pInParam, pOutParam内存由用户申请释放)
+ public boolean CLIENT_GetMemberNames(LLong lLoginID, NET_IN_MEMBERNAME pInParam, NET_OUT_MEMBERNAME pOutParam, int waittime);
+
+ // 解析查询到的配置信息
+ public boolean CLIENT_ParseData(String szCommand, byte[] szInBuffer, Pointer lpOutBuffer, int dwOutBufferSize, Pointer pReserved);
+
+ // 组成要设置的配置信息
+ public boolean CLIENT_PacketData(String szCommand, Pointer lpInBuffer, int dwInBufferSize, byte[] szOutBuffer, int dwOutBufferSize);
+
+ // 设置报警回调函数, fMessCallBack 回调
+ public void CLIENT_SetDVRMessCallBack(Callback cbMessage, Pointer dwUser);
+
+ // 设置报警回调函数, fMessCallBackEx1 回调
+ public void CLIENT_SetDVRMessCallBackEx1(fMessCallBackEx1 cbMessage, Pointer dwUser);
+
+ // 向设备订阅报警--扩展
+ public boolean CLIENT_StartListenEx(LLong lLoginID);
+
+ // 停止订阅报警
+ public boolean CLIENT_StopListen(LLong lLoginID);
+
+ /////////////////////////////////目标识别接口/////////////////////////////////////////
+ //目标识别数据库信息操作(包括添加,修改和删除)
+ // pstInParam指向NET_IN_OPERATE_FACERECONGNITIONDB类型的指针
+ // pstOutParam指向NET_OUT_OPERATE_FACERECONGNITIONDB类型的指针
+ public boolean CLIENT_OperateFaceRecognitionDB(LLong lLoginID, NET_IN_OPERATE_FACERECONGNITIONDB pstInParam, NET_OUT_OPERATE_FACERECONGNITIONDB pstOutParam, int nWaitTime);
+
+ // 按条件查询目标识别结果
+ // pstInParam指向NET_IN_STARTFIND_FACERECONGNITION类型的指针
+ // pstOutParam指向NET_OUT_STARTFIND_FACERECONGNITION类型的指针
+ public boolean CLIENT_StartFindFaceRecognition(LLong lLoginID, NET_IN_STARTFIND_FACERECONGNITION pstInParam, NET_OUT_STARTFIND_FACERECONGNITION pstOutParam, int nWaitTime);
+
+ // 查找目标识别结果:nFilecount:需要查询的条数, 返回值为媒体文件条数 返回值NET_IN_DOWNLOAD_BYFILE_SELFADAPT
+ // pstOutParam->NET_OUT_DOWNLOAD_BYFILE_SELFADAPT
+ public LLong CLIENT_DownloadByFileSelfAdapt(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int dwWaitTime);
+
+ // 自适应速度的按时间下载录像
+ // pstInParam->NET_IN_ADAPTIVE_DOWNLOAD_BY_TIME
+ // pstOutParam->NET_OUT_ADAPTIVE_DOWNLOAD_BY_TIME
+ public LLong CLIENT_AdaptiveDownloadByTime( LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int dwWaitTime );
+
+ // 私有云台控制扩展接口,支持三维快速定位
+ public boolean CLIENT_DHPTZControlEx(LLong lLoginID, int nChannelID, int dwPTZCommand, int lParam1, int lParam2, int lParam3, int dwStop);
+
+ // 云台控制扩展接口,支持三维快速定位,鱼眼
+ // dwStop类型为BOOL, 取值0或者1
+ // dwPTZCommand取值为NET_EXTPTZ_ControlType中的值或者是NET_PTZ_ControlType中的值
+ // NET_IN_PTZBASE_MOVEABSOLUTELY_INFO
+ // 精准绝对移动控制命令, param4对应结构 NET_IN_PTZBASE_MOVEABSOLUTELY_INFO(通过 CFG_CAP_CMD_PTZ 命令获取云台能力集( CFG_PTZ_PROTOCOL_CAPS_INFO ),若bSupportReal为TRUE则设备支持该操作)
+ public boolean CLIENT_DHPTZControlEx2(LLong lLoginID, int nChannelID, int dwPTZCommand, int lParam1, int lParam2, int lParam3, int dwStop, Pointer param4);
+
+ // 设备控制(param内存由用户申请释放) emType对应 枚举 CtrlType
+ public boolean CLIENT_ControlDevice(LLong lLoginID, int emType, Pointer param, int waittime);
+
+ // 设备控制扩展接口,兼容 CLIENT_ControlDevice (pInBuf, pOutBuf内存由用户申请释放)
+ // emType的取值为CtrlType中的值
+ public boolean CLIENT_ControlDeviceEx(LLong lLoginID, int emType, Pointer pInBuf, Pointer pOutBuf, int nWaitTime);
+
+ // 查询配置信息(lpOutBuffer内存由用户申请释放)
+ public boolean CLIENT_GetDevConfig(LLong lLoginID, int dwCommand, int lChannel, Pointer lpOutBuffer, int dwOutBufferSize, IntByReference lpBytesReturned, int waittime);
+
+ // 设置配置信息(lpInBuffer内存由用户申请释放)
+ public boolean CLIENT_SetDevConfig(LLong lLoginID, int dwCommand, int lChannel, Pointer lpInBuffer, int dwInBufferSize, int waittime);
+
+ // 查询设备状态(pBuf内存由用户申请释放)
+ // pBuf指向char *,输出参数
+ // pRetLen指向int *;输出参数,实际返回的数据长度,单位字节
+ public boolean CLIENT_QueryDevState(LLong lLoginID, int nType, Pointer pBuf, int nBufLen, IntByReference pRetLen, int waittime);
+
+ // 查询远程设备状态(pBuf内存由用户申请释放)
+ // nType为DH_DEVSTATE_ALARM_FRONTDISCONNECT时,通道号从1开始
+ public boolean CLIENT_QueryRemotDevState(LLong lLoginID, int nType, int nChannelID, Pointer pBuf, int nBufLen, IntByReference pRetLen, int waittime);
+
+ // 获取设备能力接口
+ // pInBuf指向void*,输入参数结构体指针 pOutBuf指向void*,输出参数结构体指针
+ public boolean CLIENT_GetDevCaps(LLong lLoginID, int nType, Pointer pInBuf, Pointer pOutBuf, int nWaitTime);
+
+ // 新系统能力查询接口,查询系统能力信息(以Json格式,具体见配置SDK)(szOutBuffer内存由用户申请释放)
+ // szCommand: 对应命令查看上文
+ // szOutBuffer: 获取到的信息, 通过 CLIENT_ParseData 解析
+ // error 指向 int * : 错误码大于0表示设备返回的,小于0表示缓冲不够或数据校验引起的
+ public boolean CLIENT_QueryNewSystemInfo(LLong lLoginID, String szCommand, int nChannelID, byte[] szOutBuffer, int dwOutBufferSize, IntByReference error, int waittime);
+
+ // 新系统能力查询接口扩展,查询系统能力信息,入参新增扩展数据(以Json格式,具体见配置SDK)(szOutBuffer内存由用户申请释放)
+ public boolean CLIENT_QueryNewSystemInfoEx(LLong lLoginID, String szCommand, int nChannelID, byte[] szOutBuffer, int dwOutBufferSize, IntByReference error, Pointer pExtendInfo , int waittime);
+
+ // 查询系统能力信息(pSysInfoBuffer内存由用户申请释放,大小参照DH_SYS_ABILITY对应的结构体,若nSystemType为 ABILITY_DYNAMIC_CONNECT ,内存大小至少为sizeof(BOOL),若nSystemType为ABILITY_TRIGGER_MODE,内存大小为sizeof(int))
+ public boolean CLIENT_QuerySystemInfo(LLong lLoginID, int nSystemType, String pSysInfoBuffer, int nChannelID, byte[] szOutBuffer, int dwOutBufferSize, IntByReference error, int waittime);
+
+ // 订阅视频统计摘要信息
+ public LLong CLIENT_AttachVideoStatSummary(LLong lLoginID, NET_IN_ATTACH_VIDEOSTAT_SUM pInParam, NET_OUT_ATTACH_VIDEOSTAT_SUM pOutParam, int nWaitTime);
+
+ // 取消订阅视频统计摘要信息,lAttachHandle为CLIENT_AttachVideoStatSummary的返回值
+ public boolean CLIENT_DetachVideoStatSummary(LLong lAttachHandle);
+
+ // 开始查询视频统计信息/获取人数统计信息
+ public LLong CLIENT_StartFindNumberStat(LLong lLoginID, NET_IN_FINDNUMBERSTAT pstInParam, NET_OUT_FINDNUMBERSTAT pstOutParam);
+
+ // 继续查询视频统计/继续查询人数统计
+ public int CLIENT_DoFindNumberStat(LLong lFindHandle, NET_IN_DOFINDNUMBERSTAT pstInParam, NET_OUT_DOFINDNUMBERSTAT pstOutParam);
+
+ // 结束查询视频统计/结束查询人数统计
+ public boolean CLIENT_StopFindNumberStat(LLong lFindHandle);
+
+ // 设置语音对讲模式,客户端方式还是服务器方式
+ // emType : 方式类型 参照 EM_USEDEV_MODE
+ public boolean CLIENT_SetDeviceMode(LLong lLoginID, int emType, Pointer pValue);
+
+ ///////////////// 录像回放相关接口 ///////////////////////
+ // 按时间方式回放
+ public LLong CLIENT_PlayBackByTime(LLong lLoginID, int nChannelID, NET_TIME lpStartTime, NET_TIME lpStopTime, Pointer hWnd, fDownLoadPosCallBack cbDownLoadPos, Pointer dwPosUser);
+
+ // 按时间方式回放--扩展接口
+ // cbDownLoadPos 对应 fDownLoadPosCallBack 回调
+ // fDownLoadDataCallBack 对应 fDataCallBack 回调
+ public LLong CLIENT_PlayBackByTimeEx(LLong lLoginID, int nChannelID, NET_TIME lpStartTime, NET_TIME lpStopTime, Pointer hWnd,
+ Callback cbDownLoadPos, Pointer dwPosUser,
+ Callback fDownLoadDataCallBack, Pointer dwDataUser);
+
+ public LLong CLIENT_PlayBackByTimeEx2(LLong lLoginID, int nChannelID, NET_IN_PLAY_BACK_BY_TIME_INFO pstNetIn, NET_OUT_PLAY_BACK_BY_TIME_INFO pstNetOut);
+
+ // 停止录像回放接口
+ public boolean CLIENT_StopPlayBack(LLong lPlayHandle);
+
+ // 获取回放OSD时间
+ public boolean CLIENT_GetPlayBackOsdTime(LLong lPlayHandle, NET_TIME lpOsdTime, NET_TIME lpStartTime, NET_TIME lpEndTime);
+
+ // 暂停或恢复录像回放
+ // bPause: 1 - 暂停 0 - 恢复
+ public boolean CLIENT_PausePlayBack(LLong lPlayHandle, int bPause);
+
+ // 快进录像回放
+ public boolean CLIENT_FastPlayBack(LLong lPlayHandle);
+
+ // 慢进录像回放
+ public boolean CLIENT_SlowPlayBack(LLong lPlayHandle);
+
+ // 恢复正常回放速度
+ public boolean CLIENT_NormalPlayBack(LLong lPlayHandle);
+
+ // 设置录像回放速度, emSpeed 对应枚举 EM_PLAY_BACK_SPEED
+ public boolean CLIENT_SetPlayBackSpeed(LLong lPlayHandle, int emSpeed);
+
+ // 查询设备当前时间
+ public boolean CLIENT_QueryDeviceTime(LLong lLoginID, NET_TIME pDeviceTime, int waittime);
+
+ // 设置设备当前时间
+ public boolean CLIENT_SetupDeviceTime(LLong lLoginID, NET_TIME pDeviceTime);
+
+ // 获得亮度、色度、对比度、饱和度的参数
+ // param1/param2/param3/param4 四个参数范围0~255
+ public boolean CLIENT_ClientGetVideoEffect(LLong lPlayHandle, byte[] nBrightness, byte[] nContrast, byte[] nHue, byte[] nSaturation);
+
+ // 设置亮度、色度、对比度、饱和度的参数
+ // nBrightness/nContrast/nHue/nSaturation四个参数为 unsigned byte 范围0~255
+ public boolean CLIENT_ClientSetVideoEffect(LLong lPlayHandle, byte nBrightness, byte nContrast, byte nHue, byte nSaturation);
+
+ //------------------------用户管理-----------------------
+ // 查询用户信息--扩展(info内存由用户申请释放,大小为sizeof(USER_MANAGE_INFO_EX))
+ public boolean CLIENT_QueryUserInfoEx(LLong lLoginID, USER_MANAGE_INFO_EX info, int waittime);
+
+ // 查询用户信息--最大支持64通道设备
+ // pReserved指向void*
+ public boolean CLIENT_QueryUserInfoNew(LLong lLoginID, USER_MANAGE_INFO_NEW info, Pointer pReserved, int nWaittime);
+
+ // 设置用户信息接口--操作设备用户--最大支持64通道设备
+ // opParam指向void* subParam指向void*
+ // pReserved指向void*
+ // opParam(设置用户信息的输入缓冲)和subParam(设置用户信息的辅助输入缓冲)对应结构体类型USER_GROUP_INFO_NEW或USER_INFO_NEW
+ public boolean CLIENT_OperateUserInfoNew(LLong lLoginID, int nOperateType, Pointer opParam, Pointer subParam, Pointer pReserved, int nWaittime);
+
+ /**
+ * // 查询设备日志,以分页方式查询(pQueryParam, pLogBuffer内存由用户申请释放)
+ * CLIENT_NET_API BOOL CALL_METHOD CLIENT_QueryDeviceLog(LLONG lLoginID, QUERY_DEVICE_LOG_PARAM *pQueryParam, char *pLogBuffer, int nLogBufferLen, int *pRecLogNum, int waittime=3000);
+ * pQueryParam 对应结构体QUERY_DEVICE_LOG_PARAM
+ * pLogBuffer:char *
+ * waitTime:默认3000
+ */
+ public boolean CLIENT_QueryDeviceLog(LLong lLoginID, Pointer pQueryParam, Pointer pLogBuffer, int nLogBufferLen, IntByReference pRecLogNum, int waittime);
+
+
+ //----------------------语音对讲--------------------------
+ // 向设备发起语音对讲请求 pfcb是用户自定义的数据回调接口, pfAudioDataCallBack 回调
+ public LLong CLIENT_StartTalkEx(LLong lLoginID, Callback pfcb, Pointer dwUser);
+
+ // 停止语音对讲 lTalkHandle语音对讲句柄,是CLIENT_StartTalkEx的返回 值
+ public boolean CLIENT_StopTalkEx(LLong lTalkHandle);
+
+ // 启动本地录音功能(只在Windows平台下有效),录音采集出来的音频数据通过CLIENT_StartTalkEx的回调函数回调给用户,对应操作是CLIENT_RecordStopEx
+ // lLoginID是CLIENT_Login的返回值
+ public boolean CLIENT_RecordStartEx(LLong lLoginID);
+
+ // 开始PC端录音
+ public boolean CLIENT_RecordStart();
+
+ // 结束PC端录音
+ public boolean CLIENT_RecordStop();
+
+ // 停止本地录音(只在Windows平台下有效),对应操作是CLIENT_RecordStartEx。
+ public boolean CLIENT_RecordStopEx(LLong lLoginID);
+
+ // 向设备发送用户的音频数据,这里的数据可以是从CLIENT_StartTalkEx的回调接口中回调出来的数据
+ public LLong CLIENT_TalkSendData(LLong lTalkHandle, Pointer pSendBuf, int dwBufSize);
+
+ // 解码音频数据扩展接口(只在Windows平台下有效) pAudioDataBuf是要求解码的音频数据内容
+ public void CLIENT_AudioDec(Pointer pAudioDataBuf, int dwBufSize);
+ public boolean CLIENT_AudioDecEx(LLong lTalkHandle, Pointer pAudioDataBuf, int dwBufSize);
+
+ // 音频格式信息
+ public class NET_AUDIO_FORMAT extends SdkStructure
+ {
+ public byte byFormatTag; // 编码类型,如0:PCM
+ public short nChannels; // 声道数
+ public short wBitsPerSample; // 采样深度
+ public int nSamplesPerSec; // 采样率
+ }
+ // 音频格式信息
+ public class LPDH_AUDIO_FORMAT extends SdkStructure
+ {
+ public byte byFormatTag; // 编码类型,如0:PCM
+ public short nChannels; // 声道数
+ public short wBitsPerSample; // 采样深度
+ public int nSamplesPerSec; // 采样率
+ }
+
+ // 音频编码--初始化(特定标准格式->私有格式) 初始化对讲中的音频编码接口,告诉SDK内部要编码的源音频数据的音频格式,对不支持的音频格式初始化会失败
+ public int CLIENT_InitAudioEncode(NET_AUDIO_FORMAT aft);
+
+ // 进行音频的数据二次编码,从标准音频格式转换成设备支持的格式
+ // 音频编码--数据编码(lpInBuf, lpOutBuf内存由用户申请释放)
+ public int CLIENT_AudioEncode(LLong lTalkHandle, Pointer lpInBuf, IntByReference lpInLen, Pointer lpOutBuf, IntByReference lpOutLen);
+
+ // 音频编码--完成退出 解码功能使用完毕后,告诉接口清理内部资源
+ public int CLIENT_ReleaseAudioEncode();
+
+ //----------------------语音对讲音频裸数据相关接口--------------------------
+
+ /**
+ * 打开语音对讲,这个接口可以从回调中得到音频裸数据,而CLIENT_StartTalkEx只能得到带音频头的数据
+ * @param lLoginID
+ * @param pInParam -> NET_IN_START_TALK_INFO
+ * @param pOutParam -> NET_OUT_START_TALK_INFO
+ * @param nWaittime
+ * @return LLong
+ */
+ public LLong CLIENT_StartTalkByDataType(LLong lLoginID, Pointer pInParam, Pointer pOutParam,int nWaittime);
+
+ /**
+ * 发送语音数据到设备 返回值为发送给设备的音频流长度,-1表示接口调用失败
+ * @param lTalkHandle
+ * @param pInParam -> NET_IN_TALK_SEND_DATA_STREAM
+ * @param pOutParam -> NET_OUT_TALK_SEND_DATA_STREAM
+ * @return LLong 返回值为发送给设备的音频流长度,-1表示接口调用失败
+ */
+ public LLong CLIENT_TalkSendDataByStream(LLong lTalkHandle, Pointer pInParam, Pointer pOutParam);
+
+ /**
+ * 发送语音文件中的音频数据到设备 成功返回 lTalkHandle, 失败返回 0
+ * @param lTalkHandle
+ * @param pInParam -> NET_IN_TALK_SEND_DATA_FILE
+ * @param pOutParam -> NET_OUT_TALK_SEND_DATA_FILE
+ * @return LLong 成功返回 lTalkHandle, 失败返回 0
+ */
+ public LLong CLIENT_TalkSendDataByFile(LLong lTalkHandle, Pointer pInParam, Pointer pOutParam);
+
+
+ /**
+ * 停止发送音频文件
+ */
+ public boolean CLIENT_StopTalkSendDataByFile(LLong lTalkHandle);
+
+ /**
+ * 用户自定义的数据回调 lTalkHandle是CLIENT_StartTalkByDataType的返回值
+ * @param stAudioInfo -> NET_AUDIO_DATA_CB_INFO
+ * @param byAudioFlag -> 音频数据来源,参考枚举 EM_AUDIO_SOURCE_FLAG
+ * @param dwUser -> 用户自定义数据
+ */
+ public interface fAudioDataCallBackEx extends StdCallCallback {
+ public void invoke(LLong lTalkHandle, NET_AUDIO_DATA_CB_INFO stAudioInfo, int emAudioFlag,Pointer dwUser);
+ }
+
+ /**
+ * 音频文件发送进度回调函数
+ * @param lTalkHandle
+ * @param dwTotalSize
+ * @param dwSendSize
+ */
+ public interface fTalkSendPosCallBack extends StdCallCallback {
+ public void invoke(LLong lTalkHandle, int dwTotalSize, int dwSendSize,Pointer dwUser);
+ }
+
+ //-------------------允许名单-------------------------
+ // 按查询条件查询记录 pInParam查询记录参数 pOutParam返回查询句柄
+ // 可以先调用本接口获得查询句柄,再调用 CLIENT_FindNextRecord函数获取记录列表,查询完毕可以调用CLIENT_FindRecordClose关闭查询句柄。
+ public boolean CLIENT_FindRecord(LLong lLoginID, NET_IN_FIND_RECORD_PARAM pInParam, NET_OUT_FIND_RECORD_PARAM pOutParam, int waittime);
+
+ // 查找记录:nFilecount:需要查询的条数, 返回值为媒体文件条数 返回值小于nFilecount则相应时间段内的文件查询完毕
+ public boolean CLIENT_FindNextRecord(NET_IN_FIND_NEXT_RECORD_PARAM pInParam, NET_OUT_FIND_NEXT_RECORD_PARAM pOutParam, int waittime);
+
+ // 结束记录查找,lFindHandle是CLIENT_FindRecord的返回值
+ public boolean CLIENT_FindRecordClose(LLong lFindHandle);
+
+ // 查找记录条数,pInParam与pOutParam内存由用户申请释放
+ public boolean CLIENT_QueryRecordCount(NET_IN_QUEYT_RECORD_COUNT_PARAM pInParam, NET_OUT_QUEYT_RECORD_COUNT_PARAM pOutParam, int waittime);
+
+ // 禁止/允许名单操作 ,pstOutParam = null;
+ public boolean CLIENT_OperateTrafficList(LLong lLoginID, NET_IN_OPERATE_TRAFFIC_LIST_RECORD pstInParam, NET_OUT_OPERATE_TRAFFIC_LIST_RECORD pstOutParam, int waittime);
+
+ // 文件上传控制接口,允许名单上传需要三个步骤配合使用,CLIENT_FileTransmit的 NET_DEV_BLACKWHITETRANS_START、 NET_DEV_BLACKWHITETRANS_SEND、 NET_DEV_BLACKWHITETRANS_STOP,如下所示
+ // fTransFileCallBack 回调
+ public LLong CLIENT_FileTransmit(LLong lLoginID, int nTransType, Pointer szInBuf, int nInBufLen, Callback cbTransFile, Pointer dwUserData, int waittime);
+
+ // 查询设备信息
+ public boolean CLIENT_QueryDevInfo(LLong lLoginID, int nQueryType, Pointer pInBuf, Pointer pOutBuf, Pointer pReservedL, int nWaitTime);
+
+ // ------------------车载GPS-------------------------
+ // 设置GPS订阅回调函数--扩展, fGPSRevEx 回调
+ public void CLIENT_SetSubcribeGPSCallBackEX(Callback OnGPSMessage, Pointer dwUser);
+
+ // 设置GPS订阅回调函数--扩展2, fGPSRevEx2 回调
+ public void CLIENT_SetSubcribeGPSCallBackEX2(Callback OnGPSMessage, Pointer dwUser);
+
+ // GPS信息订阅
+ // bStart:表明是订阅还是取消 InterTime:订阅时间内GPS发送频率(单位秒)
+ // KeepTime:订阅持续时间(单位秒) 值为-1时,订阅时间为极大值,可视为永久订阅
+ // 订阅时间内GPS发送频率(单位秒)
+ public boolean CLIENT_SubcribeGPS(LLong lLoginID, int bStart, int KeepTime, int InterTime);
+
+ // 设置文件长度, pInParam与pOutParam内存由用户申请释放
+ public boolean CLIENT_PreUploadRemoteFile(LLong lLoginID, NET_IN_PRE_UPLOAD_REMOTE_FILE pInParam, NET_OUT_PRE_UPLOAD_REMOTE_FILE pOutParam, int nWaitTime);
+
+ // 同步文件上传, 只适用于小文件
+ public boolean CLIENT_UploadRemoteFile(LLong lLoginID, NET_IN_UPLOAD_REMOTE_FILE pInParam, NET_OUT_UPLOAD_REMOTE_FILE pOutParam, int nWaitTime);
+
+ // 显示目录中文件和子目录,pInParam与pOutParam内存由用户申请释放
+ public boolean CLIENT_ListRemoteFile(LLong lLoginID, NET_IN_LIST_REMOTE_FILE pInParam, NET_OUT_LIST_REMOTE_FILE pOutParam, int nWaitTime);
+
+ // 删除文件或目录,pInParam与pOutParam内存由用户申请释放
+ public boolean CLIENT_RemoveRemoteFiles(LLong lLoginID, NET_IN_REMOVE_REMOTE_FILES pInParam, NET_OUT_REMOVE_REMOTE_FILES pOutParam, int nWaitTime);
+
+ // 过车记录订阅
+ public LLong CLIENT_ParkingControlAttachRecord(LLong lLoginID, NET_IN_PARKING_CONTROL_PARAM pInParam, NET_OUT_PARKING_CONTROL_PARAM pOutParam, int nWaitTime);
+
+ // 取消过车记录订阅
+ public boolean CLIENT_ParkingControlDetachRecord(LLong lAttachHandle);
+
+ // 开始过车记录查询
+ public LLong CLIENT_ParkingControlStartFind(LLong lLoginID, NET_IN_PARKING_CONTROL_START_FIND_PARAM pInParam, NET_OUT_PARKING_CONTROL_START_FIND_PARAM pOutParam, int waittime);
+
+ // 获取过车记录
+ public boolean CLIENT_ParkingControlDoFind(LLong lFindeHandle, NET_IN_PARKING_CONTROL_DO_FIND_PARAM pInParam, NET_OUT_PARKING_CONTROL_DO_FIND_PARAM pOutParam, int waittime);
+
+ // 结束过车记录查询
+ public boolean CLIENT_ParkingControlStopFind(LLong lFindHandle);
+
+ // 车位状态订阅,pInParam与pOutParam内存由用户申请释放
+ public LLong CLIENT_ParkingControlAttachParkInfo(LLong lLoginID, NET_IN_PARK_INFO_PARAM pInParam, NET_OUT_PARK_INFO_PARAM pOutParam, int nWaitTime);
+
+ // 取消车位状态订阅
+ public boolean CLIENT_ParkingControlDetachParkInfo(LLong lAttachHandle);
+
+ // 清除异常车位车辆信息 NET_IN_REMOVE_PARKING_CAR_INFO, NET_OUT_REMOVE_PARKING_CAR_INFO
+ public boolean CLIENT_RemoveParkingCarInfo(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ // 电源控制,pInParam与pOutParam内存由用户申请释放
+ public boolean CLIENT_PowerControl(LLong lLoginID, NET_IN_WM_POWER_CTRL pInParam, NET_OUT_WM_POWER_CTRL pOutParam, int nWaitTime);
+
+ // 载入/保存预案,pInParam与pOutParam内存由用户申请释放
+ public boolean CLIENT_LoadMonitorWallCollection(LLong lLoginID, NET_IN_WM_LOAD_COLLECTION pInParam, NET_OUT_WM_LOAD_COLLECTION pOutParam, int nWaitTime);
+ public boolean CLIENT_SaveMonitorWallCollection(LLong lLoginID, NET_IN_WM_SAVE_COLLECTION pInParam, NET_OUT_WM_SAVE_COLLECTION pOutParam, int nWaitTime);
+
+ // 获取电视墙预案,pInParam与pOutParam内存由用户申请释放
+ public boolean CLIENT_GetMonitorWallCollections(LLong lLoginID, NET_IN_WM_GET_COLLECTIONS pInParam, NET_OUT_WM_GET_COLLECTIONS pOutParam, int nWaitTime);
+
+ // 查询/设置显示源(pstuSplitSrc内存由用户申请释放), nWindow为-1表示所有窗口 ; pstuSplitSrc 对应 NET_SPLIT_SOURCE 指针
+ public boolean CLIENT_GetSplitSource(LLong lLoginID, int nChannel, int nWindow, NET_SPLIT_SOURCE[] pstuSplitSrc, int nMaxCount, IntByReference pnRetCount, int nWaitTime);
+ public boolean CLIENT_SetSplitSource(LLong lLoginID, int nChannel, int nWindow, NET_SPLIT_SOURCE pstuSplitSrc, int nSrcCount, int nWaitTime);
+
+ // 设置显示源, 支持同时设置多个窗口(pInparam, pOutParam内存由用户申请释放)
+ public boolean CLIENT_SplitSetMultiSource(LLong lLoginID, NET_IN_SPLIT_SET_MULTI_SOURCE pInParam, NET_OUT_SPLIT_SET_MULTI_SOURCE pOutParam, int nWaitTime);
+
+ // 查询矩阵子卡信息(pstuCardList内存由用户申请释放)
+ public boolean CLIENT_QueryMatrixCardInfo(LLong lLoginID, NET_MATRIX_CARD_LIST pstuCardList, int nWaitTime);
+
+ // 开始查找录像文件帧信息(pInParam, pOutParam内存由用户申请释放)
+ public boolean CLIENT_FindFrameInfo(LLong lLoginID, NET_IN_FIND_FRAMEINFO_PRAM pInParam, NET_OUT_FIND_FRAMEINFO_PRAM pOutParam, int nWaitTime);
+
+ // 获取标签信息
+ public boolean CLIENT_FileStreamGetTags(LLong lFindHandle, NET_IN_FILE_STREAM_GET_TAGS_INFO pInParam, NET_OUT_FILE_STREAM_GET_TAGS_INFO pOutParam, int nWaitTime);
+
+ // 设置标签信息
+ public boolean CLIENT_FileStreamSetTags(LLong lFindHandle, NET_IN_FILE_STREAM_TAGS_INFO pInParam, NET_OUT_FILE_STREAM_TAGS_INFO pOutParam, int nWaitTime);
+
+ // 查询/设置分割模式(pstuSplitInfo内存由用户申请释放)
+ public boolean CLIENT_GetSplitMode(LLong lLoginID, int nChannel, NET_SPLIT_MODE_INFO pstuSplitInfo, int nWaitTime);
+ public boolean CLIENT_SetSplitMode(LLong lLoginID, int nChannel, NET_SPLIT_MODE_INFO pstuSplitInfo, int nWaitTime);
+
+ // 开窗/关窗(pInparam, pOutParam内存由用户申请释放)
+ public boolean CLIENT_OpenSplitWindow(LLong lLoginID, NET_IN_SPLIT_OPEN_WINDOW pInParam, NET_OUT_SPLIT_OPEN_WINDOW pOutParam, int nWaitTime);
+ public boolean CLIENT_CloseSplitWindow(LLong lLoginID, NET_IN_SPLIT_CLOSE_WINDOW pInParam, NET_OUT_SPLIT_CLOSE_WINDOW pOutParam, int nWaitTime);
+
+ // 获取当前显示的窗口信息(pInparam, pOutParam内存由用户申请释放)
+ public boolean CLIENT_GetSplitWindowsInfo(LLong lLoginID, NET_IN_SPLIT_GET_WINDOWS pInParam, NET_OUT_SPLIT_GET_WINDOWS pOutParam, int nWaitTime);
+
+ // 查询分割能力(pstuCaps内存由用户申请释放)
+ public boolean CLIENT_GetSplitCaps(LLong lLoginID, int nChannel, NET_SPLIT_CAPS pstuCaps, int nWaitTime);
+
+ // 下位矩阵切换(pInparam, pOutParam内存由用户申请释放)
+ public boolean CLIENT_MatrixSwitch(LLong lLoginID, NET_IN_MATRIX_SWITCH pInParam, NET_OUT_MATRIX_SWITCH pOutParam, int nWaitTime);
+
+ // 打开刻录会话, 返回刻录会话句柄,pstInParam与pstOutParam内存由用户申请释放
+ public LLong CLIENT_StartBurnSession(LLong lLoginID, NET_IN_START_BURN_SESSION pstInParam, NET_OUT_START_BURN_SESSION pstOutParam, int nWaitTime);
+
+ // 关闭刻录会话
+ public boolean CLIENT_StopBurnSession(LLong lBurnSession);
+
+ //------------有盘/无盘刻录----lBurnSession 是 CLIENT_StartBurnSession返回的句柄//
+ // 开始刻录,pstInParam与pstOutParam内存由用户申请释放
+ public boolean CLIENT_StartBurn(LLong lBurnSession, NET_IN_START_BURN pstInParam, NET_OUT_START_BURN pstOutParam, int nWaitTime);
+ // 停止刻录
+ public boolean CLIENT_StopBurn(LLong lBurnSession);
+ // 暂停/恢复刻录
+ public boolean CLIENT_PauseBurn(LLong lBurnSession, int bPause);
+
+ // 获取刻录状态
+ public boolean CLIENT_BurnGetState(LLong lBurnSession, NET_IN_BURN_GET_STATE pstInParam, NET_OUT_BURN_GET_STATE pstOutParam, int nWaitTime);
+
+ // 监听刻录状态,pstInParam与pstOutParam内存由用户申请释放
+ public LLong CLIENT_AttachBurnState(LLong lLoginID, NET_IN_ATTACH_STATE pstInParam, NET_OUT_ATTACH_STATE pstOutParam, int nWaitTime);
+
+ // 取消监听刻录状态,lAttachHandle是CLIENT_AttachBurnState返回值
+ public boolean CLIENT_DetachBurnState(LLong lAttachHandle);
+
+ // 开始刻录附件上传
+ // 刻录上传开始 返回此次上传操作句柄, 注意以下接口不能在fAttachBurnStateCB回调函数里面调用,pstInParam与pstOutParam内存由用户申请释放
+ public LLong CLIENT_StartUploadFileBurned(LLong lLoginID, NET_IN_FILEBURNED_START pstInParam, NET_OUT_FILEBURNED_START pstOutParam, int nWaitTime);
+
+ //上传刻录附件,lUploadHandle是CLIENT_StartUploadFileBurned返回值
+ public boolean CLIENT_SendFileBurned(LLong lUploadHandle);
+
+ //停止刻录附件上传
+ // 刻录上传停止,lUploadHandle是CLIENT_StartUploadFileBurned返回值,此接口不能在fBurnFileCallBack回调函数中调用
+ public boolean CLIENT_StopUploadFileBurned(LLong lUploadHandle);
+
+
+ // 下载指定的智能分析数据 - 图片, fDownLoadPosCallBack 回调
+ // emType 参考 EM_FILE_QUERY_TYPE
+ public LLong CLIENT_DownloadMediaFile(LLong lLoginID, int emType, Pointer lpMediaFileInfo, String sSavedFileName, Callback cbDownLoadPos, Pointer dwUserData, Pointer reserved);
+
+ // 停止下载数据
+ public boolean CLIENT_StopDownloadMediaFile(LLong lFileHandle);
+
+ // 下发通知到设备 接口, 以emNotifyType来区分下发的通知类型, pInParam 和 pOutParam 都由用户来分配和释放, emNotifyType对应结构体 NET_EM_NOTIFY_TYPE
+ public boolean CLIENT_SendNotifyToDev(LLong lLoginID, int emNotifyType, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ // 查询IO状态(pState内存由用户申请释放,根据emType对应的类型找到相应的结构体,进而确定申请内存大小), emType 参考 NET_IOTYPE
+ public boolean CLIENT_QueryIOControlState(LLong lLoginID, int emType,
+ Pointer pState, int maxlen, IntByReference nIOCount, int waittime);
+
+ // IO控制(pState内存由用户申请释放,根据emType对应的类型找到相应的结构体,进而确定申请内存大小),emType 参考 NET_IOTYPE
+ public boolean CLIENT_IOControl(LLong lLoginID, int emType, Pointer pState, int maxlen);
+
+ // 订阅监测点位信息,pInParam与pOutParam内存由用户申请释放
+ public LLong CLIENT_SCADAAttachInfo(LLong lLoginID, NET_IN_SCADA_ATTACH_INFO pInParam, NET_OUT_SCADA_ATTACH_INFO pOutParam, int nWaitTime);
+
+ // 取消监测点位信息订阅
+ public boolean CLIENT_SCADADetachInfo(LLong lAttachHandle);
+
+ // 创建透明串口通道,TransComType高2个字节表示串口序号,低2个字节表示串口类型,目前类型支持 0:串口(232), 1:485
+ // baudrate 串口的波特率,1~8分别表示1200,2400,4800,9600,19200,38400,57600,115200
+ // databits 串口的数据位 4~8表示4位~8位
+ // stopbits 串口的停止位 232串口 : 数值0 代表停止位1; 数值1 代表停止位1.5; 数值2 代表停止位2. 485串口 : 数值1 代表停止位1; 数值2 代表停止位2.
+ // parity 串口的检验位,0:无校验,1:奇校验;2:偶校验;
+ // cbTransCom 串口数据回调,回调出前端设备发过来的信息
+ // fTransComCallBack 回调
+ public LLong CLIENT_CreateTransComChannel(LLong lLoginID, int TransComType, int baudrate, int databits, int stopbits, int parity, Callback cbTransCom, Pointer dwUser);
+
+ // 透明串口发送数据(pBuffer内存由用户申请释放)
+ public boolean CLIENT_SendTransComData(LLong lTransComChannel, byte[] pBuffer, int dwBufSize);
+
+ // 释放通明串口通道
+ public boolean CLIENT_DestroyTransComChannel(LLong lTransComChannel);
+
+ // 查询透明串口状态(pCommState内存由用户申请释放), TransComType 低2个字节表示串口类型, 0:串口(232), 1:485口;高2个字节表示串口通道号,从0开始
+ public boolean CLIENT_QueryTransComParams(LLong lLoginID, int TransComType, NET_COMM_STATE pCommState, int nWaitTime);
+
+ // 订阅智能分析进度(适用于视频分析源为录像文件时),pstInParam与pstOutParam内存由用户申请释放
+ public boolean CLIENT_AttachVideoAnalyseState(LLong lLoginID, NET_IN_ATTACH_VIDEOANALYSE_STATE pstInParam, NET_OUT_ATTACH_VIDEOANALYSE_STATE pstOutParam, int nWaittime);
+
+ // 停止订阅
+ public boolean CLIENT_DetachVideoAnalyseState(LLong lAttachHandle);
+
+ // 抓图, hPlayHandle为预览或回放句柄
+ public boolean CLIENT_CapturePicture(LLong hPlayHandle, String pchPicFileName);
+
+ // 抓图, hPlayHandle为预览或回放句柄
+ public boolean CLIENT_CapturePictureEx(LLong hPlayHandle, String pchPicFileName, int eFormat);
+
+ // 获取设备自检信息,pInParam与pOutParam内存由用户申请释放
+ public boolean CLIENT_GetSelfCheckInfo(LLong lLoginID, NET_IN_GET_SELTCHECK_INFO pInParam, NET_SELFCHECK_INFO pOutParam, int nWaitTime);
+
+ // 主动注册功能,启动服务;nTimeout参数已无效 .
+ // cbListen对象为 fServiceCallBack 子类
+ public LLong CLIENT_ListenServer(String ip, int port, int nTimeout, Callback cbListen, Pointer dwUserData);
+
+ // 停止服务
+ public boolean CLIENT_StopListenServer(LLong lServerHandle);
+
+ // 指定回调数据类型 实施预览(预览), 数据回调函数 cbRealData 中得到的码流类型为 emDataType 所指定的类型
+ public LLong CLIENT_RealPlayByDataType(LLong lLoginID, NET_IN_REALPLAY_BY_DATA_TYPE pstInParam, NET_OUT_REALPLAY_BY_DATA_TYPE pstOutParam, int dwWaitTime);
+
+ // 指定回调数据格式 开始回放, 数据回调函数 fDownLoadDataCallBack 中得到的码流类型为 emDataType 所指定的类型
+ public LLong CLIENT_PlayBackByDataType(LLong lLoginID, NET_IN_PLAYBACK_BY_DATA_TYPE pstInParam, NET_OUT_PLAYBACK_BY_DATA_TYPE pstOutParam, int dwWaitTime);
+
+ // 指定码流类型 开始下载, 下载得到的文件和数据回调函数 fDownLoadDataCallBack 中得到的码流类型均为 emDataType 所指定的类型
+ // NET_IN_DOWNLOAD_BY_DATA_TYPE pstInParam, NET_OUT_DOWNLOAD_BY_DATA_TYPE pstOutParam
+ public LLong CLIENT_DownloadByDataType(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int dwWaitTime);
+
+ /************************************************************************/
+ /* BUS订阅 */
+ /************************************************************************/
+ // 订阅Bus状态,pstuInBus与pstuOutBus内存由用户申请释放
+ public LLong CLIENT_AttachBusState(LLong lLoginID, NET_IN_BUS_ATTACH pstuInBus, NET_OUT_BUS_ATTACH pstuOutBus, int nWaitTime);
+
+ // 停止订阅Bus状态,lAttachHandle是CLIENT_AttachBusState返回值
+ public boolean CLIENT_DetachBusState(LLong lAttachHandle);
+
+ //订阅事件重传,pInParam内存由用户申请释放
+ public LLong CLIENT_AttachEventRestore(LLong lLoginID, NET_IN_ATTACH_EVENT_RESTORE pInParam, int nWaitTime);
+
+ // 停止订阅事件重传,pInParam内存由用户申请释放
+ public boolean CLIENT_DetachEventRestore(LLong lAttachHandle);
+
+ // 设置GPS温湿度订阅回调函数, fGPSTempHumidityRev
+ public void CLIENT_SetSubcribeGPSTHCallBack(Callback OnGPSMessage, Pointer dwUser);
+
+ // GPS温湿度信息订阅, bStart为BOOL类型
+ public boolean CLIENT_SubcribeGPSTempHumidity(LLong lLoginID, int bStart, int InterTime, Pointer Reserved);
+
+ // 人脸信息记录操作函数
+ public boolean CLIENT_FaceInfoOpreate(LLong lLoginID, int emType, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ // 下发人脸图片信息
+ public boolean CLIENT_DeliverUserFacePicture(LLong lLoginID, NET_IN_DELIVER_USER_PICTURE pInParam, NET_OUT_DELIVER_USER_PICTURE pOutParam, int nWaitTime);
+
+ //开始查询人脸信息
+ public LLong CLIENT_StartFindFaceInfo(LLong lLoginID, NET_IN_FACEINFO_START_FIND pstIn, NET_OUT_FACEINFO_START_FIND pstOut, int nWaitTime);
+
+ //获取人脸信息
+ public boolean CLIENT_DoFindFaceInfo(LLong lFindHandle, NET_IN_FACEINFO_DO_FIND pstIn, NET_OUT_FACEINFO_DO_FIND pstOut, int nWaitTime);
+
+ //停止查询人脸信息
+ public boolean CLIENT_StopFindFaceInfo(LLong lFindHandle);
+
+ /***********************************************************************************
+ * 诱导屏相关接口 *
+ **********************************************************************************/
+ // 设置诱导屏配置信息接口
+ public boolean CLIENT_SetGuideScreenCfg(LLong lLoginID, NET_IN_SET_GUIDESCREEN_CFG pInParam, NET_OUT_SET_GUIDESCREEN_CFG pstOutPqram, int nWaitTime);
+
+ // 添加一个节目信息到诱导屏
+ public boolean CLIENT_AddOneProgramme(LLong lLoginID, NET_IN_ADD_ONE_PROGRAMME pInParam, NET_OUT_ADD_ONE_PROGRAMME pOutParam, int nWaitTime);
+
+ // 通过节目ID 修改节目
+ public boolean CLIENT_ModifyOneProgrammeByID(LLong lLoginID, NET_IN_MODIFY_ONE_PROGRAMME pInParam, NET_OUT_MODIFY_ONE_PROGRAMME pOutParam, int nWaitTime);
+
+ // 批量删除节目信息
+ public boolean CLIENT_DelMultiProgrammesById(LLong lLoginID, NET_IN_DEL_PROGRAMMES pInParam, NET_OUT_DEL_PROGRAMMES pOutParam, int nWaitTime);
+
+ // 增加一个即时节目计划
+ public boolean CLIENT_AddOneImmediProgrammePlan(LLong lLoginID, NET_IN_ADD_IMME_PROGRAMMEPLAN pInParam, NET_OUT_ADD_PROGRAMMEPLAN pOutParam, int nWaitTime);
+
+ // 修改一个即时节目计划
+ public boolean CLIENT_ModifyOneImmediProgrammePlan(LLong lLoginID, NET_IN_MODIFY_IMME_PROGRAMMEPLAN pInParam, NET_OUT_MODIFY_IMME_PROGRAMMEPLAN pOutParam, int nWaitTime);
+
+ // 增加一个定时节目计划
+ public boolean CLIENT_AddOneTimerProgrammePlan(LLong lLoginID, NET_IN_ADD_TIMER_PROGRAMMEPLAN pInParam, NET_OUT_ADD_PROGRAMMEPLAN pOutParam, int nWaitTime);
+
+ // 修改一个定时节目计划
+ public boolean CLIENT_ModifyOneTimerProgrammePlan(LLong lLoginID, NET_IN_MODIFY_TIMER_PROGRAMMEPLAN pInParam, NET_OUT_MODIFY_TIMER_PROGRAMMEPLAN pOutParam, int nWaitTime);
+
+ // 删除多个节目计划
+ public boolean CLIENT_DelMultiProgrammePlans(LLong lLoginID, NET_IN_DEL_PROGRAMMEPLANS pInParam, NET_OUT_DEL_PROGRAMMEPLANS pOutParam, int nWaitTime);
+
+ // 通过诱导屏ID 获取诱导屏配置信息
+ public boolean CLIENT_GetOneGuideScreenCfgById(LLong lLoginID, NET_IN_GET_GUIDESCREEN_CFG_BYID pInParam, NET_OUT_GET_GUIDESCREEN_CFG_BYID pOutParam, int nWaitTime);
+
+ // 获取所有诱导屏配置信息
+ public boolean CLIENT_GetAllGuideScreenCfg(LLong lLoginID, NET_IN_GET_ALL_GUIDESCREEN_CFG pInParam, NET_OUT_GET_ALL_GUIDESCREEN_CFG pOutParam, int nWaitTime);
+
+ // 通过节目ID 获取节目信息
+ public boolean CLIENT_GetOneProgrammeById(LLong lLoginID, NET_IN_GET_PROGRAMME_BYID pInParam, NET_OUT_GET_PROGRAMME_BYID pOutParam, int nWaitTime);
+
+ // 获取所有节目信息
+ public boolean CLIENT_GetAllProgrammes(LLong lLoginID, NET_IN_GET_ALL_PROGRAMMES pInParam, NET_OUT_GET_ALL_PROGRAMMES pOutParam, int nWaitTime);
+
+ // 获取所有节目的简要信息
+ public boolean CLIENT_GetAllBrieflyProgrammes(LLong lLoginID, NET_IN_GET_ALL_BRIEFLYPROGRAMMES pInParam, NET_OUT_GET_ALL_BRIEFLYPROGRAMMES pOutParam, int nWaitTime);
+
+ // 获取所有节目计划信息
+ public boolean CLIENT_GetAllProgrammePlans(LLong lLoginID, NET_IN_GET_ALL_PROGRAMMEPLANS pInParam, NET_OUT_GET_ALL_PROGRAMMEPLANS pOutParam, int nWaitTime);
+
+ // 通过节目计划ID 获取节目计划
+ public boolean CLIENT_GetOneProgrammePlanByID(LLong lLoginID, NET_IN_GET_PROGRAMMEPLAN_BYID pInParam, NET_OUT_GET_PROGRAMMEPLAN_BYID pOutParam, int nWaitTime);
+
+ // 设置光带状态信息
+ public boolean CLIENT_SetGuideScreenGDStatus(LLong lLoginID, NET_IN_SET_GD_STATUS pInParam, NET_OUT_SET_GD_STATUS pOutParam, int nWaitTime);
+
+ /***********************************************************************************
+ * 播放盒与广告机的节目操作接口 *
+ **********************************************************************************/
+ // 获取播放盒上全部节目信息
+ public boolean CLIENT_GetAllProgramOnPlayBox(LLong lLoginID, NET_IN_GET_ALL_PLAYBOX_PROGRAM pInParam, NET_OUT_GET_ALL_PLAYBOX_PROGRAM pOutParam, int nWaitTime);
+
+ // 通过programme ID 获取播放盒上对应的节目信息
+ public boolean CLIENT_GetOneProgramByIdOnPlayBox(LLong lLoginID, NET_IN_GET_PLAYBOX_PROGRAM_BYID pInParam, NET_OUT_GET_PLAYBOX_PROGRAM_BYID pOutParam, int nWaitTime);
+
+ // 在播放盒上添加一个节目
+ public boolean CLIENT_AddOneProgramToPlayBox(LLong lLoginID, NET_IN_ADD_ONE_PLAYBOX_PRAGROM pInParam, NET_OUT_ADD_ONE_PLAYBOX_PRAGROM pOutParam, int nWaitTime);
+
+ // 在播放盒上修改指定ID的节目信息
+ public boolean CLIENT_ModifyProgramOnPlayBoxById(LLong lLoginID, NET_IN_MODIFY_PLAYBOX_PROGRAM_BYID pInParam, NET_OUT_MODIFY_PLAYBOX_PROGRAM_BYID pOutParam, int nWaitTime);
+
+
+ // 获取配置信息(szOutBuffer内存由用户申请释放, 具体见枚举类型 NET_EM_CFG_OPERATE_TYPE 说明)
+ public boolean CLIENT_GetConfig(LLong lLoginID, int emCfgOpType, int nChannelID, Pointer szOutBuffer, int dwOutBufferSize, int waittime, Pointer reserve);
+
+ // 设置配置信息(szInBuffer内存由用户申请释放, 具体见枚举类型 NET_EM_CFG_OPERATE_TYPE 说明)
+ public boolean CLIENT_SetConfig(LLong lLoginID, int emCfgOpType, int nChannelID, Pointer szInBuffer, int dwInBufferSize, int waittime, IntByReference restart, Pointer reserve);
+
+ // 显示私有数据,例如规则框,规则框报警,移动侦测等 lPlayHandle:播放句柄 bTrue=1 打开, bTrue= 0 关闭
+ public boolean CLIENT_RenderPrivateData(LLong lPlayHandle, int bTrue);
+
+ // 按设备信息添加显示源,pInParam与pOutParam内存由用户申请释放
+ public boolean CLIENT_MatrixAddCamerasByDevice(LLong lLoginID, NET_IN_ADD_LOGIC_BYDEVICE_CAMERA pInParam, NET_OUT_ADD_LOGIC_BYDEVICE_CAMERA pOutParam, int nWaitTime);
+
+ // 订阅监测点位报警信息,pInParam与pOutParam内存由用户申请释放
+ public LLong CLIENT_SCADAAlarmAttachInfo(LLong lLoginID, NET_IN_SCADA_ALARM_ATTACH_INFO pInParam, NET_OUT_SCADA_ALARM_ATTACH_INFO pOutParam, int nWaitTime);
+
+ // 取消订阅监测点位报警信息
+ public boolean CLIENT_SCADAAlarmDetachInfo(LLong lAttachHandle);
+
+ /***********************************************************************************
+ * IVSS设备添加相关接口 *
+ **********************************************************************************/
+ // 注册设备状态回调
+ public LLong CLIENT_AttachDeviceState(LLong lLoginID, NET_IN_ATTACH_DEVICE_STATE pInParam, NET_OUT_ATTACH_DEVICE_STATE pOutParam, int nWaitTime);
+
+ // 注销设备状态回调
+ public boolean CLIENT_DetachDeviceState(LLong lAttachHandle);
+
+ // 添加设备
+ public boolean CLIENT_AsyncAddDevice(LLong lLoginID, NET_IN_ASYNC_ADD_DEVICE pInParam, NET_OUT_ASYNC_ADD_DEVICE pOutParam, int nWaitTime);
+
+ // 注册添加设备回调
+ public LLong CLIENT_AttachAddDevice(LLong lLoginID, NET_IN_ATTACH_ADD_DEVICE pInParam, NET_OUT_ATTACH_ADD_DEVICE pOutParam, int nWaitTime);
+
+ // 注销添加设备回调
+ public boolean CLIENT_DetachAddDevice(LLong lAttachHandle);
+
+ // 获取添加中的设备状态
+ public boolean CLIENT_GetAddDeviceInfo(LLong lLoginID, NET_IN_GET_ADD_DEVICE_LIST_INFO pInParam, NET_OUT_GET_ADD_DEVICE_LIST_INFO pOutParam, int nWaitTime);
+
+ // 获取已添加的设备状态
+ public boolean CLIENT_GetDeviceInfo(LLong lLoginID, NET_IN_GET_DEVICE_LIST_INFO pInParam, NET_OUT_GET_DEVICE_LIST_INFO pOutParam, int nWaitTime);
+
+ // 设置连接通道
+ public boolean CLIENT_SetConnectChannel(LLong lLoginID, NET_IN_SET_CONNECT_CHANNEL pInParam, NET_OUT_SET_CONNECT_CHANNEL pOutParam, int nWaitTime);
+
+ // 获取设备通道信息
+ public boolean CLIENT_GetChannelInfo(LLong lLoginID, NET_IN_GET_CHANNEL_INFO pInParam, NET_OUT_GET_CHANNEL_INFO pOutParam, int nWaitTime);
+
+ // 删除设备
+ public boolean CLIENT_RemoveDevice(LLong lLoginID, NET_IN_REMOVE_DEVICE pInParam, NET_OUT_REMOVE_DEVICE pOutParam, int nWaitTime);
+
+ // 中止添加设备任务
+ public boolean CLIENT_CancelAddDeviceTask(LLong lLoginID, NET_IN_CANCEL_ADD_TASK pInParam, NET_OUT_CANCEL_ADD_TASK pOutParam, int nWaitTime);
+
+ // 确认添加设备任务
+ public boolean CLIENT_ConfirmAddDeviceTask(LLong lLoginID, NET_IN_CONFIRM_ADD_TASK pInParam, NET_OUT_CONFIRM_ADD_TASK pOutParam, int nWaitTime);
+
+ // 球机,地磁车位同步上报车位信息,如有车停入、或车从车位开出
+ public boolean CLIENT_SyncParkingInfo(LLong lLoginID, NET_IN_SYNC_PARKING_INFO pInParam, NET_OUT_SYNC_PARKING_INFO pOutParam, int nWaitTime);
+
+ // 初始化账户
+ public boolean CLIENT_InitDevAccount(NET_IN_INIT_DEVICE_ACCOUNT pInitAccountIn, NET_OUT_INIT_DEVICE_ACCOUNT pInitAccountOut, int dwWaitTime, String szLocalIp);
+
+ // 根据设备IP初始化账户
+ public boolean CLIENT_InitDevAccountByIP(NET_IN_INIT_DEVICE_ACCOUNT pInitAccountIn, NET_OUT_INIT_DEVICE_ACCOUNT pInitAccountOut, int dwWaitTime, String szLocalIp, String szDeviceIP);
+
+ public boolean CLIENT_ModifyDevice(DEVICE_NET_INFO_EX pDevNetInfo, int nWaitTime, IntByReference iError, String szLocalIp);
+
+ /**
+ * 门禁控制器操作接口
+ * @param lLoginID 登录句柄
+ * @param emtype 门禁控制器操作类型, 对应 枚举{@link NET_EM_ACCESS_CTL_MANAGER}
+ * @param pstInParam 入参, 根据 emtype 来填
+ * @param pstOutParam 出参, 根据 emtype 来填
+ * @param nWaitTime 超时等待时间
+ * @return true:成功 false:失败
+ */
+ public boolean CLIENT_OperateAccessControlManager(LLong lLoginID, int emtype, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 设置安全密钥(播放加密码流使用)
+ * @param lPlayHandle 拉流句柄
+ * @param szKey 密钥
+ * @param nKeyLen 密钥的长度
+ * @return true:成功 false:失败
+ */
+ public boolean CLIENT_SetSecurityKey(LLong lPlayHandle, String szKey, int nKeyLen);
+
+ /***********************************************************************************
+ * 考勤机相关接口 *
+ **********************************************************************************/
+ //考勤新增加用户
+ public boolean CLIENT_Attendance_AddUser(LLong lLoginID, NET_IN_ATTENDANCE_ADDUSER pstuInAddUser, NET_OUT_ATTENDANCE_ADDUSER pstuOutAddUser, int nWaitTime);
+
+ //考勤删除用户
+ public boolean CLIENT_Attendance_DelUser(LLong lLoginID, NET_IN_ATTENDANCE_DELUSER pstuInDelUser, NET_OUT_ATTENDANCE_DELUSER pstuOutDelUser, int nWaitTime);
+
+ //考勤修改用户信息
+ public boolean CLIENT_Attendance_ModifyUser(LLong lLoginID, NET_IN_ATTENDANCE_ModifyUSER pstuInModifyUser, NET_OUT_ATTENDANCE_ModifyUSER pstuOutModifyUser, int nWaitTime);
+
+ //考勤获取用户信息
+ public boolean CLIENT_Attendance_GetUser(LLong lLoginID, NET_IN_ATTENDANCE_GetUSER pstuInGetUser, NET_OUT_ATTENDANCE_GetUSER pstuOutGetUser, int nWaitTime);
+
+ //考勤机 通过用户ID插入信息数据
+ public boolean CLIENT_Attendance_InsertFingerByUserID(LLong lLoginID, NET_IN_FINGERPRINT_INSERT_BY_USERID pstuInInsert, NET_OUT_FINGERPRINT_INSERT_BY_USERID pstuOutInsert, int nWaitTime);
+
+ //考勤机 删除单个用户下所有信息数据
+ public boolean CLIENT_Attendance_RemoveFingerByUserID(LLong lLoginID, NET_CTRL_IN_FINGERPRINT_REMOVE_BY_USERID pstuInRemove, NET_CTRL_OUT_FINGERPRINT_REMOVE_BY_USERID pstuOutRemove, int nWaitTime);
+
+ //考勤机 通过信息ID获取信息数据
+ public boolean CLIENT_Attendance_GetFingerRecord(LLong lLoginID, NET_CTRL_IN_FINGERPRINT_GET pstuInGet, NET_CTRL_OUT_FINGERPRINT_GET pstuOutGet, int nWaitTime);
+
+ //考勤机 通过信息ID删除信息数据
+ public boolean CLIENT_Attendance_RemoveFingerRecord(LLong lLoginID, NET_CTRL_IN_FINGERPRINT_REMOVE pstuInRemove, NET_CTRL_OUT_FINGERPRINT_REMOVE pstuOutRemove, int nWaitTime);
+
+ //考勤机 查找用户
+ public boolean CLIENT_Attendance_FindUser(LLong lLoginID, NET_IN_ATTENDANCE_FINDUSER pstuInFindUser, NET_OUT_ATTENDANCE_FINDUSER pstuOutFindUser, int nWaitTime);
+
+ //考勤机 通过用户ID查找该用户下的所有信息数据
+ public boolean CLIENT_Attendance_GetFingerByUserID(LLong lLoginID, NET_IN_FINGERPRINT_GETBYUSER pstuIn, NET_OUT_FINGERPRINT_GETBYUSER pstuOut, int nWaitTime);
+
+ //获取考勤机在线状态
+ public boolean CLIENT_Attendance_GetDevState(LLong lLoginID, NET_IN_ATTENDANCE_GETDEVSTATE pstuInParam, NET_OUT_ATTENDANCE_GETDEVSTATE pstuOutParam, int nWaitTime);
+
+ /*********************************************************************************************************
+ * 视频诊断功能接口 * *
+ * 视频诊断参数表配置 CFG_CMD_VIDEODIAGNOSIS_PROFILE *
+ * 视频诊断任务表配置 CFG_CMD_VIDEODIAGNOSIS_TASK_ONE *
+ * 视频诊断计划表配置 CFG_CMD_VIDEODIAGNOSIS_PROJECT *
+ * 删除任务接口 CLIENT_DeleteDevConfig *
+ * 获取成员配置接口 CLIENT_GetMemberNames 对应命令 CFG_CMD_VIDEODIAGNOSIS_TASK *
+ * 获取诊断状态 CLIENT_QueryNewSystemInfo CFG_CMD_VIDEODIAGNOSIS_GETSTATE *
+ *********************************************************************************************************/
+
+ // 实时获取视频诊断结果,pstInParam与pstOutParam内存由用户申请释放
+ public boolean CLIENT_StartVideoDiagnosis(LLong lLoginID, NET_IN_VIDEODIAGNOSIS pstInParam, NET_OUT_VIDEODIAGNOSIS pstOutParam);
+
+ // 停止视频诊断结果上报
+ public boolean CLIENT_StopVideoDiagnosis(LLong hDiagnosisHandle);
+
+ // 开始视频诊断结果查询,pstInParam与pstOutParam内存由用户申请释放
+ public boolean CLIENT_StartFindDiagnosisResult(LLong lLoginID, NET_IN_FIND_DIAGNOSIS pstInParam, NET_OUT_FIND_DIAGNOSIS pstOutParam);
+
+ // 获取视频诊断结果信息,pstInParam与pstOutParam内存由用户申请释放
+ public boolean CLIENT_DoFindDiagnosisResult(LLong hFindHandle, NET_IN_DIAGNOSIS_INFO pstInParam, NET_OUT_DIAGNOSIS_INFO pstOutParam);
+
+ // 结束视频诊断结果查询
+ public boolean CLIENT_StopFindDiagnosis(LLong hFindHandle);
+
+ // 获取视频诊断进行状态
+ public boolean CLIENT_GetVideoDiagnosisState(LLong lLoginID, NET_IN_GET_VIDEODIAGNOSIS_STATE pstInParam, NET_OUT_GET_VIDEODIAGNOSIS_STATE pstOutParam, int nWaitTime);
+
+ /********************************************************************************************
+ * 热成像 *
+ ********************************************************************************************/
+
+ // 订阅温度分布数据(热图),pInParam与pOutParam内存由用户申请释放
+ public LLong CLIENT_RadiometryAttach(LLong lLoginID, NET_IN_RADIOMETRY_ATTACH pInParam, NET_OUT_RADIOMETRY_ATTACH pOutParam, int nWaitTime);
+
+ // 取消订阅温度分布数据,lAttachHandle是 CLIENT_RadiometryAttach 的返回值
+ public boolean CLIENT_RadiometryDetach(LLong lAttachHandle);
+
+ // 通知开始获取热图数据,pInParam与pOutParam内存由用户申请释放
+ public boolean CLIENT_RadiometryFetch(LLong lLoginID, NET_IN_RADIOMETRY_FETCH pInParam, NET_OUT_RADIOMETRY_FETCH pOutParam, int nWaitTime);
+
+ // 热图数据解压与转换接口
+ /// \brief
+ /// \param pRadiometryData [IN] 热图数据, 由 fRadiometryAttachCB 获得
+ /// \param pGrayImg [IN, OUT] 解压后的数据,是一张灰度图,
+ /// 传空指针表示不需要此数据
+ /// 用户需保证传入的缓冲区足够大(不小于 图像像素数*sizeof(unsigned short))
+ /// 每个像素对应一个 unsigned short 型数据,表示图像某个像素的热成像灰度(范围 0 ~ 16383),
+ /// 低地址对应画面左上角,高地址对应画面右下角
+ /// \param pTempForPixels [IN, OUT] 每个像素的温度数据
+ /// 传空指针表示不需要此数据
+ /// 用户需保证传入的缓冲区足够大(不小于 图像像素数*sizeof(float))
+ /// 每个像素对应一个 float 型数据,表示该像素位置的摄氏温度
+ /// 低地址对应画面左上角,高地址对应画面右下角
+ /// \return TRUE 成功,FALSE 失败
+ public boolean CLIENT_RadiometryDataParse(NET_RADIOMETRY_DATA pRadiometryData, short[] pGrayImg, float[] pTempForPixels);
+
+ // 开始查询信息(获取查询句柄)(pInBuf, pOutBuf内存由用户申请释放,根据emType对应的类型找到相应的结构体,进而确定申请内存大小)
+ public boolean CLIENT_StartFind(LLong lLoginID, int emType, Pointer pInBuf, Pointer pOutBuf, int nWaitTime);
+ // 查询信息(pInBuf, pOutBuf内存由用户申请释放,根据emType对应的类型找到相应的结构体,进而确定申请内存大小
+ public boolean CLIENT_DoFind(LLong lLoginID, int emType, Pointer pInBuf, Pointer pOutBuf, int nWaitTime);
+ // 停止查询信息(销毁查询句柄)(pInBuf, pOutBuf内存由用户申请释放,根据emType对应的类型找到相应的结构体,进而确定申请内存大小)
+ public boolean CLIENT_StopFind(LLong lLoginID, int emType, Pointer pInBuf, Pointer pOutBuf, int nWaitTime);
+
+
+ // 智能锁添加更新用户信息接口
+ public boolean CLIENT_UpdateSmartLockUser(LLong lLoginID, NET_IN_SMARTLOCK_UPDATE_USER_INFO pstInParam, NET_OUT_SMARTLOCK_UPDATE_USER_INFO pstOutParam, int nWaitTime);
+
+ // 获取当前智能锁的注册用户信息
+ public boolean CLIENT_GetSmartLockRegisterInfo(LLong lLoginID, NET_IN_GET_SMART_LOCK_REGISTER_INFO pstInParam, NET_OUT_GET_SMART_LOCK_REGISTER_INFO pstOutParam, int nWaitTime);
+
+ // 智能锁修改用户信息
+ public boolean CLIENT_SetSmartLockUsername(LLong lLoginID, NET_IN_SET_SMART_LOCK_USERNAME pstInParam, NET_OUT_SET_SMART_LOCK_USERNAME pstOutParam, int nWaitTime);
+
+ // 智能锁删除用户接口
+ public boolean CLIENT_RemoveSmartLockUser(LLong lLoginID, NET_IN_SMARTLOCK_REMOVE_USER_INFO pstInParam, NET_OUT_SMARTLOCK_REMOVE_USER_INFO pstOutParam, int nWaitTime);
+
+ // 字符串加密接口 (pInParam, pOutParam内存由用户申请释放) 接口
+ public boolean CLIENT_EncryptString(NET_IN_ENCRYPT_STRING pInParam, NET_OUT_ENCRYPT_STRING pOutParam, int nWaitTime);
+
+ /*************************************************************************************************************
+ * 门禁用户、卡、人脸、信息操作新接口
+ * 1、添加一个用户
+ * 2、根据用户ID可以来添加多张卡、多张人脸、多个信息
+ *************************************************************************************************************/
+ /**
+ * 门禁人员信息管理接口
+ * @param emtype 对应 {@link NET_EM_ACCESS_CTL_USER_SERVICE}
+ */
+ public boolean CLIENT_OperateAccessUserService(LLong lLoginID, int emtype, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ // 开始查询人员信息
+ public LLong CLIENT_StartFindUserInfo(LLong lLoginID, NET_IN_USERINFO_START_FIND pstIn, NET_OUT_USERINFO_START_FIND pstOut, int nWaitTime);
+
+ // 获取人员信息 ,lFindHandle 为 CLIENT_StartFindUserInfo 接口返回值
+ public boolean CLIENT_DoFindUserInfo(LLong lFindHandle, NET_IN_USERINFO_DO_FIND pstIn, NET_OUT_USERINFO_DO_FIND pstOut, int nWaitTime);
+
+ // 停止查询人员信息 ,lFindHandle 为 CLIENT_StartFindUserInfo 接口返回值
+ public boolean CLIENT_StopFindUserInfo(LLong lFindHandle);
+
+ /**
+ * 门禁卡片信息管理接口
+ * @param emtype 对应 {@link NET_EM_ACCESS_CTL_CARD_SERVICE}
+ */
+ public boolean CLIENT_OperateAccessCardService(LLong lLoginID, int emtype, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ // 开始查询卡片信息
+ public LLong CLIENT_StartFindCardInfo(LLong lLoginID, NET_IN_CARDINFO_START_FIND pstIn, NET_OUT_CARDINFO_START_FIND pstOut, int nWaitTime);
+
+ // 获取卡片信息,lFindHandle 为CLIENT_StartFindCardInfo接口返回值
+ public boolean CLIENT_DoFindCardInfo(LLong lFindHandle, NET_IN_CARDINFO_DO_FIND pstIn, NET_OUT_CARDINFO_DO_FIND pstOut, int nWaitTime);
+
+ // 停止查询卡片信息,lFindHandle 为CLIENT_StartFindCardInfo接口返回值
+ public boolean CLIENT_StopFindCardInfo(LLong lFindHandle);
+
+ /**
+ * 门禁人脸信息管理接口
+ * @param emtype 对应 {@link NET_EM_ACCESS_CTL_FACE_SERVICE}
+ */
+ public boolean CLIENT_OperateAccessFaceService(LLong lLoginID, int emtype, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 信息信息管理接口
+ * @param emtype 对应 {@link NET_EM_ACCESS_CTL_FINGERPRINT_SERVICE}
+ */
+ public boolean CLIENT_OperateAccessFingerprintService(LLong lLoginID, int emtype, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ // 开始升级
+ public LLong CLIENT_StartUpgradeEx(LLong lLoginID, int emtype, String pchFileName, Callback cbUpgrade, Pointer dwUser);
+
+ // 发送数据
+ public boolean CLIENT_SendUpgrade(LLong lUpgradeID);
+
+ // 结束升级设备程序
+ public boolean CLIENT_StopUpgrade(LLong lUpgradeID);
+
+ // 查询产品定义
+ public boolean CLIENT_QueryProductionDefinition(LLong lLoginID, NET_PRODUCTION_DEFNITION pstuProdDef, int nWaitTime);
+
+ // 录播主机窗口最大个数
+ public static final int NET_MAX_WINDOWS_NUMBER = 64;
+ // 录播主机模式最大个数
+ public static final int NET_MAX_MODE_NUMBER = 64;
+
+ /**
+ * 录播主机相关 添加新的课程记录
+ * NET_IN_ADD_COURSE *pstInParam, NET_OUT_ADD_COURSE *pstOutParam
+ */
+ public boolean CLIENT_AddCourse(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 录播主机相关 修改课程
+ * NET_IN_MODIFY_COURSE *pstInParam, NET_OUT_MODIFY_COURSE *pstOutParam
+ */
+ public boolean CLIENT_ModifyCourse(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 录播主机相关 删除课程
+ * NET_IN_DELETE_COURSE *pstInParam, NET_OUT_DELETE_COURSE *pstOutParam
+ */
+ public boolean CLIENT_DeleteCourse(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 开始查询课程
+ * NET_IN_QUERY_COURSE_OPEN *pstInParam, NET_OUT_QUERY_COURSE_OPEN *pstOutParam
+ */
+ public boolean CLIENT_QueryCourseOpen(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 查询课程
+ * NET_IN_QUERY_COURSE *pstInParam, NET_OUT_QUERY_COURSE *pstOutParam
+ */
+ public boolean CLIENT_QueryCourse(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 结束查询课程
+ * NET_IN_QUERY_COURSE_CLOSE *pstInParam, NET_OUT_QUERY_COURSE_CLOSE *pstOutParam
+ */
+ public boolean CLIENT_QueryCourseClose(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 获取真实预览通道号,pInBuf与pOutBuf内存由用户申请释放
+ * NET_IN_GET_REAL_PREVIEW_CHANNEL* pInBuf, NET_OUT_GET_REAL_PREVIEW_CHANNEL* pOutBuf
+ */
+ public boolean CLIENT_GetRealPreviewChannel(LLong lLoginID, Pointer pInBuf, Pointer pOutBuf, int nWaitTime);
+
+ /**
+ * 录播主机组合通道模式操作 emOperateType NET_COURSECOMPOSITE_MODE_OPERATE_TYPE
+ *
+ * NET_COURSECOMPOSITE_MODE_OPERATE_TYPE {
+ *
+ * NET_COURSECOMPOSITE_MODE_ADD, // 添加模式,对应结构体
+ * // pInParam = NET_IN_COURSECOMPOSITE_CHANNEL_MODE_ADD,
+ * // pOutParam = NET_OUT_COURSECOMPOSITE_CHANNEL_MODE_ADD
+ * NET_COURSECOMPOSITE_MODE_DELETE, // 删除模式,对应结构体
+ * // pInParam = NET_IN_COURSECOMPOSITE_CHANNEL_MODE_DELETE,
+ * // pOutParam = NET_OUT_COURSECOMPOSITE_CHANNEL_MODE_DELETE
+ * NET_COURSECOMPOSITE_MODE_MODIFY, // 修改模式,对应结构体
+ * // pInParam = NET_IN_COURSECOMPOSITE_CHANNEL_MODE_MODIFY,
+ * // pOutParam = NET_OUT_COURSECOMPOSITE_CHANNEL_MODE_MODIFY
+ * NET_COURSECOMPOSITE_MODE_GET, // 获取模式,对应结构体
+ * // pInParam = NET_IN_COURSECOMPOSITE_CHANNEL_MODE_GET,
+ * // pOutParam = NET_OUT_COURSECOMPOSITE_CHANNEL_MODE_GET
+ * }
+ */
+ public boolean CLIENT_OperateCourseCompositeChannelMode(LLong lLoginID, int emOperateType, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * 获取录播主机默认真实通道号,pInBuf与pOutBuf内存由用户申请释放
+ * NET_IN_GET_DEFAULT_REAL_CHANNEL* pInBuf, NET_OUT_GET_DEFAULT_REAL_CHANNEL* pOutBuf
+ */
+ public boolean CLIENT_GetDefaultRealChannel(LLong lLoginID, Pointer pInBuf, Pointer pOutBuf, int nWaitTime);
+
+ /**
+ * 获取录播主机逻辑通道号,pInBuf与pOutBuf内存由用户申请释放
+ * NET_IN_GET_COURSE_LOGIC_CHANNEL* pInBuf,NET_OUT_GET_COURSE_LOGIC_CHANNEL* pOutBuf
+ */
+ public boolean CLIENT_GetLogicChannel(LLong lLoginID, Pointer pInBuf, Pointer pOutBuf, int nWaitTime);
+
+ /**
+ * 设置逻辑通道号和真实通道号的绑定关系,pInBuf与pOutBuf内存由用户申请释放
+ * NET_IN_SET_BLIND_REAL_CHANNEL* pInBuf,NET_OUT_SET_BLIND_REAL_CHANNEL* pOutBuf
+ */
+ public boolean CLIENT_SetBlindRealChannel(LLong lLoginID, Pointer pInBuf, Pointer pOutBuf, int nWaitTime);
+
+ /**
+ * 设置课程录像模式,pInBuf与pOutBuf内存由用户申请释放
+ * NET_IN_SET_COURSE_RECORD_MODE* pInBuf, NET_OUT_SET_COURSE_RECORD_MODE* pOutBuf
+ */
+ public boolean CLIENT_SetCourseRecordMode(LLong lLoginID, Pointer pInBuf, Pointer pOutBuf, int nWaitTime);
+
+ /**
+ * 获取课程录像模式,pInBuf与pOutBuf内存由用户申请释放
+ * NET_IN_GET_COURSE_RECORD_MODE* pInBuf, NET_OUT_GET_COURSE_RECORD_MODE* pOutBuf
+ */
+ public boolean CLIENT_GetCourseRecordMode(LLong lLoginID, Pointer pInBuf, Pointer pOutBuf, int nWaitTime);
+
+ /**
+ * 获取录播主机通道输入媒体介质,pInBuf与pOutBuf内存由用户申请释放
+ * NET_IN_GET_INPUT_CHANNEL_MEDIA* pInBuf,NET_OUT_GET_INPUT_CHANNEL_MEDIA* pOutBuf
+ */
+ public boolean CLIENT_GetInputChannelMedia(LLong lLoginID, Pointer pInBuf, Pointer pOutBuf, int nWaitTime);
+
+ /**
+ * 开启/关闭指定通道录像
+ * NET_IN_SET_COURSE_RECORD_STATE *pInBuf, NET_OUT_SET_COURSE_RECORD_STATE *pOutBuf
+ */
+ public boolean CLIENT_SetCourseRecordState(LLong lLoginID, Pointer pInBuf, Pointer pOutBuf, int nWaitTime);
+
+ /**
+ * 开始查询课程视频信息,pInBuf与pOutBuf内存由用户申请释放
+ * NET_IN_QUERY_COURSEMEDIA_FILEOPEN *pInBuf, NET_OUT_QUERY_COURSEMEDIA_FILEOPEN *pOutBuf
+ */
+ public boolean CLIENT_OpenQueryCourseMediaFile(LLong lLoginID, Pointer pInBuf, Pointer pOutBuf, int nWaitTime);
+
+ /**
+ * 查询课程视频信息,pInBuf与pOutBuf内存由用户申请释放
+ * NET_IN_QUERY_COURSEMEDIA_FILE *pInBuf, NET_OUT_QUERY_COURSEMEDIA_FILE *pOutBuf
+ */
+ public boolean CLIENT_DoQueryCourseMediaFile(LLong lLoginID, Pointer pInBuf, Pointer pOutBuf, int nWaitTime);
+
+ /**
+ * 关闭课程视频查询,pInBuf与pOutBuf内存由用户申请释放
+ * NET_IN_QUERY_COURSEMEDIA_FILECLOSE *pInBuf, NET_OUT_QUERY_COURSEMEDIA_FILECLOSE *pOutBuf
+ */
+ public boolean CLIENT_CloseQueryCourseMediaFile(LLong lLoginID, Pointer pInBuf, Pointer pOutBuf, int nWaitTime);
+
+ public static final int MAX_COURSE_LOGIC_CHANNEL = 64; // 录播主机最大逻辑通道数
+
+ /**
+ * 录播主机录像信息操作接口 EM_COURSERECORD_OPERATE_TYPE emOperateType
+ * {
+ * EM_COURSERECORDE_TYPE_GET_INFO, //获取教室录像信息,对应结构体
+ * pInParam = NET_IN_COURSERECORD_GETINFO,pOutParam = NET_OUT_COURSERECORD_GETINFO
+ * EM_COURSERECORDE_TYPE_SET_INFO, //设置教室录像信息,对应结构体
+ * pInParam = NET_IN_COURSERECORD_SETINFO,pOutParam = NET_OUT_COURSERECORD_SETINFO
+ * EM_COURSERECORDE_TYPE_UPDATE_INFO, //将录像信息更新到time时的信息,对应结构体
+ * pInParam = NET_IN_COURSERECORD_UPDATE_INFO, pOutParam = NET_OUT_COURSERECORD_UPDATE_INFO
+ * EM_COURSERECORDE_TYPE_GET_TIME, //获取当前课程教室已录制时间,对应结构体
+ * pInParam = NET_IN_COURSERECORD_GET_TIME, pOutParam = NET_OUT_COURSERECORD_GET_TIME
+ * }
+ */
+ public boolean CLIENT_OperateCourseRecordManager(LLong lLoginID, int emOperateType, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * 录播主机组合通道操作 EM_COURSECOMPOSITE_OPERATE_TYPE
+ * {
+ * EM_COURSECOMPOSITE_TYPE_LOCK_CONTROL, //控制组合通道与逻辑通道,对应结构体
+ * pInParam = NET_IN_COURSECOMPOSITE_LOCK_CONTROL,pOutParam = NET_OUT_COURSECOMPOSITE_LOCK_CONTROL
+ * EM_COURSECOMPOSITE_TYPE_GET_LOCKINFO, //获取组合通道与逻辑通道的锁定信息,对应结构体
+ * pInParam = NET_IN_COURSECOMPOSITE_GET_LOCKINFO,pOutParam = NET_OUT_COURSECOMPOSITE_GET_LOCKINFO
+ * EM_COURSECOMPOSITE_TYPE_GET_INFO, //获取组合通道信息,对应结构体
+ * pInParam = NET_IN_COURSECOMPOSITE_GET_INFO,pOutParam = NET_OUT_COURSECOMPOSITE_GET_INFO
+ * EM_COURSECOMPOSITE_TYPE_SET_INFO, //设置组合通道信息,对应结构体
+ * pInParam = NET_IN_COURSECOMPOSITE_SET_INFO,pOutParam = NET_OUT_COURSECOMPOSITE_SET_INFO
+ * EM_COURSECOMPOSITE_TYPE_UPDATE_INFO, //将组合通道信息更新到time时的信息,对应结构体
+ * pInParam = NET_IN_COURSECOMPOSITE_UPDATE_INFO, pOutParam = NET_OUT_COURSECOMPOSITE_UPDATE_INFO
+ * }
+ */
+ public boolean CLIENT_OperateCourseCompositeChannel(LLong lLoginID, int emOperateType, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * 获取录像状态
+ * NET_IN_GET_RECORD_STATE *pInParam, NET_OUT_GET_RECORD_STATE *pOutParam
+ */
+ public boolean CLIENT_GetRecordState(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * 电视墙操作
+ * NET_MONITORWALL_OPERATE_TYPE emType, void* pInParam, void* pOutParam
+ */
+ public boolean CLIENT_OperateMonitorWall(LLong lLoginID, int emType, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * 分页获取信息标注信息列表
+ * NET_IN_SCENICSPOT_GETPOINTINFOS_INFO *pInstuParam, NET_OUT_SCENICSPOT_GETPOINTINFOS_INFO *pstuOutParam
+ */
+ public boolean CLIENT_ScenicSpotGetPointInfos(LLong lLoginID, Pointer pInstuParam, Pointer pstuOutParam, int nWaitTime);
+
+ /**
+ * 设置景物点,原编号的景物点将会被覆盖
+ * NET_IN_SCENICSPOT_SETPOINTINFO_INFO *pInstuParam, NET_OUT_SCENICSPOT_SETPOINTINFO_INFO *pstuOutParam
+ */
+ public boolean CLIENT_ScenicSpotSetPointInfo(LLong lLoginID, Pointer pInstuParam, Pointer pstuOutParam, int nWaitTime);
+
+ /**
+ * 获取景物点支持的能力
+ * NET_IN_SCENICSPOT_GETCAPS_INFO *pInstuParam, NET_OUT_SCENICSPOT_GETCAPS_INFO *pstuOutParam
+ */
+ public boolean CLIENT_ScenicSpotGetCaps(LLong lLoginID, Pointer pInstuParam, Pointer pstuOutParam, int nWaitTime);
+
+ /**
+ * 以景物标注点为中心,进行三维定位(倍率不变)
+ * NET_IN_SCENICSPOT_TURNTOPOINT_INFO *pInParam, NET_OUT_SCENICSPOT_TURNTOPOINT_INFO *pOutParam
+ */
+ public boolean CLIENT_ScenicSpotTurnToPoint(LLong lLoginID, Pointer pInstuParam, Pointer pstuOutParam, int nWaitTime);
+
+ /////////////////////////////////////////新增接口 ///////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ /**
+ * 设置停车车位状态
+ * NET_IN_SET_PARKINGSPACE_STATE_INFO *pInParam, NET_OUT_SET_PARKINGSPACE_STATE_INFO *pOutParam
+ */
+ public boolean CLIENT_SetParkingSpaceState(LLong lLoginID, Pointer pstInParm, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 修改停车记录信息
+ * NET_IN_MODIFY_PARKINGRECORD_INFO *pInParam, NET_OUT_MODIFY_PARKINGRECORD_INFO *pOutParam
+ */
+ public boolean CLIENT_ModifyParkingRecord(LLong lLoginID, Pointer pstInParm, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 按照事件类型抓图(配合CLIENT_RealLoadPic()、CLIENT_RealLoadPicEx()接口使用, 按照手动抓拍模式(Manual)订阅,图片通过回调给用户)(pInParam, pOutParam内存由用户申请释放)
+ * NET_IN_SNAP_BY_EVENT *pInParam, NET_OUT_SNAP_BY_EVENT *pOutParam
+ */
+ public boolean CLIENT_SnapPictureByEvent(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ public static class NET_IN_SET_MARK_FILE_BY_TIME extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannel; //需要锁定的通道号,从0开始,元素为-1时,表示全通道。
+ public NET_TIME_EX stuStartTime; //开始时间
+ public NET_TIME_EX stuEndTime; //结束时间
+ public int bFlag; // 标记动作 true : 标记, false : 清除
+ public int bLockTimeFlag; //nLockTime字段标志位, 为 TRUE 时使用nLockTime
+ public int nLockTime; //锁定时长,以加锁时间为起点 ,单位为小时
+ public NET_IN_SET_MARK_FILE_BY_TIME() {
+ this.dwSize = this.size();
+ }
+ }
+
+ public static class NET_OUT_SET_MARK_FILE_BY_TIME extends SdkStructure
+ {
+ public int dwSize;
+
+ public NET_OUT_SET_MARK_FILE_BY_TIME() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 按时间标记录像
+ public boolean CLIENT_SetMarkFileByTime(LLong lUpgradeID, NET_IN_SET_MARK_FILE_BY_TIME pInParam, NET_OUT_SET_MARK_FILE_BY_TIME pOutParam, int nWaitTime);
+
+ public static class NET_IN_SET_MARK_FILE extends SdkStructure
+ {
+ public int dwSize;
+ public int emLockMode; // 录像加锁方式,详见EM_MARKFILE_MODE
+ public int emFileNameMadeType; // 文件名产生的方式,详见EM_MARKFILE_NAMEMADE_TYPE
+ public int nChannelID; // 通道号
+ public byte[] szFilename = new byte[MAX_PATH]; // 文件名
+ public int nFramenum; // 文件总帧数
+ public int nSize; // 文件长度
+ public NET_TIME stuStartTime; // 开始时间
+ public NET_TIME stuEndTime; // 结束时间
+ public int nDriveNo; // 磁盘号(区分网络录像和本地录像的类型,0-127表示本地录像,其中64表示光盘1,128表示网络录像)
+ public int nStartCluster; // 起始簇号
+ public byte byRecordFileType; // 录象文件类型 0:普通录象;1:报警录象;2:移动检测;3:卡号录象;4:图片, 5: 智能录像
+ public byte byImportantRecID; // 0:普通录像 1:重要录像
+ public byte byHint; // 文件定位索引(nRecordFileType==4<图片>时,bImportantRecID<<8 +bHint ,组成图片定位索引 )
+ public byte byRecType; // 0-主码流录像 1-辅码流1录像 2-辅码流2录像 3-辅码流3录像
+ public int nLockTime; // 锁定时长,以加锁时间为起点,单位为小时
+
+ public NET_IN_SET_MARK_FILE() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 录像加锁方式
+ public static class EM_MARKFILE_MODE extends SdkStructure
+ {
+ public static final int EM_MARK_FILE_BY_TIME_MODE = 0; // 通过时间方式对录像加锁
+ public static final int EM_MARK_FILE_BY_NAME_MODE = 1; // 通过文件名方式对录像加锁
+ }
+
+ // 文件名产生的方式
+ public static class EM_MARKFILE_NAMEMADE_TYPE extends SdkStructure
+ {
+ public static final int EM_MARKFILE_NAMEMADE_DEFAULT = 0; // 默认方式:需要用户传递录像文件名参数szFilename
+ public static final int EM_MARKFILE_NAMEMADE_JOINT = 1; // 拼接文件名方式:用户传递磁盘号(nDriveNo)、起始簇号(nStartCluster),不需要传递录像文件名
+ }
+
+ public static class NET_OUT_SET_MARK_FILE extends SdkStructure
+ {
+ public int dwSize;
+
+ public NET_OUT_SET_MARK_FILE() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 按文件标记录像
+ public boolean CLIENT_SetMarkFile(LLong lLoginID, NET_IN_SET_MARK_FILE pInParam, NET_OUT_SET_MARK_FILE pOutParam, int nWaitTime);
+
+
+ public static class NET_IN_DEV_GPS_INFO extends SdkStructure
+ {
+ public int dwSize; // 该结构体大小
+ public int nChannel;
+
+ public NET_IN_DEV_GPS_INFO() {
+ this.dwSize =this.size();
+ }
+ }
+
+ public static class NET_OUT_DEV_GPS_INFO extends SdkStructure
+ {
+ public int dwSize; // 该结构体大小
+ public NET_TIME stuLocalTime; // 当前时间
+ public double dbLongitude; // 经度(单位是百万分之度,范围0-360度)
+ public double dbLatitude; // 纬度(单位是百万分之度,范围0-180度)
+ public double dbAltitude; // 高度(单位:米)
+ public double dbSpeed; // 速度(单位:km/H)
+ public double dbBearing; // 方向角(单位:度)
+ public int emAntennasStatus; // 天线状态(0:坏 1:好)
+ public int emPositioningResult; // 定位状态(0:不定位 1:定位)
+ public int dwSatelliteCount; // 卫星个数
+ public int emworkStatus; // 工作状态
+ public int nAlarmCount; // 报警个数
+ public int[] nAlarmState = new int[128]; // 发生的报警位置,值可能多个
+ public float fHDOP; // 水平精度因子
+
+ public NET_OUT_DEV_GPS_INFO() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 实时抽帧配置,EVS
+ public static class CFG_BACKUP_LIVE_INFO extends SdkStructure
+ {
+ public int bEnable; // 是否启动抽帧
+ public int nBackupRate; // 抽帧备份比率,如为0表示只保留I帧,其它情况下表示保留I帧以及紧邻其后的若干P帧
+ // 单位:百分比
+ // 如果GOP为50,20表示保留50*20%=10帧数据(即1个I帧和9个P帧)。如果计算结果带小数,则取整
+ public CFG_TIME_SECTION stuTimeSection; // 抽帧时间段
+ } ;
+
+ // 定时录像配置信息
+ public static class CFG_RECORD_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号(0开始)
+ public TIME_SECTION_WEEK_DAY_6[] stuTimeSection = (TIME_SECTION_WEEK_DAY_6[])new TIME_SECTION_WEEK_DAY_6().toArray(WEEK_DAY_NUM); // 时间表
+ public int nPreRecTime; // 预录时间,为零时表示关闭(0~300)
+ public int bRedundancyEn; // 录像冗余开关
+ public int nStreamType; // 0-主码流,1-辅码流1,2-辅码流2,3-辅码流3
+ public int nProtocolVer; // 协议版本号, 只读
+ public int abHolidaySchedule; // 为true时有假日配置信息,bHolidayEn、stuHolTimeSection才有效;
+ public int bHolidayEn; // 假日录像使能TRUE:使能,FALSE:未使能
+ public TIME_SECTION_WEEK_DAY_6 stuHolTimeSection; // 假日录像时间表
+ public int nBackupLiveNum; // 实时抽帧配置个数
+ public CFG_BACKUP_LIVE_INFO[] stuBackupLiveInfo=(CFG_BACKUP_LIVE_INFO[]) new CFG_BACKUP_LIVE_INFO().toArray(8); // 实时抽帧配置,EVS
+ public int bSaveVideo; // 是否录制视频帧
+ public int bSaveAudio; // 录像时是否保存音频数据
+ }
+
+ //获取云升级信息入参
+ public static class NET_IN_UPGRADER_GETSERIAL extends SdkStructure
+ {
+ public int dwSize; // 此结构体大小
+
+ public NET_IN_UPGRADER_GETSERIAL() {
+ this.dwSize = this.size();
+ }
+ }
+
+
+ //云升级信息
+ public static class NET_UPGRADER_SERIAL_INO extends SdkStructure
+ {
+ public int emVendor; // 厂商,详见ENUM_VENDOR_TYPE
+ public int emStandard; // 视频制式, 详见ENUM_STANDARD_TYPE
+ public NET_TIME_EX stuBuild; // 发布日期
+ public byte[] szChip = new byte[NET_COMMON_STRING_16]; // 可升级的程序名
+ public byte[] szSerial = new byte[NET_COMMON_STRING_256]; // 内部型号
+ public byte[] szLanguage = new byte[NET_COMMON_STRING_128]; // 语言
+ public byte[] szSn = new byte[NET_COMMON_STRING_64]; // 序列号
+ public byte[] szSWVersion = new byte[NET_COMMON_STRING_64]; // 软件版本
+ public byte[] szTag = new byte[NET_COMMON_STRING_256]; // 自定义标记
+ public byte[] szTag2 = new byte[NET_COMMON_STRING_256]; // 自定义标记2
+ public byte[] reserved = new byte[1024];
+ }
+
+ public static final int MAX_UPGRADER_SERIAL_INFO = 8;
+
+ //获取云升级信息出参
+ public static class NET_OUT_UPGRADER_GETSERIAL extends SdkStructure
+ {
+ public int dwSize; // 此结构体大小
+ public NET_UPGRADER_SERIAL_INO[] stuSerialInfo = new NET_UPGRADER_SERIAL_INO[MAX_UPGRADER_SERIAL_INFO]; // 云升级信息
+ public int nRetNum; // 返回个数
+
+ public NET_OUT_UPGRADER_GETSERIAL() {
+ this.dwSize = this.size();
+
+ for (int i = 0; i < stuSerialInfo.length; ++i) {
+ stuSerialInfo[i] = new NET_UPGRADER_SERIAL_INO();
+ }
+ }
+ }
+
+ //从设备获取信息,用于向DH云确认是否有升级包
+ public boolean CLIENT_GetUpdateSerial(LLong lLoginID, NET_IN_UPGRADER_GETSERIAL pstuInGetSerial, NET_OUT_UPGRADER_GETSERIAL pstuOutGetSerial, int nWaitTime);
+
+ // 云升级软件检查入参
+ public static class NET_IN_CLOUD_UPGRADER_CHECK extends SdkStructure
+ {
+ public int dwSize;
+ public int emVendor; // 厂商,详见ENUM_VENDOR_TYPE
+ public int emStandard; // 视频制式, 详见ENUM_STANDARD_TYPE
+ public NET_TIME_EX stuBuild; // 编译时间,用于比较版本
+ public byte[] szUrl = new byte[NET_COMMON_STRING_1024]; // 云URL
+ public byte[] szClass = new byte[NET_COMMON_STRING_64]; // 设备大类
+ public byte[] szSerial = new byte[NET_COMMON_STRING_256]; // 设备硬件信号系列
+ public byte[] szLanguage = new byte[NET_COMMON_STRING_128]; // 语言
+ public byte[] szSN = new byte[NET_COMMON_STRING_64]; // 设备序列号
+ public byte[] szSWVersion = new byte[NET_COMMON_STRING_64]; // 版本号,用于显示
+ public byte[] szTag1 = new byte[NET_COMMON_STRING_256]; // 预留字段,可用于后续或扩展
+ public byte[] szTag2 = new byte[NET_COMMON_STRING_256]; // 预留字段,可用于后续或扩展
+ public byte[] szAccessKeyId = new byte[NET_COMMON_STRING_128];//Access Key ID
+ public byte[] szSecretAccessKey = new byte[NET_COMMON_STRING_128];//Secret Access Key
+
+ public NET_IN_CLOUD_UPGRADER_CHECK() {
+ this.dwSize = this.size();
+ }
+ }
+
+ //设备制造商
+ public static class ENUM_VENDOR_TYPE extends SdkStructure
+ {
+ public static final int ENUM_VENDOR_TYPE_UNKNOWN = 0; // 未知
+ public static final int ENUM_VENDOR_TYPE_GENERAL = 1; // General
+ public static final int ENUM_VENDOR_TYPE_DH = 2; // DH
+ public static final int ENUM_VENDOR_TYPE_OEM = 3; // OEM
+ public static final int ENUM_VENDOR_TYPE_LC = 4; // LC
+ public static final int ENUM_VENDOR_TYPE_EZIP = 5; // EZIP
+ }
+
+ //视频制式
+ public static class ENUM_STANDARD_TYPE extends SdkStructure
+ {
+ public static final int ENUM_STANDARD_TYPE_UNKNOWN = 0; // 未知
+ public static final int ENUM_STANDARD_TYPE_PAL = 1; // P-PAL
+ public static final int ENUM_STANDARD_TYPE_NTSC = 2; // N-NTSC
+ public static final int ENUM_STANDARD_TYPE_PAL_NTSC = 3; // PN-PAL/NTSC默认P制
+ public static final int ENUM_STANDARD_TYPE_NTSC_PAL = 4; // NP-NTSC/PAL默认N制
+ public static final int ENUM_STANDARD_TYPE_SECAM = 5; // S-SECAM
+ }
+
+ // 云升级软件检查出参
+ public static class NET_OUT_CLOUD_UPGRADER_CHECK extends SdkStructure
+ {
+ public int dwSize;
+ public int bHasNewVersion; // 是否有可升级版本
+ public byte[] szVersion = new byte[NET_COMMON_STRING_64]; // 版本信息
+ public byte[] szAttention = new byte[NET_COMMON_STRING_1024]; // 提醒设备升级的提示信息
+ public byte[] szPackageUrl = new byte[NET_COMMON_STRING_1024]; // 设备升级包的URL
+ public byte[] szPackageId = new byte[NET_COMMON_STRING_64]; // 升级包ID
+
+ public NET_OUT_CLOUD_UPGRADER_CHECK() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 检查云端是否有可升级软件, 使用HTTP协议
+ public boolean CLIENT_CloudUpgraderCheck(NET_IN_CLOUD_UPGRADER_CHECK pIn, NET_OUT_CLOUD_UPGRADER_CHECK pOut, int dwWaitTime);
+
+ //云下载状态
+ public static class emCloudDownloadState extends SdkStructure
+ {
+ public static final int emCloudDownloadState_Unknown = 0; // 未知
+ public static final int emCloudDownloadState_Success = 1; // 云下载成功(需要关闭句柄)
+ public static final int emCloudDownloadState_Failed = 2; // 云下载失败(不需要关闭句柄,会不断尝试下载)
+ public static final int emCloudDownloadState_Downloading = 3; // 正在下载中
+ public static final int emCloudDownloadState_NoEnoughDiskSpace = 4; // 磁盘空间不足
+ }
+
+ // 云下载回调函数
+ public interface fCloudDownload_Process_callback extends StdCallCallback {
+ public void invoke(LLong lDownHandle, int emState, double dwDownloadSpeed, int dwProgressPercentage, Pointer dwUser);
+ }
+
+ // 云升级下载升级包入参
+ public static class NET_IN_CLOUD_UPGRADER_DOWN extends SdkStructure
+ {
+ public int dwSize;
+ public byte[] szPackageUrl = new byte[NET_COMMON_STRING_1024];// 设备升级包的URL
+ public byte[] szSaveFile = new byte[NET_COMMON_STRING_1024]; // 保存文件名
+ public Callback pfProcessCallback; // 进度回调,实现fCloudDownload_Process_callback
+ public Pointer dwUser; // 回调用户数据
+
+ public NET_IN_CLOUD_UPGRADER_DOWN() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 云升级下载升级包出参
+ public static class NET_OUT_CLOUD_UPGRADER_DOWN extends SdkStructure
+ {
+ public int dwSize;
+
+ public NET_OUT_CLOUD_UPGRADER_DOWN() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 云 下载升级软件, 使用HTTP协议
+ public LLong CLIENT_CloudUpgraderDownLoad(NET_IN_CLOUD_UPGRADER_DOWN pIn, NET_OUT_CLOUD_UPGRADER_DOWN pOut);
+
+ // 停止云下载, 使用HTTP协议
+ public boolean CLIENT_CloudUpgraderStop(LLong lDownloadHandle);
+
+ // 暂停云下载, 使用HTTP协议
+ public boolean CLIENT_CloudUpgraderPause(LLong lDownloadHandle, int bPause);
+
+ //升级结果
+ public static class NET_UPGRADE_REPORT_RESULT extends SdkStructure
+ {
+ public static final int NET_UPGRADE_REPORT_RESULT_UNKNWON = 0; // 未知
+ public static final int NET_UPGRADE_REPORT_RESULT_SUCCESS = 1; // 成功
+ public static final int NET_UPGRADE_REPORT_RESULT_FAILED = 2; // 失败
+ }
+
+ public static final int NET_UPGRADE_COUNT_MAX = 256; // 最大升级个数
+
+ //上报升级结果结构体
+ public static class NET_UPGRADE_REPORT extends SdkStructure
+ {
+ public int nDeviceNum;
+ public DEVICE_SERIAL[] szDevSerialArr = (DEVICE_SERIAL[])new DEVICE_SERIAL().toArray(NET_UPGRADE_COUNT_MAX); // 序列号
+ public byte[] szPacketID = new byte[MAX_COMMON_STRING_128]; // 升级包ID
+ public int emResult; // 升级结果,详见NET_UPGRADE_REPORT_RESULT
+ public byte[] szCode = new byte[MAX_COMMON_STRING_128]; // 错误码信息
+ public byte[] reserved = new byte[256];
+ }
+
+ public static class DEVICE_SERIAL extends SdkStructure
+ {
+ public byte[] szDevSerial = new byte[MAX_COMMON_STRING_64]; // 序列号
+ }
+
+ //上报升级结果入参
+ public static class NET_IN_UPGRADE_REPORT extends SdkStructure
+ {
+ public int dwSize;
+ public int nCount; // 升级包个数
+ public Pointer pstuUpgradeReport; // 升级结果信息 , 大小 nCount * sizeof(NET_UPGRADE_REPORT)
+ public byte[] szAccessKeyId = new byte[NET_COMMON_STRING_128]; //访问ID
+ public byte[] szSecretAccessKey = new byte[NET_COMMON_STRING_128]; //访问秘钥
+ public byte[] szUrl = new byte[NET_COMMON_STRING_1024]; // 云URL
+
+ public NET_IN_UPGRADE_REPORT() {
+ this.dwSize = this.size();
+ }
+ }
+
+ //上报升级结果出参
+ public static class NET_OUT_UPGRADE_REPORT extends SdkStructure
+ {
+ public int dwSize;
+
+ public NET_OUT_UPGRADE_REPORT() {
+ this.dwSize = this.size();
+ }
+ }
+
+ //上报升级结果, 使用HTTP协议
+ public boolean CLIENT_CloudUpgraderReport(NET_IN_UPGRADE_REPORT pIn, NET_OUT_UPGRADE_REPORT pOut, int dwWaitTime);
+
+ // 升级状态回调结构体
+ public static class NET_CLOUD_UPGRADER_STATE extends SdkStructure
+ {
+ public int dwSize;
+ public int emState; // 升级状态,详见EM_UPGRADE_STATE
+ public int nProgress; // 升级百分比
+ public byte[] szFileName = new byte[NET_COMMON_STRING_128]; // 升级文件
+ public long nTotalLen; // 升级文件总大小,单位字节
+ public byte[] szFileNameEx = new byte[256]; // 升级文件扩展
+ public byte[] szReserved = new byte[1024]; // 扩展字段
+ public NET_CLOUD_UPGRADER_STATE() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 升级状态回调函数
+ public interface fUpgraderStateCallback extends StdCallCallback {
+ public void invoke(LLong lLoginId, LLong lAttachHandle, NET_CLOUD_UPGRADER_STATE pBuf, int dwBufLen, Pointer pReserved, Pointer dwUser);
+ }
+
+ // 订阅升级状态入参
+ public static class NET_IN_CLOUD_UPGRADER_ATTACH_STATE extends SdkStructure
+ {
+ public int dwSize;
+ public Callback cbUpgraderState; // 升级状态回调实现fUpgraderStateCallback
+ public Pointer dwUser;
+
+ public NET_IN_CLOUD_UPGRADER_ATTACH_STATE() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 订阅升级状态出参
+ public static class NET_OUT_CLOUD_UPGRADER_ATTACH_STATE extends SdkStructure
+ {
+ public int dwSize;
+
+ public NET_OUT_CLOUD_UPGRADER_ATTACH_STATE() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 获取升级状态入参
+ public static class NET_IN_CLOUD_UPGRADER_GET_STATE extends SdkStructure
+ {
+ public int dwSize;
+
+ public NET_IN_CLOUD_UPGRADER_GET_STATE() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 获取升级状态出参
+ public static class NET_OUT_CLOUD_UPGRADER_GET_STATE extends SdkStructure
+ {
+ public int dwSize;
+ public int emState; // 升级状态,详见EM_UPGRADE_STATE
+ public int nProgress; // 升级进度
+ public byte[] szFileName = new byte[NET_COMMON_STRING_128]; // 升级文
+
+ public NET_OUT_CLOUD_UPGRADER_GET_STATE() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 升级包和升级状态
+ public static class EM_UPGRADE_STATE extends SdkStructure
+ {
+ public static final int EM_UPGRADE_STATE_UNKNOWN = 0; // 未知状态
+ public static final int EM_UPGRADE_STATE_NONE = 1; // 没有检测到更新状态
+ public static final int EM_UPGRADE_STATE_INVALID = 2; // 升级包不正确
+ public static final int EM_UPGRADE_STATE_NOT_ENOUGH_MEMORY = 3; // 内存不够
+ public static final int EM_UPGRADE_STATE_DOWNLOADING = 4; // 正在下载数据
+ public static final int EM_UPGRADE_STATE_DOWNLOAD_FAILED = 5; // 下载失败
+ public static final int EM_UPGRADE_STATE_DOWNLOAD_SUCCESSED = 6; // 下载成功
+ public static final int EM_UPGRADE_STATE_PREPARING = 7; // 准备升级
+ public static final int EM_UPGRADE_STATE_UPGRADING = 8; // 升级中
+ public static final int EM_UPGRADE_STATE_UPGRADE_FAILED = 9; // 升级失败
+ public static final int EM_UPGRADE_STATE_UPGRADE_SUCCESSED = 10; // 升级成功
+ public static final int EM_UPGRADE_STATE_UPGRADE_CANCELLED = 11; // 取消升级
+ public static final int EM_UPGRADE_STATE_FILE_UNMATCH = 12; // 升级包不匹配
+ }
+
+ // 订阅升级状态观察接口
+ public LLong CLIENT_CloudUpgraderAttachState(LLong lLoginID, NET_IN_CLOUD_UPGRADER_ATTACH_STATE pInParam, NET_OUT_CLOUD_UPGRADER_ATTACH_STATE pOutParam, int nWaitTime);
+
+ // 退订升级状态观察接口
+ public boolean CLIENT_CloudUpgraderDetachState(LLong lAttachHandle);
+
+ // 获取升级状态
+ public boolean CLIENT_CloudUpgraderGetState(LLong lLoginID, NET_IN_CLOUD_UPGRADER_GET_STATE pInParam, NET_OUT_CLOUD_UPGRADER_GET_STATE pOutParam, int nWaitTime);
+
+ // 代理服务器地址
+ public static class NET_PROXY_SERVER_INFO extends SdkStructure
+ {
+ public byte[] szIP = new byte[NET_MAX_IPADDR_LEN_EX]; // IP地址
+ public int nPort; // 端口
+ public byte[] byReserved = new byte[84];
+ }
+
+ // CLIENT_CheckCloudUpgrader 入参
+ public static class NET_IN_CHECK_CLOUD_UPGRADER extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nWay; // 检测路径, 0-直连升级服务器检测, 1-通过代理服务器检测, 2-获取缓存的检测结果
+ public NET_PROXY_SERVER_INFO stProxy; // 代理服务器地址, way==1时有意义
+
+ public NET_IN_CHECK_CLOUD_UPGRADER() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 云升级状态
+ public static class EM_CLOUD_UPGRADER_CHECK_STATE extends SdkStructure
+ {
+ public static final int EM_CLOUD_UPGRADER_CHECK_STATE_UNKNOWN = 0; // 未知
+ public static final int EM_CLOUD_UPGRADER_CHECK_STATE_NONE = 1; // 没有检测到更新
+ public static final int EM_CLOUD_UPGRADER_CHECK_STATE_REGULAR = 2; // 一般升级 (需要用户确认, 只能向高版本)
+ public static final int EM_CLOUD_UPGRADER_CHECK_STATE_EMERGENCY = 3; // 强制升级 (设备自动检测执行, 可以向低版本)
+ public static final int EM_CLOUD_UPGRADER_CHECK_STATE_AUTOMATIC = 4; // 自动升级 (有新升级包, 自动升级, 当前为使用, 需使能页面自动升级选项)
+ }
+
+ // 云升级新版本升级包类型
+ public static class EM_CLOUD_UPGRADER_PACKAGE_TYPE extends SdkStructure
+ {
+ public static final int EM_CLOUD_UPGRADER_PACKAGE_TYPE_UNKNOWN = 0; // 未知
+ public static final int EM_CLOUD_UPGRADER_PACKAGE_TYPE_ALL = 1; // 整包
+ public static final int EM_CLOUD_UPGRADER_PACKAGE_TYPE_PTZ = 2; // 云台主控包
+ public static final int EM_CLOUD_UPGRADER_PACKAGE_TYPE_WEB = 3; // Web
+ public static final int EM_CLOUD_UPGRADER_PACKAGE_TYPE_LOGO = 4; // Logo
+ public static final int EM_CLOUD_UPGRADER_PACKAGE_TYPE_CUSTOM = 5; // Custom
+ public static final int EM_CLOUD_UPGRADER_PACKAGE_TYPE_GUI = 6; // Gui
+ public static final int EM_CLOUD_UPGRADER_PACKAGE_TYPE_PD = 7; // PD
+ public static final int EM_CLOUD_UPGRADER_PACKAGE_TYPE_DATA = 8; // Data
+ public static final int EM_CLOUD_UPGRADER_PACKAGE_TYPE_PTZ_POWER = 9; // 云台电源
+ public static final int EM_CLOUD_UPGRADER_PACKAGE_TYPE_PTZ_LIGHT = 10; // 云台灯光
+ public static final int EM_CLOUD_UPGRADER_PACKAGE_TYPE_PTZ_HEATER = 11; // 云台加热器
+ }
+
+ // CLIENT_CheckCloudUpgrader 出参
+ public static class NET_OUT_CHECK_CLOUD_UPGRADER extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int emState; // 升级状态,详见EM_CLOUD_UPGRADER_CHECK_STATE
+ public int emPackageType; // 新版本升级包类型, State不为None需要返回,详见EM_CLOUD_UPGRADER_PACKAGE_TYPE
+ public byte[] szOldVersion = new byte[MAX_COMMON_STRING_64]; // 旧版本号, State不为None需要返回
+ public byte[] szNewVersion = new byte[MAX_COMMON_STRING_64]; // 新版本号,State不为None需要返回
+ public byte[] szAttention = new byte[NET_COMMON_STRING_2048]; // 新的升级包更新内容
+ public byte[] szPackageURL = new byte[NET_COMMON_STRING_256]; // 升级包下载地址(代理升级需要)
+ public byte[] szPackageID = new byte[MAX_COMMON_STRING_64]; // 升级包ID
+ public byte[] szCheckSum = new byte[MAX_COMMON_STRING_64]; // 升级包的SHA-256校验和
+ public byte[] szBuildTime = new byte[MAX_COMMON_STRING_32]; // 升级包构建时间
+
+ public NET_OUT_CHECK_CLOUD_UPGRADER() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 在线升级检查是否有可用升级包, pInParam和pOutParam内存由用户申请和释放
+ public boolean CLIENT_CheckCloudUpgrader(LLong lLoginID, NET_IN_CHECK_CLOUD_UPGRADER pInParam, NET_OUT_CHECK_CLOUD_UPGRADER pOutParam, int nWaitTime);
+
+ // 升级包信息
+ public static class NET_CLOUD_UPGRADER_INFO extends SdkStructure
+ {
+ public byte[] szPackageURL = new byte[NET_COMMON_STRING_256]; // 升级包下载地址(代理升级需要)
+ public byte[] szPackageID = new byte[MAX_COMMON_STRING_64]; // 升级包ID
+ public byte[] szCheckSum = new byte[MAX_COMMON_STRING_64]; // 升级包的SHA-256校验和
+ public byte[] byReserved = new byte[1024]; // 保留字节
+ }
+
+ // CLIENT_ExecuteCloudUpgrader 入参
+ public static class NET_IN_EXECUTE_CLOUD_UPGRADER extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public byte[] szNewVersion = new byte[MAX_COMMON_STRING_64]; // 上一次check得到的新版本号
+ public int nWay; // 检测路径, 0-直连升级服务器检测, 1-通过代理服务器检测
+ public NET_PROXY_SERVER_INFO stProxy; // 代理服务器地址, nWay==1时有意义
+ public NET_CLOUD_UPGRADER_INFO stInfo; // 升级包信息
+
+ public NET_IN_EXECUTE_CLOUD_UPGRADER() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // CLIENT_ExecuteCloudUpgrader 出参
+ public static class NET_OUT_EXECUTE_CLOUD_UPGRADER extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+
+ public NET_OUT_EXECUTE_CLOUD_UPGRADER() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 执行在线云升级, pInParam和pOutParam内存由用户申请和释放
+ public boolean CLIENT_ExecuteCloudUpgrader(LLong lLoginID, NET_IN_EXECUTE_CLOUD_UPGRADER pInParam, NET_OUT_EXECUTE_CLOUD_UPGRADER pOutParam, int nWaitTime);
+
+ // CLIENT_GetCloudUpgraderState 入参
+ public static class NET_IN_GET_CLOUD_UPGRADER_STATE extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+
+ public NET_IN_GET_CLOUD_UPGRADER_STATE() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 在线升级状态
+ public static class EM_CLOUD_UPGRADER_STATE extends SdkStructure
+ {
+ public static final int EM_CLOUD_UPGRADER_STATE_UNKNOWN = 0; // 未知
+ public static final int EM_CLOUD_UPGRADER_STATE_NOUPGRADE = 1; // "Noupgrade"-未进行升级
+ public static final int EM_CLOUD_UPGRADER_STATE_PREPARING = 2; // "Preparing"-准备升级
+ public static final int EM_CLOUD_UPGRADER_STATE_DOWNLOADING = 3; // "Downloading"-正在下载数据
+ public static final int EM_CLOUD_UPGRADER_STATE_DOWNLOADFAILED = 4; // "DownloadFailed"-下载失败
+ public static final int EM_CLOUD_UPGRADER_STATE_UPGRADING = 5; // "Upgrading"-正在升级
+ public static final int EM_CLOUD_UPGRADER_STATE_INVALID = 6; // "Invalid"-升级包不正确
+ public static final int EM_CLOUD_UPGRADER_STATE_FAILED = 7; // "Failed"-升级包写入Flash失败
+ public static final int EM_CLOUD_UPGRADER_STATE_SUCCEEDED = 8; // "Succeeded"-升级包写入Flash成功
+ }
+
+ // CLIENT_GetCloudUpgraderState 出参
+ public static class NET_OUT_GET_CLOUD_UPGRADER_STATE extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int emState; // 升级状态,详见EM_CLOUD_UPGRADER_STATE
+ public int nProgress; // 升级进度, 状态是Downloading/Upgrading时有意义
+
+ public NET_OUT_GET_CLOUD_UPGRADER_STATE() {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 获取云升级在线升级状态, pInParam和pOutParam内存由用户申请和释放
+ public boolean CLIENT_GetCloudUpgraderState(LLong lLoginID, NET_IN_GET_CLOUD_UPGRADER_STATE pInParam, NET_OUT_GET_CLOUD_UPGRADER_STATE pOutParam, int nWaitTime);
+
+
+ // 事件类型 EVENT_IVS_PHONECALL_DETECT(打电话检测事件) 对应的数据块描述信息
+ public static class DEV_EVENT_PHONECALL_DETECT_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public byte[] szName = new byte[MAX_EVENT_NAME]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+
+ public int nGroupID; // 事件组ID
+ public int nCountInGroup; // 一个事件组内的抓拍张数
+ public int nIndexInGroup; // 一个事件组内的抓拍序号,从1开始
+ public int UTCMS; // UTC对应的毫秒数
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public NET_POINT[] stuDetectRegion = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public int nRuleID; // 智能事件规则编号
+ public int nObjectNum; // 检测到的物体数量
+ public DH_MSG_OBJECT[] stuObjects=(DH_MSG_OBJECT[])new DH_MSG_OBJECT().toArray(128); // 多个检测到的物体信息
+ public int nSerialUUIDNum; // 智能物体数量
+ public byte[] szSerialUUID=new byte[128*22]; // 智能物体全局唯一物体标识
+ // 有效数据位21位,包含’\0’
+ // 前2位%d%d:01-视频片段, 02-图片, 03-文件, 99-其他
+ // 中间14位YYYYMMDDhhmmss:年月日时分秒
+ // 后5位%u%u%u%u%u:物体ID,如00001
+ public boolean bSceneImage; // stuSceneImage 是否有效
+ public SCENE_IMAGE_INFO_EX stuSceneImage; // 全景广角图
+ public byte[] szUserName =new byte[32]; // 用户名称
+ public Pointer pstuImageInfo; // 图片信息数组 ,结构体NET_IMAGE_INFO_EX2数组指针
+ public int nImageInfoNum; // 图片信息个数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] byReserved=new byte[188]; // 保留字节
+ }
+
+ // 事件类型 EVENT_IVS_SMOKING_DETECT(吸烟检测事件)对应的数据块描述信息
+ public static class DEV_EVENT_SMOKING_DETECT_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public byte[] szName = new byte[MAX_EVENT_NAME]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+
+ public int nGroupID; // 事件组ID
+ public int nCountInGroup; // 一个事件组内的抓拍张数
+ public int nIndexInGroup; // 一个事件组内的抓拍序号,从1开始
+ public int UTCMS; // UTC对应的毫秒数
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public NET_POINT[] stuDetectRegion = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public byte szSerialUUID[] = new byte[22]; //智能物体全局唯一物体标识
+ public SCENE_IMAGE_INFO stuSceneImageInfo = new SCENE_IMAGE_INFO(); //全景广角图
+ public byte szUserName[] = new byte[32]; //用户名称
+ public NET_IMAGE_INFO_EX2 stuImageInfo[] = (NET_IMAGE_INFO_EX2[])new NET_IMAGE_INFO_EX2().toArray(32); //图片信息数组
+ public int nImageInfoNum; //图片信息个数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte byReserved[] = new byte[1024]; //预留字节
+ }
+
+ // 事件类型 EVENT_IVS_FIREWARNING(火警事件) 对应的数据块描述信息
+ public static class DEV_EVENT_FIREWARNING_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nAction; // 1:开始 2:停止
+ public int nFSID; // Uint32 火情编号ID
+ public int emPicType; // 图片类型,详见 EM_FIREWARNING_PIC_TYPE
+ public int bIsLeaveFireDetect; // 是否属于离岗火点检测(TRUE:是 FALSE:不是)
+ public Pointer pstuImageInfo; // 图片信息数组,指针对应结构体NET_IMAGE_INFO_EX2的数组
+ public int nImageInfoNum; // 图片信息个数
+ public byte[] byReserved; // 保留字节
+ public DEV_EVENT_FIREWARNING_INFO() {
+ int size = new PointerSize().size();
+ byReserved = new byte[1008 - size];// 保留字节
+ }
+ }
+
+ // 图片类型
+ public static class EM_FIREWARNING_PIC_TYPE extends SdkStructure
+ {
+ public static final int EM_PIC_UNKNOWN = 0; // 未知
+ public static final int EM_PIC_NONE = 1; // 无
+ public static final int EM_PIC_OVERVIEW = 2; // 全景图
+ public static final int EM_PIC_DETAIL = 3; // 细节图
+ }
+
+ // 事件类型EVENT_IVS_LEFTDETECTION(物品遗留事件)对应的数据块描述信息
+ public static class DEV_EVENT_LEFT_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public byte bEventAction;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public NET_POINT[] DetectRegion = new NET_POINT[NET_MAX_DETECT_REGION_NUM]; // 规则检测区域
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public int nSourceIndex; // 事件源设备上的index,-1表示数据无效
+ public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ public int nOccurrenceCount; // 事件触发累计次数
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public short nPreserID; // 事件触发的预置点号,从1开始(没有表示未知)
+ public byte[] szPresetName = new byte[64]; // 事件触发的预置名称
+ public NET_EXTENSION_INFO stuExtensionInfo; // 扩展信息
+ public byte[] byReserved2 = new byte[2]; // 字节对齐
+ public NET_GPS_INFO stuGPSInfo; // GPS信息
+ public byte[] szVideoPath = new byte[256]; // 违章关联视频FTP上传路径
+ public SCENE_IMAGE_INFO_EX stuSceneImage; // 全景广角图
+ public NET_IMAGE_INFO_EX2[] stuImageInfo = (NET_IMAGE_INFO_EX2[])new NET_IMAGE_INFO_EX2().toArray(32); //图片信息数组
+ public int nImageInfoNum; // 图片信息个数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public DEV_EVENT_LEFT_INFO()
+ {
+ for (int i = 0; i < DetectRegion.length; ++i) {
+ DetectRegion[i] = new NET_POINT();
+ }
+ }
+ }
+
+ // 事件类型 EVENT_IVS_RIOTERDETECTION (聚众事件)对应的数据块描述信息
+ public static class DEV_EVENT_RIOTERL_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nObjectNum; // 检测到的物体个数
+ public NET_MSG_OBJECT[] stuObjectIDs = new NET_MSG_OBJECT[NET_MAX_OBJECT_LIST]; // 检测到的物体列表
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public byte bEventAction;
+ public byte[] byReserved = new byte[2]; // 保留字节
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public NET_POINT[] DetectRegion = new NET_POINT[NET_MAX_DETECT_REGION_NUM]; // 规则检测区域
+
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public int nSourceIndex; // 事件源设备上的index,-1表示数据无效
+ public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ public int nOccurrenceCount; // 事件触发累计次数
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public NET_EXTENSION_INFO stuExtensionInfo; // 扩展信息
+ public byte[] szSourceID=new byte[32]; // 事件关联ID。应用场景是同一个物体或者同一张图片做不同分析,产生的多个事件的SourceID相同
+ // 缺省时为空字符串,表示无此信息
+ // 格式:类型+时间+序列号,其中类型2位,时间14位,序列号5位
+ public NET_IMAGE_INFO_EX2[] stuImageInfo = (NET_IMAGE_INFO_EX2[])new NET_IMAGE_INFO_EX2().toArray(32);// 图片信息数组
+ public int nImageInfoNum; // 图片信息个数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] bReserved = new byte[328]; // 保留字节,留待扩展.
+
+ public DEV_EVENT_RIOTERL_INFO()
+ {
+ for (int i = 0; i < stuObjectIDs.length; ++i) {
+ stuObjectIDs[i] = new NET_MSG_OBJECT();
+ }
+
+ for (int i = 0; i < DetectRegion.length; ++i) {
+ DetectRegion[i] = new NET_POINT();
+ }
+ }
+ }
+
+ // 事件类型EVENT_IVS_TAKENAWAYDETECTION(物品搬移事件)对应的数据块描述信息
+ public static class DEV_EVENT_TAKENAWAYDETECTION_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public NET_POINT[] DetectRegion = new NET_POINT[NET_MAX_DETECT_REGION_NUM]; // 规则检测区域
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public byte bEventAction;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public int nSourceIndex; // 事件源设备上的index,-1表示数据无效
+ public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ public int nOccurrenceCount; // 事件触发累计次数
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public short nPreserID; // 事件触发的预置点号,从1开始(没有表示未知)
+ public byte[] szPresetName = new byte[64]; // 事件触发的预置名称
+ public NET_EXTENSION_INFO stuExtensionInfo; // 扩展信息
+ public NET_IMAGE_INFO_EX2[] stuImageInfo = (NET_IMAGE_INFO_EX2[])new NET_IMAGE_INFO_EX2().toArray(32);// 图片信息数组
+ public int nImageInfoNum; // 图片信息个数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] bReserved = new byte[418]; // 保留字节,留待扩展.
+
+ public DEV_EVENT_TAKENAWAYDETECTION_INFO()
+ {
+ for (int i = 0; i < DetectRegion.length; ++i) {
+ DetectRegion[i] = new NET_POINT();
+ }
+ }
+ }
+
+ // 事件类型EVENT_IVS_PARKINGDETECTION(非法停车事件)对应的数据块描述信息
+ public static class DEV_EVENT_PARKINGDETECTION_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public NET_POINT[] DetectRegion = new NET_POINT[NET_MAX_DETECT_REGION_NUM]; // 规则检测区域
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public byte bEventAction;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public int nSourceIndex; // 事件源设备上的index,-1表示数据无效
+ public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ public int nOccurrenceCount; // 事件触发累计次数
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public NET_EXTENSION_INFO stuExtensionInfo; // 扩展信息
+ public byte[] szCustomParkNo=new byte[64]; // 车位名称
+ public NET_PRESET_POSITION stPosition; // 预置点的坐标和放大倍数 是一个数组,每个成员是int类型
+ // 第一个参数是水平坐标,范围[0,3599],表示0度到359.9度,度数扩大10倍表示。
+ // 第二个参数是垂直坐标,范围[-1800,1800],表示-180.0度到+180.0度,度数扩大10倍表示。
+ // 第三个参数是放大参数,范围[0,127],表示最小倍到最大倍的变倍位置
+ public int nCurChannelHFOV; // 当前报警通道的横向视场角,单位度,实际角度乘以100
+ public int nCurChannelVFOV; // 当前报警通道的纵向视场角,单位度,实际角度乘以100
+ public SCENE_IMAGE_INFO_EX stuSceneImage; // 全景广角图
+ public NET_IMAGE_INFO_EX2[] stuImageInfo = (NET_IMAGE_INFO_EX2[])new NET_IMAGE_INFO_EX2().toArray(32);// 图片信息数组
+ public int nImageInfoNum; // 图片信息个数
+ public int nObjectBoatsNum; // 船只物体个数
+ public NET_BOAT_OBJECT[] stuBoatObjects = new NET_BOAT_OBJECT[100]; // 船只物品信息
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] bReserved = new byte[400]; // 保留字节,留待扩展.
+ public DEV_EVENT_PARKINGDETECTION_INFO()
+ {
+ for (int i = 0; i < DetectRegion.length; ++i) {
+ DetectRegion[i] = new NET_POINT();
+ }
+ for (int i = 0; i < stuBoatObjects.length; i++) {
+ stuBoatObjects[i] = new NET_BOAT_OBJECT();
+ }
+ }
+ }
+
+ // 事件类型EVENT_IVS_ABNORMALRUNDETECTION(异常奔跑事件)对应的数据块描述信息
+ public static class DEV_EVENT_ABNORMALRUNDETECTION_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public double dbSpeed; // 物体运动速度,km/h
+ public double dbTriggerSpeed; // 触发速度,km/h
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public NET_POINT[] DetectRegion = new NET_POINT[NET_MAX_DETECT_REGION_NUM]; // 规则检测区域
+ public int nTrackLineNum; // 物体运动轨迹顶点数
+ public NET_POINT[] TrackLine = new NET_POINT[NET_MAX_TRACK_LINE_NUM]; // 物体运动轨迹
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public byte bEventAction;
+ public byte bRunType; // 异常奔跑类型, 0-快速奔跑, 1-突然加速, 2-突然减速
+ public byte[] byReserved = new byte[1];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public int nSourceIndex; // 事件源设备上的index,-1表示数据无效
+ public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ public int nOccurrenceCount; // 事件触发累计次数
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public Pointer pstuImageInfo; // 图片信息数组 ,结构体NET_IMAGE_INFO_EX2数组指针
+ public int nImageInfoNum; // 图片信息个数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] bReserved = new byte[604]; // 保留字节,留待扩展.
+
+ public DEV_EVENT_ABNORMALRUNDETECTION_INFO()
+ {
+ for (int i = 0; i < DetectRegion.length; ++i) {
+ DetectRegion[i] = new NET_POINT();
+ }
+
+ for (int i = 0; i < TrackLine.length; ++i) {
+ TrackLine[i] = new NET_POINT();
+ }
+ }
+ }
+
+ // 设置停车信息,对应CTRLTYPE_CTRL_SET_PARK_INFO命令参数
+ public static class NET_CTRL_SET_PARK_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public byte[] szPlateNumber = new byte[MAX_PLATE_NUMBER_LEN]; // 车牌号码
+ public int nParkTime; // 停车时长,单位:分钟
+ public byte[] szMasterofCar = new byte[MAX_MASTER_OF_CAR_LEN]; // 车主姓名
+ public byte[] szUserType = new byte[MAX_USER_TYPE_LEN]; // 用户类型,非通用,用于出入口抓拍一体机
+ // monthlyCardUser表示月卡用户,yearlyCardUser表示年卡用户,longTimeUser表示长期用户,casualUser表示临时用户/Visitor
+ public int nRemainDay; // 到期天数
+ public byte[] szParkCharge = new byte[MAX_PARK_CHARGE_LEN]; // 停车费
+ public int nRemainSpace; // 停车库余位数
+ public int nPassEnable; // 0:不允许车辆通过 1:允许车辆通过
+ public NET_TIME stuInTime; // 车辆入场时间
+ public NET_TIME stuOutTime; // 车辆出场时间
+ public int emCarStatus; // 过车状态 详见EM_CARPASS_STATUS
+ public byte[] szCustom = new byte[MAX_CUSTOM_LEN]; // 自定义显示字段,默认空
+ public byte[] szSubUserType = new byte[MAX_SUB_USER_TYPE_LEN]; // 用户类型(szUserType字段)的子类型
+ public byte[] szRemarks = new byte[MAX_REMARKS_LEN]; // 备注信息
+ public byte[] szResource = new byte[MAX_RESOURCE_LEN]; // 资源文件(视频或图片)视频支持:mp4格式; 图片支持:BMP/jpg/JPG/jpeg/JPEG/png/PNG格式
+ public int nParkTimeout; // 停车超时时间,单位分钟。为0表示未超时,不为0表示超时时间。
+ public NET_CTRL_SET_PARK_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 过车状态
+ public static class EM_CARPASS_STATUS extends SdkStructure
+ {
+ public static final int EM_CARPASS_STATUS_UNKNOWN = 0; // 未知状态
+ public static final int EM_CARPASS_STATUS_CARPASS = 1; // 过车状态
+ public static final int EM_CARPASS_STATUS_NORMAL = 2; // 无车状态
+ }
+
+ // 事件类型EVENT_IVS_MOVEDETECTION(移动事件)对应的数据块描述信息
+ public static class DEV_EVENT_MOVE_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public NET_POINT[] DetectRegion = new NET_POINT[NET_MAX_DETECT_REGION_NUM]; // 规则检测区域
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public int nSourceIndex; // 事件源设备上的index,-1表示数据无效
+ public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ public int nTrackLineNum; // 物体运动轨迹顶点数
+ public NET_POINT[] stuTrackLine = new NET_POINT[NET_MAX_TRACK_LINE_NUM]; // 物体运动轨迹
+ public int nOccurrenceCount; // 事件触发累计次数
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public NET_EXTENSION_INFO stuExtensionInfo; // 扩展信息
+ public int nAnimalNum; // 动物个数
+ public Pointer pstuAnimals; // 动物信息,结构体VA_OBJECT_ANIMAL数组指针
+ public int nMsgObjArrayCount; // 检测到的物体信息个数
+ public Pointer pMsgObjArray; // 检测到的物体信息数组指针,结构体NET_MSG_OBJECT_EX数组指针
+ public int nImageNum; // 图片信息个数
+ public Pointer pImageArray; // 图片信息数组,结构体NET_IMAGE_INFO_EX2数组指针
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] bReserved = new byte[236]; // 保留字节,留待扩展.
+ public DEV_EVENT_MOVE_INFO()
+ {
+ for (int i = 0; i < DetectRegion.length; ++i) {
+ DetectRegion[i] = new NET_POINT();
+ }
+
+ for (int i = 0; i < stuTrackLine.length; ++i) {
+ stuTrackLine[i] = new NET_POINT();
+ }
+ }
+ }
+
+ // 监测控制和数据采集设备的点位表路径信息输入参数, 查询条件
+ public static class NET_IN_SCADA_POINT_LIST_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public byte[] szDevType = new byte[NET_COMMON_STRING_64]; // 设备类型
+
+ public NET_IN_SCADA_POINT_LIST_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 点位表路径信息
+ public static class NET_SCADA_POINT_LIST extends SdkStructure
+ {
+ public int dwSize;
+ public int nIndexValidNum; // 有效的配置下标个数
+ public int[] nIndex = new int[MAX_SCADA_POINT_LIST_INDEX]; // SCADADev配置下标值, 从0开始
+ public byte[] szPath = new byte[NET_COMMON_STRING_256]; // 点表的完整路径
+
+ public NET_SCADA_POINT_LIST()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 监测控制和数据采集设备的点位表路径信息输出参数, 查询结果
+ public static class NET_OUT_SCADA_POINT_LIST_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int nList; // 有效点位表路径信息个数
+ public NET_SCADA_POINT_LIST[] stuList = new NET_SCADA_POINT_LIST[MAX_SCADA_POINT_LIST_INFO_NUM]; // 点位表路径信息
+
+ public NET_OUT_SCADA_POINT_LIST_INFO()
+ {
+ this.dwSize = this.size();
+
+ for (int i = 0; i < stuList.length; ++i) {
+ stuList[i] = new NET_SCADA_POINT_LIST();
+ }
+ }
+ }
+
+ // 监测控制和数据采集设备的点位表信息, (对应 DH_DEVSTATE_SCADA_POINT_LIST 命令)
+ public static class NET_SCADA_POINT_LIST_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public NET_IN_SCADA_POINT_LIST_INFO stuIn; // 查询条件
+ public NET_OUT_SCADA_POINT_LIST_INFO stuOut; // 查询结果
+
+ public NET_SCADA_POINT_LIST_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // SCADA监测点位查询条件
+ public static class NET_IN_SCADA_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int emPointType; // 待查询的点位类型,详见EM_NET_SCADA_POINT_TYPE
+
+ public NET_IN_SCADA_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 点表信息
+ public static class NET_SCADA_POINT_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public byte[] szDevName = new byte[NET_COMMON_STRING_64]; // 设备名称
+ public int nYX; // 有效遥信个数
+ public int[] anYX = new int[MAX_SCADA_YX_NUM]; // 遥信信息
+ public int nYC; // 有效遥测个数
+ public float[] afYC = new float[MAX_SCADA_YC_NUM]; // 遥测信息
+
+ public NET_SCADA_POINT_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // SCADA监测点位查询结果
+ public static class NET_OUT_SCADA_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int nPointInfoNum; // 有效点表个数
+ public NET_SCADA_POINT_INFO[] stuPointInfo = new NET_SCADA_POINT_INFO[MAX_SCADA_POINT_INFO_NUM]; // 点表信息
+
+ public NET_OUT_SCADA_INFO()
+ {
+ this.dwSize = this.size();
+
+ for (int i = 0; i < stuPointInfo.length; ++i) {
+ stuPointInfo[i] = new NET_SCADA_POINT_INFO();
+ }
+ }
+ }
+
+ // 监测控制和数据采集设备的监测点位信息(对应 DH_DEVSTATE_SCADA_INFO 命令)
+ public static class NET_SCADA_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public NET_IN_SCADA_INFO stuIn; // 查询条件
+ public NET_OUT_SCADA_INFO stuOut; // 查询结果
+
+ public NET_SCADA_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // SCADA能力名称
+ public static class EM_NET_SCADA_CAPS_TYPE extends SdkStructure
+ {
+ public static final int EM_NET_SCADA_CAPS_TYPE_UNKNOWN = 0;
+ public static final int EM_NET_SCADA_CAPS_TYPE_ALL = 1; // 所有类型
+ public static final int EM_NET_SCADA_CAPS_TYPE_DEV = 2; // DevInfo
+ }
+
+ // 监测控制和数据采集设备能力信息查询条件
+ public static class NET_IN_SCADA_CAPS extends SdkStructure
+ {
+ public int dwSize;
+ public int emType; // 查询类型,详见EM_NET_SCADA_CAPS_TYPE
+
+ public NET_IN_SCADA_CAPS()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 监测控制和数据采集设备类型能力信息
+ public static class NET_OUT_SCADA_CAPS_ITEM extends SdkStructure
+ {
+ public int dwSize;
+ public byte[] szDevType = new byte[NET_COMMON_STRING_32]; // 设备类型
+ public int nValidName; // 有效设备名称个数
+ public SCADA_DEVICE_NAME[] stuScadaDevNames = new SCADA_DEVICE_NAME[MAX_NET_SCADA_CAPS_NAME]; // 设备名称, 唯一标示设备
+
+ public NET_OUT_SCADA_CAPS_ITEM()
+ {
+ this.dwSize = this.size();
+
+ for (int i = 0; i < stuScadaDevNames.length; ++i) {
+ stuScadaDevNames[i] = new SCADA_DEVICE_NAME();
+ }
+ }
+ }
+
+ public static class SCADA_DEVICE_NAME extends SdkStructure
+ {
+ public byte[] szDevName = new byte[NET_COMMON_STRING_32]; // 数据采集设备名称
+ }
+
+ // 监测控制和数据采集设备能力信息查询结果
+ public static class NET_OUT_SCADA_CAPS extends SdkStructure
+ {
+ public int dwSize;
+ public int nValidType; // 有效设备类型个数
+ public NET_OUT_SCADA_CAPS_ITEM[] stuItems = new NET_OUT_SCADA_CAPS_ITEM[MAX_NET_SCADA_CAPS_TYPE]; // 最多16个类型
+
+ public NET_OUT_SCADA_CAPS()
+ {
+ this.dwSize = this.size();
+
+ for (int i = 0; i < stuItems.length; ++i) {
+ stuItems[i] = new NET_OUT_SCADA_CAPS_ITEM();
+ }
+ }
+ }
+
+ // 监测控制和数据采集设备能力信息(对应 DH_DEVSTATE_SCADA_CAPS 命令)
+ public static class NET_SCADA_CAPS extends SdkStructure
+ {
+ public int dwSize;
+ public NET_IN_SCADA_CAPS stuIn; // 查询条件
+ public NET_OUT_SCADA_CAPS stuOut; // 查询结果
+
+ public NET_SCADA_CAPS()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 点位信息(通过设备、传感器点位获取)
+ public static class NET_SCADA_POINT_BY_ID_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int emType; // 点位类型,详见EM_NET_SCADA_POINT_TYPE
+ public byte[] szID = new byte[NET_COMMON_STRING_64]; // 监测点位ID
+ public int nMeasuredVal; // 点位类型为YX时有效
+ public float fMeasureVal; // 点位类型为YC时有效
+ public int nSetupVal; // 点位类型为YK时有效
+ public float fSetupVal; // 点位类型为YT时有效
+ public int nStatus; // 数据状态, -1:未知, 0:正常, 1:1级告警, 2:2级告警, 3:3级告警, 4:4级告警, 5:操作事件, 6:无效数据
+ public NET_TIME stuTime; // 记录时间
+ public byte[] szPointName=new byte[32]; // 点位名称
+ public NET_SCADA_POINT_BY_ID_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 通过设备、获取监测点位信息(对应 NET_SCADA_INFO_BY_ID)
+ public static class NET_SCADA_INFO_BY_ID extends SdkStructure
+ {
+ public int dwSize;
+ public byte[] szSensorID = new byte[NET_COMMON_STRING_64]; // 输入参数, 探测器ID
+ public int nIDs; // 输入参数, 有效点位ID个数
+ public SCADA_ID_EX[] stuIDs = new SCADA_ID_EX[MAX_SCADA_ID_OF_SENSOR_NUM]; // 输入参数, 点位ID
+ public int bIsHandle; // 输入参数,返回数据是否经过处理(无效数据过滤等):"false":未处理,"true":处理
+ public int nMaxCount; // 输入参数, pstuInfo对应数组个数
+ public int nRetCount; // 输出参数, pstInfo实际返回有效个数, 可能大于用户分配个数nMaxCount
+ public Pointer pstuInfo; // 输入输出参数, 用户分配缓存,大小为sizeof(NET_SCADA_POINT_BY_ID_INFO)*nMaxCount,指向NET_SCADA_POINT_BY_ID_INFO
+
+ public NET_SCADA_INFO_BY_ID()
+ {
+ this.dwSize = this.size();
+
+ for (int i = 0; i < stuIDs.length; ++i) {
+ stuIDs[i] = new SCADA_ID_EX();
+ }
+ }
+ }
+
+ public static class SCADA_ID_EX extends SdkStructure
+ {
+ public byte[] szID = new byte[NET_COMMON_STRING_64]; // 监测点位ID
+ }
+
+ // 监测设备信息
+ public static class NET_SCADA_DEVICE_ID_INFO extends SdkStructure
+ {
+ public byte[] szDeviceID = new byte[NET_COMMON_STRING_64]; // 设备id
+ public byte[] szDevName = new byte[NET_COMMON_STRING_64]; // 设备名称, 和CFG_SCADA_DEV_INFO配置中的szDevName一致
+ public byte[] reserve = new byte[1024];
+ }
+
+ // 获取当前主机所接入的外部设备ID
+ public static class NET_SCADA_DEVICE_LIST extends SdkStructure
+ {
+ public int dwSize;
+ public int nMax; // 用户分配的结构体个数
+ public int nRet; // 设备实际返回的有效结构体个数
+ public Pointer pstuDeviceIDInfo; // 监测设备信息,用户分配内存,大小为sizeof(NET_SCADA_DEVICE_ID_INFO)*nMax,指向NET_SCADA_DEVICE_ID_INFO
+
+ public NET_SCADA_DEVICE_LIST()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 点位阈值信息
+ public static class NET_SCADA_ID_THRESHOLD_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int emPointType; // 点位类型,详见EM_NET_SCADA_POINT_TYPE
+ public byte[] szID = new byte[NET_COMMON_STRING_32]; // 点位ID
+ public float fThreshold; // 告警门限
+ public float fAbsoluteValue; // 绝对阈值
+ public float fRelativeValue; // 相对阈值
+ public int nStatus; // 数据状态, -1:未知, 0:正常, 1:1级告警, 2:2级告警, 3:3级告警, 4:4级告警, 5:操作事件, 6:无效数据
+
+ public NET_SCADA_ID_THRESHOLD_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // CLIENT_SCADAGetThreshold输入参数
+ public static class NET_IN_SCADA_GET_THRESHOLD extends SdkStructure
+ {
+ public int dwSize;
+ public byte[] szDeviceID = new byte[NET_COMMON_STRING_64]; // 外接设备id
+ public int nIDs; // 有效监测点位个数
+ public SCADA_ID[] stuIDs = new SCADA_ID[MAX_SCADA_ID_NUM]; // 待获取的监测点位ID
+
+ public NET_IN_SCADA_GET_THRESHOLD()
+ {
+ this.dwSize = this.size();
+
+ for (int i = 0; i < stuIDs.length; ++i) {
+ stuIDs[i] = new SCADA_ID();
+ }
+ }
+ }
+
+ public static class SCADA_ID extends SdkStructure
+ {
+ public byte[] szID = new byte[NET_COMMON_STRING_32]; // 监测点位ID
+ }
+
+ // CLIENT_SCADAGetThreshold输出参数
+ public static class NET_OUT_SCADA_GET_THRESHOLD extends SdkStructure
+ {
+ public int dwSize;
+ public int nMax; // 用户分配的点位阈值信息个数
+ public int nRet; // 实际返回的点位阈值信息
+ public Pointer pstuThresholdInfo; // 点位阈值信息, 用户分配内存,大小为sizeof(NET_SCADA_ID_THRESHOLD_INFO)*nMax,指向NET_SCADA_ID_THRESHOLD_INFO
+
+ public NET_OUT_SCADA_GET_THRESHOLD()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+ // CLIENT_SCADASetThreshold输入参数
+ public static class NET_IN_SCADA_SET_THRESHOLD extends SdkStructure
+ {
+ public int dwSize;
+ public byte[] szDeviceID = new byte[NET_COMMON_STRING_64]; // 外接设备id
+ public int nMax; // 用户分配的点位阈值信息个数
+ public Pointer pstuThresholdInfo; // 点位阈值信息, 用户分配内存,大小为sizeof(NET_SCADA_ID_THRESHOLD_INFO)*nMax,指向NET_SCADA_ID_THRESHOLD_INFO
+
+ public NET_IN_SCADA_SET_THRESHOLD()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // CLIENT_SCADASetThreshold输出参数
+ public static class NET_OUT_SCADA_SET_THRESHOLD extends SdkStructure
+ {
+ public int dwSize;
+ public int nSuccess; // 有效的存放设置阈值成功的id个数
+ public SCADA_ID[] stuSuccessIDs = new SCADA_ID[MAX_SCADA_ID_NUM]; // 设置阈值成功的id,用户分配内存
+ public int nFail; // 用户分配的存放设置阈值失败的id个数
+ public SCADA_ID[] stuFailIDs = new SCADA_ID[MAX_SCADA_ID_NUM]; // 设置阈值失败的id, 用户分配内存
+
+ public NET_OUT_SCADA_SET_THRESHOLD()
+ {
+ this.dwSize = this.size();
+
+ for (int i = 0; i < stuSuccessIDs.length; ++i) {
+ stuSuccessIDs[i] = new SCADA_ID();
+ }
+
+ for (int i = 0; i < stuFailIDs.length; ++i) {
+ stuFailIDs[i] = new SCADA_ID();
+ }
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+ // CLIENT_StartFindSCADA输入参数
+ public static class NET_IN_SCADA_START_FIND extends SdkStructure
+ {
+ public int dwSize;
+ public NET_TIME stuStartTime; // 开始时间, 必填
+ public int bEndTime; // 是否限制结束时间, TRUE: 必填stuEndTime, FLASE: 不限制结束时间
+ public NET_TIME stuEndTime; // 结束时间
+ public byte[] szDeviceID = new byte[NET_COMMON_STRING_64]; // DeviceID, 必填
+ public byte[] szID = new byte[NET_COMMON_STRING_32]; // 监测点位ID, 必填
+ public int nIDsNum; // 监测点ID数组长度
+ public SCADA_ID[] stuIDs = new SCADA_ID[32]; // 监控点ID号数组,SDT离网供电扩展字段
+
+ public NET_IN_SCADA_START_FIND()
+ {
+ this.dwSize = this.size();
+
+ for (int i = 0; i < stuIDs.length; ++i) {
+ stuIDs[i] = new SCADA_ID();
+ }
+ }
+ }
+
+ // CLIENT_StartFindSCADA输出参数
+ public static class NET_OUT_SCADA_START_FIND extends SdkStructure
+ {
+ public int dwSize;
+ public int dwTotalCount; // 符合查询条件的总数
+
+ public NET_OUT_SCADA_START_FIND()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // CLIENT_DoFindSCADA输入参数
+ public static class NET_IN_SCADA_DO_FIND extends SdkStructure
+ {
+ public int dwSize;
+ public int nStartNo; // 起始序号
+ public int nCount; // 本次欲获得结果的个数
+
+ public NET_IN_SCADA_DO_FIND()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // CLIENT_DoFindSCADA输出参数
+ public static class NET_OUT_SCADA_DO_FIND extends SdkStructure
+ {
+ public int dwSize;
+ public int nRetNum; // 本次查询到的个数
+ public Pointer pstuInfo; // 查询结果, 用户分配内存,大小为sizeof(NET_SCADA_POINT_BY_ID_INFO)*nMaxNum,指向NET_SCADA_POINT_BY_ID_INFO
+ public int nMaxNum; // 用户分配内存的个数
+
+ public NET_OUT_SCADA_DO_FIND()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 监控点值设置参数
+ public static class NET_SCADA_POINT_SET_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int emType; // 监控点位类型,取YK、YT两种类型,详见EM_NET_SCADA_POINT_TYPE
+ public byte[] szPointID = new byte[NET_COMMON_STRING_64]; // 监控点位ID
+ public int nSetupVal; // 点位类型为YK时有效
+ public float fSetupVal; // 点位类型为YT时有效
+
+ public NET_SCADA_POINT_SET_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 监控点值设置参数列表,CLIENT_SetSCADAInfo()接口输入参数
+ public static class NET_IN_SCADA_POINT_SET_INFO_LIST extends SdkStructure
+ {
+ public int dwSize;
+ public byte[] szDevID = new byte[NET_COMMON_STRING_32]; // 设备ID
+ public int nPointNum; // 监控点个数
+ public NET_SCADA_POINT_SET_INFO[] stuList = new NET_SCADA_POINT_SET_INFO[MAX_SCADA_ID_OF_SENSOR_NUM]; // 监控点列表信息
+
+ public NET_IN_SCADA_POINT_SET_INFO_LIST()
+ {
+ this.dwSize = this.size();
+
+ for (int i = 0; i < stuList.length; ++i) {
+ stuList[i] = new NET_SCADA_POINT_SET_INFO();
+ }
+ }
+ }
+
+ // 设置监控点值返回的结果列表,CLIENT_SetSCADAInfo()接口输出参数
+ public static class NET_OUT_SCADA_POINT_SET_INFO_LIST extends SdkStructure
+ {
+ public int dwSize;
+ public int nSuccess; // 有效的控制或调节成功的ID个数
+ public SCADA_ID[] stuSuccessIDs = new SCADA_ID[MAX_SCADA_ID_OF_SENSOR_NUM]; // 控制或调节成功的ID的列表
+ public int nFail; // 有效的控制或调节失败的ID个数
+ public SCADA_ID[] stuFailIDs = new SCADA_ID[MAX_SCADA_ID_OF_SENSOR_NUM]; // 控制或调节失败的ID的列表
+
+ public NET_OUT_SCADA_POINT_SET_INFO_LIST()
+ {
+ this.dwSize = this.size();
+
+ for (int i = 0; i < stuSuccessIDs.length; ++i) {
+ stuSuccessIDs[i] = new SCADA_ID();
+ }
+
+ for (int i = 0; i < stuFailIDs.length; ++i) {
+ stuFailIDs[i] = new SCADA_ID();
+ }
+ }
+ }
+
+ // 获取阈值,pInParam与pOutParam内存由用户申请释放
+ public boolean CLIENT_SCADAGetThreshold(LLong lLoginID, NET_IN_SCADA_GET_THRESHOLD pInParam, NET_OUT_SCADA_GET_THRESHOLD pOutParam, int nWaitTime);
+
+ // 设置阈值,pInParam与pOutParam内存由用户申请释放
+ public boolean CLIENT_SCADASetThreshold(LLong lLoginID, NET_IN_SCADA_SET_THRESHOLD pInParam, NET_OUT_SCADA_SET_THRESHOLD pOutParam, int nWaitTime);
+
+ // 开始查询SCADA点位历史数据,pInParam与pOutParam内存由用户申请释放
+ public LLong CLIENT_StartFindSCADA(LLong lLoginID, NET_IN_SCADA_START_FIND pInParam, NET_OUT_SCADA_START_FIND pOutParam, int nWaitTime);
+
+ // 获取SCADA点位历史数据,pInParam与pOutParam内存由用户申请释放
+ public boolean CLIENT_DoFindSCADA(LLong lFindHandle, NET_IN_SCADA_DO_FIND pInParam, NET_OUT_SCADA_DO_FIND pOutParam, int nWaitTime);
+
+ // 停止查询SCADA点位历史数据
+ public boolean CLIENT_StopFindSCADA(LLong lFindHandle);
+
+ // 设置监测点位信息,pInParam与pOutParam内存由用户申请释放
+ public boolean CLIENT_SCADASetInfo(LLong lLoginID, NET_IN_SCADA_POINT_SET_INFO_LIST pInParam, NET_OUT_SCADA_POINT_SET_INFO_LIST pOutParam, int nWaitTime);
+
+ public static class CFG_SCADA_DEV_INFO extends SdkStructure
+ {
+ public int bEnable; // 是否启用
+ public byte[] szDevType = new byte[CFG_COMMON_STRING_64]; // 设备类型
+ public byte[] szDevName = new byte[CFG_COMMON_STRING_64]; // 设备名称, 唯一标示设备用
+ public int nSlot; // 虚拟槽位号, 详见AlarmSlotBond配置
+ public int nLevel; // 如果Slot绑定的是NetCollection类型的话,该字段为-1
+ public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动
+ }
+
+ // 高频次报警
+ public static class CFG_HIGH_FREQUENCY extends SdkStructure
+ {
+ public int nPeriod; // 统计周期, 以秒为单位, 默认30分钟(1800s)
+ public int nMaxCount; // 在对应统计周期内最大允许上报报警数
+ }
+
+ // 告警屏蔽规则配置(对应 CFG_CMD_ALARM_SHIELD_RULE)
+ public static class CFG_ALARM_SHIELD_RULE_INFO extends SdkStructure
+ {
+ public CFG_HIGH_FREQUENCY stuHighFreq; // 高频次报警, 在一定周期内允许上报的报警次数,以此过滤对于报警的频繁上报导致信息干扰
+ }
+
+ // 获取车位锁状态接口,CLIENT_GetParkingLockState 入参
+ public static class NET_IN_GET_PARKINGLOCK_STATE_INFO extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+
+ public NET_IN_GET_PARKINGLOCK_STATE_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 车位锁状态
+ public static class EM_STATE_TYPE extends SdkStructure
+ {
+ public static final int EM_STATE_TYPE_UNKNOW = 0; // 未知
+ public static final int EM_STATE_TYPE_LOCKRISE = 1; // 车位锁升起
+ public static final int EM_STATE_TYPE_LOCKDOWN = 2; // 车位锁降下
+ public static final int EM_STATE_TYPE_LOCKERROR = 3; // 车位锁异常
+ }
+
+ // 车位锁状态通信接口参数
+ public static class NET_STATE_LIST_INFO extends SdkStructure
+ {
+ public int nLane; // 车位号
+ public int emState; // 车位锁状态,详见EM_STATE_TYPE
+ public byte[] byReserved = new byte[256]; // 保留
+ }
+
+ // 获取车位锁状态, CLIENT_GetParkingLockState 出参
+ public static class NET_OUT_GET_PARKINGLOCK_STATE_INFO extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nStateListNum; // 车位锁状态个数
+ public NET_STATE_LIST_INFO[] stuStateList = new NET_STATE_LIST_INFO[MAX_PARKINGLOCK_STATE_NUM]; // 车位锁状态
+
+ public NET_OUT_GET_PARKINGLOCK_STATE_INFO()
+ {
+ this.dwSize = this.size();
+
+ for (int i = 0; i < stuStateList.length; ++i) {
+ stuStateList[i] = new NET_STATE_LIST_INFO();
+ }
+ }
+ }
+
+ // 设置车位锁状态接口,CLIENT_SetParkingLockState 入参
+ public static class NET_IN_SET_PARKINGLOCK_STATE_INFO extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nStateListNum; // 车位锁状态个数
+ public NET_STATE_LIST_INFO[] stuStateList = new NET_STATE_LIST_INFO[MAX_PARKINGLOCK_STATE_NUM]; // 车位锁状态
+ public int nControlType; // 控制车位锁状态类型, 0:未知, 1:平台正常控制, 2:平台手动控制
+
+ public NET_IN_SET_PARKINGLOCK_STATE_INFO()
+ {
+ this.dwSize = this.size();
+
+ for (int i = 0; i < stuStateList.length; ++i) {
+ stuStateList[i] = new NET_STATE_LIST_INFO();
+ }
+ }
+ }
+
+ // 设置车位锁状态接口,CLIENT_SetParkingLockState 出参
+ public static class NET_OUT_SET_PARKINGLOCK_STATE_INFO extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+
+ public NET_OUT_SET_PARKINGLOCK_STATE_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 获取车位锁状态
+ public boolean CLIENT_GetParkingLockState(LLong lLoginID, NET_IN_GET_PARKINGLOCK_STATE_INFO pstInParam, NET_OUT_GET_PARKINGLOCK_STATE_INFO pstOutParam, int nWaitTime);
+
+ // 设置车位锁状态
+ public boolean CLIENT_SetParkingLockState(LLong lLoginID, NET_IN_SET_PARKINGLOCK_STATE_INFO pstInParm, NET_OUT_SET_PARKINGLOCK_STATE_INFO pstOutParam, int nWaitTIme);
+
+ // 刻录配置
+ public static class CFG_JUDICATURE_INFO extends SdkStructure
+ {
+ public byte[] szDiskPassword = new byte[MAX_PASSWORD_LEN]; // 光盘密码(废弃, 使用szPassword和nPasswordLen)
+ public byte[] szCaseNo = new byte[MAX_OSD_SUMMARY_LEN]; // 案件编号
+ public int bCaseNoOsdEn; // 案件编号叠加使能
+ public byte[] szCaseTitle = new byte[MAX_OSD_SUMMARY_LEN]; // 案件名称
+ public int bCaseTitleOsdEn; // 案件名称叠加使能
+ public byte[] szOfficer = new byte[MAX_OSD_SUMMARY_LEN]; // 办案人员
+ public int bOfficerOsdEn; // 办案人员叠加使能
+ public byte[] szLocation = new byte[MAX_OSD_SUMMARY_LEN]; // 办案地点
+ public int bLocationOsdEn; // 办案地点叠加使能
+ public byte[] szRelatedMan = new byte[MAX_OSD_SUMMARY_LEN]; // 涉案人员
+ public int bRelatedManOsdEn; // 涉案人员叠加使能
+ public byte[] szDiskNo = new byte[MAX_OSD_SUMMARY_LEN]; // 光盘编号
+ public int bDiskNoOsdEn; // 光盘编号叠加使能
+
+ public int bCustomCase; // TRUE:自定义案件信息,FALSE: 上边szCaseNo等字段有效
+ public int nCustomCase; // 实际CFG_CUSTOMCASE个数
+ public CFG_CUSTOMCASE[] stuCustomCases = new CFG_CUSTOMCASE[MAX_CUSTOMCASE_NUM]; // 自定义案件信息
+
+ public int bDataCheckOsdEn; // 光盘刻录数据校验配置 叠加使能
+ public int bAttachFileEn; // 附件上传使能
+ public byte[] szPassword = new byte[MAX_PASSWORD_LEN]; // 密码, 刻录光盘时、配置读保护密码
+ public int nPasswordLen; // 密码长度
+ public CFG_NET_TIME stuStartTime; // 片头信息叠加开始时间
+ public int nPeriod; // 片头信息叠加时间长度,单位:分钟
+
+ public CFG_JUDICATURE_INFO()
+ {
+ for (int i = 0; i < stuCustomCases.length; ++i) {
+ stuCustomCases[i] = new CFG_CUSTOMCASE();
+ }
+ }
+ }
+
+ // 自定义案件信息
+ public static class CFG_CUSTOMCASE extends SdkStructure
+ {
+ public byte[] szCaseTitle = new byte[MAX_OSD_TITLE_LEN]; // 案件名称
+ public byte[] szCaseContent = new byte[MAX_OSD_SUMMARY_LEN]; // 案件名称
+ public int bCaseNoOsdEn; // 案件编号叠加使能
+ }
+
+ // 叠加类型
+ public static class NET_EM_OSD_BLEND_TYPE extends SdkStructure
+ {
+ public static final int NET_EM_OSD_BLEND_TYPE_UNKNOWN = 0; // 未知叠加类型
+ public static final int NET_EM_OSD_BLEND_TYPE_MAIN = 1; // 叠加到主码流
+ public static final int NET_EM_OSD_BLEND_TYPE_EXTRA1 = 2; // 叠加到辅码流1
+ public static final int NET_EM_OSD_BLEND_TYPE_EXTRA2 = 3; // 叠加到辅码流2
+ public static final int NET_EM_OSD_BLEND_TYPE_EXTRA3 = 4; // 叠加到辅码流3
+ public static final int NET_EM_OSD_BLEND_TYPE_SNAPSHOT = 5; // 叠加到抓图
+ public static final int NET_EM_OSD_BLEND_TYPE_PREVIEW = 6; // 叠加到预览视频
+ }
+
+ // 编码物件-通道标题
+ public static class NET_OSD_CHANNEL_TITLE extends SdkStructure
+ {
+ public int dwSize;
+ public int emOsdBlendType; // 叠加类型,不管是获取还是设置都要设置该字段,详见NET_EM_OSD_BLEND_TYPE
+ public int bEncodeBlend; // 是否叠加
+ public NET_COLOR_RGBA stuFrontColor; // 前景色
+ public NET_COLOR_RGBA stuBackColor; // 背景色
+ public NET_RECT stuRect; // 区域, 坐标取值[0~8191], 仅使用left和top值, 点(left,top)应和(right,bottom)设置成同样的点
+ public int emTextAlign; // 文本对齐方式 ,参考枚举{@link EM_TITLE_TEXT_ALIGNTYPE}
+
+ public NET_OSD_CHANNEL_TITLE()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 编码物件-时间标题
+ public static class NET_OSD_TIME_TITLE extends SdkStructure
+ {
+ public int dwSize;
+ public int emOsdBlendType; // 叠加类型,不管是获取还是设置都要设置该字段,详见NET_EM_OSD_BLEND_TYPE
+ public int bEncodeBlend; // 是否叠加
+ public NET_COLOR_RGBA stuFrontColor; // 前景色
+ public NET_COLOR_RGBA stuBackColor; // 背景色
+ public NET_RECT stuRect; // 区域, 坐标取值[0~8191], 仅使用left和top值, 点(left,top)应和(right,bottom)设置成同样的点
+ public int bShowWeek; // 是否显示星期
+
+ public NET_OSD_TIME_TITLE()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 编码物件-自定义标题信息
+ public static class NET_CUSTOM_TITLE_INFO extends SdkStructure
+ {
+ public int bEncodeBlend; // 是否叠加
+ public NET_COLOR_RGBA stuFrontColor; // 前景色
+ public NET_COLOR_RGBA stuBackColor; // 背景色
+ public NET_RECT stuRect; // 区域, 坐标取值[0~8191], 仅使用left和top值, 点(left,top)应和(right,bottom)设置成同样的点
+ public byte[] szText = new byte[CUSTOM_TITLE_LEN]; // 标题内容
+ public byte[] byReserved = new byte[512]; // 保留字节
+ }
+
+ // 编码物件-自定义标题
+ public static class NET_OSD_CUSTOM_TITLE extends SdkStructure
+ {
+ public int dwSize;
+ public int emOsdBlendType; // 叠加类型,不管是获取还是设置都要设置该字段,详见NET_EM_OSD_BLEND_TYPE
+ public int nCustomTitleNum; // 自定义标题数量
+ public NET_CUSTOM_TITLE_INFO[] stuCustomTitle = new NET_CUSTOM_TITLE_INFO[MAX_CUSTOM_TITLE_NUM]; // 自定义标题
+
+ public NET_OSD_CUSTOM_TITLE()
+ {
+ this.dwSize = this.size();
+
+ for (int i = 0; i < stuCustomTitle.length; ++i) {
+ stuCustomTitle[i] = new NET_CUSTOM_TITLE_INFO();
+ }
+ }
+ }
+
+ // 标题文本对齐方式
+ public static class EM_TITLE_TEXT_ALIGNTYPE extends SdkStructure
+ {
+ public static final int EM_TEXT_ALIGNTYPE_INVALID = 0; // 无效的对齐方式
+ public static final int EM_TEXT_ALIGNTYPE_LEFT = 1; // 左对齐
+ public static final int EM_TEXT_ALIGNTYPE_XCENTER = 2; // X坐标中对齐
+ public static final int EM_TEXT_ALIGNTYPE_YCENTER = 3; // Y坐标中对齐
+ public static final int EM_TEXT_ALIGNTYPE_CENTER = 4; // 居中
+ public static final int EM_TEXT_ALIGNTYPE_RIGHT = 5; // 右对齐
+ public static final int EM_TEXT_ALIGNTYPE_TOP = 6; // 按照顶部对齐
+ public static final int EM_TEXT_ALIGNTYPE_BOTTOM = 7; // 按照底部对齐
+ public static final int EM_TEXT_ALIGNTYPE_LEFTTOP = 8; // 按照左上角对齐
+ public static final int EM_TEXT_ALIGNTYPE_CHANGELINE = 9; // 换行对齐
+ }
+
+ // 自定义标题文本对齐
+ public static class NET_OSD_CUSTOM_TITLE_TEXT_ALIGN extends SdkStructure
+ {
+ public int dwSize;
+ public int nCustomTitleNum; // 自定义标题数量
+ public int[] emTextAlign = new int[MAX_CUSTOM_TITLE_NUM]; // 自定义标题文本对齐方式,详见EM_TITLE_TEXT_ALIGNTYPE
+
+ public NET_OSD_CUSTOM_TITLE_TEXT_ALIGN()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ //编码物件-公共配置信息
+ public static class NET_OSD_COMM_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public double fFontSizeScale; // 叠加字体大小放大比例
+ //当fFontSizeScale≠0时,nFontSize不起作用
+ //当fFontSizeScale=0时,nFontSize起作用
+ //设备默认fFontSizeScale=1.0
+ //如果需要修改倍数,修改该值
+ //如果需要按照像素设置,则置该值为0,nFontSize的值生效
+ public int nFontSize; // 叠加到主码流上的全局字体大小,单位 px, 默认24.
+ //和fFontSizeScale共同作用
+ public int nFontSizeExtra1; // 叠加到辅码流1上的全局字体大小,单位 px
+ public int nFontSizeExtra2; // 叠加到辅码流2上的全局字体大小,单位 px
+ public int nFontSizeExtra3; // 叠加到辅码流3上的全局字体大小,单位 px
+ public int nFontSizeSnapshot; // 叠加到抓图流上的全局字体大小, 单位 px
+ public int nFontSizeMergeSnapshot; // 叠加到抓图流上合成图片的字体大小,单位 px
+ public int emFontSolution; // 叠加到主码流上的字体方案,参考枚举{@link EM_OSD_FONT_SOLUTION}
+ public int emFontSolutionExtra1; // 叠加到辅码流1上的字体方案,参考枚举{@link EM_OSD_FONT_SOLUTION}
+ public int emFontSolutionExtra2; // 叠加到辅码流2上的字体方案,参考枚举{@link EM_OSD_FONT_SOLUTION}
+ public int emFontSolutionExtra3; // 叠加到辅码流3上的字体方案,参考枚举{@link EM_OSD_FONT_SOLUTION}
+ public int emFontSolutionSnapshot; // 叠加到抓图码流上的字体方案,参考枚举{@link EM_OSD_FONT_SOLUTION}
+ public int emFontSolutionMergeSnapshot; // 叠加到合成抓图流上的字体方案,参考枚举{@link EM_OSD_FONT_SOLUTION}
+
+ public NET_OSD_COMM_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 播报单元类型
+ public static class NET_PLAYAUDIO_TYPE extends SdkStructure
+ {
+ public static final int NET_PLAYAUDIO_TYPE_UNKNOWN = 0;
+ public static final int NET_PLAYAUDIO_TYPE_PHRASE = 1; // 短语类型,不进行解析,依次读每个字,有该字的语音文件支持
+ public static final int NET_PLAYAUDIO_TYPE_FILE = 2; // 播放指定路径的语音文件(设备端完整路径)
+ public static final int NET_PLAYAUDIO_TYPE_PLATERNUM = 3; // 播报车牌号码,按车牌号码格式读出
+ public static final int NET_PLAYAUDIO_TYPE_MONEY = 4; // 播报金额,按金额形式读出
+ public static final int NET_PLAYAUDIO_TYPE_DATE = 5; // 播报日期,按日期形式读出
+ public static final int NET_PLAYAUDIO_TYPE_TIME = 6; // 播报时间,按时间形式读出
+ public static final int NET_PLAYAUDIO_TYPE_EMPTY = 7; // 空类型,停顿一个字符时间
+ }
+
+ // 语音播报内容
+ public static class NET_CTRL_PLAYAUDIO_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int emPlayAudioType; // 播报单元类型,详见NET_PLAYAUDIO_TYPE,详见NET_PLAYAUDIO_TYPE
+ public byte[] szDetail = new byte[NET_COMMON_STRING_128]; // 详细内容各类型详细内容:
+ // Phrase类型:"欢迎"
+ // File类型: "/home/停车.pcm"
+ // PlateNumbe类型: "浙A12345"
+ // Money类型: "80.12元"
+ // Date类型: "2014年4月10日"
+ // Time类型: "1天10小时20分5秒
+ public int nRepeatTimes; // 播放重复次数
+ public int emPriority; // 播放优先级,对应枚举EM_PLAYAUDIO_PRIORITY
+ public NET_CTRL_PLAYAUDIO_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // CLIENT_ControlDevice接口的 DH_CTRL_START_PLAYAUDIOEX 命令参数
+ public static class NET_CTRL_START_PLAYAUDIOEX extends SdkStructure
+ {
+ public int dwSize;
+ public int nAudioCount; // 播报内容数目
+ public NET_CTRL_PLAYAUDIO_INFO[] stuAudioInfos = new NET_CTRL_PLAYAUDIO_INFO[NET_MAX_PLAYAUDIO_COUNT]; // 语音播报内容
+ public int nListRepeatTimes; // 语音播报内容重复次数, 描述所有播报单元
+ public NET_CTRL_START_PLAYAUDIOEX()
+ {
+ this.dwSize = this.size();
+
+ for (int i = 0; i < stuAudioInfos.length; ++i) {
+ stuAudioInfos[i] = new NET_CTRL_PLAYAUDIO_INFO();
+ }
+ }
+ }
+
+ // 串口基本属性
+ public static class CFG_COMM_PROP extends SdkStructure
+ {
+ public byte byDataBit; // 数据位;0:5,1:6,2:7,3:8
+ public byte byStopBit; // 停止位;0:1位,1:1.5位,2:2位
+ public byte byParity; // 校验位;0:无校验,1:奇校验;2:偶校验
+ public byte byBaudRate; // 波特率;0:300,1:600,2:1200,3:2400,4:4800,
+ // 5:9600,6:19200,7:38400,8:57600,9:115200
+ }
+
+ // 归位预置点配置
+ public static class CFG_PRESET_HOMING extends SdkStructure
+ {
+ public int nPtzPresetId; // 云台预置点编号 0~65535
+ //-1表示无效
+ public int nFreeSec; // 空闲的时间,单位为秒
+ }
+
+ // 云台配置
+ public static class CFG_PTZ_INFO extends SdkStructure
+ {
+ // 能力
+ public byte abMartixID;
+ public byte abCamID;
+ public byte abPTZType;
+
+ // 信息
+ public int nChannelID; // 通道号(0开始)
+ public int bEnable; // 使能开关
+ public byte[] szProName = new byte[MAX_NAME_LEN]; // 协议名称
+ public int nDecoderAddress; // 解码器地址;0 - 255
+ public CFG_COMM_PROP struComm;
+ public int nMartixID; // 矩阵号
+ public int nPTZType; // 云台类型0-兼容,本地云台 1-远程网络云台
+ public int nCamID; // 摄像头ID
+ public int nPort; // 使用的串口端口号
+ public CFG_PRESET_HOMING stuPresetHoming; // 一段时间不操作云台,自动归位到某个预置点
+ public int nControlMode; // 控制模式, 0:"RS485"串口控制(默认);1:"Coaxial" 同轴口控制
+ }
+
+ // 抓拍物体信息
+ public static class NET_SNAP_OBJECT_INFO extends SdkStructure
+ {
+ public NET_RECT stuBoundingBox; // 物体包围盒, 点坐标归一化到[0, 8192]坐标
+ public byte[] byReserved = new byte[512]; // 保留字节
+ }
+
+ // CLIENT_SnapPictureByAnalyseObject 接口输入参数
+ public static class NET_IN_SNAP_BY_ANALYSE_OBJECT extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nChannelID; // 通道号
+ public byte[] byReserved = new byte[4]; // 字节对齐
+ public int nSnapObjectNum; // 抓拍物体个数
+ public NET_SNAP_OBJECT_INFO[] stuSnapObjects = new NET_SNAP_OBJECT_INFO[32]; // 抓拍物体信息
+
+ public NET_IN_SNAP_BY_ANALYSE_OBJECT()
+ {
+ this.dwSize = this.size();
+
+ for (int i = 0; i < stuSnapObjects.length; ++i) {
+ stuSnapObjects[i] = new NET_SNAP_OBJECT_INFO();
+ }
+ }
+ }
+
+ // CLIENT_SnapPictureByAnalyseObject 接口输出参数
+ public static class NET_OUT_SNAP_BY_ANALYSE_OBJECT extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+
+ public NET_OUT_SNAP_BY_ANALYSE_OBJECT()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 选中目标进行抓拍
+ public boolean CLIENT_SnapPictureByAnalyseObject(LLong lLoginID, NET_IN_SNAP_BY_ANALYSE_OBJECT pInParam, NET_OUT_SNAP_BY_ANALYSE_OBJECT pOutParam, int nWaitTime);
+
+ // 热成像着火点报警
+ public static class ALARM_FIREWARNING_INFO extends SdkStructure
+ {
+ public int nPresetId; // 该字段废弃,请由NET_ALARM_FIREWARNING_INFO事件获取此信息
+ public int nState; // 0 - 开始,1 - 结束,-1:无意义
+ public DH_RECT stBoundingBox; // 该字段废弃,请由NET_ALARM_FIREWARNING_INFO事件获取此信息
+ public int nTemperatureUnit; // 该字段废弃,请由NET_ALARM_FIREWARNING_INFO事件获取此信息
+ public float fTemperature; // 该字段废弃,请由NET_ALARM_FIREWARNING_INFO事件获取此信息
+ public int nDistance; // 该字段废弃,请由DH_ALARM_FIREWARNING_INFO事件获取此信息
+ public GPS_POINT stGpsPoint; // 该字段废弃,请由NET_ALARM_FIREWARNING_INFO事件获取此信息
+ public int nChannel; // 对应视频通道号
+ public byte[] reserved = new byte[252];
+ }
+
+ // 时间类型
+ public static class EM_TIME_TYPE extends SdkStructure
+ {
+ public static final int NET_TIME_TYPE_ABSLUTE = 0; // 绝对时间
+ public static final int NET_TIME_TYPE_RELATIVE = 1; // 相对时间,相对于视频文件头帧为时间基点,头帧对应于UTC(0000-00-00 00:00:00)
+ }
+
+ // 卡号省份
+ public static class EM_CARD_PROVINCE extends SdkStructure
+ {
+ public static final int EM_CARD_UNKNOWN = 10; // 解析出错,未知省份
+ public static final int EM_CARD_BEIJING = 11; // 北京
+ public static final int EM_CARD_TIANJIN = 12; // 天津
+ public static final int EM_CARD_HEBEI = 13; // 河北
+ public static final int EM_CARD_SHANXI_TAIYUAN = 14; // 山西
+ public static final int EM_CARD_NEIMENGGU = 15; // 内蒙古
+ public static final int EM_CARD_LIAONING = 21; // 辽宁
+ public static final int EM_CARD_JILIN = 22; // 吉林
+ public static final int EM_CARD_HEILONGJIANG = 23; // 黑龙江
+ public static final int EM_CARD_SHANGHAI = 31; // 上海
+ public static final int EM_CARD_JIANGSU = 32; // 江苏
+ public static final int EM_CARD_ZHEJIANG = 33; // 浙江
+ public static final int EM_CARD_ANHUI = 34; // 安徽
+ public static final int EM_CARD_FUJIAN = 35; // 福建
+ public static final int EM_CARD_JIANGXI = 36; // 江西
+ public static final int EM_CARD_SHANDONG = 37; // 山东
+ public static final int EM_CARD_HENAN = 41; // 河南
+ public static final int EM_CARD_HUBEI = 42; // 湖北
+ public static final int EM_CARD_HUNAN = 43; // 湖南
+ public static final int EM_CARD_GUANGDONG = 44; // 广东
+ public static final int EM_CARD_GUANGXI = 45; // 广西
+ public static final int EM_CARD_HAINAN = 46; // 海南
+ public static final int EM_CARD_CHONGQING = 50; // 重庆
+ public static final int EM_CARD_SICHUAN = 51; // 四川
+ public static final int EM_CARD_GUIZHOU = 52; // 贵州
+ public static final int EM_CARD_YUNNAN = 53; // 云南
+ public static final int EM_CARD_XIZANG = 54; // 西藏
+ public static final int EM_CARD_SHANXI_XIAN = 61; // 陕西
+ public static final int EM_CARD_GANSU = 62; // 甘肃
+ public static final int EM_CARD_QINGHAI = 63; // 青海
+ public static final int EM_CARD_NINGXIA = 64; // 宁夏
+ public static final int EM_CARD_XINJIANG = 65; // 新疆
+ public static final int EM_CARD_XIANGGANG = 71; // 香港
+ public static final int EM_CARD_AOMEN = 82; // 澳门
+ public static final int EM_CARD_TAIWAN = 83; // 台湾
+ }
+
+ // 车辆类型
+ public static class EM_CAR_TYPE extends SdkStructure
+ {
+ public static final int EM_CAR_0 = 0; // 其他车辆
+ public static final int EM_CAR_1 = 1; // 大型普通客车
+ public static final int EM_CAR_2 = 2; // 大型双层客车
+ public static final int EM_CAR_3 = 3; // 大型卧铺客车
+ public static final int EM_CAR_4 = 4; // 大型铰接客车
+ public static final int EM_CAR_5 = 5; // 大型越野客车
+ public static final int EM_CAR_6 = 6; // 大型轿车
+ public static final int EM_CAR_7 = 7; // 大型专用客车
+ public static final int EM_CAR_8 = 8; // 大型专用校车
+ public static final int EM_CAR_9 = 9; // 中型普通客车
+ public static final int EM_CAR_10 = 10; // 中型双层客车
+ public static final int EM_CAR_11 = 11; // 中型卧铺客车
+ public static final int EM_CAR_12 = 12; // 中型铰接客车
+ public static final int EM_CAR_13 = 13; // 中型越野客车
+ public static final int EM_CAR_14 = 14; // 中型轿车
+ public static final int EM_CAR_15 = 15; // 中型专用客车
+ public static final int EM_CAR_16 = 16; // 中型专用校车
+ public static final int EM_CAR_17 = 17; // 小型普通客车
+ public static final int EM_CAR_18 = 18; // 小型越野客车
+ public static final int EM_CAR_19 = 19; // 小型轿车
+ public static final int EM_CAR_20 = 20; // 小型专用客车
+ public static final int EM_CAR_21 = 21; // 小型专用校车
+ public static final int EM_CAR_22 = 22; // 小型面包车
+ public static final int EM_CAR_23 = 23; // 微型普通客车
+ public static final int EM_CAR_24 = 24; // 微型越野客车
+ public static final int EM_CAR_25 = 25; // 微型轿车
+ public static final int EM_CAR_26 = 26; // 微型面包车
+ public static final int EM_CAR_27 = 27; // 重型半挂牵引车
+ public static final int EM_CAR_28 = 28; // 重型全挂牵引车
+ public static final int EM_CAR_29 = 29; // 中型半挂牵引车
+ public static final int EM_CAR_30 = 30; // 中型全挂牵引车
+ public static final int EM_CAR_31 = 31; // 轻型半挂牵引车
+ public static final int EM_CAR_32 = 32; // 轻型全挂牵引车
+ public static final int EM_CAR_33 = 33; // 大型非载货专项作业车
+ public static final int EM_CAR_34 = 34; // 大型载货专项作业车
+ public static final int EM_CAR_35 = 35; // 中型非载货专项作业车
+ public static final int EM_CAR_36 = 36; // 中型载货专项作业车
+ public static final int EM_CAR_37 = 37; // 小型非载货专项作业车
+ public static final int EM_CAR_38 = 38; // 小型载货专项作业车
+ public static final int EM_CAR_39 = 39; // 微型非载货专项作业车
+ public static final int EM_CAR_40 = 40; // 微型载货专项作业车
+ public static final int EM_CAR_41 = 41; // 重型非载货专项作业车
+ public static final int EM_CAR_42 = 42; // 重型载货专项作业车
+ public static final int EM_CAR_43 = 43; // 轻型非载货专项作业车
+ public static final int EM_CAR_44 = 44; // 轻型载货专项作业车
+ public static final int EM_CAR_45 = 45; // 普通正三轮摩托车
+ public static final int EM_CAR_46 = 46; // 轻便正三轮摩托车
+ public static final int EM_CAR_47 = 47; // 正三轮载客摩托车
+ public static final int EM_CAR_48 = 48; // 正三轮载货摩托车
+ public static final int EM_CAR_49 = 49; // 侧三轮摩托车
+ public static final int EM_CAR_50 = 50; // 普通二轮摩托车
+ public static final int EM_CAR_51 = 51; // 轻便二轮摩托车
+ public static final int EM_CAR_52 = 52; // 无轨电车
+ public static final int EM_CAR_53 = 53; // 有轨电车
+ public static final int EM_CAR_54 = 54; // 三轮汽车
+ public static final int EM_CAR_55 = 55; // 轮式装载机械
+ public static final int EM_CAR_56 = 56; // 轮式挖掘机械
+ public static final int EM_CAR_57 = 57; // 轮式平地机械
+ public static final int EM_CAR_58 = 58; // 重型普通货车
+ public static final int EM_CAR_59 = 59; // 重型厢式货车
+ public static final int EM_CAR_60 = 60; // 重型封闭货车
+ public static final int EM_CAR_61 = 61; // 重型罐式货车
+ public static final int EM_CAR_62 = 62; // 重型平板货车
+ public static final int EM_CAR_63 = 63; // 重型集装箱车
+ public static final int EM_CAR_64 = 64; // 重型自卸货车
+ public static final int EM_CAR_65 = 65; // 重型特殊结构货车
+ public static final int EM_CAR_66 = 66; // 重型仓栅式货车
+ public static final int EM_CAR_67 = 67; // 重型车辆运输车
+ public static final int EM_CAR_68 = 68; // 重型厢式自卸货车
+ public static final int EM_CAR_69 = 69; // 重型罐式自卸货车
+ public static final int EM_CAR_70 = 70; // 重型平板自卸货车
+ public static final int EM_CAR_71 = 71; // 重型集装箱自卸货车
+ public static final int EM_CAR_72 = 72; // 重型特殊结构自卸货车
+ public static final int EM_CAR_73 = 73; // 重型仓栅式自卸货车
+ public static final int EM_CAR_74 = 74; // 中型普通货车
+ public static final int EM_CAR_75 = 75; // 中型厢式货车
+ public static final int EM_CAR_76 = 76; // 中型封闭货车
+ public static final int EM_CAR_77 = 77; // 中型罐式货车
+ public static final int EM_CAR_78 = 78; // 中型平板货车
+ public static final int EM_CAR_79 = 79; // 中型集装箱车
+ public static final int EM_CAR_80 = 80; // 中型自卸货车
+ public static final int EM_CAR_81 = 81; // 中型特殊结构货车
+ public static final int EM_CAR_82 = 82; // 中型仓栅式货车
+ public static final int EM_CAR_83 = 83; // 中型车辆运输车
+ public static final int EM_CAR_84 = 84; // 中型厢式自卸货车
+ public static final int EM_CAR_85 = 85; // 中型罐式自卸货车
+ public static final int EM_CAR_86 = 86; // 中型平板自卸货车
+ public static final int EM_CAR_87 = 87; // 中型集装箱自卸货车
+ public static final int EM_CAR_88 = 88; // 中型特殊结构自卸货车
+ public static final int EM_CAR_89 = 89; // 中型仓栅式自卸货车
+ public static final int EM_CAR_90 = 90; // 轻型普通货车
+ public static final int EM_CAR_91 = 91; // 轻型厢式货车
+ public static final int EM_CAR_92 = 92; // 轻型封闭货车
+ public static final int EM_CAR_93 = 93; // 轻型罐式货车
+ public static final int EM_CAR_94 = 94; // 轻型平板货车
+ public static final int EM_CAR_95 = 95; // 轻型自卸货车
+ public static final int EM_CAR_96 = 96; // 轻型特殊结构货车
+ public static final int EM_CAR_97 = 97; // 轻型仓栅式货车
+ public static final int EM_CAR_98 = 98; // 轻型车辆运输车
+ public static final int EM_CAR_99 = 99; // 轻型厢式自卸货车
+ public static final int EM_CAR_100 = 100; // 轻型罐式自卸货车
+ public static final int EM_CAR_101 = 101; // 轻型平板自卸货车
+ public static final int EM_CAR_102 = 102; // 轻型特殊结构自卸货车
+ public static final int EM_CAR_103 = 103; // 轻型仓栅式自卸货车
+ public static final int EM_CAR_104 = 104; // 微型普通货车
+ public static final int EM_CAR_105 = 105; // 微型厢式货车
+ public static final int EM_CAR_106 = 106; // 微型封闭货车
+ public static final int EM_CAR_107 = 107; // 微型罐式货车
+ public static final int EM_CAR_108 = 108; // 微型自卸货车
+ public static final int EM_CAR_109 = 109; // 微型特殊结构货车
+ public static final int EM_CAR_110 = 110; // 微型仓栅式货车
+ public static final int EM_CAR_111 = 111; // 微型车辆运输车
+ public static final int EM_CAR_112 = 112; // 微型厢式自卸货车
+ public static final int EM_CAR_113 = 113; // 微型罐式自卸货车
+ public static final int EM_CAR_114 = 114; // 微型特殊结构自卸货车
+ public static final int EM_CAR_115 = 115; // 微型仓栅式自卸货车
+ public static final int EM_CAR_116 = 116; // 普通低速货车
+ public static final int EM_CAR_117 = 117; // 厢式低速货车
+ public static final int EM_CAR_118 = 118; // 罐式低速货车
+ public static final int EM_CAR_119 = 119; // 自卸低速货车
+ public static final int EM_CAR_120 = 120; // 仓栅式低速货车
+ public static final int EM_CAR_121 = 121; // 厢式自卸低速货车
+ public static final int EM_CAR_122 = 122; // 罐式自卸低速货车
+ public static final int EM_CAR_123 = 123; // 重型普通全挂车
+ public static final int EM_CAR_124 = 124; // 重型厢式全挂车
+ public static final int EM_CAR_125 = 125; // 重型罐式全挂车
+ public static final int EM_CAR_126 = 126; // 重型平板全挂车
+ public static final int EM_CAR_127 = 127; // 重型集装箱全挂车
+ public static final int EM_CAR_128 = 128; // 重型自卸全挂车
+ public static final int EM_CAR_129 = 129; // 重型仓栅式全挂车
+ public static final int EM_CAR_130 = 130; // 重型旅居全挂车
+ public static final int EM_CAR_131 = 131; // 重型专项作业全挂车
+ public static final int EM_CAR_132 = 132; // 重型厢式自卸全挂车
+ public static final int EM_CAR_133 = 133; // 重型罐式自卸全挂车
+ public static final int EM_CAR_134 = 134; // 重型平板自卸全挂车
+ public static final int EM_CAR_135 = 135; // 重型集装箱自卸全挂车
+ public static final int EM_CAR_136 = 136; // 重型仓栅式自卸全挂车
+ public static final int EM_CAR_137 = 137; // 重型专项作业自卸全挂车
+ public static final int EM_CAR_138 = 138; // 中型普通全挂车
+ public static final int EM_CAR_139 = 139; // 中型厢式全挂车
+ public static final int EM_CAR_140 = 140; // 中型罐式全挂车
+ public static final int EM_CAR_141 = 141; // 中型平板全挂车
+ public static final int EM_CAR_142 = 142; // 中型集装箱全挂车
+ public static final int EM_CAR_143 = 143; // 中型自卸全挂车
+ public static final int EM_CAR_144 = 144; // 中型仓栅式全挂车
+ public static final int EM_CAR_145 = 145; // 中型旅居全挂车
+ public static final int EM_CAR_146 = 146; // 中型专项作业全挂车
+ public static final int EM_CAR_147 = 147; // 中型厢式自卸全挂车
+ public static final int EM_CAR_148 = 148; // 中型罐式自卸全挂车
+ public static final int EM_CAR_149 = 149; // 中型平板自卸全挂车
+ public static final int EM_CAR_150 = 150; // 中型集装箱自卸全挂车
+ public static final int EM_CAR_151 = 151; // 中型仓栅式自卸全挂车
+ public static final int EM_CAR_152 = 152; // 中型专项作业自卸全挂车
+ public static final int EM_CAR_153 = 153; // 轻型普通全挂车
+ public static final int EM_CAR_154 = 154; // 轻型厢式全挂车
+ public static final int EM_CAR_155 = 155; // 轻型罐式全挂车
+ public static final int EM_CAR_156 = 156; // 轻型平板全挂车
+ public static final int EM_CAR_157 = 157; // 轻型自卸全挂车
+ public static final int EM_CAR_158 = 158; // 轻型仓栅式全挂车
+ public static final int EM_CAR_159 = 159; // 轻型旅居全挂车
+ public static final int EM_CAR_160 = 160; // 轻型专项作业全挂车
+ public static final int EM_CAR_161 = 161; // 轻型厢式自卸全挂车
+ public static final int EM_CAR_162 = 162; // 轻型罐式自卸全挂车
+ public static final int EM_CAR_163 = 163; // 轻型平板自卸全挂车
+ public static final int EM_CAR_164 = 164; // 轻型集装箱自卸全挂车
+ public static final int EM_CAR_165 = 165; // 轻型仓栅式自卸全挂车
+ public static final int EM_CAR_166 = 166; // 轻型专项作业自卸全挂车
+ public static final int EM_CAR_167 = 167; // 重型普通半挂车
+ public static final int EM_CAR_168 = 168; // 重型厢式半挂车
+ public static final int EM_CAR_169 = 169; // 重型罐式半挂车
+ public static final int EM_CAR_170 = 170; // 重型平板半挂车
+ public static final int EM_CAR_171 = 171; // 重型集装箱半挂车
+ public static final int EM_CAR_172 = 172; // 重型自卸半挂车
+ public static final int EM_CAR_173 = 173; // 重型特殊结构半挂车
+ public static final int EM_CAR_174 = 174; // 重型仓栅式半挂车
+ public static final int EM_CAR_175 = 175; // 重型旅居半挂车
+ public static final int EM_CAR_176 = 176; // 重型专项作业半挂车
+ public static final int EM_CAR_177 = 177; // 重型低平板半挂车
+ public static final int EM_CAR_178 = 178; // 重型车辆运输半挂车
+ public static final int EM_CAR_179 = 179; // 重型罐式自卸半挂车
+ public static final int EM_CAR_180 = 180; // 重型平板自卸半挂车
+ public static final int EM_CAR_181 = 181; // 重型集装箱自卸半挂车
+ public static final int EM_CAR_182 = 182; // 重型特殊结构自卸半挂车
+ public static final int EM_CAR_183 = 183; // 重型仓栅式自卸半挂车
+ public static final int EM_CAR_184 = 184; // 重型专项作业自卸半挂车
+ public static final int EM_CAR_185 = 185; // 重型低平板自卸半挂车
+ public static final int EM_CAR_186 = 186; // 重型中置轴旅居挂车
+ public static final int EM_CAR_187 = 187; // 重型中置轴车辆运输车
+ public static final int EM_CAR_188 = 188; // 重型中置轴普通挂车
+ public static final int EM_CAR_189 = 189; // 中型普通半挂车
+ public static final int EM_CAR_190 = 190; // 中型厢式半挂车
+ public static final int EM_CAR_191 = 191; // 中型罐式半挂车
+ public static final int EM_CAR_192 = 192; // 中型平板半挂车
+ public static final int EM_CAR_193 = 193; // 中型集装箱半挂车
+ public static final int EM_CAR_194 = 194; // 中型自卸半挂车
+ public static final int EM_CAR_195 = 195; // 中型特殊结构半挂车
+ public static final int EM_CAR_196 = 196; // 中型仓栅式半挂车
+ public static final int EM_CAR_197 = 197; // 中型旅居半挂车
+ public static final int EM_CAR_198 = 198; // 中型专项作业半挂车
+ public static final int EM_CAR_199 = 199; // 中型低平板半挂车
+ public static final int EM_CAR_200 = 200; // 中型车辆运输半挂车
+ public static final int EM_CAR_201 = 201; // 中型罐式自卸半挂车
+ public static final int EM_CAR_202 = 202; // 中型平板自卸半挂车
+ public static final int EM_CAR_203 = 203; // 中型集装箱自卸半挂车
+ public static final int EM_CAR_204 = 204; // 中型特殊结构自卸挂车
+ public static final int EM_CAR_205 = 205; // 中型仓栅式自卸半挂车
+ public static final int EM_CAR_206 = 206; // 中型专项作业自卸半挂车
+ public static final int EM_CAR_207 = 207; // 中型低平板自卸半挂车
+ public static final int EM_CAR_208 = 208; // 中型中置轴旅居挂车
+ public static final int EM_CAR_209 = 209; // 中型中置轴车辆运输车
+ public static final int EM_CAR_210 = 210; // 中型中置轴普通挂车
+ public static final int EM_CAR_211 = 211; // 轻型普通半挂车
+ public static final int EM_CAR_212 = 212; // 轻型厢式半挂车
+ public static final int EM_CAR_213 = 213; // 轻型罐式半挂车
+ public static final int EM_CAR_214 = 214; // 轻型平板半挂车
+ public static final int EM_CAR_215 = 215; // 轻型自卸半挂车
+ public static final int EM_CAR_216 = 216; // 轻型仓栅式半挂车
+ public static final int EM_CAR_217 = 217; // 轻型旅居半挂车
+ public static final int EM_CAR_218 = 218; // 轻型专项作业半挂车
+ public static final int EM_CAR_219 = 219; // 轻型低平板半挂车
+ public static final int EM_CAR_220 = 220; // 轻型车辆运输半挂车
+ public static final int EM_CAR_221 = 221; // 轻型罐式自卸半挂车
+ public static final int EM_CAR_222 = 222; // 轻型平板自卸半挂车
+ public static final int EM_CAR_223 = 223; // 轻型集装箱自卸半挂车
+ public static final int EM_CAR_224 = 224; // 轻型特殊结构自卸挂车
+ public static final int EM_CAR_225 = 225; // 轻型仓栅式自卸半挂车
+ public static final int EM_CAR_226 = 226; // 轻型专项作业自卸半挂车
+ public static final int EM_CAR_227 = 227; // 轻型低平板自卸半挂车
+ public static final int EM_CAR_228 = 228; // 轻型中置轴旅居挂车
+ public static final int EM_CAR_229 = 229; // 轻型中置轴车辆运输车
+ public static final int EM_CAR_230 = 230; // 轻型中置轴普通挂车
+ }
+
+ // 号牌类型
+ public static class EM_PLATE_TYPE extends SdkStructure
+ {
+ public static final int EM_PLATE_OTHER = 0; // 其他车
+ public static final int EM_PLATE_BIG_CAR = 1; // 大型汽车
+ public static final int EM_PLATE_SMALL_CAR = 2; // 小型汽车
+ public static final int EM_PLATE_EMBASSY_CAR = 3; // 使馆汽车
+ public static final int EM_PLATE_CONSULATE_CAR = 4; // 领馆汽车
+ public static final int EM_PLATE_ABROAD_CAR = 5; // 境外汽车
+ public static final int EM_PLATE_FOREIGN_CAR = 6; // 外籍汽车
+ public static final int EM_PLATE_LOW_SPEED_CAR = 7; // 低速车
+ public static final int EM_PLATE_COACH_CAR = 8; // 教练车
+ public static final int EM_PLATE_MOTORCYCLE = 9; // 摩托车
+ public static final int EM_PLATE_NEW_POWER_CAR = 10; // 新能源车
+ public static final int EM_PLATE_POLICE_CAR = 11; // 警用车
+ public static final int EM_PLATE_HONGKONG_MACAO_CAR = 12; // 港澳两地车
+ public static final int EM_PLATE_WJPOLICE_CAR = 13; //
+ public static final int EM_PLATE_OUTERGUARD_CAR = 14; //
+ }
+
+ // 车身颜色
+ public static class EM_CAR_COLOR_TYPE extends SdkStructure
+ {
+ public static final int EM_CAR_COLOR_WHITE = 0; // 白色
+ public static final int EM_CAR_COLOR_BLACK = 1; // 黑色
+ public static final int EM_CAR_COLOR_RED = 2; // 红色
+ public static final int EM_CAR_COLOR_YELLOW = 3; // 黄色
+ public static final int EM_CAR_COLOR_GRAY = 4; // 灰色
+ public static final int EM_CAR_COLOR_BLUE = 5; // 蓝色
+ public static final int EM_CAR_COLOR_GREEN = 6; // 绿色
+ public static final int EM_CAR_COLOR_PINK = 7; // 粉色
+ public static final int EM_CAR_COLOR_PURPLE = 8; // 紫色
+ public static final int EM_CAR_COLOR_DARK_PURPLE = 9; // 暗紫色
+ public static final int EM_CAR_COLOR_BROWN = 10; // 棕色
+ public static final int EM_CAR_COLOR_MAROON = 11; // 粟色
+ public static final int EM_CAR_COLOR_SILVER_GRAY = 12; // 银灰色
+ public static final int EM_CAR_COLOR_DARK_GRAY = 13; // 暗灰色
+ public static final int EM_CAR_COLOR_WHITE_SMOKE = 14; // 白烟色
+ public static final int EM_CAR_COLOR_DEEP_ORANGE = 15; // 深橙色
+ public static final int EM_CAR_COLOR_LIGHT_ROSE = 16; // 浅玫瑰色
+ public static final int EM_CAR_COLOR_TOMATO_RED = 17; // 番茄红色
+ public static final int EM_CAR_COLOR_OLIVE = 18; // 橄榄色
+ public static final int EM_CAR_COLOR_GOLDEN = 19; // 金色
+ public static final int EM_CAR_COLOR_DARK_OLIVE = 20; // 暗橄榄色
+ public static final int EM_CAR_COLOR_YELLOW_GREEN = 21; // 黄绿色
+ public static final int EM_CAR_COLOR_GREEN_YELLOW = 22; // 绿黄色
+ public static final int EM_CAR_COLOR_FOREST_GREEN = 23; // 森林绿
+ public static final int EM_CAR_COLOR_OCEAN_BLUE = 24; // 海洋绿
+ public static final int EM_CAR_COLOR_DEEP_SKYBLUE = 25; // 深天蓝
+ public static final int EM_CAR_COLOR_CYAN = 26; // 青色
+ public static final int EM_CAR_COLOR_DEEP_BLUE = 27; // 深蓝色
+ public static final int EM_CAR_COLOR_DEEP_RED = 28; // 深红色
+ public static final int EM_CAR_COLOR_DEEP_GREEN = 29; // 深绿色
+ public static final int EM_CAR_COLOR_DEEP_YELLOW = 30; // 深黄色
+ public static final int EM_CAR_COLOR_DEEP_PINK = 31; // 深粉色
+ public static final int EM_CAR_COLOR_DEEP_PURPLE = 32; // 深紫色
+ public static final int EM_CAR_COLOR_DEEP_BROWN = 33; // 深棕色
+ public static final int EM_CAR_COLOR_DEEP_CYAN = 34; // 深青色
+ public static final int EM_CAR_COLOR_ORANGE = 35; // 橙色
+ public static final int EM_CAR_COLOR_DEEP_GOLDEN = 36; // 深金色
+ public static final int EM_CAR_COLOR_OTHER = 255; // 未识别、其他
+ }
+
+ // 使用性质
+ public static class EM_USE_PROPERTY_TYPE extends SdkStructure
+ {
+ public static final int EM_USE_PROPERTY_NONOPERATING = 0; // 非营运
+ public static final int EM_USE_PROPERTY_HIGWAY = 1; // 公路客运,旅游客运
+ public static final int EM_USE_PROPERTY_BUS = 2; // 公交客运
+ public static final int EM_USE_PROPERTY_TAXI = 3; // 出租客运
+ public static final int EM_USE_PROPERTY_FREIGHT = 4; // 货运
+ public static final int EM_USE_PROPERTY_LEASE = 5; // 租赁
+ public static final int EM_USE_PROPERTY_SECURITY = 6; // 警用,消防,救护,工程救险
+ public static final int EM_USE_PROPERTY_COACH = 7; // 教练
+ public static final int EM_USE_PROPERTY_SCHOOLBUS = 8; // 幼儿校车,小学生校车,其他校车
+ public static final int EM_USE_PROPERTY_FOR_DANGE_VEHICLE = 9; // 危化品运输
+ public static final int EM_USE_PROPERTY_OTHER = 10; // 其他
+ public static final int EM_USE_PROPERTY_ONLINE_CAR_HAILING = 11; // 网约车
+ }
+
+ // 大类业务方案
+ public static class EM_CLASS_TYPE extends SdkStructure
+ {
+ public static final int EM_CLASS_UNKNOWN = 0; // 未知业务
+ public static final int EM_CLASS_VIDEO_SYNOPSIS = 1; // 视频浓缩
+ public static final int EM_CLASS_TRAFFIV_GATE = 2; // 卡口
+ public static final int EM_CLASS_ELECTRONIC_POLICE = 3; // 电警
+ public static final int EM_CLASS_SINGLE_PTZ_PARKING = 4; // 单球违停
+ public static final int EM_CLASS_PTZ_PARKINBG = 5; // 主从违停
+ public static final int EM_CLASS_TRAFFIC = 6; // 交通事件"Traffic"
+ public static final int EM_CLASS_NORMAL = 7; // 通用行为分析"Normal"
+ public static final int EM_CLASS_PS = 8;
+ public static final int EM_CLASS_ATM = 9; // 金融行为分析"ATM"
+ public static final int EM_CLASS_METRO = 10; // 地铁行为分析
+ public static final int EM_CLASS_FACE_DETECTION = 11; // 人脸检测"FaceDetection"
+ public static final int EM_CLASS_FACE_RECOGNITION = 12; // 目标识别"FaceRecognition"
+ public static final int EM_CLASS_NUMBER_STAT = 13; // 人数统计"NumberStat"
+ public static final int EM_CLASS_HEAT_MAP = 14; // 热度图"HeatMap"
+ public static final int EM_CLASS_VIDEO_DIAGNOSIS = 15; // 视频诊断"VideoDiagnosis"
+ public static final int EM_CLASS_VIDEO_ENHANCE = 16; // 视频增强
+ public static final int EM_CLASS_SMOKEFIRE_DETECT = 17; // 烟火检测
+ public static final int EM_CLASS_VEHICLE_ANALYSE = 18; // 车辆特征识别"VehicleAnalyse"
+ public static final int EM_CLASS_PERSON_FEATURE = 19; // 人员特征识别
+ public static final int EM_CLASS_SDFACEDETECTION = 20; // 多预置点人脸检测"SDFaceDetect"
+ //配置一条规则但可以在不同预置点下生效
+ public static final int EM_CLASS_HEAT_MAP_PLAN = 21; // 球机热度图计划"HeatMapPlan"
+ public static final int EM_CLASS_NUMBERSTAT_PLAN = 22; // 球机客流量统计计划 "NumberStatPlan"
+ public static final int EM_CLASS_ATMFD = 23; // 金融人脸检测,包括正常人脸、异常人脸、相邻人脸、头盔人脸等针对ATM场景特殊优化
+ public static final int EM_CLASS_HIGHWAY = 24; // 高速交通事件检测"Highway"
+ public static final int EM_CLASS_CITY = 25; // 城市交通事件检测 "City"
+ public static final int EM_CLASS_LETRACK = 26; // 民用简易跟踪"LeTrack"
+ public static final int EM_CLASS_SCR = 27; // 打靶相机"SCR"
+ public static final int EM_CLASS_STEREO_VISION = 28; // 立体视觉(双目)"StereoVision"
+ public static final int EM_CLASS_HUMANDETECT = 29; // 人体检测"HumanDetect"
+ public static final int EM_CLASS_FACE_ANALYSIS = 30; // 人脸分析 "FaceAnalysis"
+ public static final int EM_CALSS_XRAY_DETECTION = 31; // X光检测 "XRayDetection"
+ public static final int EM_CLASS_STEREO_NUMBER = 32; // 双目相机客流量统计 "StereoNumber"
+ public static final int EM_CLASS_CROWDDISTRIMAP = 33; // 人群分布图
+ public static final int EM_CLASS_OBJECTDETECT = 34; // 目标检测
+ public static final int EM_CLASS_FACEATTRIBUTE = 35; // IVSS人脸检测 "FaceAttribute"
+ public static final int EM_CLASS_FACECOMPARE = 36; // IVSS目标识别 "FaceCompare"
+ public static final int EM_CALSS_STEREO_BEHAVIOR = 37; // 立体行为分析 "StereoBehavior"
+ public static final int EM_CALSS_INTELLICITYMANAGER = 38; // 智慧城管 "IntelliCityMgr"
+ public static final int EM_CALSS_PROTECTIVECABIN = 39; // 防护舱(ATM舱内)"ProtectiveCabin"
+ public static final int EM_CALSS_AIRPLANEDETECT = 40; // 飞机行为检测 "AirplaneDetect"
+ public static final int EM_CALSS_CROWDPOSTURE = 41; // 人群态势(人群分布图服务)"CrowdPosture"
+ public static final int EM_CLASS_PHONECALLDETECT = 42; // 打电话检测 "PhoneCallDetect"
+ public static final int EM_CLASS_SMOKEDETECTION = 43; // 烟雾检测 "SmokeDetection"
+ public static final int EM_CLASS_BOATDETECTION = 44; // 船只检测 "BoatDetection"
+ public static final int EM_CLASS_SMOKINGDETECT = 45; // 吸烟检测 "SmokingDetect"
+ public static final int EM_CLASS_WATERMONITOR = 46; // 水利监测 "WaterMonitor"
+ public static final int EM_CLASS_GENERATEGRAPHDETECTION = 47; // 生成图规则 "GenerateGraphDetection"
+ public static final int EM_CLASS_TRAFFIC_PARK = 48; // 交通停车 "TrafficPark"
+ public static final int EM_CLASS_OPERATEMONITOR = 49; // 作业检测 "OperateMonitor"
+ public static final int EM_CLASS_INTELLI_RETAIL = 50; // 智慧零售大类 "IntelliRetail"
+ public static final int EM_CLASS_CLASSROOM_ANALYSE = 51; // 教育智慧课堂"ClassroomAnalyse"
+ public static final int EM_CLASS_FEATURE_ABSTRACT = 52; // 特征向量提取大类 "FeatureAbstract"
+ public static final int EM_CLASS_CROWD_ABNORMAL = 60; // 人群异常检测 "CrowdAbnormal"
+ public static final int EM_CLASS_ANATOMY_TEMP_DETECT = 63; // 人体温智能检测 "AnatomyTempDetect"
+ public static final int EM_CLASS_WEATHER_MONITOR = 64; // 天气监控 "WeatherMonitor"
+ public static final int EM_CLASS_ELEVATOR_ACCESS_CONTROL = 65; // 电梯门禁 "ElevatorAccessControl"
+ public static final int EM_CLASS_BREAK_RULE_BUILDING = 66; // 违章建筑 "BreakRuleBuilding"
+ public static final int EM_CLASS_FOREIGN_DETECT = 67; // 异物检测 "ForeignDetection"
+ public static final int EM_CLASS_PANORAMA_TRAFFIC = 68; // 全景交通 "PanoramaTraffic"
+
+ public static final int EM_CLASS_CONVEY_OR_BLOCK = 69; // 传送带阻塞 "ConveyorBlock"
+ public static final int EM_CLASS_KITCHEN_ANIMAL = 70; // 厨房有害动物检测 "KitchenAnimal"
+ public static final int EM_CLASS_ALLSEEINGEYE = 71; // 万物检测 "AllSeeingEye"
+ public static final int EM_CLASS_INTELLI_FIRE_CONTROL = 72; // 智慧消防 "IntelliFireControl"
+ public static final int EM_CLASS_CONVERYER_BELT = 73; // 传送带检测 "ConveyerBelt"
+ public static final int EM_CLASS_INTELLI_LOGISTICS = 74; // 智慧物流 "IntelliLogistics"
+ public static final int EM_CLASS_SMOKE_FIRE = 75; // 烟火检测"SmokeFire"
+ public static final int EM_CLASS_OBJECT_MONITOR = 76; // 物品监控"ObjectMonitor"
+ public static final int EM_CLASS_INTELLI_PARKING = 77; // 智能停车"IntelliParking"
+ }
+
+ // 交通车辆行驶方向类型
+ public static class EM_TRAFFICCAR_MOVE_DIRECTION extends SdkStructure
+ {
+ public static final int EM_TRAFFICCAR_MOVE_DIRECTION_UNKNOWN = 0; // 未知的
+ public static final int EM_TRAFFICCAR_MOVE_DIRECTION_STRAIGHT = 1; // 直行
+ public static final int EM_TRAFFICCAR_MOVE_DIRECTION_TURN_LEFT = 2; // 左转
+ public static final int EM_TRAFFICCAR_MOVE_DIRECTION_TURN_RIGHT = 3; // 右转
+ public static final int EM_TRAFFICCAR_MOVE_DIRECTION_TURN_AROUND = 4; // 掉头
+ }
+
+ // 货物通道信息(物流)
+ public static class NET_CUSTOM_INFO extends SdkStructure
+ {
+ public int nCargoChannelNum; // 货物通道个数
+ public float[] fCoverageRate = new float[MAX_CARGO_CHANNEL_NUM]; // 货物覆盖率
+ public byte[] byReserved = new byte[40]; // 保留字节
+ }
+
+ // 车辆物件类型
+ public static class EM_COMM_ATTACHMENT_TYPE extends SdkStructure
+ {
+ public static final int COMM_ATTACHMENT_TYPE_UNKNOWN = 0; // 未知类型
+ public static final int COMM_ATTACHMENT_TYPE_FURNITURE = 1; // 摆件
+ public static final int COMM_ATTACHMENT_TYPE_PENDANT = 2; // 挂件
+ public static final int COMM_ATTACHMENT_TYPE_TISSUEBOX = 3; // 纸巾盒
+ public static final int COMM_ATTACHMENT_TYPE_DANGER = 4; // 危险品
+ public static final int COMM_ATTACHMENT_TYPE_PERFUMEBOX = 5; // 香水
+ }
+
+ // 按功能划分的车辆类型
+ public static class EM_VEHICLE_TYPE_BY_FUNC extends SdkStructure
+ {
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_UNKNOWN = 0; // 未知
+ /*以下为特种车辆类型*/
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_TANK_CAR = 1; // 危化品车辆
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_SLOT_TANK_CAR = 2; // 槽罐车
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_DREGS_CAR = 3; // 渣土车
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_CONCRETE_MIXER_TRUCK = 4; // 混凝土搅拌车
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_TAXI = 5; // 出租车
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_POLICE = 6; // 警车
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_AMBULANCE = 7; // 救护车
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_GENERAL = 8; // 普通车
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_WATERING_CAR = 9; // 洒水车
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_FIRE_ENGINE = 10; // 消防车
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_MACHINESHOP_TRUCK = 11; // 工程车
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_POWER_LOT_VEHICLE = 12; // 粉粒物料车
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_SUCTION_SEWAGE_TRUCK = 13; // 吸污车
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_NORMAL_TANK_TRUCK = 14; // 普通罐车
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_SCHOOL_BUS = 15; // 校车
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_EXCAVATOR = 16; // 挖掘机
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_BULLDOZER = 17; // 推土车
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_CRANE = 18; // 吊车
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_PUMP_TRUCK = 19; // 泵车
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_POULTRY = 20; // 禽畜车
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_TRACTOR = 21; // 拖拉机
+ /*以上为特种车辆类型*/
+ }
+
+ // 标准车辆类型
+ public static class EM_STANDARD_VEHICLE_TYPE extends SdkStructure
+ {
+ public static final int EM_STANDARD_VEHICLE_UNKNOWN = 0; // 未知
+ public static final int EM_STANDARD_VEHICLE_MOTOR = 1; // 机动车
+ public static final int EM_STANDARD_VEHICLE_BUS = 2; // 公交车
+ public static final int EM_STANDARD_VEHICLE_UNLICENSED_MOTOR = 3; // 无牌机动车
+ public static final int EM_STANDARD_VEHICLE_LARGE_CAR = 4; // 大型汽车
+ public static final int EM_STANDARD_VEHICLE_MICRO_CAR = 5; // 小型汽车
+ public static final int EM_STANDARD_VEHICLE_EMBASSY_CAR = 6; // 使馆汽车
+ public static final int EM_STANDARD_VEHICLE_MARGINAL_CAR = 7; // 领馆汽车
+ public static final int EM_STANDARD_VEHICLE_AREAOUT_CAR = 8; // 境外汽车
+ public static final int EM_STANDARD_VEHICLE_FOREIGN_CAR = 9; // 外籍汽车
+ public static final int EM_STANDARD_VEHICLE_FARM_TRANS_CAR = 10; // 农用运输车
+ public static final int EM_STANDARD_VEHICLE_TRACTOR = 11; // 拖拉机
+ public static final int EM_STANDARD_VEHICLE_TRAILER = 12; // 挂车
+ public static final int EM_STANDARD_VEHICLE_COACH_CAR = 13; // 教练汽车
+ public static final int EM_STANDARD_VEHICLE_TRIAL_CAR = 14; // 试验汽车
+ public static final int EM_STANDARD_VEHICLE_TEMPORARYENTRY_CAR = 15; // 临时入境汽车
+ public static final int EM_STANDARD_VEHICLE_TEMPORARYENTRY_MOTORCYCLE = 16; // 临时入境摩托
+ public static final int EM_STANDARD_VEHICLE_TEMPORARY_STEER_CAR = 17; // 临时行驶车
+ public static final int EM_STANDARD_VEHICLE_LARGE_TRUCK = 18; // 大货车
+ public static final int EM_STANDARD_VEHICLE_MID_TRUCK = 19; // 中货车
+ public static final int EM_STANDARD_VEHICLE_MICRO_TRUCK = 20; // 小货车
+ public static final int EM_STANDARD_VEHICLE_MICROBUS = 21; // 面包车
+ public static final int EM_STANDARD_VEHICLE_SALOON_CAR = 22; // 轿车
+ public static final int EM_STANDARD_VEHICLE_CARRIAGE = 23; // 小轿车
+ public static final int EM_STANDARD_VEHICLE_MINI_CARRIAGE = 24; // 微型轿车
+ public static final int EM_STANDARD_VEHICLE_SUV_MPV = 25; // SUV或者MPV
+ public static final int EM_STANDARD_VEHICLE_SUV = 26; // SUV
+ public static final int EM_STANDARD_VEHICLE_MPV = 27; // MPV
+ public static final int EM_STANDARD_VEHICLE_PASSENGER_CAR = 28; // 客车
+ public static final int EM_STANDARD_VEHICLE_MOTOR_BUS = 29; // 大客车
+ public static final int EM_STANDARD_VEHICLE_MID_PASSENGER_CAR = 30; // 中客车
+ public static final int EM_STANDARD_VEHICLE_MINI_BUS = 31; // 小客车
+ public static final int EM_STANDARD_VEHICLE_PICKUP = 32; // 皮卡车
+ public static final int EM_STANDARD_VEHICLE_OILTANK_TRUCK = 33; // 油罐车
+ }
+
+ // 报警事件类型 EVENT_ALARM_LOCALALARM(外部报警),EVENT_ALARM_MOTIONALARM(动检报警)报警)
+ public static class DEV_EVENT_ALARM_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] Reserved = new byte[4]; // 保留字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public byte byEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved=new byte[3]; // 保留字节
+
+ public int emSenseType; // 传感器类型,参考NET_SENSE_METHOD
+ public int emDefenceAreaType; // 防区类型 ,参考EM_NET_DEFENCE_AREA_TYPE
+ public NET_GPS_STATUS_INFO stuGPS; // GPS信息
+ public byte[] szUserID = new byte[32]; // 本地报警时登陆的用户ID
+ public byte[] szUserName = new byte[128]; // 本地报警时登陆的用户名
+ public byte[] szSN = new byte[32]; // 设备序列号
+ public int bExAlarmIn; // 外部输入报警
+ public NET_FILE_PROCESS_INFO stuFileProcessInfo; // 图片与智能事件信息
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] byReservedEx = new byte[512]; // 保留字节
+ }
+
+ // 报警事件类型 EVENT_ALARM_VIDEOBLIND(视频遮挡报警)
+ public static class DEV_EVENT_ALARM_VIDEOBLIND extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] Reserved = new byte[4]; // 保留字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+
+ public NET_TIME_EX stuTime; // 事件发生的时间, (设备时间, 不一定是utc时间)
+ public byte[] szDriverID=new byte[32]; // 司机ID
+ public NET_GPS_STATUS_INFO stuGPSStatus; // GPS信息
+ public byte[] szVideoPath=new byte[256]; // 违章关联视频FTP上传路径
+ public NET_IMAGE_INFO_EX stuImageInfo[] = (NET_IMAGE_INFO_EX[])new NET_IMAGE_INFO_EX().toArray(6); //图片信息扩展
+ public int nImageInfo; //图片信息扩展的个数
+ public NET_IMAGE_INFO_EX2 stuImageInfoEx2[] = (NET_IMAGE_INFO_EX2[])new NET_IMAGE_INFO_EX2().toArray(32); //图片信息数组
+ public int nImageInfoEx2Num; //图片信息个数
+ public int nRelatingVideoInfoNum; // 违章关联的多个视频信息个数
+ public NET_RELATING_VIDEO_INFO[] stuRelatingVideoInfo = new NET_RELATING_VIDEO_INFO[16]; // 违章关联的多个视频信息数组,最多支持16个视频
+ public int bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte byReserved[] = new byte[1023]; //预留字节
+ }
+
+ // 事件类型 EVENT_IVS_HIGHSPEED(车辆超速报警事件)对应的数据块描述信息
+ public static class DEV_EVENT_HIGHSPEED_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 事件动作,1表示持续性事件开始,2表示持续性事件结束;
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public byte[] byReserved = new byte[4]; // 保留字节
+ public double dbPTS; // 时间戳(单位是毫秒)
+ public NET_GPS_STATUS_INFO stGPSStatusInfo; // GPS信息
+ public int nSpeedLimit; // 车连限速值(km/h)
+ public int nCurSpeed; // 当前车辆速度(km/h)
+ public int nMaxSpeed; // 最高速度(Km/h)
+ public NET_TIME_EX stuStartTime; // 开始时间(车载需求),nAction为2时上报此字段
+ public byte[] byReserved1 = new byte[1024]; // 保留字节
+ }
+
+ // 事件类型EVENT_IVS_TIREDPHYSIOLOGICAL(生理疲劳驾驶事件)对应的数据块描述信息
+ public static class DEV_EVENT_TIREDPHYSIOLOGICAL_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public NET_GPS_STATUS_INFO stuGPSStatus; // GPS信息
+ public byte[] szDriverID= new byte[32]; // 司机ID
+ public byte[] szVideoPath= new byte[256]; // 违章关联视频FTP上传路径
+ public int nRelatingVideoInfoNum; // 违章关联的多个视频信息个数
+ public NET_RELATING_VIDEO_INFO[] stuRelatingVideoInfo = new NET_RELATING_VIDEO_INFO[16]; // 违章关联的多个视频信息数组,最多支持16个视频
+ public byte[] bReserved = new byte[736]; // 保留字节,留待扩展.
+ public DEV_EVENT_TIREDPHYSIOLOGICAL_INFO() {
+ for (int i = 0; i < stuRelatingVideoInfo.length; i++) {
+ stuRelatingVideoInfo[i] = new NET_RELATING_VIDEO_INFO();
+ }
+ }
+ }
+
+ // 事件类型EVENT_IVS_TRAFFIC_TIREDLOWERHEAD(开车低头报警事件)对应的数据块描述信息
+ public static class DEV_EVENT_TIREDLOWERHEAD_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+
+ public NET_GPS_STATUS_INFO stuGPSStatus; // GPS信息
+ public byte[] szDriverID= new byte[32]; // 司机ID
+ public byte[] szVideoPath= new byte[256]; // 违章关联视频FTP上传路径
+ public int nRelatingVideoInfoNum; // 违章关联的多个视频信息个数
+ public NET_RELATING_VIDEO_INFO[] stuRelatingVideoInfo = new NET_RELATING_VIDEO_INFO[16]; // 违章关联的多个视频信息数组,最多支持16个视频
+ public byte[] bReserved = new byte[736]; // 保留字节,留待扩展.
+ public DEV_EVENT_TIREDLOWERHEAD_INFO() {
+ for (int i = 0; i < stuRelatingVideoInfo.length; i++) {
+ stuRelatingVideoInfo[i] = new NET_RELATING_VIDEO_INFO();
+ }
+ }
+ }
+
+ // 事件类型EVENT_IVS_TRAFFIC_DRIVERLEAVEPOST(开车离岗报警事件)对应的数据块描述信息
+ public static class DEV_EVENT_DRIVERLEAVEPOST_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+
+ public NET_GPS_STATUS_INFO stuGPSStatus; // GPS信息
+ public byte[] szDriverID= new byte[32]; // 司机ID
+ public byte[] szVideoPath= new byte[256]; // 违章关联视频FTP上传路径
+ public int nRelatingVideoInfoNum; // 违章关联的多个视频信息个数
+ public NET_RELATING_VIDEO_INFO[] stuRelatingVideoInfo = new NET_RELATING_VIDEO_INFO[16]; // 违章关联的多个视频信息数组,最多支持16个视频
+ public byte[] bReserved = new byte[736]; // 保留字节,留待扩展.
+ public DEV_EVENT_DRIVERLEAVEPOST_INFO() {
+ for (int i = 0; i < stuRelatingVideoInfo.length; i++) {
+ stuRelatingVideoInfo[i] = new NET_RELATING_VIDEO_INFO();
+ }
+ }
+ }
+
+ // 事件类型 EVENT_IVS_TRAFFIC_DRIVERYAWN (开车打哈欠事件) 对应的数据块描述信息
+ public static class DEV_EVENT_DRIVERYAWN_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public byte[] szReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+
+ public NET_GPS_STATUS_INFO stuGPSStatus; // GPS信息
+ public byte[] szDriverID= new byte[32]; // 司机ID
+ public byte[] szVideoPath= new byte[256]; // 违章关联视频FTP上传路径
+ public int nRelatingVideoInfoNum; // 违章关联的多个视频信息个数
+ public NET_RELATING_VIDEO_INFO[] stuRelatingVideoInfo = new NET_RELATING_VIDEO_INFO[16]; // 违章关联的多个视频信息数组,最多支持16个视频
+ public byte[] bReserved = new byte[736]; // 保留字节,留待扩展.
+ public DEV_EVENT_DRIVERYAWN_INFO() {
+ for (int i = 0; i < stuRelatingVideoInfo.length; i++) {
+ stuRelatingVideoInfo[i] = new NET_RELATING_VIDEO_INFO();
+ }
+ }
+ }
+
+ // 事件类型 EVENT_IVS_FORWARDCOLLISION_WARNNING(前向碰撞预警) 对应的数据块描述信息
+ public static class DEV_EVENT_FORWARDCOLLISION_WARNNING_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nEventID; // 事件ID
+ public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nAction; // 0:脉冲 1:开始 2:停止
+
+ public NET_GPS_STATUS_INFO stuGPSStatusInfo; // GPS信息
+ public byte[] szDriverID= new byte[32]; // 司机ID
+ public byte[] szVideoPath= new byte[256]; // 违章关联视频FTP上传路径
+ public int nRelatingVideoInfoNum; // 违章关联的多个视频信息个数
+ public NET_RELATING_VIDEO_INFO[] stuRelatingVideoInfo = new NET_RELATING_VIDEO_INFO[16]; // 违章关联的多个视频信息数组,最多支持16个视频
+ public byte[] bReserved = new byte[736]; // 保留字节
+ public DEV_EVENT_FORWARDCOLLISION_WARNNING_INFO() {
+ for (int i = 0; i < stuRelatingVideoInfo.length; i++) {
+ stuRelatingVideoInfo[i] = new NET_RELATING_VIDEO_INFO();
+ }
+ }
+ }
+
+ // 事件类型 EVNET_IVS_LANEDEPARTURE_WARNNING(车道偏移预警) 对应的数据块描述信息
+ public static class DEV_EVENT_LANEDEPARTURE_WARNNING_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nEventID; // 事件ID
+ public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nAction; // 0:脉冲 1:开始 2:停止
+
+ public NET_GPS_STATUS_INFO stuGPSStatusInfo; // GPS信息
+ public byte[] szDriverID= new byte[32]; // 司机ID
+ public byte[] szVideoPath= new byte[256]; // 违章关联视频FTP上传路径
+ public int nRelatingVideoInfoNum; // 违章关联的多个视频信息个数
+ public NET_RELATING_VIDEO_INFO[] stuRelatingVideoInfo = new NET_RELATING_VIDEO_INFO[16]; // 违章关联的多个视频信息数组,最多支持16个视频
+ public byte[] bReserved = new byte[736]; // 保留字节,留待扩展.
+ public DEV_EVENT_LANEDEPARTURE_WARNNING_INFO() {
+ for (int i = 0; i < stuRelatingVideoInfo.length; i++) {
+ stuRelatingVideoInfo[i] = new NET_RELATING_VIDEO_INFO();
+ }
+ }
+ }
+
+ //图片路径类型
+ public static class NET_PICTURE_PATH_TYPE extends SdkStructure
+ {
+ public static final int NET_PATH_LOCAL_PATH = 0; // 本地硬盘或者sd卡成功写入路径
+ public static final int NET_PATH_FTP_PATH = 1; // 设备成功写到ftp服务器的路径
+ public static final int NET_PATH_VIDEO_PATH = 2; // 当前接入需要获取当前违章的关联视频的FTP上传路径
+ }
+
+ public static final int MAX_PIC_PATH_NUM = 16;
+ public static class NET_RESERVED_PATH extends SdkStructure
+ {
+ public int nMaxPathNum; // 图片路径总数,为0时采用设备默认路径
+ public int[] emPictruePaths = new int[MAX_PIC_PATH_NUM]; // 图片路径类型,详见NET_PICTURE_PATH_TYPE
+ }
+
+ //离线传输参数
+ public static class NET_OFFLINE_PARAM extends SdkStructure
+ {
+ public byte[] szClientID = new byte[20]; // 客户端mac地址,冒号分隔形式
+ public byte[] byReserved = new byte[108]; // 保留
+ }
+
+ public static class NET_RESERVED_COMMON extends SdkStructure
+ {
+ public int dwStructSize;
+ public Pointer pIntelBox; // 兼容RESERVED_TYPE_FOR_INTEL_BOX,指向ReservedDataIntelBox
+ public int dwSnapFlagMask; // 抓图标志(按位),0位:"*",1位:"Timing",2位:"Manual",3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ public Pointer pstuOfflineParam; // 离线传输参数,指向NET_OFFLINE_PARAM
+ public Pointer pstuPath; // 兼容RESERVED_TYPE_FOR_PATH,指向NET_RESERVED_PATH
+ public int emPathMode; // 返回的图片存储路径模式,对应枚举EM_PATH_MODE
+ /**
+ * 对应结构体{@link EM_FILTER_IMAGE_TYPE}
+ */
+ public Pointer pImageType; // 返回的图片类型, 由用户申请释放
+ public int nImageTypeNum; // pImageType 有效个数
+ public int bFlagCustomInfo; // szCustomInfo 标志位 TRUE时 使用szCustomInfo字段
+ public byte[] szCustomInfo = new byte[512]; // 客户自定义信息 customInfo是getFiltercaps中能力对应的订阅参数的格式化字符串表示,字符串格式为:订阅参数以&分隔,订阅参数的名字和值用=连接
+ public int bSetEventsType; // 是否设置事件类型
+ public byte[] szRserved = new byte[4];// 字节对齐
+ public int emOrder; // 设备给客户端传离线图片需要按照的顺序,如果是倒序上传:越晚产生的优先上传,越早产生的后传,参考枚举EM_EVENT_ORDER
+
+ public NET_RESERVED_COMMON()
+ {
+ this.dwStructSize = this.size();
+ }
+ }
+
+ // 事件类型EVENT_IVS_TRAFFIC_DRIVER_SMOKING (驾驶员抽烟事件)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_DRIVER_SMOKING extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public int nTriggerType; // TriggerType:触发类型,0车检器,1雷达,2视频
+ public int PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束
+ public byte byEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; BYTE byReserved1[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public byte[] byReserved1 = new byte[2];
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nLane; // 对应车道号
+ public int nMark; // 底层产生的触发抓拍帧标记
+ public int nFrameSequence; // 视频分析帧序号
+ public int nSource; // 视频分析的数据源地址
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stuTrafficCar; // 交通车辆信息
+ public int nSpeed; // 车辆实际速度,Km/h
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] szDriverID = new byte[32]; // 司机ID
+ public int nRelatingVideoInfoNum; // 违章关联的多个视频信息个数
+ public NET_RELATING_VIDEO_INFO[] stuRelatingVideoInfo = new NET_RELATING_VIDEO_INFO[16]; // 违章关联的多个视频信息数组,最多支持16个视频
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] byReserved = new byte[952]; // 保留字节
+ }
+
+ // 事件类型EVENT_IVS_TRAFFIC_DRIVER_CALLING(驾驶员打电话事件)对应的数据块描述信息
+ public static class DEV_EVENT_TRAFFIC_DRIVER_CALLING extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public int nTriggerType; // TriggerType:触发类型,0车检器,1雷达,2视频
+ public int PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nSequence; // 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束
+ public byte byEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束; BYTE byReserved1[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public byte[] byReserved1 = new byte[2];
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nLane; // 对应车道号
+ public int nMark; // 底层产生的触发抓拍帧标记
+ public int nFrameSequence; // 视频分析帧序号
+ public int nSource; // 视频分析的数据源地址
+ public NET_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_MSG_OBJECT stuVehicle; // 车身信息
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stuTrafficCar; // 交通车辆信息
+ public int nSpeed; // 车辆实际速度,Km/h
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public NET_RESOLUTION_INFO stuResolution; // 对应图片的分辨率
+ public EVENT_COMM_INFO stCommInfo; // 公共信息
+ public NET_GPS_INFO stuGPSInfo; // GPS信息 车载
+ public byte[] szDriverID = new byte[32]; // 司机ID
+ public int nRelatingVideoInfoNum; // 违章关联的多个视频信息个数
+ public NET_RELATING_VIDEO_INFO[] stuRelatingVideoInfo = new NET_RELATING_VIDEO_INFO[16]; // 违章关联的多个视频信息数组,最多支持16个视频
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] byReserved = new byte[952]; // 保留字节
+ public DEV_EVENT_TRAFFIC_DRIVER_CALLING() {
+ for (int i = 0; i < stuRelatingVideoInfo.length; i++) {
+ stuRelatingVideoInfo[i] = new NET_RELATING_VIDEO_INFO();
+ }
+ }
+ }
+
+ // 事件类型EVENT_IVS_TRAFFIC_DRIVERLOOKAROUND(开车左顾右盼报警事件)对应的数据块描述信息
+ public static class DEV_EVENT_DRIVERLOOKAROUND_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+
+ public NET_GPS_STATUS_INFO stuGPSStatus; // GPS信息
+ public byte[] szDriverID= new byte[32]; // 司机ID
+ public byte[] szVideoPath= new byte[256]; // 违章关联视频FTP上传路径
+ public int nRelatingVideoInfoNum; // 违章关联的多个视频信息个数
+ public NET_RELATING_VIDEO_INFO[] stuRelatingVideoInfo = new NET_RELATING_VIDEO_INFO[16]; // 违章关联的多个视频信息数组,最多支持16个视频
+ public byte[] bReserved = new byte[736]; // 保留字节,留待扩展.
+ public DEV_EVENT_DRIVERLOOKAROUND_INFO() {
+ for (int i = 0; i < stuRelatingVideoInfo.length; i++) {
+ stuRelatingVideoInfo[i] = new NET_RELATING_VIDEO_INFO();
+ }
+ }
+
+ }
+
+ // 进站离站状态
+ public static class NET_BUS_STATE extends SdkStructure
+ {
+ public static final int NET_BUS_STATE_UNKNOWN = 0; // 未知
+ public static final int NET_BUS_STATE_ILLEGAL = 1; // 非法
+ public static final int NET_BUS_STATE_LEGAL = 2; // 合法
+ }
+
+ // 报警事件类型NET_ALARM_ENCLOSURE_ALARM(电子围栏事件)对应的数据描述信息
+ public static class ALARM_ENCLOSURE_ALARM_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int dwAlarmType; // 报警类型, 按位分别表示,
+ // 0:LimitSpeed, 1:DriveAllow, 2:ForbidDrive, 3:LoadGoods, 4:UploadGoods
+ public int dwAlarmDetail; // 报警描述, 按位分别表示,
+ // 0:DriveIn, 1:DriveOut, 2:Overspeed, 3:SpeedClear
+ public int emState; // 是否按规定时间触发事件,详见NET_BUS_STATE
+ public int dwDriverNo; // 司机编号
+ public int dwEnclosureID; // 围栏ID
+ public int dwLimitSpeed; // 限速
+ public int dwCurrentSpeed; // 当前速度
+ public NET_TIME_EX stuTime; // 当前时间
+ public NET_GPS_STATUS_INFO stuGPSStatusInfo; // GPS信息
+
+ public ALARM_ENCLOSURE_ALARM_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ public static class DEV_SET_RESULT extends SdkStructure
+ {
+ public int dwType; // 类型(即GetDevConfig和SetDevConfig的类型)
+ public short wResultCode; // 返回码;0:成功,1:失败,2:数据不合法,3:暂时无法设置,4:没有权限
+ public short wRebootSign; // 重启标志;0:不需要重启,1:需要重启才生效
+ public int[] dwReserved = new int[2]; // 保留
+ }
+
+ // ALARM_ENCLOSURE_INFO
+ // 电子围栏报警
+ public static class ALARM_ENCLOSURE_INFO extends SdkStructure
+ {
+ public int nTypeNumber; // 有效电子围栏类型个数
+ public byte[] bType = new byte[16]; // 电子围栏类型, 见 ENCLOSURE_TYPE
+ public int nAlarmTypeNumber; // 有效报警类型个数
+ public byte[] bAlarmType = new byte[16]; // 报警类型,见ENCLOSURE_ALARM_TYPE
+ public byte[] szDriverId = new byte[32]; // 司机工号
+ public int unEnclosureId; // 电子围栏ID
+ public int unLimitSpeed; // 限速,单位km/h
+ public int unCurrentSpeed; // 当前速度
+ public NET_TIME stAlarmTime; // 报警发生时间
+ public int dwLongitude; // 经度(单位是百万分之度,范围0-360度)如东经120.178274度表示为300178274
+ public int dwLatidude; // 纬度(单位是百万分之度,范围0-180度)如北纬30.183382度表示为12018338
+ // 经纬度的具体转换方式可以参考结构体 NET_WIFI_GPS_INFO 中的注释
+ public byte bOffline; // 0-实时 1-补传
+ public byte[] reserve = new byte[3]; // 字节对齐
+ public int unTriggerCount; // 围栏触发次数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public int bIsAlarmEnclosureInfoEx; // 该值为TRUE时应使用 ALARM_ENCLOSURE_INFO_EX 结构体中字段
+ public ALARM_ENCLOSURE_INFO_EX stuAlarmEnclosureInfoEx = new ALARM_ENCLOSURE_INFO_EX(); // 当走三代事件时数据存在该结构体
+ public byte[] byReserved = new byte[128]; // 保留字节
+ }
+
+ // NETDEV_3GFLOW_EXCEED_STATE_INFO
+ // 3G流量超出阈值状态信息
+ public static class NETDEV_3GFLOW_EXCEED_STATE_INFO extends SdkStructure
+ {
+ public byte bState; // 3G流量超出阈值状态,0表示未超出阀值,1表示超出阀值
+ public byte[] reserve1 = new byte[3]; // 字节对齐
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] reserve = new byte[32]; // 保留字节
+ }
+
+ // 飞行器类型
+ public static class ENUM_UAV_TYPE extends SdkStructure
+ {
+ public static final int ENUM_UAV_TYPE_GENERIC = 0; // 通用
+ public static final int ENUM_UAV_TYPE_FIXED_WING = 1; // 固定翼
+ public static final int ENUM_UAV_TYPE_QUADROTOR = 2; // 四轴
+ public static final int ENUM_UAV_TYPE_COAXIAL = 3; // 共轴
+ public static final int ENUM_UAV_TYPE_HELICOPTER = 4; // 直机
+ public static final int ENUM_UAV_TYPE_ANTENNA_TRACKER = 5; // 地面跟踪天线
+ public static final int ENUM_UAV_TYPE_GCS = 6; // 地面站
+ public static final int ENUM_UAV_TYPE_AIRSHIP = 7; // 有控飞艇
+ public static final int ENUM_UAV_TYPE_FREE_BALLOON = 8; // 自由飞气球
+ public static final int ENUM_UAV_TYPE_ROCKET = 9; // 火箭
+ public static final int ENUM_UAV_TYPE_GROUND_ROVER = 10; // 地面车辆
+ public static final int ENUM_UAV_TYPE_SURFACE_BOAT = 11; // 水面船艇
+ public static final int ENUM_UAV_TYPE_SUBMARINE = 12; // 潜艇
+ public static final int ENUM_UAV_TYPE_HEXAROTOR = 13; // 六轴
+ public static final int ENUM_UAV_TYPE_OCTOROTOR = 14; // 八轴
+ public static final int ENUM_UAV_TYPE_TRICOPTER = 15; // 三轴
+ public static final int ENUM_UAV_TYPE_FLAPPING_WING = 16; // 扑翼机
+ public static final int ENUM_UAV_TYPE_KITE = 17; // 风筝
+ public static final int ENUM_UAV_TYPE_ONBOARD_CONTROLLER = 18; // 控制器
+ public static final int ENUM_UAV_TYPE_VTOL_DUOROTOR = 19; // 两翼VTOL
+ public static final int ENUM_UAV_TYPE_VTOL_QUADROTOR = 20; // 四翼VTOL
+ public static final int ENUM_UAV_TYPE_VTOL_TILTROTOR = 21; // 倾转旋翼机
+ public static final int ENUM_UAV_TYPE_VTOL_RESERVED2 = 22; // VTOL 保留2
+ public static final int ENUM_UAV_TYPE_VTOL_RESERVED3 = 23; // VTOL 保留3
+ public static final int ENUM_UAV_TYPE_VTOL_RESERVED4 = 24; // VTOL 保留4
+ public static final int ENUM_UAV_TYPE_VTOL_RESERVED5 = 25; // VTOL 保留5
+ public static final int ENUM_UAV_TYPE_GIMBAL = 26; // 常平架
+ public static final int ENUM_UAV_TYPE_ADSB = 27; // ADSB
+ }
+
+ // 飞行器模式
+ public static class ENUM_UAV_MODE extends SdkStructure
+ {
+ public static final int ENUM_UAV_MODE_UNKNOWN = 0; // 未知模式
+ public static final int ENUM_UAV_MODE_FIXED_WING_MANUAL = 0; // 固定翼 手动模式
+ public static final int ENUM_UAV_MODE_FIXED_WING_CIRCLE = 1; // 固定翼 绕圈模式
+ public static final int ENUM_UAV_MODE_FIXED_WING_STABILIZE = 2; // 固定翼 自稳模式
+ public static final int ENUM_UAV_MODE_FIXED_WING_TRAINING = 3; // 固定翼 训练模式
+ public static final int ENUM_UAV_MODE_FIXED_WING_ACRO = 4; // 固定翼 特技模式
+ public static final int ENUM_UAV_MODE_FIXED_WING_FLY_BY_WIRE_A = 5; // 固定翼 A翼飞行模式
+ public static final int ENUM_UAV_MODE_FIXED_WING_FLY_BY_WIRE_B = 6; // 固定翼 B翼飞行模式
+ public static final int ENUM_UAV_MODE_FIXED_WING_CRUISE = 7; // 固定翼 巡航模式
+ public static final int ENUM_UAV_MODE_FIXED_WING_AUTOTUNE = 8; // 固定翼 自动统调
+ public static final int ENUM_UAV_MODE_FIXED_WING_AUTO = 10; // 固定翼 智能模式
+ public static final int ENUM_UAV_MODE_FIXED_WING_RTL = 11; // 固定翼 返航模式
+ public static final int ENUM_UAV_MODE_FIXED_WING_LOITER = 12; // 固定翼 定点模式
+ public static final int ENUM_UAV_MODE_FIXED_WING_GUIDED = 15; // 固定翼 引导模式
+
+ public static final int ENUM_UAV_MODE_QUADROTOR_STABILIZE = 100; // 四轴 自稳模式
+ public static final int ENUM_UAV_MODE_QUADROTOR_ACRO = 101; // 四轴 特技模式
+ public static final int ENUM_UAV_MODE_QUADROTOR_ALT_HOLD = 102; // 四轴 定高模式
+ public static final int ENUM_UAV_MODE_QUADROTOR_AUTO = 103; // 四轴 智能模式
+ public static final int ENUM_UAV_MODE_QUADROTOR_GUIDED = 104; // 四轴 引导模式
+ public static final int ENUM_UAV_MODE_QUADROTOR_LOITER = 105; // 四轴 定点模式
+ public static final int ENUM_UAV_MODE_QUADROTOR_RTL = 106; // 四轴 返航模式
+ public static final int ENUM_UAV_MODE_QUADROTOR_CIRCLE = 107; // 四轴 绕圈模式
+ public static final int ENUM_UAV_MODE_QUADROTOR_LAND = 109; // 四轴 降落模式
+ public static final int ENUM_UAV_MODE_QUADROTOR_OF_LOITER = 110; // 四轴 启用光流的悬停模式需要光流传感器来保持位置和高度
+ public static final int ENUM_UAV_MODE_QUADROTOR_TOY = 111; // 四轴 飘移模式
+ public static final int ENUM_UAV_MODE_QUADROTOR_SPORT = 113; // 四轴 运动模式
+ public static final int ENUM_UAV_MODE_QUADROTOR_AUTOTUNE = 115; // 四轴 自动统调
+ public static final int ENUM_UAV_MODE_QUADROTOR_POSHOLD = 116; // 四轴 保持模式
+ public static final int ENUM_UAV_MODE_QUADROTOR_BRAKE = 117; // 四轴 制动模式
+
+ public static final int ENUM_UAV_MODE_GROUND_ROVER_MANUAL = 200; // 地面车辆 手动模式
+ public static final int ENUM_UAV_MODE_GROUND_ROVER_LEARNING = 202; // 地面车辆 学习模式
+ public static final int ENUM_UAV_MODE_GROUND_ROVER_STEERING = 203; // 地面车辆 驾驶模式
+ public static final int ENUM_UAV_MODE_GROUND_ROVER_HOLD = 204; // 地面车辆 锁定模式
+ public static final int ENUM_UAV_MODE_GROUND_ROVER_AUTO = 210; // 地面车辆 智能模式
+ public static final int ENUM_UAV_MODE_GROUND_ROVER_RTL = 211; // 地面车辆 返航模式
+ public static final int ENUM_UAV_MODE_GROUND_ROVER_GUIDED = 215; // 地面车辆 引导模式
+ public static final int ENUM_UAV_MODE_GROUND_ROVER_INITIALIZING = 216; // 地面车辆 初始化模式
+
+ public static final int ENUM_UAV_MODE_HEXAROTOR_STABILIZE = 300; // 六轴 自稳模式
+ public static final int ENUM_UAV_MODE_HEXAROTOR_ACRO = 301; // 六轴 特技模式
+ public static final int ENUM_UAV_MODE_HEXAROTOR_ALT_HOLD = 302; // 六轴 定高模式
+ public static final int ENUM_UAV_MODE_HEXAROTOR_AUTO = 303; // 六轴 智能模式
+ public static final int ENUM_UAV_MODE_HEXAROTOR_GUIDED = 304; // 六轴 引导模式
+ public static final int ENUM_UAV_MODE_HEXAROTOR_LOITER = 305; // 六轴 定点模式
+ public static final int ENUM_UAV_MODE_HEXAROTOR_RTL = 306; // 六轴 返航模式
+ public static final int ENUM_UAV_MODE_HEXAROTOR_CIRCLE = 307; // 六轴 绕圈模式
+ public static final int ENUM_UAV_MODE_HEXAROTOR_LAND = 309; // 六轴 降落模式
+ public static final int ENUM_UAV_MODE_HEXAROTOR_OF_LOITER = 310; // 六轴 启用光流的悬停模式需要光流传感器来保持位置和高度
+ public static final int ENUM_UAV_MODE_HEXAROTOR_DRIFT = 311; // 六轴 飘移模式
+ public static final int ENUM_UAV_MODE_HEXAROTOR_SPORT = 313; // 六轴 运动模式
+ public static final int ENUM_UAV_MODE_HEXAROTOR_AUTOTUNE = 315; // 六轴 自动统调
+ public static final int ENUM_UAV_MODE_HEXAROTOR_POSHOLD = 316; // 六轴 保持模式
+ public static final int ENUM_UAV_MODE_HEXAROTOR_BRAKE = 317; // 六轴 制动模式
+ }
+
+ // 无人机系统状态
+ public static class ENUM_UAV_STATE extends SdkStructure
+ {
+ public static final int ENUM_UAV_STATE_UNINIT = 0; // 未初始化, 状态未知
+ public static final int ENUM_UAV_STATE_BOOT = 1; // 正在启动
+ public static final int ENUM_UAV_STATE_CALIBRATING = 2; // 正在校准,未准备好起飞.
+ public static final int ENUM_UAV_STATE_STANDBY = 3; // 系统地面待命,随时可以起飞.
+ public static final int ENUM_UAV_STATE_ACTIVE = 4; // 开车/开航. 发动机已经启动.
+ public static final int ENUM_UAV_STATE_CRITICAL = 5; // 系统处于失常飞行状态,仍能导航.
+ public static final int ENUM_UAV_STATE_EMERGENCY = 6; // 系统处于失常飞行状态,若干设备失灵,坠落状态.
+ public static final int ENUM_UAV_STATE_POWEROFF = 7; // 系统刚执行了关机指令,正在关闭.
+ }
+
+ // UAV 系统当前模式
+ public static class NET_UAV_SYS_MODE_STATE extends SdkStructure
+ {
+ public int bSafetyArmedEnabled; // 主发动机使能, 准备好起飞.
+ public int bManualInputEnabled; // 遥控输入信号使能.
+ public int bHILEnabled; // HIL硬件环在线模拟使能.所有发动机, 舵机及其他动作设备阻断, 但内部软件处于全部可操作状态.
+ public int bStabilizeEnabled; // 高度/位置电子增稳使能.在此状态下,飞行器仍需要外部操作指令以实现操作
+ public int bGuidedEnabled; // 导航使能.导航数据和指令来自导航/航点指令表文件
+ public int bAutoEnabled; // 全自主航行模式使能.系统自行决定目的地.前一项“导航使能”可以设置为TURE或FLASE状态
+ public int bTestEnabled; // 测试模式使能.本标识仅供临时的系统测试之用,不应该用于实际航行的应用中.
+ public int bReserved; // 保留模式
+ }
+
+ // 心跳状态信息
+ public static class NET_UAV_HEARTBEAT extends SdkStructure
+ {
+ public int emUAVMode; // 飞行模式和飞行器形态类型相关,详见ENUM_UAV_MODE
+ public int emUAVType; // 飞行器形态类型,详见ENUM_UAV_TYPE
+ public int emSystemStatus; // 系统状态,详见ENUM_UAV_STATE
+ public NET_UAV_SYS_MODE_STATE stuBaseMode; // 系统当前模式
+ public byte[] byReserved = new byte[8]; // 保留字节
+ }
+
+ // 传感器
+ public static class ENUM_UAV_SENSOR extends SdkStructure
+ {
+ public static final int ENUM_UAV_SENSOR_UNKNOWN = 0; // 未知类型
+ public static final int ENUM_UAV_SENSOR_3D_GYRO = 1; // 三轴陀螺
+ public static final int ENUM_UAV_SENSOR_3D_ACCEL = 2; // 三轴加速度/倾角仪
+ public static final int ENUM_UAV_SENSOR_3D_MAG = 3; // 三轴磁罗盘
+ public static final int ENUM_UAV_SENSOR_ABSOLUTE_PRESSURE = 4; // 绝对气压计
+ public static final int ENUM_UAV_SENSOR_DIFFERENTIAL_PRESSURE = 5; // 相对气压计
+ public static final int ENUM_UAV_SENSOR_GPS = 6; // GPS
+ public static final int ENUM_UAV_SENSOR_OPTICAL_FLOW = 7; // 光测设备
+ public static final int ENUM_UAV_SENSOR_VISION_POSITION = 8; // 计算机视觉定位仪
+ public static final int ENUM_UAV_SENSOR_LASER_POSITION = 9; // 激光定位
+ public static final int ENUM_UAV_SENSOR_EXTERNAL_GROUND_TRUTH = 10; // 外部激光定位(Vicon 或徕卡)
+ public static final int ENUM_UAV_SENSOR_ANGULAR_RATE_CONTROL = 11; // 三轴角速度控制器
+ public static final int ENUM_UAV_SENSOR_ATTITUDE_STABILIZATION = 12; // 高度稳定器
+ public static final int ENUM_UAV_SENSOR_YAW_POSITION = 13; // 方向稳定器(锁尾等)
+ public static final int ENUM_UAV_SENSOR_Z_ALTITUDE_CONTROL = 14; // 高度控制器
+ public static final int ENUM_UAV_SENSOR_XY_POSITION_CONTROL = 15; // X/Y位置控制器
+ public static final int ENUM_UAV_SENSOR_MOTOR_OUTPUTS = 16; // 马达输出控制器
+ public static final int ENUM_UAV_SENSOR_RC_RECEIVER = 17; // RC 接收器
+ public static final int ENUM_UAV_SENSOR_3D_GYRO2 = 18; // 2nd 三轴陀螺
+ public static final int ENUM_UAV_SENSOR_3D_ACCEL2 = 19; // 2nd 三轴加速度/倾角仪
+ public static final int ENUM_UAV_SENSOR_3D_MAG2 = 20; // 2nd 三轴磁罗盘
+ public static final int ENUM_UAV_GEOFENCE = 21; // 地理围栏
+ public static final int ENUM_UAV_AHRS = 22; // 姿态子系统运行状况
+ public static final int ENUM_UAV_TERRAIN = 23; // 地形子系统运行状况
+ public static final int ENUM_UAV_REVERSE_MOTOR = 24; // 保留马达
+ }
+
+ public static final int UAV_MAX_SENSOR_NUM = 32; // 最大传感器个数
+ // 传感器信息
+ public static class NET_UAV_SENSOR extends SdkStructure
+ {
+ public int emType; // 传感器类型,详见ENUM_UAV_SENSOR
+ public int bEnabled; // 使能状态
+ public int bHealthy; // 传感器状态
+ }
+
+ // 系统状态信息
+ public static class NET_UAV_SYS_STATUS extends SdkStructure
+ {
+ public int nPresentSensorNum; // 可见传感器个数, 最大支持32
+ public NET_UAV_SENSOR[] stuSensors = new NET_UAV_SENSOR[UAV_MAX_SENSOR_NUM]; // 传感器信息
+ public int nBatteryVoltage; // 电池电压, 单位: 毫伏
+ public int nBatteryCurrent; // 电池电流, 单位: 10毫安
+ public int nChargeDischargeNum; // 电池充放电次数
+ public int nHomeDistance; // 距离Home的距离, 单位: 米
+ public int nRemainingFlightTime; // 剩余飞行时间, 单位: 秒
+ public int nRemainingBattery; // 剩余电量百分比 -1: 正在估测剩余电量
+ public byte[] byReserverd = new byte[16]; // 保留字节
+
+ public NET_UAV_SYS_STATUS()
+ {
+ for (int i = 0; i < stuSensors.length; ++i) {
+ stuSensors[i] = new NET_UAV_SENSOR();
+ }
+ }
+ }
+
+ public static final int UAV_MAX_SATELLITE_NUM = 20; // 最多支持卫星个数
+ // 卫星信息
+ public static class NET_SATELLITE_STATUS extends SdkStructure
+ {
+ public int bUsed; // 卫星使用状态 FLASE: 未使用 TURE: 使用
+ public int nID; // 卫星ID
+ public int nElevation; // 卫星在天空中的仰角 单位: 度
+ public int nDireciton; // 卫星方位角 单位: 度
+ public int nSNR; // 信噪比, 信号强度百分比
+ }
+
+ // GPS 可见卫星的状态信息
+ public static class NET_UAV_GPS_STATUS extends SdkStructure
+ {
+ public int nVisibleNum; // 可见卫星个数, 最多支持20个
+ public NET_SATELLITE_STATUS[] stuSatellites = new NET_SATELLITE_STATUS[UAV_MAX_SATELLITE_NUM]; // 卫星信息
+
+ public NET_UAV_GPS_STATUS()
+ {
+ for (int i = 0; i < stuSatellites.length; ++i) {
+ stuSatellites[i] = new NET_SATELLITE_STATUS();
+ }
+ }
+ }
+
+ // 姿态信息
+ public static class NET_UAV_ATTITUDE extends SdkStructure
+ {
+ public float fRollAngle; // 滚转角, 单位: 度
+ public float fPitchAngle; // 俯仰角, 单位: 度
+ public float fYawAngle; // 偏航角, 单位: 度
+ public byte[] bReserved = new byte[16]; // 保留字节
+ }
+
+ // 遥控通道信息
+ public static class NET_UAV_RC_CHANNELS extends SdkStructure
+ {
+ public int nControllerSignal; // 遥控器信号百分比, 255: 非法未知
+ public byte[] byReserved = new byte[80]; // 保留字节
+ }
+
+ // 平视显示信息
+ public static class NET_UAV_VFR_HUD extends SdkStructure
+ {
+ public float fGroundSpeed; // 水平速度, 单位: 米/秒
+ public float fAltitude; // 高度, 单位: 米
+ public float fClimbSpeed; // 垂直速度, 单位: 米/秒
+ public byte[] byReserved = new byte[12];
+ }
+
+ // 故障等级
+ public static class ENUM_UAV_SEVERITY extends SdkStructure
+ {
+ public static final int ENUM_UAV_SEVERITY_EMERGENCY = 0; // 系统不可用, 最紧急状态
+ public static final int ENUM_UAV_SEVERITY_ALERT = 1; // 警报. 非致命性系统故障, 应立即应对.
+ public static final int ENUM_UAV_SEVERITY_CRITICAL = 2; // 警报: 主要系统故障, 应立即应对
+ public static final int ENUM_UAV_SEVERITY_ERROR = 3; // 故障: 次系统故障/备份系统故障
+ public static final int ENUM_UAV_SEVERITY_WARNING = 4; // 警告
+ public static final int ENUM_UAV_SEVERITY_NOTICE = 5; // 注意: 出现失常现象, 单非错误故障. 应该排查其现象根源
+ public static final int ENUM_UAV_SEVERITY_INFO = 6; // 提示: 一般性操作消息, 可用于日志. 此消息不需要应对行动
+ public static final int ENUM_UAV_SEVERITY_DEBUG = 7; // 调试信息。正常操作的时候不该出现
+ }
+
+ // 报警文本信息
+ public static class NET_UAV_STATUSTEXT extends SdkStructure
+ {
+ public int emSeverity; // 故障等级,详见ENUM_UAV_SEVERITY
+ public byte[] szText = new byte[60]; // 文本信息
+ public byte[] byReserved = new byte[4]; // 保留字节
+ }
+
+ // 全球定位数据
+ public static class NET_UAV_GLOBAL_POSITION extends SdkStructure
+ {
+ public float fLatitude; // 纬度, 单位: 角度
+ public float fLongitude; // 经度, 单位: 角度
+ public int nAltitude; // 海拔高度, 单位: 厘米
+ public int nRelativeAltitude; // 相对高度, 单位: 厘米
+ public int nXSpeed; // X速度(绝对速度、北东地坐标系), 单位: 厘米每秒
+ public int nYSpeed; // Y速度(绝对速度、北东地坐标系), 单位: 厘米每秒
+ public int nZSpeed; // Z速度(绝对速度、北东地坐标系), 单位: 厘米每秒
+ public byte[] byReserved = new byte[12];
+ }
+
+ // GPS原始数据
+ public static class NET_UAV_GPS_RAW extends SdkStructure
+ {
+ public int nDHOP; // GPS水平定位经度因子, 单位厘米. 65535 表示未知
+ public int nGroudSpeed; // GPS地速, 厘米每秒. 65535 表示未知
+ public int nVisibleStatellites; // 卫星数, 255 表示未知
+ public int nVDOP; // GPS 垂直定位因子,单位厘米。65535表示未知
+ public int nCourseOverGround; // 整体移动方向, 非机头移动方向. 单位: 100*度
+ public int nFixType; // 定位类型. 0 或 1 尚未定位, 2: 2D 定位, 3: 3D 定位
+ public byte[] byReserved = new byte[20];
+ }
+
+ // 系统时间
+ public static class NET_UAV_SYS_TIME extends SdkStructure
+ {
+ public NET_TIME_EX UTC; // UTC 时间
+ public int dwBootTime; // 启动时间, 单位毫秒
+ }
+
+ // 当前航点
+ public static class NET_UAV_MISSION_CURRENT extends SdkStructure
+ {
+ public int nSequence; // 序号 0 ~ 700
+ public byte[] byReserved = new byte[16]; // 保留字节
+ }
+
+ // 到达航点
+ public static class NET_UAV_MISSION_REACHED extends SdkStructure
+ {
+ public int nSequence; // 序号 0 ~ 700
+ public byte[] byReserved = new byte[16]; // 保留字节
+ }
+
+ // 云台姿态
+ public static class NET_UAV_MOUNT_STATUS extends SdkStructure
+ {
+ public float fRollAngle; // 滚转角, 单位: 度
+ public float fPitchAngle; // 俯仰角, 单位: 度
+ public float fYawAngle; // 偏航角, 单位: 度
+ public int nTargetSystem; // 目标系统
+ public int nTargetComponent; // 目标部件
+ public int nMountMode; // 云台模式, 参照 NET_UAVCMD_MOUNT_CONFIGURE
+ public byte[] byReserved = new byte[8]; // 保留字节
+ }
+
+ // Home点位置信息
+ public static class NET_UAV_HOME_POSITION extends SdkStructure
+ {
+ public float fLatitude; // 纬度, 单位: 角度
+ public float fLongitude; // 经度, 单位: 角度
+ public int nAltitude; // 海拔高度, 单位: 厘米
+ public float fLocalX; // X 点
+ public float fLocalY; // Y 点
+ public float fLocalZ; // Z 点
+ public float fApproachX; // 本地 x 矢量点
+ public float fApproachY;
+ public float fApproachZ;
+ public byte[] byReserved = new byte[16];
+ }
+
+ // 无人机实时消息类型
+ public static class EM_UAVINFO_TYPE extends SdkStructure
+ {
+ public static final int EM_UAVINFO_TYPE_UNKNOWN = 0; // 未知类型
+ public static final int EM_UAVINFO_TYPE_HEARTBEAT = 1; // 心跳状态 *pInfo = NET_UAV_HEARTBEAT
+ public static final int EM_UAVINFO_TYPE_SYS_STATUS = 2; // 系统状态 *pInfo = NET_UAV_SYS_STATUS
+ public static final int EM_UAVINFO_TYPE_GPS_STATUS = 3; // GPS状态 *pInfo = NET_UAV_GPS_STATUS
+ public static final int EM_UAVINFO_TYPE_ATTITUDE = 4; // 姿态信息 *pInfo = NET_UAV_ATTITUDE
+ public static final int EM_UAVINFO_TYPE_RC_CHANNELS = 5; // 遥控通道信息 *pInfo = NET_UAV_RC_CHANNELS
+ public static final int EM_UAVINFO_TYPE_VFR_HUD = 6; // 平视显示信息 *pInfo = NET_UAV_VFR_HUD
+ public static final int EM_UAVINFO_TYPE_STATUSTEXT = 7; // 报警文本信息 *pInfo = NET_UAV_STATUSTEXT
+ public static final int EM_UAVINFO_TYPE_GLOBAL_POSITION = 8; // 全球定位数据 *pInfo = NET_UAV_GLOBAL_POSITION
+ public static final int EM_UAVINFO_TYPE_GPS_RAW = 9; // GPS原始数据 *pInfo = NET_UAV_GPS_RAW
+ public static final int EM_UAVINFO_TYPE_SYS_TIME = 10; // 系统时间 *pInfo = NET_UAV_SYS_TIME
+ public static final int EM_UAVINFO_TYPE_MISSION_CURRENT = 11; // 当前航点 *pInfo = NET_UAV_MISSION_CURRENT
+ public static final int EM_UAVINFO_TYPE_MOUNT_STATUS = 12; // 云台姿态 *pInfo = NET_UAV_MOUNT_STATUS
+ public static final int EM_UAVINFO_TYPE_HOME_POSITION = 13; // Home点位置信息 *pInfo = NET_UAV_HOME_POSITION
+ public static final int EM_UAVINFO_TYPE_MISSION_REACHED = 14; // 到达航点 *pInfo = NET_UAV_MISSION_REACHED
+ }
+
+ // 无人机实时回调数据
+ public static class NET_UAVINFO extends SdkStructure
+ {
+ public int emType; // 消息类型,详见EM_UAVINFO_TYPE
+ public Pointer pInfo; // 消息内容,指向void
+ public int dwInfoSize; // 消息大小
+ public byte[] byReserved = new byte[512]; // 保留字节
+ }
+
+ // 无人机实时数据回调
+ public interface fUAVInfoCallBack extends StdCallCallback {
+ public void invoke(LLong lAttachHandle, NET_UAVINFO pstuUAVInfo, int dwUAVInfoSize, Pointer dwUser);
+ }
+
+ // 订阅无人机实时消息入参
+ public static class NET_IN_ATTACH_UAVINFO extends SdkStructure
+ {
+ public int dwSize;
+ public Callback cbNotify; // 实时回调函数,实现fUAVInfoCallBack
+ public Pointer dwUser; // 用户信息
+
+ public NET_IN_ATTACH_UAVINFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 订阅无人机实时消息入参
+ public static class NET_OUT_ATTACH_UAVINFO extends SdkStructure
+ {
+ public int dwSize;
+
+ public NET_OUT_ATTACH_UAVINFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 无人机通用设置命令类型 结构体大小与 NET_UAVCMD_PARAM_BUFFER 保持一致
+ public static class ENUM_UAVCMD_TYPE extends SdkStructure
+ {
+ public static final int ENUM_UAVCMD_UNKNOWN = -1;
+ public static final int ENUM_UAVCMD_NAV_TAKEOFF = 0; // 地面起飞或手抛起飞 NET_UAVCMD_TAKEOFF
+ public static final int ENUM_UAVCMD_NAV_LOITER_UNLIM = 1; // 悬停 NET_UAVCMD_LOITER_UNLIMITED
+ public static final int ENUM_UAVCMD_NAV_RETURN_TO_LAUNCH = 2; // 返航降落 NET_UAVCMD_RETURN_TO_LAUNCH
+ public static final int ENUM_UAVCMD_NAV_LAND = 3; // 设定点着陆 NET_UAVCMD_LAND
+ public static final int ENUM_UAVCMD_CONDITION_YAW = 4; // 变换航向 NET_UAVCMD_CONDITION_YAW
+ public static final int ENUM_UAVCMD_DO_CHANGE_SPEED = 5; // 改变速度 NET_UAVCMD_CHANGE_SPEED
+ public static final int ENUM_UAVCMD_DO_SET_HOME = 6; // 设置返航点 NET_UAVCMD_SET_HOME
+ public static final int ENUM_UAVCMD_DO_FLIGHTTERMINATION = 7; // 立即停转电机, 飞机锁定 NET_UAVCMD_FLIGHT_TERMINATION
+ public static final int ENUM_UAVCMD_MISSION_START = 8; // 开始航点任务 NET_UAVCMD_MISSION_START
+ public static final int ENUM_UAVCMD_COMPONENT_ARM_DISARM = 9; // 电调解锁, 电调锁定 NET_UAVCMD_COMPONENT_ARM_DISARM
+ public static final int ENUM_UAVCMD_PREFLIGHT_REBOOT_SHUTDOWN = 10; // 重启飞行器 NET_UAVCMD_REBOOT_SHUTDOWN
+ public static final int ENUM_UAVCMD_DO_SET_RELAY = 11; // 继电器控制 NET_UAVCMD_SET_RELAY
+ public static final int ENUM_UAVCMD_DO_REPEAT_RELAY = 12; // 继电器循环控制 NET_UAVCMD_REPEAT_RELAY
+ public static final int ENUM_UAVCMD_DO_FENCE_ENABLE = 13; // 电子围栏启用禁用 NET_UAVCMD_FENCE_ENABLE
+ public static final int ENUM_UAVCMD_MOUNT_CONFIGURE = 14; // 云台模式配置 NET_UAVCMD_MOUNT_CONFIGURE
+ public static final int ENUM_UAVCMD_GET_HOME_POSITION = 15; // 异步获取Home点位置, 实时数据回调中返回 NET_UAVCMD_GET_HOME_POSITION
+ public static final int ENUM_UAVCMD_IMAGE_START_CAPTURE = 16; // 开始抓拍 NET_UAVCMD_IMAGE_START_CAPTURE
+ public static final int ENUM_UAVCMD_IMAGE_STOP_CAPTURE = 17; // 停止抓拍 NET_UAVCMD_IMAGE_STOP_CAPTURE
+ public static final int ENUM_UAVCMD_VIDEO_START_CAPTURE = 18; // 开始录像 NET_UAVCMD_VIDEO_START_CAPTURE
+ public static final int ENUM_UAVCMD_VIDEO_STOP_CAPTURE = 19; // 停止录像 NET_UAVCMD_VIDEO_STOP_CAPTURE
+ public static final int ENUM_UAVCMD_NAV_WAYPOINT = 20; // 航点 NET_UAVCMD_NAV_WAYPOINT
+ public static final int ENUM_UAVCMD_NAV_LOITER_TURNS = 21; // 循环绕圈 NET_UAVCMD_NAV_LOITER_TURNS
+ public static final int ENUM_UAVCMD_NAV_LOITER_TIME = 22; // 固定时间等待航点 NET_UAVCMD_NAV_LOITER_TIME
+ public static final int ENUM_UAVCMD_NAV_SPLINE_WAYPOINT = 23; // 曲线航点 NET_UAVCMD_NAV_SPLINE_WAYPOINT
+ public static final int ENUM_UAVCMD_NAV_GUIDED_ENABLE = 24; // 引导模式开关 NET_UAVCMD_NAV_GUIDED_ENABLE
+ public static final int ENUM_UAVCMD_DO_JUMP = 25; // 跳转到任务单某个位置. 并执行N次 NET_UAVCMD_DO_JUMP
+ public static final int ENUM_UAVCMD_DO_GUIDED_LIMITS = 26; // 引导模式执行控制限制 NET_UAVCMD_DO_GUIDED_LIMITS
+ public static final int ENUM_UAVCMD_CONDITION_DELAY = 27; // 动作延时 NET_UAVCMD_CONDITION_DELAY
+ public static final int ENUM_UAVCMD_CONDITION_DISTANCE = 28; // 动作距离. 前往设定距离(到下一航点),然后继续 NET_UAVCMD_CONDITION_DISTANCE
+ public static final int ENUM_UAVCMD_DO_SET_ROI = 29; // 相机兴趣点 NET_UAVCMD_DO_SET_ROI
+ public static final int ENUM_UAVCMD_DO_DIGICAM_CONTROL = 30; // 相机控制 NET_UAVCMD_DO_DIGICAM_CONTROL
+ public static final int ENUM_UAVCMD_DO_MOUNT_CONTROL = 31; // 云台角度控制 NET_UAVCMD_DO_MOUNT_CONTROL
+ public static final int ENUM_UAVCMD_DO_SET_CAM_TRIGG_DIST = 32; // 聚焦距离 NET_UAVCMD_DO_SET_CAM_TRIGG_DIST
+ public static final int ENUM_UAVCMD_SET_MODE = 33; // 设置模式 NET_UAVCMD_SET_MODE
+ public static final int ENUM_UAVCMD_NAV_GUIDED = 34; // 设定引导点 NET_UAVCMD_NAV_GUIDED
+ public static final int ENUM_UAVCMD_MISSION_PAUSE = 35; // 飞行任务暂停 NET_UAVCMD_MISSION_PAUSE
+ public static final int ENUM_UAVCMD_MISSION_STOP = 36; // 飞行任务停止 NET_UAVCMD_MISSION_STOP
+ public static final int ENUM_UAVCMD_LOAD_CONTROL = 37; // 负载控制 NET_UAVCMD_LOAD_CONTROL
+ public static final int ENUM_UAVCMD_RC_CHANNELS_OVERRIDE = 38; // 模拟摇杆 NET_UAVCMD_RC_CHANNELS_OVERRIDE
+ public static final int ENUM_UAVCMD_HEART_BEAT = 39; // 心跳 NET_UAVCMD_HEART_BEAT
+ }
+
+ // 无人机命令通用信息
+ public static class NET_UAVCMD_COMMON extends SdkStructure
+ {
+ public int nTargetSystem; // 目标系统
+ public int nTargetComponent; // 目标部件, 0 - 所有部件
+ public int nConfirmation; // 确认次数, 0 - 为首次命令. 用于航点任务为0
+ public byte[] byReserved = new byte[4]; // 保留
+ }
+
+ // 地面起飞命令 ENUM_UAVCMD_NAV_TAKEOFF
+ public static class NET_UAVCMD_TAKEOFF extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public float fMinimumPitch; // 最小爬升率(有空速传感器时适用)设定的爬升率(无传感器)
+ public float fYawAngle; // 指向设定.(有罗盘)如无罗盘, 则忽略此参数.
+ public float fLatitude; // 纬度
+ public float fLongitude; // 经度
+ public float fAltitude; // 高度
+ public byte[] byReserved = new byte[8]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 悬停命令 ENUM_UAVCMD_NAV_LOITER_UNLIM
+ public static class NET_UAVCMD_LOITER_UNLIMITED extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public float fRadius; // 盘旋半径(m), 正值顺时针, 负值逆时针.
+ public float fYawAngle; // 指向设定, 仅适用可悬停机型
+ public float fLatitude; // 纬度
+ public float fLongitude; // 经度
+ public float fAltitude; // 高度
+ public byte[] byReserved = new byte[8]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 返航降落 ENUM_UAVCMD_NAV_RETURN_TO_LAUNCH
+ public static class NET_UAVCMD_RETURN_TO_LAUNCH extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public byte[] byReserved = new byte[28]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 设定点着陆 ENUM_UAVCMD_NAV_LAND
+ public static class NET_UAVCMD_LAND extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public float fYawAngle; // 指向设定, 仅适用可悬停机型.
+ public float fLatitude; // 纬度
+ public float fLongitude; // 经度
+ public float fAltitude; // 高度
+ public byte[] byReserved = new byte[12]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 变换航向 ENUM_UAVCMD_CONDITION_YAW
+ public static class NET_UAVCMD_CONDITION_YAW extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public float fTargetAngle; // 目标角度: [0-360], 0为北
+ public float fSpeed; // 转向速率: [度/秒]
+ public float fDirection; // 指向: 负值逆时针, 正值顺时针
+ public float fRelativeOffset; // 相对偏置或绝对角[1,0]
+ public byte[] byReserved = new byte[12]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 改变速度 ENUM_UAVCMD_DO_CHANGE_SPEED
+ public static class NET_UAVCMD_CHANGE_SPEED extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public float fSpeedType; // 速度类型(0=空速, 1=地速)
+ public float fSpeed; // 速度(米/秒, -1表示维持原来速度不变)
+ public float fThrottle; // 油门开度, 百分比数据,-1表示维持原来数值不变
+ public byte[] byReserved = new byte[16]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 设置返航点 ENUM_UAVCMD_DO_SET_HOME
+ public static class NET_UAVCMD_SET_HOME extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int nLocation; // 返航点: 1 = 使用当前点, 0 - 设定点
+ public float fLatitude; // 纬度
+ public float fLongitude; // 经度
+ public float fAltitude; // 高度
+ public byte[] byReserved = new byte[12]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 立即停转电机 ENUM_UAVCMD_DO_FLIGHTTERMINATION
+ public static class NET_UAVCMD_FLIGHT_TERMINATION extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public float fActivated; // 触发值: 大于0.5 被触发
+ public byte[] byReserved = new byte[24]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 开始航点任务 ENUM_UAVCMD_MISSION_START
+ public static class NET_UAVCMD_MISSION_START extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int nFirstItem; // 第一项 n, 起始点的任务号
+ public int nLastItem; // 最后一项 m, 终点的任务号
+ public byte[] byReserved = new byte[20]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 飞行任务暂停 ENUM_UAVCMD_MISSION_PAUSE
+ public static class NET_UAVCMD_MISSION_PAUSE extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public byte[] byReserved = new byte[28]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 飞行任务停止 ENUM_UAVCMD_MISSION_STOP
+ public static class NET_UAVCMD_MISSION_STOP extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public byte[] byReserved = new byte[28]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 负载类型
+ public static class EM_LOAD_CONTROL_TYPE extends SdkStructure
+ {
+ public static final int EM_LOAD_CONTROL_COMMON = 0; // 通用设备 NET_LOAD_CONTROL_COMMON
+ public static final int EM_LOAD_CONTROL_PHOTO = 1; // 拍照设备 NET_LOAD_CONTROL_PHOTO
+ public static final int EM_LOAD_CONTROL_VIDEO = 2; // 视频设备 NET_LOAD_CONTROL_VIDEO
+ public static final int EM_LOAD_CONTROL_AUDIO = 3; // 音频设备 NET_LOAD_CONTROL_AUDIO
+ public static final int EM_LOAD_CONTROL_LIGHT = 4; // 灯光设备 NET_LOAD_CONTROL_LIGHT
+ public static final int EM_LOAD_CONTROL_RELAY = 5; // 继电器设备NET_LOAD_CONTROL_RELAY
+ public static final int EM_LOAD_CONTROL_TIMING = 6; // 定时拍照设备NET_LOAD_CONTROL_TIMING
+ public static final int EM_LOAD_CONTROL_DISTANCE = 7; // 定距拍照设备NET_LOAD_CONTROL_DISTANCE
+ }
+
+ // 通用设备
+ public static class NET_LOAD_CONTROL_COMMON extends SdkStructure
+ {
+ public byte[] byReserved = new byte[24]; // 实际请使用对应负载填入
+ }
+
+ // 拍照设备
+ public static class NET_LOAD_CONTROL_PHOTO extends SdkStructure
+ {
+ public float fCycle; // 拍照周期 单位s
+ public byte[] byReserved = new byte[20]; // 对齐 NET_MISSION_ITEM_COMMON
+ }
+
+ // 视频设备
+ public static class NET_LOAD_CONTROL_VIDEO extends SdkStructure
+ {
+ public int nSwitch; // 开关 0-结束录像 1-开始录像
+ public byte[] byReserved = new byte[20]; // 对齐 NET_LOAD_CONTROL_COMMON
+ }
+
+ // 音频设备
+ public static class NET_LOAD_CONTROL_AUDIO extends SdkStructure
+ {
+ public byte[] byReserved = new byte[24]; // 对齐 NET_LOAD_CONTROL_COMMON
+ }
+
+ // 灯光设备
+ public static class NET_LOAD_CONTROL_LIGHT extends SdkStructure
+ {
+ public int nSwitch; // 开关 0-关闭 1-打开
+ public byte[] byReserved = new byte[20]; // 对齐 NET_LOAD_CONTROL_COMMON
+ }
+
+ // 继电器设备
+ public static class NET_LOAD_CONTROL_RELAY extends SdkStructure
+ {
+ public int nSwitch; // 开关 0-关闭 1-打开
+ public byte[] byReserved = new byte[20]; // 对齐 NET_LOAD_CONTROL_COMMON
+ }
+
+ // 定时拍照设备
+ public static class NET_LOAD_CONTROL_TIMING extends SdkStructure
+ {
+ public int nInterval; // 拍照时间间隔 单位:s
+ public int nSwitch; // 起停控制 0-停止 1-启用
+ public byte[] byReserved = new byte[16]; // 对齐 NET_LOAD_CONTROL_COMMON
+ }
+
+ // 定距拍照设备
+ public static class NET_LOAD_CONTROL_DISTANCE extends SdkStructure
+ {
+ public int nInterval; // 拍照距离间隔 单位:m
+ public int nSwitch; // 起停控制 0-停止 1-启用
+ public byte[] byReserved = new byte[16]; // 对齐 NET_LOAD_CONTROL_COMMON
+ }
+
+ // 负载控制
+ public static class NET_UAVCMD_LOAD_CONTROL extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int emLoadType; // 负载类型,详见EM_LOAD_CONTROL_TYPE
+ public NET_LOAD_CONTROL_COMMON stuLoadInfo; // 负载控制信息
+ }
+
+ // 电调解锁/锁定 ENUM_UAVCMD_COMPONENT_ARM_DISARM,
+ public static class NET_UAVCMD_COMPONENT_ARM_DISARM extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int bArm; // TRUE - 解锁, FALSE - 锁定
+ public byte[] byReserved = new byte[24]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 重启飞行器 ENUM_UAVCMD_PREFLIGHT_REBOOT_SHUTDOWN
+ public static class NET_UAVCMD_REBOOT_SHUTDOWN extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int nCtrlAutopilot; // 控制飞控 0 - 空 1 - 重启 2 - 关机
+ public int nCtrlOnboardComputer; // 控制机载计算机 0 - 空 1 - 机载计算机重启 2 - 机载计算机关机
+ public byte[] byReserved = new byte[20]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 继电器控制 ENUM_UAVCMD_DO_SET_RELAY
+ public static class NET_UAVCMD_SET_RELAY extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int nRelayNumber; // 继电器号
+ public int nCtrlRelay; // 0=关,1=开。
+ public byte[] byReserved = new byte[20]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 继电器循环控制 ENUM_UAVCMD_DO_REPEAT_RELAY
+ public static class NET_UAVCMD_REPEAT_RELAY extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int nRelayNumber; // 继电器号
+ public int nCycleCount; // 循环次数
+ public int nCycleTime; // 周期(十进制,秒)
+ public byte[] byReserved = new byte[16]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 电子围栏启用禁用 ENUM_UAVCMD_DO_FENCE_ENABLE
+ public static class NET_UAVCMD_FENCE_ENABLE extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int nEnableState; // 启用状态 0 - 禁用 1 - 启用 2 - 仅地面禁用
+ public byte[] byReserved = new byte[24]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 云台模式设置 ENUM_UAVCMD_MOUNT_CONFIGURE
+ public static class NET_UAVCMD_MOUNT_CONFIGURE extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int nMountMode; // 云台模式
+ // 0 - 预留; 1 - 水平模式, RC 不可控; 2 - UAV模式, RC 不可控 ;
+ // 3 - 航向锁定模式, RC可控; 4 - 预留; 5-垂直90度模式, RC不可控 6 - 航向跟随模式, RC可控
+ public byte[] byReserved = new byte[24]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 异步获取Home点位置 ENUM_UAVCMD_GET_HOME_POSITION
+ public static class NET_UAVCMD_GET_HOME_POSITION extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public byte[] byReserved = new byte[28]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 开始抓拍 ENUM_UAVCMD_IMAGE_START_CAPTURE Start image capture sequence
+ public static class NET_UAVCMD_IMAGE_START_CAPTURE extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int nDurationTime; // 连拍持续时间
+ public int nTatolNumber; // 抓拍数量 0 - 表示无限制
+ public int emResolution; // 分辨率为 CAPTURE_SIZE_NR时, 表示自定义。目前仅支持 CAPTURE_SIZE_VGA 和 CAPTURE_SIZE_720
+ public int nCustomWidth; // 自定义水平分辨率 单位: 像素 pixel
+ public int nCustomHeight; // 自定义垂直分辨率 单位: 像素 pixel
+ public int nCameraID; // 相机ID
+ public byte[] byReserved = new byte[4]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 分辨率枚举
+ public static class CAPTURE_SIZE extends SdkStructure
+ {
+ public static final int CAPTURE_SIZE_D1 = 0; // 704*576(PAL) 704*480(NTSC),兼容WWxHH,下同
+ public static final int CAPTURE_SIZE_HD1 = 1; // 352*576(PAL) 352*480(NTSC)
+ public static final int CAPTURE_SIZE_BCIF = 2; // 704*288(PAL) 704*240(NTSC)
+ public static final int CAPTURE_SIZE_CIF = 3; // 352*288(PAL) 352*240(NTSC)
+ public static final int CAPTURE_SIZE_QCIF = 4; // 176*144(PAL) 176*120(NTSC)
+ public static final int CAPTURE_SIZE_VGA = 5; // 640*480
+ public static final int CAPTURE_SIZE_QVGA = 6; // 320*240
+ public static final int CAPTURE_SIZE_SVCD = 7; // 480*480
+ public static final int CAPTURE_SIZE_QQVGA = 8; // 160*128
+ public static final int CAPTURE_SIZE_SVGA = 9; // 800*592
+ public static final int CAPTURE_SIZE_XVGA = 10; // 1024*768
+ public static final int CAPTURE_SIZE_WXGA = 11; // 1280*800
+ public static final int CAPTURE_SIZE_SXGA = 12; // 1280*1024
+ public static final int CAPTURE_SIZE_WSXGA = 13; // 1600*1024
+ public static final int CAPTURE_SIZE_UXGA = 14; // 1600*1200
+ public static final int CAPTURE_SIZE_WUXGA = 15; // 1920*1200
+ public static final int CAPTURE_SIZE_LTF = 16; // 240*192,ND1
+ public static final int CAPTURE_SIZE_720 = 17; // 1280*720
+ public static final int CAPTURE_SIZE_1080 = 18; // 1920*1080
+ public static final int CAPTURE_SIZE_1_3M = 19; // 1280*960
+ public static final int CAPTURE_SIZE_2M = 20; // 1872*1408,2_5M
+ public static final int CAPTURE_SIZE_5M = 21; // 3744*1408
+ public static final int CAPTURE_SIZE_3M = 22; // 2048*1536
+ public static final int CAPTURE_SIZE_5_0M = 23; // 2432*2050
+ public static final int CPTRUTE_SIZE_1_2M = 24; // 1216*1024
+ public static final int CPTRUTE_SIZE_1408_1024 = 25; // 1408*1024
+ public static final int CPTRUTE_SIZE_8M = 26; // 3296*2472
+ public static final int CPTRUTE_SIZE_2560_1920 = 27; // 2560*1920(5_1M)
+ public static final int CAPTURE_SIZE_960H = 28; // 960*576(PAL) 960*480(NTSC)
+ public static final int CAPTURE_SIZE_960_720 = 29; // 960*720
+ public static final int CAPTURE_SIZE_NHD = 30; // 640*360
+ public static final int CAPTURE_SIZE_QNHD = 31; // 320*180
+ public static final int CAPTURE_SIZE_QQNHD = 32; // 160*90
+ public static final int CAPTURE_SIZE_960_540 = 33; // 960*540
+ public static final int CAPTURE_SIZE_640_352 = 34; // 640*352
+ public static final int CAPTURE_SIZE_640_400 = 35; // 640*400
+ public static final int CAPTURE_SIZE_320_192 = 36; // 320*192
+ public static final int CAPTURE_SIZE_320_176 = 37; // 320*176
+ public static final int CAPTURE_SIZE_SVGA1 = 38; // 800*600
+ public static final int CAPTURE_SIZE_NR = 255;
+ }
+
+ // 停止抓拍 ENUM_UAVCMD_IMAGE_STOP_CAPTURE
+ public static class NET_UAVCMD_IMAGE_STOP_CAPTURE extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int nCameraID; // 相机ID
+ public byte[] byReserved = new byte[24]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 开始录像 ENUM_UAVCMD_VIDEO_START_CAPTURE
+ public static class NET_UAVCMD_VIDEO_START_CAPTURE extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int nCameraID; // 相机ID 0 - 表示所有相机
+ public int nFrameSpeed; // 帧率 单位: 秒 -1 表示: 最高帧率
+ public int emResolution; // 分辨率 为 CAPTURE_SIZE_NR时, 表示自定义。目前仅支持 CAPTURE_SIZE_VGA 和 CAPTURE_SIZE_720
+ public int nCustomWidth; // 自定义水平分辨率 单位: 像素 pixel
+ public int nCustomHeight; // 自定义垂直分辨率 单位: 像素 pixel
+ public byte[] byReserved = new byte[8]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 停止录像 ENUM_UAVCMD_VIDEO_STOP_CAPTURE
+ public static class NET_UAVCMD_VIDEO_STOP_CAPTURE extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int nCameraID; // 相机ID
+ public byte[] byReserved = new byte[24]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 航点 ENUM_UAVCMD_NAV_WAYPOINT
+ public static class NET_UAVCMD_NAV_WAYPOINT extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int nHoldTime; // 驻留时间. 单位: 秒
+ public float fAcceptanceRadius; // 触发半径. 单位: 米. 进入此半径, 认为该航点结束.
+ public float fLatitude; // 纬度
+ public float fLongitude; // 经度
+ public float fAltitude; // 高度
+ public byte[] byReserved = new byte[8]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 循环绕圈 ENUM_UAVCMD_NAV_LOITER_TURNS
+ public static class NET_UAVCMD_NAV_LOITER_TURNS extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int nTurnNumber; // 圈数.
+ public float fRadius; // 盘旋半径(m), 正值顺时针, 负值逆时针.
+ public float fLatitude; // 纬度
+ public float fLongitude; // 经度
+ public float fAltitude; // 高度
+ public byte[] byReserved = new byte[8]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 在航点盘旋N秒 ENUM_UAVCMD_NAV_LOITER_TIME
+ public static class NET_UAVCMD_NAV_LOITER_TIME extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int nTime; // 时间. 单位: 秒
+ public float fRadius; // 盘旋半径(m), 正值顺时针, 负值逆时针.
+ public float fLatitude; // 纬度
+ public float fLongitude; // 经度
+ public float fAltitude; // 高度
+ public byte[] byReserved = new byte[8]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 曲线航点 ENUM_UAVCMD_NAV_SPLINE_WAYPOINT
+ public static class NET_UAVCMD_NAV_SPLINE_WAYPOINT extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int nHoldTime; // 驻留时间 Hold time in decimal seconds.
+ public float fLatitude; // 纬度
+ public float fLongitude; // 经度
+ public float fAltitude; // 高度
+ public byte[] byReserved = new byte[12]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 引导模式开关 ENUM_UAVCMD_NAV_GUIDED_ENABLE
+ public static class NET_UAVCMD_NAV_GUIDED_ENABLE extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int bEnable; // 使能
+ public byte[] byReserved = new byte[24]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 跳转 ENUM_UAVCMD_DO_JUMP
+ public static class NET_UAVCMD_DO_JUMP extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int nSequenceNumber; // 任务序号
+ public int nRepeatCount; // 重复次数
+ public byte[] byReserved = new byte[20]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 引导模式执行控制限制 ENUM_UAVCMD_DO_GUIDED_LIMITS
+ public static class NET_UAVCMD_DO_GUIDED_LIMITS extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int nMaxTime; // 最大时间. 单位: 秒
+ public float fMinAltitude; // 最低限制高度. 单位: 米
+ public float fMaxAltitude; // 最大限制高度. 单位: 米
+ public float fHorizontalDistance; // 水平限制距离. 单位: 米
+ public byte[] byReserved = new byte[12]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 动作延时 ENUM_UAVCMD_CONDITION_DELAY
+ public static class NET_UAVCMD_CONDITION_DELAY extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int nDelay; // 延迟时间. 单位: 秒
+ public byte[] byReserved = new byte[24]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 动作距离 ENUM_UAVCMD_CONDITION_DISTANCE
+ public static class NET_UAVCMD_CONDITION_DISTANCE extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public float fDistance; // 距离. 单位: 米
+ public byte[] byReserved = new byte[24]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 无人机兴趣点类型
+ public static class ENUM_UAV_ROI_MODE extends SdkStructure
+ {
+ public static final int ENUM_UAV_ROI_MODE_NONE = 0; // 无兴趣点
+ public static final int ENUM_UAV_ROI_MODE_WPNEXT = 1; // 面向下一航点
+ public static final int ENUM_UAV_ROI_MODE_WPINDEX = 2; // 面向指定兴趣点
+ public static final int ENUM_UAV_ROI_MODE_LOCATION = 3; // 当前航点
+ }
+
+ // 相机兴趣点 ENUM_UAVCMD_DO_SET_ROI
+ public static class NET_UAVCMD_DO_SET_ROI extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int emROIMode; // 兴趣点模式,详见ENUM_UAV_ROI_MODE
+ public int nId; // 指定航点或编号, 根据emROIMode而定
+ public int nROIIndex; // ROI 编号
+ public byte[] byReserved = new byte[16]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 相机控制 ENUM_UAVCMD_DO_DIGICAM_CONTROL
+ public static class NET_UAVCMD_DO_DIGICAM_CONTROL extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public byte[] byReserved = new byte[28]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 云台角度控制 ENUM_UAVCMD_DO_MOUNT_CONTROL
+ public static class NET_UAVCMD_DO_MOUNT_CONTROL extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public float fPitchAngle; // 俯仰角, 单位: 度. 0: 一键回中, -90 : 一键置90度
+ public float fYawAngle; // 航向角, 单位: 度. 0: 一键回中, -90 : 一键置90度
+ public byte[] byReserved = new byte[20]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 聚焦距离 ENUM_UAVCMD_DO_SET_CAM_TRIGG_DIST
+ public static class NET_UAVCMD_DO_SET_CAM_TRIGG_DIST extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public float fDistance; // 聚焦距离
+ public byte[] byReserved = new byte[24]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 设置模式 ENUM_UAVCMD_SET_MODE
+ public static class NET_UAVCMD_SET_MODE extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public int emUAVMode; // 飞行模式,详见ENUM_UAV_MODE
+ public byte[] byReserved = new byte[24]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 设定引导点 ENUM_UAVCMD_NAV_GUIDED
+ public static class NET_UAVCMD_NAV_GUIDED extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 通用信息
+ public float fLatitude; // 纬度
+ public float fLongitude; // 经度
+ public float fAltitude; // 高度
+ public byte[] byReserved = new byte[16]; // 对齐 NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 航点命令对应的通用参数, 需要转换成 ENUM_UAVCMD_TYPE 对应的结构体
+ public static class NET_UAVCMD_PARAM_BUFFER extends SdkStructure
+ {
+ public NET_UAVCMD_COMMON stuCommon; // 命令通用信息
+ public byte[] byParamBuffer = new byte[28]; // 参数缓存
+ }
+
+ // 摇杆模拟:输入参数
+ public static class NET_UAVCMD_RC_CHANNELS_OVERRIDE extends SdkStructure
+ {
+ public short nChan1; // 滚转角,范围[1091, 1937],如果未改变,填 UINT16_MAX
+ public short nChan2; // 俯仰角,范围[1091, 1937],如果未改变,填 UINT16_MAX
+ public short nChan3; // 油门,范围[1091, 1937],如果未改变,填 UINT16_MAX
+ public short nChan4; // 偏航角,[1091, 1937],如果未改变,填 UINT16_MAX
+ public short nChan5; // 模式切换:取值1091,1514,1937,如果未改变,填 UINT16_MAX
+ public short nChan6; // 云台航向,范围[1091,1937],如果未改变,填 UINT16_MAX
+ public short nChan7; // 云台俯仰,范围[1091,1937],如果未改变,填 UINT16_MAX
+ public short nChan8; // 起落架,取值1091,1937,如果未改变,填 UINT16_MAX
+ public short nChan9; // 云台模式, 取值1091,1514,1937,如果未改变,填 UINT16_MAX
+ public short nChan10; // 一键返航,取值1091,1937,如果未改变,填 UINT16_MAX
+ public short nChan11; // 一键起降,取值1091,1937,如果未改变,填 UINT16_MAX
+ public short nChan12; // 当前没有用到,填 UINT16_MAX
+ public short nChan13; // 当前没有用到,填 UINT16_MAX
+ public short nChan14; // 当前没有用到,填 UINT16_MAX
+ public short nChan15; // 当前没有用到,填 UINT16_MAX
+ public short nChan16; // 当前没有用到,填 UINT16_MAX
+ public short nChan17; // 当前没有用到,填 UINT16_MAX
+ public short nChan18; // 当前没有用到,填 UINT16_MAX
+ public byte nTargetSystem; // 目标系统
+ public byte nTargetComponent; // 目标组件
+ public byte[] szReserved = new byte[6]; // 保留字段,对齐NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 心跳结构体
+ public static class NET_UAVCMD_HEART_BEAT extends SdkStructure
+ {
+ public int nCustomMode; // 自动驾驶仪用户自定义模式
+ public byte nType; // MAV 类型
+ public byte nAutoPilot; // 自动驾驶仪类型
+ public byte nBaseMode; // 系统模式
+ public byte nSystemStatus; // 系统状态值
+ public byte nMavlinkVersion; // MAVLink 版本信息
+ public byte[] szReserved = new byte[35]; // 保留字段,对齐NET_UAVCMD_PARAM_BUFFER
+ }
+
+ // 订阅无人机实时消息 pstuInParam 和 pstuOutParam 由设备申请释放
+ public LLong CLIENT_AttachUAVInfo(LLong lLoginID, NET_IN_ATTACH_UAVINFO pstuInParam, NET_OUT_ATTACH_UAVINFO pstuOutParam, int nWaitTime);
+
+ // 退订无人机实时消息 lAttachHandle 是 CLIENT_AttachUAVInfo 返回值
+ public boolean CLIENT_DetachUAVInfo(LLong lAttachHandle);
+
+ // 警戒区入侵方向
+ public static class NET_CROSSREGION_DIRECTION_INFO extends SdkStructure
+ {
+ public static final int EM_CROSSREGION_DIRECTION_UNKNOW = 0;
+ public static final int EM_CROSSREGION_DIRECTION_ENTER = 1; // 进入
+ public static final int EM_CROSSREGION_DIRECTION_LEAVE = 2; // 离开
+ public static final int EM_CROSSREGION_DIRECTION_APPEAR = 3; // 出现
+ public static final int EM_CROSSREGION_DIRECTION_DISAPPEAR = 4; // 消失
+ }
+
+ // 电源类型
+ public static class EM_POWER_TYPE extends SdkStructure
+ {
+ public static final int EM_POWER_TYPE_MAIN = 0; // 主电源
+ public static final int EM_POWER_TYPE_BACKUP = 1; // 备用电源
+ }
+
+ // 电源故障事件类型
+ public static class EM_POWERFAULT_EVENT_TYPE extends SdkStructure
+ {
+ public static final int EM_POWERFAULT_EVENT_UNKNOWN = -1; // 未知
+ public static final int EM_POWERFAULT_EVENT_LOST = 0; // 掉电、电池不在位
+ public static final int EM_POWERFAULT_EVENT_LOST_ADAPTER = 1; // 适配器不在位
+ public static final int EM_POWERFAULT_EVENT_LOW_BATTERY = 2; // 电池欠压
+ public static final int EM_POWERFAULT_EVENT_LOW_ADAPTER = 3; // 适配器欠压
+ }
+
+ // 电源故障事件
+ public static class ALARM_POWERFAULT_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int emPowerType; // 电源类型,详见EM_POWER_TYPE
+ public int emPowerFaultEvent; // 电源故障事件,详见EM_POWERFAULT_EVENT_TYPE
+ public NET_TIME stuTime; // 报警事件发生的时间
+ public int nAction; // 0:开始 1:停止
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public ALARM_POWERFAULT_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 防拆报警事件
+ public static class ALARM_CHASSISINTRUDED_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int nAction; // 0:开始 1:停止
+ public NET_TIME stuTime; // 报警事件发生的时间
+ public int nChannelID; // 通道号
+ public byte[] szReaderID = new byte[NET_COMMON_STRING_32]; // 读卡器ID
+ public int nEventID; // 事件ID
+ public byte[] szSN = new byte[32]; // 无线设备序列号
+ public int bRealUTC; // RealUTC 是否有效,bRealUTC 为 TRUE 时,用 RealUTC,否则用 stuTime 字段
+ public NET_TIME_EX RealUTC; // 事件发生的时间(标准UTC)
+ public int emDevType; //设备类型,参考EM_ALARM_CHASSISINTRUDED_DEV_TYPE
+ public ALARM_CHASSISINTRUDED_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 传感器感应方式枚举类型
+ public static class NET_SENSE_METHOD extends SdkStructure
+ {
+ public static final int NET_SENSE_UNKNOWN = -1; // 未知类型
+ public static final int NET_SENSE_DOOR = 0; // 门磁
+ public static final int NET_SENSE_PASSIVEINFRA = 1; // 被动红外
+ public static final int NET_SENSE_GAS = 2; // 气感
+ public static final int NET_SENSE_SMOKING = 3; // 烟感
+ public static final int NET_SENSE_WATER = 4; // 水感
+ public static final int NET_SENSE_ACTIVEFRA = 5; // 主动红外
+ public static final int NET_SENSE_GLASS = 6; // 玻璃破碎
+ public static final int NET_SENSE_EMERGENCYSWITCH = 7; // 紧急开关
+ public static final int NET_SENSE_SHOCK = 8; // 震动
+ public static final int NET_SENSE_DOUBLEMETHOD = 9; // 双鉴(红外+微波)
+ public static final int NET_SENSE_THREEMETHOD = 10; // 三技术
+ public static final int NET_SENSE_TEMP = 11; // 温度
+ public static final int NET_SENSE_HUMIDITY = 12; // 湿度
+ public static final int NET_SENSE_WIND = 13; // 风速
+ public static final int NET_SENSE_CALLBUTTON = 14; // 呼叫按钮
+ public static final int NET_SENSE_GASPRESSURE = 15; // 气体压力
+ public static final int NET_SENSE_GASCONCENTRATION = 16; // 燃气浓度
+ public static final int NET_SENSE_GASFLOW = 17; // 气体流量
+ public static final int NET_SENSE_OTHER = 18; // 其他
+ public static final int NET_SENSE_OIL = 19; // 油量检测,汽油、柴油等车辆用油检测
+ public static final int NET_SENSE_MILEAGE = 20; // 里程数检测
+ public static final int NET_SENSE_URGENCYBUTTON = 21; // 紧急按钮
+ public static final int NET_SENSE_STEAL = 22; // 盗窃
+ public static final int NET_SENSE_PERIMETER = 23; // 周界
+ public static final int NET_SENSE_PREVENTREMOVE = 24; // 防拆
+ public static final int NET_SENSE_DOORBELL = 25; // 门铃
+ public static final int NET_SENSE_ALTERVOLT = 26; // 交流电压传感器
+ public static final int NET_SENSE_DIRECTVOLT = 27; // 直流电压传感器
+ public static final int NET_SENSE_ALTERCUR = 28; // 交流电流传感器
+ public static final int NET_SENSE_DIRECTCUR = 29; // 直流电流传感器
+ public static final int NET_SENSE_RSUGENERAL = 30; // 高新兴通用模拟量 4~20mA或0~5V
+ public static final int NET_SENSE_RSUDOOR = 31; // 高新兴门禁感应
+ public static final int NET_SENSE_RSUPOWEROFF = 32; // 高新兴断电感应
+ public static final int NET_SENSE_TEMP1500 = 33; // 1500温度传感器
+ public static final int NET_SENSE_TEMPDS18B20 = 34; // DS18B20温度传感器
+ public static final int NET_SENSE_HUMIDITY1500 = 35; // 1500湿度传感器
+ public static final int NET_SENSE_INFRARED = 36; // 红外报警
+ public static final int NET_SENSE_FIREALARM = 37; // 火警
+ public static final int NET_SENSE_CO2 = 38; // CO2浓度检测,典型值:0~5000ppm
+ public static final int NET_SNESE_SOUND = 39; // 噪音检测,典型值:30~130dB
+ public static final int NET_SENSE_PM25 = 40; // PM2.5检测,典型值:0~1000ug/m3
+ public static final int NET_SENSE_SF6 = 41; // SF6浓度检测,典型值:0~3000ppm
+ public static final int NET_SENSE_O3 = 42; // 臭氧浓度检测,典型值:0~100ppm
+ public static final int NET_SENSE_AMBIENTLIGHT = 43; // 环境光照检测,典型值:0~20000Lux
+ public static final int NET_SENSE_SIGNINBUTTON = 44; // 签入按钮
+ public static final int NET_SENSE_LIQUIDLEVEL = 45; // 液位
+ public static final int NET_SENSE_DISTANCE = 46; // 测距
+ public static final int NET_SENSE_WATERFLOW = 47; // 水流量
+
+
+
+ public static final int NET_SENSE_NUM = 48; // 枚举类型总数
+ }
+
+ // 防区类型
+ public static class NET_DEFENCEAREA_TYPE extends SdkStructure
+ {
+ public static final int NET_DEFENCEAREA_TYPE_UNKNOWN = 0; // 未知类型防区
+ public static final int NET_DEFENCEAREA_TYPE_ALARM = 1; // 开关量防区
+ }
+
+ // 旁路状态类型
+ public static class NET_BYPASS_MODE extends SdkStructure
+ {
+ public static final int NET_BYPASS_MODE_UNKNOW = 0; // 未知状态
+ public static final int NET_BYPASS_MODE_BYPASS = 1; // 旁路
+ public static final int NET_BYPASS_MODE_NORMAL = 2; // 正常
+ public static final int NET_BYPASS_MODE_ISOLATED = 3; // 隔离
+ }
+
+ // 旁路状态变化事件的信息
+ public static class ALARM_BYPASSMODE_CHANGE_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannelID; // 通道号
+ public NET_TIME stuTime; // 报警事件发生的时间
+ public int emDefenceType; // 防区类型,详见NET_DEFENCEAREA_TYPE
+ public int nIsExtend; // 是否为扩展(通道)防区, 1:扩展通道, 0: 非扩展通道
+ public int emMode; // 变化后的模式,详见NET_BYPASS_MODE
+ public int dwID; // ID号, 遥控器编号或键盘地址, emTriggerMode为NET_EM_TRIGGER_MODE_NET类型时为0
+ public int emTriggerMode; // 触发方式,详见NET_EM_TRIGGER_MODE
+
+ public ALARM_BYPASSMODE_CHANGE_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 报警输入源事件详情(只要有输入就会产生改事件,不论防区当前的模式,无法屏蔽)
+ public static class ALARM_INPUT_SOURCE_SIGNAL_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannelID; // 通道号
+ public int nAction; // 0:开始 1:停止
+ public NET_TIME stuTime; // 报警事件发生的时间
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+
+ public ALARM_INPUT_SOURCE_SIGNAL_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 门禁状态类型
+ public static class NET_ACCESS_CTL_STATUS_TYPE extends SdkStructure
+ {
+ public static final int NET_ACCESS_CTL_STATUS_TYPE_UNKNOWN = 0;
+ public static final int NET_ACCESS_CTL_STATUS_TYPE_OPEN = 1; // 开门
+ public static final int NET_ACCESS_CTL_STATUS_TYPE_CLOSE = 2; // 关门
+ public static final int NET_ACCESS_CTL_STATUS_TYPE_ABNORMAL = 3; // 异常
+ public static final int NET_ACCESS_CTL_STATUS_TYPE_FAKELOCKED = 4; // 假锁
+ public static final int NET_ACCESS_CTL_STATUS_TYPE_CLOSEALWAYS = 5; // 常闭
+ public static final int NET_ACCESS_CTL_STATUS_TYPE_OPENALWAYS = 6; // 常开
+ }
+
+ // 多人组合开门事件(对应NET_ALARM_OPENDOORGROUP类型)
+ public static class ALARM_OPEN_DOOR_GROUP_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannelID; // 门通道号(从0开始)
+ public NET_TIME stuTime; // 事件时间
+
+ public ALARM_OPEN_DOOR_GROUP_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 获取信息事件(对应NET_ALARM_FINGER_PRINT类型)
+ public static class ALARM_CAPTURE_FINGER_PRINT_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannelID; // 门通道号(从0开始)
+ public NET_TIME stuTime; // 事件时间
+ public byte[] szReaderID = new byte[NET_COMMON_STRING_32]; // 门读卡器ID
+ public int nPacketLen; // 单个信息数据包长度
+ public int nPacketNum; // 信息数据包个数
+ public Pointer szFingerPrintInfo; // 信息数据(数据总长度即nPacketLen*nPacketNum),指向byte
+ public int bCollectResult; // 采集结果
+ public byte[] szCardNo=new byte[32]; // 信息所属人员卡号
+ public byte[] szUserID=new byte[32]; // 信息所属人员ID
+
+ public ALARM_CAPTURE_FINGER_PRINT_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 子系统状态类型
+ public static class EM_SUBSYSTEM_STATE_TYPE extends SdkStructure
+ {
+ public static final int EM_SUBSYSTEM_STATE_UNKNOWN = 0; // 未知
+ public static final int EM_SUBSYSTEM_STATE_ACTIVE = 1; // 已激活
+ public static final int EM_SUBSYSTEM_STATE_INACTIVE = 2; // 未激活
+ }
+
+ // 子系统状态改变事件
+ public static class ALARM_SUBSYSTEM_STATE_CHANGE_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannelID; // 子系统序号(从0开始)
+ public NET_TIME stuTime; // 事件发生的时间
+ public int emState; // 变化后的状态,详见EM_SUBSYSTEM_STATE_TYPE
+
+ public ALARM_SUBSYSTEM_STATE_CHANGE_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // PSTN掉线事件
+ public static class ALARM_PSTN_BREAK_LINE_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannelID; // 电话线序号(从0开始)
+ public int nAction; // 0:开始 1:停止
+ public NET_TIME stuTime; // 事件发生的时间
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public ALARM_PSTN_BREAK_LINE_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 反复进入事件详细信息
+ public static class ALARM_ACCESS_CTL_REPEAT_ENTER_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int nDoor; // 门通道号
+ public byte[] szDoorName = new byte[NET_MAX_DOORNAME_LEN]; // 门禁名称
+ public NET_TIME stuTime; // 报警事件发生的时间
+ public byte[] szCardNo = new byte[NET_MAX_CARDNO_LEN]; // 卡号
+ public int nEventID; // 事件ID
+
+ public ALARM_ACCESS_CTL_REPEAT_ENTER_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 胁迫卡刷卡事件详细信息
+ public static class ALARM_ACCESS_CTL_DURESS_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int nDoor; // 门通道号
+ public byte[] szDoorName = new byte[NET_MAX_DOORNAME_LEN]; // 门禁名称
+ public byte[] szCardNo = new byte[NET_MAX_CARDNO_LEN]; // 胁迫卡号
+ public NET_TIME stuTime; // 报警事件发生的时间
+ public int nEventID; // 事件ID
+ public byte[] szSN = new byte[32]; // 无线设备序列号
+ public byte[] szUserID=new byte[12]; // 用户ID
+ public boolean bRealUTC; // RealUTC 是否有效,bRealUTC 为 TRUE 时,用 RealUTC,否则用 stuTime 字段
+ public NET_TIME_EX RealUTC; // 事件发生的时间(标准UTC)
+ public byte[] szUserIDEx= new byte[32]; // 用户ID扩展
+ public ALARM_ACCESS_CTL_DURESS_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 区域检测事件动作
+ public static class NET_CROSSREGION_ACTION_INFO extends SdkStructure
+ {
+ public static final int EM_CROSSREGION_ACTION_UNKNOW = 0;
+ public static final int EM_CROSSREGION_ACTION_INSIDE = 1; // 在区域内
+ public static final int EM_CROSSREGION_ACTION_CROSS = 2; // 穿越区域
+ public static final int EM_CROSSREGION_ACTION_APPEAR = 3; // 出现
+ public static final int EM_CROSSREGION_ACTION_DISAPPEAR = 4; // 消失
+ }
+
+ // 警戒线入侵方向
+ public static class NET_CROSSLINE_DIRECTION_INFO extends SdkStructure
+ {
+ public static final int EM_CROSSLINE_DIRECTION_UNKNOW = 0;
+ public static final int EM_CROSSLINE_DIRECTION_LEFT2RIGHT = 1; // 左到右
+ public static final int EM_CROSSLINE_DIRECTION_RIGHT2LEFT = 2; // 右到左
+ public static final int EM_CROSSLINE_DIRECTION_ANY = 3;
+ }
+
+ // 警戒线事件(对应事件 NET_EVENT_CROSSLINE_DETECTION)
+ public static class ALARM_EVENT_CROSSLINE_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannelID; // 通道号
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+
+ public int emCrossDirection; // 入侵方向,详见NET_CROSSLINE_DIRECTION_INFO
+ public int nOccurrenceCount; // 规则被触发生次数
+ public int nLevel; // 事件级别,GB30147需求项
+ public int bIsObjectInfo; // 是否检测到物体信息
+ public NET_MSG_OBJECT stuObject; // 检测到的物体信息
+ public int nRetObjectNum; // 实际返回多个检测到的物体信息
+ public NET_MSG_OBJECT[] stuObjects = new NET_MSG_OBJECT[MAX_TARGET_OBJECT_NUM]; // 多个检测到的物体信息
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+
+ public ALARM_EVENT_CROSSLINE_INFO()
+ {
+ this.dwSize = this.size();
+
+ for (int i = 0; i < stuObjects.length; ++i) {
+ stuObjects[i] = new NET_MSG_OBJECT();
+ }
+ }
+ }
+
+ //警戒区事件(对应事件 NET_EVENT_CROSSREGION_DETECTION)
+ public static class ALARM_EVENT_CROSSREGION_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannelID; // 通道号
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+
+ public int emDirection; // 警戒区入侵方向,详见NET_CROSSREGION_DIRECTION_INFO
+ public int emActionType; // 警戒区检测动作类型,详见NET_CROSSREGION_ACTION_INFO
+ public int nOccurrenceCount; // 规则被触发生次数
+ public int nLevel; // 事件级别,GB30147需求项
+ public byte[] szName = new byte[NET_COMMON_STRING_128]; // 名称
+ public int bIsObjectInfo; // 是否检测到物体信息
+ public NET_MSG_OBJECT stuObject; // 检测到的物体信息
+ public int nRetObjectNum; // 实际返回多个检测到的物体信息
+ public NET_MSG_OBJECT[] stuObjects = new NET_MSG_OBJECT[MAX_TARGET_OBJECT_NUM]; // 多个检测到的物体信息
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] szMac = new byte[32]; // 事件触发源的Mac地址
+ public byte[] szReserved = new byte[1024]; // 预留字节
+
+ public ALARM_EVENT_CROSSREGION_INFO()
+ {
+ this.dwSize = this.size();
+
+ for (int i = 0; i < stuObjects.length; ++i) {
+ stuObjects[i] = new NET_MSG_OBJECT();
+ }
+ }
+ }
+
+ // 探测器状态
+ public static class EM_SENSOR_ABNORMAL_STATUS extends SdkStructure
+ {
+ public static final int NET_SENSOR_ABNORMAL_STATUS_UNKNOWN = 0;
+ public static final int NET_SENSOR_ABNORMAL_STATUS_SHORT = 1; // 短路
+ public static final int NET_SENSOR_ABNORMAL_STATUS_BREAK = 2; // 断路
+ public static final int NET_SENSOR_ABNORMAL_STATUS_INTRIDED = 3; // 被拆开
+ }
+
+ //事件类型(NET_ALARM_SENSOR_ABNORMAL) 探测器状态异常报警
+ public static class ALARM_SENSOR_ABNORMAL_INFO extends SdkStructure
+ {
+ public int nAction; // 0:开始 1:停止
+ public int nChannelID; // 视频通道号
+ public NET_TIME_EX stuTime; // 事件发生的时间
+ public int emStatus; // 探测器状态,详见EM_SENSOR_ABNORMAL_STATUS
+ public int emSenseMethod; // SenseMethod, 感应方式,参见具体枚举定义NET_SENSE_METHOD
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] byReserved = new byte[124]; // 预留字段
+ }
+
+ // 防区布防撤防状态类型
+ public static class EM_DEFENCEMODE extends SdkStructure
+ {
+ public static final int EM_DEFENCEMODE_UNKNOWN = 0; // "unknown" 未知
+ public static final int EM_DEFENCEMODE_ARMING = 1; // "Arming" 布防
+ public static final int EM_DEFENCEMODE_DISARMING = 2; // "Disarming" 撤防
+ }
+
+ //触发方式
+ public static class EM_ARMMODECHANGE_TRIGGERMODE extends SdkStructure
+ {
+ public static final int EM_ARMMODECHANGE_TRIGGERMODE_UNKNOWN = 0; // 未知
+ public static final int EM_ARMMODECHANGE_TRIGGERMODE_NET = 1; // 网络用户
+ public static final int EM_ARMMODECHANGE_TRIGGERMODE_KEYBOARD = 2; // 键盘
+ public static final int EM_ARMMODECHANGE_TRIGGERMODE_REMOTECONTROL = 3; // 遥控器
+ }
+
+ //防区类型
+ public static class EM_ARMMODECHANGE_DEFENCEAREATYPE extends SdkStructure
+ {
+ public static final int EM_ARMMODECHANGE_DEFENCEAREATYPE_UNKNOWN = 0; // 未知
+ public static final int EM_ARMMODECHANGE_DEFENCEAREATYPE_INTIME = 1; // 及时
+ public static final int EM_ARMMODECHANGE_DEFENCEAREATYPE_DELAY = 2; // 延时
+ public static final int EM_ARMMODECHANGE_DEFENCEAREATYPE_FULLDAY = 3; // 全天
+ public static final int EM_ARMMODECHANGE_DEFENCEAREATYPE_FOLLOW = 4; // 跟随
+ public static final int EM_ARMMODECHANGE_DEFENCEAREATYPE_MEDICAL = 5; // 医疗紧急
+ public static final int EM_ARMMODECHANGE_DEFENCEAREATYPE_PANIC = 6; // 恐慌
+ public static final int EM_ARMMODECHANGE_DEFENCEAREATYPE_FIRE = 7; // 火警
+ public static final int EM_ARMMODECHANGE_DEFENCEAREATYPE_FULLDAYSOUND = 8; // 全天有声
+ public static final int EM_ARMMODECHANGE_DEFENCEAREATYPE_FULLDAYSILENT = 9; // 全天无声
+ public static final int EM_ARMMODECHANGE_DEFENCEAREATYPE_ENTRANCE1 = 10; // 出入防区1
+ public static final int EM_ARMMODECHANGE_DEFENCEAREATYPE_ENTRANCE2 = 11; // 出入防区2
+ public static final int EM_ARMMODECHANGE_DEFENCEAREATYPE_INSIDE = 12; // 内部防区
+ public static final int EM_ARMMODECHANGE_DEFENCEAREATYPE_OUTSIDE = 13; // 外部防区
+ public static final int EM_ARMMODECHANGE_DEFENCEAREATYPE_PEOPLEDETECT = 14; // 人员检测
+ }
+
+ // 事件类型NET_ALARM_DEFENCE_ARMMODECHANGE (防区布撤防状态改变事件)
+ public static class ALARM_DEFENCE_ARMMODECHANGE_INFO extends SdkStructure
+ {
+ public int emDefenceStatus; // 布撤防状态,详见EM_DEFENCEMODE
+ public int nDefenceID; // 防区号
+ public NET_TIME_EX stuTime; // 时间
+
+ public int emTriggerMode; // 触发方式,详见EM_ARMMODECHANGE_TRIGGERMODE
+ public int emDefenceAreaType; // 防区类型,详见EM_ARMMODECHANGE_DEFENCEAREATYPE
+ public int nID; // 遥控器编号或键盘地址
+ public int nAlarmSubSystem; // 子系统号
+ public byte[] szName = new byte[64]; // 防区名称
+ public byte[] szNetClientAddr = new byte[64]; // 用户IP或网络地址
+
+ public byte[] reserved = new byte[368]; // 预留
+ }
+
+ // 工作状态
+ public static class EM_SUBSYSTEMMODE extends SdkStructure
+ {
+ public static final int EM_SUBSYSTEMMODE_UNKNOWN = 0; // "unknown" 未知
+ public static final int EM_SUBSYSTEMMODE_ACTIVE = 1; // "active" 激活
+ public static final int EM_SUBSYSTEMMODE_INACTIVE = 2; // "inactive" 未激活
+ public static final int EM_SUBSYSTEMMODE_UNDISTRIBUTED = 3; // "undistributed" 未分配
+ public static final int EM_SUBSYSTEMMODE_ALLARMING = 4; // "AllArming" 全部布防
+ public static final int EM_SUBSYSTEMMODE_ALLDISARMING = 5; // "AllDisarming" 全部撤防
+ public static final int EM_SUBSYSTEMMODE_PARTARMING = 6; // "PartArming" 部分布防
+ }
+
+ //触发方式
+ public static class EM_SUBSYSTEM_ARMMODECHANGE_TRIGGERMODE extends SdkStructure
+ {
+ public static final int EM_SUBSYSTEM_ARMMODECHANGE_TRIGGERMODE_UNKNOWN = 0; // 未知
+ public static final int EM_SUBSYSTEM_ARMMODECHANGE_TRIGGERMODE_NET = 1; // 网络用户
+ public static final int EM_SUBSYSTEM_ARMMODECHANGE_TRIGGERMODE_KEYBOARD = 2; // 键盘
+ public static final int EM_SUBSYSTEM_ARMMODECHANGE_TRIGGERMODE_REMOTECONTROL = 3; // 遥控器
+ }
+
+ // 事件类型 NET_ALARM_SUBSYSTEM_ARMMODECHANGE (子系统布撤防状态改变事件)
+ public static class ALARM_SUBSYSTEM_ARMMODECHANGE_INFO extends SdkStructure
+ {
+ public int emSubsystemMode; // 布撤防状态 (只支持AllArming,AllDisarming,PartArming三种状态),详见EM_SUBSYSTEMMODE
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public byte[] szSubSystemname = new byte[64]; // 子系统名称
+ public int nSubSystemID; // 子系统编号
+
+ public int emTriggerMode; // 触发方式,详见EM_SUBSYSTEM_ARMMODECHANGE_TRIGGERMODE
+ public int nID; // 键盘或遥控器地址
+ public byte[] szNetClientAddr = new byte[64]; // 网络用户IP地址或网络地址
+
+ public byte[] reserved = new byte[440]; // 预留
+ }
+
+ // 立体视觉站立事件区域内人员列表
+ public static class MAN_STAND_LIST_INFO extends SdkStructure
+ {
+ public NET_POINT stuCenter; // 站立人员所在位置,8192坐标系
+ public byte[] szSerialUUID=new byte[22]; // 智能物体全局唯一物体标识
+ // 有效数据位21位,包含’\0’
+ // 前2位%d%d:01-视频片段, 02-图片, 03-文件, 99-其他
+ // 中间14位YYYYMMDDhhmmss:年月日时分秒
+ // 后5位%u%u%u%u%u:物体ID,如00001
+ public DH_RECT stuBoundingBox; // 包围盒
+ public byte[] szReversed = new byte[90]; // 保留字节
+ }
+
+ // 事件类型EVENT_IVS_MAN_STAND_DETECTION(立体视觉站立事件)对应数据块描述信息
+ public static class DEV_EVENT_MANSTAND_DETECTION_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐,非保留字节
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ ///////////////////////////////以上为公共字段,除nChannelID外的其他字段是为了预留公共字段空间//////////////////////////////
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public int nManListCount; // 区域人员列表数量
+ public MAN_STAND_LIST_INFO[] stuManList = new MAN_STAND_LIST_INFO[MAX_MAN_LIST_COUNT]; // 区域内人员列表
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public byte[] szReversed = new byte[2048]; // 保留字节
+
+ public DEV_EVENT_MANSTAND_DETECTION_INFO()
+ {
+ for (int i = 0; i < stuManList.length; ++i) {
+ stuManList[i] = new MAN_STAND_LIST_INFO();
+ }
+ }
+ }
+
+ // 课堂行为动作类型
+ public static class EM_CLASSROOM_ACTION extends SdkStructure
+ {
+ public static final int EM_CLASSROOM_ACTION_UNKNOWN = 0; // 未知
+ public static final int EM_CLASSROOM_ACTION_PLAY_PHONE = 1; // 玩手机
+ public static final int EM_CLASSROOM_ACTION_HANDSUP = 2; // 举手
+ public static final int EM_CLASSROOM_ACTION_LISTEN = 3; // 听讲
+ public static final int EM_CLASSROOM_ACTION_READ_WRITE = 4; // 读写
+ public static final int EM_CLASSROOM_ACTION_TABLE = 5; // 趴桌子
+ }
+
+ // 事件类型 EVENT_IVS_CLASSROOM_BEHAVIOR (课堂行为分析事件) 对应的数据块描述信息
+ public static class DEV_EVENT_CLASSROOM_BEHAVIOR_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public byte[] szName = new byte[128]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+
+ public int emClassType; // 智能事件所属大类,详见EM_SCENE_CLASS_TYPE
+ public int nRuleID; // 智能事件规则编号,用于标示哪个规则触发的事件
+ public int nObjectID; // 物体ID
+ public int nSequence; // 帧序号
+ public int emClassroomAction; // 课堂行为动作,详见EM_CLASSROOM_ACTION
+ public NET_POINT[] stuDetectRegion = new NET_POINT[NET_MAX_DETECT_REGION_NUM]; // 规则检测区域
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public int nPresetID; // 事件触发的预置点号
+ public byte[] szPresetName = new byte[64]; // 事件触发的预置点名称
+ public byte[] szSerialUUID = new byte[22]; // 智能物体全局唯一物体标识
+ // 格式如下:前2位%d%d:01-视频片段,02-图片,03-文件,99-其他;
+ //中间14位YYYYMMDDhhmmss:年月日时分秒;后5位%u%u%u%u%u:物体ID,如00001
+ public byte[] byReserved1 = new byte[2]; // 用于字节对齐
+ public NET_RECT stuBoundingBox; // 包围盒
+ public NET_INTELLIGENCE_IMAGE_INFO stuSceneImage; // 人脸底图信息
+ public NET_INTELLIGENCE_IMAGE_INFO stuFaceImage; // 人脸小图信息
+ public NET_FACE_ATTRIBUTE_EX stuFaceAttributes; // 人脸属性
+ public NET_IMAGE_INFO_EX2 stuImageInfo[] = (NET_IMAGE_INFO_EX2[])new NET_IMAGE_INFO_EX2().toArray(32); //图片信息数组
+ public int nImageInfoNum; //图片信息个数
+ public byte byReserved[] = new byte[1024]; //预留字节
+
+ public DEV_EVENT_CLASSROOM_BEHAVIOR_INFO()
+ {
+ for (int i = 0; i < stuDetectRegion.length; ++i) {
+ stuDetectRegion[i] = new NET_POINT();
+ }
+ }
+ }
+
+ // 抓拍类型
+ public static class NET_EM_SNAP_SHOT_TYPE extends SdkStructure
+ {
+ public static final int NET_EM_SNAP_SHOT_TYPE_UNKNOWN = 0; // 未知
+ public static final int NET_EM_SNAP_SHOT_TYPE_NEAR = 1; // 近景
+ public static final int NET_EM_SNAP_SHOT_TYPE_MEDIUM = 2; // 中景
+ public static final int NET_EM_SNAP_SHOT_TYPE_FAR = 3; // 远景
+ public static final int NET_EM_SNAP_SHOT_TYPE_FEATURE = 4; // 车牌特写
+ }
+
+ // 抓拍间隔模式
+ public static class NET_EM_SNAP_SHOT_INTERVAL_MODE extends SdkStructure
+ {
+ public static final int NET_EM_SNAP_SHOT_INTERVAL_UNKNOWN = 0; // 未知
+ public static final int NET_EM_SNAP_SHOT_INTERVAL_TIME = 1; // 按固定时间间隔,该模式下nSingleInterval有效
+ public static final int NET_EM_SNAP_SHOT_INTERVAL_FRAMEADAPTSPEED = 2; // 速度自适应帧间隔
+ public static final int NET_EM_SNAP_SHOT_INTERVAL_FRAME = 3; // 固定帧间隔
+ }
+
+ // 规则集抓拍参数
+ public static class NET_SNAP_SHOT_WITH_RULE_INFO extends SdkStructure
+ {
+ public int nRuleId;
+ public int dwRuleType; // 规则类型,详见dhnetsdk.h中"智能分析事件类型"
+ public int nSnapShotNum; // 抓拍图片张数
+ public int[] emSnapShotType = new int[MAX_SNAP_SHOT_NUM]; // 抓拍图片类型数组,详见NET_EM_SNAP_SHOT_TYPE
+ public int[] nSingleInterval = new int[MAX_SNAP_SHOT_NUM]; // 抓图时间间隔数组,单位秒,数组第一个时间:5~180 默认10, 其余时间(N张抓拍有N-1个间隔时):1~3600 默认20
+ public int emIntervalMode; // 抓拍间隔模式,详见NET_EM_SNAP_SHOT_INTERVAL_MODE
+ public byte[] byReserved = new byte[1024]; // 预留
+ }
+
+ // 抓拍参数
+ public static class NET_SCENE_SNAP_SHOT_WITH_RULE2_INFO extends SdkStructure
+ {
+ public int nPresetID; // 场景预置点号
+ public int nRetSnapShotRuleNum; // stuSnapShotWithRule中有效数据个数
+ public NET_SNAP_SHOT_WITH_RULE_INFO[] stuSnapShotWithRule = new NET_SNAP_SHOT_WITH_RULE_INFO[32]; // 规则集抓拍参数
+ public byte[] byReserved = new byte[1024]; // 预留
+
+ public NET_SCENE_SNAP_SHOT_WITH_RULE2_INFO()
+ {
+ for (int i = 0; i < stuSnapShotWithRule.length; ++i) {
+ stuSnapShotWithRule[i] = new NET_SNAP_SHOT_WITH_RULE_INFO();
+ }
+ }
+ }
+
+ // 场景抓拍设置 对应枚举 NET_EM_CFG_SCENE_SNAP_SHOT_WITH_RULE2
+ public static class NET_CFG_SCENE_SNAP_SHOT_WITH_RULE2_INFO extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nMaxRuleNum; // pstuSnapShotWithRule中用户分配的内存个数
+ public int nRetRuleNum; // pstuSnapShotWithRule中实际有效的数据个数
+ public Pointer pstuSceneSnapShotWithRule; // 抓拍参数,由用户分配和释放内存,大小为nMaxRuleNum * sizeof(NET_SCENE_SNAP_SHOT_WITH_RULE2_INFO),指向NET_SCENE_SNAP_SHOT_WITH_RULE2_INFO
+
+ public NET_CFG_SCENE_SNAP_SHOT_WITH_RULE2_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ }
+
+ // 车辆动作
+ public static class EM_VEHICLE_ACTION extends Structure{
+ public static final int EM_VEHICLE_ACTION_UNKNOWN=0; // 未知
+ public static final int EM_VEHICLE_ACTION_APPEAR=1; // "Appear"在检测区域内
+ public static final int EM_VEHICLE_ACTION_DISAPPEAR=2; // "Disappear"离开检测区域
+ }
+
+ // 检测到的车辆信息
+ public static class NET_DETECT_VEHICLE_INFO extends SdkStructure{
+ public int emAction; // 检测车辆动作
+ public int /*UINT*/ nObjectID; // 物体ID
+ public int emCategoryType; // 车辆类型
+ public EVENT_PIC_INFO stuVehicleImage; // 车辆抓图信息
+ public NET_COLOR_RGBA stuColor; // 车身主要颜色
+ public int /*UINT*/ nFrameSequence; // 帧序号
+ public int /*UINT*/ nCarLogoIndex; // 车辆车标
+ public int /*UINT*/ nSubBrand; // 车辆子品牌
+ public int /*UINT*/ nBrandYear; // 车辆品牌年款
+ public int /*UINT*/ nConfidence; // 置信度,值越大表示置信度越高, 范围 0~255
+ public NET_RECT stuBoundingBox; // 包围盒, 0-8191相对坐标
+ public byte[] szText=new byte[128]; // 车标
+ public int /*UINT*/ nSpeed; // 车速,单位为km/h
+ public int /*UINT*/ nDirection; // 车辆行驶方向, 0:未知, 1:上行方向, 2:下行方向
+ public byte[] bReserved=new byte[512];// 保留字节
+ }
+
+ // 检测的车牌信息
+ public static class NET_DETECT_PLATE_INFO extends SdkStructure{
+ public int /*UINT*/ nObjectID; // 车牌ID
+ public int /*UINT*/ nRelativeID; // 关联的车辆ID
+ public EVENT_PIC_INFO stuPlateImage; // 车牌图片信息
+ public int emPlateType; // 车牌类型,参考枚举EM_NET_PLATE_TYPE
+ public int emPlateColor; // 车牌颜色,参考枚举EM_NET_PLATE_COLOR_TYPE
+ public int /*UINT*/ nConfidence; // 置信度,值越大表示置信度越高, 范围 0~255
+ public byte[] szCountry=new byte[3]; // 车牌国家
+ public byte bReserved1; // 字节对齐
+ public byte[] szPlateNumber=new byte[128]; // 车牌号码
+ public byte[] bReserved=new byte[512];// 保留字节
+ }
+
+ // 加油站车辆检测事件 (对应 DEV_EVENT_GASSTATION_VEHICLE_DETECT_INFO)
+ public static class DEV_EVENT_GASSTATION_VEHICLE_DETECT_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 0:脉冲1:开始 2:停止
+ public byte[] szName = new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nRuleID; // 智能事件规则编号,用于标示哪个规则触发的事件
+ public int emClassType; // 智能事件所属大类
+ public NET_DETECT_VEHICLE_INFO stuDetectVehicleInfo; // 检测到的车辆信息
+ public NET_DETECT_PLATE_INFO stuDetectPlateInfo; // 检测到的车牌信息
+ public boolean bIsGlobalScene; // 是否有场景图
+ public EVENT_PIC_INFO stuSceneImage; // 场景图信息, bIsGlobalScene 为 TRUE 时有效
+ public int nCarCandidateNum; // 候选车辆数量
+ public NET_CAR_CANDIDATE_INFO[] stuCarCandidate = (NET_CAR_CANDIDATE_INFO[])new NET_CAR_CANDIDATE_INFO().toArray(MAX_CAR_CANDIDATE_NUM); // 候选车辆数据
+ /*public boolean bIsEmptyPlace; // 是否是空车位报警*/
+ public NET_FUEL_DISPENSER_INFO stuFuelDispenser; // 从加油机获取的信息,IVSS对接加油机及N8000
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stuTrafficCar; // 交通车辆信息
+ public byte[] bReserved=new byte[872]; // 保留字节
+ }
+
+ // 事件级别,GB30147需求
+ public static class EM_EVENT_LEVEL extends Structure
+ {
+ public static final int EM_EVENT_LEVEL_HINT = 0; // 提示
+ public static final int EM_EVENT_LEVEL_GENERAL=1; // 普通
+ public static final int EM_EVENT_LEVEL_WARNING=2; // 警告
+ }
+
+ // 事件类型EVENT_IVS_SHOPPRESENCE(商铺占道经营事件)对应的数据块描述信息
+ public static class DEV_EVENT_SHOPPRESENCE_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName=new byte[128]; // 事件名称
+ public byte[] bReserved1=new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_MSG_OBJECT stuObject; // 检测到的物体,推荐使用字段stuObjects获取物体信息
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public NET_POINT[] DetectRegion = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved=new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public int nSourceIndex; // 事件源设备上的index,-1表示数据无效
+ public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ public int nOccurrenceCount; // 事件触发累计次数
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public byte[] szPresetName=new byte[64]; // 事件触发的预置点名称
+ public int emEventLevel; // 事件级别,GB30147需求
+ public byte[] szShopAddress=new byte[256]; // 商铺地址
+ public int nViolationDuration; // 违法持续时长,单位:秒,缺省值0表示无意义
+ public int nObjectNum; // 检测到的物体个数
+ public NET_MSG_OBJECT[] stuObjects = (NET_MSG_OBJECT[]) new NET_MSG_OBJECT().toArray(HDBJ_MAX_OBJECTS_NUM);// 检测到的物体
+ public byte[] szSourceID=new byte[32]; // 事件关联ID,同一个物体或图片生成多个事件时SourceID相同
+ public byte[] byReserved2=new byte[2048]; // 保留字节
+ }
+
+ // 事件类型 EVENT_IVS_FLOWBUSINESS (流动摊贩事件) 对应的数据块描述信息
+ public static class DEV_EVENT_FLOWBUSINESS_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public byte[] szName=new byte[128]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nDetectRegionNum; // 检测区域顶点数
+ public NET_POINT[] DetectRegion = (NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM);// 检测区域
+ public byte[] szPresetName=new byte[64]; // 事件触发的预置名称
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public int nViolationDuration; // 违法持续时长,单位:秒 缺省值0表示无意义
+ public int nObjectNum; // 检测到的物体个数
+ public NET_MSG_OBJECT[] stuObjects = (NET_MSG_OBJECT[]) new NET_MSG_OBJECT().toArray(HDBJ_MAX_OBJECTS_NUM);// 检测到的物体
+ public byte[] szSourceID=new byte[32]; // 事件关联ID,同一个物体或图片生成多个事件时SourceID相同
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public byte[] byReserved=new byte[2044]; // 保留字节
+ }
+
+ // 立体视觉区域内人数统计事件区域人员列表
+ public static class MAN_NUM_LIST_INFO extends SdkStructure
+ {
+ public DH_RECT stuBoudingBox; // 人员包围盒,8192坐标系
+ public int nStature; // 人员身高,单位cm
+ public byte[] szReversed=new byte[128]; // 保留字节
+ }
+
+ /**
+ * @author 260611
+ * @description 事件类型EVENT_IVS_MAN_NUM_DETECTION(立体视觉区域内人数统计事件)对应数据块描述信息
+ * @date 2023/01/10 19:44:49
+ */
+ public class DEV_EVENT_MANNUM_DETECTION_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 事件名称
+ */
+ public byte[] szName = new byte[128];
+ /**
+ * 字节对齐, 非保留字节
+ */
+ public byte[] bReserved1 = new byte[4];
+ /**
+ * 时间戳(单位是毫秒)
+ */
+ public double PTS;
+ /**
+ * 事件发生的时间
+ */
+ public com.netsdk.lib.structure.NET_TIME_EX UTC = new com.netsdk.lib.structure.NET_TIME_EX();
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * 0:脉冲 1:开始 2:停止
+ */
+ public int nAction;
+ /**
+ * 区域人员列表数量
+ */
+ public int nManListCount;
+ /**
+ * 区域内人员列表
+ */
+ public MAN_NUM_LIST_INFO[] stuManList = new MAN_NUM_LIST_INFO[64];
+ /**
+ * 智能事件公共信息
+ */
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo = new EVENT_INTELLI_COMM_INFO();
+ /**
+ * 区域ID(一个预置点可以对应多个区域ID)
+ */
+ public int nAreaID;
+ /**
+ * 变化前人数
+ */
+ public int nPrevNumber;
+ /**
+ * 当前人数
+ */
+ public int nCurrentNumber;
+ /**
+ * 事件关联ID。应用场景是同一个物体或者同一张图片做不同分析,产生的多个事件的SourceID相同
+ * 缺省时为空字符串,表示无此信息
+ * 格式:类型+时间+序列号,其中类型2位,时间14位,序列号5位
+ */
+ public byte[] szSourceID = new byte[32];
+ /**
+ * null
+ */
+ public byte[] szRuleName = new byte[128];
+ /**
+ * 检测模式 {@link com.netsdk.lib.enumeration.EM_EVENT_DETECT_TYPE}
+ */
+ public int emDetectType;
+ /**
+ * 实际触发报警的人数
+ */
+ public int nAlertNum;
+ /**
+ * 报警类型. 0:未知, 1:从人数正常到人数异常, 2:从人数异常到人数正常
+ */
+ public int nAlarmType;
+ /**
+ * 图片信息数组
+ */
+ public Pointer pstuImageInfo;
+ /**
+ * 图片信息个数
+ */
+ public int nImageInfoNum;
+ /**
+ * 事件公共扩展字段结构体
+ */
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND();
+ /**
+ * 检测区个数
+ */
+ public int nDetectRegionNum;
+ /**
+ * 检测区
+ */
+ public NET_POINT_EX[] stuDetectRegion = new NET_POINT_EX[20];
+ /**
+ * 保留字节
+ */
+ public byte[] szReversed = new byte[700];
+
+ public DEV_EVENT_MANNUM_DETECTION_INFO() {
+ for (int i = 0; i < stuManList.length; i++) {
+ stuManList[i] = new MAN_NUM_LIST_INFO();
+ }
+ for (int i = 0; i < stuDetectRegion.length; i++) {
+ stuDetectRegion[i] = new NET_POINT_EX();
+ }
+ }
+ }
+
+ public static class EM_ALARM_TYPE extends SdkStructure
+ {
+ public static final int EM_ALARM_TYPE_UNKNOWN = 0; // 未知类型
+ public static final int EM_ALARM_TYPE_CROWD_DENSITY = 1; // 拥挤人群密度报警
+ public static final int EM_ALARM_TYPE_NUMBER_EXCEED = 2; // 人数超限报警
+ public static final int EM_ALARM_TYPE_CROWD_DENSITY_AND_NUMBER_EXCEED = 3; // 拥挤人群密度报警和人数超限报警
+ };
+
+ // 全局拥挤人群密度列表(圆形)信息
+ public static class NET_CROWD_LIST_INFO extends SdkStructure
+ {
+ public NET_POINT stuCenterPoint = new NET_POINT(); // 中心点坐标,8192坐标系
+ public int nRadiusNum; // 半径像素点个数
+ public byte[] byReserved=new byte[1024]; // 保留字节
+ };
+
+ // 人数超限的报警区域ID列表信息
+ public static class NET_REGION_LIST_INFO extends SdkStructure
+ {
+ public int nRegionID; // 配置的区域下标
+ public int nPeopleNum; // 区域内人数统计值
+ public byte[] szName = new byte[32]; // 配置的名称
+ public DH_POINT[] stuDetectRegion = new DH_POINT[20]; // 配置的检测区域坐标
+ public int nDetectRegionNum; // 配置的检测区域坐标个数
+ public byte[] byReserved=new byte[908]; // 保留字节
+ };
+
+ // 全局拥挤人群密度列表(矩形)信息
+ public static class NET_CROWD_RECT_LIST_INFO extends SdkStructure
+ {
+ public NET_POINT[] stuRectPoint = (NET_POINT[])new NET_POINT().toArray(RECT_POINT); // 矩形的左上角点与右下角点,8192坐标系,表示矩形的人群密度矩形框
+ public byte[] byReserved=new byte[32]; // 保留字节
+ };
+ // 事件类型 EVENT_IVS_CROWDDETECTION(人群密度检测事件)对应的数据块描述信息
+ public static class DEV_EVENT_CROWD_DETECTION_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nEventID; // 事件ID
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventAction; // 事件动作,1表示持续性事件开始,2表示持续性事件结束;
+ public int emAlarmType; // 报警业务类型
+ public byte[] szName=new byte[MAX_CROWD_DETECTION_NAME_LEN]; // 事件名称
+ public int nCrowdListNum; // 返回的全局拥挤人群密度列表个数 (圆形描述)
+ public int nRegionListNum; // 返回的人数超限的报警区域ID列表个数
+ public NET_CROWD_LIST_INFO[] stuCrowdList=new NET_CROWD_LIST_INFO[MAX_CROWD_LIST_NUM]; // 全局拥挤人群密度列表信息(圆形描述)
+ public NET_REGION_LIST_INFO[] stuRegionList=new NET_REGION_LIST_INFO[MAX_REGION_LIST_NUM]; // 人数超限的报警区域ID列表信息
+ public NET_EXTENSION_INFO stuExtensionInfo; // 扩展信息
+ public int nCrowdRectListNum; // 返回的全局拥挤人群密度列表个数 (矩形描述)
+ public NET_CROWD_RECT_LIST_INFO[] stuCrowdRectList=new NET_CROWD_RECT_LIST_INFO[MAX_CROWD_RECT_LIST]; // 全局拥挤人群密度列表信息(矩形描述)
+ public int nGlobalPeopleNum; // 检测区全局总人数
+ public Pointer pstuImageInfo; // 图片信息数组 ,结构体NET_IMAGE_INFO_EX2数组指针
+ public int nImageInfoNum; // 图片信息个数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] byReserved=new byte[680]; // 保留扩展字节
+ };
+
+ // 人群密度检测事件(对应事件NET_ALARM_CROWD_DETECTION)
+ public static class ALARM_CROWD_DETECTION_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nEventID; // 事件ID
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventAction; // 事件动作,1表示持续性事件开始,2表示持续性事件结束;
+ public int emAlarmType; // 报警业务类型
+ public byte[] szName=new byte[MAX_CROWD_DETECTION_NAME_LEN]; // 事件名称
+ public int nCrowdListNum; // 返回的全局拥挤人群密度列表个数
+ public int nRegionListNum; // 返回的人数超限的报警区域ID列表个数
+ public NET_CROWD_LIST_INFO[] stuCrowdList=new NET_CROWD_LIST_INFO[MAX_CROWD_LIST_NUM]; // 全局拥挤人群密度列表信息
+ public NET_REGION_LIST_INFO[] stuRegionList=new NET_REGION_LIST_INFO[MAX_REGION_LIST_NUM]; // 人数超限的报警区域ID列表信息
+ public NET_EXTENSION_INFO stuExtensionInfo; // 扩展信息
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] byReserved=new byte[896]; // 保留扩展字节
+ };
+
+ // 对象目标类型
+ public static class EM_OBJECT_TYPE extends SdkStructure
+ {
+ public static final int EM_OBJECT_TYPE_UNKNOWN = -1; // 未知
+ public static final int EM_OBJECT_TYPE_FACE = 0; // 人脸
+ public static final int EM_OBJECT_TYPE_HUMAN = 1; // 人体
+ public static final int EM_OBJECT_TYPE_VECHILE = 2; // 机动车
+ public static final int EM_OBJECT_TYPE_NOMOTOR = 3; // 非机动车
+ public static final int EM_OBJECT_TYPE_ALL = 4; // 所有类型
+ };
+
+ // CLIENT_StartMultiFindFaceRecognition 接口输入参数
+ public static class NET_IN_STARTMULTIFIND_FACERECONGNITION extends SdkStructure
+ {
+ public int dwSize;
+ public Pointer pChannelID; // 通道号
+ public int nChannelCount; // 通道申请个数
+ public int bPersonEnable; // 人员信息查询条件是否有效
+ public FACERECOGNITION_PERSON_INFO stPerson; // 人员信息查询条件
+ public NET_FACE_MATCH_OPTIONS stMatchOptions; // 人脸匹配选项
+ public NET_FACE_FILTER_CONDTION stFilterInfo; // 查询过滤条件
+
+ // 图片二进制数据
+ public Pointer pBuffer; // 缓冲地址
+ public int nBufferLen; // 缓冲数据长度
+ public int bPersonExEnable; // 人员信息查询条件是否有效, 并使用人员信息扩展结构体
+ public FACERECOGNITION_PERSON_INFOEX stPersonInfoEx; // 人员信息扩展
+ public int emObjectType; // 搜索的目标类型,参考EM_OBJECT_TYPE
+ public int nChannelNum; // 通道有效个数
+ public byte[] szChannelString = new byte[512*32];// 通道号(使用)
+ public int nProcessType; // 以图搜图类型, -1: 未知, 0: 特征值搜索, 1: SMD属性特征搜索
+
+ public NET_IN_STARTMULTIFIND_FACERECONGNITION() {
+ this.dwSize = this.size();
+ }
+ };
+
+ // CLIENT_StartMultiFindFaceRecognition 接口输出参数
+ public static class NET_OUT_STARTMULTIFIND_FACERECONGNITION extends SdkStructure
+ {
+ public int dwSize;
+ public int nTotalCount; // 返回的符合查询条件的记录个数
+ // -1表示总条数未生成,要推迟获取
+ // 使用CLIENT_AttachFaceFindState接口状态
+ public LLong lFindHandle; // 查询句柄
+ public int nToken; // 获取到的查询令牌
+
+ public NET_OUT_STARTMULTIFIND_FACERECONGNITION() {
+ this.dwSize = this.size();
+ }
+ };
+
+ // 开始人脸检测/注册库的多通道查询
+ public Boolean CLIENT_StartMultiFindFaceRecognition(LLong lLoginID, NET_IN_STARTMULTIFIND_FACERECONGNITION pstInParam, NET_OUT_STARTMULTIFIND_FACERECONGNITION pstOutParam, int nWaitTime);
+
+ // 事件类型 EVENT_IVS_PEDESTRIAN_JUNCTION (行人卡口事件) 对应的数据块描述信息
+ public static class DEV_EVENT_PEDESTRIAN_JUNCTION_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName=new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public int nGroupID; // 事件组ID, 同一个人抓拍过程内nGroupID相同
+ public int nCountInGroup; // 一个事件组内的抓拍张数
+ public int nIndexInGroup; // 一个事件组内的抓拍序号,从1开始
+ public double PTS; // 事件戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int UTCMS; // UTC时间对应的毫秒数
+ public int nEventID; // 事件ID
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public NET_MSG_OBJECT stuObject; // 人脸信息
+ public int nLane; // 人行道号
+ public int nSequence; // 表示抓拍序号,如3/2/1,1表示抓拍结束,0表示异常结束
+ public VA_OBJECT_NONMOTOR stuNonMotor; // 非机动车信息
+ public boolean bHasNonMotor; // stuNonMotor 字段是否有效
+ public NET_MSG_OBJECT stuVehicle; // 行人信息
+ public byte[] byReserved=new byte[336]; // 保留字节
+ };
+
+ // 多人多开门方式组合(对应 CFG_CMD_OPEN_DOOR_GROUP 命令),表示每个通道的组合信息,
+ // 第一个通道的组合的开门优先级最高,后面依次递减
+ public static class CFG_OPEN_DOOR_GROUP_INFO extends SdkStructure {
+ public int nGroup; // 有效组合数
+ public CFG_OPEN_DOOR_GROUP[] stuGroupInfo = new CFG_OPEN_DOOR_GROUP[CFG_MAX_OPEN_DOOR_GROUP_NUM];// 多人开门组合信息
+ };
+
+ // 多人组合开门组信息
+ public static class CFG_OPEN_DOOR_GROUP extends SdkStructure {
+ public int nUserCount; // 用户数目,表示需要组合才能开门的人数
+ public int nGroupNum; // 有效组数目
+ public CFG_OPEN_DOOR_GROUP_DETAIL[] stuGroupDetail = new CFG_OPEN_DOOR_GROUP_DETAIL[CFG_MAX_OPEN_DOOR_GROUP_DETAIL_NUM];// 多人组合开门组的详细信息
+ public Boolean bGroupDetailEx; // TRUE: stuGroupDetail
+ // 字段无效、pstuGroupDetailEx字段有效, FALSE:
+ // stuGroupDetail
+ // 字段有效、pstuGroupDetailEx字段无效
+ public int nMaxGroupDetailNum; // 多人组合开门组的详细信息最大个数
+ public Pointer pstuGroupDetailEx; /*
+ * 多人组合开门组的详细信息扩展, 由用户申请内存,
+ * 大小为sizeof(CFG_OPEN_DOOR_GROUP_DETAIL
+ * )*nMaxUserCount, 当多人组合开门组的详细信息个数大于
+ * CFG_MAX_OPEN_DOOR_GROUP_DETAIL_NUM
+ * 时使用此字段
+ */
+ };
+
+ // 多人组合开门组详细信息
+ public static class CFG_OPEN_DOOR_GROUP_DETAIL extends SdkStructure {
+ public byte[] szUserID = new byte[CFG_MAX_USER_ID_LEN]; // 用户ID
+ public int emMethod; // 开门方式
+ public int nMethodExNum; // 开门方式扩展个数
+ public int[] emMethodEx = new int[CFG_MAX_METHODEX_NUM]; // 开门方式扩展
+ };
+
+ public static class EM_CFG_OPEN_DOOR_GROUP_METHOD extends SdkStructure {
+ public static final int EM_CFG_OPEN_DOOR_GROUP_METHOD_UNKNOWN = 0;
+ public static final int EM_CFG_OPEN_DOOR_GROUP_METHOD_CARD = 1; // 刷卡
+ public static final int EM_CFG_OPEN_DOOR_GROUP_METHOD_PWD = 2; // 密码
+ public static final int EM_CFG_OPEN_DOOR_GROUP_METHOD_FINGERPRINT = 3; // 信息
+ public static final int EM_CFG_OPEN_DOOR_GROUP_METHOD_ANY = 4; // 任意组合方式开门
+ public static final int EM_CFG_OPEN_DOOR_GROUP_METHOD_FACE = 5; // 人脸
+ };
+
+ public static final int CFG_MAX_USER_ID_LEN = 32; // 门禁卡用户ID最大长度
+ public static final int CFG_MAX_METHODEX_NUM = 4; // 开门方式扩展最大个数
+ public static final int CFG_MAX_OPEN_DOOR_GROUP_DETAIL_NUM = 64; // 每一组多人开门组合的最大人数
+ public static final int CFG_MAX_OPEN_DOOR_GROUP_NUM = 4; // 多人开门组合的最大组合数
+
+ // 开始查找X光机包裹信息
+ public LLong CLIENT_StartFindXRayPkg(LLong lLoginID, NET_IN_START_FIND_XRAY_PKG pInParam, NET_OUT_START_FIND_XRAY_PIC pOutParam, int nWaitTime);
+
+ // 查询X光机包裹的信息
+ public Boolean CLIENT_DoFindXRayPkg(LLong lFindID, NET_IN_DO_FIND_XRAY_PKG pInParam, NET_OUT_DO_FIND_XRAY_PKG pOutParam, int nWaitTime);
+
+ // 结束查询X光机包裹的信息
+ public Boolean CLIENT_StopFindXRayPkg(LLong lFindID);
+
+ // 物品类型
+ public static class EM_INSIDE_OBJECT_TYPE
+ {
+ public static final int EM_INSIDE_OBJECT_UNKNOWN = 0; // 算法未识别物品
+ public static final int EM_INSIDE_OBJECT_KNIFE = 1; // 刀具
+ public static final int EM_INSIDE_OBJECT_BOTTLELIQUID = 2; // 瓶装液体
+ public static final int EM_INSIDE_OBJECT_GUN = 3; // 枪支
+ public static final int EM_INSIDE_OBJECT_UMBRELLA = 4; // 雨伞
+ public static final int EM_INSIDE_OBJECT_PHONE = 5; // 手机
+ public static final int EM_INSIDE_OBJECT_NOTEBOOK = 6; // 笔记本
+ public static final int EM_INSIDE_OBJECT_POWERBANK = 7; // 充电宝
+ public static final int EM_INSIDE_OBJECT_SHOES = 8; // 鞋子
+ public static final int EM_INSIDE_OBJECT_ROD = 9; // 杠子
+ public static final int EM_INSIDE_OBJECT_METAL = 10; // 金属
+ public static final int EM_INSIDE_OBJECT_EXPLOSIVE = 11; // 爆炸物
+ public static final int EM_INSIDE_OBJECT_CONTAINERSPRAY = 12; // 喷雾喷灌
+ public static final int EM_INSIDE_OBJECT_EXPLOSIVE_FIREWORKS = 13; // 烟花爆竹
+ public static final int EM_INSIDE_OBJECT_LIGHTER = 14; // 打火机
+ public static final int EM_INSIDE_OBJECT_STICK = 15; // 警棍
+ public static final int EM_INSIDE_OBJECT_BRASSKNUCKLE = 16; // 指虎
+ public static final int EM_INSIDE_OBJECT_HANDCUFFS = 17; // 手铐
+ public static final int EM_INSIDE_OBJECT_IVORY = 18; // 象牙
+ public static final int EM_INSIDE_OBJECT_BOOK = 19; // 书籍
+ public static final int EM_INSIDE_OBJECT_CD = 20; // 光盘
+ public static final int EM_INSIDE_OBJECT_HAMMERS = 21; // 锤子
+ public static final int EM_INSIDE_OBJECT_PLIERS = 22; // 钳子
+ public static final int EM_INSIDE_OBJECT_AXE = 23; // 斧头
+ public static final int EM_INSIDE_OBJECT_SCREW_DRIVER = 24; // 螺丝刀
+ public static final int EM_INSIDE_OBJECT_WRENCH = 25; // 扳手
+ public static final int EM_INSIDE_OBJECT_ELECTRIC_SHOCK_STICK = 26; // 电击棍
+ public static final int EM_INSIDE_OBJECT_THERMOS = 27; // 保温杯
+ public static final int EM_INSIDE_OBJECT_GLASS_BOTTLES = 28; // 玻璃杯
+ public static final int EM_INSIDE_OBJECT_PLASTIC_BOTTLE = 29; // 塑料瓶
+ public static final int EM_INSIDE_OBJECT_IGNITION_OIL = 30; // 打火机油
+ public static final int EM_INSIDE_OBJECT_NAIL_POLISH = 31; // 指甲油
+ public static final int EM_INSIDE_OBJECT_BLUNT_INSTRUMENT = 32; // 工具
+ public static final int EM_INSIDE_OBJECT_SCISSORS = 33; // 剪刀
+ public static final int EM_INSIDE_OBJECT_ELECTRONIC = 34; // 电子产品
+ public static final int EM_INSIDE_OBJECT_PISTOL = 35; // 手枪
+ public static final int EM_INSIDE_OBJECT_FOLDINGKNIFE = 36; // 折叠刀
+ public static final int EM_INSIDE_OBJECT_SHARPKNIFE = 37; // 尖刀
+ public static final int EM_INSIDE_OBJECT_KITCHENKNIFE = 38; // 菜刀
+ public static final int EM_INSIDE_OBJECT_UTILITYKNIFE = 39; // 美工刀
+ public static final int EM_INSIDE_OBJECT_FIREWORKS = 40; // 烟花
+ public static final int EM_INSIDE_OBJECT_FIRECRACKER = 41; // 爆竹
+ } ;
+
+ // 危险等级
+ public static class EM_DANGER_GRADE_TYPE extends SdkStructure
+ {
+ public static final int EM_DANGER_GRADE_UNKNOWN = -1; // 未知
+ public static final int EM_DANGER_GRADE_NORMAL=0; // 普通级别
+ public static final int EM_DANGER_GRADE_WARN=1; // 警示级别
+ public static final int EM_DANGER_GRADE_DANGER=2; // 危险级别
+ } ;
+
+
+ // CLIENT_StartFindXRayPkg 接口输入参数
+ public static class NET_IN_START_FIND_XRAY_PKG extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int emTimeOrder; // 查询结果按时间排序
+ public NET_TIME stuStartTime; // 查询的开始时间
+ public NET_TIME stuEndTime; // 查询的结束时间
+ public int[] nSimilarityRange=new int[2]; // 相似度范围,下标0:表示最小值, 下标1:表示最大值
+ public int nObjTypeNum; // 物体类型的数量
+ public int[] emObjType=new int[32]; // 物品类型,参考枚举EM_INSIDE_OBJECT_TYPE
+ public int nObjTypeCount; // 自定义物体类型的数量
+ public NET_XRAY_INSIDE_ONJECT_TYPE[] stuObjType=(NET_XRAY_INSIDE_ONJECT_TYPE[]) new NET_XRAY_INSIDE_ONJECT_TYPE().toArray(32); // 自定义物品类型
+ public NET_IN_START_FIND_XRAY_PKG()
+ {
+ this.dwSize = this.size();
+ }
+ } ;
+ // X光机物体信息
+ public static class NET_PKG_OBJECT_INFO extends SdkStructure
+ {
+ public int emObjType; // 物品类型
+ public int emDangerGrade; // 物品危险等级
+ public int nSimilarity; // 相似度,0~100
+ public byte[] byReserved=new byte[132]; // 保留字节
+ };
+
+ // CLIENT_StartFindXRayPkg 接口输出参数
+ public static class NET_OUT_START_FIND_XRAY_PIC extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nTotal; // 包裹总数
+ public NET_OUT_START_FIND_XRAY_PIC()
+ {
+ this.dwSize = this.size();
+ }
+ } ;
+
+ // CLIENT_DoFindXRayPkg 接口输入参数
+ public static class NET_IN_DO_FIND_XRAY_PKG extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nOffset; // 查询偏移
+ public int nCount; // 需要查找的数目
+ public NET_IN_DO_FIND_XRAY_PKG()
+ {
+ this.dwSize = this.size();
+ }
+ };
+
+ // 视角信息数
+ public static class NET_PKG_VIEW_INFO extends SdkStructure
+ {
+ public int emViewType; // 视图类型
+ public int nEnergyImageLength; // 能量图大小 单位字节
+ public byte[] szEnergyImagePath=new byte[128]; // 能量图绝对路径
+ public int nColorImageLength; // 彩图大小单位字节
+ public byte[] szColorImagePath=new byte[128]; // 彩图绝对路径
+ public int nColorOverlayImageLength; // 彩图叠加图大小单位字节
+ public byte[] szColorOverlayImagePath=new byte[128]; // 彩图叠加图绝对路径
+ public NET_PKG_OBJECT_INFO[] stuObject=new NET_PKG_OBJECT_INFO[32]; // 物体数组
+ public int nObjectCount; // 物体数量
+ public byte[] byReserved=new byte[1024]; // 保留字节
+ } ;
+ // X光机的包裹信息
+ public static class NET_XRAY_PKG_INFO extends SdkStructure
+ {
+ public NET_TIME stuTime; // 包裹产生时间(含时区)
+ public int nChannelIn; // 关联的进口IPC通道号,从0开始,-1表示无效
+ public int nChannelOut; // 关联的出口IPC通道号,从0开始,-1表示无效
+ public byte[] szUser=new byte[128]; // 用户名
+ public NET_PKG_VIEW_INFO[] stuViewInfo= new NET_PKG_VIEW_INFO[2]; // 视角信息数组
+ public byte[] byReserved=new byte[1024]; // 保留字节
+
+ public NET_XRAY_PKG_INFO() {
+ for (int i = 0; i < stuViewInfo.length; i ++) {
+ stuViewInfo[i] = new NET_PKG_VIEW_INFO();
+ }
+ }
+ };
+
+ // CLIENT_DoFindXRayPkg 接口输出参数
+ public static class NET_OUT_DO_FIND_XRAY_PKG extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nMaxCount; // 用户指定分配结构体个数,需大于等于NET_IN_DO_FIND_XRAY_PKG的nCount
+ public int nRetCount; // 实际返回的查询数量
+ public Pointer pstuXRayPkgInfo; // X光机的包裹信息,缓存大小由用户指定
+ public NET_OUT_DO_FIND_XRAY_PKG()
+ {
+ this.dwSize = this.size();
+ }
+ }
+ //事件类型 EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING(车位有车事件)对应的规则配置
+ public static class CFG_TRAFFIC_PARKINGSPACEPARKING_INFO extends SdkStructure
+ {
+ public byte[] szRuleName=new byte[MAX_NAME_LEN]; // 规则名称,不同规则不能重名
+ public byte bRuleEnable; // 规则使能
+ public byte[] bReserved=new byte[3]; // 保留字段
+ public int nObjectTypeNum; // 相应物体类型个数
+ public byte[] szObjectTypes=new byte[MAX_OBJECT_LIST_SIZE*MAX_NAME_LEN]; // 相应物体类型列表
+ public int nPtzPresetId; // 云台预置点编号 0~65535
+ public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动
+ // public CFG_TIME_SECTION[] stuTimeSection=new CFG_TIME_SECTION[WEEK_DAY_NUM*MAX_REC_TSECT_EX]; // 事件响应时间段
+ public CFG_TIME_SECTION[] stuTimeSection =
+ (CFG_TIME_SECTION[])new CFG_TIME_SECTION().toArray(WEEK_DAY_NUM*MAX_REC_TSECT_EX); // 事件响应时间段
+ public int nLane; // 车位号
+ public int nDelayTime; // 检测到报警发生到开始上报的时间, 单位:秒,范围1~65535
+ public int nDetectRegionPoint; // 检测区域顶点数
+ public CFG_POLYGON[] stuDetectRegion=(CFG_POLYGON[]) new CFG_POLYGON().toArray(MAX_POLYGON_NUM); // 检测区域
+ public int nPlateSensitivity; // 有牌检测灵敏度(控制抓拍)
+ public int nNoPlateSensitivity; // 无牌检测灵敏度(控制抓拍)
+ public int nLightPlateSensitivity; // 有牌检测灵敏度(控制车位状态灯)
+ public int nLightNoPlateSensitivity; // 无牌检测灵敏度(控制车位状态灯)
+ public boolean bForbidParkingEnable; // 禁止停车使能 TRUE:禁止 FALSE:未禁止
+ };
+
+ //事件类型 EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING(车位无车事件)对应的规则配置
+ public static class CFG_TRAFFIC_PARKINGSPACENOPARKING_INFO extends SdkStructure
+ {
+ public byte[] szRuleName=new byte[MAX_NAME_LEN]; // 规则名称,不同规则不能重名
+ public byte bRuleEnable; // 规则使能
+ public byte[] bReserved=new byte[3]; // 保留字段
+ public int nObjectTypeNum; // 相应物体类型个数
+ public byte[] szObjectTypes=new byte[MAX_OBJECT_LIST_SIZE*MAX_NAME_LEN]; // 相应物体类型列表
+ public int nPtzPresetId; // 云台预置点编号 0~65535
+ public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动
+ public CFG_TIME_SECTION[] stuTimeSection =
+ (CFG_TIME_SECTION[])new CFG_TIME_SECTION().toArray(WEEK_DAY_NUM*MAX_REC_TSECT_EX); // 事件响应时间段
+
+ public int nLane; // 车位号
+ public int nDelayTime; // 检测到报警发生到开始上报的时间, 单位:秒,范围1~65535
+ public int nDetectRegionPoint; // 检测区域顶点数
+ public CFG_POLYGON[] stuDetectRegion=(CFG_POLYGON[]) new CFG_POLYGON().toArray(MAX_POLYGON_NUM); // 检测区域
+ public int nPlateSensitivity; // 有牌检测灵敏度(控制抓拍)
+ public int nNoPlateSensitivity; // 无牌检测灵敏度(控制抓拍)
+ public int nLightPlateSensitivity; // 有牌检测灵敏度(控制车位状态灯)
+ public int nLightNoPlateSensitivity; // 无牌检测灵敏度(控制车位状态灯)
+ };
+ // 事件类型 EVENT_IVS_CITY_MOTORPARKING (城市机动车违停事件) 对应的数据块描述信息
+ public static class DEV_EVENT_CITY_MOTORPARKING_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public byte[] szName=new byte[128]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC = new NET_TIME_EX(); // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_EVENT_FILE_INFO stuFileInfo = new NET_EVENT_FILE_INFO(); // 事件对应文件信息
+ public int nObjectNum; // 检测到的物体个数
+ public NET_MSG_OBJECT[] stuObjects=new NET_MSG_OBJECT[NET_MAX_OBJECT_NUM]; // 检测到的物体
+ public int nDetectRegionNum; // 检测区域顶点数
+ public NET_POINT[] DetectRegion=new NET_POINT[NET_MAX_DETECT_REGION_NUM]; // 检测区域
+ public byte[] szPresetName=new byte[64]; // 事件触发的预置名称
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo = new EVENT_INTELLI_COMM_INFO(); // 智能事件公共信息
+ public int nParkingDuration; // 违停持续时长,单位:秒 缺省值0表示无意义
+ public byte[] szSourceID=new byte[32]; // 事件关联ID,同一个物体或图片生成多个事件时SourceID相同
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public int bPtzPosition; // stuPtzPosition 是否有效
+ public PTZ_NORMALIZED_POSITION_UNIT stuPtzPosition = new PTZ_NORMALIZED_POSITION_UNIT(); // 云台信息
+ public int emMotorStatus; // 车辆状态,{@link EM_CITYMOTOR_STATUS}
+ public SCENE_IMAGE_INFO stuSceneImage = new SCENE_IMAGE_INFO(); // 全景广角图信息
+ public int emPreAlarm; // 是否为违规预警图片(预警触发后一定时间,违规物体还没有离开,才判定为违规),参考EM_PREALARM
+ public Pointer pstuImageInfo; //图片信息数组,NET_IMAGE_INFO_EX2的数组
+ public int nImageInfoNum; //图片信息个数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte byVehicleHeadDirection; // 车头朝向 0-未知,1-正面,2-侧面,3-背面
+ public byte[] byReserved = new byte[1011]; //预留字节
+ public DEV_EVENT_CITY_MOTORPARKING_INFO() {
+ for (int i = 0; i < stuObjects.length; i++) {
+ stuObjects[i] = new NET_MSG_OBJECT();
+ }
+ for (int i = 0; i < DetectRegion.length; i++) {
+ DetectRegion[i] = new NET_POINT();
+ }
+ }
+ };
+ // 事件类型 EVENT_IVS_CITY_NONMOTORPARKING (城市非机动车违停事件) 对应的数据块描述信息
+ public static class DEV_EVENT_CITY_NONMOTORPARKING_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public byte[] szName=new byte[128]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nDetectRegionNum; // 检测区域顶点数
+ public NET_POINT[] DetectRegion=new NET_POINT[NET_MAX_DETECT_REGION_NUM]; // 检测区域
+ public int nAlarmNum; // 报警阈值
+ public int nNoMotorNum; // 非机动车的个数
+ public byte[] szPresetName=new byte[64]; // 事件触发的预置名称
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public int nViolationDuration; // 违法持续时长,单位:秒 缺省值0表示无意义
+ public int nObjectNum; // 检测到的物体个数
+ public NET_MSG_OBJECT[] stuObjects=new NET_MSG_OBJECT[HDBJ_MAX_OBJECTS_NUM]; // 检测到的物体
+ public byte[] szSourceID=new byte[32]; // 事件关联ID,同一个物体或图片生成多个事件时SourceID相同
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public SCENE_IMAGE_INFO stuSceneImage; // 全景广角图
+ public Pointer pstuImageInfo; // 图片信息数组 ,结构体NET_IMAGE_INFO_EX2数组指针
+ public int nImageInfoNum; // 图片信息个数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] byReserved=new byte[892]; // 保留字节
+ };
+ // 事件类型 EVENT_IVS_HOLD_UMBRELLA (违规撑伞检测事件) 对应的数据块描述信息
+ public static class DEV_EVENT_HOLD_UMBRELLA_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public byte[] szName=new byte[128]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public NET_POINT[] DetectRegion=new NET_POINT[NET_MAX_DETECT_REGION_NUM]; // 规则检测区域
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public NET_MSG_OBJECT[] stuObjects=new NET_MSG_OBJECT[HDBJ_MAX_OBJECTS_NUM]; // 检测到的物体
+ public int nObjectNum; // 检测到的物体个数
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public byte[] szPresetName=new byte[64]; // 事件触发的预置名称
+ public int nViolationDuration; // 违法持续时长,单位:秒 缺省值0表示无意义
+ public byte[] szSourceID=new byte[32]; // 事件关联ID,同一个物体或图片生成多个事件时SourceID相同
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public byte[] bReserved=new byte[4092]; // 保留字节,留待扩展.
+ };
+ // 事件类型 EVENT_IVS_GARBAGE_EXPOSURE (垃圾暴露检测事件) 对应的数据块描述信息
+ public static class DEV_EVENT_GARBAGE_EXPOSURE_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public byte[] szName=new byte[128]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public NET_POINT[] DetectRegion=new NET_POINT[NET_MAX_DETECT_REGION_NUM]; // 规则检测区域
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public NET_MSG_OBJECT[] stuObjects=new NET_MSG_OBJECT[HDBJ_MAX_OBJECTS_NUM]; // 检测到的物体
+ public int nObjectNum; // 检测到的物体个数
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public byte[] szPresetName=new byte[64]; // 事件触发的预置名称
+ public int nViolationDuration; // 违法持续时长,单位:秒 缺省值0表示无意义
+ public byte[] szSourceID=new byte[32]; // 事件关联ID,同一个物体或图片生成多个事件时SourceID相同
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public Pointer pstuImageInfo; // 图片信息数组,指针对应NET_IMAGE_INFO_EX2的数组
+ public int nImageInfoNum; // 图片信息个数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx =new NET_EVENT_INFO_EXTEND();// 事件公共扩展字段结构体
+ public byte[] bReserved=new byte[3016]; // 保留字节,留待扩展.
+ } ;
+ // 事件类型 EVENT_IVS_DUSTBIN_OVER_FLOW (垃圾桶满溢检测事件) 对应的数据块描述信息
+ public static class DEV_EVENT_DUSTBIN_OVER_FLOW_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public byte[] szName=new byte[128]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public NET_POINT[] DetectRegion=new NET_POINT[NET_MAX_DETECT_REGION_NUM]; // 规则检测区域
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public NET_MSG_OBJECT[] stuObjects=new NET_MSG_OBJECT[HDBJ_MAX_OBJECTS_NUM]; // 检测到的物体
+ public int nObjectNum; // 检测到的物体个数
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public byte[] szPresetName=new byte[64]; // 事件触发的预置名称
+ public int nViolationDuration; // 违法持续时长,单位:秒 缺省值0表示无意义
+ public byte[] szSourceID=new byte[32]; // 事件关联ID,同一个物体或图片生成多个事件时SourceID相同
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public byte[] bReserved=new byte[4092]; // 保留字节,留待扩展.
+ } ;
+ // 事件类型 EVENT_IVS_DOOR_FRONT_DIRTY (门前脏乱检测事件) 对应的数据块描述信息
+ public static class DEV_EVENT_DOOR_FRONT_DIRTY_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public byte[] szName=new byte[128]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public NET_POINT[] DetectRegion=new NET_POINT[NET_MAX_DETECT_REGION_NUM]; // 规则检测区域
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public NET_MSG_OBJECT[] stuObjects=new NET_MSG_OBJECT[HDBJ_MAX_OBJECTS_NUM]; // 检测到的物体
+ public int nObjectNum; // 检测到的物体个数
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public byte[] szPresetName=new byte[64]; // 事件触发的预置名称
+ public byte[] szShopAddress=new byte[256]; // 商铺地址名称
+ public int nViolationDuration; // 违法持续时长,单位:秒,缺省值0表示无意义
+ public byte[] szSourceID=new byte[32]; // 事件关联ID,同一个物体或图片生成多个事件时SourceID相同
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public byte[] bReserved=new byte[4092]; // 保留字节,留待扩展.
+ } ;
+
+ // CLIENT_StartRemoteUpgrade-输入参数
+ public static class NET_IN_START_REMOTE_UPGRADE_INFO extends SdkStructure
+ {
+ public int dwSize; // 此结构体大小
+ public int nListNum; // 需要升级的远程通道个数
+ public Pointer pstuList; // 需要升级的远程通道信息
+ public Pointer pReserved; // 字节对齐
+ public byte[] szFileName=new byte[256]; // 升级文件名称
+ public Callback cbRemoteUpgrade; // 升级进度回调函数
+ public Pointer dwUser; // 用户数据
+ public int nPacketSize; // 每次分包发送大小,为0默认为16K
+
+ public NET_IN_START_REMOTE_UPGRADE_INFO()
+ {
+ this.dwSize = this.size();
+ }
+ };
+
+ // CLIENT_StartRemoteUpgrade-输出参数
+ public static class NET_OUT_START_REMOTE_UPGRADE_INFO extends SdkStructure
+ {
+ public int dwSize;
+
+ public NET_OUT_START_REMOTE_UPGRADE_INFO()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ };
+
+ // CLIENT_AttachRemoteUpgradeState-输入参数
+ public static class NET_IN_ATTACH_REMOTEUPGRADE_STATE extends SdkStructure
+ {
+ public int dwSize; // 此结构体大小
+ public Callback cbCallback; // 回调
+ public Pointer dwUser; // 用户数据
+
+ public NET_IN_ATTACH_REMOTEUPGRADE_STATE()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ };
+
+ // CLIENT_AttachRemoteUpgradeState-输出参数
+ public static class NET_OUT_ATTACH_REMOTEUPGRADE_STATE extends SdkStructure
+ {
+ public int dwSize; // 此结构体大小
+
+ public NET_OUT_ATTACH_REMOTEUPGRADE_STATE()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ };
+
+ // 远程通道信息
+ public static class NET_REMOTE_UPGRADE_CHNL_INFO extends SdkStructure
+ {
+ public int nChannel; // 远程通道号
+ public byte[] byReserved=new byte[512]; // 预留字段
+ };
+
+ // 升级远程设备程序回调函数
+ public interface fRemoteUpgradeCallBack extends StdCallCallback{
+ public void invoke(LLong lLoginID, LLong lUpgradeID, int emState, int nParam1, int nParam2, Pointer dwUser);
+ }
+
+ // 远程升级回调类型
+ public static class EM_REMOTE_UPGRADE_CB_TYPE extends SdkStructure
+ {
+ public static final int EM_REMOTE_UPGRADE_CB_TYPE_APPENDING=1; // 推送回调 nParam1 文件总大小 nParam2 已发送大小
+ public static final int EM_REMOTE_UPGRADE_CB_TYPE_EXECUTE=2; // 执行回调 nParam1 执行execute的结果
+ public static final int EM_REMOTE_UPGRADE_CB_TYPE_FAILED=3; // 失败回调 nParam1 错误码
+ public static final int EM_REMOTE_UPGRADE_CB_TYPE_CANCEL=4; // 取消回调
+ };
+
+ // 升级状态回调函数
+ public interface fRemoteUpgraderStateCallback extends StdCallCallback{
+ public void invoke(LLong lLoginId, LLong lAttachHandle, NET_REMOTE_UPGRADER_NOTIFY_INFO pBuf, int dwBufLen, Pointer pReserved, Pointer dwUser);
+ }
+
+ // 远程设备升级消息上报
+ public static class NET_REMOTE_UPGRADER_NOTIFY_INFO extends SdkStructure
+ {
+ public int nStateNum; // 状态数
+ public Pointer pstuStates; // 状态列表
+ public byte[] byReserved=new byte[1024]; // 预留
+ };
+
+ // 远程设备升级状态
+ public static class NET_REMOTE_UPGRADER_STATE extends SdkStructure
+ {
+ public int nChannel; // 通道号
+ public int emState; // 状态(对应的枚举值EM_REMOTE_UPGRADE_STATE)
+ public int nProgress; // 进度
+ public byte[] szDeviceID=new byte[128]; // 远程设备ID
+ };
+
+ // 远程设备升级状态
+ public static class EM_REMOTE_UPGRADE_STATE extends SdkStructure
+ {
+ public static final int EM_REMOTE_UPGRADE_STATE_UNKNOWN=0; // 未知
+ public static final int EM_REMOTE_UPGRADE_STATE_INIT=1; // 初始状态(未升级)
+ public static final int EM_REMOTE_UPGRADE_STATE_DOWNLOADING=2; // 正在下载数据
+ public static final int EM_REMOTE_UPGRADE_STATE_UPGRADING=3; // 正在升级
+ public static final int EM_REMOTE_UPGRADE_STATE_FAILED=4; // 升级失败
+ public static final int EM_REMOTE_UPGRADE_STATE_SUCCEEDED=5; // 升级成功
+ public static final int EM_REMOTE_UPGRADE_STATE_CANCELLED=6; // 取消升级
+ public static final int EM_REMOTE_UPGRADE_STATE_PREPARING=7; // 准备升级中
+ };
+
+ //开始升级远程设备程序
+ public LLong CLIENT_StartRemoteUpgrade(LLong lLoginID, NET_IN_START_REMOTE_UPGRADE_INFO pInParam, NET_OUT_START_REMOTE_UPGRADE_INFO pOutParam, int nWaitTime);
+
+ //结束升级远程设备程序
+ public Boolean CLIENT_StopRemoteUpgrade(LLong lUpgradeID);
+
+ // 订阅ipc升级状态观察接口
+ public LLong CLIENT_AttachRemoteUpgradeState(LLong lLoginID, NET_IN_ATTACH_REMOTEUPGRADE_STATE pInParam, NET_OUT_ATTACH_REMOTEUPGRADE_STATE pOutParam, int nWaitTime);
+
+ // 取消订阅升级状态接口
+ public Boolean CLIENT_DetachRemoteUpgradeState(LLong lAttachHandle);
+
+ // 设置子连接网络参数, pSubConnectNetParam 资源由用户申请和释放
+ public Boolean CLIENT_SetSubConnectNetworkParam(LLong lLoginID, NET_SUBCONNECT_NETPARAM pSubConnectNetParam);
+
+ // 设置子链接网络参数
+ public static class NET_SUBCONNECT_NETPARAM extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nNetPort; // 网络映射端口号
+ public byte[] szNetIP=new byte[NET_MAX_IPADDR_EX_LEN]; // 网络映射IP地址
+ public NET_SUBCONNECT_NETPARAM()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ };
+ public static class EM_ANALYSE_TASK_START_RULE extends SdkStructure
+ {
+ public static final int EM_ANALYSE_TASK_START_NOW=0; // 立刻启动
+ public static final int EM_ANALYSE_TASK_START_LATER=1; // 稍候手动启动
+ };
+
+ // 视频分析支持的对象类型
+ public static class EM_ANALYSE_OBJECT_TYPE extends SdkStructure
+ {
+ public static final int EM_ANALYSE_OBJECT_TYPE_UNKNOWN=0; // 未知的
+ public static final int EM_ANALYSE_OBJECT_TYPE_HUMAN=1; // 人
+ public static final int EM_ANALYSE_OBJECT_TYPE_VEHICLE=2; // 车辆
+ public static final int EM_ANALYSE_OBJECT_TYPE_FIRE=3; // 火
+ public static final int EM_ANALYSE_OBJECT_TYPE_SMOKE=4; // 烟雾
+ public static final int EM_ANALYSE_OBJECT_TYPE_PLATE=5; // 片状物体
+ public static final int EM_ANALYSE_OBJECT_TYPE_HUMANFACE=6; // 人脸
+ public static final int EM_ANALYSE_OBJECT_TYPE_CONTAINER=7; // 货柜
+ public static final int EM_ANALYSE_OBJECT_TYPE_ANIMAL=8; // 动物
+ public static final int EM_ANALYSE_OBJECT_TYPE_TRAFFICLIGHT=9; // 红绿灯
+ public static final int EM_ANALYSE_OBJECT_TYPE_PASTEPAPER=10; // 贴纸 贴片
+ public static final int EM_ANALYSE_OBJECT_TYPE_HUMANHEAD=11; // 人的头部
+ public static final int EM_ANALYSE_OBJECT_TYPE_ENTITY=12; // 普通物体
+ };
+
+ // 事件类型 EVENT_IVS_SMART_KITCHEN_CLOTHES_DETECTION(智慧厨房穿着检测事件)对应的数据块描述信息
+ public static class DEV_EVENT_SMART_KITCHEN_CLOTHES_DETECTION_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public byte[] szName=new byte[128]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nRuleID; // 用于
+ public int emClassType; // 智能事件所属大类
+ public byte[] szClassAlias=new byte[16]; // 智能事件所属大类别名
+ public HUMAN_IMAGE_INFO stuHumanImage; // 人体图片信息
+ public SCENE_IMAGE_INFO stuSceneImage; // 全景广角图片信息
+ public FACE_IMAGE_INFO stuFaceImage; // 人脸图片信息
+ public int nObjectID; // 目标ID
+ public int emHasMask; // 检测是否有戴口罩(对应枚举值EM_NONMOTOR_OBJECT_STATUS)
+ public int emHasChefHat; // 检测是否有戴厨师帽(对应枚举值EM_NONMOTOR_OBJECT_STATUS)
+ public int emHasChefClothes; // 检测是否有穿厨师服(对应枚举值EM_NONMOTOR_OBJECT_STATUS)
+ public int emChefClothesColor; // 厨师服颜色(对应枚举值EM_OBJECT_COLOR_TYPE)
+ public NET_IMAGE_INFO_EX2 stuImageInfo[] = (NET_IMAGE_INFO_EX2[])new NET_IMAGE_INFO_EX2().toArray(32); //图片信息数组
+ public int nImageInfoNum; //图片信息个数
+ public byte bReserved[] = new byte[1024]; //预留字节
+ };
+
+
+ // 事件类型EVENT_IVS_BANNER_DETECTION(拉横幅事件)对应数据块描述信息
+ public static class DEV_EVENT_BANNER_DETECTION_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nEventID; // 事件ID
+ public byte[] szName=new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nAction; // 1:开始 2:停止
+
+ public int emClassType; // 智能事件所属大类(对应EM_CLASS_TYPE枚举)
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public int nObjectNum; // 检测到的物体个数
+ public NET_MSG_OBJECT [] stuObjects=new NET_MSG_OBJECT[32]; // 检测到的物体
+ public int nDetectRegionNum; // 检测区域顶点数
+ public NET_POINT [] DetectRegion=new NET_POINT[NET_MAX_DETECT_REGION_NUM]; // 检测区域
+ public int nCount; // 事件触发次数
+ public int nPresetID; // 预置点
+ public NET_EXTENSION_INFO stuExtensionInfo; // 扩展信息
+ public byte[] byReserved=new byte[1028]; // 保留字节,留待扩展.
+ } ;
+
+ // 事件类型EVENT_IVS_BANNER_DETECTION(拉横幅检测事件)对应的规则配置
+ public static class NET_BANNER_DETECTION_RULE_INFO extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nDetectRegionPoint; // 检测区顶点数
+ public POINTCOORDINATE [] stuDetectRegion=new POINTCOORDINATE[20]; // 检测区域
+
+ public int nMinDuration; // 最短持续时间, 单位:秒,范围1-600, 默认30
+ public int nReportInterval; // 重复报警间隔,单位:秒,范围0-600,默认30,为0表示不重复
+ public int nSensitivity; // 检测灵敏度,范围1-10
+ public int nBannerPercent; // 近景抓拍时横幅在画面的百分比,范围1~100,默认80
+ public byte[] bReserved=new byte[520]; // 保留字节
+
+ public NET_BANNER_DETECTION_RULE_INFO()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ };
+
+
+ public static class POINTCOORDINATE extends SdkStructure
+ {
+ public int nX; // 第一个元素表示景物点的x坐标(0~8191)
+ public int nY; // 第二个元素表示景物点的y坐标(0~8191)
+ } ;
+
+ // 事件类型 EVENT_IVS_SMART_KITCHEN_CLOTHES_DETECTION(智慧类型衣着检测)对应的规则配置
+ public static class NET_SMART_KITCHEN_CLOTHES_DETECTION_RULE_INFO extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int bMaskEnable; // 是否开启口罩检测 (TRUE:开启 FALSE:关闭)
+ public int bChefHatEnable; // 是否开启厨师帽检测(TRUE:开启 FALSE:关闭)
+ public int bChefClothesEnable; // 是否开启厨师服检测(TRUE:开启 FALSE:关闭)
+ public int nChefClothesColorNum; // 配置检查允许的厨师服颜色个数
+ public int [] emChefClothesColors=new int[8]; // 厨师衣服颜色(对应的枚举值EM_CFG_CHEF_CLOTHES_COLORS)
+ public int nReportInterval; // 重复报警间隔,单位:秒,范围0-600,默认30,为0表示不重复
+ public byte[] byReserved=new byte[4096]; // 保留字节
+
+ public NET_SMART_KITCHEN_CLOTHES_DETECTION_RULE_INFO()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ };
+
+ // 智能分析规则信息
+ public static class NET_ANALYSE_RULE_INFO extends SdkStructure
+ {
+ public int emClassType; // 分析大类类型(对应的枚举值EM_SCENE_CLASS_TYPE)
+ public int dwRuleType; // 规则类型, 详见dhnetsdk.h中"智能分析事件类型"
+ // EVENT_IVS_FACEANALYSIS(人脸分析)对应结构体 NET_FACEANALYSIS_RULE_INFO
+ // EVENT_IVS_NONMOTORDETECT(非机动车)对应结构体 NET_NONMOTORDETECT_RULE_INFO
+ // EVENT_IVS_VEHICLEDETECT(机动车) 对应结构体 NET_VEHICLEDETECT_RULE_INFO
+ // EVENT_IVS_HUMANTRAIT(人体) 对应结构体NET_HUMANTRAIT_RULE_INFO
+ // EVENT_IVS_XRAY_DETECT_BYOBJECT(X光按物体检测) 对应结构体 NET_XRAY_DETECT_BYPBJECT_RULE_INFO
+ // EVENT_IVS_WORKCLOTHES_DETECT(工装检测)对应结构体NET_WORKCLOTHDETECT_RULE_INFO
+ // EVENT_IVS_WORKSTATDETECTION(作业统计)对应结构体NET_WORKSTATDETECTION_RULE_INFO
+ // EVENT_IVS_CROSSLINEDETECTION(警戒线)对应结构体NET_CROSSLINE_RULE_INFO
+ // EVENT_IVS_CROSSREGIONDETECTION(警戒区)对应结构体 NET_CROSSREGION_RULE_INFO
+ // EVENT_IVS_FEATURE_ABSTRACT(特征提取)对应结构体 NET_FEATURE_ABSTRACT_RULE_INFO
+ // EVENT_IVS_ELECTRIC_GLOVE_DETECT(电力检测手套检测事件)对应结构体NET_ELECTRIC_GLOVE_DETECT_RULE_INFO
+ // EVENT_IVS_ELECTRIC_LADDER_DETECT(电力检测梯子检测事件)对应结构体NET_ELECTRIC_LADDER_DETECT_RULE_INFO
+ // EVENT_IVS_ELECTRIC_CURTAIN_DETECT(电力检测布幔检测事件)对应结构体NET_ELECTRIC_CURTAIN_DETECT_RULE_INFO
+ // EVENT_IVS_ELECTRIC_FENCE_DETECT(电力检测围栏检测事件)对应结构体NET_ELECTRIC_FENCE_DETECT_RULE_INFO
+ // EVENT_IVS_ELECTRIC_SIGNBOARD_DETECT(电力检测标识牌检测事件)对应结构体NET_ELECTRIC_SIGNBOARD_DETECT_RULE_INFO
+ // EVENT_IVS_ELECTRIC_BELT_DETECT(电力检测安全带检测事件)对应结构体NET_ELECTRIC_BELT_DETECT_RULE_INFO
+ // EVENT_IVS_BANNER_DETECTION(拉横幅检测事件)对应结构体NET_BANNER_DETECTION_RULE_INFO
+ // EVENT_IVS_SMART_KITCHEN_CLOTHES_DETECTION(智慧厨房衣着检测事件)对应结构体NET_SMART_KITCHEN_CLOTHES_DETECTION_RULE_INFO
+ // EVENT_IVS_WATER_STAGE_MONITOR(水位检测事件)对应结构体NET_WATER_STAGE_MONITOR_RULE_INFO
+ // EVENT_IVS_FLOATINGOBJECT_DETECTION(漂浮物检测事件)对应结构体 NET_FLOATINGOBJECT_DETECTION_RULE_INFO
+ // EVENT_IVS_RIOTERDETECTION (人群聚集) 对应结构体 NET_RIOTERDETECTION_RULE_INFO
+ // EVENT_IVS_LEFTDETECTION (物品遗留事件) 对应结构体 NET_LEFTDETECTION_RULE_INFO
+ // EVENT_IVS_PARKINGDETECTION (非法停车事件) 对应结构体 NET_PARKINGDETECTION_RULE_INFO
+ // EVENT_IVS_WANDERDETECTION( 徘徊事件)对应结构体 NET_WANDERDETECTION_RULE_INFO
+ // EVENT_IVS_VIDEOABNORMALDETECTION (视频异常)对应结构体 NET_VIDEOABNORMALDETECTION_RULE_INFO
+ // EVENT_IVSS_FACEATTRIBUTE (人脸属性检测) 对应结构体 NET_FACEATTRIBUTE_RULE_INFO
+ // EVENT_IVS_MOVEDETECTION (移动检测) 对应结构体 NET_MOVEDETECTION_RULE_INFO
+ // EVENT_IVSS_FACECOMPARE(IVSS目标识别事件) 对应结构体 NET_FACECOMPARE_INFO
+ // EVENT_IVS_CONVEYER_BELT_DETECT(传送带检测) 对应结构体 NET_CONVEYER_BELT_DETECT_RULE_INFO
+ // EVENT_IVS_NUMBERSTAT(数量统计事件) 对应结构体NET_NUMBERSTAT_RULE_INFO
+ // EVENT_IVS_STEREO_FIGHTDETECTION(立体行为分析打架/剧烈运动检测) 对应结构体NET_STEREO_FIGHTDETECTION_RULE_INFO
+ // EVENT_IVS_SMOKEDETECTION(烟雾报警检测) 对应结构体 NET_SMOKEDETECTION_RULE_INFO
+ // EVENT_IVS_FIREDETECTION(火警检测)对应结构体 NET_FIREDETECTION_RULE_INFO
+ // EVENT_IVS_PHONECALL_DETECT(打电话检测)对应结构体 NET_PHONECALL_DETECT_RULE_INFO
+ // EVENT_IVS_SMOKING_DETECT(吸烟检测)对应结构体 NET_SMOKING_DETECT_RULE_INFO
+ // EVENT_IVS_STEREO_STEREOFALLDETECTION(立体行为分析跌倒检测)对应结构体 NET_STEREO_STEREOFALLDETECTION_RULE_INFO
+ // EVENT_IVS_WATER_LEVEL_DETECTION(水位尺检测)对应结构体 NET_WATER_LEVEL_DETECTION_RULE_INFO
+ // EVENT_IVS_CLIMBDETECTION(攀高检测)对应结构体 NET_CLIMBDETECTION_RULE_INFO
+ // EVENT_IVS_ARTICLE_DETECTION(物品检测)对应结构体NET_ARTICLE_DETECTION_RULE_INFO
+ // EVENT_IVS_MAN_NUM_DETECTION(立体视觉区域内人数统计事件)对应结构体NET_IVS_MAN_NUM_DETECTION_RULE_INFO
+ // EVENT_IVS_DIALRECOGNITION(仪表检测事件)对应结构体NET_IVS_DIALRECOGNITION_RULE_INFO
+ // EVENT_IVS_ELECTRICFAULT_DETECT(仪表类缺陷检测事件)对应结构体NET_IVS_ELECTRICFAULT_DETECT_RULE_INFO
+ // EVENT_IVS_TRAFFIC_ROAD_BLOCK(交通路障检测事件) 对应结构体 NET_TRAFFIC_ROAD_BLOCK_RULE_INFO
+ // EVENT_IVS_TRAFFIC_ROAD_CONSTRUCTION(交通道路施工检测事件) 对应结构体 NET_TRAFFIC_ROAD_CONSTRUCTION_RULE_INFO
+ // EVENT_IVS_TRAFFIC_FLOWSTATE(交通流量统计事件) 对应结构体 NET_TRAFFIC_FLOWSTAT_RULE_INFO
+ // EVENT_IVS_TRAFFIC_OVERSPEED(超速事件) 对应结构体 NET_TRAFFIC_OVERSPEED_RULE_INFO
+ // EVENT_IVS_TRAFFIC_UNDERSPEED(欠速事件) 对应结构体 NET_TRAFFIC_UNDERSPEED_RULE_INFO
+ // EVENT_IVS_TRAFFIC_OVERYELLOWLINE(压黄线事件) 对应结构体 NET_TRAFFIC_OVERYELLOWLINE_RULE_INFO
+ // EVENT_IVS_TRAFFIC_CROSSLANE(违章变道事件) 对应结构体 NET_TRAFFIC_CROSSLANE_RULE_INFO
+ // EVENT_IVS_TRAFFICJAM(交通拥堵事件) 对应结构体 NET_TRAFFIC_JAM_RULE_INFO
+ // EVENT_IVS_TRAFFIC_PEDESTRAIN(交通行人事件) 对应结构体 NET_TRAFFIC_PEDESTRAIN_RULE_INFO
+ // EVENT_IVS_TRAFFIC_THROW(抛洒物事件) 对应结构体 NET_TRAFFIC_THROW_RULE_INFO
+ // EVENT_IVS_TRAFFIC_RETROGRADE(逆行检测事件) 对应结构体 NET_TRAFFIC_RETROGRADE_RULE_INFO
+ // EVENT_IVS_TRAFFICACCIDENT(交通事故事件) 对应结构体 NET_TRAFFIC_ACCIDENT_RULE_INFO
+ // EVENT_IVS_TRAFFIC_BACKING(倒车事件) 对应结构体 NET_TRAFFIC_BACKING_RULE_INFO
+ // EVENT_IVS_FOG_DETECTION(起雾检测事件) 对应结构体 NET_FOG_DETECTION_RULE_INFO
+ // EVENT_IVS_CROSSREGIONDETECTION(警戒区事件) 对应结构体 NET_CROSSREGION_RULE_INFO
+ // EVENT_IVS_TRAFFIC_PARKING(交通违章停车事件) 对应结构体 NET_TRAFFIC_PARKING_RULE_INFO
+ // EVENT_IVS_FINANCE_CASH_TRANSACTION(智慧金融现金交易检测事件) 对应结构体 NET_FINANCE_CASH_TRANSACTION_RULE_INFO
+ // EVENT_IVS_LEAVEDETECTION(离岗检测事件) 对应结构体 NET_LEAVEDETECTION_RULE_INFO
+ // EVENT_IVS_LADLE_NO_DETECTION(钢包编号识别事件) 对应规则配置为空
+ // EVENT_IVS_DIALRECOGNITION_EX(仪表检测事件)对应结构体NET_IVS_DIALRECOGNITION_RULE_INFO
+ public Pointer pReserved; // 规则配置, 具体结构体类型根据dwRuleType来确定, 具体信息见dwRuleType的注释
+ public int nObjectTypeNum; // 检测物体类型个数, 为0 表示不指定物体类型
+ public int [] emObjectTypes=new int[16]; // 检测物体类型列表(对应的枚举值EM_ANALYSE_OBJECT_TYPE)
+ public byte[] byReserved=new byte[956]; // 保留字节
+ } ;
+
+
+ // 智能分析规则
+ public static class NET_ANALYSE_RULE extends SdkStructure
+ {
+ public NET_ANALYSE_RULE_INFO [] stuRuleInfos=new NET_ANALYSE_RULE_INFO[MAX_ANALYSE_RULE_COUNT]; // 分析规则信息
+ public int nRuleCount; // 分析规则条数
+ public byte[] byReserved=new byte[1028]; // 保留字节
+
+ public NET_ANALYSE_RULE(){
+
+ for(int i=0;i type, Object value, boolean isFirstElement) {
+ int alignment = super.getNativeAlignment(type, value, isFirstElement);
+ return Math.min(4, alignment);
+ }
+
+ @Override
+ public String toString() {
+ return "DH_MSG_OBJECT{" +
+ "nObjectID=" + nObjectID +
+ ", szObjectType=" + new String(szObjectType) +
+ ", nConfidence=" + nConfidence +
+ ", nAction=" + nAction +
+ ", BoundingBox=" + BoundingBox +
+ ", Center=" + Center +
+ ", nPolygonNum=" + nPolygonNum +
+ ", Contour=" + Arrays.toString(Contour) +
+ ", rgbaMainColor=" + rgbaMainColor +
+ ", szText=" + new String(szText) +
+ ", szObjectSubType=" + new String(szObjectSubType) +
+ ", wColorLogoIndex=" + wColorLogoIndex +
+ ", wSubBrand=" + wSubBrand +
+ ", byReserved1=" + byReserved1 +
+ ", bPicEnble=" + bPicEnble +
+ ", bShotFrame=" + bShotFrame +
+ ", bColor=" + bColor +
+ ", byReserved2=" + byReserved2 +
+ ", byTimeType=" + byTimeType +
+ ", stuCurrentTime=" + stuCurrentTime +
+ ", stuStartTime=" + stuStartTime +
+ ", stuEndTime=" + stuEndTime +
+ ", stuOriginalBoundingBox=" + stuOriginalBoundingBox +
+ ", stuSignBoundingBox=" + stuSignBoundingBox +
+ ", dwCurrentSequence=" + dwCurrentSequence +
+ ", dwBeginSequence=" + dwBeginSequence +
+ ", dwEndSequence=" + dwEndSequence +
+ ", nBeginFileOffset=" + nBeginFileOffset +
+ ", nEndFileOffset=" + nEndFileOffset +
+ ", byColorSimilar=" + new String(byColorSimilar) +
+ ", byUpperBodyColorSimilar=" + new String(byUpperBodyColorSimilar) +
+ ", byLowerBodyColorSimilar=" + new String(byLowerBodyColorSimilar) +
+ ", nRelativeID=" + nRelativeID +
+ ", szSubText=" + new String(szSubText) +
+ ", wBrandYear=" + wBrandYear +
+ '}';
+ }
+ };
+
+ // 事件类型EVENT_IVS_STAYDETECTION(停留事件)对应的数据块描述信息
+ public static class DEV_EVENT_STAY_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName = new byte[128]; // 事件名称
+ public byte[] bReserved1 = new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public DH_MSG_OBJECT stuObject; // 检测到的物体
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved = new byte[2]; // 保留字节
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从 0 开始
+ public int nDetectRegionNum; //较精确的轮廓多边形 // 规则检测区域顶点数
+ public DH_POINT[] DetectRegion = (DH_POINT[])new DH_POINT().toArray(NET_MAX_DETECT_REGION_NUM);// 规则检测区域
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public int nSourceIndex; // 事件源设备上的index,-1表示数据无效
+ public byte[] szSourceDevice = new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ public int nOccurrenceCount; // 事件触发累计次数
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public int nObjectNum; // 检测到的物体个数
+ public DH_MSG_OBJECT[] stuObjectIDs =(DH_MSG_OBJECT[])new DH_MSG_OBJECT().toArray(DH_MAX_OBJECT_NUM); // 检测到的物体
+ public int nAreaID; // 区域ID(一个预置点可以对应多个区域ID)
+ public int bIsCompliant; // 该场景下是否合规
+ public PTZ_PRESET_UNIT stPosition; // 预置点的坐标和放大倍数
+ public int nCurChannelHFOV; // 当前报警通道的横向视场角,单位:度,实际角度乘以100
+ public int nCurChannelVFOV; // 当前报警通道的垂直视场角,单位:度,实际角度乘以100
+ public SCENE_IMAGE_INFO stuSceneImage; // 全景广角图
+ public Pointer pstuImageInfo; // 图片信息数组 ,结构体NET_IMAGE_INFO_EX2数组指针
+ public int nImageInfoNum; // 图片信息个数
+ public NET_LINK_INFO stuLinkInfo; // 联动信息,保存其他设备传输的信息
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] bReserved = new byte[624]; // 保留字节,留待扩展.
+ };
+ /*--------任务结束: T0058223ERR191213010-TASK1 停留事件:DEV_EVENT_STAY_INFO--------*/
+
+
+ /*--------任务开始: ERR191213083-TASK1 发动机数据上报:DH_ALARM_ENGINE_FAILURE_STATUS --------*/
+ // 发动机故障状态
+ public static class EM_ENGINE_FAILURE_STATUS extends SdkStructure
+ {
+ public static final int EM_ENGINE_FAILURE_UNKNOWN = 0; // 未知
+ public static final int EM_ENGINE_FAILURE_NOTACTIVE = 1; // "Not active"
+ public static final int EM_ENGINE_FAILURE_ACTIVE = 2; // "Active"
+ public static final int EM_ENGINE_FAILURE_BLINK = 3; // "Blink"
+ public static final int EM_ENGINE_FAILURE_NOTAVAILABLE = 4; // "Not Available"
+ }
+
+ // 发动机故障状态上报事件( DH_ALARM_ENGINE_FAILURE_STATUS )
+ public static class ALARM_ENGINE_FAILURE_STATUS_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int emStatus; // 发动机故障状态 详见 EM_ENGINE_FAILURE_STATUS
+ public NET_GPS_STATUS_INFO stuGPS; // GPS信息(车载需求)
+ public byte[] byReserved =new byte[1024]; // 保留字节
+ };
+ /*--------任务开始: ERR191213083-TASK1 发动机数据上报:DH_ALARM_ENGINE_FAILURE_STATUS--------*/
+
+
+ /************************************************************************/
+ /*视频上传交通运输部需求 从这往下 */
+ /************************************************************************/
+ // 获取转码虚拟通道号(虚拟通道号用于预览与回放), pInParam 和pOutParam 由用户申请和释放
+ public boolean CLIENT_GetVirtualChannelOfTransCode(LLong lLoginID,
+ NET_IN_GET_VIRTUALCHANNEL_OF_TRANSCODE pInParam, NET_OUT_GET_VIRTUALCHANNEL_OF_TRANSCODE pOutParam, int nWaitTime);
+
+ // 虚拟通道转码策略
+ public static class NET_VIRTUALCHANNEL_POLICY extends SdkStructure
+ {
+ public int bDeleteByCaller; // 是否由用户管理虚拟通道, TRUE:由用户管理 FALSE:由设备管理
+ public int bContinuous; // 是否持续转码
+ public byte[] byReserved=new byte[512]; // 保留字节
+ } ;
+
+ //CLIENT_GetVirtualChannelOfTransCode 接口输入参数
+ public static class NET_IN_GET_VIRTUALCHANNEL_OF_TRANSCODE extends SdkStructure{
+ public int dwSize; // 结构体大小
+ public NET_VIDEO_SOURCE_INFO stuVideoSourceInfo; // 视频源信息
+ public NET_TRANSCODE_VIDEO_FORMAT stuTransVideoFormat; // 转码视频格式
+ public NET_TRANSCODE_AUDIO_FORMAT stuTransAudioFormat; // 转码音频格式
+ public NET_VIRTUALCHANNEL_POLICY stuVirtualChnPolicy; // 虚拟通道转码策略
+ public NET_TRANSCODE_SNAP_FORMAT stuSnapFormat; // 转码抓图格式参数
+ public NET_TRANSCODE_WATER_MARK[] stuWaterMark=(NET_TRANSCODE_WATER_MARK[]) new NET_TRANSCODE_WATER_MARK().toArray(4);// 水印配置
+
+ public NET_IN_GET_VIRTUALCHANNEL_OF_TRANSCODE(){
+ this.dwSize = this.size();
+ }
+ }
+
+ //转码抓图格式参数
+ public static class NET_TRANSCODE_SNAP_FORMAT extends SdkStructure{
+ public int nWidth; // 抓图宽度
+ public int nHeight; // 抓图高度
+ public byte[] byReserved=new byte[128]; // 保留字节
+ }
+ //水印配置
+ public static class NET_TRANSCODE_WATER_MARK extends SdkStructure{
+ public byte[] szText=new byte[256]; // 水印文本信息
+ public byte[] byReserved=new byte[512]; // 保留字节
+ }
+ // 视频源信息
+ public static class NET_VIDEO_SOURCE_INFO extends SdkStructure{
+ public int emProtocolType; // 设备协议类型,枚举值参考EM_DEV_PROTOCOL_TYPE
+ public byte[] szIp = new byte[64]; // 前端设备IP地址
+ public int nPort; // 前端设备端口号
+ public byte[] szUser = new byte[128]; // 前端设备用户名
+ public byte[] szPwd = new byte[128]; // 前端设备密码
+ public int nChannelID; // 前端设备通道号
+ public byte[] szStreamUrl = new byte[256]; // 视频源url地址, emProtocolType为EM_DEV_PROTOCOL_GENERAL 时有效
+ public byte[] byReserved = new byte[512]; // 保留字节
+ }
+ // 设备协议类型
+ public static class EM_DEV_PROTOCOL_TYPE extends SdkStructure
+ {
+ public static final int EM_DEV_PROTOCOL_UNKNOWN = 0; // 未知
+ public static final int EM_DEV_PROTOCOL_V2 = 1; // 私有二代
+ public static final int EM_DEV_PROTOCOL_V3 = 2; // 私有三代
+ public static final int EM_DEV_PROTOCOL_ONVIF = 3; // onvif
+ public static final int EM_DEV_PROTOCOL_GENERAL = 4; // general
+ public static final int EM_DEV_PROTOCOL_GB28181 = 5; // 国标GB28181
+ public static final int EM_DEV_PROTOCOL_EHOME = 6; // ehome 协议
+ public static final int EM_DEV_PROTOCOL_HIKVISION = 7; // 私有协议
+ public static final int EM_DEV_PROTOCOL_BSCP = 8; // 蓝星接入协议
+ }
+
+ // 转码视频格式
+ public static class NET_TRANSCODE_VIDEO_FORMAT extends SdkStructure{
+ public int emCompression; // 视频压缩格式,枚举值参考EM_TRANSCODE_VIDEO_COMPRESSION
+ public int nWidth; // 视频宽度
+ public int nHeight; // 视频高度
+ public int emBitRateControl; // 码流控制模式,枚举值参考NET_EM_BITRATE_CONTROL
+ public int nBitRate; // 视频码流(kbps)
+ public float fFrameRate; // 视频帧率
+ public int nIFrameInterval; // I帧间隔(1-100),比如50表示每49个B帧或P帧,设置一个I帧。
+ public int emImageQuality; // 图像质量,枚举值参考EM_TRANSCODE_IMAGE_QUALITY
+ public byte[] byReserved=new byte[512]; // 保留字节
+ }
+ // 视频压缩格式
+ public static class EM_TRANSCODE_VIDEO_COMPRESSION extends SdkStructure{
+ public static final int EM_TRANSCODE_VIDEO_AUTO = 0; // auto
+ public static final int EM_TRANSCODE_VIDEO_MPEG4 = 1; // MPEG4
+ public static final int EM_TRANSCODE_VIDEO_MPEG2 = 2; // MPEG2
+ public static final int EM_TRANSCODE_VIDEO_MPEG1 = 3; // MPEG1
+ public static final int EM_TRANSCODE_VIDEO_MJPG = 4; // MJPG
+ public static final int EM_TRANSCODE_VIDEO_H263 = 5; // H.263
+ public static final int EM_TRANSCODE_VIDEO_H264 = 6; // H.264
+ public static final int EM_TRANSCODE_VIDEO_H265 = 7; // H.265
+ }
+ // 码流控制模式
+ public static class NET_EM_BITRATE_CONTROL extends SdkStructure{
+ public static final int EM_BITRATE_CBR = 0; // 固定码流
+ public static final int EM_BITRATE_VBR = 1; // 可变码流
+ }
+ // 图像质量
+ public static class EM_TRANSCODE_IMAGE_QUALITY extends SdkStructure{
+ public static final int EM_TRANSCODE_IMAGE_QUALITY_SELFADAPT = 0; // 自适应
+ public static final int EM_TRANSCODE_IMAGE_QUALITY_Q10 = 1; // 10%
+ public static final int EM_TRANSCODE_IMAGE_QUALITY_Q30 = 2; // 30%
+ public static final int EM_TRANSCODE_IMAGE_QUALITY_Q50 = 3; // 50%
+ public static final int EM_TRANSCODE_IMAGE_QUALITY_Q60 = 4; // 60%
+ public static final int EM_TRANSCODE_IMAGE_QUALITY_Q80 = 5; // 80%
+ public static final int EM_TRANSCODE_IMAGE_QUALITY_Q100 = 6; // 100%
+ }
+
+ // 转码音频格式
+ public static class NET_TRANSCODE_AUDIO_FORMAT extends SdkStructure{
+ public int emCompression; // 音频压缩模式,枚举值参考NET_EM_AUDIO_FORMAT
+ public int nFrequency; // 音频采样频率
+ public byte[] byReserved = new byte[512]; // 保留字节
+ }
+ public static class NET_EM_AUDIO_FORMAT extends SdkStructure{
+ public static final int EM_AUDIO_FORMAT_UNKNOWN = 0; // unknown
+ public static final int EM_AUDIO_FORMAT_G711A = 1; // G711a
+ public static final int EM_AUDIO_FORMAT_PCM = 2; // PCM
+ public static final int EM_AUDIO_FORMAT_G711U = 3; // G711u
+ public static final int EM_AUDIO_FORMAT_AMR = 4; // AMR
+ public static final int EM_AUDIO_FORMAT_AAC = 5; // AAC
+
+ public static final int EM_AUDIO_FORMAT_G726 = 6; // G.726
+ public static final int EM_AUDIO_FORMAT_G729 = 7; // G.729
+ public static final int EM_AUDIO_FORMAT_ADPCM = 8; // ADPCM
+ public static final int EM_AUDIO_FORMAT_MPEG2 = 9; // MPEG2
+ public static final int EM_AUDIO_FORMAT_MPEG2L2 = 10; // MPEG2-Layer2
+ public static final int EM_AUDIO_FORMAT_OGG = 11; // OGG
+ public static final int EM_AUDIO_FORMAT_MP3 = 12; // MP3
+ public static final int EM_AUDIO_FORMAT_G7221 = 13; // G.722.1
+ }
+
+ //CLIENT_GetVirtualChannelOfTransCode 接口输出参数
+ public static class NET_OUT_GET_VIRTUALCHANNEL_OF_TRANSCODE extends SdkStructure{
+ public int dwSize; // 结构体大小
+ public int nVirtualChannel; // 虚拟通道号
+ public NET_OUT_GET_VIRTUALCHANNEL_OF_TRANSCODE(){
+ this.dwSize = this.size();
+ }
+ }
+
+
+
+
+ // 获取转码能力集, pInParam 和pOutParam 由用户申请和释放
+ public boolean CLIENT_GetCapsOfTransCode(LLong lLoginID,
+ NET_IN_TRANDCODE_GET_CAPS pInParam, NET_OUT_TRANSCODE_GET_CAPS pOutParam, int nWaitTime);
+ // 删除转码虚拟通道号
+ public boolean CLIENT_DelVirtualChannelOfTransCode(LLong lLoginID,
+ NET_IN_DEL_VIRTUALCHANNEL_OF_TRANSCODE pInParam, NET_OUT_DEL_VIRTUALCHANNEL_OF_TRANSCODE pOutParam, int nWaitTime);
+
+ // CLIENT_DelVirtualChannelOfTransCode 接口输入参数
+ public static class NET_IN_DEL_VIRTUALCHANNEL_OF_TRANSCODE extends SdkStructure{
+ public int dwSize; // 结构体大小
+ public int nVirtualChannel; // 虚拟通道号, -1 表示删除所有虚拟通道
+ public NET_IN_DEL_VIRTUALCHANNEL_OF_TRANSCODE(){
+ this.dwSize = this.size();
+ }
+ };
+
+ // CLIENT_DelVirtualChannelOfTransCode 接口输出参数
+ public static class NET_OUT_DEL_VIRTUALCHANNEL_OF_TRANSCODE extends SdkStructure{
+ public int dwSize; // 结构体大小
+ public NET_OUT_DEL_VIRTUALCHANNEL_OF_TRANSCODE(){
+ this.dwSize = this.size();
+ }
+ };
+
+ // CLIENT_GetCapsOfTransCode 接口输入参数
+ public static class NET_IN_TRANDCODE_GET_CAPS extends SdkStructure{
+ public int dwSize; // 结构体大小
+ public NET_IN_TRANDCODE_GET_CAPS(){
+ this.dwSize = this.size();
+ }
+ }
+ // CLIENT_GetCapsOfTransCode 接口输出参数
+ public static class NET_OUT_TRANSCODE_GET_CAPS extends SdkStructure{
+ public int dwSize; // 结构体大小
+ public int nMinVirtualChannel; // 最小虚拟通道号
+ public int nMaxVirtualChannel; // 最大虚拟通道号
+ public boolean bSupportErrorCode; // 是否支持压缩错误码实时上报
+ public boolean bSupportContinuous; // 是否支持持续转码
+ public boolean bSupportDelByCaller; // 是否支持由用户管理虚拟通道
+ public boolean bSupportSpecifyVirtualChannel; // 是否支持由调用者指定虚拟通道号,
+ // 此项为true时,调用CLIENT_GetVirtualChannelOfTransCode时指定虚拟通道nVirtualChannel,虚拟通道号必须在nMinVirtualChannel~nMaxVirtualChannel的范围内;
+ // 当此项为false时,不支持客户端指定虚拟通道号。
+ public float fMaxDownLoadSpeed; // 支持最大的压缩下载倍速
+ public int nSupportCompressMaxChannel; // 设备当前支持的最多压缩通道数
+ public byte[] szSupportCompressResolutionRangeMin= new byte[32]; // 支持压缩的分辨率 最小值
+ public byte[] szSupportCompressResolutionRangeMax= new byte[32]; // 支持压缩的分辨率 最大值
+ public int nSupportCompressFpsRangeMin; // 支持压缩的帧率 最小值
+ public int nSupportCompressFpsRangeMax; // 支持压缩的帧率 最大值
+ public byte[] szSupportCompressAudioTypes= new byte[64*32]; // 支持的音频格式
+ public int nSupportCompressAudioTypesNum; // 支持的音频格式个数
+ public int nSupportCompressCompressionTypesNum; // 支持的视频压缩格式个数
+ public byte[] szSupportCompressCompressionTypes= new byte[64*32]; // 支持的视频压缩格式
+
+ public NET_OUT_TRANSCODE_GET_CAPS(){
+ this.dwSize = this.size();
+ }
+ }
+
+
+
+
+ // 订阅虚拟转码通道状态, pInParam 由用户申请和释放
+ public LLong CLIENT_AttachVirtualChannelStatus(LLong lLoginID,
+ NET_IN_ATTACH_VIRTUALCHANNEL_STATUS pInParam, int nWaitTime);
+ //CLIENT_AttachVirtualChannelStatus 接口输入参数
+ public static class NET_IN_ATTACH_VIRTUALCHANNEL_STATUS extends SdkStructure{
+ public int dwSize; // 结构体大小
+ public byte[] byReserved = new byte[4]; // 用于字节对齐
+ public fVirtualChannelStatusCallBack cbVirtualChannelStatus; // 虚拟转码通道状态订阅函数
+ public Pointer dwUser;// 用户数据
+ public NET_IN_ATTACH_VIRTUALCHANNEL_STATUS(){
+ this.dwSize = this.size();
+ }
+ }
+ public interface fVirtualChannelStatusCallBack extends StdCallCallback {
+ public void invoke(LLong lAttachHandle, NET_CB_VIRTUALCHANNEL_STATUS_INFO pstVirChnStatusInfo, Pointer dwUser);}
+
+ // 虚拟转码通道状态信息
+ public class NET_CB_VIRTUALCHANNEL_STATUS_INFO extends SdkStructure{
+ public int nVirChannelID; // 虚拟转码通道号
+ public int emVirChannelStatus; // 虚拟转码通道状态,枚举值参考EM_VIRCHANNEL_STATUS
+ public byte[] byReserved = new byte[1024]; // 保留字节
+// public static class ByValue extends NET_CB_VIRTUALCHANNEL_STATUS_INFO implements SdkStructure.ByValue { }
+ }
+ public class EM_VIRCHANNEL_STATUS extends SdkStructure {
+ public static final int EM_VIRCHANNEL_STATUS_UNKNOWN = -1; // 未知
+ public static final int EM_VIRCHANNEL_STATUS_OVER_DECODE = 0; // 超出解码
+ public static final int EM_VIRCHANNEL_STATUS_OVER_COMPRESS = 1; // 超出压缩
+ public static final int EM_VIRCHANNEL_STATUS_NO_ORIGI_STREAM = 2; // 无原始码流
+ public static final int EM_VIRCHANNEL_STATUS_SLAVE_OFFLINE = 3; // 压缩通道所在的从片掉线
+ public static final int EM_VIRCHANNEL_STATUS_UNKNOWN_FAILURE = 255; // 未知的失败原因
+ }
+
+
+
+ // 取消订阅虚拟转码通道状态, lAttachHandle 为 CLIENT_AttachVirtualChannelStatus 函数的返回值
+ public boolean CLIENT_DetachVirtualChannelStatus(LLong lAttachHandle);
+
+
+ /************************************************************************/
+ /* 视频上传交通运输部需求 从这往上 */
+ /************************************************************************/
+
+ // 设置动态子连接断线回调函数,目前SVR设备的预览和回放是短连接的。
+ public void CLIENT_SetSubconnCallBack(Callback cbSubDisConnect, Pointer dwUser);
+
+ // 动态子连接断开回调函数原形
+ public interface fSubDisConnect extends StdCallCallback{
+ public void invoke(int emInterfaceType, Boolean bOnline, LLong lOperateHandle, LLong lLoginID, Pointer dwUser);
+ }
+ // 接口类型,对应CLIENT_SetSubconnCallBack接口
+ public static class EM_INTERFACE_TYPE extends SdkStructure
+ {
+ public static final int DH_INTERFACE_OTHER = 0; // 未知接口
+ public static final int DH_INTERFACE_REALPLAY = 1; // 实时预览接口
+ public static final int DH_INTERFACE_PREVIEW = 2; // 多画面预览接口
+ public static final int DH_INTERFACE_PLAYBACK =3; // 回放接口
+ public static final int DH_INTERFACE_DOWNLOAD =4; // 下载接口
+ public static final int DH_INTERFACE_REALLOADPIC =5; // 下载智能图片接口
+ };
+ //人脸开门输入参数
+ public static class NET_IN_FACE_OPEN_DOOR extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannel; //门通道号
+ public int emCompareResult; //比对结果,EM_COMPARE_RESULT
+ public NET_OPENDOOR_MATCHINFO stuMatchInfo; //匹配信息
+ public NET_OPENDOOR_IMAGEINFO stuImageInfo; //图片信息
+
+ public NET_IN_FACE_OPEN_DOOR(){
+ this.dwSize = this.size();
+ }
+ };
+
+ //匹配信息
+ public static class NET_OPENDOOR_MATCHINFO extends SdkStructure
+ {
+ public byte[] szUserID=new byte[32]; //远程用户ID
+ public byte[] szUserName=new byte[32]; //用户名
+ public int emUserType; //用户类型
+ public byte[] szName=new byte[64]; //门禁名称
+ public int nMatchRate; //匹配度,范围为0-100
+ public int emOpenDoorType; //开门方式
+ public NET_TIME stuActivationTime; //(卡、头像)生效日期
+ public NET_TIME stuExpiryTime; //(卡、头像)截止日期
+ public int nScore; // 信用积分
+ public byte[] szCompanyName=new byte[MAX_COMPANY_NAME_LEN]; //单位名称
+ public byte[] szCompanionName=new byte[120]; //陪同人员姓名
+ public byte[] szCompanionCompany=new byte[MAX_COMPANY_NAME_LEN]; //陪同人员单位名称
+ public byte[] szPermissibleArea=new byte[MAX_COMMON_STRING_128]; //准许通行区域
+ public byte[] szSection=new byte[200]; //部门名称
+ public Pointer pstuCustomEducationInfo; // 教育信息,参考NET_CUSTOM_EDUCATION_INFO
+ public Pointer pstuHealthCodeInfo;//健康码信息,NET_HEALTH_CODE_INFO
+ public byte[] szRoomNo=new byte[32];//房间号
+ public Pointer pstuIDCardInfo;//证件信息,NET_IDCARD_INFO
+ public Pointer pstuBusStationInfo;//公交站信息,NET_BUS_STATION_INFO
+ public Pointer pstuCustomWorkerInfo;//工地工人信息,NET_CUSTOM_WORKER_INFO
+ public boolean bUseMatchInfoEx;//否使用匹配信息扩展字段
+ public Pointer pstuMatchInfoEx;//匹配信息扩展字段,NET_OPENDOOR_MATCHINFO_EX
+ public Pointer pstuHSJCInfo; // 核酸检测信息,NET_HSJC_INFO
+ public Pointer pstuVaccineInfo; // 新冠疫苗接种信息,NET_VACCINE_INFO
+ public Pointer pstuTravelInfo; // 行程码信息,NET_TRAVEL_INFO
+ public byte[] byReserved=new byte[12];
+ };
+
+ // 教育信息
+ public static class NET_CUSTOM_EDUCATION_INFO extends SdkStructure
+ {
+ public int emInfoType; // 信息类型
+ public int nStudentSeatNumber; // 座位号,最小值为1
+ public byte[] szInfoContent=new byte[128]; // 消息内容
+ public int emVoiceType; // 语音类型,EM_CUSTOM_EDUCATION_VOICE_TYPE
+ };
+
+ //图片信息
+ public static class NET_OPENDOOR_IMAGEINFO extends SdkStructure
+ {
+ public int nLibImageLen; //人脸库照片长度,限制为150k
+ public int nSnapImageLen; //抓拍照片长度,限制为150k
+ public Pointer pLibImage; //人脸库照片,内存由用户申请
+ public Pointer pSnapImage; //抓拍照片,内存由用户申请
+ public byte[] byReserved=new byte[1024];
+ };
+
+ //人脸开门输出参数
+ public static class NET_OUT_FACE_OPEN_DOOR extends SdkStructure
+ {
+ public int dwSize;
+
+ public NET_OUT_FACE_OPEN_DOOR(){
+ this.dwSize = this.size();
+ }
+ };
+
+ //人脸开门
+ public boolean CLIENT_FaceOpenDoor(LLong lLoginID, NET_IN_FACE_OPEN_DOOR pInParam, NET_OUT_FACE_OPEN_DOOR pOutParam, int nWaitTime);
+
+ // 水位场景类型
+ public static class EM_WATERSTAGE_SCENE_TYPE extends SdkStructure
+ {
+ public static final int EM_WATERMONITOR_SCENE_UNKNOWN=0; // 未知
+ public static final int EM_WATERMONITOR_SCENE_WATERSTAGE_RULE=1; // 水位检测, 有水位尺
+ public static final int EM_WATERMONITOR_SCENE_WATERSTAGE_NO_RULE=2; // 水位检测, 无水位尺
+ public static final int EM_WATERMONITOR_SCENE_WATERLOGG_RULE=3; // 内涝检测, 有水位尺
+ public static final int EM_WATERMONITOR_SCENE_WATERLOGG_NO_RULE=4; // 内涝检测, 无水位尺
+ };
+
+ // 水面分割掩膜信息
+ public static class NET_WATER_SURFACE_MASK_INFO extends SdkStructure
+ {
+ public int nColNum; // 水面分割掩膜列数
+ public int nOffset; // 偏移
+ public int nLength; // 长度
+ public byte[] byReserved=new byte[1020]; // 预留字段
+ };
+
+ // 水位监测事件, 目前仅用于任务型智能分析
+ public static class DEV_EVENT_WATER_STAGE_MONITOR_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 1:开始 2:停止
+ public byte[] szName=new byte[128]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int nRuleID; // 智能事件规则编号,用于标示哪个规则触发的事件
+ public int emClassType; // 智能事件所属大类
+ public int emSceneType; // 水位场景类型
+ public double dbMark; // 水尺读数
+ public NET_POINT stuCrossPoint; // 水尺与水面交点
+ public NET_WATER_SURFACE_MASK_INFO stuWaterSurfaceMask; // 水面分割掩膜信息, emSceneType 为EM_WATERMONITOR_SCENE_WATERSTAGE_NO_RULE 或者EM_WATERMONITOR_SCENE_WATERLOGG_NO_RULE有效
+ public byte[] byReserved=new byte[1020]; // 预留字段
+ } ;
+
+ // 标定线
+ public static class NET_CALIBRATE_LINE_INFO extends SdkStructure
+ {
+ public NET_POINT stuStartPoint; // 起点
+ public NET_POINT stuEndPoint; // 终点
+ };
+
+ // 事件类型EVENT_IVS_WATER_STAGE_MONITOR(水位检测事件)对应的规则配置
+ public static class NET_WATER_STAGE_MONITOR_RULE_INFO extends SdkStructure
+ {
+ public int nDetectRegionPoint; // 检测区顶点数
+ public POINTCOORDINATE[] stuDetectRegion=(POINTCOORDINATE[]) new POINTCOORDINATE().toArray(20); // 检测区域
+ public int dwSceneMask; // 使能检测的场景掩码 // bit2:内涝检测,有水位尺, bit3:内涝检测,无水位尺
+ public NET_CALIBRATE_LINE_INFO stuCalibrateLine; // 标定线, 仅在人物分析模式下有效
+ public byte[] byReserved=new byte[4096];//保留字节
+
+ }
+
+ // 事件类型EVENT_IVS_VIOLENT_THROW_DETECTION(暴力抛物检测)对应的数据块描述信息
+ public static class DEV_EVENT_VIOLENT_THROW_DETECTION_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public byte[] szName=new byte[128]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+
+ public int nFrameSequence; // 视频分析帧序号
+ public byte[] szRegionName=new byte[64]; // 暴力抛物检测区域名称
+ public SCENE_IMAGE_INFO_EX stuSceneImage; // 大图信息
+ public NET_IMAGE_INFO_EX2 stuImageInfo[] = (NET_IMAGE_INFO_EX2[])new NET_IMAGE_INFO_EX2().toArray(32); //图片信息数组
+ public int nImageInfoNum; //图片信息个数
+ public byte byReserver[] = new byte[1024]; //预留字节
+ };
+
+ // CLIENT_GetHumanRadioCaps 接口输入参数
+ public static class NET_IN_GET_HUMAN_RADIO_CAPS extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannel;
+
+ public NET_IN_GET_HUMAN_RADIO_CAPS(){
+ this.dwSize = this.size();
+ }
+ };
+
+ // CLIENT_GetHumanRadioCaps 接口输出参数
+ public static class NET_OUT_GET_HUMAN_RADIO_CAPS extends SdkStructure
+ {
+ public int dwSize;
+ public int bSupportRegulatorAlarm;
+
+ public NET_OUT_GET_HUMAN_RADIO_CAPS(){
+ this.dwSize = this.size();
+ }
+ };
+ // 获取能力级
+ public Boolean CLIENT_GetHumanRadioCaps(LLong lLoginID, NET_IN_GET_HUMAN_RADIO_CAPS pInParam, NET_OUT_GET_HUMAN_RADIO_CAPS pOutParam, int nWaitTime);
+
+ // 区域内人员体温信息
+ public static class NET_MAN_TEMP_INFO extends SdkStructure
+ {
+ public int nObjectID; // 物体ID
+ public NET_RECT stRect; // 人员头肩信息, 8192坐标系
+ public double dbHighTemp; // 最高的温度
+ public int nTempUnit; // 温度单位(0摄氏度 1华氏度 2开尔文)
+ public boolean bIsOverTemp; // 是否温度异常
+ public boolean bIsUnderTemp; // 是否温度异常
+ public int nOffset; // 人脸小图特征值在二进制数据块中的偏移
+ public int nLength; // 人脸小图特征值长度, 单位:字节
+ public int emMaskDetectResult; // 口罩检测结果(参考EM_MASK_DETECT_RESULT_TYPE)
+ public NET_RECT stThermalRect; // 热成像检测人员头肩坐标信息(坐标系:8192)
+ public int nAge; // 年龄
+ public int emSex; // 性别(参考EM_DEV_EVENT_FACEDETECT_SEX_TYPE)
+ public byte[] byReserved=new byte[36]; // 预留字段
+ } ;
+
+ // 全景图
+ public static class NET_VIS_SCENE_IMAGE extends SdkStructure
+ {
+ public int nOffset; // 在二进制数据块中的偏移
+ public int nLength; // 图片大小, 单位字节
+ public int nWidth; // 图片宽度, 像素
+ public int nHeight; // 图片高度, 像素
+ public byte[] byReserved=new byte[64]; // 预留字段
+ } ;
+
+ // 热成像全景图
+ public static class NET_THERMAL_SCENE_IMAGE extends SdkStructure
+ {
+ public int nOffset; // 在二进制数据块中的偏移
+ public int nLength; // 图片大小, 单位字节
+ public int nWidth; // 图片宽度, 像素
+ public int nHeight; // 图片高度, 像素
+ public byte[] byReserved=new byte[64]; // 预留字段
+ } ;
+
+ // 事件类型EVENT_IVS_ANATOMY_TEMP_DETECT(人体测温检测事件)对应的数据块描述信息
+ public static class DEV_EVENT_ANATOMY_TEMP_DETECT_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 1:开始 2:停止
+ public byte[] szName=new byte[128]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+
+ public int emClassType; // 智能事件所属大类(对应枚举类型EM_CLASS_TYPE)
+ public int nPresetID; // 事件触发的预置点号, 从1开始, 没有该字段,表示预置点未知
+ public NET_MAN_TEMP_INFO stManTempInfo; // 区域内人员体温信息
+ public NET_VIS_SCENE_IMAGE stVisSceneImage; // 可见光全景图
+ public NET_THERMAL_SCENE_IMAGE stThermalSceneImage; // 热成像全景图
+ public int nSequence; // 帧序号
+ public int nEventRelevanceID; // 事件关联ID
+ public boolean bIsFaceRecognition; // 是否做过后智能的目标识别
+ public Pointer pstuImageInfo; // 图片信息数组,结构体NET_IMAGE_INFO_EX2数组指针
+ public int nImageInfoNum; // 图片信息个数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] byReserved=new byte[1004]; // 预留字段
+ } ;
+
+ // 事件类型 ALARM_ANATOMY_TEMP_DETECT_INFO(人体温智能检测事件)对应的数据块描述信息
+ public static class ALARM_ANATOMY_TEMP_DETECT_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public byte[] szName=new byte[128]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+
+ public int nPresetID; // 事件触发的预置点号, 从1开始, 没有该字段,表示预置点未知
+ public NET_MAN_TEMP_INFO stManTempInfo; // 区域内人员体温信息
+ public int nSequence; // 帧序号
+ public int nEventRelevanceID; // 事件关联ID
+ public boolean bIsFaceRecognition; // 是否做过后智能的目标识别
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] byReserved=new byte[1020]; // 预留字节
+ } ;
+
+ // 人体测温规则配置
+ public static class CFG_ANATOMY_TEMP_DETECT_INFO extends SdkStructure
+ {
+ // 信息
+ public byte[] szRuleName=new byte[MAX_NAME_LEN]; // 规则名称,不同规则不能重名
+ public int bRuleEnable; // 规则使能
+ public int nObjectTypeNum; // 相应物体类型个数
+ public byte[] szObjectTypes=new byte[MAX_OBJECT_LIST_SIZE*MAX_NAME_LEN]; // 相应物体类型列表
+ public int nPtzPresetId; // 云台预置点编号 0~65535
+ public CFG_ALARM_MSG_HANDLE stuEventHandler; // 报警联动
+ public CFG_TIME_SECTION[] stuTimeSection=(CFG_TIME_SECTION[])new CFG_TIME_SECTION().toArray(WEEK_DAY_NUM*MAX_REC_TSECT_EX); // 事件响应时间段
+ public byte bTrackEnable; // 触发跟踪使能,仅对警戒线事件,警戒区规则有效
+ public int nDetectRegionPoint; // 多边形顶点数
+ public CFG_POLYGON[] stuDetectRegion=(CFG_POLYGON[])new CFG_POLYGON().toArray(MAX_POLYGON_NUM); // 检测区域,多边形
+ public boolean bHighEnable; // 温度异常报警是否开启
+ public boolean bLowEnable; // 温度异常报警是否开启
+ public int fHighThresholdTemp; // 温度异常阈值,精度0.1,扩大10倍
+ public int fLowThresholdTemp; // 温度异常阈值,精度0.1,扩大10倍
+ public boolean bIsAutoStudy; // 是否自动学习
+ public int fHighAutoOffset; // 温度自动学习偏差值,精度0.1,扩大10倍
+ public int fLowAutoOffset; // 温度自动学习偏差值,精度0.1,扩大10倍
+ public int nSensitivity; // 灵敏度 范围[1, 10]
+ public boolean bSizeFileter; // 规则特定的尺寸过滤器是否有效
+ public CFG_SIZEFILTER_INFO stuSizeFileter; // 规则特定的尺寸过滤器
+ public boolean bIsCaptureNormal; // 是否上报正常体温信息
+
+ public byte[] byReserved=new byte[1024]; // 保留字节
+ };
+
+ // 事件类型 ALARM_REGULATOR_ABNORMAL_INFO(标准黑体源异常报警事件)对应的数据块描述信息
+ public static class ALARM_REGULATOR_ABNORMAL_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public byte[] szName=new byte[128]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+
+ public byte[] szTypes=new byte[MAX_COMMON_STRING_32]; // 异常类型
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] byReserved=new byte[1024]; // 预留字节
+ } ;
+
+ // 校准源信息
+ public static class NET_REGULATOR_INFO extends SdkStructure
+ {
+ public int nDistance; // 校准源距离, 单位cm
+ public int nTemperature; // 校准源温度, 精度0.1, 放大10倍
+ public NET_RECT stRect; // 校准源矩形位置取值0-8191
+ public int nHeight; // 校准源高度, 单位cm
+ public int nDiffTemperature; // 温度偏差值, 精度0.01, 放大100倍
+ public byte[] byReserve=new byte[32]; // 保留字节,用于字节对齐
+ } ;
+
+ // 人体测温标准黑体配置, 对应枚举 NET_EM_CFG_RADIO_REGULATOR
+ public static class NET_CFG_RADIO_REGULATOR extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int bEnable; // 标准黑体配置使能
+ public int nPresetId; // 预置点编号, 对于无预置点设备为0
+ public int nCamerHeight; // 热成像相机安装高度, 单位cm
+ public int nCamerAngle; // 相机安装角度, 精度0.1, 放大10倍
+ public NET_REGULATOR_INFO stRegulatorInfo; // 校准源信息
+
+ public NET_CFG_RADIO_REGULATOR(){
+ this.dwSize = this.size();
+ }
+ } ;
+
+ // CLIENT_BatchAppendFaceRecognition 接口输入参数
+ public static class NET_IN_BATCH_APPEND_FACERECONGNITION extends SdkStructure
+ {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 需要添加的人员数量
+ */
+ public int nPersonNum;
+ /**
+ * 人员信息,内存由用户申请,大小为nPersonNum * sizeof(FACERECOGNITION_PERSON_INFOEX)
+ */
+ public Pointer pstPersonInfo;
+
+ // 图片二进制数据
+ public Pointer pBuffer; // 缓冲地址
+ public int nBufferLen; // 缓冲数据长度
+ public byte[] bReserved=new byte[4]; // 字节对齐
+ public NET_MULTI_APPEND_EXTENDED_INFO stuInfo = new NET_MULTI_APPEND_EXTENDED_INFO(); //扩展信息
+
+ public NET_IN_BATCH_APPEND_FACERECONGNITION(){
+ this.dwSize = this.size();
+ }
+ };
+
+ // 批量添加人员结果信息
+ public static class NET_BATCH_APPEND_PERSON_RESULT extends SdkStructure
+ {
+ public int nUID; // 人员UID
+ public int dwErrorCode; // 错误码信息
+ public byte[] bReserved=new byte[512]; // 保留字段
+ } ;
+
+ // CLIENT_BatchAppendFaceRecognition 接口输出参数
+ public static class NET_OUT_BATCH_APPEND_FACERECONGNITION extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nResultNum; // 批量添加结果个数,由用户指定,数值与NET_IN_BATCH_APPEND_FACERECONGNITION中的nPersonNum一致
+ /**
+ * 内存大小为结构体数组的大小,对应结构体为{@link NET_BATCH_APPEND_PERSON_RESULT}
+ */
+ public Pointer pstResultInfo; // 批量添加结果信息
+ public int nUIDType; // 指定NET_BATCH_APPEND_PERSON_RESULT中的UID使用字段,不存在本字段或值为0则使用UID字段,若值为1则使用UID2字段
+ public NET_OUT_BATCH_APPEND_FACERECONGNITION(){
+ this.dwSize = this.size();
+ }
+ };
+
+ // 添加多个人员信息和人脸样本
+ public Boolean CLIENT_BatchAppendFaceRecognition(LLong lLoginID, NET_IN_BATCH_APPEND_FACERECONGNITION pstInParam, NET_OUT_BATCH_APPEND_FACERECONGNITION pstOutParam, int nWaitTime);
+
+ // CLIENT_FindFileEx+DH_FILE_QUERY_SNAPSHOT_WITH_MARK 对应查询参数
+ public static class MEDIAFILE_SNAPSHORT_WITH_MARK_PARAM extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public NET_TIME stuStartTime; // 开始时间
+ public NET_TIME stuEndTime; // 结束时间
+ public int bOnlySupportRealUTC; // 为TRUE表示仅下发stuStartTimeRealUTC和stuEndTimeRealUTC(不下发stuStartTime, stuEndTime), 为FALSE表示仅下发stuStartTime, stuEndTime(不下发stuStartTimeRealUTC和stuEndTimeRealUTC)
+ public NET_TIME stuStartTimeRealUTC; // UTC开始时间(标准UTC时间), 与stuEndTimeRealUTC配对使用,与(stuStartTime, stuEndTime)互斥
+ public NET_TIME stuEndTimeRealUTC; // UTC结束时间(标准UTC时间), 与stuStartTimeRealUTC配对使用,与(stuStartTime, stuEndTime)互斥
+ public MEDIAFILE_SNAPSHORT_WITH_MARK_PARAM(){
+ this.dwSize = this.size();
+ }
+ };
+
+ // 抓图标记信息
+ public static class NET_SNAPSHOT_MARK_INFO extends SdkStructure
+ {
+ public NET_POINT stuPosition; // 标记的坐标位置, 绝对坐标系
+ public byte[] byReserved=new byte[1020]; // 预留字段
+ };
+
+ // DH_FILE_QUERY_SNAPSHOT_WITH_MARK 对应 FINDNEXT 查询返回结果
+ public static class MEDIAFILE_SNAPSHORT_WITH_MARK_INFO extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nChannelID; // 通道号从0开始,-1表示查询所有通道
+ public NET_TIME stuStartTime; // 开始时间
+ public NET_TIME stuEndTime; // 结束时间
+ public int nFileSize; // 文件长度
+ public byte[] szFilePath=new byte[MAX_PATH]; // 文件路径
+
+ public NET_SNAPSHOT_MARK_INFO stuMarkInfo; // 抓图标记信息
+ public int bRealUTC; // 为TRUE表示仅stuStartTimeRealUTC和stuEndTimeRealUTC有效(仅使用stuStartTimeRealUTC和stuEndTimeRealUTC), 为FALSE表示仅stuStartTime和stuEndTime有效(仅使用stuStartTime和stuEndTime)
+ public NET_TIME stuStartTimeRealUTC; // UTC开始时间(标准UTC时间), 与stuEndTimeRealUTC配对使用
+ public NET_TIME stuEndTimeRealUTC; // UTC结束时间(标准UTC时间), 与stuStartTimeRealUTC配对使用
+ public MEDIAFILE_SNAPSHORT_WITH_MARK_INFO(){
+ this.dwSize = this.size();
+ }
+ } ;
+ //////////////////////////////////////无人机航点功能开始///////////////////////////////////////////////////////////////////
+ // 获取无人机航点入参
+ public static class NET_IN_UAVMISSION_COUNT extends SdkStructure
+ {
+ public int dwSize;
+ public NET_IN_UAVMISSION_COUNT(){
+ this.dwSize = this.size();
+ }
+ };
+
+ // 获取无人机航点出参
+ public static class NET_OUT_UAVMISSION_COUNT extends SdkStructure
+ {
+ public int dwSize;
+ public int nCount; // 航点总数
+ public NET_OUT_UAVMISSION_COUNT(){
+ this.dwSize = this.size();
+ }
+ };
+
+ // 获取任务入参
+ public static class NET_IN_READ_UAVMISSION extends SdkStructure
+ {
+ public int dwSize;
+ public NET_IN_READ_UAVMISSION(){
+ this.dwSize = this.size();
+ }
+ };
+
+ // 航点任务
+ public static class NET_UAVMISSION_ITEM extends SdkStructure
+ {
+ public int nCurrentMode; // 使能状态 0-未使能; 1-使能;
+ public int bAutoContinue; // 自动执行下一个航点
+ public int nSequence; // 航点序号
+ public int emCommand; // 航点指令(参考ENUM_UAVCMD_TYPE)
+ public NET_UAVCMD_PARAM_BUFFER stuCmdParam; // 指令参数
+ public byte[] byReserved=new byte[8]; // 保留字段
+ };
+
+ // 获取任务出参
+ public static class NET_OUT_READ_UAVMISSION extends SdkStructure
+ {
+ public int dwSize;
+ public int nItemCount; // 有效任务个数
+ public Pointer pstuItems; // 任务列表(参考NET_UAVMISSION_ITEM)
+ public NET_OUT_READ_UAVMISSION(){
+ this.dwSize = this.size();
+ }
+ };
+
+ // 设置任务入参
+ public static class NET_IN_WRITE_UAVMISSION extends SdkStructure
+ {
+ public int dwSize;
+ public int nItemCount; // 有效任务个数
+ public Pointer pstuItems; // 任务列表(参考NET_UAVMISSION_ITEM)
+ public NET_IN_WRITE_UAVMISSION(){
+ this.dwSize = this.size();
+ }
+ };
+
+ // 设置任务出参
+ public static class NET_OUT_WRITE_UAVMISSION extends SdkStructure
+ {
+ public int dwSize;
+ public NET_OUT_WRITE_UAVMISSION(){
+ this.dwSize = this.size();
+ }
+ };
+
+ // 订阅任务消息入参
+ public static class NET_IN_ATTACH_UAVMISSION_STATE extends SdkStructure
+ {
+ public int dwSize;
+ public fUAVMissionStateCallBack cbNotify; // 任务状态回调函数
+ public Pointer dwUser; // 用户信息
+ public NET_IN_ATTACH_UAVMISSION_STATE(){
+ this.dwSize = this.size();
+ }
+ };
+
+ // 订阅任务消息出参
+ public static class NET_OUT_ATTACH_UAVMISSION_STATE extends SdkStructure
+ {
+ public int dwSize; // 赋值为结构体大小
+ public NET_OUT_ATTACH_UAVMISSION_STATE(){
+ this.dwSize = this.size();
+ }
+ };
+
+ // 任务状态类型
+ public static class ENUM_UAVMISSION_TYPE extends SdkStructure
+ {
+ public static final int ENUM_UAVMISSION_TYPE_UNKNOWN=0; // 未知类型
+ public static final int ENUM_UAVMISSION_TYPE_WP_UPLOAD=1; // 航点上传
+ public static final int ENUM_UAVMISSION_TYPE_WP_DOWNLOAD=2; // 航点下载
+ };
+
+ // 任务状态
+ public static class ENUM_UAVMISSION_STATE extends SdkStructure
+ {
+ public static final int ENUM_UAVMISSION_STATE_UNKNOWN=0; // 未知类型
+ public static final int ENUM_UAVMISSION_STATE_BEGIN=1; // 开始
+ public static final int ENUM_UAVMISSION_STATE_UNDERWAY=2; // 进行
+ public static final int ENUM_UAVMISSION_STATE_SUCCESS=3; // 成功
+ public static final int ENUM_UAVMISSION_STATE_FAIL=4; // 失败
+ };
+
+ // 任务状态信息
+ public static class NET_UAVMISSION_STATE extends SdkStructure
+ {
+ public int emType; // 类型(参见ENUM_UAVMISSION_TYPE枚举类型)
+ public int emState; // 状态(参见ENUM_UAVMISSION_STATE)
+ public int nTotalCount; // 总数
+ public int nSequence; // 当前航点编号
+ };
+
+ // 无人机任务状态回调
+ public interface fUAVMissionStateCallBack extends StdCallCallback {
+ public void invoke(LLong lAttachHandle, NET_UAVMISSION_STATE pstuState, int dwStateInfoSize, Pointer dwUser);
+ }
+
+ // 无人机通用设置接口
+ //emCmdType(参考ENUM_UAVCMD_TYPE枚举)
+ //pParam对应ENUM_UAVCMD_TYPE所对应的结构体
+ public boolean CLIENT_SendCommandToUAV(LLong lLoginID, int emCmdType, Pointer pParam, int nWaitTime);
+ // 获取航点总数
+ public boolean CLIENT_GetUAVMissonCount(LLong lLoginID, NET_IN_UAVMISSION_COUNT pstuInParam, NET_OUT_UAVMISSION_COUNT pstuOutParam, int nWaitTime);
+
+ // 获取UAV航点信息
+ public boolean CLIENT_ReadUAVMissions(LLong lLoginID, NET_IN_READ_UAVMISSION pstuInParam, NET_OUT_READ_UAVMISSION pstuOutParam, int nWaitTime);
+
+ // 设置UAV航点信息
+ public boolean CLIENT_WriteUAVMissions(LLong lLoginID, NET_IN_WRITE_UAVMISSION pstuInParam, NET_OUT_WRITE_UAVMISSION pstuOutParam, int nWaitTime);
+
+ // 订阅UAV航点任务 pstuInParam 和 pstuOutParam 由设备申请释放
+ public LLong CLIENT_AttachUAVMissonState(LLong lLoginID, NET_IN_ATTACH_UAVMISSION_STATE pstuInParam, NET_OUT_ATTACH_UAVMISSION_STATE pstuOutParam, int nWaitTime);
+
+ // 退订UAV航点任务 lAttachHandle 是 CLIENT_AttachUAVMissonState 返回值
+ public boolean CLIENT_DettachUAVMissonState(LLong lAttachHandle);
+//////////////////////////////////////无人机航点功能结束///////////////////////////////////////////////////////////////////
+
+
+ ////////////////////////////////////云上高速抓图起雾事件开始//////////////////////////////////////////
+ // 起雾检测事件数据类型
+ public static class EM_FOG_DETECTION_EVENT_TYPE
+ {
+ public static final int EM_FOG_DETECTION_EVENT_TYPE_UNKNOWN=0; // 未知
+ public static final int EM_FOG_DETECTION_EVENT_TYPE_REAL=1; // 实时数据
+ public static final int EM_FOG_DETECTION_EVENT_TYPE_ALARM=2; // 报警数据
+ };
+
+ // 雾值
+ public static class EM_FOG_LEVEL extends SdkStructure
+ {
+ public static final int EM_FOG_LEVEL_UNKNOWN=0; // 未知
+ public static final int EM_FOG_LEVEL_NO=1; // 无
+ public static final int EM_FOG_LEVEL_BLUE=2; // 蓝色预警
+ public static final int EM_FOG_LEVEL_YELLOW=3; // 黄色预警
+ public static final int EM_FOG_LEVEL_ORANGE=4; // 橙色预警
+ public static final int EM_FOG_LEVEL_RED=5; // 红色预警
+ };
+
+ // 起雾检测事件雾信息
+ public static class FOG_DETECTION_FOG_INFO extends SdkStructure
+ {
+ public int emFogLevel; // 雾等级,参考EM_FOG_LEVEL
+ public byte[] byReserved=new byte[508]; // 预留字段
+ };
+
+
+ // 事件类型EVENT_IVS_FOG_DETECTION(起雾检测事件)对应的数据块描述信息
+ public static class DEV_EVENT_FOG_DETECTION extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public byte[] szName=new byte[128]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public int emClassType; // 智能事件所属大类,参考EM_CLASS_TYPE
+ public int nGroupID; // 事件组ID,同一辆车抓拍过程内GroupID相同
+ public int nCountInGroup; // 一个事件组内的抓拍张数
+ public int nIndexInGroup; // 一个事件组内的抓拍序号
+ public int nPresetID; // 预置点号,从1开始有效
+ public byte[] szPresetName=new byte[128]; // 阈值点名称
+ public int emEventType; // 事件数据类型,参考EM_FOG_DETECTION_EVENT_TYPE
+ public FOG_DETECTION_FOG_INFO stuFogInfo; // 雾信息
+ public NET_EVENT_FILE_INFO stFileInfo; // 事件对应文件信息
+ public byte[] byReserved=new byte[1024];// 预留字段
+ };
+ ////////////////////////////////////云上高速抓图起雾事件开始//////////////////////////////////////////
+
+
+
+ ////////////////////////////////////云上高速抓图开始//////////////////////////////////////////、
+
+ // CLIENT_ManualSnap 接口输入参数
+ public static class NET_IN_MANUAL_SNAP extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nChannel; // 抓图通道号
+ public int nCmdSerial; // 请求序列号
+ public byte[] szFilePath=new byte[260]; // 抓图保存路径
+
+ public NET_IN_MANUAL_SNAP(){
+ this.dwSize = this.size();
+ }
+ } ;
+
+ // 抓图图片编码格式
+ public static class EM_SNAP_ENCODE_TYPE extends SdkStructure
+ {
+ public static final int EM_SNAP_ENCODE_TYPE_UNKNOWN=0; // 未知
+ public static final int EM_SNAP_ENCODE_TYPE_JPEG=1; // jpeg图片
+ public static final int EM_SNAP_ENCODE_TYPE_MPEG4_I=2; // mpeg4的i 帧
+ };
+
+ // CLIENT_ManualSnap 接口输出参数
+ public static class NET_OUT_MANUAL_SNAP extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nMaxBufLen; // pRcvBuf的长度,由用户指定
+ public Pointer pRcvBuf; // 接收图片缓冲, 用于存放抓图数据, 空间由用户申请和释放, 申请大小为nMaxBufLen
+ public int nRetBufLen; // 实际接收到的图片大小
+ public int emEncodeType; // 图片编码格式,参考EM_SNAP_ENCODE_TYPE
+ public int nCmdSerial; // 请求序列号
+ public byte[] bReserved=new byte[4];// 字节对齐
+ public NET_OUT_MANUAL_SNAP(){
+ this.dwSize = this.size();
+ }
+ } ;
+
+ // 手动抓图, 支持并发调用
+ public boolean CLIENT_ManualSnap(LLong lLoginID, NET_IN_MANUAL_SNAP pInParam, NET_OUT_MANUAL_SNAP pOutParam, int nWaitTime);
+
+ // 订阅抓图回调信息
+ public static class NET_CB_ATTACH_SNAP_INFO extends SdkStructure
+ {
+ public Pointer pRcvBuf; // 接收到的图片数据
+ public int nBufLen; // 图片数据长度
+ public int emEncodeType; // 图片编码格式,参考EM_SNAP_ENCODE_TYPE
+ public int nCmdSerial; // 抓图请求序列号
+ public byte[] byReserved=new byte[1028];// 保留字节
+ } ;
+
+ // 订阅抓图回调函数原形
+ public interface fAttachSnapRev extends StdCallCallback{
+ public void invoke(LLong lAttachHandle, NET_CB_ATTACH_SNAP_INFO pstAttachCbInfo, Pointer dwUser);
+ };
+
+ // CLIENT_AttachSnap 接口输入参数
+ public static class NET_IN_ATTACH_INTER_SNAP extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nChannel; // 抓图通道号
+ public int nCmdSerial; // 请求序列号
+ public int nIntervalSnap; // 定时抓图时间间隔
+ public fAttachSnapRev cbAttachSnapRev; // 回调函数
+ public Pointer dwUser; // 用户数据
+ public NET_IN_ATTACH_INTER_SNAP(){
+ this.dwSize = this.size();
+ }
+ } ;
+
+ // CLIENT_AttachSnap 接口输出参数
+ public static class NET_OUT_ATTACH_INTER_SNAP extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public NET_OUT_ATTACH_INTER_SNAP(){
+ this.dwSize = this.size();
+ }
+ } ;
+
+ // 订阅抓图
+ public LLong CLIENT_AttachSnap(LLong lLoginID, NET_IN_ATTACH_INTER_SNAP pInParam, NET_OUT_ATTACH_INTER_SNAP pOutParam);
+
+ // 取消订阅抓图
+ public boolean CLIENT_DetachSnap(LLong lAttachHandle);
+
+ ////////////////////////////////////云上高速抓图结束//////////////////////////////////////////
+
+ // 二维码上报事件信息( DH_ALARM_QR_CODE_CHECK )
+ public static class ALARM_QR_CODE_CHECK_INFO extends SdkStructure
+ {
+ public int nEventID; // 事件ID
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public double dbPTS; // 时间戳(单位是毫秒)
+ public byte[] szQRCode=new byte[256]; // 二维码字符串
+ public byte[] byReserved=new byte[1024]; // 预留字节
+ };
+
+ /************************************************************************/
+ /* 录像备份回传 */
+ /************************************************************************/
+
+ // 录像备份恢复任务信息
+ public static class NET_REC_BAK_RST_TASK extends SdkStructure
+ {
+ public int dwSize;
+ public int nTaskID; // 任务ID
+ public byte[] szDeviceID=new byte[NET_DEV_ID_LEN_EX]; // 设备ID
+ public int nChannelID; // 通道号
+ public NET_TIME stuStartTime=new NET_TIME(); // 录像开始时间
+ public NET_TIME stuEndTime=new NET_TIME(); // 录像结束时间
+ public int nState; // 当前备份状态, 0-等待, 1-进行中, 2-完成, 3-失败, 4-暂停
+ public NET_RECORD_BACKUP_PROGRESS stuProgress=new NET_RECORD_BACKUP_PROGRESS(); // 当前备份进度
+ public int emFailReason; // 失败的原因, 当nState字段为3的情况下有效,参考EM_RECORD_BACKUP_FAIL_REASON
+ public NET_TIME stuTaskStartTime=new NET_TIME(); // 任务开始时间, nState为"进行中"、"已完成"、"失败"的情况下该时间点有效;
+ public NET_TIME stuTaskEndTime=new NET_TIME(); // 任务结束时间, nState为"已完成"、"失败"的情况下该时间点有效;
+ public int nRemoteChannel; // 备份源通道
+ public NET_REC_BAK_RST_TASK(){
+ this.dwSize = this.size();
+ }
+ } ;
+
+
+ // CLIENT_AddRecordBackupRestoreTask接口输入参数
+ public static class NET_IN_ADD_REC_BAK_RST_TASK extends SdkStructure
+ {
+ public int dwSize;
+ public Pointer pszDeviceID; // 设备ID
+ public Pointer pnChannels; // 通道数组
+ public int nChannelCount; // 通道数组大小,由用户申请内存,大小为sizeof(int)*nChannelCount
+ public NET_TIME stuStartTime; // 起始时间
+ public NET_TIME stuEndTime; // 结束时间
+ public byte[] szUrl = new byte[256]; // RTSP URL
+
+ public NET_IN_ADD_REC_BAK_RST_TASK(){
+ this.dwSize = this.size();
+ }
+ } ;
+
+ // CLIENT_RemoveRecordBackupRestoreTask接口输入参数
+ public static class NET_IN_REMOVE_REC_BAK_RST_TASK extends SdkStructure
+ {
+ public int dwSize;
+ public Pointer pnTaskIDs; // 任务ID数组,由用户申请内存,大小为sizeof(int)*nTaskCount
+ public int nTaskCount; // 任务数量
+
+ public NET_IN_REMOVE_REC_BAK_RST_TASK(){
+ this.dwSize = this.size();
+ }
+ } ;
+
+ // CLIENT_QueryRecordBackupRestoreTask接口输入参数
+ public static class NET_IN_QUERY_REC_BAK_RST_TASK extends SdkStructure
+ {
+ public int dwSize;
+
+ public NET_IN_QUERY_REC_BAK_RST_TASK(){
+ this.dwSize = this.size();
+ }
+ } ;
+
+
+ // CLIENT_QueryRecordBackupRestoreTask接口输出参数
+ public static class NET_OUT_QUERY_REC_BAK_RST_TASK extends SdkStructure
+ {
+ public int dwSize;
+ public Pointer pTasks; // 任务数组,由用户申请内存,大小为sizeof(NET_REC_BAK_RST_TASK)*nMaxCount
+ public int nMaxCount; // 数组大小
+ public int nReturnCount; // 返回的任务数量
+ public NET_OUT_QUERY_REC_BAK_RST_TASK(){
+ this.dwSize = this.size();
+ }
+ } ;
+
+ // 开始录像备份恢复
+ public LLong CLIENT_StartRecordBackupRestore(LLong lLoginID);
+
+ // 停止录像备份恢复
+ public void CLIENT_StopRecordBackupRestore(LLong lRestoreID);
+
+ // 添加录像备份恢复任务,pInParam内存由用户申请释放
+ public boolean CLIENT_AddRecordBackupRestoreTask(LLong lRestoreID, NET_IN_ADD_REC_BAK_RST_TASK pInParam, int nWaitTime);
+
+ // 删除录像备份恢复任务,pInParam->NET_IN_REMOVE_REC_BAK_RST_TASK 内存由用户申请释放
+ public boolean CLIENT_RemoveRecordBackupRestoreTask(LLong lRestoreID, Pointer pInParam, int nWaitTime);
+
+ // 获取录像备份恢复任务信息,pInParam与pOutParam内存由用户申请释放
+ // pInParam->NET_IN_QUERY_REC_BAK_RST_TASK pOutParam->NET_OUT_QUERY_REC_BAK_RST_TASK
+ public boolean CLIENT_QueryRecordBackupRestoreTask(LLong lRestoreID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ // 导入配置文件(以JSON格式) pSendBuf: 待发送数据,用户分配内存, nSendBufLen: 待发送长度, reserved: 保留参数
+ public boolean CLIENT_ImportConfigFileJson(LLong lLoginID, Pointer pSendBuf, int nSendBufLen, Pointer reserved, int nWaitTime);
+
+ // 导出配置文件(以JSON格式) pOutBuffer: 接收缓冲,用户分配内存, maxlen: 接收缓冲长度, nRetlen: 实际导出长度, reserved: 保留参数
+ public boolean CLIENT_ExportConfigFileJson(LLong lLoginID, Pointer pOutBuffer, int maxlen, IntByReference nRetlen, Pointer reserved, int nWaitTime);
+
+ // web信息上传接口
+ public boolean CLIENT_TransmitInfoForWeb(LLong lLoginID, Pointer szInBuffer, int dwInBufferSize, Pointer szOutBuffer, int dwOutBufferSize, Pointer pExtData, int waittime);
+
+
+ //================================================GIP200413016开始============================================
+ // 线圈信息(主要是里面的车辆信息)
+ public static class COILS_INFO extends SdkStructure
+ {
+ public int nCarId; // 车辆Id(不是车牌号,ID是设备检测到物体记录的编号)
+ public byte[] PlateNum=new byte[64]; // 车牌号
+ public int emCarType; // 车辆类型(參考EM_NET_CARTYPE)
+ public byte[] byReserved=new byte[1024];// 预留字节
+ } ;
+
+ // 车道信息
+ public static class LANE_INFO extends SdkStructure
+ {
+ public int nLane; // 物理车道号(范围0~4)
+ public int nLaneType; // 车道类型,虚线车道:0, 实线车道:1
+ public double dbLaneOcc; // 车道空间占有率,范围[0.0~1.0]
+ public int nRoadwayNumber; // 自定义车道号(范围0~128)
+ public int nCurrentLaneVehicleNum; // 当前车道车的数量
+ public int nVehicleNum; // 从上次统计结束到现在,通过车的辆数(设备0.5秒下发一次)
+ public int nCarId; // 保留最近有效过车的ID(不是车牌号),CarId是设备检测到物体记录的编号
+ public double dbCarEnterTime; // 编号CarId车辆进入虚线车道的时间
+ public double dbCarLeaveTime; // 编号CarId车辆离开实线车道的时间
+ public int nCarDistance; // 编号CarId车辆行驶的距离,单位:米
+ public int nQueueLen; // 车辆等待时的排队长度,单位:米
+ public double dbCarSpeed; // 编号CarId车辆平均车速,单位:米/秒
+ public int nCoilsInfoNum; // 实际返回线圈信息个数
+ public COILS_INFO[] stuCoilsInfo=(COILS_INFO[])new COILS_INFO().toArray(70*2); // 线圈信息(主要是线圈内的车辆信息)
+ public int nRetSolidLanNum; // 实际返回虚线车道个数
+ public int[] nSolidLaneNum=new int[6]; // 虚线车道对应的实线车道自定义车道号
+ public int nVehicleNumByTypeNum; // 实际返回车辆类型统计个数
+ public int[] nVehicleNumByType=new int[64]; // 类型车辆统计,数组下标对应不同车型(车型参考 EM_NET_CARTYPE),下标值对应车辆类型统计的数量
+ public int nEndLen; // 车辆运行时,尾部车辆位置距离停车线的距离 ,单位:米
+ public byte[] byReserved=new byte[1024]; // 预留字节
+ } ;
+
+ // 交通态势事件(NET_ALARM_TRAFFIC_XINKONG)
+ public static class ALARM_TRAFFIC_XINKONG_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 只有一个事件动作0,表示脉冲事件
+ public double dbPTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+
+ public byte[] szName=new byte[128]; // 事件名称
+ public byte[] byReserved1=new byte[4]; // 字节对齐
+ public int nLaneInfoNum; // 实际上报多少车道信息
+ public LANE_INFO[] stuLaneInfo=(LANE_INFO[])new LANE_INFO().toArray(6); // 车道信息
+ public byte[] byReserved=new byte[1024]; // 预留字节
+ } ;
+
+ //================================================GIP200413016结束============================================
+
+ //================================================ERR200412034开始============================================
+
+ // 同轴IO控制类型
+ public static class EM_COAXIAL_CONTROL_IO_TYPE extends SdkStructure
+ {
+ public static final int EM_COAXIAL_CONTROL_IO_TYPE_UNKNOWN=0; // 未知
+ public static final int EM_COAXIAL_CONTROL_IO_TYPE_LIGHT=1; // 白光灯
+ public static final int EM_COAXIAL_CONTROL_IO_TYPE_SPEAKER=2; // speak音频
+ } ;
+
+ // 同轴IO控制开关
+ public static class EM_COAXIAL_CONTROL_IO_SWITCH extends SdkStructure
+ {
+ public static final int EM_COAXIAL_CONTROL_IO_SWITCH_UNKNOWN=0; // 未知
+ public static final int EM_COAXIAL_CONTROL_IO_SWITCH_OPEN=1; // 开
+ public static final int EM_COAXIAL_CONTROL_IO_SWITCH_CLOSE=2; // 关
+ } ;
+
+ // 同轴IO触发方式
+ public static class EM_COAXIAL_CONTROL_IO_TRIGGER_MODE extends SdkStructure
+ {
+ public static final int EM_COAXIAL_CONTROL_IO_TRIGGER_MODE_UNKNOWN=0; // 未知
+ public static final int EM_COAXIAL_CONTROL_IO_TRIGGER_MODE_LINKAGE_TRIGGER=1; // 联动触发
+ public static final int EM_COAXIAL_CONTROL_IO_TRIGGER_MODE_MANUAL_TRIGGER=2; // 手动触发
+ } ;
+
+
+ // 同轴IO信息结构体
+ public static class NET_COAXIAL_CONTROL_IO_INFO extends SdkStructure
+ {
+ public int emType; // 同轴IO控制类型参考EM_COAXIAL_CONTROL_IO_TYPE
+ public int emSwicth; // 同轴IO控制开关参考EM_COAXIAL_CONTROL_IO_SWITCH
+ public int emMode; // 同轴IO触发方式参考EM_COAXIAL_CONTROL_IO_TRIGGER_MODE
+ public byte[] byReserved=new byte[128]; // 保留字节
+ } ;
+
+ // 同轴IO信息最大个数
+ public static final int MAX_COAXIAL_CONTROL_IO_COUNT =8;
+
+ // 发送同轴IO控制命令, CLIENT_ControlDeviceEx 入参 对应 CTRLTYPE_CTRL_COAXIAL_CONTROL_IO
+ public static class NET_IN_CONTROL_COAXIAL_CONTROL_IO extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nChannel; // 通道号
+ public int nInfoCount; // 同轴IO信息个数
+ public NET_COAXIAL_CONTROL_IO_INFO[] stInfo=(NET_COAXIAL_CONTROL_IO_INFO[])new NET_COAXIAL_CONTROL_IO_INFO().toArray(MAX_COAXIAL_CONTROL_IO_COUNT); // 同轴IO信息
+
+ public NET_IN_CONTROL_COAXIAL_CONTROL_IO(){
+ this.dwSize = this.size();
+ }
+ } ;
+
+ // 发送同轴IO控制命令, CLIENT_ControlDeviceEx 出参 对应 CTRLTYPE_CTRL_COAXIAL_CONTROL_IO
+ public static class NET_OUT_CONTROL_COAXIAL_CONTROL_IO extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+
+ public NET_OUT_CONTROL_COAXIAL_CONTROL_IO(){
+ this.dwSize = this.size();
+ }
+ } ;
+
+ //================================================ERR200412034结束============================================
+
+ //================================================ERR200410078 DH-TPC-BF2221开始============================================
+
+ // 火灾配置类型
+ public static class NET_EM_FIREWARNING_MODE_TYPE extends SdkStructure
+ {
+ public static final int NET_EM_FIREWARNING_TYPE_PTZPRESET=0; // 云台预置点模式(默认)
+ public static final int NET_EM_FIREWARNING_TYPE_SPACEEXCLUDE=1; // 空间排除模式
+ } ;
+
+ // 火灾预警模式配置 NET_EM_CFG_FIRE_WARNINGMODE
+ public static class NET_FIREWARNING_MODE_INFO extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int emFireWarningMode; // 火灾预警模式 参考NET_EM_FIREWARNING_MODE_TYPE
+
+ public NET_FIREWARNING_MODE_INFO(){
+ this.dwSize = this.size();
+ }
+ } ;
+
+ public static final int MAX_FIREWARNING_DETECTRGN_NUM =32; // 最大火警区域检测的个数
+ public static final int MAX_FIREWARNING_RULE_NUM =32; // 最大火警规则
+ public static final int MAX_FIREWARNING_DETECTWND_NUM =8; // 最大火警检测窗口个数
+
+ // 时间表信息
+ public static class NET_CFG_TIME_SCHEDULE extends SdkStructure
+ {
+ public int bEnableHoliday; // 是否支持节假日配置,默认为不支持,除非获取配置后返回为TRUE,不要使能假日配置
+ public NET_TSECT[] stuTimeSection=(NET_TSECT[])new NET_TSECT().toArray(NET_N_SCHEDULE_TSECT*NET_N_REC_TSECT); // 第一维前7个元素对应每周7天,第8个元素对应节假日,每天最多6个时间段
+ } ;
+
+ // 火灾预警联动项
+ public static class NET_FIREWARN_EVENTHANDLE_INFO extends SdkStructure
+ {
+ public NET_CFG_TIME_SCHEDULE stuTimeSection; // 报警时间段
+ public int bRecordEnable; // 录像使能,必须同时有RecordChannels。使能为TRUE,且事件action为start开始录像,stop停止录像。如果FALSE,则不做录像
+ public int nRecordChannelNum; // 录像通道个数
+ public int[] nRecordChannels=new int[32]; // 录像通道号列表
+ public int nRecordLatch; // 录像延时时间(单位:秒)范围[10,300]
+ public int bAlarmOutEnable; // 报警输出使能
+ public int nAlarmOutChannelNum; // 报警输出通道个数
+ public int[] nAlarmOutChannels=new int[32]; // 报警输出通道号列表
+ public int nAlarmOutLatch; // 报警输入停止后,输出延时时间(单位:秒)范围[10, 300]
+ public int nPtzLinkNum; // 云台配置数
+ public SDK_PTZ_LINK[] struPtzLink=(SDK_PTZ_LINK[])new SDK_PTZ_LINK().toArray(16); // 云台联动
+ public int bPtzLinkEnable; // 云台联动使能
+ public int bSnapshotEnable; // 快照使能
+ public int nSnapshotChannelNum; // 快照通道个数
+ public int[] nSnapshotChannels=new int[32]; // 快照通道号列表
+ public int bMailEnable; // 发送邮件,如果有图片,作为附件
+ public byte[] byReserved=new byte[1024]; // 保留字节
+ } ;
+
+ public static class NET_POSTIONF extends SdkStructure
+ {
+ public float fHorizontalAngle; // 水平角度 [-1,1]
+ public float fVerticalAngle; // 垂直角度 [-1,1]
+ public float fMagnification; // 放大倍数 [-1,1]
+ } ;
+
+ // 火警检测窗口
+ public static class NET_FIREWARN_DETECTWND_INFO extends SdkStructure
+ {
+ public int nRgnNum; // 检测区域的个数
+ public byte[] byReservedAlign=new byte[4]; // 保留字节
+ public long[] nRegions=new long[MAX_FIREWARNING_DETECTRGN_NUM]; // 检测区域
+ public NET_POSTIONF stuPostion; // 空间排除信息
+ public int nTargetSize; // 目标的尺寸(火警配置为:Normal有效,单位:像素)
+ public int nSensitivity; // 检测灵敏度(火警配置为:Normal有效)
+ public int nWindowsID; // 窗口ID
+ public byte[] szName=new byte[32]; // 窗口名称
+ public byte[] byReserved=new byte[256]; // 保留字节
+ } ;
+
+ // 火灾预警规则信息
+ public static class NET_FIREWARN_RULE_INFO extends SdkStructure
+ {
+ public int bEnable; // 火灾预警功能是否开启
+ public int nPresetId; // 预置点编号,火灾预警模式为预置点模式生效
+ public int nRow; // 火灾检测区域的行数
+ public int nCol; // 火灾检测区域的列数
+ public int emFireWarningDetectMode; // 火警检测模式 参考NET_EM_FIREWARNING_DETECTMODE_TYPE
+ public int emFireWarningDetectTragetType; // 火警检测目标类型 参考NET_EM_FIREWARNING_DETECTTARGET_TYPE
+ public int bTimeDurationEnable; // 是否启用持续时间
+ public int nFireDuration; // 观察火情持续时间,单位秒。水平旋转组检测火点时,为避免同一点重复检测,
+ // 设置超时时间,超过此时间,跳过此点
+
+ public NET_FIREWARN_EVENTHANDLE_INFO stuEventHandler; // 火警联动信息
+ public int nDetectWindowNum; // 窗口个数
+ public NET_FIREWARN_DETECTWND_INFO[] stuDetectWnd=(NET_FIREWARN_DETECTWND_INFO[])new NET_FIREWARN_DETECTWND_INFO().toArray(MAX_FIREWARNING_DETECTWND_NUM); // 火警检测窗口
+ public byte[] byReserved=new byte[256]; // 保留字节
+ } ;
+
+ // 火灾预警配置(结构体较大,建议用New分配内存) NET_EM_CFG_FIRE_WARNING
+ public static class NET_FIRE_WARNING_INFO extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nFireWarnRuleNum; // 火灾预警配置个数
+ public NET_FIREWARN_RULE_INFO[] stuFireWarnRule=(NET_FIREWARN_RULE_INFO[])new NET_FIREWARN_RULE_INFO().toArray(MAX_FIREWARNING_RULE_NUM); // 火灾预警配置规则
+
+ public NET_FIRE_WARNING_INFO(){
+ this.dwSize = this.size();
+ }
+ } ;
+ //================================================ERR200410078 DH-TPC-BF2221结束============================================
+
+ //================================================ERR200420018============================================
+
+ // 事件类型 EVENT_IVS_VIDEOABNORMALDETECTION(视频异常事件)对应的数据块描述信息
+ public static class DEV_EVENT_VIDEOABNORMALDETECTION_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName=new byte[128]; // 事件名称
+ public byte[] bReserved1=new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte bType; // 异常类型, 255-无意义(通常是设备了返回错误值)0-视频丢失, 1-视频冻结, 2-摄像头遮挡, 3-摄像头移动, 4-过暗, 5-过亮, 6-图像偏色, 7-噪声干扰, 8-条纹检测
+ public byte[] byReserved=new byte[1];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public int nSourceIndex; // 事件源设备上的index,-1表示数据无效
+ public byte[] szSourceDevice=new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ public int nOccurrenceCount; // 事件触发累计次数
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public SCENE_IMAGE_INFO_EX stuSceneImage = new SCENE_IMAGE_INFO_EX(); // 全景广角图信息
+ public NET_IMAGE_INFO_EX2 stuImageInfo[] = (NET_IMAGE_INFO_EX2[])new NET_IMAGE_INFO_EX2().toArray(32); //图片信息数组
+ public int nImageInfoNum; //图片信息个数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte byReserved2[] = new byte[1024]; //预留字节
+ } ;
+
+ // 人员信息
+ public static class NET_HUMAN extends SdkStructure
+ {
+ public NET_RECT stuBoundingBox; // 包围盒(8192坐标系)
+ public int nObjectID; // 物体ID
+ public byte[] szSerialUUID=new byte[22]; // 智能物体全局唯一物体标识
+ // 有效数据位21位,包含’\0’
+ // 前2位%d%d:01-视频片段, 02-图片, 03-文件, 99-其他
+ // 中间14位YYYYMMDDhhmmss:年月日时分秒
+ // 后5位%u%u%u%u%u:物体ID,如00001
+ public byte[] bReserved=new byte[230]; // 保留字节
+ };
+
+ // 事件类型 EVENT_IVS_STAY_ALONE_DETECTION (单人独处事件) 对应的数据块描述信息
+ public static class DEV_EVENT_STAY_ALONE_DETECTION_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public byte[] szName=new byte[NET_EVENT_NAME_LEN]; // 事件名称
+ public double PTS; // 时间戳(单位是毫秒)
+ public int emClassType; // 智能事件所属大类参考EM_CLASS_TYPE
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int UTCMS; // UTC时间对应的毫秒数
+ public int nEventID; // 事件ID
+ public NET_HUMAN stuHuman; // 人员信息
+ public SCENE_IMAGE_INFO_EX stuSceneImage; // 全景图
+ public int nDetectRegionNum; // 检测区域顶点数
+ public DH_POINT[] stuDetectRegion=(DH_POINT[])new DH_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 检测区域
+ public byte[] byReserved=new byte[1024]; // 保留字节
+ };
+
+ // 事件类型 EVENT_IVS_PSRISEDETECTION (囚犯起身事件) 对应的数据块描述信息
+ public static class DEV_EVENT_PSRISEDETECTION_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName=new byte[128]; // 事件名称
+ public byte[] bReserved1=new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public DH_MSG_OBJECT stuObject; // 检测到的物体
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public DH_POINT[] DetectRegion=(DH_POINT[])new DH_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public double dInitialUTC; // 事件初始UTC时间 UTC为事件的UTC (1970-1-1 00:00:00)秒数。
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved=new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public int nSourceIndex; // 事件源设备上的index,-1表示数据无效
+ public byte[] szSourceDevice=new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ public int nOccurrenceCount; // 事件触发累计次数
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public byte[] szSerialUUID=new byte[22]; // 智能物体全局唯一物体标识
+ // 有效数据位21位,包含’\0’
+ // 前2位%d%d:01-视频片段, 02-图片, 03-文件, 99-其他
+ // 中间14位YYYYMMDDhhmmss:年月日时分秒
+ // 后5位%u%u%u%u%u:物体ID,如00001
+ public byte[] bReserved=new byte[594]; // 保留字节,留待扩展.
+ };
+ //--------------------------------------------------------ERR200420018结束------------------------------------------------------------------------//
+
+ //--------------------------------------------------------ERR200424047------------------------------------------------------------------------//
+
+ // 逻辑屏显示内容
+ public static class NET_TRAFFIC_LATTICE_SCREEN_SHOW_CONTENTS extends SdkStructure
+ {
+ public int emContents; // 逻辑屏显示的内容:参考NET_EM_SCREEN_SHOW_CONTENTS
+ public byte[] byReserved1=new byte[4]; // 字节对齐
+ public byte[] szCustomStr=new byte[32]; // 自定义内容,emContents为 EM_TRAFFIC_LATTICE_SCREEN_CUSTOM 时有效
+ public byte[] byReserved=new byte[32]; // 预留
+ };
+
+ // 点阵屏显示信息
+ public static class NET_TRAFFIC_LATTICE_SCREEN_SHOW_INFO extends SdkStructure
+ {
+ public NET_TRAFFIC_LATTICE_SCREEN_SHOW_CONTENTS[] stuContents=(NET_TRAFFIC_LATTICE_SCREEN_SHOW_CONTENTS[])
+ new NET_TRAFFIC_LATTICE_SCREEN_SHOW_CONTENTS().toArray(64); // 逻辑屏显示内容
+ public int nContentsNum; // 逻辑屏个数
+ public byte[] byReserved=new byte[1020]; // 预留
+ };
+
+ // 点阵屏显示信息配置, 对应枚举 NET_EM_CFG_TRAFFIC_LATTICE_SCREEN
+ public static class NET_CFG_TRAFFIC_LATTICE_SCREEN_INFO extends SdkStructure
+ {
+
+ public int dwSize; // 结构体大小
+ public int nStatusChangeTime; // 状态切换间隔,单位:秒,取值10 ~ 60
+ public NET_TRAFFIC_LATTICE_SCREEN_SHOW_INFO stuNormal=new NET_TRAFFIC_LATTICE_SCREEN_SHOW_INFO(); // 常态下
+ public NET_TRAFFIC_LATTICE_SCREEN_SHOW_INFO stuCarPass=new NET_TRAFFIC_LATTICE_SCREEN_SHOW_INFO(); // 过车时
+ public int emShowType; /** 显示方式 {@link com.netsdk.lib.enumeration.NET_EM_LATTICE_SCREEN_SHOW_TYPE}*/
+ public int emControlType; /** 控制方式 {@link com.netsdk.lib.enumeration.NET_EM_LATTICE_SCREEN_CONTROL_TYPE}*/
+ public int emBackgroundMode; /** 逻辑屏背景风格模式 {@link com.netsdk.lib.enumeration.NET_EM_LATTICE_SCREEN_BACKGROUND_MODE} */
+ public byte[] szPlayList=new byte[10*64]; // 资源文件播放列表,支持视频文件和图片文件播放,按照数组顺序循环播放
+ public int nPlayListNum; // 资料文件个数
+ public NET_TRAFFIC_LATTICE_SCREEN_LOGO_INFO stuLogoInfo=new NET_TRAFFIC_LATTICE_SCREEN_LOGO_INFO(); // Logo信息
+ public NET_TRAFFIC_LATTICE_SCREEN_ALARM_NOTICE_INFO stuAlarmNoticeInfo=new NET_TRAFFIC_LATTICE_SCREEN_ALARM_NOTICE_INFO(); // 报警提示显示信息
+ public NET_CFG_TRAFFIC_LATTICE_SCREEN_INFO(){
+ this.dwSize = this.size();
+ }
+ };
+
+ // 车位灯色
+ public static class NET_PARKINGSPACELIGHT_INFO extends SdkStructure
+ {
+ public int nRed; // 红灯: -1:无效, 0/灭, 1/亮, 2/闪烁
+ public int nYellow; // 黄灯: -1:无效, 0/灭, 1/亮, 2/闪烁
+ public int nBlue; // 蓝灯: -1:无效, 0/灭, 1/亮, 2/闪烁
+ public int nGreen; // 绿灯: -1:无效, 0/灭, 1/亮, 2/闪烁
+ public int nPurple; // 紫灯: -1:无效, 0/灭, 1/亮, 2/闪烁
+ public int nWhite; // 白灯: -1:无效, 0/灭, 1/亮, 2/闪烁
+ public int nPink; // 粉等: -1:无效, 0/灭, 1/亮, 2/闪烁
+ public byte[] byReserved=new byte[32];// 保留字节
+
+ public void setInfo(int nRed, int nYellow, int nBlue, int nGreen, int nPurple, int nWhite,int nPink) {
+ this.nRed = nRed;
+ this.nYellow = nYellow;
+ this.nBlue = nBlue;
+ this.nGreen = nGreen;
+ this.nPurple = nPurple;
+ this.nWhite = nWhite;
+ this.nPink = nPink;
+ }
+ } ;
+
+ // 网络异常状态灯色
+ public static class NET_NETWORK_EXCEPTION_INFO extends SdkStructure
+ {
+ public NET_PARKINGSPACELIGHT_INFO[] stNetPortAbortInfo=(NET_PARKINGSPACELIGHT_INFO[])
+ new NET_PARKINGSPACELIGHT_INFO().toArray(5); // 网口断开状态灯色
+ public int nRetNetPortAbortNum; // 实际返回的个数
+ public NET_PARKINGSPACELIGHT_INFO stuSpaceSpecialInfo; // 车位专用状态灯色
+ public NET_PARKINGSPACELIGHT_INFO stuSpaceChargingInfo; // 充电车位状态灯色
+ public byte[] byReserved=new byte[256]; // 保留字节
+ } ;
+
+
+ // 车位状态对应的车位指示灯色 对应 NET_EM_CFG_PARKINGSPACELIGHT_STATE
+ public static class NET_PARKINGSPACELIGHT_STATE_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public NET_PARKINGSPACELIGHT_INFO stuSpaceFreeInfo; // 车位空闲状态灯色
+ public NET_PARKINGSPACELIGHT_INFO stuSpaceFullInfo; // 车位占满状态灯色
+ public NET_PARKINGSPACELIGHT_INFO stuSpaceOverLineInfo; // 车位压线状态灯色
+ public NET_PARKINGSPACELIGHT_INFO stuSpaceOrderInfo; // 车位预定状态灯色
+ public NET_NETWORK_EXCEPTION_INFO stuNetWorkExceptionInfo; // 网络异常状态灯色
+
+ public NET_PARKINGSPACELIGHT_STATE_INFO(){
+ this.dwSize = this.size();
+ }
+ } ;
+
+ // 车位监管状态
+ public static class EM_CFG_LANE_STATUS extends SdkStructure
+ {
+ public static final int EM_CFG_LANE_STATUS_UNKOWN = -1; // 状态未知
+ public static final int EM_CFG_LANE_STATUS_UNSUPERVISE = 0; // 不监管
+ public static final int EM_CFG_LANE_STATUS_SUPERVISE = 1; // 监管
+ };
+
+ public static final int MAX_LANES_NUM = 64 ; // 灯组监管车位的最多个数
+
+ // 单个车位指示灯本机配置
+ public static class CFG_PARKING_SPACE_LIGHT_GROUP_INFO extends SdkStructure
+ {
+ public int bEnable; // 为TRUE时该配置生效,为FALSE时该配置无效
+ public int[] emLaneStatus=new int[MAX_LANES_NUM];// 灯组监管的车位,下标表示车位号;参考EM_CFG_LANE_STATUS
+ public int nLanesNum; // 有效的车位数量(可以设为监管或不监管的车位数量)
+ public int bAcceptNetCtrl; // 是否接受远程控制
+ };
+
+ public static final int MAX_LIGHT_GROUP_INFO_NUM = 8 ; // 车位指示灯本机配置的最多个数
+
+ // 车位指示灯本机配置 CFG_CMD_PARKING_SPACE_LIGHT_GROUP
+ public static class CFG_PARKING_SPACE_LIGHT_GROUP_INFO_ALL extends SdkStructure
+ {
+ public int nCfgNum; // 获取到的配置个数
+ public CFG_PARKING_SPACE_LIGHT_GROUP_INFO[] stuLightGroupInfo=(CFG_PARKING_SPACE_LIGHT_GROUP_INFO[])
+ new CFG_PARKING_SPACE_LIGHT_GROUP_INFO().toArray(MAX_LIGHT_GROUP_INFO_NUM); // 车位指示灯本机配置
+ };
+ //--------------------------------------------------------ERR200424047结束------------------------------------------------------------------------//
+
+ //--------------------------------------------------------ERR200426006------------------------------------------------------------------------//
+ // 灯光设备类型
+ public static class EM_LIGHT_TYPE extends SdkStructure
+ {
+ public static final int EM_LIGHT_TYPE_UNKNOWN=0; // 未知类型
+ public static final int EM_LIGHT_TYPE_COMMLIGHT=1; // 普通灯光
+ public static final int EM_LIGHT_TYPE_LEVELLIGHT=2; // 可调光
+ };
+
+ // 串口地址
+ public static class CFG_COMMADDR_INFO extends SdkStructure
+ {
+ public int nAddressNum; // 串口地址个数
+ public int[] nAddress=new int[MAX_ADDRESS_NUM]; // 地址描述,不同厂商地址位不同,用数组表示
+ };
+
+ public static final int MAX_ADDRESS_NUM =16; // 最大串口地址个数
+ public static final int MAX_DEVICE_ID_LEN =48; // 最大设备编码长度
+ public static final int MAX_DEVICE_MARK_LEN =64; // 最大设备描述长度
+ public static final int MAX_BRAND_NAME_LEN =64; // 最大设备品牌长度
+ // 灯光设备配置信息 (对应 CFG_CMD_LIGHT )
+ public static class CFG_LIGHT_INFO extends SdkStructure
+ {
+ public byte[] szDeviceID=new byte[MAX_DEVICE_ID_LEN]; // 设备编码,惟一标识符
+ public byte[] szName=new byte[MAX_DEVICE_MARK_LEN]; // 设备描述
+ public byte[] szBrand=new byte[MAX_BRAND_NAME_LEN]; // 设备品牌
+ public CFG_COMMADDR_INFO stuCommAddr; // 串口地址
+ public int nPositionID; // 设备在区域中编号
+ public CFG_POLYGON stuPosition; // 坐标
+ public int nState; // 设备状态: 1-打开,0-关闭
+ public int nRange; // 灯亮度幅度值 0-7 , emType 为 EM_LIGHT_TYPE_ADJUSTABLE 有意义
+ public int emType; // 灯光设备类型;参考EM_LIGHT_TYPE
+ };
+
+ // 近光灯信息
+ public static class CFG_NEARLIGHT_INFO extends SdkStructure
+ {
+ public int bEnable; // 是否使能,TRUE使能,FALSE不使能
+ public int dwLightPercent; // 灯光亮度百分比值(0~100)
+ public int dwAnglePercent; // 灯光角度百分比值(0~100)
+ };
+
+ // 远光灯信息
+ public static class CFG_FARLIGHT_INFO extends SdkStructure
+ {
+ public int bEnable; // 是否使能,TRUE使能,FALSE不使能
+ public int dwLightPercent; // 灯光亮度百分比值(0~100)
+ public int dwAnglePercent; // 灯光角度百分比值(0~100)
+ };
+
+ public static final int MAX_LIGHTING_NUM =16;
+
+ // 灯光设置详情
+ public static class CFG_LIGHTING_DETAIL extends SdkStructure
+ {
+ public int nCorrection; // 灯光补偿 (0~4) 倍率优先时有效
+ public int nSensitive; // 灯光灵敏度(0~5)倍率优先时有效,默认为3
+ public int emMode; // 灯光模式,参考EM_CFG_LIGHTING_MODE
+ public int nNearLight; // 近光灯有效个数
+ public CFG_NEARLIGHT_INFO[] stuNearLights=(CFG_NEARLIGHT_INFO[])
+ new CFG_NEARLIGHT_INFO().toArray(MAX_LIGHTING_NUM); // 近光灯列表
+ public int nFarLight; // 远光灯有效个数
+ public CFG_FARLIGHT_INFO[] stuFarLights=(CFG_FARLIGHT_INFO[])
+ new CFG_FARLIGHT_INFO().toArray(MAX_LIGHTING_NUM); // 远光灯列表
+ };
+
+
+ // 灯光模式
+ public static class EM_CFG_LIGHTING_MODE extends SdkStructure
+ {
+ public static final int EM_CFG_LIGHTING_MODE_UNKNOWN=0; // 未知
+ public static final int EM_CFG_LIGHTING_MODE_MANUAL=1; // 手动
+ public static final int EM_CFG_LIGHTING_MODE_ZOOMPRIO=2; // 倍率优先
+ public static final int EM_CFG_LIGHTING_MODE_TIMING=3; // 定时模式
+ public static final int EM_CFG_LIGHTING_MODE_AUTO=4; // 自动
+ public static final int EM_CFG_LIGHTING_MODE_OFF=5; // 关闭模式
+ };
+
+ public static final int MAX_LIGHTING_DETAIL_NUM =16;
+
+ // 灯光设置(对应 CFG_CMD_LIGHTING 命令)
+ public static class CFG_LIGHTING_INFO extends SdkStructure
+ {
+ public int nLightingDetailNum; // 灯光设置有效个数
+ public CFG_LIGHTING_DETAIL[] stuLightingDetail=(CFG_LIGHTING_DETAIL[])
+ new CFG_LIGHTING_DETAIL().toArray(MAX_LIGHTING_DETAIL_NUM); // 灯光设置信息列表
+ };
+ //--------------------------------------------------------ERR200426006结束------------------------------------------------------------------------//
+
+ //--------------------------------------------------------ERR200427081开始------------------------------------------------------------------------//
+
+
+
+ // 事件类型EVENT_IVS_HIGH_TOSS_DETECT(高空抛物检测事件)对应的数据块描述信息
+ public static class DEV_EVENT_HIGH_TOSS_DETECT_INFO extends SdkStructure
+ {
+ /**
+ *通道号
+ */
+ public int nChannelID;
+ /**
+ * 0:脉冲
+ * 1:开始
+ * 2:停止
+ */
+ public int nAction;
+ /**
+ * 事件名称
+ */
+ public byte[] szName=new byte[128];
+ /**
+ * 时间戳(单位是毫秒)
+ */
+ public double PTS;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX UTC;
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * 智能事件规则编号,用于标示哪个规则触发的事件
+ */
+ public int nRuleID;
+ /**
+ * 智能事件所属大类,枚举值参考{@link EM_CLASS_TYPE}
+ */
+ public int emClassType;
+ /**
+ * 物体信息
+ */
+ public NET_HIGHTOSS_OBJECT_INFO[] stuObjInfos=(NET_HIGHTOSS_OBJECT_INFO[])
+ new NET_HIGHTOSS_OBJECT_INFO().toArray(50);
+ /**
+ * 物体个数
+ */
+ public int nObjNum;
+ /**
+ * 检测区域顶点数
+ */
+ public int nDetectRegionNum;
+ /**
+ * 检测区域,[0,8192)
+ */
+ public NET_POINT[] stuDetectRegion=(NET_POINT[])new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM);
+ /**
+ * 视频分析帧序号
+ */
+ public int nFrameSequence;
+ /**
+ * 事件组ID, 同一物体抓拍过程内GroupID相同
+ */
+ public int nGroupID;
+ /**
+ * 抓拍序号,从1开始
+ */
+ public int nIndexInGroup;
+ /**
+ * 抓拍张数
+ */
+ public int nCountInGroup;
+ /**
+ * 图片信息
+ */
+ public NET_EVENT_IMAGE_OFFSET_INFO stuImageInfo;
+ /**
+ * 是否上传大图, true表示第一个图片为全景大图,信息由ImageInfo来表示
+ */
+ public boolean bIsGlobalScene;
+ /**
+ * 用于标记抓拍帧
+ */
+ public int nMark;
+ /**
+ * 预留字节
+ */
+ public byte[] byReserved=new byte[384];
+
+ @Override
+ public String toString() {
+ return "DEV_EVENT_HIGH_TOSS_DETECT_INFO{" +
+ "通道号=" + nChannelID +
+ ", nAction=" + nAction +
+ ", 事件名称=" + new String(szName, Charset.forName("GBK")).trim() +
+ ", s事件戳=" + PTS +
+ ", 事件发生时间=" + UTC.toString() +
+ ", nEventID=" + nEventID +
+ ", 智能事件规则编号=" + nRuleID +
+ ", 智能事件所属大类=" + emClassType +
+ ", stuObjInfos=" + Arrays.toString(stuObjInfos) +
+ ", 物体个数=" + nObjNum +
+ ", 检测区域顶点数=" + nDetectRegionNum +
+ ", stuDetectRegion=" + Arrays.toString(stuDetectRegion) +
+ ", 帧序号=" + nFrameSequence +
+ ", 事件组ID=" + nGroupID +
+ ", 抓拍序号=" + nIndexInGroup +
+ ", 抓拍张数=" + nCountInGroup +
+ ", 图片信息=" + stuImageInfo +
+ ", 是否大图=" + bIsGlobalScene +
+ ", 标记抓拍帧=" + nMark +
+ '}';
+ }
+ }
+ public static class NET_EVENT_IMAGE_OFFSET_INFO extends SdkStructure{
+ /**
+ * 偏移
+ */
+ public int nOffSet;
+ /**
+ * 图片大小,单位字节
+ */
+ public int nLength;
+ /**
+ * 图片宽度
+ */
+ public int nWidth;
+ /**
+ * 图片高度
+ */
+ public int nHeight;
+ /**
+ * 图片路径
+ */
+ public byte[] szPath=new byte[260];
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved=new byte[252];
+
+ @Override
+ public String toString() {
+ return "NET_EVENT_IMAGE_OFFSET_INFO{" +
+ "nOffSet=" + nOffSet +
+ ", nLength=" + nLength +
+ ", nWidth=" + nWidth +
+ ", nHeight=" + nHeight +
+ ", szPath=" + new String(szPath,Charset.forName("GBK")) +
+ '}';
+ }
+ }
+
+ // 高空抛物物体信息
+ public static class NET_HIGHTOSS_OBJECT_INFO extends SdkStructure
+ {
+ public int nObjectID; // 物体ID
+ public int emObjAction; // 物体动作类型;参考EM_HIGHTOSS_ACTION_TYPE
+ public NET_RECT stuBoundingBox; // 包围盒
+ public int nConfidence; // 置信度
+ public int emObjectType; // 物体类型;参考EM_ANALYSE_OBJECT_TYPE
+ public NET_POINT stuCenter; // 物体型心
+ public NET_EVENT_IMAGE_OFFSET_INFO stuImageInfo; // 抓拍小图
+ public byte[] byReserved=new byte[1516];// 预留字节 // 预留字节
+
+ @Override
+ public String toString() {
+ return "NET_HIGHTOSS_OBJECT_INFO{" +
+ "nObjectID=" + nObjectID +
+ ", 动作类型=" + emObjAction +
+ ", stuBoundingBox=" + stuBoundingBox +
+ ", 置信度=" + nConfidence +
+ ", 物体类型=" + emObjectType +
+ ",物体型心="+stuCenter +
+ ",抓拍小图="+stuImageInfo.toString()+
+ '}';
+ }
+ } ;
+
+ // 登陆时TLS加密模式
+ public static class EM_LOGIN_TLS_TYPE extends SdkStructure {
+ public static final int EM_LOGIN_TLS_TYPE_NO_TLS = 0; // 不走tls加密, 默认方式
+ public static final int EM_LOGIN_TLS_TYPE_TLS_ADAPTER = 1; // 自适应tls加密
+ public static final int EM_LOGIN_TLS_TYPE_TLS_COMPEL = 2; // 强制tls加密
+ public static final int EM_LOGIN_TLS_TYPE_TLS_MAIN_ONLY = 3; // 部分tls加密
+ }
+ // CLIENT_LoginWithHighLevelSecurity 输入参数
+ public static class NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public byte[] szIP=new byte[64]; // IP
+ public int nPort; // 端口
+ public byte[] szUserName=new byte[64]; // 用户名
+ public byte[] szPassword=new byte[64]; // 密码
+ public int emSpecCap; // 登录模式
+ public byte[] byReserved=new byte[4]; // 字节对齐
+ public Pointer pCapParam; // 见 CLIENT_LoginEx 接口 pCapParam 与 nSpecCap 关系
+ public int emTLSCap; //登录的TLS模式,参考EM_LOGIN_TLS_TYPE,目前仅支持EM_LOGIN_SPEC_CAP_TCP,EM_LOGIN_SPEC_CAP_SERVER_CONN 模式下的 tls登陆
+
+ public NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ };
+
+ // CLIENT_LoginWithHighLevelSecurity 输出参数
+ public static class NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public NET_DEVICEINFO_Ex stuDeviceInfo; // 设备信息
+ public int nError; // 错误码,见 CLIENT_Login 接口错误码
+ public byte[] byReserved=new byte[132]; // 预留字段
+
+ public NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ };
+
+ // 高安全级别登陆
+ public LLong CLIENT_LoginWithHighLevelSecurity(NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstInParam, NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam);
+
+ // GDPR使能全局开关
+ public void CLIENT_SetGDPREnable(boolean bEnable);
+
+ // 合成通道配置(对应CFG_CMD_COMPOSE_CHANNEL)
+ public static class CFG_COMPOSE_CHANNEL extends SdkStructure
+ {
+ public int emSplitMode; // 分割模式,写入枚举值 枚举值在 CFG_SPLITMODE 类中定义,不要自己写
+ public int[] nChannelCombination = new int[MAX_VIDEO_CHANNEL_NUM]; // 割模式下的各子窗口显示内容 最大 MAX_VIDEO_CHANNEL_NUM
+ public int nChannelCount; // 分割窗口数量
+ }
+
+ // 画中画方案
+ public static class CFG_PICINPIC_INFO extends SdkStructure
+ {
+
+ public int nMaxSplit; // 内存申请的CFG_SPLIT_INFO个数,最大值通过CLIENT_GetSplitCaps接口获取,见nModeCount
+ public int nReturnSplit; // 解析得到实际使用的或封装发送的CFG_SPLIT_INFO个数
+ public Pointer pSplits; // 分割方案,指向 CFG_SPLIT_INFO
+ }
+
+ // 分割方案
+ public static class CFG_SPLIT_INFO extends SdkStructure
+ {
+ public int emSplitMode; // CFG_SPLITMODE分割模式,通过CLIENT_GetSplitCaps接口获取,见emSplitMode
+ public int nMaxChannels; // 申请内存CFG_SPLIT_CHANNEL_INFO个数, 比如有16个通道,nMaxChannels就是16,SPLITMODE_4模式,则按顺序依次分为4组
+ public int nReturnChannels; // 解析返回通道个数,要封装发送的通道个数
+ public Pointer pSplitChannels; // 分割通道信息,指向 CFG_SPLIT_CHANNEL_INFO
+ }
+
+ // 分割通道
+ public static class CFG_SPLIT_CHANNEL_INFO extends SdkStructure
+ {
+ public int bEnable; // 使能
+ public byte[] szDeviceID = new byte[AV_CFG_Device_ID_Len]; // 设备ID
+ public int nChannelID; // 通道号(0开始)
+ public int nMaxSmallChannels; // 小画面通道个数,每个通道一个CFG_SMALLPIC_INFO,这里最大应该是设备通道数减一
+ public int nReturnSmallChannels; // 解析返回的或封装发送的小画面通道个数
+ public Pointer pPicInfo; // 小画面信息 CFG_SMALLPIC_INFO
+ }
+
+ // 审讯画中画需求
+ // 小画面窗口信息
+ public static class CFG_SMALLPIC_INFO extends SdkStructure
+ {
+ public byte[] szDeviceID = new byte[AV_CFG_Device_ID_Len]; // 设备ID
+ public int nChannelID; // 通道号(0开始)
+ public int bAudio; // 大画面是否混合小画面音频
+ public CFG_RECT stuPosition; // 使用相对坐标体系,取值均为0-8192,在整个屏幕上的位置
+ }
+
+ //--------------------------------------------------------ERR200507125开始------------------------------------------------------------------------//
+ // 空闲动作配置信息
+ public static class CFG_IDLE_MOTION_INFO extends SdkStructure
+ {
+ public int bEnable; // 使能
+ public int nTime; // 启动空闲动作的时间1~60分钟
+ public int emFunction; // 空闲动作功能,见枚举 EM_CFG_IDLEMOTION_FUNCTION
+ public int nPresetId; // 预置点编号, 范围参照CFG_PTZ_PROTOCOL_CAPS_INFO的wPresetMin和wPresetMax
+ public int nScanId; // 自动线扫编号, 范围参照CFG_PTZ_PROTOCOL_CAPS_INFO的wAutoScanMin和wAutoScanMax
+ public int nTourId; // 巡航编号, 范围参照CFG_PTZ_PROTOCOL_CAPS_INFO的wTourMin和wTourMax
+ public int nPatternId; // 自动巡迹编号, 范围参照CFG_PTZ_PROTOCOL_CAPS_INFO的wPatternMin和wPatternMax
+ public int nSecond; // 启动空闲动作的时长(秒数)范围0-59秒,总时长为nTime * 60 + nSecond
+ };
+
+ //--------------------------------------------------------ERR200507125结束------------------------------------------------------------------------//
+
+ //--------------------------------------------------------ERR200513038-TASK1开始------------------------------------------------------------------------//
+
+
+ // 每个通道的RTMP信息
+ public static class NET_CHANNEL_RTMP_INFO extends SdkStructure
+ {
+ public int bEnable; // 是否使能
+ public int nChannel; // 通道号(URL中的Channel)
+ public byte[] szUrl=new byte[512]; // RTMP连接URL
+ public byte[] byReserved=new byte[1024]; // 预留字段
+ };
+
+ // RTMP 配置
+ public static class NET_CFG_RTMP_INFO extends SdkStructure
+ {
+ public int dwSize; // 结构体大小,赋值为sizeof(NET_CFG_RTMP_INFO)
+ public int bEnable; // RTMP配置是否开启
+ public byte[] szAddr=new byte[256]; // RTMP服务器地址
+ public int nPort; // RTMP服务器端口
+ public byte[] szCustomPath=new byte[256]; // 路径名
+ public byte[] szStreamPath=new byte[256]; // 码流路径前缀:不同通道以后缀数字区分
+ public byte[] szKey=new byte[128]; // 获取RTMP地址时的Key
+ public Pointer pstuMainStream; // 主码流信息,用户分配内存,内存大小为 sizeof(NET_CHANNEL_RTMP_INFO) * nMainStream
+ public int nMainStream; // pstuMainStream 个数
+ public int nMainStreamRet; // 返回的 pstuMainStream 个数(获取配置时有效)
+ public Pointer pstuExtra1Stream; // 辅码流1信息,用户分配内存,内存大小为 sizeof(NET_CHANNEL_RTMP_INFO) * nExtra1Stream
+ public int nExtra1Stream; // pstuExtra1Stream 个数
+ public int nExtra1StreamRet; // 返回的 nExtra1StreamRet 个数(获取配置时有效)
+ public Pointer pstuExtra2Stream; // 辅码流2信息,用户分配内存,内存大小为 sizeof(NET_CHANNEL_RTMP_INFO) * nExtra2Stream
+ public int nExtra2Stream; // pstuExtra2Stream 个数
+ public int nExtra2StreamRet; // 返回的 nExtra2StreamRet 个数(获取配置时有效)
+
+ public NET_CFG_RTMP_INFO()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ };
+ //--------------------------------------------------------ERR200513038开始------------------------------------------------------------------------//
+ //--------------------------------------------------------GIP200520016实现------------------------------------------------------------------------//
+
+
+
+ // 轮询任务对象
+ public static class NET_POLLING_INFO extends SdkStructure
+ {
+ public int emSourceType; // 数据源类型 参考EM_DATA_SOURCE_TYPE
+ public Pointer pSourceData; // 数据源信息, 根据emSouceType对应不一样的结构体
+ public byte[] szUserData=new byte[64]; // 视频源数据,标示视频源信息。在返回结果时,原封不动的带上。当任务的包含多个视频源时,attachResult每个视频源单独上报结果
+ public byte[] byReserved=new byte[256]; // 保留字节
+ };
+
+ // 接口输出参数
+ public static class NET_IN_ADD_POLLING_ANALYSE_TASK extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nIntervalTime; // 每个视频源的检测执行时间,单位为秒,1~65535
+ public int nLoopCount; // 诊断轮询次数, 0代表永久轮询
+ public int nInfoCount; // 任务对象个数
+ public Pointer pInfoList; // 任务对象列表(参考NET_POLLING_INFO)
+
+ public NET_IN_ADD_POLLING_ANALYSE_TASK()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ };
+
+ // 接口输出参数
+ public static class NET_OUT_ADD_POLLING_ANALYSE_TASK extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nTaskID; // 任务ID
+
+ public NET_OUT_ADD_POLLING_ANALYSE_TASK()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ };
+
+ public static class NET_IN_UPDATE_POLLING_ANALYSE_TASK extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nTaskID; // 任务ID
+ public int nIntervalTime; // 每个视频源的检测执行时间,单位为秒,1~65535
+ public int nLoopCount; // 诊断轮询次数, 0代表永久轮询
+ public int nInfoCount; // 任务对象个数
+ public int nReserved; // 字节对齐
+ public Pointer pInfoList; // 任务对象列表(参考NET_POLLING_INFO)
+
+
+ public NET_IN_UPDATE_POLLING_ANALYSE_TASK()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ };
+
+ // 接口输出参数
+ public static class NET_OUT_UPDATE_POLLING_ANALYSE_TASK extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+
+ public NET_OUT_UPDATE_POLLING_ANALYSE_TASK()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ };
+
+
+ //获取剩余智能分析资源入参
+ public static class NET_IN_REMAIN_ANAYLSE_RESOURCE extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+
+ public NET_IN_REMAIN_ANAYLSE_RESOURCE()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ };
+
+ //智能分析剩余能力具体信息
+ public static class NET_REMAIN_ANALYSE_CAPACITY extends SdkStructure
+ {
+ public int nMaxStreamNum; // 剩余能分析的视频流数目
+ public int emClassType; // 大类业务方案(参考EM_SCENE_CLASS_TYPE)
+ public byte[] byReserved=new byte[1024]; // 保留字节
+ } ;
+
+ //获取剩余智能分析资源出参
+ public static class NET_OUT_REMAIN_ANAYLSE_RESOURCE extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nRetRemainCapNum; // 返回的能力格式
+ public NET_REMAIN_ANALYSE_CAPACITY[] stuRemainCapacities=
+ (NET_REMAIN_ANALYSE_CAPACITY[])new NET_REMAIN_ANALYSE_CAPACITY().toArray(32); // 智能分析剩余能力
+ public NET_REMAIN_ANALYSE_TOTAL_CAPACITY[] stuTotalCapacity=
+ (NET_REMAIN_ANALYSE_TOTAL_CAPACITY[])new NET_REMAIN_ANALYSE_TOTAL_CAPACITY().toArray(32); //
+ // 可供任务调度的总的智能能力
+
+ public int nTotalCapacityNum;
+ public byte[] byReserved=new byte[60684]; // 保留字节
+ public NET_OUT_REMAIN_ANAYLSE_RESOURCE()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ };
+
+ public static class NET_IN_REMOTEDEVICE_CAPS extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ //public byte[] szSubClassID=new byte[32]; // 空表示管理远程通道的设备列表 // "EmbeddedPlatform": 表示管理嵌入式管理平台的设备管理器
+
+ public NET_IN_REMOTEDEVICE_CAPS()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ };
+
+ public static class NET_OUT_REMOTEDEVICE_CAP extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nRetCount; // 返回的pnProtocal 有效个数
+ public int[] snProtocal=new int[512]; // 协议类型 值同 EM_STREAM_PROTOCOL_TYPE
+
+ public NET_OUT_REMOTEDEVICE_CAP()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ };
+
+
+ //算法独立升级能力
+ public static class NET_ANALYSE_CAPS_SUPPORT_ALGORITHM_UPGRADE extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int bSupportOnlyAlgorithmUpgrade; // 是否支持算法独立升级能力
+ public int nMaxUpgradeAINum; // AI 方案最大个数, 由用户指定, 最大支持128
+ public int nRetUpgradeAINum; // 实际返回的AI 方案个数, 即pstUpgradeAIInfo 数组的有效元素个数
+ /**
+ * 指针内传入结构体数组,结构体为{@link NET_ALGORITHM_UPGRADE_AI_INFO}
+ */
+ public Pointer pstUpgradeAIInfo; // 独立算法升级支持的AI方案信息, 内存由用户申请和释放, 申请大小sizeof(NET_ALGORITHM_UPGRADE_AI_INFO)*nMaxUpgradeAINum
+ public int nRetStorageNum; // 实际返回的设备分区个数, 即stuStorageInfo 数组的有效元素个数
+ public NET_ALGORITHM_DEV_STORAGE_INFO[] stuStorageInfos=(NET_ALGORITHM_DEV_STORAGE_INFO[])new NET_ALGORITHM_DEV_STORAGE_INFO().toArray(16); // 设备的分区信息
+ public NET_ALGORITHM_BUILD_INFO stuBuildInfo; // 算法构建信息
+ public NET_ANALYSE_CAPS_SUPPORT_ALGORITHM_UPGRADE()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ } ;
+
+ //智能分析总能力
+ public static class NET_TOTAL_CAP extends SdkStructure
+ {
+ public int emClassType; // 业务大类(参考EM_SCENE_CLASS_TYPE)
+ public int[] dwRuleTypes=new int[MAX_ANALYSE_RULE_COUNT]; // 规则类型, 详见dhnetsdk.h中"智能分析事件类型"
+ public int nRuleNum; // 规则数量
+ public int nMaxStreamNum; // 最多支持同时分析的视频流数目
+ public byte[] byReserved=new byte[1024]; // 保留字节
+ } ;
+
+ //智能分析的总能力
+ public static class NET_ANALYSE_CAPS_TOTAL extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public NET_TOTAL_CAP[] stuTotalCaps=(NET_TOTAL_CAP[])new NET_TOTAL_CAP().toArray(MAX_ANALYSE_TOTALCAPS_NUM); // 智能分析总能力
+ public int nTotalCapsNum; // 智能分析总能力个数
+ public int nTotalDecodeCaps; // 总解码能力,即总解码资源个数
+ public int nTotalComputingCaps; // 总算力
+ public int nSingleTaskComputingCaps; // 单任务最大算力
+ public NET_ANALYSE_CAPS_TOTAL()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ } ;
+
+ // 算法版本信息
+ public static class NET_ALGORITHM_INFO extends SdkStructure
+ {
+ public int emClassType; // 业务大类(参考EM_SCENE_CLASS_TYPE)
+ public byte[] szVersion=new byte[NET_COMMON_STRING_32]; // 算法版本
+ public int emAlgorithmVendor; // 算法厂商(参考EM_ALGORITHM_VENDOR)
+ public byte[] szAlgorithmLibVersion=new byte[NET_COMMON_STRING_32]; // 算法库文件版本
+ public byte[] byReserved=new byte[992]; // 保留字节
+ } ;
+
+ //智能分析的算法版本信息
+ public static class NET_ANALYSE_CAPS_ALGORITHM extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public NET_ALGORITHM_INFO[] stuAlgorithmInfos=(NET_ALGORITHM_INFO[])new NET_ALGORITHM_INFO().toArray(MAX_ANALYSE_ALGORITHM_NUM); // 算法版本信息
+ public int nAlgorithmNum; // 算法个数
+
+ public NET_ANALYSE_CAPS_ALGORITHM()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ } ;
+
+ // 智能分析服务能力类型
+ public static class EM_ANALYSE_CAPS_TYPE extends SdkStructure
+ {
+ public static final int EM_ANALYSE_CAPS_ALGORITHM = 1; // 算法版本, 对应输出结构体 NET_ANALYSE_CAPS_ALGORITHM
+ public static final int EM_ANALYSE_CAPS_TOTALCAPS = 2; // 智能分析总能力, 对应输出结构体 NET_ANALYSE_CAPS_TOTAL
+ public static final int EM_ANALYSE_CAPS_SUPPORT_ALGORITHM_UPGRADE = 3; // 算法独立升级能力, 对应输出结构体 NET_ANALYSE_CAPS_SUPPORT_ALGORITHM_UPGRADE
+ };
+
+ //CLIENT_SetAnalyseTaskCustomData 接口输入参数
+ public static class NET_IN_SET_ANALYSE_TASK_CUSTOM_DATA extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nTaskID; // 任务ID
+ public NET_TASK_CUSTOM_DATA stuTaskCustomData; // 自定义数据
+
+ public NET_IN_SET_ANALYSE_TASK_CUSTOM_DATA()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ } ;
+
+
+ //CLIENT_SetAnalyseTaskCustomData 接口输出参数
+ public static class NET_OUT_SET_ANALYSE_TASK_CUSTOM_DATA extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+
+
+ public NET_OUT_SET_ANALYSE_TASK_CUSTOM_DATA()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ } ;
+
+ // 获取视频分析服务智能能力集, pstOutParam根据emCapsType的值取对应的结构体(参考EM_ANALYSE_CAPS_TYPE), pstOutParam 资源由用户申请和释放
+ public boolean CLIENT_GetAnalyseCaps(LLong lLoginID, int emCapsType, Pointer pOutParam, int nWaitTime);
+
+ // 添加轮询检测任务 (入参NET_IN_ADD_POLLING_ANALYSE_TASK,出参NET_OUT_ADD_POLLING_ANALYSE_TASK)
+ public boolean CLIENT_AddPollingAnalyseTask(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ // 更新轮询检测任务规则(入参NET_IN_UPDATE_POLLING_ANALYSE_TASK,出参NET_OUT_UPDATE_POLLING_ANALYSE_TASK)
+ public boolean CLIENT_UpdatePollingAnalyseTask(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ // 获取剩余智能分析资源(入参NET_IN_REMAIN_ANAYLSE_RESOURCE,出参NET_OUT_REMAIN_ANAYLSE_RESOURCE)
+ public boolean CLIENT_GetRemainAnalyseResource(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ // 设置任务的自定义数据(入参NET_IN_SET_ANALYSE_TASK_CUSTOM_DATA,出参NET_OUT_SET_ANALYSE_TASK_CUSTOM_DATA)
+ public boolean CLIENT_SetAnalyseTaskCustomData(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ public static class NET_VIDEOABNORMALDETECTION_RULE_INFO extends SdkStructure {
+ /**
+ * 最短持续时间 单位:秒,0~65535
+ */
+ public int nMinDuration;
+ /**
+ * 灵敏度, 取值1-10,值越小灵敏度越低(只对检测类型视频遮挡,过亮,过暗,场景变化有效)
+ */
+ public int nSensitivity;
+
+ /**
+ * 检测类型数
+ */
+ public int nDetectType;
+ public int nReserved;
+ /**
+ * 异常检测阈值,范围1~100
+ */
+ public int[] nThreshold=new int[32];
+ /**
+ * 检测类型,0-视频丢失, 1-视频遮挡, 2-画面冻结, 3-过亮, 4-过暗, 5-场景变化
+ * 6-条纹检测 , 7-噪声检测 , 8-偏色检测 , 9-视频模糊检测 , 10-对比度异常检测
+ * 11-视频运动 , 12-视频闪烁 , 13-视频颜色 , 14-虚焦检测 , 15-过曝检测, 16-场景巨变
+ */
+
+ public byte[] bDetectType=new byte[32];
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved=new byte[4096];
+
+ }
+ //--------------------------------------------------------ERR200529144------------------------------------------------------------------------//
+ // 热度图灰度数据
+ public static class NET_CB_HEATMAP_GRAY_INFO extends SdkStructure
+ {
+ public int nWidth; // 图片宽度
+ public int nHeight; // 图片高度
+ public NET_TIME stuStartTime; // 开始时间
+ public NET_TIME stuEndTime; // 结束时间
+ public int nMax; // 最大值
+ public int nMin; // 最小值
+ public int nAverage; // 平均值
+ public int nLength; // 灰度图数据长度
+ public Pointer pGrayInfo; // 灰度图数据
+ public byte[] byReserved=new byte[512]; // 保留字节
+ } ;
+
+
+ // 热度图灰度数据回调函数, lAttachHandle 为 CLIENT_AttachHeatMapGrayInfo 返回的结果(pstGrayInfo参考NET_CB_HEATMAP_GRAY_INFO)
+ public interface fHeatMapGrayCallBack extends StdCallCallback{
+ public void invoke(LLong lAttachHandle, Pointer pstGrayInfo, Pointer dwUser);
+ }
+ // CLIENT_AttachHeatMapGrayInfo 接口输入参数
+ public static class NET_IN_GRAY_ATTACH_INFO extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nChannelID; // 通道号
+ public fHeatMapGrayCallBack cbHeatMapGray; // 热度图灰度数据回调函数
+ public Pointer dwUser; // 用户信息
+
+ public NET_IN_GRAY_ATTACH_INFO()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ } ;
+
+ // CLIENT_AttachHeatMapGrayInfo接口输出参数
+ public static class NET_OUT_GRAY_ATTACH_INFO extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+
+ public NET_OUT_GRAY_ATTACH_INFO()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ } ;
+
+
+ // 订阅热度图灰度数据接口,pInParam与pOutParam内存由用户申请释放(pInParam参考NET_IN_GRAY_ATTACH_INFO,pOutParam参考NET_OUT_GRAY_ATTACH_INFO)
+ public LLong CLIENT_AttachHeatMapGrayInfo(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ // 退订热度图灰度数据
+ public boolean CLIENT_DetachHeatMapGrayInfo(LLong lAttachHandle);
+
+ // 事件类型EVENT_IVS_RETROGRADEDETECTION(人员逆行事件)对应的数据块描述信息
+ public static class DEV_EVENT_RETROGRADEDETECTION_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public byte[] szName=new byte[128]; // 事件名称
+ public byte[] bReserved1=new byte[4]; // 字节对齐
+ public double PTS; // 时间戳(单位是毫秒)
+ public NET_TIME_EX UTC; // 事件发生的时间
+ public int nEventID; // 事件ID
+ public DH_MSG_OBJECT stuObject; // 检测到的物体
+ public int nTrackLineNum; // 物体运动轨迹顶点数
+ public DH_POINT[] TrackLine=(DH_POINT[])new DH_POINT().toArray(NET_MAX_TRACK_LINE_NUM); // 物体运动轨迹
+ public int nDirectionPointNum; // 规则里规定的方向顶点数
+ public DH_POINT[] stuDirections=(DH_POINT[])new DH_POINT().toArray(NET_MAX_DETECT_LINE_NUM); // 规则里规定的方向
+ public int nDetectRegionNum; // 规则检测区域顶点数
+ public DH_POINT[] DetectRegion=(DH_POINT[])new DH_POINT().toArray(NET_MAX_DETECT_REGION_NUM); // 规则检测区域
+ public NET_EVENT_FILE_INFO stuFileInfo; // 事件对应文件信息
+ public byte bEventAction; // 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ public byte[] byReserved=new byte[2];
+ public byte byImageIndex; // 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ public int dwSnapFlagMask; // 抓图标志(按位),具体见NET_RESERVED_COMMON
+ public int nSourceIndex; // 事件源设备上的index,-1表示数据无效
+ public byte[] szSourceDevice=new byte[MAX_PATH]; // 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ public int nOccurrenceCount; // 事件触发累计次数
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo; // 智能事件公共信息
+ public Pointer pstuImageInfo; // 图片信息数组 ,结构体NET_IMAGE_INFO_EX2数组
+ public int nImageInfoNum; // 图片信息个数
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND(); //事件公共扩展字段结构体
+ public byte[] bReserved=new byte[604]; // 保留字节,留待扩展.
+ } ;
+
+ public static final int NET_MAX_PLATEENABLE_NUM = 16; // 最大使能过车车牌播报个数
+ public static final int NET_MAX_BROADCAST_ELEMENT_NUM = 64; // 最大语音播报元素个数
+
+ // 智能交通语音播报配置 对应枚举 NET_EM_CFG_TRAFFIC_VOICE_BROADCAST
+ public static class NET_CFG_TRAFFIC_VOICE_BROADCAST_INFO extends SdkStructure
+ {
+ public int dwSize; // 结构体大小
+ public int nEnableCount; // 使能播报个数
+ public int[] emEnable=new int[NET_MAX_PLATEENABLE_NUM]; // 使能过车车牌播报,见枚举 NET_EM_PLATEENABLE_TYPE
+ public byte[] szNormalCar=new byte[MAX_PATH]; // 普通车辆过车播报内容,例如:播报语音文件"欢迎光临.wav"
+ public byte[] szTrustCar=new byte[MAX_PATH]; // 信任车辆过车播报内容,例如:播报语音文件"欢迎光临.wav"
+ public byte[] szSuspiciousCar=new byte[MAX_PATH]; // 嫌疑车辆过车播报内容,例如:播报语音文件"非注册车辆.wav"
+ public NET_TRAFFIC_VOICE_BROADCAST_ELEMENT[] stuElement=(NET_TRAFFIC_VOICE_BROADCAST_ELEMENT[])new NET_TRAFFIC_VOICE_BROADCAST_ELEMENT().toArray(NET_MAX_BROADCAST_ELEMENT_NUM); // 播报元素
+ public int nElementNum; // stuElement中有效数据个数
+
+ public NET_CFG_TRAFFIC_VOICE_BROADCAST_INFO()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+ };
+
+
+ // 播报元素
+ public static class NET_TRAFFIC_VOICE_BROADCAST_ELEMENT extends SdkStructure
+ {
+ public int emType; // 类型(参考NET_EM_VOICE_BROADCAST_ELEMENT_TYPE)
+ public byte[] byReserved1=new byte[4]; // 字节对齐
+ public byte[] szPrefix=new byte[512]; // 前缀字符串
+ public byte[] szPostfix=new byte[512]; // 后缀字符串
+ public byte[] byReserved=new byte[1024]; // 预留
+ };
+
+
+ // 485串口协议设备配置信息
+ public static class NET_CFG_DHRS_INFO extends SdkStructure
+ {
+ public int nDeviceNum; // 串口设备个数
+ public NET_CFG_DHRS_DEVICE_INFO[] stuDHRSDeviceInfo=(NET_CFG_DHRS_DEVICE_INFO[])new NET_CFG_DHRS_DEVICE_INFO().toArray(32); // 串口设备信息
+
+ };
+
+ public static class NET_CFG_DHRS_DEVICE_INFO extends SdkStructure
+ {
+ public int bEnable; // 串口设备是否启用
+ public int emType; // 串口设备类型(参考EM_DHRS_DEVICE_TYPE)
+ public NET_CFG_LATTICE_SCREEN_CONFIG stuLatticeScreenConfig; // 485串口点阵屏配置
+ public byte[] byReserved=new byte[4096]; //预留字节
+ } ;
+
+ // 485串口点阵屏配置
+ public static class NET_CFG_LATTICE_SCREEN_CONFIG extends SdkStructure
+ {
+ public int nAddress; // 配置对应设备的地址, 范围[1,31]
+ public int emRollSpeedLevel; // 点阵屏滚动速度级别(参考EM_ROLL_SPEED_LEVEL)
+ public int nLogicScreenNum; // 逻辑屏个数
+ public NET_LOGIC_SCREEN[] stuLogicScreens=(NET_LOGIC_SCREEN[])new NET_LOGIC_SCREEN().toArray(8); // 逻辑屏信息, 划分物理屏的某一区域为逻辑屏
+ public int nOutPutVoiceVolume; // 语音播报音量大小, 范围:[0 - 100]
+ public int nOutPutVoiceSpeed; // 语音播报速度, 范围:[0-100]
+ public byte[] byReserved=new byte[1024];
+ } ;
+
+ // 串口设备类型
+ public static class EM_DHRS_DEVICE_TYPE extends SdkStructure
+ {
+ public static final int EM_DHRS_DEVICE_TYPE_UNKNOWN =0; // 未知
+ public static final int EM_DHRS_DEVICE_TYPE_STEADYLIGHT =1; // 常亮灯
+ public static final int EM_DHRS_DEVICE_TYPE_STROBELIGHT =2; // 可以通过485控制的频闪灯
+ public static final int EM_DHRS_DEVICE_TYPE_POWERMODULE =3; // 电源模块
+ public static final int EM_DHRS_DEVICE_TYPE_LATTICESCREEN =4; // 点阵屏
+ public static final int EM_DHRS_DEVICE_TYPE_INDICATORLIGHT =5; // 指示灯
+ public static final int EM_DHRS_DEVICE_TYPE_RAINBRUSH =6; // 雨刷洗涤模块
+ public static final int EM_DHRS_DEVICE_TYPE_FLASHLAMP =7; // 爆闪灯
+ public static final int EM_DHRS_DEVICE_TYPE_RFID =8; // 射频识别
+ public static final int EM_DHRS_DEVICE_TYPE_COMMON =9; // 通用485
+ } ;
+
+ // 逻辑屏信息
+ public static class NET_LOGIC_SCREEN extends SdkStructure
+ {
+ public NET_RECT stuRegion; // 逻辑屏区域, 实际点阵屏坐标
+ public int emDisplayMode; // 显示动作(参考EM_DISPLAY_MODE)
+ public int emDisplayColor; // 显示颜色(参考EM_DISPLAY_COLOR)
+ public byte[] byReserved = new byte[512]; // 预留字节
+ } ;
+
+ // 点阵屏滚动速度级别
+ public static class EM_ROLL_SPEED_LEVEL extends SdkStructure
+ {
+ public static final int EM_ROLL_SPEED_LEVEL_UNKNOWN =0; // 未知
+ public static final int EM_ROLL_SPEED_LEVEL_SLOW =1; // 慢
+ public static final int EM_ROLL_SPEED_LEVEL_SLOWER =2; // 较慢
+ public static final int EM_ROLL_SPEED_LEVEL_MEDIUM =3; // 中等
+ public static final int EM_ROLL_SPEED_LEVEL_FASTER =4; // 较快
+ public static final int EM_ROLL_SPEED_LEVEL_FAST =5; // 快
+ } ;
+
+ // 显示动作
+ public static class EM_DISPLAY_MODE extends SdkStructure
+ {
+ public static final int EM_DISPLAY_MODE_UNKNOWN =0; // 未知
+ public static final int EM_DISPLAY_MODE_ROLL =1; // 滚动
+ public static final int EM_DISPLAY_MODE_INTERCEPT =2; // 截取
+ } ;
+
+ // 显示颜色
+ public static class EM_DISPLAY_COLOR extends SdkStructure
+ {
+ public static final int EM_DISPLAY_COLOR_UNKNOWN =0; // 未知
+ public static final int EM_DISPLAY_COLOR_RED =1; // 红
+ public static final int EM_DISPLAY_COLOR_GREEN =2; // 绿
+ public static final int EM_DISPLAY_COLOR_YELLOW =3; // 黄
+ }
+
+ public static class NET_FACEANALYSIS_RULE_INFO extends SdkStructure {
+ public int dwSize; // 结构体大小
+ public int nDetectRegionPoint; // 检测区顶点数
+ public POINTCOORDINATE[] stuDetectRegion = new POINTCOORDINATE[20]; // 检测区
+ public int nSensitivity; // 灵敏度,范围[1,10],灵敏度越高越容易检测
+ public int nLinkGroupNum; // 联动布控个数
+ public NET_CFG_LINKGROUP_INFO[] stuLinkGroup = new NET_CFG_LINKGROUP_INFO[20]; // 联动的布控组
+ public NET_CFG_STRANGERMODE_INFO stuStrangerMode; // 陌生人布防模式
+ public boolean bSizeFileter; // 规则特定的尺寸过滤器是否有效
+ public NET_CFG_SIZEFILTER_INFO stuSizeFileter; // 规则特定的尺寸过滤器
+ public boolean bFeatureEnable; // 是否开启人脸属性识别, IPC增加
+ public int nFaceFeatureNum; // 需要检测的人脸属性个数
+ public int[] emFaceFeatureType = new int[32]; // 需检测的人脸属性 NET_EM_FACEFEATURE_TYPE
+ public boolean bFeatureFilter; // 在人脸属性开启前提下,如果人脸图像质量太差,是否不上报属性
+ // true-图像太差不上报属性 false-图像很差也上报属性(可能会非常不准,影响用户体验)
+ public int nMinQuality; // 人脸图片质量阈值,和bFeatureFilter一起使用 范围[1,100]
+
+ public NET_FACEANALYSIS_RULE_INFO(){
+ for(int i = 0; i < stuDetectRegion.length; i++ ){
+ stuDetectRegion[i] = new POINTCOORDINATE();
+ }
+ for(int i = 0; i < stuLinkGroup.length; i++){
+ stuLinkGroup[i] = new NET_CFG_LINKGROUP_INFO();
+ }
+ dwSize = this.size();
+ }
+
+ }
+
+ // 联动的布控组
+ public static class NET_CFG_LINKGROUP_INFO extends SdkStructure {
+ public boolean bEnable; // 布控组是否启用
+ public byte[] szGroupID = new byte[64]; // 布控组ID
+ public byte bySimilarity; // 相似度阈值 1-100
+ public byte[] bReserved1 = new byte[3]; // 字节对齐
+ public byte[] szColorName = new byte[32]; // 事件触发时绘制人脸框的颜色
+ public boolean bShowTitle; // 事件触发时规则框上是否显示报警标题
+ public boolean bShowPlate; // 事件触发时是否显示比对面板
+ public NET_ALARM_MSG_HANDLE stuEventHandler; // 报警联动
+ public byte[] bReserved = new byte[512]; // 保留字段
+ }
+
+ // 陌生人布防模式
+ public static class NET_CFG_STRANGERMODE_INFO extends SdkStructure {
+ public boolean bEnable; // 模式是否启用
+ public byte[] szColorHex = new byte[8]; // 事件触发时绘制人脸框的颜色
+ public boolean bShowTitle; // 事件触发时规则框上是否显示报警标题
+ public boolean bShowPlate; // 事件触发时是否显示比对面板
+ public NET_ALARM_MSG_HANDLE stuEventHandler; // 报警联动
+ public byte[] bReserved = new byte[512]; // 保留字段
+ }
+
+ // 人脸属性类型
+ public static class NET_EM_FACEFEATURE_TYPE
+ {
+ public final static int NET_EM_FACEFEATURE_UNKNOWN = 0; // 未知
+ public final static int NET_EM_FACEFEATURE_SEX = 1; // 性别
+ public final static int NET_EM_FACEFEATURE_AGE = 2; // 年龄
+ public final static int NET_EM_FACEFEATURE_EMOTION = 3; // 表情
+ public final static int NET_EM_FACEFEATURE_GLASSES = 4; // 眼镜状态
+ public final static int NET_EM_FACEFEATURE_EYE = 5; // 眼睛状态
+ public final static int NET_EM_FACEFEATURE_MOUTH = 6; // 嘴巴状态
+ public final static int NET_EM_FACEFEATURE_MASK = 7; // 口罩状态
+ public final static int NET_EM_FACEFEATURE_BEARD = 8; // 胡子状态
+ public final static int NET_EM_FACEFEATURE_ATTRACTIVE = 9; // 魅力值
+ }
+
+ // 事件类型EM_ANALYSE_EVENT_FEATURE_ABSTRACT(特征提取)对应的数据块描述信息
+ public static class DEV_EVENT_FEATURE_ABSTRACT_INFO extends SdkStructure
+ {
+ public int nChannelID; // 通道号
+ public int nAction; // 0:脉冲 1:开始 2:停止
+ public int emClassType; // 智能事件所属大类 EM_CLASS_TYPE
+ public int nFeatureNum; // 特征值数量
+ public NET_FEATURE_VECTOR_INFO[] stuFeatureVectorList = new NET_FEATURE_VECTOR_INFO[10]; // 特征值数组,同一个图片需要进行多个版本的特征向量提取,在一个事件中返回
+ public byte[] byReserved = new byte[1024]; // 预留字节
+
+ public DEV_EVENT_FEATURE_ABSTRACT_INFO(){
+ for(int i=0;iNET_IN_CAMERASTATE ; pstOutParam->NET_OUT_CAMERASTATE
+ */
+ public LLong CLIENT_AttachCameraState(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 停止订阅摄像头状态,lAttachHandle是CLIENT_AttachCameraState返回值
+ */
+ public boolean CLIENT_DetachCameraState(LLong lAttachHandle);
+
+ // CLIENT_AttachCameraState()回调函数原形, 每次1条,pBuf->NET_CB_CAMERASTATE dwSize == nBufLen
+ public interface fCameraStateCallBack extends StdCallCallback {
+ public void invoke(LLong lLoginID, LLong lAttachHandle, Pointer pBuf, int nBufLen, Pointer dwUser);
+ }
+
+ /**
+ * 获取IPC设备的存储信息
+ * @param lLoginID 登录句柄
+ * @param pstInParam 入参 {@link com.netsdk.lib.structure.NET_IN_GET_DEVICE_AII_INFO}
+ * @param pstOutParam 出参{@link com.netsdk.lib.structure.NET_OUT_GET_DEVICE_AII_INFO}
+ * @param nWaitTime
+ * @return
+ */
+ public boolean CLIENT_GetDeviceAllInfo(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ // 交通信号灯回调函数 lLoginID - 登录句柄 lAttchHandle - 订阅句柄
+ public interface fTrafficLightState extends StdCallCallback {
+ public void invoke(LLong lLoginID, LLong lAttachHandle, Pointer pBuf, long dwUser);
+ }
+
+ /**
+ * 订阅交通信号灯状态 , pInParam 和pOutParam 资源由用户申请和释放
+ * @param lLoginID 登录句柄
+ * @param pInParam 入参 {@link com.netsdk.lib.structure.NET_IN_ATTACH_TRAFFICLIGHT_INFO}
+ * @param pOutParam 出参{@link com.netsdk.lib.structure.NET_OUT_ATTACH_TRAFFICLIGHT_INFO}
+ * @param nWaitTime
+ * @return
+ */
+ public LLong CLIENT_AttachTrafficLightState(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * 退订交通信号灯状态
+ * @param lAttchHandle 订阅句柄
+ * @return
+ */
+ public boolean CLIENT_DetachTrafficLightState(LLong lAttchHandle);
+
+ /**
+ * 订阅雷达的报警点信息 , pInParam 和pOutParam 资源由用户申请和释放
+ * @param lLoginID 登录句柄
+ * @param pstInParam 入参 {@link com.netsdk.lib.structure.NET_IN_RADAR_ALARMPOINTINFO}
+ * @param pstOutParam 出参 {@link com.netsdk.lib.structure.NET_OUT_RADAR_ALARMPOINTINFO}
+ * @param nWaitTime
+ * @return
+ */
+ public LLong CLIENT_AttachRadarAlarmPointInfo(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 取消订阅雷达的报警点信息
+ * @param lAttachHandle 订阅句柄
+ * @return
+ */
+ public boolean CLIENT_DetachRadarAlarmPointInfo(LLong lAttachHandle);
+
+ /**
+ * 雷达报警点信息回调函数
+ */
+ public interface fRadarAlarmPointInfoCallBack extends StdCallCallback {
+ /**
+ *
+ * @param lLoginId 登录句柄
+ * @param lAttachHandle 订阅句柄
+ * @param pBuf {@link com.netsdk.lib.structure.NET_RADAR_NOTIFY_ALARMPOINTINFO}
+ * @param dwBufLen pBuf中结构体的长度
+ * @param pReserved 保留数据
+ * @param dwUser 用户自定义数据
+ */
+ public void invoke (LLong lLoginId, LLong lAttachHandle, Pointer pBuf, int dwBufLen, Pointer pReserved, Pointer dwUser);
+ }
+
+ /**
+ * 查询系统状态(pstuStatus内存由用户申请释放)
+ * @param lLoginID
+ * @param pstInParam NET_SYSTEM_STATUS
+ * @param nWaitTime
+ * @return
+ */
+ public boolean CLIENT_QuerySystemStatus(LLong lLoginID, Pointer pstInParam, int nWaitTime);
+
+ /**
+ * 订阅云台元数据接口,pstuInPtzStatusProc与pstuOutPtzStatusProc内存由用户申请释放
+ * @param lLoginID 登录句柄
+ * @param pstInParam 入参 {@link com.netsdk.lib.structure.NET_IN_PTZ_STATUS_PROC}
+ * @param pstOutParam 出参{@link com.netsdk.lib.structure.NET_OUT_PTZ_STATUS_PROC}
+ * @param nWaitTime
+ * @return
+ */
+ public LLong CLIENT_AttachPTZStatusProc(LLong lLoginID,Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 停止订阅云台元数据接口,lAttachHandle是CLIENT_AttachPTZStatusProc返回值
+ * @param lAttachHandle 订阅句柄
+ * @return
+ */
+ public boolean CLIENT_DetachPTZStatusProc(LLong lAttachHandle);
+
+
+ /**
+ * 订阅云台元数据接口回调函数原型
+ * pBuf 现阶段主要为 NET_PTZ_LOCATION_INFO 类型 {@link NET_PTZ_LOCATION_INFO}
+ */
+ public interface fPTZStatusProcCallBack extends StdCallCallback {
+ public void invoke (LLong lLoginId, LLong lAttachHandle, Pointer pBuf, int dwBufLen, long dwUser);
+ }
+
+ /**
+ * 查询某月的各天是否存在录像文件,
+ *
+ * @param lLoginID
+ * @param nChannelId
+ * @param nRecordFileType EM_QUERY_RECORD_TYPE 的枚举值
+ * nRecordFileType == EM_RECORD_TYPE_CARD,pchCardid输入卡号,限制字符长度 59 字节
+ * nRecordFileType == EM_RECORD_TYPE_FIELD,pchCardid输入自定义字段,限制字符长度 256 字节
+ * @param tmMonth Pointer -> NET_TIME
+ * @param pchCardid Pointer -> byte[]
+ * @param pRecordStatus Poiter -> NET_RECORD_STATUS
+ * @param waittime
+ * @return boolean
+ */
+ public boolean CLIENT_QueryRecordStatus(LLong lLoginID, int nChannelId, int nRecordFileType, Pointer tmMonth, Pointer pchCardid, Pointer pRecordStatus, int waittime);
+ //设置SDK本地参数,在CLIENT_Init之前调用,szInBuffer内存由用户申请释放,里面存放被设置的信息,具体见NET_EM_SDK_LOCAL_CFG_TYPE类型对应结构体
+ boolean CLIENT_SetSDKLocalCfg(int emCfgType, Pointer szInBuffer);
+
+ /**
+ * 开启重定向服务扩展接口
+ * @param pInParam {@link NET_IN_START_REDIRECT_SERVICE}
+ * @param pOutParam NET_OUT_START_REDIRECT_SERVICE,空结构体,可使用{@link EmptyStructure}
+ * @return
+ */
+ LLong CLIENT_StartRedirectServiceEx(Pointer pInParam,Pointer pOutParam);
+ /**
+ * 停止重定向服务
+ * @param lServerHandle 服务句柄
+ * @return
+ */
+ boolean CLIENT_StopRedirectService(LLong lServerHandle);
+
+ /**
+ * 设置重定向服务器的IP和Port
+ * @param lDevHandle 重定向设备句柄
+ * @param ARSIP 重定向设备IP
+ * @param ARSPort 重定向设备端口
+ * @param nRetry 设备主动注册尝试次数
+ * @return
+ */
+ boolean CLIENT_SetAutoRegisterServerInfo(LLong lDevHandle, String ARSIP, short ARSPort, short nRetry);
+
+ /**
+ * 强制I帧,用于拉流优化
+ * @param lLoginID 登录句柄
+ * @param nChannelID 通道号
+ * @param nSubChannel 码流类型:0:主码流,1:子码流1
+ * @return
+ */
+ boolean CLIENT_MakeKeyFrame(LLong lLoginID, int nChannelID, int nSubChannel);
+
+ /**
+ * 关闭设备
+ */
+ boolean CLIENT_ShutDownDev(LLong lLoginID);
+
+ /**
+ * 设置通道录像状态(pRsBuffer内存由用户申请释放)
+ */
+ boolean CLIENT_SetupRecordState(LLong lLoginID, Pointer pRSBuffer, int nRSBufferlen);
+
+ /**
+ * 设置通道辅码流录像状态(pRsBuffer内存由用户申请释放)
+ */
+ boolean CLIENT_SetupExtraRecordState(LLong lLoginID, Pointer pRSBuffer, int nRSBufferlen, Pointer pReserved);
+
+ /**
+ * 增加远程录像备份任务, pInParam pOutParam 内存有用户申请释放
+ * @param lRestoreID restoreId
+ * @param pInParam -> NET_IN_ADD_REC_BAK_RST_REMOTE_TASK
+ * @param pOutParam -> NET_OUT_ADD_REC_BAK_RST_REMOTE_TASK
+ * @param nWaitTime 超时时间
+ * @return 添加是否成功
+ */
+ boolean CLIENT_AddRecordBackupRestoreRemoteTask(LLong lRestoreID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * 设置停车规则
+ */
+ boolean CLIENT_SetParkingRule(LLong lLoginID,NET_IN_SET_PARKINGRULE_INFO pstInParam,NET_OUT_SET_PARKINGRULE_INFO pstOutParam, int nWaitTime);
+
+ // 设置运行模式参数,在CLIENT_Init之后调用 pstuRunParams->NET_RUNMODE_PARAMS
+ boolean CLIENT_SetRunModeParams(Pointer pstuRunParams);
+
+ public boolean CLIENT_DownloadPieceFile(LLong lLoginID, Pointer pInParam, Pointer pOutParam,int nWaitTime);
+
+ // 清除当前时间段内人数统计信息, 重新从0开始计算
+ //CLIENT_ControlDevice接口的 DH_CTRL_CLEAR_SECTION_STAT命令参数
+ public static class NET_CTRL_CLEAR_SECTION_STAT_INFO extends SdkStructure
+ {
+ public int dwSize;
+ public int nChannel; // 视频通道号
+ public NET_CTRL_CLEAR_SECTION_STAT_INFO(){
+ this.dwSize = this.size();
+ }
+ }
+
+//刻录设备回调函数原形,lAttachHandle是CLIENT_AttachBurnState返回值, 每次1条,pBuf->dwSize == nBufLen (pBuf->NET_CB_BACKUPTASK_STATE)
+ public interface fAttachBackupTaskStateCB extends StdCallCallback {
+ public void invoke (LLong lAttachHandle, Pointer pBuf, Pointer dwUser);
+ };
+
+
+//开始备份任务,pstInParam(NET_IN_START_BACKUP_TASK_INFO)与pstOutParam(NET_OUT_START_BACKUP_TASK_INFO)内存由用户申请释放
+ public boolean CLIENT_StartBackupTask(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+//停止备份任务
+ public boolean CLIENT_StopBackupTask(LLong lBackupSession);
+//订阅备份状态,pstInParam(NET_IN_ATTACH_BACKUP_STATE)与pstOutParam(NET_OUT_ATTACH_BACKUP_STATE)内存由用户申请释放
+ public LLong CLIENT_AttachBackupTaskState(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+//取消订阅备份状态,lAttachHandle是CLIENT_AttachBackupTaskState返回值
+ public boolean CLIENT_DetachBackupTaskState(LLong lAttachHandle);
+
+
+ // 获取安检门人数统计信息
+ //CLIENT_NET_API BOOL CALL_METHOD CLIENT_GetPopulationStatistics(LLONG lLoginID, const NET_IN_GET_POPULATION_STATISTICS *pInParam, NET_OUT_GET_POPULATION_STATISTICS *pOutParam, int nWaitTime);
+ public boolean CLIENT_GetPopulationStatistics(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+ // 订阅安检门人数变化信息,pstInParam与pstOutParam内存由用户申请释放
+ //CLIENT_NET_API LLONG CALL_METHOD CLIENT_AttachPopulationStatistics(LLONG lLoginID, NET_IN_ATTACH_GATE_POPULATION_STATISTICS_INFO* pstInParam, NET_OUT_ATTACH_GATE_POPULATION_STATISTICS_INFO* pstOutParam , int nWaitTime);
+ public LLong CLIENT_AttachPopulationStatistics(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+ // 取消订阅安检门人数变化信息 lPopulationStatisticsHandle 为 CLIENT_AttachPopulationStatistics 返回的句柄
+ //CLIENT_NET_API BOOL CALL_METHOD CLIENT_DetachPopulationStatistics(LLONG lPopulationStatisticsHandle);
+ public boolean CLIENT_DetachPopulationStatistics(LLong lPopulationStatisticsHandle);
+ //创建车辆组
+ // CLIENT_NET_API BOOL CALL_METHOD CLIENT_CreateGroupForVehicleRegisterDB(LLONG lLoginID, const NET_IN_CREATE_GROUP_FOR_VEHICLE_REG_DB *pInParam, NET_OUT_CREATE_GROUP_FOR_VEHICLE_REG_DB *pOutParam, int nWaitTime);
+ public boolean CLIENT_CreateGroupForVehicleRegisterDB(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+ //删除车辆组
+ // CLIENT_NET_API BOOL CALL_METHOD CLIENT_DeleteGroupFromVehicleRegisterDB(LLONG lLoginID, const NET_IN_DELETE_GROUP_FROM_VEHICLE_REG_DB *pInParam, NET_OUT_DELETE_GROUP_FROM_VEHICLE_REG_DB *pOutParam, int nWaitTime);
+ public boolean CLIENT_DeleteGroupFromVehicleRegisterDB(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+ //向车牌库添加车辆信息
+ // CLIENT_NET_API BOOL CALL_METHOD CLIENT_MultiAppendToVehicleRegisterDB(LLONG lLoginID, const NET_IN_MULTI_APPEND_TO_VEHICLE_REG_DB *pInParam, NET_OUT_MULTI_APPEND_TO_VEHICLE_REG_DB *pOutParam, int nWaitTime);
+ public boolean CLIENT_MultiAppendToVehicleRegisterDB(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+ // 开包工作台上报开包检查信息
+ // CLIENT_NET_API BOOL CALL_METHOD CLIENT_UploadUnpackingCheckInfo(LLONG lLoginID, const NET_IN_UPLOAD_UPPACKING_CHECK_INFO* pInParam, NET_OUT_UPLOAD_UPPACKING_CHECK_INFO* pOutParam, int nWaitTime);
+ public boolean CLIENT_UploadUnpackingCheckInfo(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * 网络应用组件,公司内部接口
+ * 可用于获取前端设备的网络资源数据,如网络收发数据的速率等,pstuIn与pstuOut内存由用户申请释放,大小参照emType对应的结构体
+ * @param lLoginID 登录句柄
+ * @param emType 网络应用组件 操作类型 EM_RPC_NETAPP_TYPE
+ * @param pstuIn 对应操作入参
+ * @param pstuOut 对应操作出参
+ * @param nWaitTime 超时时间
+ * @return 添加是否成功
+ */
+ public boolean CLIENT_RPC_NetApp(LLong lLoginID, int emType, Pointer pstuIn, Pointer pstuOut, int nWaitTime);
+
+ /**
+ * 雷达操作
+ * @param lLoginID 登录句柄
+ * @param emType 网络应用组件 操作类型 EM_RADAR_OPERATE_TYPE
+ * @param pInBuf 对应操作入参
+ * @param pOutBuf 对应操作出参
+ * @param nWaitTime 超时时间
+ * @return 是否成功
+ */
+ public boolean CLIENT_RadarOperate(LLong lLoginID, int emType, Pointer pInBuf, Pointer pOutBuf, int nWaitTime);
+
+
+
+
+ /**
+ * 设置信号机备份模式,pInParam与pOutParam内存由用户申请释放
+ * @param lLoginID 登录句柄
+ * @param pInParam -> NET_IN_SET_BACKUP_MODE
+ * @param pOutParam -> NET_OUT_SET_BACKUP_MODE
+ * @param nWaitTime 超时时间
+ * @return 是否成功
+ */
+ public boolean CLIENT_SetRtscBackupMode(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * 设置信号机运行模式,pInParam与pOutParam内存由用户申请释放
+ * @param lLoginID 登录句柄
+ * @param pInParam -> NET_IN_SET_RUNNING_MODE
+ * @param pOutParam -> NET_OUT_SET_RUNNING_MODE
+ * @param nWaitTime 超时时间
+ * @return 是否成功
+ */
+ public boolean CLIENT_SetRtscRunningMode(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+
+ /**
+ * 获取信号机运行模式,pInParam与pOutParam内存由用户申请释放
+ * @param lLoginID 登录句柄
+ * @param pInParam -> NET_IN_GET_RUNNING_MODE
+ * @param pOutParam -> NET_OUT_GET_RUNNING_MODE
+ * @param nWaitTime 超时时间
+ * @return 是否成功
+ */
+ public boolean CLIENT_GetRtscRunningMode(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * 获取信号机全局配置,pInParam与pOutParam内存由用户申请释放
+ * @param lLoginID 登录句柄
+ * @param pInParam -> NET_IN_GET_GLOBAL_PARAMETER
+ * @param pOutParam -> NET_OUT_GET_GLOBAL_PARAMETER
+ * @param nWaitTime 超时时间
+ * @return 是否成功
+ */
+ public boolean CLIENT_GetRtscGlobalParam(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * 设置信号机全局配置,pInParam与pOutParam内存由用户申请释放
+ * @param lLoginID 登录句柄
+ * @param pInParam -> NET_IN_SET_GLOBAL_PARAMETER
+ * @param pOutParam -> NET_OUT_SET_GLOBAL_PARAMETER
+ * @param nWaitTime 超时时间
+ * @return 是否成功
+ */
+ public boolean CLIENT_SetRtscGlobalParam(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * 获取信号机运行信息,pInParam与pOutParam内存由用户申请释放
+ * @param lLoginID 登录句柄
+ * @param pInParam -> NET_IN_GET_RUNNING_INFO
+ * @param pOutParam -> NET_OUT_GET_RUNNING_INFO
+ * @param nWaitTime 超时时间
+ * @return 是否成功
+ */
+ public boolean CLIENT_GetRtscRunningInfo(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ // 手动选择球机要跟踪的轨迹目标
+ // CLIENT_NET_API BOOL CALL_METHOD CLIENT_RadarManualTrack(LLONG lLoginID, const NET_IN_RADAR_MANUAL_TRACK* pstInParam, NET_OUT_RADAR_MANUAL_TRACK* pstOutParam, int nWaitTime);
+
+ public boolean CLIENT_RadarManualTrack(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+
+ /**
+ * 西欧报警主机获取操作
+ * @param lLoginID
+ * @param emType NET_EM_GET_ALARMREGION_INFO 的枚举值
+ * @param nWaitTime
+ * @return boolean
+ */
+ public boolean CLIENT_GetAlarmRegionInfo(LLong lLoginID, int emType, Pointer pstuInParam, Pointer pstuOutParam, int nWaitTime);
+
+ /**
+ * 标定球机和蓄水池污点位置
+ * @param lLoginID
+ * @param pstInParam -> NET_IN_SET_PTZ_WASH_POSISTION_INFO
+ * @param pstOutParam -> NET_OUT_SET_PTZ_WASH_POSISTION_INFO
+ * @param dwWaitTime
+ * @return boolean
+ */
+ public boolean CLIENT_PtzSetWashPosistion(LLong lLoginID, NET_IN_SET_PTZ_WASH_POSISTION_INFO pstInParam, NET_OUT_SET_PTZ_WASH_POSISTION_INFO pstOutParam, int dwWaitTime);
+
+ /**
+ * 获取标定后的冲洗信息
+ * @param lLoginID
+ * @param pstInParam -> NET_IN_GET_PTZ_WASH_INFO
+ * @param pstOutParam -> NET_OUT_GET_PTZ_WASH_INFO
+ * @param dwWaitTime
+ * @return boolean
+ */
+ public boolean CLIENT_PtzGetWashInfo(LLong lLoginID, NET_IN_GET_PTZ_WASH_INFO pstInParam, NET_OUT_GET_PTZ_WASH_INFO pstOutParam, int dwWaitTime);
+
+ /**
+ *按文件方式回放(lpRecordFile内存由用户申请释放)
+ * @param lLoginID
+ * @param lpRecordFile -> LPNET_RECORDFILE_INFO
+ * @param hWnd -> Pointer
+ * @param cbDownLoadPos -> fDownLoadPosCallBack
+ * @param dwUserData
+ * @return boolean
+ */
+ public LLong CLIENT_PlayBackByRecordFile(LLong lLoginID,NET_RECORDFILE_INFO lpRecordFile,Pointer hWnd,fDownLoadPosCallBack cbDownLoadPos,Pointer dwUserData);
+
+
+ // 开始查找录像文件
+ public LLong CLIENT_FindFile(LLong lLoginID, int nChannelId, int nRecordFileType, Pointer cardid, NET_TIME time_start, NET_TIME time_end, boolean bTime, int waittime);
+
+
+ /**
+ * 订阅人群分布图实时统计信息
+ * @param lLoginID 登陆句柄
+ * @param pstInParam -> NET_IN_ATTACH_CROWDDISTRI_MAP_INFO 输入参数, 由用户申请资源
+ * @param pstOutParam -> NET_OUT_ATTACH_CROWDDISTRI_MAP_INFO 输出参数, 由用户申请资源
+ * @param nWaitTime 等待超时时间
+ * @return LLong 订阅句柄
+ */
+ public LLong CLIENT_AttachCrowdDistriMap(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 订阅人群分布图实时统计信息回调函数原型,
+ * lAttachHandle为CLIENT_AttachCrowdDistriMap接口的返回值,
+ * pstResult 解析结构体为 NET_CB_CROWD_DISTRI_STREAM_INFO
+ */
+ public interface fCrowdDistriStream extends StdCallCallback {
+ public void invoke (LLong lAttachHandle, Pointer pstResult,Pointer dwUser);
+ }
+
+ /**
+ * 取消订阅人群分布图实时统计信息
+ * @param lAttachHandle 订阅句柄,为接口CLIENT_AttachCrowdDistriMap的返回值
+ * @return boolean
+ */
+ public boolean CLIENT_DetachCrowdDistriMap(LLong lAttachHandle);
+
+
+ /**
+ * 获取人群分布图全局和区域实时人数统计值
+ * @param lLoginID 登陆句柄
+ * @param pstInParam -> NET_IN_GETSUMMARY_CROWDDISTRI_MAP_INFO 接口输入参数
+ * @param pstOutParam -> NET_OUT_GETSUMMARY_CROWDDISTRI_MAP_INFO 接口输出参数
+ * @param nWaitTime 等待超时时间
+ * @return boolean
+ */
+ public boolean CLIENT_GetSummaryCrowdDistriMap(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 下发人员信息录入结果
+ * @param lLoginID 登陆句柄
+ * @param pstInParam -> NET_IN_PERSON_INFO_INPUT_RESULT 接口输入参数
+ * @param pstOutParam -> NET_OUT_PERSON_INFO_INPUT_RESULT 接口输出参数
+ * @param nWaitTime 等待超时时间
+ * @return boolean
+ */
+ public boolean CLIENT_SetPersonInfoInputResult(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+
+ /**
+ * 根据查询条件返回录像备份任务的信息表,pInParam与pOutParam内存由用户申请释放
+ * @param lLoginID 登陆句柄
+ * @param pInParam -> NET_IN_FIND_REC_BAK_RST_TASK 接口输入参数
+ * @param pOutParam -> NET_OUT_FIND_REC_BAK_RST_TASK 接口输出参数
+ * @param nWaitTime 等待超时时间
+ * @return boolean
+ */
+ public boolean CLIENT_FindRecordBackupRestoreTaskInfos(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+
+ /**
+ * 功能描述:异步纯透传订阅接口
+ * @param lLoginID 登录接口返回的句柄
+ * @param pInParam -> NET_IN_ATTACH_TRANSMIT_INFO 异步纯透传接口输入参数
+ * @param pOutParam -> NET_OUT_ATTACH_TRANSMIT_INFO 异步纯透传接口输出参数
+ * @param nWaittime 接口超时时间
+ * @return LLong 异步纯透传句柄
+ */
+ public LLong CLIENT_AttachTransmitInfo(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * CLIENT_AttachTransmitInfo()回调函数原型,第一个参数lAttachHandle是CLIENT_AttachTransmitInfo返回值,
+ */
+ public interface AsyncTransmitInfoCallBack extends StdCallCallback {
+ public void invoke (LLong lAttachHandle, NET_CB_TRANSMIT_INFO pTransmitInfo,Pointer dwUser);
+ }
+
+ /**
+ * 功能描述:异步纯透传取消订阅接口
+ * @param lAttachHandle 异步纯透传句柄,即CLIENT_AttachTransmitInfo接口的返回值
+ * @param pInParam -> NET_IN_DETACH_TRANSMIT_INFO 异步纯透传取消订阅接口输入参数
+ * @param pOutParam -> NET_OUT_DETACH_TRANSMIT_INFO 异步纯透传取消订阅接口输出参数
+ * @param nWaittime 接口超时时间
+ * @return boolean TRUE :成功; FALSE :失败
+ */
+ public boolean CLIENT_DetachTransmitInfo(LLong lAttachHandle, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+
+
+
+ /**
+ * 雷达订阅RFID卡片信息
+ * @param lLoginID 登陆句柄
+ * @param pstInParam -> NET_IN_ATTACH_RADAR_RFIDCARD_INFO 接口输入参数
+ * @param pstOutParam -> NET_OUT_ATTACH_RADAR_RFIDCARD_INFO 接口输出参数
+ * @param nWaitTime 等待超时时间
+ * @return LLong
+ */
+ public LLong CLIENT_AttachRadarRFIDCardInfo(LLong lLoginID, NET_IN_ATTACH_RADAR_RFIDCARD_INFO pstInParam, NET_OUT_ATTACH_RADAR_RFIDCARD_INFO pstOutParam, int nWaitTime);
+
+
+ /**
+ * 雷达取消订阅RFID卡片信息
+ * @param lAttachHandle 订阅句柄
+ * @return boolean
+ */
+ public boolean CLIENT_DetachRadarRFIDCardInfo(LLong lAttachHandle);
+
+
+ /**
+ * 查询RFID的工作模式
+ * @param lLoginID 登陆句柄
+ * @param pstInParam -> NET_IN_RADAR_GET_RFID_MODE 接口输入参数
+ * @param pstOutParam -> NET_OUT_RADAR_GET_RFID_MODE 接口输出参数
+ * @param nWaitTime 等待超时时间
+ * @return boolean
+ */
+ public boolean CLIENT_GetRadarRFIDMode(LLong lLoginID, NET_IN_RADAR_GET_RFID_MODE pstInParam, NET_OUT_RADAR_GET_RFID_MODE pstOutParam, int nWaitTime);
+
+
+ /**
+ * 设置RFID的工作模式
+ * @param lLoginID 登陆句柄
+ * @param pstInParam -> NET_IN_RADAR_SET_RFID_MODE 接口输入参数
+ * @param pstOutParam -> NET_OUT_RADAR_SET_RFID_MODE 接口输出参数
+ * @param nWaitTime 等待超时时间
+ * @return boolean
+ */
+ public boolean CLIENT_SetRadarRFIDMode(LLong lLoginID, NET_IN_RADAR_SET_RFID_MODE pstInParam, NET_OUT_RADAR_SET_RFID_MODE pstOutParam, int nWaitTime);
+
+ /**
+ * 按条件删除车牌库中的车牌
+ * @param lLoginID 登陆句柄
+ * @param pstInParam -> NET_IN_DEL_BY_CONDITION_FROM_VEHICLE_REG_DB 接口输入参数
+ * @param pstOutParam -> NET_OUT_DEL_BY_CONDITION_FROM_VEHICLE_REG_DB 接口输出参数
+ * @param nWaitTime 等待超时时间
+ * @return boolean
+ */
+ public boolean CLIENT_DeleteByConditionFromVehicleRegisterDB(LLong lLoginID,Pointer pstInParam,Pointer pstOutParam,int nWaitTime);
+
+ /**
+ * 设置消费结果
+ * @param lLoginID 登陆句柄
+ * @param pInParam -> NET_IN_SET_CONSUME_RESULT 接口输入参数
+ * @param pOutParam -> NET_OUT_SET_CONSUME_RESULT 接口输出参数
+ * @param nWaitTime 等待超时时间
+ * @return boolean
+ */
+ public boolean CLIENT_SetConsumeResult(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+
+ /**
+ * 远程休眠模式
+ * @param lLoginID 登录句柄
+ * @param pInParam -> NET_IN_REMOTE_SLEEP 接口输入参数
+ * @param pOutParam -> NET_OUT_REMOTE_SLEEP 接口输出参数
+ * @param nWaitTime 等待超时时间
+ * @return boolean
+ */
+ public boolean CLIENT_RemoteSleep(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 自定义定时抓图订阅接口(目前智慧养殖猪温检测在用)
+ * @param lLoginID 登录句柄
+ * @param pInParam -> NET_IN_ATTACH_CUSTOM_SNAP_INFO 接口输入参数
+ * @param pOutParam -> NET_OUT_ATTACH_CUSTOM_SNAP_INFO 接口输出参数
+ * @param nWaitTime 等待超时时间
+ * @return LLong
+ */
+ public LLong CLIENT_AttachCustomSnapInfo(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+
+ /**
+ * 自定义定时抓图订阅回调函数原型,
+ * @param lAttachHandle 为 CLIENT_AttachCustomSnapInfo 接口的返回值
+ * @param pstResult 参考结构体 NET_CB_CUSTOM_SNAP_INFO
+ */
+ public interface fAttachCustomSnapInfo extends StdCallCallback {
+ public void invoke(LLong lAttachHandle,Pointer pstResult,Pointer pBuf,int dwBufSize,Pointer dwUser);
+ }
+
+ /**
+ * 取消自定义定时抓图订阅接口(目前智慧养殖猪温检测在用)
+ * @param lAttachHandle 订阅句柄
+ * @return boolean
+ */
+ public boolean CLIENT_DetachCustomSnapInfo(LLong lAttachHandle);
+
+ /**
+ * 物模型属性订阅回调函数原型, lAttachHandle为CLIENT_AttachThingsInfo接口的返回值
+ * @param lAttachHandle 订阅句柄
+ * @param pstResult 物模型属性订阅回调信息, 参考{@link NET_CB_THINGS_INFO}
+ * @return void
+ */
+ public interface fThingsCallBack extends StdCallCallback {
+ public void invoke(LLong lAttachHandle,Pointer pstResult,Pointer dwUserData);
+ }
+
+ /**
+ * 停止获取设备历史数据
+ * @param lFindHandle 查找句柄
+ * @return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_StopThingsHistoryData(LLong lFindHandle);
+
+ /**
+ * 获取设备历史数据结果接口
+ * @param lFindHandle 查找句柄
+ * @param pstInParam 接口输入参数,参考{@link NET_IN_THINGS_DOFIND_HISTORYDATA}
+ * @param pstOutParam 接口输出参数, 参考{@link NET_OUT_THINGS_DOFIND_HISTORYDATA}
+ * @param nWaitTime 接口超时时间, 单位毫秒
+ * @return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_DoFindThingsHistoryData(LLong lFindHandle,Pointer pstInParam,Pointer pstOutParam,int nWaitTime);
+
+ /**
+ * 开始获取设备历史数据接口
+ * @param lLoginID 登录句柄
+ * @param pstInParam 接口输入参数,参考{@link NET_IN_THINGS_START_HISTORYDATA}
+ * @param pstOutParam 接口输出参数, 参考{@link NET_OUT_THINGS_START_HISTORYDATA}
+ * @param nWaitTime 接口超时时间, 单位毫秒
+ * @return TRUE表示成功 FALSE表示失败
+ */
+ public LLong CLIENT_StartThingsHistoryData(LLong lLoginID,Pointer pstInParam,Pointer pstOutParam,int nWaitTime);
+
+ /**
+ * 智慧用电Things物模型服务调用接口
+ * @param lLoginID 登录句柄
+ * @param emType 物模型服务类型,参考{@link EM_THINGS_SERVICE_TYPE}
+ * @param pInBuf 接口输入参数,参考emType类型,内存资源由用户申请和释放
+ * @param pOutBuf 接口输出参数,参考emType类型,内存资源由用户申请和释放
+ * @param nWaitTime 接口超时时间, 单位毫秒
+ * @return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_ThingsServiceOperate(LLong lLoginID, int emType, Pointer pInBuf, Pointer pOutBuf, int nWaitTime);
+
+ /**
+ * 智慧用电Things获取设备连接状态信息接口
+ * @param lLoginID 登录句柄
+ * @param pInParam 接口输入参数,参考{@link NET_IN_THINGS_GET_NETSTATE}
+ * @param pOutParam 接口输出参数, 参考{@link NET_OUT_THINGS_GET_NETSTATE}
+ * @param nWaitTime 接口超时时间, 单位毫秒
+ * @return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_GetThingsNetState(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 智慧用电Things获取设备列表接口
+ * @param lLoginID 登录句柄
+ * @param pInParam 接口输入参数,参考{@link NET_IN_THINGS_GET_DEVLIST}
+ * @param pOutParam 接口输出参数, 参考{@link NET_OUT_THINGS_GET_DEVLIST}
+ * @param nWaitTime 接口超时时间, 单位毫秒
+ * @return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_GetThingsDevList(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 智慧用电Things获取设备能力集接口
+ * @param lLoginID 登录句柄
+ * @param pInParam 接口输入参数,参考{@link NET_IN_THINGS_GET_CAPS}
+ * @param pOutParam 接口输出参数, 参考{@link NET_OUT_THINGS_GET_CAPS}
+ * @param nWaitTime 接口超时时间, 单位毫秒
+ * @return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_GetThingsCaps(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 智慧用电Things取消物模型属性订阅接口
+ * @param lAttachHandle 订阅句柄
+ * @return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_DetachThingsInfo(LLong lAttachHandle);
+
+ /**
+ * 智慧用电Things物模型属性订阅接口
+ * @param lLoginID 登录句柄
+ * @param pInParam 接口输入参数,参考{@link NET_IN_THINGS_ATTACH}
+ * @param pOutParam 接口输出参数, 参考{@link NET_OUT_THINGS_ATTACH}
+ * @param nWaitTime 接口超时时间, 单位毫秒
+ * @return 订阅句柄
+ */
+ public LLong CLIENT_AttachThingsInfo(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 智慧用电Things配置设置接口
+ * @param lLoginID 登录句柄
+ * @param pInParam 接口输入参数,参考{@link NET_IN_THINGS_SET}
+ * @param pOutParam 接口输出参数, 参考{@link NET_OUT_THINGS_SET}
+ * @param nWaitTime 接口超时时间, 单位毫秒
+ * @return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_SetThingsConfig(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 智慧用电Things配置获取接口
+ * @param lLoginID 登录句柄
+ * @param pInParam 接口输入参数,参考{@link NET_IN_THINGS_GET}
+ * @param pOutParam 接口输出参数, 参考{@link NET_OUT_THINGS_GET}
+ * @param nWaitTime 接口超时时间, 单位毫秒
+ * @return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_GetThingsConfig(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+
+ /**
+ * 获取流量统计信息,pstInParam与pstOutParam内存由用户申请释放
+ * @param lLoginID 登录句柄
+ * @param pstInParam 接口输入参数,参考{@link NET_IN_TRAFFICSTARTFINDSTAT}
+ * @param pstOutParam 接口输出参数, 参考{@link NET_OUT_TRAFFICSTARTFINDSTAT}
+ * @return 查询句柄
+ */
+ public LLong CLIENT_StartFindFluxStat(LLong lLoginID,Pointer pstInParam,Pointer pstOutParam);
+
+ /**
+ *@brief 继续查询流量统计,pstInParam与pstOutParam内存由用户申请释放
+ * @param lFindHandle 查询句柄
+ * @param pstInParam 接口输入参数,参考{@link NET_IN_TRAFFICDOFINDSTAT}
+ * @param pstOutParam 接口输出参数, 参考{@link NET_OUT_TRAFFICDOFINDSTAT}
+ * @return
+ */
+ public int CLIENT_DoFindFluxStat(LLong lFindHandle,Pointer pstInParam,Pointer pstOutParam);
+
+ /**
+ * 结束查询流量统计
+ */
+ public boolean CLIENT_StopFindFluxStat(LLong lFindHandle);
+
+ /**
+ * 获取智能订阅参数CustomInfo的格式化字符串能力
+ *param[in] lLoginID 登录句柄
+ *param[in] pInParam 接口输入参数, 内存资源由用户申请和释放 {@link NET_IN_GET_CUSTOMINFO_CAPS}
+ *param[out] pOutParam 接口输出参数, 内存资源由用户申请和释放 {@link NET_OUT_GET_CUSTOMINFO_CAPS}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_GetCustomInfoCaps(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 获取温度值
+ * @param lLoginID 登录句柄
+ * @param pInParam 接口输入参数,参考{@link NET_IN_GET_TEMPERATUREEX}
+ * @param pstOutParam 接口输出参数, 参考{@link NET_OUT_GET_TEMPERATUREEX}
+ * @return 查询句柄
+ */
+ public boolean CLIENT_FaceBoard_GetTemperatureEx(LLong lLoginID, Pointer pInParam, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 考试计划
+ * CLIENT_SetExamRecordingPlans 接口入参
+ * CLIENT_SetExamRecordingPlans 接口出参
+ * 添加考试录像计划
+ *param[in] lLoginID: 登录句柄
+ *param[in] pstuInParam: 接口输入参数, 内存资源由用户申请和释放 {@link NET_IN_SET_EXAM_RECORDING_PLANS}
+ *param[out] pstuOutParam: 接口输出参数, 内存资源由用户申请和释放 {@link NET_OUT_SET_EXAM_RECORDING_PLANS}
+ *param[in] nWaitTime: 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_SetExamRecordingPlans(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+
+ /**
+ * 获取SMART扫描信息
+ * @param lLoginID 登录句柄
+ * @param pstuInParam 接口输入参数,参考{@link NET_IN_GET_DEV_STORAGE_SMART_VALUE}
+ * @param pstuOutParam 接口输出参数, 参考{@link NET_OUT_GET_DEV_STORAGE_SMART_VALUE}
+ * @param nWaitTime 接口超时时间, 单位毫秒
+ * @return
+ */
+ public boolean CLIENT_GetDevStorageSmartValue(LLong lLoginID, Pointer pstuInParam, Pointer pstuOutParam, int nWaitTime);
+
+ /**
+ * 获取设备各网卡的上传与发送速率
+ * @param lLoginID 登录句柄
+ * @param pstuInParam 接口输入参数,参考{@link NET_IN_GET_DEVICE_ETH_BAND_INFO}
+ * @param pstuOutParam 接口输出参数, 参考{@link NET_OUT_GET_DEVICE_ETH_BAND_INFO}
+ * @param nWaitTime 接口超时时间, 单位毫秒
+ * @return
+ */
+ public boolean CLIENT_GetDeviceEthBandInfo(LLong lLoginID, Pointer pstuInParam, Pointer pstuOutParam, int nWaitTime);
+
+
+ /**
+ *@ingroup functions
+ *@brief 销毁业务sdk模块
+ *@param[in] lSubBizHandle 业务sdk句柄,由CLIENT_CreateSubBusinessModule接口返回
+ *@retval BOOL
+ *@return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_DestroySubBusinessModule(LLong lSubBizHandle);
+
+ /**
+ *@ingroup functions
+ *@brief 创建业务sdk模块
+ *@param[in] pInParam 接口输入参数, 内存资源由用户申请和释放 NET_IN_CREAT_SUB_BUSINESS_MDL_INFO
+ *@param[out] pOutParam 接口输出参数, 内存资源由用户申请和释放 NET_OUT_CREAT_SUB_BUSINESS_MDL_INFO
+ *@retval LLONG
+ *@return 业务sdk句柄,非0表示成功 0表示失败
+ */
+ public LLong CLIENT_CreateSubBusinessModule(Pointer pInParam,Pointer pOutParam);
+
+
+ /**
+ *@ingroup functions
+ *@brief 启动子连接监听服务
+ *@param[in] pInParam 接口输入参数, 内存资源由用户申请和释放 NET_IN_START_SUBLINK_LISTEN_SERVER
+ *@param[out] pOutParam 接口输出参数, 内存资源由用户申请和释放 NET_OUT_START_SUBLINK_LISTEN_SERVER
+ *@retval LLONG
+ *@return 子链接监听服务句柄, 非0表示成功 0表示失败
+ */
+ public LLong CLIENT_StartSubLinkListenServer(Pointer pInParam,Pointer pOutParam);
+
+ /**
+ *@ingroup functions
+ *@brief 停止子连接监听服务
+ *@param[in] lListenServer 监听服务句柄,由CLIENT_StartSubLinkListenServer接口返回
+ *@retval BOOL
+ *@return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_StopSubLinkListenServer(LLong lListenServer);
+
+ /**
+ *@ingroup functions
+ *@brief 发送创建子连接所需的信息给设备, 由主业务模块调用
+ *@param[in] pInParam 接口输入参数, 内存资源由用户申请和释放 NET_IN_TRANSFER_SUBLINK_INFO
+ *@param[out] pOutParam 接口输出参数, 内存资源由用户申请和释放 NET_OUT_TRANSFER_SUBLINK_INFO
+ *@param[in] nWaitTime 接口超时时间, 单位毫秒
+ *@retval BOOL
+ *@return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_TransferSubLinkInfo(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ *@ingroup functions
+ *@brief 设置私有透传通道参数
+ *@param[in] pInParam 接口输入参数, 内存资源由用户申请和释放 NET_IN_SET_TRANSMITTUNNEL_PARAM
+ *@param[out] pOutParam 接口输出参数, 内存资源由用户申请和释放 NET_OUT_SET_TRANSMITTUNNEL_PARAM
+ *@retval BOOL
+ *@return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_SetTransmitTunnelParam(Pointer pInParam,Pointer pOutParam);
+
+ /**
+ *@ingroup functions
+ *@brief 创建隧道
+ *@param[in] lSubBizHandle 业务sdk句柄,由CLIENT_CreateSubBusinessModule接口返回
+ *@param[in] pInParam 接口输入参数, 内存资源由用户申请和释放 NET_IN_CREATE_TRANSMIT_TUNNEL
+ *@param[out] pOutParam 接口输出参数, 内存资源由用户申请和释放 NET_OUT_CREATE_TRANSMIT_TUNNEL
+ *@retval LLONG
+ *@return 透传隧道业务句柄,非0表示成功 0表示失败
+ */
+ public LLong CLIENT_CreateTransmitTunnel(LLong lSubBizHandle,Pointer pInParam,Pointer pOutParam);
+
+ /**
+ *@ingroup functions
+ *@brief 销毁隧道
+ *@param[in] lTransmitHandle 透传隧道业务句柄,由CLIENT_CreateTransmitTunnel接口返回
+ *@retval BOOL
+ *@return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_DestroyTransmitTunnel(LLong lTransmitHandle);
+
+ /**
+ *@ingroup callback
+ *@brief 子连接监听服务回调函数原型
+ *@param[out] lListenServer 子链接监听服务句柄, 由CLIENT_StartSubLinkListenServer接口返回
+ *@param[out] lSubBizHandle 分压业务sdk句柄, 由CLIENT_CreateSubBusinessModule接口返回
+ *@param[out] pstSubLinkCallBack 子链接监听服务回调信息 NET_SUBLINK_SERVER_CALLBACK
+ *@retval void
+ */
+ public interface fSubLinkServiceCallBack extends StdCallCallback {
+ public void invoke(LLong lListenServer,LLong lSubBizHandle,Pointer pstSubLinkCallBack);
+ }
+
+
+ /**
+ *@ingroup callback
+ *@brief 隧道业务连接断开回调
+ *@param[out] lSubBizHandle 下载句柄, 由CLIENT_CreateSubBusinessModule接口返回
+ *@param[out] lOperateHandle 业务句柄
+ *@param[out] pstDisConnectInfo 断线回调数据 NET_TRANSMIT_DISCONNECT_CALLBACK
+ *@retval void
+ */
+ public interface fTransmitDisConnectCallBack extends StdCallCallback {
+ public void invoke(LLong lSubBizHandle,LLong lOperateHandle,Pointer pstDisConnectInfo);
+ }
+
+ /**
+ *@ingroup functions
+ *@brief 获取/设置解码窗口输出OSD信息扩展接口(pInparam, pOutParam内存由用户申请释放)
+ *@param[in] lLoginHandle 登录句柄
+ *@param[in] pInParam 接口输入参数, 内存资源由用户申请和释放 {@link NET_IN_SPLIT_GET_OSD_EX}
+ *@param[out] pOutParam 接口输出参数, 内存资源由用户申请和释放 {@link NET_OUT_SPLIT_GET_OSD_EX}
+ *@param[in] nWaitTime 接口超时时间, 单位毫秒
+ *@retval BOOL
+ *@return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_GetSplitOSDEx(LLong lLoginHandle, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ *@ingroup functions
+ *@brief 获取/设置解码窗口输出OSD信息扩展接口(pInparam, pOutParam内存由用户申请释放)
+ *@param[in] lLoginHandle 登录句柄
+ *@param[in] pInParam 接口输入参数, 内存资源由用户申请和释放 {@link NET_IN_SPLIT_SET_OSD_EX}
+ *@param[out] pOutParam 接口输出参数, 内存资源由用户申请和释放 {@link NET_OUT_SPLIT_SET_OSD_EX}
+ *@param[in] nWaitTime 接口超时时间, 单位毫秒
+ *@retval BOOL
+ *@return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_SetSplitOSDEx(LLong lLoginHandle, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ *@ingroup functions
+ *@brief 销毁隧道
+ *@param[in] lLoginHandle 登录句柄
+ *@param[in] emType 入参类型枚举,{@link NET_SPLIT_OPERATE_TYPE}
+ *@param[in] pInParam 接口输入参数, 内存资源由用户申请和释放,类型参考枚举注释{@link NET_SPLIT_OPERATE_TYPE}
+ *@param[out] pOutParam 接口输出参数, 内存资源由用户申请和释放,类型参考枚举注释{@link NET_SPLIT_OPERATE_TYPE}
+ *@param[in] nWaitTime 接口超时时间, 单位毫秒
+ *@retval BOOL
+ *@return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_OperateSplit(LLong lLoginHandle, int emType, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * 根据中心公钥获取锁具随机公钥
+ *param[in] lLoginID 登录句柄
+ *param[in] pInParam 接口输入参数, 内存资源由用户申请和释放 {@link NET_IN_GET_DYNAMIC_LOCK_RANDOM_PUBLICKEY_INFO}
+ *param[out] pOutParam 接口输出参数, 内存资源由用户申请和释放 {@link NET_OUT_GET_DYNAMIC_LOCK_RANDOM_PUBLICKEY_INFO}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_GetDynamicLockRandomPublicKey(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 设置通讯秘钥
+ *param[in] lLoginID 登录句柄
+ *param[in] pInParam 接口输入参数, 内存资源由用户申请和释放 {@link NET_IN_SET_DYNAMIC_LOCK_COMMUNICATIONKEY_INFO}
+ *param[out] pOutParam 接口输出参数, 内存资源由用户申请和释放 {@link NET_OUT_SET_DYNAMIC_LOCK_COMMUNICATIONKEY_INFO}
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_SetDynamicLockCommunicationKey(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 设置开锁密钥
+ *param[in] lLoginID 登录句柄
+ *param[in] pInParam 接口输入参数, 内存资源由用户申请和释放 {@link NET_IN_SET_DYNAMIC_LOCK_OPENKEY_INFO}
+ *param[out] pOutParam 接口输出参数, 内存资源由用户申请和释放 {@link NET_OUT_SET_DYNAMIC_LOCK_OPENKEY_INFO}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_SetDynamicLockOpenKey(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 设置临时身份码
+ *param[in] lLoginID 登录句柄
+ *param[in] pInParam 接口输入参数, 内存资源由用户申请和释放 {@link NET_IN_SET_DYNAMIC_LOCK_TEMP_USERID_INFO}
+ *param[out] pOutParam 接口输出参数, 内存资源由用户申请和释放 {@link NET_OUT_SET_DYNAMIC_LOCK_TEMP_USERID_INFO}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_SetDynamicLockTempUserID(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 设置开锁码
+ *param[in] lLoginID 登录句柄
+ *param[in] pInParam 接口输入参数, 内存资源由用户申请和释放 {@link NET_IN_SET_DYNAMIC_LOCK_OPEN_CODE_INFO}
+ *param[out] pOutParam 接口输出参数, 内存资源由用户申请和释放 {@link NET_OUT_SET_DYNAMIC_LOCK_OPEN_CODE_INFO}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_SetDynamicLockOpenCode(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+
+ /**
+ * 推送智能分析图片文件和规则信息,当CLIENT_AddAnalyseTask的数据源类型emDataSourceType为 EM_DATA_SOURCE_PUSH_PICFILE_BYRULE 时使用
+ *param[in] lLoginID 登录句柄
+ *param[in] pInParam 接口输入参数, 内存资源由用户申请和释放 {@link NET_IN_PUSH_ANALYSE_PICTURE_FILE_BYRULE}
+ *param[out] pOutParam 接口输出参数, 内存资源由用户申请和释放 {@link NET_OUT_PUSH_ANALYSE_PICTURE_FILE_BYRULE}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_PushAnalysePictureFileByRule(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+
+ /**
+ * 指定智能事件解析所用的结构体 用于解决java大结构体new对象慢导致的问题.该接口全局有效,建议在SDK初始化前调用
+ * @param pInParam 接口输入参数, 内存资源由用户申请和释放,参考{@link NET_IN_SET_IVSEVENT_PARSE_INFO}
+ * @return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_SetIVSEventParseType(NET_IN_SET_IVSEVENT_PARSE_INFO pInParam);
+
+ /**
+ * 平台下发轮询配置
+ * param[in] lLoginID 登录句柄
+ * param[in] pInParam 接口输入参数, 内存资源由用户申请和释放 {@link NET_IN_SET_POLLING_CONFIG}
+ * param[out] pOutParam 接口输出参数, 内存资源由用户申请和释放 {@link NET_OUT_SET_POLLING_CONFIG}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_SetPollingConfig(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+
+ /**
+ * 按通道获取设备智能业务的运行状态
+ *param[in] lLoginID 登录句柄
+ *param[in] pstuInParam 接口输入参数, 内存资源由用户申请和释放 {@link NET_IN_GET_CHANNEL_STATE}
+ *param[out] pstuOutParam 接口输出参数, 内存资源由用户申请和释放 {@link NET_OUT_GET_CHANNEL_STATE}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_GetChannelState(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 获取隐私遮挡列表
+ * param[in] lLoginID 登录句柄
+ * param[in] pstuInParam 接口输入参数 ,{@link NET_IN_GET_PRIVACY_MASKING}
+ * param[out]pstuOutParam 接口输出参数,,{@link NET_OUT_GET_PRIVACY_MASKING}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_GetPrivacyMasking(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 设置隐私遮挡列表
+ * param[in] lLoginID 登录句柄
+ * param[in] pstuInParam 接口输入参数 ,{@link NET_IN_SET_PRIVACY_MASKING}
+ * param[out]pstuOutParam 接口输出参数,,{@link NET_OUT_SET_PRIVACY_MASKING}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_SetPrivacyMasking(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+
+
+ /**
+ * 使能或关闭所有隐私遮挡块
+ * param[in] lLoginID 登录句柄
+ * param[in] pstuInParam 接口输入参数 ,{@link NET_IN_SET_PRIVACY_MASKING_ENABLE}
+ * param[out]pstuOutParam 接口输出参数,,{@link NET_OUT_SET_PRIVACY_MASKING_ENABLE}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_SetPrivacyMaskingEnable(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+
+ /**
+ * 获取隐私遮挡总开关使能状态
+ * param[in] lLoginID 登录句柄
+ * param[in] pstuInParam 接口输入参数 ,{@link NET_IN_GET_PRIVACY_MASKING_ENABLE}
+ * param[out]pstuOutParam 接口输出参数,,{@link NET_OUT_GET_PRIVACY_MASKING_ENABLE}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_GetPrivacyMaskingEnable(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+
+ /**
+ * 跳转到隐私遮档块
+ * param[in] lLoginID 登录句柄
+ * param[in] pstuInParam 接口输入参数 ,{@link NET_IN_GOTO_PRIVACY_MASKING}
+ * param[out]pstuOutParam 接口输出参数,,{@link NET_OUT_GOTO_PRIVACY_MASKING}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_GotoPrivacyMasking(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+
+ /**
+ * 删除隐私遮档块
+ * param[in] lLoginID 登录句柄
+ * param[in] pstuInParam 接口输入参数 ,{@link NET_IN_DELETE_PRIVACY_MASKING}
+ * param[out]pstuOutParam 接口输出参数,,{@link NET_OUT_DELETE_PRIVACY_MASKING}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_DeletePrivacyMasking(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+
+ /**
+ * 清除遮挡
+ * param[in] lLoginID 登录句柄
+ * param[in] pstuInParam 接口输入参数 ,{@link NET_IN_CLEAR_PRIVACY_MASKING}
+ * param[out]pstuOutParam 接口输出参数,,{@link NET_OUT_CLEAR_PRIVACY_MASKING}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_ClearPrivacyMasking(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 远程复位(消防)
+ * param[in] lLoginID 登录句柄
+ * param[in] emType 操作类型枚举,{@link EM_RADAR_OPERATE_TYPE}
+ * param[in] pInParam 接口输入参数 ,参考emType
+ * param[out]pOutParam 接口输出参数 ,参考emType
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_RadarOperate(LLong lLoginID, EM_RADAR_OPERATE_TYPE emType, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * 订阅mini雷达的报警点信息
+ * param[in] lLoginID 登录句柄
+ * param[in] pInParam 接口输入参数 ,{@link NET_IN_MINI_RADAR_ALARMPOINTINFO}
+ * param[out]pOutParam 接口输出参数 ,{@link NET_OUT_MINI_RADAR_ALARMPOINTINFO}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public LLong CLIENT_AttachMiniRadarAlarmPointInfo(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * 远程复位(消防)
+ * param[in] lLoginID 登录句柄
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_DetachMiniRadarAlarmPointInfo(LLong lAttachHandle);
+
+ /**
+ * 远程复位(消防)
+ * param[in] lLoginID 登录句柄
+ * param[in] pInParam 接口输入参数 ,{@link NET_IN_SMOKE_REMOTE_REBOOT_INFO}
+ * param[out]pOutParam 接口输出参数 ,{@link NET_OUT_SMOKE_REMOTE_REBOOT_INFO}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_SmokeRemoteReboot(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * mini雷达报警点信息
+ * 上报的mini雷达报警点信息
+ * mini雷达报警点信息回调函数指针
+ */
+ public interface fMiniRadarAlarmPointInfoCallBack extends StdCallCallback {
+ /**
+ *
+ * @param lLoginId 登录句柄
+ * @param lAttachHandle 订阅句柄
+ * @param pBuf {@link com.netsdk.lib.structure.NET_MINI_RADAR_NOTIFY_ALARMPOINTINFO}
+ * @param dwBufLen pBuf中结构体的长度
+ * @param pReserved 保留数据
+ * @param dwUser 用户自定义数据
+ */
+ public void invoke(LLong lLoginId, LLong lAttachHandle, Pointer pBuf, int dwBufLen, Pointer pReserved, Pointer dwUser);
+ }
+
+ /**
+ * 获取业务库管理的舱位信息
+ *param[in] lLoginID 登录句柄
+ *param[in] pInParam 接口输入参数, 内存资源由用户申请和释放 {@link NET_IN_GET_FINANCIAL_CABIN_INFO}
+ *param[out] pOutParam 接口输出参数, 内存资源由用户申请和释放 {@link NET_OUT_GET_FINANCIAL_CABIN_INFO}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_GetFinancialCabinInfo(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 获取金库门状态
+ *param[in] lLoginID: 登录句柄
+ *param[in] pstuInParam: 接口输入参数, 内存资源由用户申请和释放 {@link NET_IN_GET_VAULTDOOR_STATE_INFO}
+ *param[out] pstuOutParam: 接口输出参数, 内存资源由用户申请和释放 {@link NET_OUT_GET_VAULTDOOR_STATE_INFO}
+ *param[in] nWaitTime: 接口超时时间, 单位毫秒
+ *return TRUE表示成功FALSE表示失败
+ */
+ public boolean CLIENT_GetVaultDoorState(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 获取金融柜体设备状态
+ *param[in] lLoginID: 登录句柄
+ *param[in] pstuInParam: 接口输入参数, 内存资源由用户申请和释放 {@link NET_IN_GET_CABINET_STATE_INFO}
+ *param[out] pstuOutParam: 接口输出参数, 内存资源由用户申请和释放 {@link NET_OUT_GET_CABINET_STATE_INFO}
+ *param[in] nWaitTime: 接口超时时间, 单位毫秒
+ *return TRUE表示成功FALSE表示失败
+ */
+ public boolean CLIENT_GetFinancialCabinetState(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+
+ /**
+ * 获取当前电梯运行信息
+ *param[in] lLoginID: 登录句柄
+ *param[in] pstuInParam: 接口输入参数, 内存资源由用户申请和释放 {@link NET_IN_GET_ELEVATOR_WORK_INFO}
+ *param[out] pstuOutParam: 接口输出参数, 内存资源由用户申请和释放 {@link NET_OUT_GET_ELEVATOR_WORK_INFO}
+ *param[in] nWaitTime: 接口超时时间, 单位毫秒
+ *return TRUE表示成功FALSE表示失败
+ */
+ public boolean CLIENT_GetElevatorWorkInfo(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 获取水质检测能力
+ *param[in] lLoginID 登录句柄
+ *param[in] pstuInParam 接口输入参数 {@link NET_IN_WATERDATA_STAT_SERVER_GETCAPS_INFO}
+ *param[out]pstuOutParam 接口输出参数 {@link NET_OUT_WATERDATA_STAT_SERVER_GETCAPS_INFO}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public LLong CLIENT_GetWaterDataStatServerCaps(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 水质检测实时数据获取
+ *param[in] lLoginID 登录句柄
+ *param[in] pstuInParam 接口输入参数 {@link NET_IN_WATERDATA_STAT_SERVER_GETDATA_INFO}
+ *param[out]pstuOutParam 接口输出参数 {@link NET_OUT_WATERDATA_STAT_SERVER_GETDATA_INFO}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public LLong CLIENT_GetWaterDataStatServerWaterData(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 开始水质检测报表数据查询
+ *param[in] lLoginID 登录句柄
+ *param[in] pstuInParam 接口输入参数 {@link NET_IN_START_FIND_WATERDATA_STAT_SERVER_INFO}
+ *param[out]pstuOutParam 接口输出参数 {@link NET_OUT_START_FIND_WATERDATA_STAT_SERVER_INFO}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public LLong CLIENT_StartFindWaterDataStatServer(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 水质检测报表数据查询
+ *param[in] lLoginID 登录句柄
+ *param[in] pstuInParam 接口输入参数 {@link NET_IN_DO_FIND_WATERDATA_STAT_SERVER_INFO}
+ *param[out]pstuOutParam 接口输出参数 {@link NET_OUT_DO_FIND_WATERDATA_STAT_SERVER_INFO}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public LLong CLIENT_DoFindWaterDataStatServer(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 停止水质检测报表数据查询
+ *param[in] lLoginID 登录句柄
+ *param[in] pstuInParam 接口输入参数 {@link NET_IN_STOP_FIND_WATERDATA_STAT_SERVER_INFO}
+ *param[out]pstuOutParam 接口输出参数 {@link NET_OUT_STOP_FIND_WATERDATA_STAT_SERVER_INFO}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public LLong CLIENT_StopFindWaterDataStatServer(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 获取设备状态, DMSS专用接口, pInParam与pOutParam内存由用户申请释放
+ *param[in] lLoginID 登录句柄
+ *param[in] pstuInParam 接口输入参数 {@link NET_IN_UNIFIEDINFOCOLLECT_GET_DEVSTATUS}
+ *param[out]pstuOutParam 接口输出参数 {@link NET_OUT_UNIFIEDINFOCOLLECT_GET_DEVSTATUS}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_GetUnifiedStatus(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+
+ /**
+ * 主从联动组, 操作接口,pInParam与pOutParam内存由用户申请释放,大小参照emOperateType对应的结构体
+ * param[in] lLoginID 登录句柄
+ * param[in] emOperateType 接口输入参数 ,参考枚举 {@link EM_MSGROUP_OPERATE_TYPE}
+ * param[in] pInParam 接口输入参数 ,参考枚举对应的入参
+ * param[out] pOutParam 接口输出参数 ,参考枚举对应的出参
+ * param[in] nWaitTime 接口超时时间,默认3000, 单位毫秒
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_OperateMasterSlaveGroup(LLong lLoginID,int emOperateType,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+
+ /**
+ * 获取token, pstuInParam与pstuOutParam内存由用户申请释放
+ *param[in] lLoginID 登录句柄
+ *param[in] pstuInParam 接口输入参数 {@link NET_IN_MAKE_TOKEN}
+ *param[out]pstuOutParam 接口输出参数 {@link NET_OUT_MAKE_TOKEN}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_MakeToken(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 获取共享文件夹工作目录信息
+ *param[in] lLoginID 登录句柄
+ *param[in] pstInParam 接口输入参数 {@link NET_IN_NAS_DIRECTORY_GET_INFO}
+ *param[out] pstOutParam 接口输出参数 {@link NET_OUT_NAS_DIRECTORY_GET_INFO}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_GetNASDirectoryInfo(LLong lLoginID,Pointer pstInParam,Pointer pstOutParam,int nWaitTime);
+
+ /**
+ * 根据文件路径获取外部导入文件信息
+ *param[in] lLoginID 登录句柄
+ *param[in] pstInParam 接口输入参数 {@link NET_IN_GET_FILE_INFO_BY_PATH_INFO}
+ *param[out] pstOutParam 接口输出参数 {@link NET_OUT_GET_FILE_INFO_BY_PATH_INFO}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_GetFileManagerExFileInfoByPath(LLong lLoginID,Pointer pstInParam,Pointer pstOutParam,int nWaitTime);
+
+ /***************************工装合规接口Start***************************************************/
+ /**
+ * 创建工装合规组
+ *param[in] lLoginID 登录句柄
+ *param[in] pInParam 接口输入参数 {@link NET_IN_CREATE_WORKSUIT_COMPARE_GROUP}
+ *param[out] pOutParam 接口输出参数 {@link NET_OUT_CREATE_WORKSUIT_COMPARE_GROUP}
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_CreateWorkSuitCompareGroup(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 删除工装合规组
+ *param[in] lLoginID 登录句柄
+ *param[in] pInParam 接口输入参数 {@link NET_IN_DELETE_WORKSUIT_COMPARE_GROUP}
+ *param[out] pOutParam 接口输出参数 {@link NET_OUT_DELETE_WORKSUIT_COMPARE_GROUP}
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_DeleteWorkSuitCompareGroup(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 查找工装合规组信息
+ *param[in] lLoginID 登录句柄
+ *param[in] pInParam 接口输入参数 {@link NET_IN_FIND_WORKSUIT_COMPARE_GROUP}
+ *param[out] pOutParam 接口输出参数 {@link NET_OUT_FIND_WORKSUIT_COMPARE_GROUP}
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_FindWorkSuitCompareGroup(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 批量添加工装合规样本
+ *param[in] lLoginID 登录句柄
+ *param[in] pInParam 接口输入参数 {@link NET_IN_MULTI_APPEND_TO_WORKSUIT_GROUP}
+ *param[out] pOutParam 接口输出参数 {@link NET_OUT_MULTI_APPEND_TO_WORKSUIT_GROUP}
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_MultiAppendToWorkSuitCompareGroup(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 通过全景图唯一标识符删除工装合规样本
+ *param[in] lLoginID 登录句柄
+ *param[in] pInParam 接口输入参数 {@link NET_IN_DELETE_WORKSUIT_BY_SOURCEUID}
+ *param[out] pOutParam 接口输出参数 {@link NET_OUT_DELETE_WORKSUIT_BY_SOURCEUID}
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_DeleteWorkSuitBySourceUID(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /***************************工装合规接口End***************************************************/
+ /**
+ * 区分报表查询, 单独实现一套全量查询数据接口
+ *param[in] lLoginID 登录句柄
+ *param[in] pstInParam 接口输入参数 {@link NET_IN_START_FIND_DETAIL_CLUSTER}
+ *param[out] pstOutParam 接口输出参数 {@link NET_OUT_START_FIND_DETAIL_CLUSTER}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_StartFindDetailNumberStatCluster(LLong lLoginID,Pointer pstInParam,Pointer pstOutParam,int nWaitTime);
+ /**
+ * 分批查询全量记录
+ *param[in] lLoginID 登录句柄
+ *param[in] pstInParam 接口输入参数 {@link NET_IN_DO_FIND_DETAIL_CLUSTER}
+ *param[out] pstOutParam 接口输出参数 {@link NET_OUT_DO_FIND_DETAIL_CLUSTER}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_DoFindDetailNumberStatCluster(LLong lLoginID,Pointer pstInParam,Pointer pstOutParam,int nWaitTime);
+ /**
+ * 停止查询
+ *param[in] lLoginID 登录句柄
+ *param[in] pstInParam 接口输入参数{@link NET_IN_STOP_FIND_DETAIL_CLUSTER_INFO}
+ *param[out] pstOutParam 接口输出参数 {@link NET_OUT_STOP_FIND_DETAIL_CLUSTER_INFO}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_StopFindDetailNumberStatCluster(LLong lLoginID,Pointer pstInParam,Pointer pstOutParam,int nWaitTime);
+ /**
+ * 平台主动获取设备聚档状态
+ *param[in] lLoginID 登录句柄
+ *param[in] pstInParam 接口输入参数{@link NET_IN_GET_CLUSTER_STATE_INFO}
+ *param[out] pstOutParam 接口输出参数{@link NET_OUT_GET_CLUSTER_STATE_INFO}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_GetClusterState(LLong lLoginID,Pointer pstInParam,Pointer pstOutParam,int nWaitTime);
+
+ /**
+ * 获取烟感数据
+ *param[in] lLoginID 登录句柄
+ *param[in] pstInParam 接口输入参数{@link NET_IN_GET_SMOKE_DATA}
+ *param[out] pstOutParam 接口输出参数{@link NET_OUT_GET_SMOKE_DATA}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_GetSmokeData(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+
+ /**
+ * 修改车辆组
+ *param[in] lLoginID 登录句柄
+ *param[in] pstInParam 接口输入参数{@link NET_IN_MODIFY_GROUP_FOR_VEHICLE_REG_DB}
+ *param[out] pstOutParam 接口输出参数{@link NET_OUT_MODIFY_GROUP_FOR_VEHICLE_REG_DB}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_ModifyGroupForVehicleRegisterDB(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+
+ /**
+ * 查找车辆组信息
+ *param[in] lLoginID 登录句柄
+ *param[in] pstInParam 接口输入参数{@link NET_IN_FIND_GROUP_FROM_VEHICLE_REG_DB}
+ *param[out] pstOutParam 接口输出参数{@link NET_OUT_FIND_GROUP_FROM_VEHICLE_REG_DB}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_FindGroupFormVehicleRegisterDB(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 修改车辆信息
+ *param[in] lLoginID 登录句柄
+ *param[in] pstInParam 接口输入参数{@link NET_IN_MODIFY_VEHICLE_FOR_VEHICLE_REG_DB}
+ *param[out] pstOutParam 接口输出参数{@link NET_OUT_MODIFY_VEHICLE_FOR_VEHICLE_REG_DB}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_ModifyVehicleForVehicleRegisterDB(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 删除车辆信息
+ *param[in] lLoginID 登录句柄
+ *param[in] pstInParam 接口输入参数{@link NET_IN_DELETE_VEHICLE_FROM_VEHICLE_REG_DB}
+ *param[out] pstOutParam 接口输出参数{@link NET_OUT_DELETE_VEHICLE_FROM_VEHICLE_REG_DB}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_DeleteVehicleFromVehicleRegisterDB(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 向指定注册库查询车辆
+ *param[in] lLoginID 登录句柄
+ *param[in] pstInParam 接口输入参数{@link NET_IN_START_FIND_VEHICLE_REG_DB}
+ *param[out] pstOutParam 接口输出参数{@link NET_OUT_START_FIND_VEHICLE_REG_DB}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_StartFindVehicleRegisterDB(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+
+ /**
+ * 获取车辆查询结果信息
+ *param[in] lLoginID 登录句柄
+ *param[in] pstInParam 接口输入参数{@link NET_IN_DO_FIND_VEHICLE_REG_DB}
+ *param[out] pstOutParam 接口输出参数{@link NET_OUT_DO_FIND_VEHICLE_REG_DB}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_DoFindVehicleRegisterDB(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+
+ /**
+ * 结束车辆查询
+ *param[in] lLoginID 登录句柄
+ *param[in] pstInParam 接口输入参数{@link NET_IN_STOP_FIND_VEHICLE_REG_DB}
+ *param[out] pstOutParam 接口输出参数{@link NET_OUT_STOP_FIND_VEHICLE_REG_DB}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_StopFindVehicleRegisterDB(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ *订阅陀螺仪数据接口回调函数原型, lAttachGyroHandle为CLIENT_AttachGyro接口的返回值
+ *param[out] lAttachGyroHandle 订阅句柄
+ *param[out] pstuGyroDataInfo 订阅的陀螺仪数据回调信息 {@link NET_NOTIFY_GYRO_DATA_INFO}
+ *param[out] dwUser 用户信息
+ *return void
+ */
+ public interface fNotifyGyroData extends StdCallCallback {
+ public void invoke(LLong lAttachGyroHandle,Pointer pstuGyroDataInfo,Pointer dwUser);
+ }
+
+ /**
+ * 订阅陀螺仪数据接口
+ *param[in] lLoginID 登录句柄
+ *param[in] pstuInParam 接口输入参数 {@link NET_IN_ATTACH_GYRO}
+ *param[out] pstuOutParam 接口输出参数 {@link NET_OUT_ATTACH_GYRO}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return 返回订阅句柄
+ */
+ public LLong CLIENT_AttachGyro(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 取消陀螺仪数据订阅接口
+ *param[in] lAttachHandle 订阅句柄
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_DetachGyro(LLong lAttachHandle);
+
+
+ /**
+ * 立体行为-视频统计信息回调函数原形,
+ * param[out] lAttachHandle 是 CLIENT_AttachVideoStatistics返回值
+ * param[out] emType 是枚举{@link NET_EM_VS_TYPE}的值
+ * param[out] pBuf 是对应结构体数据指针,参考枚举值描述
+ */
+ public interface fVideoStatisticsInfoCallBack extends StdCallCallback {
+ public void invoke(LLong lAttachHandle,int emType,Pointer pBuf,int dwBufLen,Pointer dwUser);
+ }
+
+ /**
+ * 订阅客流统计服务实时数据
+ *param[in] lLoginID 登录句柄
+ *param[in] pstuInParam 接口输入参数 {@link NET_IN_ATTACH_VIDEO_STATISTICS}
+ *param[out] pstuOutParam 接口输出参数 {@link NET_OUT_ATTACH_VIDEO_STATISTICS}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return 返回订阅句柄
+ */
+ public LLong CLIENT_AttachVideoStatistics(LLong lLoginID,Pointer pstInParam,Pointer pstOutParam,int nWaitTime);
+
+
+ /**
+ * 取消订阅客流统计服务实时数据
+ *param[in] lAttachHandle 订阅句柄
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_DetachVideoStatistics(LLong lAttachHandle);
+
+ /**
+ * 智能事件开始查询
+ *param[in] lLoginID 登录句柄
+ *param[in] pstInParam 接口输入参数 {@link NET_IN_IVSEVENT_FIND_INFO}
+ *param[out] pstOutParam 接口输出参数 {@link NET_OUT_IVSEVENT_FIND_INFO}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return 查询句柄 非0表示成功,0表示失败
+ */
+ public LLong CLIENT_IVSEventFind(LLong lLoginID,Pointer pstInParam,Pointer pstOutParam,int nWaitTime);
+
+ /**
+ * 智能事件信息查询
+ *param[in] lFindHandle 查询句柄
+ *param[in] pstInParam 接口输入参数 {@link NET_IN_IVSEVENT_NEXTFIND_INFO}
+ *param[out] pstOutParam 接口输出参数 {@link NET_OUT_IVSEVENT_NEXTFIND_INFO}
+ *param[in] nWaitTime 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_IVSEventNextFind(LLong lFindHandle,Pointer pstInParam,Pointer pstOutParam,int nWaitTime);
+
+ /**
+ * 智能事件结束查询
+ *param[in] lFindHandle 查询句柄
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_IVSEventFindClose(LLong lFindHandle);
+
+ /**
+ * 按时间回放进度回调函数原形的扩展
+ * 参数recordfileinfoEx 指针对应结构体NET_RECORDFILE_INFOEX
+ */
+ public interface fTimeDownLoadPosCallBackEx extends StdCallCallback {
+ public void invoke(LLong lPlayHandle,int dwTotalSize,int dwDownLoadSize,int index,Pointer recordfileinfoEx,Pointer dwUser);
+ }
+ /**
+ * VK信息回调(pBuffer内存由SDK内部申请释放),dwError值可以dhnetsdk.h中找到相应的解释,比如NET_NOERROR,NET_ERROR_VK_INFO_DECRYPT_FAILED等
+ * 参数pBuffer指针对应结构体NET_VKINFO
+ */
+ public interface fVKInfoCallBack extends StdCallCallback {
+ public void invoke(LLong lRealHandle,Pointer pBuffer,int dwError,Pointer dwUser,Pointer pReserved);
+ }
+
+ /**
+ * 分压业务连接断线回调
+ *param[out] lSubBizHandle 分压业务sdk句柄, 由CLIENT_CreateSubBusinessModule接口返回
+ *param[out] lOperateHandle 业务句柄
+ *param[out] pstDisConnectInfo 断线回调数据 对应结构体NET_SUBBIZ_DISCONNECT_CALLBACK
+ *return void
+ */
+ public interface fSubBizDisConnectCallBack extends StdCallCallback {
+ public void invoke(LLong lSubBizHandle,LLong lOperateHandle,Pointer pstDisConnectInfo);
+ }
+
+
+ /**
+ * 订阅大图检测小图进度,配合CLIENT_FaceRecognitionDetectMultiFace使用, pstInParam与pstOutParam内存由用户申请释放
+ * param[in] pstuInParam 接口输入参数, 内存资源由用户申请和释放,{@link NET_IN_MULTIFACE_DETECT_STATE}
+ * param[out]pstuOutParam 接口输出参数, 内存资源由用户申请和释放,{@link NET_OUT_MULTIFACE_DETECT_STATE}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public LLong CLIENT_AttachDetectMultiFaceState(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 订阅大图检测小图进度回调函数原型
+ */
+ public interface fMultiFaceDetectState extends StdCallCallback {
+ public void invoke(LLong lAttachHandle, Pointer pstStates, Pointer dwUser);
+ }
+
+ /**
+ * 订阅大图检测小图进度回调函数原型
+ */
+ public interface fMultiFaceDetectStateEx extends StdCallCallback {
+ public void invoke(LLong lAttachHandle, Pointer pstStates, Pointer dwUser);
+ }
+
+ /**
+ * 开始人脸检测/注册库的多通道查询
+ * param[in] lLoginID 登录句柄
+ * param[in] pstuInParam 接口输入参数, 内存资源由用户申请和释放,{@link NET_IN_STARTMULTIFIND_FACERECONGNITION_EX}
+ * param[out]pstuOutParam 接口输出参数, 内存资源由用户申请和释放,{@link NET_OUT_STARTMULTIFIND_FACERECONGNITION_EX}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_StartMultiFindFaceRecognitionEx(LLong lLoginID, Pointer pstuInParam, Pointer pstuOutParam, int nWaitTime);
+
+ /**
+ * 获取人脸查询结果信息
+ * param[in] pstuInParam 接口输入参数, 内存资源由用户申请和释放,{@link NET_IN_DOFIND_FACERECONGNITION_EX}
+ * param[out]pstuOutParam 接口输出参数, 内存资源由用户申请和释放,{@link NET_OUT_DOFIND_FACERECONGNITION_EX}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_DoFindFaceRecognitionEx(Pointer pstuInParam, Pointer pstuOutParam, int nWaitTime);
+
+ /**
+ * 向服务器提交多张大图,从中检测人脸图片, pstInParam与pstOutParam内存由用户申请释放
+ * param[in] pstuInParam 接口输入参数, 内存资源由用户申请和释放,{@link NET_IN_FACE_RECOGNITION_DETECT_MULTI_FACE_INFO}
+ * param[out]pstuOutParam 接口输出参数, 内存资源由用户申请和释放,{@link NET_OUT_FACE_RECOGNITION_DETECT_MULTI_FACE_INFO}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_FaceRecognitionDetectMultiFace(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 取消订阅大图检测小图进度, lAttachHandle为CLIENT_AttachDetectMultiFaceState 返回的句柄
+ */
+ public boolean CLIENT_DetachDetectMultiFaceState(LLong lAttachHandle);
+
+ /**
+ * 获取安检机安全等级信息,pstInParam与pstOutParam内存由用户申请释放
+ * param[in] pInParam 接口输入参数, 内存资源由用户申请和释放,{@link NET_IN_GET_XRAY_MULTILEVEL_DETECT_INFO}
+ * param[out]pOutParam 接口输出参数, 内存资源由用户申请和释放,{@link NET_OUT_GET_XRAY_MULTILEVEL_DETECT_INFO}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ */
+ public LLong CLIENT_GetXRayMultiLevelDetectCFG(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 设置安检机安全等级信息,pstInParam与pstOutParam内存由用户申请释放
+ * param[in] pInParam 接口输入参数, 内存资源由用户申请和释放,{@link NET_IN_SET_XRAY_MULTILEVEL_DETECT_INFO}
+ * param[out]pOutParam 接口输出参数, 内存资源由用户申请和释放,{@link NET_OUT_SET_XRAY_MULTILEVEL_DETECT_INFO}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ */
+ public LLong CLIENT_SetXRayMultiLevelDetectCFG(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 动环遥测数据订阅
+ * param[in] lLoginID 登录句柄
+ * param[in] pstInParam 接口输入参数,{@link NET_IN_ATTACH_SCADA_DATA_INFO}
+ * param[out] pstOutParam 接口输出参数,{@link NET_OUT_ATTACH_SCADA_DATA_INFO}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return 返回订阅句柄
+ */
+ public LLong CLIENT_AttachSCADAData(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 动环遥测数据退订
+ * param[in] lSCADADataHandle 订阅句柄
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_DetachSCADAData(LLong lSCADADataHandle);
+
+ /**
+ * 动环遥测数据订阅回调函数原型, lSCADADataHandle 为 CLIENT_AttachSCADAData 接口的返回值
+ * param[out] lSCADADataHandle 订阅句柄
+ * param[out] pstuSCADADataNotifyInfo 订阅的遥测数据,{@link NET_NOTIFY_SCADA_DATA_INFO}
+ * param[out] dwUser 用户信息
+ * return void
+ */
+ public interface fNotifySCADAData extends StdCallCallback {
+ public void invoke(LLong lSCADADataHandle, Pointer pstuSCADADataNotifyInfo, Pointer dwUser);
+ }
+
+ /**
+ * 订阅统计通道数据,pInParam与pOutParam内存由用户申请释放
+ * param[in] pInParam 接口输入参数, 内存资源由用户申请和释放,{@link NET_IN_ATTACH_VIDEOSTAT_STREAM}
+ * param[out]pOutParam 接口输出参数, 内存资源由用户申请和释放,{@link NET_OUT_ATTACH_VIDEOSTAT_STREAM}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ */
+ public LLong CLIENT_AttachVideoStatStream(LLong lLoginID,Pointer pInParam,Pointer pOutParam,int nWaitTime);
+
+
+ /**
+ * 统计通道数据回调函数,参数pBuf 指针对应结构体NET_CB_VIDEOSTAT_STREAM
+ */
+ public interface fVideoStatStreamCallBack extends StdCallCallback {
+ public void invoke(LLong lAttachHandle, Pointer pBuf, int nBufLen, Pointer dwUser);
+ }
+
+ /**
+ * 取消订阅统计通道数据, lAttachHandle为CLIENT_AttachVideoStatStream 返回的句柄
+ */
+ public boolean CLIENT_DetachVideoStatStream(LLong lAttachHandle);
+ /**
+ * 获取电视墙预案,pInParam与pOutParam内存由用户申请释放
+ * param[in] pInParam 接口输入参数, 内存资源由用户申请和释放,{@link com.netsdk.lib.structure.optimized.NET_IN_WM_GET_COLLECTIONS_V1}
+ * param[out]pOutParam 接口输出参数, 内存资源由用户申请和释放 {@link com.netsdk.lib.structure.optimized.NET_OUT_WM_GET_COLLECTIONS_V1}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ */
+ public boolean CLIENT_GetMonitorWallCollectionsV1(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * 门禁设备开始捕获新卡
+ * param[in] pInParam 接口输入参数, 内存资源由用户申请和释放,{@link NET_IN_ACCESSCONTROL_CAPTURE_NEWCARD}
+ * param[out]pOutParam 接口输出参数, 内存资源由用户申请和释放 {@link NET_OUT_ACCESSCONTROL_CAPTURE_NEWCARD}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ */
+ public boolean CLIENT_AccessControlCaptureNewCard(LLong lLoginID, Pointer pInParam, Pointer pOutParam,int nWaitTime);
+
+ /**
+ * 门禁人证设备获取人脸
+ * param[in] pInParam 接口输入参数, 内存资源由用户申请和释放,{@link NET_IN_ACCESSCONTROL_CAPTURE_CMD}
+ * param[out]pOutParam 接口输出参数, 内存资源由用户申请和释放 {@link NET_OUT_ACCESSCONTROL_CAPTURE_CMD}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ */
+ public boolean CLIENT_AccessControlCaptureCmd(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+
+ /**
+ * 订阅智能分析结果
+ * param[in] lLoginID 登录句柄
+ * param[in] pstInParam 接口输入参数,{@link NET_IN_ATTACH_VIDEO_ANALYSE_ANALYSE_PROC}
+ * param[out] pstOutParam 接口输出参数,{@link NET_OUT_ATTACH_VIDEO_ANALYSE_ANALYSE_PROC}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return 返回订阅句柄
+ */
+ public LLong CLIENT_AttachVideoAnalyseAnalyseProc(LLong lLoginID, Pointer pstInParam, Pointer pstOutParam, int nWaitTime);
+
+ /**
+ * 取消订阅智能分析结果
+ * param[in] lAttachHandle 订阅句柄
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_DetachVideoAnalyseAnalyseProc(LLong lAttachHandle);
+
+ /**
+ * 智能分析结果的回调函数
+ * param[out] lAttachHandle 订阅句柄
+ * param[out] pstuVideoAnalyseTrackProc 智能分析结果的信息,{@link NET_VIDEO_ANALYSE_ANALYSE_PROC}
+ * param[out] dwUser 用户信息
+ * return void
+ */
+ public interface fVideoAnalyseAnalyseProc extends StdCallCallback {
+ public void invoke(LLong lAttachHandle, Pointer pstuVideoAnalyseTrackProc, Pointer dwUser);
+ }
+
+
+ /**
+ * 开始升级设备程序--扩展支持G以上文件升级
+ */
+ public LLong CLIENT_StartUpgradeEx2(LLong lLoginID,int emType,Pointer pchFileName,fUpgradeCallBackEx cbUpgrade,Pointer dwUser);
+
+ /**
+ * 报警主机设置操作
+ * param[in] lLoginID 登录句柄
+ * param[in] emType 设置的操作类型,{@link NET_EM_SET_ALARMREGION_INFO}
+ * param[in] pstuInParam 枚举对应的入参
+ * param[out] pstuOutParam 枚举对应的出参
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return void
+ */
+ public boolean CLIENT_SetAlarmRegionInfo(LLong lLoginID,int emType,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 获取设备序列号
+ * param[in] lLoginID 登录句柄
+ * param[in] pstInParam 接口输入参数,{@link NET_IN_GET_DEVICESERIALNO_INFO}
+ * param[out] pstOutParam 接口输出参数,{@link NET_OUT_GET_DEVICESERIALNO_INFO}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return void
+ */
+ public boolean CLIENT_GetDeviceSerialNo(LLong lLoginID,Pointer pstInParam,Pointer pstOutParam,int nWaitTime);
+
+ /**
+ * 获取设备类型
+ * param[in] lLoginID 登录句柄
+ * param[in] pstInParam 接口输入参数,{@link NET_IN_GET_DEVICETYPE_INFO}
+ * param[out] pstOutParam 接口输出参数,{@link NET_OUT_GET_DEVICETYPE_INFO}
+ * param[in] nWaitTime 接口超时时间, 单位毫秒
+ * return void
+ */
+ public boolean CLIENT_GetDeviceType(LLong lLoginID,Pointer pstInParam,Pointer pstOutParam,int nWaitTime);
+
+ /**
+ * RPC测试
+ *param[in] lLoginID: 登录句柄
+ *param[in] pstuInParam: 接口输入参数, 内存资源由用户申请和释放,参考{@link NET_IN_TRANSMIT_CMD}
+ *param[out] pstuOutParam: 接口输出参数, 内存资源由用户申请和释放,参考{@link NET_OUT_TRANSMIT_CMD}
+ *param[in] nWaitTime: 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_TransmitCmd(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 手动测试
+ *param[in] lLoginID: 登录句柄
+ *param[in] pstuInParam: 接口输入参数, 内存资源由用户申请和释放,参考{@link NET_IN_MANUAL_TEST}
+ *param[out]pstuOutParam: 接口输出参数, 内存资源由用户申请和释放,参考{@link NET_OUT_MANUAL_TEST}
+ *param[in] nWaitTime: 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_ManualTest(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 添加报警用户
+ *param[in] lLoginID: 登录句柄
+ *param[in] pstuInParam: 接口输入参数, 内存资源由用户申请和释放,参考{@link NET_IN_ADD_ALARM_USER}
+ *param[out] pstuOutParam: 接口输出参数, 内存资源由用户申请和释放,参考{@link NET_OUT_ADD_ALARM_USER}
+ *param[in] nWaitTime: 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_AddAlarmUser(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 修改报警用户
+ *param[in] lLoginID: 登录句柄
+ *param[in] pstuInParam: 接口输入参数, 内存资源由用户申请和释放,参考{@link NET_IN_MODIFY_ALARM_USER}
+ *param[out] pstuOutParam: 接口输出参数, 内存资源由用户申请和释放,参考{@link NET_OUT_MODIFY_ALARM_USER}
+ *param[in] nWaitTime: 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_ModifyAlarmUser(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+
+ /**
+ * 修改报警用户密码
+ *param[in] lLoginID: 登录句柄
+ *param[in] pstuInParam: 接口输入参数, 内存资源由用户申请和释放,参考{@link NET_IN_MODIFY_ALARM_USER_PASSWORD}
+ *param[out] pstuOutParam: 接口输出参数, 内存资源由用户申请和释放,参考{@link NET_OUT_MODIFY_ALARM_USER_PASSWORD}
+ *param[in] nWaitTime: 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_ModifyAlarmUserPassword(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 删除报警用户
+ *param[in] lLoginID: 登录句柄
+ *param[in] pstuInParam: 接口输入参数, 内存资源由用户申请和释放,参考{@link NET_IN_DELETE_ALARM_USER}
+ *param[out] pstuOutParam: 接口输出参数, 内存资源由用户申请和释放,参考{@link NET_OUT_DELETE_ALARM_USER}
+ *param[in] nWaitTime: 接口超时时间, 单位毫秒
+ *return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_DeleteAlarmUser(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 订阅无线对码信息接口,pstInParam与pstOutParam内存由用户申请释放
+ *param[in] lLoginID: 登录句柄
+ *param[in] pstInParam: 接口输入参数, 内存资源由用户申请和释放,参考{@link NET_IN_ATTACH_LOWRATEWPAN}
+ *param[out] pstOutParam: 接口输出参数, 内存资源由用户申请和释放,参考{@link NET_OUT_ATTACH_LOWRATEWPAN}
+ *param[in] nWaitTime: 接口超时时间, 单位毫秒
+ *return 返回订阅句柄
+ */
+ public LLong CLIENT_AttachLowRateWPAN(LLong lLoginID,Pointer pstuInParam,Pointer pstuOutParam,int nWaitTime);
+
+ /**
+ * 订阅无线对码信息回调函数原形,lAttachHandle是CLIENT_AttachLowRateWPAN返回值
+ *param[out] lLoginID 登录句柄
+ *param[out] lAttachHandle 订阅句柄
+ *param[out] lAttachHandle 对码信息, 参考{@link NET_CODEID_INFO}
+ *param[out] emError 对码错误类型, 参考{@link NET_CODEID_ERROR_TYPE}
+ *param[out] dwUser 用户数据
+ */
+ public interface fAttachLowRateWPANCB extends StdCallCallback {
+ public void invoke(LLong lLoginID,LLong lAttachHandle,Pointer stuBuf,int emError,Pointer dwUser);
+ }
+
+ /**
+ * 取消订阅无线对码信息接口,lAttachHandle是CLIENT_AttachLowRateWPAN返回值
+ * param[in] lAttachHandle 订阅句柄
+ * return TRUE表示成功 FALSE表示失败
+ */
+ public boolean CLIENT_DetachLowRateWPAN(LLong lAttachHandle);
+
+ /**
+ * 获取设备点位信息
+ * @param lLoginID 登录返回ID
+ * @param pInParam NET_IN_SCADA_GET_ATTRIBUTE_INFO
+ * @param pOutParam NET_OUT_SCADA_GET_ATTRIBUTE_INFO
+ * @param nWaitTime 超时时间
+ * @return
+ */
+ public boolean CLIENT_SCADAGetAttributeInfo(LLong lLoginID, Pointer pInParam, Pointer pOutParam, int nWaitTime);
+}
diff --git a/src/main/java/com/netsdk/lib/ToolKits.java b/src/main/java/com/netsdk/lib/ToolKits.java
new file mode 100644
index 0000000..164c744
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/ToolKits.java
@@ -0,0 +1,595 @@
+package com.netsdk.lib;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.image.BufferedImage;
+import java.awt.image.DataBufferByte;
+import java.awt.image.WritableRaster;
+import java.io.*;
+import java.net.URL;
+import java.text.SimpleDateFormat;
+
+import javax.imageio.ImageIO;
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JTextField;
+import javax.swing.UIManager;
+import javax.swing.filechooser.FileFilter;
+
+import com.netsdk.common.ErrorCode;
+import com.netsdk.common.PaintPanel;
+import com.netsdk.demo.module.LoginModule;
+import com.netsdk.lib.NetSDKLib.LLong;
+
+import com.sun.jna.Memory;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+import com.sun.jna.ptr.IntByReference;
+
+public class ToolKits {
+ static NetSDKLib netsdkapi = NetSDKLib.NETSDK_INSTANCE;
+ static NetSDKLib configapi = NetSDKLib.CONFIG_INSTANCE;
+
+ /***************************************************************************************************
+ * 工具方法 *
+ ***************************************************************************************************/
+ public static void GetPointerData(Pointer pNativeData, Structure pJavaStu)
+ {
+ GetPointerDataToStruct(pNativeData, 0, pJavaStu);
+ }
+
+ public static void GetPointerDataToStruct(Pointer pNativeData, long OffsetOfpNativeData, Structure pJavaStu) {
+ pJavaStu.write();
+ Pointer pJavaMem = pJavaStu.getPointer();
+ pJavaMem.write(0, pNativeData.getByteArray(OffsetOfpNativeData, pJavaStu.size()), 0,
+ pJavaStu.size());
+ pJavaStu.read();
+ }
+
+ public static void GetPointerDataToStructArr(Pointer pNativeData, Structure []pJavaStuArr) {
+ long offset = 0;
+ for (int i=0; i 0) {
+ byte[] buffer = new byte[length];
+ pointer.read(0, buffer, 0, length);
+ try {
+ str = new String(buffer, "GBK").trim();
+ } catch (UnsupportedEncodingException e) {
+ return str;
+ }
+ }
+
+ return str;
+ }
+
+ // 获取当前时间
+ public static String getDate() {
+ SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String date = simpleDate.format(new java.util.Date()).replace(" ", "_").replace(":", "-");
+
+ return date;
+ }
+
+ // 获取当前时间
+ public static String getDay() {
+ SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd");
+ String date = simpleDate.format(new java.util.Date());
+ return date;
+ }
+
+
+ // 限制JTextField 长度,以及内容
+ public static void limitTextFieldLength(final JTextField jTextField, final int size) {
+ jTextField.addKeyListener(new KeyListener() {
+
+ @Override
+ public void keyTyped(KeyEvent e) {
+ String number = "0123456789" + (char)8;
+ if(number.indexOf(e.getKeyChar()) < 0 || jTextField.getText().trim().length() >= size) {
+ e.consume();
+ return;
+ }
+ }
+
+ @Override
+ public void keyReleased(KeyEvent e) {
+ }
+
+ @Override
+ public void keyPressed(KeyEvent e) {
+ }
+ });
+ }
+
+ // 获取当前窗口
+ public static JFrame getFrame(ActionEvent e) {
+ JButton btn = (JButton)e.getSource();
+ JFrame frame = (JFrame)btn.getRootPane().getParent();
+
+ return frame;
+ }
+
+ // 获取操作平台信息
+ public static String getLoadLibrary(String library) {
+ String path = "";
+ String os = System.getProperty("os.name");
+ if(os.toLowerCase().startsWith("win")) {
+ path = "./libs/";
+ } else if(os.toLowerCase().startsWith("linux")) {
+ path = "";
+ }
+
+ return (path + library);
+ }
+
+ public static String getOsName() {
+ String osName = "";
+ String os = System.getProperty("os.name");
+ if(os.toLowerCase().startsWith("win")) {
+ osName = "win";
+ } else if(os.toLowerCase().startsWith("linux")) {
+ osName = "linux";
+ }
+
+ return osName;
+ }
+
+ /**
+ * 读取图片大小
+ * @param filePath 图片路径
+ * @return
+ */
+ public static long GetFileSize(String filePath) {
+ File f = new File(filePath);
+ if (f.exists() && f.isFile()) {
+ return f.length();
+ }
+ else
+ {
+ return 0;
+ }
+ }
+
+ /**
+ * 读取图片数据
+ * @param file 图片路径
+ * @param memory 图片数据缓存
+ * @return
+ * @throws IOException
+ */
+ public static boolean ReadAllFileToMemory(String file, Memory memory) throws IOException {
+ if (memory != Memory.NULL)
+ {
+ long fileLen = GetFileSize(file);
+ if (fileLen <= 0)
+ {
+ return false;
+ }
+ FileInputStream in =null;
+ try {
+ File infile = new File(file);
+ if (infile.canRead())
+ {
+ in = new FileInputStream(infile);
+ int buffLen = 1024;
+ byte[] buffer = new byte[buffLen];
+ long currFileLen = 0;
+ int readLen = 0;
+ while (currFileLen < fileLen)
+ {
+ readLen = in.read(buffer);
+ memory.write(currFileLen, buffer, 0, readLen);
+ currFileLen += readLen;
+ }
+ return true;
+ }
+ else
+ {
+ System.err.println("Failed to open file %s for read!!!\n");
+ return false;
+ }
+ }catch (Exception e)
+ {
+ System.err.println("Failed to open file %s for read!!!\n");
+ e.printStackTrace();
+ }finally{
+ if(in!=null){
+ in.close();
+ }
+ }
+ }
+
+ return false;
+ }
+
+ static class JPGFilter extends FileFilter {
+ public boolean accept(File f) {
+ if(f.getName().toLowerCase().endsWith(".JPG")
+ || f.getName().toLowerCase().endsWith(".jpg")
+ || f.isDirectory()) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public String getDescription() {
+ return "*.jpg; *.JPG";
+ }
+ }
+
+ /*
+ * 用选择器选择图片, 获取图片路径,并在界面显示
+ */
+ public static String openPictureFile(PaintPanel paintPanel) {
+ try {
+ UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ String picPath = "";
+
+ // 读取图片
+ JFileChooser jfc = new JFileChooser("d:/");
+ jfc.setMultiSelectionEnabled(false); // 不可以拖选多个文件
+ jfc.setAcceptAllFileFilterUsed(false); // 关闭显示所有
+
+ //添加过滤器
+ JPGFilter filter = new JPGFilter();
+ jfc.addChoosableFileFilter(filter);
+ jfc.setFileFilter(filter);
+
+ if( jfc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
+ picPath = jfc.getSelectedFile().getAbsolutePath();
+
+ /*
+ * 读取本地图片, 并在面板上显示
+ */
+ BufferedImage bufferedImage = null;
+ if(picPath == null || picPath.equals("")) {
+ return "";
+ }
+
+ File file = new File(picPath);
+ if(!file.exists()) {
+ return "";
+ }
+
+ try {
+ bufferedImage = ImageIO.read(file);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ if(bufferedImage == null) {
+ paintPanel.setOpaque(true);
+ paintPanel.repaint();
+
+ System.err.println("打开图片失败,请重新选择!");
+ return "";
+ } else {
+ paintPanel.setOpaque(false);
+ paintPanel.setImage(bufferedImage);
+ paintPanel.repaint();
+ }
+ }
+
+ try {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return picPath;
+ }
+
+ /*
+ * 传入图片路径, 打开图片, 并在面板显示
+ */
+ public static File openPictureFile(String picPath, PaintPanel paintPanel) {
+ /*
+ * 读取本地图片, 并在面板上显示
+ */
+ BufferedImage bufferedImage = null;
+ if(picPath == null || picPath.equals("")) {
+ return null;
+ }
+
+ File file = new File(picPath);
+ if(!file.exists()) {
+ return null;
+ }
+
+ try {
+ bufferedImage = ImageIO.read(file);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ if(bufferedImage == null) {
+ paintPanel.setOpaque(true);
+ paintPanel.repaint();
+
+ System.err.println("打开图片失败,请重新选择!");
+ return null;
+ } else {
+ paintPanel.setOpaque(false);
+ paintPanel.setImage(bufferedImage);
+ paintPanel.repaint();
+ }
+
+ return file;
+ }
+
+ /**
+ * 读取图片
+ * @return 图片缓存
+ * @throws IOException
+ */
+ public static Memory readPictureFile(String picPath) throws IOException {
+ int nPicBufLen = 0;
+ Memory memory = null;
+
+ /*
+ * 读取本地图片大小
+ */
+ nPicBufLen = (int)ToolKits.GetFileSize(picPath);
+
+ // 读取文件大小失败
+ if (nPicBufLen <= 0) {
+ System.err.println("读取图片大小失败,请重新选择!");
+ return null;
+ }
+
+ /*
+ * 读取图片缓存
+ */
+ memory = new Memory(nPicBufLen); // 申请缓存
+ memory.clear();
+
+ if (!ToolKits.ReadAllFileToMemory(picPath, memory)) {
+ System.err.println("读取图片数据,请重新选择!");
+ return null;
+ }
+
+ return memory;
+ }
+
+ /**
+ * 读取图片
+ * @return 图片缓存
+ * @throws IOException
+ */
+ public static Memory readPictureBytes(byte[] imageBytes){
+ // 使用JNA分配Memory对象
+ Memory mem = new Memory(imageBytes.length);
+ // 将字节数组复制到Memory对象中
+ mem.write(0, imageBytes, 0, imageBytes.length);
+ return mem;
+ }
+
+
+ /**
+ * 登录设备设备错误状态, 用于界面显示
+ */
+ public static String getErrorCodeShow() {
+ return ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError());
+ }
+
+ /**
+ * 获取接口错误码和错误信息,用于打印
+ * @return
+ */
+ public static String getErrorCodePrint() {
+ return "\n{error code: (0x80000000|" + (LoginModule.netsdk.CLIENT_GetLastError() & 0x7fffffff) +").参考 NetSDKLib.java }"
+ + " - {error info:" + ErrorCode.getErrorCode(LoginModule.netsdk.CLIENT_GetLastError()) + "}\n";
+ }
+
+ /**
+ * 获取单个配置
+ * @param hLoginHandle 登陆句柄
+ * @param nChn 通道号,-1 表示全通道
+ * @param strCmd 配置名称
+ * @param cmdObject 配置对应的结构体对象
+ * @return 成功返回 true
+ */
+ public static boolean GetDevConfig(LLong hLoginHandle, int nChn, String strCmd, Structure cmdObject) {
+ boolean result = false;
+ IntByReference error = new IntByReference(0);
+ int nBufferLen = 2*1024*1024;
+ byte[] strBuffer = new byte[nBufferLen];
+
+ if(netsdkapi.CLIENT_GetNewDevConfig( hLoginHandle, strCmd , nChn, strBuffer, nBufferLen,error,3000)) {
+ cmdObject.write();
+ if (configapi.CLIENT_ParseData(strCmd, strBuffer, cmdObject.getPointer(),
+ cmdObject.size(), null)) {
+ cmdObject.read();
+ result = true;
+ } else {
+ System.err.println("Parse " + strCmd + " Config Failed!" + ToolKits.getErrorCodePrint());
+ result = false;
+ }
+ } else {
+ System.err.printf("Get %s Config Failed!Last Error = %s\n" , strCmd , getErrorCodePrint());
+ result = false;
+ }
+
+ return result;
+ }
+
+ /**
+ * 设置单个配置
+ * @param hLoginHandle 登陆句柄
+ * @param nChn 通道号,-1 表示全通道
+ * @param strCmd 配置名称
+ * @param cmdObject 配置对应的结构体对象
+ * @return 成功返回 true
+ */
+ public static boolean SetDevConfig(LLong hLoginHandle, int nChn, String strCmd, Structure cmdObject) {
+ boolean result = false;
+ int nBufferLen = 2*1024*1024;
+ byte szBuffer[] = new byte[nBufferLen];
+ for(int i=0; i getFieldOrder() {
+ List fieldOrderList = new ArrayList();
+ for (Class> cls = getClass();
+ !cls.equals(NetSDKLib.SdkStructure.class);
+ cls = cls.getSuperclass()) {
+ Field[] fields = cls.getDeclaredFields();
+ int modifiers;
+ for (Field field : fields) {
+ modifiers = field.getModifiers();
+ if (Modifier.isStatic(modifiers) || !Modifier.isPublic(modifiers)) {
+ continue;
+ }
+ fieldOrderList.add(field.getName());
+ }
+ }
+ // System.out.println(fieldOrderList);
+
+ return fieldOrderList;
+ }
+ }
+
+ // 获取当前时间
+ public static String getDate() {
+ SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ return simpleDate.format(new java.util.Date())
+ .replace(" ", "_").replace(":", "-");
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/callback/fRedirectServerCallBackEx.java b/src/main/java/com/netsdk/lib/callback/fRedirectServerCallBackEx.java
new file mode 100644
index 0000000..4e70d2e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/callback/fRedirectServerCallBackEx.java
@@ -0,0 +1,40 @@
+package com.netsdk.lib.callback;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.ToolKits;
+import com.netsdk.lib.structure.NET_CB_REDIRECT_SERVER_CALLBACK_INFO;
+import com.netsdk.lib.structure.NET_IN_START_REDIRECT_SERVICE;
+import com.sun.jna.Callback;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 重定向服务器回调函数原形扩展
+ * @date 2021/3/13
+ */
+public interface fRedirectServerCallBackEx extends Callback {
+ /**
+ * @param lDevHandle 设备句柄
+ * @param pInParam 设备信息,对应结构体{@link NET_CB_REDIRECT_SERVER_CALLBACK_INFO}
+ * @param dwUserData 自定义数据,该自定义数据为{@link
+ * NET_IN_START_REDIRECT_SERVICE#dwUserData}传入的数据,注意保证dwUser不会被jvm回收,
+ * 否则回调中接收到的dwUser可能乱码,甚至导致程序崩溃
+ * @return
+ */
+ default int callback(NetSDKLib.LLong lDevHandle, Pointer pInParam, Pointer dwUserData) {
+ NET_CB_REDIRECT_SERVER_CALLBACK_INFO info = new NET_CB_REDIRECT_SERVER_CALLBACK_INFO();
+ ToolKits.GetPointerDataToStruct(pInParam, 0, info);
+ dealWithData(lDevHandle.longValue(), info, dwUserData);
+ return 0;
+ }
+
+ /**
+ * 数据处理
+ *
+ * @param devHandler 设备句柄
+ * @param info 主动注册重定向设备信息
+ * @param userData 用户数据
+ */
+ void dealWithData(long devHandler, NET_CB_REDIRECT_SERVER_CALLBACK_INFO info, Pointer userData);
+}
diff --git a/src/main/java/com/netsdk/lib/callback/fVideoStatHeatMapCallBack.java b/src/main/java/com/netsdk/lib/callback/fVideoStatHeatMapCallBack.java
new file mode 100644
index 0000000..fff67bc
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/callback/fVideoStatHeatMapCallBack.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.callback;
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Callback;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 热度图数据回调
+ * @date 2020/9/21
+ */
+public interface fVideoStatHeatMapCallBack extends Callback {
+ /**
+ * @param lAttachHandle 订阅句柄
+ * @param pBuf 回调上来的数据,对应结构体{@link com.netsdk.lib.structure.NET_CB_VIDEOSTAT_HEATMAP}
+ * @param pBinData 回调上来的二进制数据
+ * @param dwBinDataLen 二进制数据长度
+ * @param dwUser 用户数据
+ */
+ void invoke(
+ NetSDKLib.LLong lAttachHandle,
+ Pointer pBuf,
+ Pointer pBinData,
+ int dwBinDataLen,
+ Pointer dwUser);
+}
diff --git a/src/main/java/com/netsdk/lib/callback/securityCheck/fNotifyPopulationStatisticsInfo.java b/src/main/java/com/netsdk/lib/callback/securityCheck/fNotifyPopulationStatisticsInfo.java
new file mode 100644
index 0000000..edf4b61
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/callback/securityCheck/fNotifyPopulationStatisticsInfo.java
@@ -0,0 +1,21 @@
+package com.netsdk.lib.callback.securityCheck;
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Callback;
+import com.sun.jna.Pointer;
+
+
+/**
+ * @author : 291189
+ * @since : Created in 2021/7/5
+// 接口 CLIENT_AttachPopulationStatistics 回调函数
+// pstuPopulationStatisticsInfos 人数变化信息
+ */
+public interface fNotifyPopulationStatisticsInfo extends Callback {
+
+ void invoke(
+ NetSDKLib.LLong lPopulationStatisticsHandle,
+ Pointer pstuPopulationStatisticsInfos,
+ Pointer dwUser);
+ //typedef int (CALLBACK *fNotifyPopulationStatisticsInfo)(LLONG lPopulationStatisticsHandle, NET_POPULATION_STATISTICS_INFO* pstuPopulationStatisticsInfos, LDWORD dwUser);
+}
diff --git a/src/main/java/com/netsdk/lib/callback/securityCheck/fSecurityGateAttachAlarmStatistics.java b/src/main/java/com/netsdk/lib/callback/securityCheck/fSecurityGateAttachAlarmStatistics.java
new file mode 100644
index 0000000..81ac99b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/callback/securityCheck/fSecurityGateAttachAlarmStatistics.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.callback.securityCheck;
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Callback;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 安全门报警订阅回调函数
+ * @date 2021/6/29
+ */
+public interface fSecurityGateAttachAlarmStatistics extends Callback{
+
+ /**
+ * @param lAttachHandle 订阅句柄
+ * @param pInfo 安全门报警统计信息,对应结构体{@link com.netsdk.lib.structure.NET_SECURITYGATE_ALARM_STATISTICS_INFO}
+ * @param dwUser 用户数据
+ */
+ void invoke(
+ NetSDKLib.LLong lAttachHandle,
+ Pointer pInfo,
+ Pointer dwUser);
+
+ // (LLONG lAttachHandle, NET_SECURITYGATE_ALARM_STATISTICS_INFO* pInfo, LDWORD dwUser);
+}
diff --git a/src/main/java/com/netsdk/lib/callback/securityCheck/fXRayAttachPackageStatistics.java b/src/main/java/com/netsdk/lib/callback/securityCheck/fXRayAttachPackageStatistics.java
new file mode 100644
index 0000000..8fed86e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/callback/securityCheck/fXRayAttachPackageStatistics.java
@@ -0,0 +1,23 @@
+package com.netsdk.lib.callback.securityCheck;
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Callback;
+import com.sun.jna.Pointer;
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 包裹信息回调函数
+ * @date 2021/7/1
+ */
+public interface fXRayAttachPackageStatistics extends Callback {
+ /**
+ * @param lAttachHandle 订阅句柄
+ * @param pInfo 包裹信息回调函数,对应结构体{@link com.netsdk.lib.structure.NET_IN_XRAY_PACKAGE_STATISTICS_INFO}
+ * @param dwUser 用户数据
+ */
+ void invoke(
+ NetSDKLib.LLong lAttachHandle,
+ Pointer pInfo,
+ Pointer dwUser);
+
+}
diff --git a/src/main/java/com/netsdk/lib/constant/SDKStructureFieldLenth.java b/src/main/java/com/netsdk/lib/constant/SDKStructureFieldLenth.java
new file mode 100644
index 0000000..053a4c0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/constant/SDKStructureFieldLenth.java
@@ -0,0 +1,87 @@
+package com.netsdk.lib.constant;
+
+/**
+ * 一些结构体成员变量的数组长度
+ *
+ * @author 47081 47040
+ * @version 1.0
+ * @since 2020/8/24
+ */
+public class SDKStructureFieldLenth {
+ /** 通用名字字符串长度 */
+ public static final int NET_MAX_NAME_LEN = 16;
+ /** 视频分析设备支持的检测物体类型列表个数上限 */
+ public static final int MAX_OBJECT_LIST_SIZE = 16;
+ /** 一周的天数 */
+ public static final int WEEK_DAY_NUM = 7;
+ /** 录像时间段扩展个数 */
+ public static final int MAX_REC_TSECT_EX = 10;
+ /** 通用字符串长度512 */
+ public static final int SDK_COMMON_STRING_512 = 512;
+ /** 电视墙最大预案数 */
+ public static final int NET_MAX_COLLECTION_NUM = 64;
+ /** 景物点信息最大个数 */
+ public static final int MAX_SCENICSPOT_POINTS_NUM = 256;
+ /** 协议名称长度 */
+ public static final int MAX_PROTOCOL_NAME_LEN = 32;
+ /** 通用字符串长度32 */
+ public static final int CFG_COMMON_STRING_32 = 32;
+ /** 隐私遮挡类型数量 */
+ public static final int MAX_MASKTYPE_COUNT = 8;
+ /** 马赛克遮挡类型数量 */
+ public static final int MAX_MOSAICTYPE_COUNT = 8;
+ /** 最大下位矩阵输出通道数 */
+ public static final int CFG_MAX_LOWER_MATRIX_OUTPUT = 32;
+ /** 最大通道数256 */
+ public static final int CFG_MAX_VIDEO_CHANNEL_NUM = 256;
+ /** 最大多画面预览窗口数 8 */
+ public static final int CFG_MAX_PREVIEW_MODE_SPLIT_TYPE_NUM = 8;
+ /** 规则检测区域最大顶点数 */
+ public static final int SDK_MAX_DETECT_REGION_NUM = 20;
+ /** 检测到目标的最大个数 */
+ public static final int HDBJ_MAX_OBJECTS_NUM = 200;
+ /** 规则检测区域最大顶点数 */
+ public static final int DH_MAX_DETECT_REGION_NUM = 20;
+ /** 最大事件名称长度 */
+ public static final int MAX_EVENT_NAME_LEN = 128;
+ /** 最大标定点个数 */
+ public static final int MAX_CALIBRATE_POINT_NUM = 64;
+ /** 最大的地址长度 */
+ public static final int MAX_ADDRESS_LEN = 256;
+ /** 最大密码长度 */
+ public static final int MAX_PASSWORD_LEN = 64;
+ /** 最大的SIP服务器ID长度 */
+ public static final int MAX_SIP_SVR_ID_LEN = 24;
+ /** 最大的SIP域长度 */
+ public static final int MAX_SIP_DOMAIN_LEN = 128;
+ /** 最大的SIP服务器IP长度 */
+ public static final int MAX_SIP_SVR_IP_LEN = 128;
+ /** 最大的设备编号长度 */
+ public static final int MAX_SIP_SERVER_DEVICE_ID_LEN = 24;
+ /** 最大的注册密码长度 */
+ public static final int MAX_REG_PASSWORD_LEN = 24;
+ /** 最大的行政区划代码长度 */
+ public static final int MAX_CIVIL_CODE_LEN = 24;
+ /** 最大的接入模块识别码长度 */
+ public static final int MAX_INTERVIDEO_ID_LEN = 24;
+ /** 最大的通道编号长度 */
+ public static final int MAX_CHANNEL_ID_LEN = 24;
+ /** 最大的SIP服务器信息个数 */
+ public static final int MAX_SIP_SERVER_NUM = 5;
+ /** 动态检测区域的行数 */
+ public static final int MAX_MOTION_ROW = 32;
+ /** 动态检测区域的列数 */
+ public static final int MAX_MOTION_COL = 32;
+ /** 动检支持的视频窗口值 */
+ public static final int MAX_MOTION_WINDOW = 10;
+ /** 每个云台的最大配置数 */
+ public static final int MAX_CONFIG_NUM=32;
+ /** 最大语音编码类型个数 */
+ public static final int CFG_MAX_AUDIO_ENCODE_TYPE = 64;
+ /** 视频分辨率个数 */
+ public static final int CFG_MAX_CAPTURE_SIZE_NUM = 64;
+ /** 视频编码格式最多种类个数 */
+ public static final int CFG_MAX_COMPRESSION_TYPES_NUM = 16;
+ /** 路径最大长度 */
+ public static final int MAX_PATH = 260;
+}
diff --git a/src/main/java/com/netsdk/lib/constant/SDKSystemLogType.java b/src/main/java/com/netsdk/lib/constant/SDKSystemLogType.java
new file mode 100644
index 0000000..38dd382
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/constant/SDKSystemLogType.java
@@ -0,0 +1,8 @@
+package com.netsdk.lib.constant;
+
+public class SDKSystemLogType {
+ public static final int POWERON = 0;//上电
+ public static final int POWEROFF = 1;//断电
+ public static final int START_NETWORK_OUTAGE = 776;//断网开始
+ public static final int END_NETWORK_OUTAGE = 777;//断网结束
+}
diff --git a/src/main/java/com/netsdk/lib/constant/SDK_ALARM_Ex_TYPE.java b/src/main/java/com/netsdk/lib/constant/SDK_ALARM_Ex_TYPE.java
new file mode 100644
index 0000000..e6e5403
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/constant/SDK_ALARM_Ex_TYPE.java
@@ -0,0 +1,44 @@
+package com.netsdk.lib.constant;
+
+import com.netsdk.lib.structure.ALARM_SOLARCELL_SYSTEM_INFO;
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.NativeLong;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description \if ENGLISH_LANG
+ *
+ * \else
+ * 扩展报警类型,对应{@link NetSDKLib#CLIENT_StartListenEx(NetSDKLib.LLong)}
+ * \endif
+ * @date 2020/8/11
+ */
+public class SDK_ALARM_Ex_TYPE {
+ /**
+ * 太阳能系统信息上报(对应结构体 {@link ALARM_SOLARCELL_SYSTEM_INFO}),枚举值对应的回调接口{@link com.netsdk.lib.NetSDKLib.fMessCallBack#invoke(int, NetSDKLib.LLong, Pointer, int, String, NativeLong, Pointer)}
+ * 对应的接口{@link NetSDKLib#CLIENT_StartListenEx(NetSDKLib.LLong)}
+ */
+ public static final int SDK_ALARM_SOLARCELL_SYSTEM_INFO = 0x345F;
+
+ /**
+ * 硬盘满报警,数据为1个字节,1为有硬盘满报警,0为无报警。
+ * 对应的回调接口{@link NetSDKLib.fMessCallBack#invoke(int, NetSDKLib.LLong, Pointer, int, String, NativeLong, Pointer)}
+ * 对应的接口{@link NetSDKLib#CLIENT_StartListenEx(NetSDKLib.LLong)}
+ */
+ public static final int SDK_DISKFULL_ALARM_EX = 0x2106;
+ /**
+ * 坏硬盘报警,数据为32个字节,每个字节表示一个硬盘的故障报警状态,1为有报警,0为无报警。
+ * 对应的回调接口{@link NetSDKLib.fMessCallBack#invoke(int, NetSDKLib.LLong, Pointer, int, String, NativeLong, Pointer)}
+ * 对应的接口{@link NetSDKLib#CLIENT_StartListenEx(NetSDKLib.LLong)}
+ */
+ public static final int SDK_DISKERROR_ALARM_EX = 0x2107;
+ /**
+ * 无硬盘报警,对应结构体{@link com.netsdk.lib.structure.ALARM_NO_DISK_INFO}
+ * 对应的回调接口{@link NetSDKLib.fMessCallBack#invoke(int, NetSDKLib.LLong, Pointer, int, String, NativeLong, Pointer)}
+ * 对应的接口{@link NetSDKLib#CLIENT_StartListenEx(NetSDKLib.LLong)}
+ */
+ public static final int SDK_ALARM_NO_DISK = 0x2183;
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/CAPTURE_SIZE.java b/src/main/java/com/netsdk/lib/enumeration/CAPTURE_SIZE.java
new file mode 100644
index 0000000..64b8cf3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/CAPTURE_SIZE.java
@@ -0,0 +1,258 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 分辨率枚举,供DH_DSP_ENCODECAP使用
+* @date 2022/08/31 14:44:17
+*/
+public enum CAPTURE_SIZE {
+/**
+704*576(PAL) 704*480(NTSC),兼容WWxHH,下同
+*/
+CAPTURE_SIZE_D1(0,"704*576(PAL) 704*480(NTSC),兼容WWxHH,下同"),
+/**
+352*576(PAL) 352*480(NTSC)
+*/
+CAPTURE_SIZE_HD1(1,"352*576(PAL) 352*480(NTSC)"),
+/**
+704*288(PAL) 704*240(NTSC)
+*/
+CAPTURE_SIZE_BCIF(2,"704*288(PAL) 704*240(NTSC)"),
+/**
+352*288(PAL) 352*240(NTSC)
+*/
+CAPTURE_SIZE_CIF(3,"352*288(PAL) 352*240(NTSC)"),
+/**
+176*144(PAL) 176*120(NTSC)
+*/
+CAPTURE_SIZE_QCIF(4,"176*144(PAL) 176*120(NTSC)"),
+/**
+640*480
+*/
+CAPTURE_SIZE_VGA(5,"640*480"),
+/**
+320*240
+*/
+CAPTURE_SIZE_QVGA(6,"320*240"),
+/**
+480*480
+*/
+CAPTURE_SIZE_SVCD(7,"480*480"),
+/**
+160*128
+*/
+CAPTURE_SIZE_QQVGA(8,"160*128"),
+/**
+800*592
+*/
+CAPTURE_SIZE_SVGA(9,"800*592"),
+/**
+1024*768
+*/
+CAPTURE_SIZE_XVGA(10,"1024*768"),
+/**
+1280*800
+*/
+CAPTURE_SIZE_WXGA(11,"1280*800"),
+/**
+1280*1024
+*/
+CAPTURE_SIZE_SXGA(12,"1280*1024"),
+/**
+1600*1024
+*/
+CAPTURE_SIZE_WSXGA(13,"1600*1024"),
+/**
+1600*1200
+*/
+CAPTURE_SIZE_UXGA(14,"1600*1200"),
+/**
+1920*1200
+*/
+CAPTURE_SIZE_WUXGA(15,"1920*1200"),
+/**
+240*192,ND1
+*/
+CAPTURE_SIZE_LTF(16,"240*192,ND1"),
+/**
+1280*720
+*/
+CAPTURE_SIZE_720(17,"1280*720"),
+/**
+1920*1080
+*/
+CAPTURE_SIZE_1080(18,"1920*1080"),
+/**
+1280*960
+*/
+CAPTURE_SIZE_1_3M(19,"1280*960"),
+/**
+1872*1408,2_5M
+*/
+CAPTURE_SIZE_2M(20,"1872*1408,2_5M"),
+/**
+3744*1408
+*/
+CAPTURE_SIZE_5M(21,"3744*1408"),
+/**
+2048*1536
+*/
+CAPTURE_SIZE_3M(22,"2048*1536"),
+/**
+2432*2050
+*/
+CAPTURE_SIZE_5_0M(23,"2432*2050"),
+/**
+1216*1024
+*/
+CPTRUTE_SIZE_1_2M(24,"1216*1024"),
+/**
+1408*1024
+*/
+CPTRUTE_SIZE_1408_1024(25,"1408*1024"),
+/**
+3296*2472
+*/
+CPTRUTE_SIZE_8M(26,"3296*2472"),
+/**
+2560*1920(5_1M)
+*/
+CPTRUTE_SIZE_2560_1920(27,"2560*1920(5_1M)"),
+/**
+960*576(PAL) 960*480(NTSC)
+*/
+CAPTURE_SIZE_960H(28,"960*576(PAL) 960*480(NTSC)"),
+/**
+960*720
+*/
+CAPTURE_SIZE_960_720(29,"960*720"),
+/**
+640*360
+*/
+CAPTURE_SIZE_NHD(30,"640*360"),
+/**
+320*180
+*/
+CAPTURE_SIZE_QNHD(31,"320*180"),
+/**
+160*90
+*/
+CAPTURE_SIZE_QQNHD(32,"160*90"),
+/**
+960*540
+*/
+CAPTURE_SIZE_960_540(33,"960*540"),
+/**
+640*352
+*/
+CAPTURE_SIZE_640_352(34,"640*352"),
+/**
+640*400
+*/
+CAPTURE_SIZE_640_400(35,"640*400"),
+/**
+320*192
+*/
+CAPTURE_SIZE_320_192(36,"320*192"),
+/**
+320*176
+*/
+CAPTURE_SIZE_320_176(37,"320*176"),
+/**
+800*600
+*/
+CAPTURE_SIZE_SVGA1(38,"800*600"),
+/**
+2560*1440
+*/
+CAPTURE_SIZE_2560_1440(39,"2560*1440"),
+/**
+2304*1296
+*/
+CAPTURE_SIZE_2304_1296(40,"2304*1296"),
+/**
+2592*1520
+*/
+CAPTURE_SIZE_2592_1520(41,"2592*1520"),
+/**
+4000*3000
+*/
+CAPTURE_SIZE_4000_3000(42,"4000*3000"),
+/**
+2880*2880
+*/
+CAPTURE_SIZE_2880_2880(43,"2880*2880"),
+/**
+2880*2160
+*/
+CAPTURE_SIZE_2880_2160(44,"2880*2160"),
+/**
+2688*1520
+*/
+CAPTURE_SIZE_2688_1520(45,"2688*1520"),
+/**
+2592*1944
+*/
+CAPTURE_SIZE_2592_1944(46,"2592*1944"),
+/**
+3072*1728
+*/
+CAPTURE_SIZE_3072_1728(47,"3072*1728"),
+/**
+3072*2048
+*/
+CAPTURE_SIZE_3072_2048(48,"3072*2048"),
+/**
+3840*2160
+*/
+CAPTURE_SIZE_3840_2160(49,"3840*2160"),
+/**
+
+*/
+CAPTURE_SIZE_NR(25,"");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+CAPTURE_SIZE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (CAPTURE_SIZE enumType : CAPTURE_SIZE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (CAPTURE_SIZE enumType : CAPTURE_SIZE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static CAPTURE_SIZE getEnum(int value) {
+ for (CAPTURE_SIZE e : CAPTURE_SIZE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return CAPTURE_SIZE.CAPTURE_SIZE_D1;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/CFG_ACCESS_PROPERTY_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/CFG_ACCESS_PROPERTY_TYPE.java
new file mode 100644
index 0000000..58d184e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/CFG_ACCESS_PROPERTY_TYPE.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 门禁单双向配置类型
+ * @date 2021/2/7
+ */
+public enum CFG_ACCESS_PROPERTY_TYPE {
+ /** 未知 */
+ CFG_ACCESS_PROPERTY_UNKNOWN(0, "未知"),
+ /** 双向门禁 */
+ CFG_ACCESS_PROPERTY_BIDIRECT(1, "双向门禁"),
+ /** 单向门禁 */
+ CFG_ACCESS_PROPERTY_UNIDIRECT(2, "单向门禁");
+ /** 枚举值 */
+ private int type;
+ /** 枚举对应的类型描述 */
+ private String desc;
+
+ CFG_ACCESS_PROPERTY_TYPE(int type, String desc) {
+ this.type = type;
+ this.desc = desc;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/CFG_EM_ASG_VOICE_DIRECTION.java b/src/main/java/com/netsdk/lib/enumeration/CFG_EM_ASG_VOICE_DIRECTION.java
new file mode 100644
index 0000000..19d339a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/CFG_EM_ASG_VOICE_DIRECTION.java
@@ -0,0 +1,45 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 闸机进出语音方向
+ * @date 2021/2/7
+ */
+public enum CFG_EM_ASG_VOICE_DIRECTION {
+ CFG_EM_ASG_VOICE_DIRECTION_UNKNOWN(0, "未知"),
+ CFG_EM_ASG_VOICE_DIRECTION_ENTER(1, "进入"),
+ CFG_EM_ASG_VOICE_DIRECTION_LEAVE(2, "离开");
+ private int direction;
+ private String desc;
+
+ CFG_EM_ASG_VOICE_DIRECTION(int direction, String desc) {
+ this.direction = direction;
+ this.desc = desc;
+ }
+
+ public static CFG_EM_ASG_VOICE_DIRECTION getVoiceDirection(int direction) {
+ for (CFG_EM_ASG_VOICE_DIRECTION voiceDirection : CFG_EM_ASG_VOICE_DIRECTION.values()) {
+ if (voiceDirection.direction == direction) {
+ return voiceDirection;
+ }
+ }
+ return CFG_EM_ASG_VOICE_DIRECTION_UNKNOWN;
+ }
+
+ public int getDirection() {
+ return direction;
+ }
+
+ public void setDirection(int direction) {
+ this.direction = direction;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/CFG_EM_BODY_TRAIT.java b/src/main/java/com/netsdk/lib/enumeration/CFG_EM_BODY_TRAIT.java
new file mode 100644
index 0000000..1e2c0cb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/CFG_EM_BODY_TRAIT.java
@@ -0,0 +1,113 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 人体检测及人体识别支持的身体特征
+ * @date 2021/01/11
+ */
+public enum CFG_EM_BODY_TRAIT {
+ // 未知
+ CFG_EM_BODY_TRAIT_UNKNOWN(0, "未知"),
+
+ // 性别
+ CFG_EM_BODY_TRAIT_SEX(1, "性别"),
+
+ // 年龄组
+ CFG_EM_BODY_TRAIT_AGEGROUP(2, "年龄组"),
+
+ // 上衣
+ CFG_EM_BODY_TRAIT_COATTYPE(3, "上衣"),
+
+ // 裤子
+ CFG_EM_BODY_TRAIT_TROUSERSTYPE(4, "裤子"),
+
+ // 人体角度
+ CFG_EM_BODY_TRAIT_ANGLE(5, "人体角度"),
+
+ // 上衣模式
+ CFG_EM_BODY_TRAIT_UPPERPATTERN(6, "上衣模式"),
+
+ // 裤子颜色
+ CFG_EM_BODY_TRAIT_TROUSERSCOLOR(7, "裤子颜色"),
+
+ // 打伞
+ CFG_EM_BODY_TRAIT_UMBRELLA(8, "打伞"),
+
+ // 雨伞颜色
+ CFG_EM_BODY_TRAIT_UMBRELLACOLOR(9, "雨伞颜色"),
+
+ // 胸前报东西
+ CFG_EM_BODY_TRAIT_HOLD(10, "胸前报东西"),
+
+ // 裤子模式
+ CFG_EM_BODY_TRAIT_TROUSERSPATTERN(11, "裤子模式"),
+
+ // 帽子款式
+ CFG_EM_BODY_TRAIT_HATTYPE(12, "帽子款式"),
+
+ // 帽子颜色
+ CFG_EM_BODY_TRAIT_HATCOLOR(13, "帽子颜色"),
+
+ // 上衣款式
+ CFG_EM_BODY_TRAIT_UPPERTYPE(14, "上衣款式"),
+
+ // 上衣颜色
+ CFG_EM_BODY_TRAIT_COATCOLOR(15, "上衣颜色"),
+
+ // 发型
+ CFG_EM_BODY_TRAIT_HAIRSTYLE(16, "发型"),
+
+ // 头发颜色
+ CFG_EM_BODY_TRAIT_HAIRCOLOR(17, "头发颜色"),
+
+ // 鞋子款式
+ CFG_EM_BODY_TRAIT_SHOESTYPE(18, "鞋子款式"),
+
+ // 鞋子颜色
+ CFG_EM_BODY_TRAIT_SHOESCOLOR(19, "鞋子颜色"),
+ // 箱包款式
+ CFG_EM_BODY_TRAIT_BAG(20, "箱包款式"),
+
+ // 箱包颜色
+ CFG_EM_BODY_TRAIT_BAGCOLOR(21, "箱包颜色"),
+
+ // 口罩
+ CFG_EM_BODY_TRAIT_MASK(22, "口罩"),
+
+ // 口罩颜色
+ CFG_EM_BODY_TRAIT_MASKCOLOR(23, "口罩颜色");
+
+ private int value;
+ private String note;
+
+ private CFG_EM_BODY_TRAIT(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (CFG_EM_BODY_TRAIT enumType : CFG_EM_BODY_TRAIT.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (CFG_EM_BODY_TRAIT enumType : CFG_EM_BODY_TRAIT.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/CFG_EM_FACEDETECT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/CFG_EM_FACEDETECT_TYPE.java
new file mode 100644
index 0000000..05a50a0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/CFG_EM_FACEDETECT_TYPE.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 智能类型
+ * @date 2021/01/11
+ */
+public enum CFG_EM_FACEDETECT_TYPE {
+ // 未知
+ CFG_EM_FACEDETECT_TYPE_UNKNOWN(0, "未知"),
+
+ // 可见光
+ CFG_EM_FACEDETECT_TYPE_VISUAL(1, "可见光"),
+
+ // 红外
+ CFG_EM_FACEDETECT_TYPE_THERMAL(2, "红外"),
+
+ // 按时间段切换
+ CFG_EM_FACEDETECT_TYPE_SWITCHBYTIME(3, "按时间段切换");
+
+ private int value;
+ private String note;
+
+ private CFG_EM_FACEDETECT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (CFG_EM_FACEDETECT_TYPE enumType : CFG_EM_FACEDETECT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (CFG_EM_FACEDETECT_TYPE enumType : CFG_EM_FACEDETECT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/CFG_EM_FACE_SNAP_POLICY.java b/src/main/java/com/netsdk/lib/enumeration/CFG_EM_FACE_SNAP_POLICY.java
new file mode 100644
index 0000000..4dff190
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/CFG_EM_FACE_SNAP_POLICY.java
@@ -0,0 +1,72 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 人体检测及人体识别支持的脸部抓拍策略
+ * @date 2021/01/11
+ */
+public enum CFG_EM_FACE_SNAP_POLICY {
+ // 未知
+ CFG_EM_FACE_SNAP_POLICY_UNKNOWN(0, "未知"),
+
+ // 实时抓拍模式(当前的通用模式,实时性优先)
+ CFG_EM_FACE_SNAP_POLICY_REALTIME(1, "实时抓拍模式"),
+
+ // 优选抓拍模式,在设定的延时区间(OptimalTime)内挑选评分最高的抓图,准确性优先但延时较大
+ CFG_EM_FACE_SNAP_POLICY_OPTIMAL(2, "优选抓拍模式"),
+
+ // 质量抓拍模式,在Optimal的基础上,如果图片质量好于阈值提前结束优选,提高实时性
+ CFG_EM_FACE_SNAP_POLICY_QUALITY(3, "质量抓拍模式"),
+
+ // 识别优先抓拍模式,在优选时间内,以一定间隔帧数多次进行比对;一旦比对成功则立即结束优选,以提高对比成功率,取代质量优先模式
+ CFG_EM_FACE_SNAP_POLICY_RECOGNITION(4, "识别优先抓拍模式"),
+
+ // 快速优选,从检测到人脸/人体开始,抓拍一定帧数内的质量最好的人脸或人体,
+ CFG_EM_FACE_SNAP_POLICY_QUICK(5, "快速优选"),
+
+ // 全程优选,抓拍全程质量最好的人脸人体,
+ CFG_EM_FACE_SNAP_POLICY_FULLTRACK(6, "全程优选"),
+
+ // 间隔抓拍,
+ CFG_EM_FACE_SNAP_POLICY_INTERVAL(7, "间隔抓拍"),
+
+ // 单人模式,常用于门禁,
+ CFG_EM_FACE_SNAP_POLICY_SINGLE(8, "单人模式"),
+
+ // 高精度模式,增强目标识别,,增强目标识别,
+ CFG_EM_FACE_SNAP_POLICY_PRECISION(9, "高精度模式");
+
+ private int value;
+ private String note;
+
+ private CFG_EM_FACE_SNAP_POLICY(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (CFG_EM_FACE_SNAP_POLICY enumType : CFG_EM_FACE_SNAP_POLICY.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (CFG_EM_FACE_SNAP_POLICY enumType : CFG_EM_FACE_SNAP_POLICY.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/CFG_EM_FACE_TRAIT.java b/src/main/java/com/netsdk/lib/enumeration/CFG_EM_FACE_TRAIT.java
new file mode 100644
index 0000000..c6fad65
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/CFG_EM_FACE_TRAIT.java
@@ -0,0 +1,63 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 人体检测及人体识别支持的脸部特征
+ * @date 2021/01/11
+ */
+public enum CFG_EM_FACE_TRAIT {
+ // 未知
+ CFG_EM_FACE_TRAIT_UNKNOWN(0, "未知"),
+
+ // 性别
+ CFG_EM_FACE_TRAIT_SEX(1, "性别"),
+
+ // 年龄
+ CFG_EM_FACE_TRAIT_AGE(2, "年龄"),
+
+ // 眼镜
+ CFG_EM_FACE_TRAIT_GLASSES(3, "眼镜"),
+
+ // 胡子
+ CFG_EM_FACE_TRAIT_BEARD(4, "胡子"),
+
+ // 口罩
+ CFG_EM_FACE_TRAIT_MASK(5, "口罩"),
+
+ // 表情
+ CFG_EM_FACE_TRAIT_EMOTION(6, "表情");
+
+ private int value;
+ private String note;
+
+ private CFG_EM_FACE_TRAIT(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (CFG_EM_FACE_TRAIT enumType : CFG_EM_FACE_TRAIT.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (CFG_EM_FACE_TRAIT enumType : CFG_EM_FACE_TRAIT.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/CFG_EM_INSTANCE_SUBCLASS_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/CFG_EM_INSTANCE_SUBCLASS_TYPE.java
new file mode 100644
index 0000000..23886f8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/CFG_EM_INSTANCE_SUBCLASS_TYPE.java
@@ -0,0 +1,49 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 智能分析实例类型
+ * @date 2021/01/11
+ */
+public enum CFG_EM_INSTANCE_SUBCLASS_TYPE {
+
+ // 本地实例
+ CFG_EM_INSTANCE_SUBCLASS_TYPE_LOCAL(0, "本地实例"),
+
+ // 远程实例
+ CFG_EM_INSTANCE_SUBCLASS_TYPE_REMOTE(1, "远程实例");
+
+ private int value;
+ private String note;
+
+ private CFG_EM_INSTANCE_SUBCLASS_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (CFG_EM_INSTANCE_SUBCLASS_TYPE enumType : CFG_EM_INSTANCE_SUBCLASS_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (CFG_EM_INSTANCE_SUBCLASS_TYPE enumType : CFG_EM_INSTANCE_SUBCLASS_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/CFG_EM_PREVIEW_MODE.java b/src/main/java/com/netsdk/lib/enumeration/CFG_EM_PREVIEW_MODE.java
new file mode 100644
index 0000000..0ba3d4e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/CFG_EM_PREVIEW_MODE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47040
+ * @since Created at 2021/5/25 22:29
+ */
+public enum CFG_EM_PREVIEW_MODE {
+ /**
+ * 未知
+ */
+ CFG_EM_PREVIEW_MODE_UNKNOWN(0, "未知"),
+ /**
+ * 快照方式
+ */
+ CFG_EM_PREVIEW_MODE_SNAPSHOT(1, "快照方式"),
+ /**
+ * 分割编码方式
+ */
+ CFG_EM_PREVIEW_MODE_SPLITENCODE(2, "分割编码方式"),
+ /**
+ * 分割快照方式
+ */
+ CFG_EM_PREVIEW_MODE_SPLITSNAP(3, "分割快照方式");
+
+ private final int value;
+ private final String note;
+
+ CFG_EM_PREVIEW_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (CFG_EM_PREVIEW_MODE enumType : CFG_EM_PREVIEW_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (CFG_EM_PREVIEW_MODE enumType : CFG_EM_PREVIEW_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static CFG_EM_PREVIEW_MODE getEnum(int value) {
+ for (CFG_EM_PREVIEW_MODE e : CFG_EM_PREVIEW_MODE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return CFG_EM_PREVIEW_MODE.CFG_EM_PREVIEW_MODE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/CFG_EM_STREAM_TYPES.java b/src/main/java/com/netsdk/lib/enumeration/CFG_EM_STREAM_TYPES.java
new file mode 100644
index 0000000..81ecf86
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/CFG_EM_STREAM_TYPES.java
@@ -0,0 +1,72 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 码流类型
+ * @date 2022/07/20 14:11:30
+ */
+public enum CFG_EM_STREAM_TYPES {
+ /**
+ * 其它
+ */
+ CFG_EM_STREAMTYPE_ERR(0, "其它"),
+ /**
+ * Main -主码流
+ */
+ CFG_EM_STREAMTYPE_MAIN(1, "Main -主码流"),
+ /**
+ * Extra1 -辅码流1
+ */
+ CFG_EM_STREAMTYPE_EXTRA_1(2, "Extra1 -辅码流1"),
+ /**
+ * Extra2 -辅码流2
+ */
+ CFG_EM_STREAMTYPE_EXTRA_2(3, "Extra2 -辅码流2"),
+ /**
+ * Extra3 -辅码流3
+ */
+ CFG_EM_STREAMTYPE_EXTRA_3(4, "Extra3 -辅码流3"),
+ /**
+ * Snapshot -抓图码流
+ */
+ CFG_EM_STREAMTYPE_SNAPSHOT(5, "Snapshot -抓图码流"),
+ /**
+ * Talkback -对讲码流
+ */
+ CFG_EM_STREAMTYPE_TALKBACK(6, "Talkback -对讲码流");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ CFG_EM_STREAM_TYPES(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (CFG_EM_STREAM_TYPES enumType : CFG_EM_STREAM_TYPES.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (CFG_EM_STREAM_TYPES enumType : CFG_EM_STREAM_TYPES.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/CFG_EM_VOICE_ID.java b/src/main/java/com/netsdk/lib/enumeration/CFG_EM_VOICE_ID.java
new file mode 100644
index 0000000..6a58c1d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/CFG_EM_VOICE_ID.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 语音ID
+ * @date 2021/2/7
+ */
+public enum CFG_EM_VOICE_ID {
+ /** 未知 */
+ CFG_EM_VOICE_ID_UNKNOWN(-1, "未知"),
+ /** 验证成功(默认) */
+ CFG_EM_VOICE_ID_VERIFY_SUCCESS(0, "验证成功(默认)"),
+ /** 开门成功 */
+ CFG_EM_VOICE_ID_OPENDOOR_SUCCESS(1, "开门成功"),
+ /** 开锁成功 */
+ CFG_EM_VOICE_ID_UNLOCK_SUCCESS(2, "开锁成功"),
+ /** 刷卡成功 */
+ CFG_EM_VOICE_ID_SWIPECARD_SUCCESS(3, "刷卡成功"),
+ /** 欢迎光临 */
+ CFG_EM_VOICE_ID_WELCOME(4, "欢迎光临"),
+ /** 欢迎再次光临 */
+ CFG_EM_VOICE_ID_WELCOME_BACK(5, "欢迎再次光临"),
+ /** 谢谢 */
+ CFG_EM_VOICE_ID_THANKS(6, "谢谢"),
+ /** 自定义 */
+ CFG_EM_VOICE_ID_CUSTOMIZED_VOICE(7, "自定义"),
+ /** 无声音 */
+ CFG_EM_VOICE_ID_NO_VOICE(8, "无声音"),
+ /** 欢迎回家 */
+ CFG_EM_VOICE_ID_WELCOME_HOME(9, "欢迎回家"),
+ /** 一路顺风 */
+ CFG_EM_VOICE_ID_GOOD_JOURNEY(10, "一路顺风"),
+ /** 欢迎下次光临 */
+ CFG_EM_VOICE_ID_WELCOME_BACK_NEXT(11, "欢迎下次光临"),
+ /** 谢谢惠顾 */
+ CFG_EM_VOICE_ID_THANKS_FOR_PATRONAGE(12, "谢谢惠顾");
+ private int id;
+ private String desc;
+
+ CFG_EM_VOICE_ID(int id, String desc) {
+ this.id = id;
+ this.desc = desc;
+ }
+
+ public static CFG_EM_VOICE_ID getVoiceID(int id) {
+ for (CFG_EM_VOICE_ID voiceID : CFG_EM_VOICE_ID.values()) {
+ if (voiceID.id == id) {
+ return voiceID;
+ }
+ }
+ return CFG_EM_VOICE_ID_UNKNOWN;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/CFG_PTZ_FUNC_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/CFG_PTZ_FUNC_TYPE.java
new file mode 100644
index 0000000..c145471
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/CFG_PTZ_FUNC_TYPE.java
@@ -0,0 +1,62 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @创建人 291189
+ * @创建时间 2021/5/28
+ * @描述
+ */
+public enum CFG_PTZ_FUNC_TYPE {
+ /**
+ * 未知错误
+ */
+ FUNC_TYPE_UNKNOWN(-1, "未知"),
+ /**
+ * 巡航
+ */
+ FUNC_TYPE_TOUR (0,"巡航") ,
+ /**
+ * 自动巡迹
+ */
+ FUNC_TYPE_PATTERN (1,"自动巡迹") ,
+ /**
+ * 预置点
+ */
+ FUNC_TYPE_PRE(2,"预置点") ,
+
+ FUNC_TYPE_SCAN(3,"自动线扫"),
+
+ FUNC_TYPE_MAX(4,"最大值");
+
+ private int id;
+ private String desc;
+
+ CFG_PTZ_FUNC_TYPE(int id, String desc) {
+ this.id = id;
+ this.desc = desc;
+ }
+ public int getId() {
+ return id;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public static String getDescById(int id) {
+ for (CFG_PTZ_FUNC_TYPE enumType : CFG_PTZ_FUNC_TYPE.values()) {
+ if (id == enumType.getId()) {
+ return enumType.desc;
+ }
+ }
+ return null;
+ }
+
+ public static int getIdByValue(String desc) {
+ for (CFG_PTZ_FUNC_TYPE enumType : CFG_PTZ_FUNC_TYPE.values()) {
+ if (desc.equals(enumType.getDesc())) {
+ return enumType.getId();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/CFG_VIDEO_COMPRESSION.java b/src/main/java/com/netsdk/lib/enumeration/CFG_VIDEO_COMPRESSION.java
new file mode 100644
index 0000000..99234c1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/CFG_VIDEO_COMPRESSION.java
@@ -0,0 +1,61 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47040
+ * @since Created at 2021/5/26 20:44
+ */
+public enum CFG_VIDEO_COMPRESSION {
+
+ VIDEO_FORMAT_MPEG4(0, "MPEG4"),
+ VIDEO_FORMAT_MS_MPEG4(1, "MS-MPEG4"),
+ VIDEO_FORMAT_MPEG2(2, "MPEG2"),
+ VIDEO_FORMAT_MPEG1(3, "MPEG1"),
+ VIDEO_FORMAT_H263(4, "H.263"),
+ VIDEO_FORMAT_MJPG(5, "MJPG"),
+ VIDEO_FORMAT_FCC_MPEG4(6, "FCC-MPEG4"),
+ VIDEO_FORMAT_H264(7, "H.264"),
+ VIDEO_FORMAT_H265(8, "H.265"),
+ VIDEO_FORMAT_SVAC(9, "SVAC");
+
+ private final int value;
+ private final String note;
+
+ CFG_VIDEO_COMPRESSION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (CFG_VIDEO_COMPRESSION enumType : CFG_VIDEO_COMPRESSION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (CFG_VIDEO_COMPRESSION enumType : CFG_VIDEO_COMPRESSION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static CFG_VIDEO_COMPRESSION getEnum(int value) {
+ for (CFG_VIDEO_COMPRESSION e : CFG_VIDEO_COMPRESSION.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return CFG_VIDEO_COMPRESSION.VIDEO_FORMAT_H264;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/DH_LOG_QUERY_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/DH_LOG_QUERY_TYPE.java
new file mode 100644
index 0000000..0e47cce
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/DH_LOG_QUERY_TYPE.java
@@ -0,0 +1,50 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 日志查询类型
+ *
+ * @author 47081
+ */
+public enum DH_LOG_QUERY_TYPE {
+ /**
+ * 所有日志
+ */
+ DHLOG_ALL,
+ /**
+ * 系统日志
+ */
+ DHLOG_SYSTEM,
+ /**
+ * 配置日志
+ */
+ DHLOG_CONFIG,
+ /**
+ * 存储相关
+ */
+ DHLOG_STORAGE,
+ /**
+ * 报警日志
+ */
+ DHLOG_ALARM,
+ /**
+ * 录象相关
+ */
+ DHLOG_RECORD,
+ /**
+ * 帐号相关
+ */
+ DHLOG_ACCOUNT,
+ /**
+ * 清除日志
+ */
+ DHLOG_CLEAR,
+ /**
+ * 回放相关
+ */
+ DHLOG_PLAYBACK,
+ /**
+ * 前端管理运行相关
+ */
+ DHLOG_MANAGER
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EMDeviceType.java b/src/main/java/com/netsdk/lib/enumeration/EMDeviceType.java
new file mode 100644
index 0000000..9a75d87
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EMDeviceType.java
@@ -0,0 +1,295 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 设备类型
+ * @date 2020/9/12
+ */
+public enum EMDeviceType {
+ /**
+ * none
+ */
+ NET_PRODUCT_NONE(0, "未知"),
+ /**
+ * 非实时MACE
+ */
+ NET_DVR_NONREALTIME_MACE(1, "非实时MACE"),
+ /**
+ * 非实时
+ */
+ NET_DVR_NONREALTIME(2, "非实时"),
+ /**
+ * 网络视频服务器
+ */
+ NET_NVS_MPEG1(3, "网络视频服务器"),
+ /**
+ * MPEG1二路录像机
+ */
+ NET_DVR_MPEG1_2(4, "MPEG1二路录像机"),
+ /**
+ * MPEG1八路录像机
+ */
+ NET_DVR_MPEG1_8(5, "MPEG1八路录像机"),
+ /**
+ * MPEG4八路录像机
+ */
+ NET_DVR_MPEG4_8(6, "MPEG4八路录像机"),
+ /**
+ * MPEG4十六路录像机
+ */
+ NET_DVR_MPEG4_16(7, "MPEG4十六路录像机"),
+ /**
+ * LB系列录像机
+ */
+ NET_DVR_MPEG4_SX2(8, "LB系列录像机"),
+ /**
+ * GB系列录像机
+ */
+ NET_DVR_MEPG4_ST2(9, "GB系列录像机"),
+ /**
+ * HB系列录像机
+ */
+ NET_DVR_MEPG4_SH2(10, "HB系列录像机"),
+ /**
+ * GBE系列录像机
+ */
+ NET_DVR_MPEG4_GBE(11, "GBE系列录像机"),
+ /**
+ * II代网络视频服务器
+ */
+ NET_DVR_MPEG4_NVSII(12, "II代网络视频服务器"),
+ /**
+ * 新标准配置协议
+ */
+ NET_DVR_STD_NEW(13, "新标准配置协议"),
+ /**
+ * DDNS服务器
+ */
+ NET_DVR_DDNS(14, "DDNS服务器"),
+ /**
+ * ATM机
+ */
+ NET_DVR_ATM(15, "ATM机"),
+ /**
+ * 二代非实时NB系列机器
+ */
+ NET_NB_SERIAL(16, "二代非实时NB系列机器"),
+ /**
+ * LN系列产品
+ */
+ NET_LN_SERIAL(17, "LN系列产品"),
+ /**
+ * BAV系列产品
+ */
+ NET_BAV_SERIAL(18, "BAV系列产品"),
+ /**
+ * SDIP系列产品
+ */
+ NET_SDIP_SERIAL(19, "SDIP系列产品"),
+ /**
+ * IPC系列产品
+ */
+ NET_IPC_SERIAL(20, "IPC系列产品"),
+ /**
+ * NVS B系列
+ */
+ NET_NVS_B(21, "NVS B系列"),
+ /**
+ * NVS H系列
+ */
+ NET_NVS_C(22, "NVS H系列"),
+ /**
+ * NVS S系列
+ */
+ NET_NVS_S(23, "NVS S系列"),
+ /**
+ * NVS E系列
+ */
+ NET_NVS_E(24, "NVS E系列"),
+ /**
+ * 从QueryDevState中查询设备类型,以字符串格式
+ */
+ NET_DVR_NEW_PROTOCOL(25, "从QueryDevState中查询设备类型,以字符串格式"),
+ /**
+ * 解码器
+ */
+ NET_NVD_SERIAL(26, "解码器"),
+ /**
+ * N5
+ */
+ NET_DVR_N5(27, "N5"),
+ /**
+ * 混合DVR
+ */
+ NET_DVR_MIX_DVR(28, "混合DVR"),
+ /**
+ * SVR系列
+ */
+ NET_SVR_SERIAL(29, "SVR系列"),
+ /**
+ * SVR-BS
+ */
+ NET_SVR_BS(30, "SVR-BS"),
+ /**
+ * NVR系列
+ */
+ NET_NVR_SERIAL(31, "NVR系列"),
+ /**
+ * N51
+ */
+ NET_DVR_N51(32, "N51"),
+ /**
+ * ITSE 智能分析盒
+ */
+ NET_ITSE_SERIAL(33, "ITSE 智能分析盒"),
+ /**
+ * 智能交通像机设备
+ */
+ NET_ITC_SERIAL(34, "智能交通像机设备"),
+ /**
+ * 雷达测速仪HWS
+ */
+ NET_HWS_SERIAL(35, "雷达测速仪HWS"),
+ /**
+ * 便携式音视频录像机
+ */
+ NET_PVR_SERIAL(36, "便携式音视频录像机"),
+ /**
+ * IVS(智能视频服务器系列)
+ */
+ NET_IVS_SERIAL(37, "IVS(智能视频服务器系列)"),
+ /**
+ * 通用智能视频侦测服务器
+ */
+ NET_IVS_B(38, "通用智能视频侦测服务器"),
+ /**
+ * 目标识别服务器
+ */
+ NET_IVS_F(39, "目标识别服务器"),
+ /**
+ * 视频质量诊断服务器
+ */
+ NET_IVS_V(40, "视频质量诊断服务器"),
+ /**
+ * 矩阵
+ */
+ NET_MATRIX_SERIAL(41, "矩阵"),
+ /**
+ * N52
+ */
+ NET_DVR_N52(42, "N52"),
+ /**
+ * N56
+ */
+ NET_DVR_N56(43, "N56"),
+ /**
+ * ESS
+ */
+ NET_ESS_SERIAL(44, "ESS"),
+ /**
+ * 人数统计服务器
+ */
+ NET_IVS_PC(45, "人数统计服务器"),
+ /**
+ * pc-nvr
+ */
+ NET_PC_NVR(46, "pc-nvr"),
+ /**
+ * 大屏控制器
+ */
+ NET_DSCON(47, "大屏控制器"),
+ /**
+ * 网络视频存储服务器
+ */
+ NET_EVS(48, "网络视频存储服务器"),
+ /**
+ * 嵌入式智能分析视频系统
+ */
+ NET_EIVS(49, "嵌入式智能分析视频系统"),
+ /**
+ * DVR-N6
+ */
+ NET_DVR_N6(50, "DVR-N6"),
+ /**
+ * 万能解码器
+ */
+ NET_UDS(51, "万能解码器"),
+ /**
+ * 银行报警主机
+ */
+ NET_AF6016(52, "银行报警主机"),
+ /**
+ * 视频网络报警主机
+ */
+ NET_AS5008(53, "视频网络报警主机"),
+ /**
+ * 网络报警主机
+ */
+ NET_AH2008(54, "网络报警主机"),
+ /**
+ * 报警主机系列
+ */
+ NET_A_SERIAL(55, "报警主机系列"),
+ /**
+ * 门禁系列产品
+ */
+ NET_BSC_SERIAL(56, "门禁系列产品"),
+ /**
+ * NVS系列产品
+ */
+ NET_NVS_SERIAL(57, "NVS系列产品"),
+ /**
+ * VTO系列产品
+ */
+ NET_VTO_SERIAL(58, "VTO系列产品"),
+ /**
+ * VTNC系列产品
+ */
+ NET_VTNC_SERIAL(59, "VTNC系列产品"),
+ /**
+ * TPC系列产品(热成像设备)
+ */
+ NET_TPC_SERIAL(60, "TPC系列产品(热成像设备)"),
+ /**
+ * 无线中继设备
+ */
+ NET_ASM_SERIAL(61, "无线中继设备"),
+ /**
+ * 管理机
+ */
+ NET_VTS_SERIAL(62, "管理机");
+
+ private EMDeviceType(int type, String desc) {
+ this.type = type;
+ this.desc = desc;
+ }
+
+ private int type;
+ private String desc;
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+
+ public static EMDeviceType getEMDeviceType(int type) {
+ for (EMDeviceType deviceType : EMDeviceType.values()) {
+ if (deviceType.getType() == type) {
+ return deviceType;
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ABNORMAL_OBJECT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_ABNORMAL_OBJECT_TYPE.java
new file mode 100644
index 0000000..8755bd0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ABNORMAL_OBJECT_TYPE.java
@@ -0,0 +1,52 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 目标类型
+ * @date 2022/12/19 11:30:59
+ */
+public enum EM_ABNORMAL_OBJECT_TYPE {
+ /**
+ * 未知
+ */
+ ABNORMAL_OBJECT_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 猪
+ */
+ ABNORMAL_OBJECT_TYPE_PIG(1, "猪");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_ABNORMAL_OBJECT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_ABNORMAL_OBJECT_TYPE enumType : EM_ABNORMAL_OBJECT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_ABNORMAL_OBJECT_TYPE enumType : EM_ABNORMAL_OBJECT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ACCESSORY_ALARM_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_ACCESSORY_ALARM_TYPE.java
new file mode 100644
index 0000000..be56e92
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ACCESSORY_ALARM_TYPE.java
@@ -0,0 +1,82 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 报警类型
+* @date 2022/08/31 14:44:15
+*/
+public enum EM_ACCESSORY_ALARM_TYPE {
+/**
+未知
+*/
+EM_ACCESSORY_ALARM_UNKNOWN(-1,"未知"),
+/**
+入侵
+*/
+EM_ACCESSORY_ALARM_INTRUSION(0,"入侵"),
+/**
+火警
+*/
+EM_ACCESSORY_ALARM_FIRE(1,"火警"),
+/**
+医疗
+*/
+EM_ACCESSORY_ALARM_MEDICAL(2,"医疗"),
+/**
+紧急
+*/
+EM_ACCESSORY_ALARM_PANIC(3,"紧急"),
+/**
+燃气
+*/
+EM_ACCESSORY_ALARM_GAS(4,"燃气"),
+/**
+双按钮紧急按钮报警类型
+*/
+EM_ACCESSORY_ALARM_HOLDUP(5,"双按钮紧急按钮报警类型");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_ACCESSORY_ALARM_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_ACCESSORY_ALARM_TYPE enumType : EM_ACCESSORY_ALARM_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_ACCESSORY_ALARM_TYPE enumType : EM_ACCESSORY_ALARM_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_ACCESSORY_ALARM_TYPE getEnum(int value) {
+ for (EM_ACCESSORY_ALARM_TYPE e : EM_ACCESSORY_ALARM_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_ACCESSORY_ALARM_TYPE.EM_ACCESSORY_ALARM_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ACCESSORY_INPUT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_ACCESSORY_INPUT_TYPE.java
new file mode 100644
index 0000000..2b97439
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ACCESSORY_INPUT_TYPE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 输入类型
+* @date 2022/08/31 14:44:16
+*/
+public enum EM_ACCESSORY_INPUT_TYPE {
+/**
+未知
+*/
+EM_ACCESSORY_INPUT_UNKNOWN(-1,"未知"),
+/**
+防拆
+*/
+EM_ACCESSORY_INPUT_TAMPER(0,"防拆"),
+/**
+报警输入
+*/
+EM_ACCESSORY_INPUT_SENSOR(1,"报警输入");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_ACCESSORY_INPUT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_ACCESSORY_INPUT_TYPE enumType : EM_ACCESSORY_INPUT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_ACCESSORY_INPUT_TYPE enumType : EM_ACCESSORY_INPUT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_ACCESSORY_INPUT_TYPE getEnum(int value) {
+ for (EM_ACCESSORY_INPUT_TYPE e : EM_ACCESSORY_INPUT_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_ACCESSORY_INPUT_TYPE.EM_ACCESSORY_INPUT_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ACCESSORY_SENSITIVITY.java b/src/main/java/com/netsdk/lib/enumeration/EM_ACCESSORY_SENSITIVITY.java
new file mode 100644
index 0000000..873026c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ACCESSORY_SENSITIVITY.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 灵敏度
+* @date 2022/08/31 14:44:15
+*/
+public enum EM_ACCESSORY_SENSITIVITY {
+/**
+未知
+*/
+EM_ACCESSORY_SENSITIVITY_UNKNOWN(0,"未知"),
+/**
+低灵敏度
+*/
+EM_ACCESSORY_SENSITIVITY_LOW(1,"低灵敏度"),
+/**
+中灵敏度
+*/
+EM_ACCESSORY_SENSITIVITY_MEDIUM(2,"中灵敏度"),
+/**
+高灵敏度
+*/
+EM_ACCESSORY_SENSITIVITY_HIGH(3,"高灵敏度");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_ACCESSORY_SENSITIVITY(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_ACCESSORY_SENSITIVITY enumType : EM_ACCESSORY_SENSITIVITY.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_ACCESSORY_SENSITIVITY enumType : EM_ACCESSORY_SENSITIVITY.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_ACCESSORY_SENSITIVITY getEnum(int value) {
+ for (EM_ACCESSORY_SENSITIVITY e : EM_ACCESSORY_SENSITIVITY.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_ACCESSORY_SENSITIVITY.EM_ACCESSORY_SENSITIVITY_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ACCESSORY_VOLUME.java b/src/main/java/com/netsdk/lib/enumeration/EM_ACCESSORY_VOLUME.java
new file mode 100644
index 0000000..b0a99e7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ACCESSORY_VOLUME.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 设备布撤防时音量
+* @date 2022/08/31 14:44:16
+*/
+public enum EM_ACCESSORY_VOLUME {
+/**
+未知
+*/
+EM_ACCESSORY_VOLUME_UNKNOWN(0,"未知"),
+/**
+低音量
+*/
+EM_ACCESSORY_VOLUME_LOW(1,"低音量"),
+/**
+中音量
+*/
+EM_ACCESSORY_VOLUME_MEDIUM(2,"中音量"),
+/**
+高音量
+*/
+EM_ACCESSORY_VOLUME_HIGH(3,"高音量");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_ACCESSORY_VOLUME(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_ACCESSORY_VOLUME enumType : EM_ACCESSORY_VOLUME.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_ACCESSORY_VOLUME enumType : EM_ACCESSORY_VOLUME.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_ACCESSORY_VOLUME getEnum(int value) {
+ for (EM_ACCESSORY_VOLUME e : EM_ACCESSORY_VOLUME.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_ACCESSORY_VOLUME.EM_ACCESSORY_VOLUME_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ACCESS_SENSOR_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_ACCESS_SENSOR_TYPE.java
new file mode 100644
index 0000000..1c41349
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ACCESS_SENSOR_TYPE.java
@@ -0,0 +1,51 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 门磁类型
+ * @date 2021/01/11
+ */
+public enum EM_ACCESS_SENSOR_TYPE {
+ // 未知
+ EM_ACCESS_SENSOR_TYPE_UNKNOWN(-1, "未知"),
+
+ // 常开
+ EM_ACCESS_SENSOR_TYPE_NO(0, "常开"),
+
+ // 常闭
+ EM_ACCESS_SENSOR_TYPE_NC(1, "常闭");
+
+ private int value;
+ private String note;
+
+ private EM_ACCESS_SENSOR_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_ACCESS_SENSOR_TYPE enumType : EM_ACCESS_SENSOR_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_ACCESS_SENSOR_TYPE enumType : EM_ACCESS_SENSOR_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ACROSS_PARKING.java b/src/main/java/com/netsdk/lib/enumeration/EM_ACROSS_PARKING.java
new file mode 100644
index 0000000..f1de3bd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ACROSS_PARKING.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 是否跨位
+ *
+ * @author 47040
+ * @since Created in 2020/11/18 14:40
+ */
+public enum EM_ACROSS_PARKING {
+ /**
+ * 未知
+ */
+ EM_ACROSS_PARKING_UNKNOWN(0, "未知"),
+ /**
+ * 未跨位
+ */
+ EM_ACROSS_PARKING_NO(1, "未跨位"),
+ /**
+ * 跨位
+ */
+ EM_ACROSS_PARKING_YES(2, "跨位");
+
+ private int value;
+ private String note;
+
+ EM_ACROSS_PARKING(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_ACROSS_PARKING enumType : EM_ACROSS_PARKING.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_ACROSS_PARKING enumType : EM_ACROSS_PARKING.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_ACROSS_PARKING getEnum(int value) {
+ for (EM_ACROSS_PARKING e : EM_ACROSS_PARKING.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_ACROSS_PARKING.EM_ACROSS_PARKING_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ACTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_ACTION.java
new file mode 100644
index 0000000..d6bbd63
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ACTION.java
@@ -0,0 +1,81 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 物体动作支持类型
+ * @date 2022/06/16 11:14:19
+ */
+public enum EM_ACTION {
+ /**
+ * 未知类型
+ */
+ EM_ACTION_UNKNOWN(0, "未知类型"),
+ /**
+ * 第一次出现在检测区域中,或者跟踪时物理分离动作中尚未确认的新物体
+ */
+ EM_ACTION_APPEAR(1, "第一次出现在检测区域中,或者跟踪时物理分离动作中尚未确认的新物体"),
+ /**
+ * 正在运动,物体被正常跟踪
+ */
+ EM_ACTION_MOVE(2, "正在运动,物体被正常跟踪"),
+ /**
+ * 物体停止运动,这个物体不会在出现在下一帧物体列表中,物体开始移动后再恢复在列表中
+ */
+ EM_ACTION_STAY(3, "物体停止运动,这个物体不会在出现在下一帧物体列表中,物体开始移动后再恢复在列表中"),
+ /**
+ * 物体从原来的区域移除,或者被遮盖,或者跟踪失败,移除的物体ID不会被自动删除,并且物体重现出现是有可能再次被使用
+ */
+ EM_ACTION_REMOVE(4, "物体从原来的区域移除,或者被遮盖,或者跟踪失败,移除的物体ID不会被自动删除,并且物体重现出现是有可能再次被使用"),
+ /**
+ * 运动到跟踪区域之外,或者达到了算法跟踪物体的上限而被清除,消失的物体ID将不再出现
+ */
+ EM_ACTION_DISAPPEAR(5, "运动到跟踪区域之外,或者达到了算法跟踪物体的上限而被清除,消失的物体ID将不再出现"),
+ /**
+ * 从其他物体中分离出来,可以用来检测物体遗留,关联ID表示从这个ID对应物体分离
+ */
+ EM_ACTION_SPLIT(6, "从其他物体中分离出来,可以用来检测物体遗留,关联ID表示从这个ID对应物体分离"),
+ /**
+ * 合并到其他物体,可以用来检查物体保全,关联ID表示合并到这个ID对相应的物体
+ */
+ EM_ACTION_MERGE(7, "合并到其他物体,可以用来检查物体保全,关联ID表示合并到这个ID对相应的物体"),
+ /**
+ * 如果算法无法确定分离动作中某个物体是原先同一个物体,应该创建先一个新的物体,证据充分后再重命名为旧的物体ID,关联ID表示暂时使用的新的ID。
+ */
+ EM_ACTION_RENAME(8, "如果算法无法确定分离动作中某个物体是原先同一个物体,应该创建先一个新的物体,证据充分后再重命名为旧的物体ID,关联ID表示暂时使用的新的ID。");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_ACTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_ACTION enumType : EM_ACTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_ACTION enumType : EM_ACTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_AC_UNLOCK_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_AC_UNLOCK_MODE.java
new file mode 100644
index 0000000..0d357f3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_AC_UNLOCK_MODE.java
@@ -0,0 +1,239 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 开锁模式
+* @origin autoTool
+* @date 2023/02/10 14:34:21
+*/
+public enum EM_AC_UNLOCK_MODE {
+/**
+未知
+*/
+EM_AC_UNLOCK_MODE_UNKNOWN(0,"未知"),
+/**
+只允许密码开锁
+*/
+EM_AC_UNLOCK_MODE_PWD_ONLY(1,"只允许密码开锁"),
+/**
+只允许刷卡开锁
+*/
+EM_AC_UNLOCK_MODE_CARD(2,"只允许刷卡开锁"),
+/**
+密码或刷卡开锁
+*/
+EM_AC_UNLOCK_MODE_PWD_OR_CARD(3,"密码或刷卡开锁"),
+/**
+先刷卡后密码开锁
+*/
+EM_AC_UNLOCK_MODE_CARD_FIRST(4,"先刷卡后密码开锁"),
+/**
+先密码后刷卡开锁
+*/
+EM_AC_UNLOCK_MODE_PWD_FIRST(5,"先密码后刷卡开锁"),
+/**
+分时段开门
+*/
+EM_AC_UNLOCK_MODE_SECTION(6,"分时段开门"),
+/**
+仅信息开锁
+*/
+EM_AC_UNLOCK_MODE_FINGERPRINTONLY(7,"仅信息开锁"),
+/**
+密码或刷卡或信息开锁
+*/
+EM_AC_UNLOCK_MODE_PWD_OR_CARD_OR_FINGERPRINT(8,"密码或刷卡或信息开锁"),
+/**
+密码+刷卡+信息组合开锁
+*/
+EM_AC_UNLOCK_MODE_PWD_AND_CARD_AND_FINGERPINT(9,"密码+刷卡+信息组合开锁"),
+/**
+密码+信息组合开锁
+*/
+EM_AC_UNLOCK_MODE_PWD_AND_FINGERPRINT(10,"密码+信息组合开锁"),
+/**
+刷卡+信息开锁
+*/
+EM_AC_UNLOCK_MODE_CARD_AND_FINGERPRINT(11,"刷卡+信息开锁"),
+/**
+多人开锁
+*/
+EM_AC_UNLOCK_MODE_MULTI_PERSON(12,"多人开锁"),
+/**
+人证对比
+*/
+EM_AC_UNLOCK_MODE_FACEIDCARD(13,"人证对比"),
+/**
+证件+ 人证比对
+*/
+EM_AC_UNLOCK_MODE_FACEIDCARD_AND_IDCARD(14,"证件+ 人证比对"),
+/**
+人证比对或刷卡或信息
+*/
+EM_AC_UNLOCK_MODE_FACEIDCARD_OR_CARD_OR_FINGER(15,"人证比对或刷卡或信息"),
+/**
+(证件+认证比对)或刷卡或信息
+*/
+EM_AC_UNLOCK_MODE_FACEIPCARDANDIDCARD_OR_CARD_OR_FINGER(16,"(证件+认证比对)或刷卡或信息"),
+/**
+UserID+密码
+*/
+EM_AC_UNLOCK_MODE_USERID_AND_PWD(17,"UserID+密码"),
+/**
+只允许目标开锁
+*/
+EM_AC_UNLOCK_MODE_FACE_ONLY(18,"只允许目标开锁"),
+/**
+目标+密码开锁
+*/
+EM_AC_UNLOCK_MODE_FACE_AND_PWD(19,"目标+密码开锁"),
+/**
+信息+密码开锁
+*/
+EM_AC_UNLOCK_MODE_FINGERPRINT_AND_PWD(20,"信息+密码开锁"),
+/**
+信息+目标开锁
+*/
+EM_AC_UNLOCK_MODE_FINGERPRINT_AND_FACE(21,"信息+目标开锁"),
+/**
+刷卡+目标开锁
+*/
+EM_AC_UNLOCK_MODE_CARD_AND_FACE(22,"刷卡+目标开锁"),
+/**
+目标或密码开锁
+*/
+EM_AC_UNLOCK_MODE_FACE_OR_PWD(23,"目标或密码开锁"),
+/**
+信息或密码开锁
+*/
+EM_AC_UNLOCK_MODE_FINGERPRINT_OR_PWD(24,"信息或密码开锁"),
+/**
+信息或目标开锁
+*/
+EM_AC_UNLOCK_MODE_FINGERPRINT_OR_FACE(25,"信息或目标开锁"),
+/**
+刷卡或目标开锁
+*/
+EM_AC_UNLOCK_MODE_CARD_OR_FACE(26,"刷卡或目标开锁"),
+/**
+刷卡或信息开锁
+*/
+EM_AC_UNLOCK_MODE_CARD_OR_FINGERPRINT(27,"刷卡或信息开锁"),
+/**
+信息+目标+密码开锁
+*/
+EM_AC_UNLOCK_MODE_FINGERPRINT_AND_FACE_AND_PWD(28,"信息+目标+密码开锁"),
+/**
+刷卡+目标+密码开锁
+*/
+EM_AC_UNLOCK_MODE_CARD_AND_FACE_AND_PWD(29,"刷卡+目标+密码开锁"),
+/**
+刷卡+信息+密码开锁
+*/
+EM_AC_UNLOCK_MODE_CARD_AND_FINGERPRINT_AND_PWD(30,"刷卡+信息+密码开锁"),
+/**
+卡+信息+目标组合开锁
+*/
+EM_AC_UNLOCK_MODE_CARD_AND_FINGERPRINT_AND_FACE(31,"卡+信息+目标组合开锁"),
+/**
+信息或目标或密码
+*/
+EM_AC_UNLOCK_MODE_FINGERPRINT_OR_FACE_OR_PWD(32,"信息或目标或密码"),
+/**
+卡或目标或密码开锁
+*/
+EM_AC_UNLOCK_MODE_CARD_OR_FACE_OR_PWD(33,"卡或目标或密码开锁"),
+/**
+卡或信息或目标开锁
+*/
+EM_AC_UNLOCK_MODE_CARD_OR_FINGERPRINT_OR_FACE(34,"卡或信息或目标开锁"),
+/**
+卡+信息+目标+密码组合开锁
+*/
+EM_AC_UNLOCK_MODE_CARD_AND_FINGERPRINT_AND_FACE_AND_PWD(35,"卡+信息+目标+密码组合开锁"),
+/**
+卡或信息或目标或密码开锁
+*/
+EM_AC_UNLOCK_MODE_CARD_OR_FINGERPRINT_OR_FACE_OR_PWD(36,"卡或信息或目标或密码开锁"),
+/**
+(证件+人证比对)或 刷卡 或 目标
+*/
+EM_AC_UNLOCK_MODE_FACEIPCARDANDIDCARD_OR_CARD_OR_FACE(37,"(证件+人证比对)或 刷卡 或 目标"),
+/**
+人证比对 或 刷卡(二维码) 或 目标
+*/
+EM_AC_UNLOCK_MODE_FACEIDCARD_OR_CARD_OR_FACE(38,"人证比对 或 刷卡(二维码) 或 目标"),
+/**
+(卡+密码)或(信息+密码)默认为2
+*/
+EM_AC_UNLOCK_MODE_CARDANDPWD_OR_FINGERPRINTANDPWD(39,"(卡+密码)或(信息+密码)默认为2"),
+/**
+人证(照片)或目标
+*/
+EM_AC_UNLOCK_MODE_PHOTO_OR_FACE(40,"人证(照片)或目标"),
+/**
+人证(信息)
+*/
+EM_AC_UNLOCK_MODE_FINGERPRINT(41,"人证(信息)"),
+/**
+人证(照片+信息)
+*/
+EM_AC_UNLOCK_MODE_PHOTO_AND_FINGERPRINT(42,"人证(照片+信息)"),
+/**
+人证或刷卡或信息或目标或密码
+*/
+EM_AC_UNLOCK_MODE_FACEIDCARD_OR_CARD_OR_FINGERPRINT_OR_FACE_OR_PASSWORD(43,"人证或刷卡或信息或目标或密码"),
+/**
+多用户类型
+*/
+EM_AC_UNLOCK_MODE_MULTI_USER_TYPE(44,"多用户类型"),
+/**
+人证或健康码
+*/
+EM_AC_UNLOCK_MODE_FACEIDCARD_OR_HEALTHCODE(45,"人证或健康码");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_AC_UNLOCK_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_AC_UNLOCK_MODE enumType : EM_AC_UNLOCK_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_AC_UNLOCK_MODE enumType : EM_AC_UNLOCK_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_AC_UNLOCK_MODE getEnum(int value) {
+ for (EM_AC_UNLOCK_MODE e : EM_AC_UNLOCK_MODE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_AC_UNLOCK_MODE.EM_AC_UNLOCK_MODE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_AGE_GROUP_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_AGE_GROUP_TYPE.java
new file mode 100644
index 0000000..48a40fe
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_AGE_GROUP_TYPE.java
@@ -0,0 +1,8 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_AGE_GROUP_TYPE {
+ EM_AGE_GROUP_UNKNOWN, // 未知
+ EM_AGE_GROUP_OLD, // 老人
+ EM_AGE_GROUP_ADULT, // 成年人
+ EM_AGE_GROUP_CHILD, // 小孩
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_AIRBORNE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_AIRBORNE_TYPE.java
new file mode 100644
index 0000000..11efbcd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_AIRBORNE_TYPE.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 挂空悬浮物具体类型
+* @date 2022/06/28 19:44:54
+*/
+public enum EM_AIRBORNE_TYPE {
+/**
+未知
+*/
+EM_AIRBORNE_TYPE_UNKNOWN(0,"未知"),
+/**
+塑料袋
+*/
+EM_AIRBORNE_TYPE_PLASTICBAG(1,"塑料袋"),
+/**
+织物
+*/
+EM_AIRBORNE_TYPE_TEXTILE(2,"织物"),
+/**
+风筝
+*/
+EM_AIRBORNE_TYPE_KITE(3,"风筝");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_AIRBORNE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_AIRBORNE_TYPE enumType : EM_AIRBORNE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_AIRBORNE_TYPE enumType : EM_AIRBORNE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_AIRBORNE_TYPE getEnum(int value) {
+ for (EM_AIRBORNE_TYPE e : EM_AIRBORNE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_AIRBORNE_TYPE.EM_AIRBORNE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ALARMOUT_POLE.java b/src/main/java/com/netsdk/lib/enumeration/EM_ALARMOUT_POLE.java
new file mode 100644
index 0000000..23ed5b0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ALARMOUT_POLE.java
@@ -0,0 +1,25 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 输出有效模式
+ * @date 2021/2/22
+ */
+public enum EM_ALARMOUT_POLE {
+ /** 未知 */
+ EM_ALARMOUT_POLE_UNKNOWN,
+ /** 低电平有效 */
+ EM_ALARMOUT_POLE_LOW,
+ /** 高电平有效 */
+ EM_ALARMOUT_POLE_HIGH;
+
+ public static EM_ALARMOUT_POLE getAlarmOutPole(int pole) {
+ for (EM_ALARMOUT_POLE alarmOutPole : EM_ALARMOUT_POLE.values()) {
+ if (alarmOutPole.ordinal() == pole) {
+ return alarmOutPole;
+ }
+ }
+ return EM_ALARMOUT_POLE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ALARM_ONECLICKARMING_FUNCTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_ALARM_ONECLICKARMING_FUNCTION.java
new file mode 100644
index 0000000..d9b88d5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ALARM_ONECLICKARMING_FUNCTION.java
@@ -0,0 +1,60 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 功能
+ * @date 2023/03/16 09:04:49
+ */
+public enum EM_ALARM_ONECLICKARMING_FUNCTION {
+ /**
+ * 未知
+ */
+ EM_ALARM_ONECLICKARMING_FUNCTION_UNKNOWN(0, "未知"),
+ /**
+ * 开关
+ */
+ EM_ALARM_ONECLICKARMING_FUNCTION_ONOFF(1, "开关"),
+ /**
+ * 只开
+ */
+ EM_ALARM_ONECLICKARMING_FUNCTION_ONONLY(2, "只开"),
+ /**
+ * 只关
+ */
+ EM_ALARM_ONECLICKARMING_FUNCTION_OFFONLY(3, "只关");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_ALARM_ONECLICKARMING_FUNCTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_ALARM_ONECLICKARMING_FUNCTION enumType : EM_ALARM_ONECLICKARMING_FUNCTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_ALARM_ONECLICKARMING_FUNCTION enumType : EM_ALARM_ONECLICKARMING_FUNCTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ALARM_ONECLICKARMING_TRIGGEROPTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_ALARM_ONECLICKARMING_TRIGGEROPTION.java
new file mode 100644
index 0000000..4b01488
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ALARM_ONECLICKARMING_TRIGGEROPTION.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 触发类型
+ * @date 2023/03/16 09:04:49
+ */
+public enum EM_ALARM_ONECLICKARMING_TRIGGEROPTION {
+ /**
+ * 未知
+ */
+ EM_ALARM_ONECLICKARMING_TRIGGEROPTION_UNKNOWN(0, "未知"),
+ /**
+ * 脉冲
+ */
+ EM_ALARM_ONECLICKARMING_TRIGGEROPTION_IMPULSE(1, "脉冲"),
+ /**
+ * 双稳定
+ */
+ EM_ALARM_ONECLICKARMING_TRIGGEROPTION_BISTABLE(2, "双稳定");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_ALARM_ONECLICKARMING_TRIGGEROPTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_ALARM_ONECLICKARMING_TRIGGEROPTION enumType : EM_ALARM_ONECLICKARMING_TRIGGEROPTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_ALARM_ONECLICKARMING_TRIGGEROPTION enumType : EM_ALARM_ONECLICKARMING_TRIGGEROPTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ALARM_USERAUTHORITY.java b/src/main/java/com/netsdk/lib/enumeration/EM_ALARM_USERAUTHORITY.java
new file mode 100644
index 0000000..e81a7c9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ALARM_USERAUTHORITY.java
@@ -0,0 +1,92 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 用户的权限列表
+ * @date 2023/03/16 09:04:48
+ */
+public enum EM_ALARM_USERAUTHORITY {
+ /**
+ * 未知
+ */
+ EM_ALARM_USERAUTHORITY_UNKNOWN(0, "未知"),
+ /**
+ * 布防
+ */
+ EM_ALARM_USERAUTHORITY_ARMING(1, "布防"),
+ /**
+ * 强制布防
+ */
+ EM_ALARM_USERAUTHORITY_FORCEARMING(2, "强制布防"),
+ /**
+ * 撤防
+ */
+ EM_ALARM_USERAUTHORITY_DISARM(3, "撤防"),
+ /**
+ * 旁路
+ */
+ EM_ALARM_USERAUTHORITY_BYPASS(4, "旁路"),
+ /**
+ * 永久旁路
+ */
+ EM_ALARM_USERAUTHORITY_PERMANENTBYPASS(5, "永久旁路"),
+ /**
+ * 消警
+ */
+ EM_ALARM_USERAUTHORITY_ALARMCONFIRM(6, "消警"),
+ /**
+ * 查询日志
+ */
+ EM_ALARM_USERAUTHORITY_QUERYLOG(7, "查询日志"),
+ /**
+ * 调试模式
+ */
+ EM_ALARM_USERAUTHORITY_DEBUGMODE(8, "调试模式"),
+ /**
+ * 更改基本程序,如:升级程序
+ */
+ EM_ALARM_USERAUTHORITY_UPGRADE(9, "更改基本程序,如:升级程序"),
+ /**
+ * 添加/更改配置参数
+ */
+ EM_ALARM_USERAUTHORITY_SYSTEMCONFIG(10, "添加/更改配置参数"),
+ /**
+ * 用户管理
+ */
+ EM_ALARM_USERAUTHORITY_USERMANAGEMENT(11, "用户管理");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_ALARM_USERAUTHORITY(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_ALARM_USERAUTHORITY enumType : EM_ALARM_USERAUTHORITY.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_ALARM_USERAUTHORITY enumType : EM_ALARM_USERAUTHORITY.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ALARM_USER_GROUP.java b/src/main/java/com/netsdk/lib/enumeration/EM_ALARM_USER_GROUP.java
new file mode 100644
index 0000000..4a564a6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ALARM_USER_GROUP.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 用户所在组
+ * @date 2023/03/16 09:04:49
+ */
+public enum EM_ALARM_USER_GROUP {
+ /**
+ * 未知
+ */
+ EM_ALARM_USER_GROUP_UNKNOWN(0, "未知"),
+ /**
+ * 管理员
+ */
+ EM_ALARM_USER_GROUP_ADMIN(1, "管理员"),
+ /**
+ * 安装员
+ */
+ EM_ALARM_USER_GROUP_INSTALLER(2, "安装员"),
+ /**
+ * 制造商
+ */
+ EM_ALARM_USER_GROUP_MANUFACTURER(3, "制造商"),
+ /**
+ * 操作员
+ */
+ EM_ALARM_USER_GROUP_OPERATOR(4, "操作员");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_ALARM_USER_GROUP(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_ALARM_USER_GROUP enumType : EM_ALARM_USER_GROUP.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_ALARM_USER_GROUP enumType : EM_ALARM_USER_GROUP.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ALGORITHM_PARTITION_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_ALGORITHM_PARTITION_TYPE.java
new file mode 100644
index 0000000..7a4035b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ALGORITHM_PARTITION_TYPE.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 分区类型
+ * @date 2021/2/20
+ */
+public enum EM_ALGORITHM_PARTITION_TYPE {
+ /** 未知 */
+ EM_ALGORITHM_PARTITION_UNKNOWN,
+ /** ext4分区 */
+ EM_ALGORITHM_PARTITION_EXT4,
+ /** suqshfs分区 */
+ EM_ALGORITHM_PARTITION_SUQSHFS,
+ /** ubifs分区 */
+ EM_ALGORITHM_PARTITION_UBIFS;
+
+ public static EM_ALGORITHM_PARTITION_TYPE getAlgorithmPartitionType(int type) {
+ for (EM_ALGORITHM_PARTITION_TYPE partitionType : EM_ALGORITHM_PARTITION_TYPE.values()) {
+ if (partitionType.ordinal() == type) {
+ return partitionType;
+ }
+ }
+ return EM_ALGORITHM_PARTITION_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ALGORITHM_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_ALGORITHM_TYPE.java
new file mode 100644
index 0000000..d8c2d9f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ALGORITHM_TYPE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 加密算法类型
+ * @date 2022/11/03 09:43:17
+ */
+public enum EM_ALGORITHM_TYPE {
+ /**
+ * 未知加密算法
+ */
+ EM_ALGORITHM_TYPE_UNKNOWN(0, "未知加密算法"),
+ /**
+ * AES256-OFB加密算法
+ */
+ EM_ALGORITHM_TYPE_AES256_OFB(1, "AES256-OFB加密算法"),
+ /**
+ * SM加密算法
+ */
+ EM_ALGORITHM_TYPE_SM4_OFB(2, "SM加密算法");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_ALGORITHM_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_ALGORITHM_TYPE enumType : EM_ALGORITHM_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_ALGORITHM_TYPE enumType : EM_ALGORITHM_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ALLOW_PERMIT_FLAG.java b/src/main/java/com/netsdk/lib/enumeration/EM_ALLOW_PERMIT_FLAG.java
new file mode 100644
index 0000000..4cf3958
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ALLOW_PERMIT_FLAG.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 电子通行证状态(添加)
+* @date 2022/03/08 11:25:17
+*/
+public enum EM_ALLOW_PERMIT_FLAG {
+/**
+未知
+*/
+EM_ALLOW_PERMIT_FLAG_UNKNOWN(0,"未知"),
+/**
+没有电子通行证
+*/
+EM_ALLOW_PERMIT_FLAG_NO(1,"没有电子通行证"),
+/**
+电子通行证有效
+*/
+EM_ALLOW_PERMIT_FLAG_EFFECTIVE(2,"电子通行证有效"),
+/**
+电子通行证无效
+*/
+EM_ALLOW_PERMIT_FLAG_INVALID(3,"电子通行证无效");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_ALLOW_PERMIT_FLAG(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_ALLOW_PERMIT_FLAG enumType : EM_ALLOW_PERMIT_FLAG.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_ALLOW_PERMIT_FLAG enumType : EM_ALLOW_PERMIT_FLAG.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_ALLOW_PERMIT_FLAG getEnum(int value) {
+ for (EM_ALLOW_PERMIT_FLAG e : EM_ALLOW_PERMIT_FLAG.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_ALLOW_PERMIT_FLAG.EM_ALLOW_PERMIT_FLAG_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ANALYSE_TASK_ERROR.java b/src/main/java/com/netsdk/lib/enumeration/EM_ANALYSE_TASK_ERROR.java
new file mode 100644
index 0000000..9fe877c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ANALYSE_TASK_ERROR.java
@@ -0,0 +1,78 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 智能分析任务错误码
+* @date 2022/12/01 20:05:32
+*/
+public enum EM_ANALYSE_TASK_ERROR {
+/**
+未知
+*/
+EM_ANALYSE_TASK_ERROR_UNKNOWN(1,"未知"),
+/**
+解码能力不足
+*/
+EM_ANALYSE_TASK_ERROR_INSUFFICIENT_DECODING_CAPABILITY(2,"解码能力不足"),
+/**
+智能能力不足
+*/
+EM_ANALYSE_TASK_ERROR_INSUFFICIENT_INTELLIGENCE_CAPABILITY(3,"智能能力不足"),
+/**
+码流格式不支持
+*/
+EM_ANALYSE_TASK_ERROR_BITSTREAM_FORMAT_NOT_SUPPORTED(4,"码流格式不支持"),
+/**
+分析器离线
+*/
+EM_ANALYSE_TASK_ERROR_ANALYZER_OFF_LINE(5,"分析器离线"),
+/**
+分析器上线
+*/
+EM_ANALYSE_TASK_ERROR_ANALYZER_ON_LINE(6,"分析器上线");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_ANALYSE_TASK_ERROR(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_ANALYSE_TASK_ERROR enumType : EM_ANALYSE_TASK_ERROR.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_ANALYSE_TASK_ERROR enumType : EM_ANALYSE_TASK_ERROR.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return 0;
+ }
+
+public static EM_ANALYSE_TASK_ERROR getEnum(int value) {
+ for (EM_ANALYSE_TASK_ERROR e : EM_ANALYSE_TASK_ERROR.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_ANALYSE_TASK_ERROR.EM_ANALYSE_TASK_ERROR_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ANALYSE_TASK_START_RULE.java b/src/main/java/com/netsdk/lib/enumeration/EM_ANALYSE_TASK_START_RULE.java
new file mode 100644
index 0000000..e6403cb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ANALYSE_TASK_START_RULE.java
@@ -0,0 +1,62 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 智能任务启动规则
+* @date 2022/06/28 16:19:15
+*/
+public enum EM_ANALYSE_TASK_START_RULE {
+/**
+立刻启动
+*/
+EM_ANALYSE_TASK_START_NOW(0,"立刻启动"),
+/**
+稍候手动启动
+*/
+EM_ANALYSE_TASK_START_LATER(1,"稍候手动启动");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_ANALYSE_TASK_START_RULE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_ANALYSE_TASK_START_RULE enumType : EM_ANALYSE_TASK_START_RULE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_ANALYSE_TASK_START_RULE enumType : EM_ANALYSE_TASK_START_RULE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_ANALYSE_TASK_START_RULE getEnum(int value) {
+ for (EM_ANALYSE_TASK_START_RULE e : EM_ANALYSE_TASK_START_RULE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_ANALYSE_TASK_START_RULE.EM_ANALYSE_TASK_START_NOW;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ANGLE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_ANGLE_TYPE.java
new file mode 100644
index 0000000..cc0c3de
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ANGLE_TYPE.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 角度
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_ANGLE_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_ANGLE_UNKNOWN = 0;
+ /**
+ * 正面
+ */
+ public static final int EM_ANGLE_FRONT = 1;
+ /**
+ * 侧面
+ */
+ public static final int EM_ANGLE_SIDE = 2;
+ /**
+ * 背面
+ */
+ public static final int EM_ANGLE_BACK = 3;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ANTI_MISPRESS_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_ANTI_MISPRESS_TYPE.java
new file mode 100644
index 0000000..b4261c9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ANTI_MISPRESS_TYPE.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 防误按模式
+* @date 2022/08/31 14:44:16
+*/
+public enum EM_ANTI_MISPRESS_TYPE {
+/**
+未知
+*/
+EM_ANTI_MISPRESS_UNKNOWN(0,"未知"),
+/**
+按下0.1s生效
+*/
+EM_ANTI_MISPRESS_OFF(1,"按下0.1s生效"),
+/**
+长按3s有效
+*/
+EM_ANTI_MISPRESS_LONG(2,"长按3s有效"),
+/**
+间断1s内连续按2次
+*/
+EM_ANTI_MISPRESS_DOUBLE(3,"间断1s内连续按2次");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_ANTI_MISPRESS_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_ANTI_MISPRESS_TYPE enumType : EM_ANTI_MISPRESS_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_ANTI_MISPRESS_TYPE enumType : EM_ANTI_MISPRESS_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_ANTI_MISPRESS_TYPE getEnum(int value) {
+ for (EM_ANTI_MISPRESS_TYPE e : EM_ANTI_MISPRESS_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_ANTI_MISPRESS_TYPE.EM_ANTI_MISPRESS_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_AREAALARM_TRIGGER_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_AREAALARM_TRIGGER_TYPE.java
new file mode 100644
index 0000000..e326522
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_AREAALARM_TRIGGER_TYPE.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 区域报警触发类型
+* @date 2022/07/19 19:31:27
+*/
+public enum EM_AREAALARM_TRIGGER_TYPE {
+/**
+未知
+*/
+EM_AREAALARM_TRIGGER_TYPE_UNKNOWN(0,"未知"),
+/**
+通道打开
+*/
+EM_AREAALARM_TRIGGER_TYPE_ALARM(1,"通道打开"),
+/**
+通道防拆
+*/
+EM_AREAALARM_TRIGGER_TYPE_TAMPER(2,"通道防拆"),
+/**
+通道遮挡
+*/
+EM_AREAALARM_TRIGGER_TYPE_MASK(3,"通道遮挡"),
+/**
+通道防短
+*/
+EM_AREAALARM_TRIGGER_TYPE_SHORT(4,"通道防短");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_AREAALARM_TRIGGER_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_AREAALARM_TRIGGER_TYPE enumType : EM_AREAALARM_TRIGGER_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_AREAALARM_TRIGGER_TYPE enumType : EM_AREAALARM_TRIGGER_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_AREAALARM_TRIGGER_TYPE getEnum(int value) {
+ for (EM_AREAALARM_TRIGGER_TYPE e : EM_AREAALARM_TRIGGER_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_AREAALARM_TRIGGER_TYPE.EM_AREAALARM_TRIGGER_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_AREAARM_TRIGGERMODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_AREAARM_TRIGGERMODE.java
new file mode 100644
index 0000000..b8affad
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_AREAARM_TRIGGERMODE.java
@@ -0,0 +1,101 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 291189
+ * @description 区域防区操作方式
+ * @date 2022/07/19 10:09:08
+ */
+public enum EM_AREAARM_TRIGGERMODE {
+ /**
+ * 未知
+ */
+ EM_AREAARM_TRIGGERMODE_UNKNOWN(0, "未知"),
+ /**
+ * 键盘
+ */
+ EM_AREAARM_TRIGGERMODE_KEYPAD(1, "键盘"),
+ /**
+ * 遥控器
+ */
+ EM_AREAARM_TRIGGERMODE_REMOTECONTROL(2, "遥控器"),
+ /**
+ * 用户操作
+ */
+ EM_AREAARM_TRIGGERMODE_USER(3, "用户操作"),
+ /**
+ * 本地
+ */
+ EM_AREAARM_TRIGGERMODE_LOCAL(4, "本地"),
+ /**
+ * 定时器
+ */
+ EM_AREAARM_TRIGGERMODE_TIMER(5, "定时器"),
+ /**
+ * Key类型防区
+ */
+ EM_AREAARM_TRIGGERMODE_KEY(6, "Key类型防区"),
+ /**
+ * 远程操作(电话反控、短信反控、手机App、平台客户端等)
+ */
+ EM_AREAARM_TRIGGERMODE_REMOTE(7, "远程操作(电话反控、短信反控、手机App、平台客户端等)"),
+ /**
+ * DSS平台客户端
+ */
+ EM_AREAARM_TRIGGERMODE_DSS(8, "DSS平台客户端"),
+ /**
+ * DSSPro平台客户端
+ */
+ EM_AREAARM_TRIGGERMODE_DSSPRO(9, "DSSPro平台客户端"),
+ /**
+ * 手机客户端
+ */
+ EM_AREAARM_TRIGGERMODE_DMSS(10, "手机客户端"),
+ /**
+ * Smart pss、ICC平台
+ */
+ EM_AREAARM_TRIGGERMODE_PLATFORM(11, "Smart pss、ICC平台");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_AREAARM_TRIGGERMODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_AREAARM_TRIGGERMODE enumType : EM_AREAARM_TRIGGERMODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_AREAARM_TRIGGERMODE enumType : EM_AREAARM_TRIGGERMODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_AREAARM_TRIGGERMODE getEnum(int value) {
+ for (EM_AREAARM_TRIGGERMODE e : EM_AREAARM_TRIGGERMODE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_AREAARM_TRIGGERMODE.EM_AREAARM_TRIGGERMODE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_AREAARM_USER.java b/src/main/java/com/netsdk/lib/enumeration/EM_AREAARM_USER.java
new file mode 100644
index 0000000..84e85e8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_AREAARM_USER.java
@@ -0,0 +1,85 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 291189
+ * @description 区域防区操作用户
+ * @date 2022/07/19 10:09:08
+ */
+public enum EM_AREAARM_USER {
+ /**
+ * 未知
+ */
+ EM_AREAARM_USER_UNKNOWN(0, "未知"),
+ /**
+ *
+ */
+ EM_AREAARM_USER_SUPERVISOR(1, ""),
+ /**
+ * 管理用户
+ */
+ EM_AREAARM_USER_MANAGER(2, "管理用户"),
+ /**
+ * 主用户
+ */
+ EM_AREAARM_USER_MASTER(3, "主用户"),
+ /**
+ * 普通用户
+ */
+ EM_AREAARM_USER_USER(4, "普通用户"),
+ /**
+ * 临时用户
+ */
+ EM_AREAARM_USER_TEMPORARY(5, "临时用户"),
+ /**
+ * 胁迫用户
+ */
+ EM_AREAARM_USER_DURESS(6, "胁迫用户"),
+ /**
+ * 巡逻用户
+ */
+ EM_AREAARM_USER_PATROL(7, "巡逻用户");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_AREAARM_USER(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_AREAARM_USER enumType : EM_AREAARM_USER.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_AREAARM_USER enumType : EM_AREAARM_USER.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_AREAARM_USER getEnum(int value) {
+ for (EM_AREAARM_USER e : EM_AREAARM_USER.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_AREAARM_USER.EM_AREAARM_USER_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ARMING_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_ARMING_TYPE.java
new file mode 100644
index 0000000..8e3c43d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ARMING_TYPE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 布防模式
+* @date 2022/08/31 14:44:17
+*/
+public enum EM_ARMING_TYPE {
+/**
+未知
+*/
+EM_ARMING_UNKNOWN(-1,"未知"),
+/**
+在家布防
+*/
+EM_ARMING_ATHOME(0,"在家布防"),
+/**
+外出布防
+*/
+EM_ARMING_OUT(1,"外出布防");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_ARMING_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_ARMING_TYPE enumType : EM_ARMING_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_ARMING_TYPE enumType : EM_ARMING_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_ARMING_TYPE getEnum(int value) {
+ for (EM_ARMING_TYPE e : EM_ARMING_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_ARMING_TYPE.EM_ARMING_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ARM_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_ARM_STATE.java
new file mode 100644
index 0000000..8032b5f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ARM_STATE.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 布撤防状态
+ * @date 2021/11/08
+ */
+public enum EM_ARM_STATE {
+
+ // 未知
+ EM_ARM_STATE_UNKNOWN(0, "未知"),
+
+ // Total布防
+ EM_ARM_STATE_TOTAL_ARMING(1, "Total布防"),
+
+ // partial1布防
+ EM_ARM_STATE_PARTIAL1_ARMING(2, "partial1布防"),
+
+ // partial2布防
+ EM_ARM_STATE_PARTIAL2_ARMING(3, "partial2布防"),
+
+ // partial1+2布防
+ EM_ARM_STATE_PARTIAL1_PARTIAL2_ARMING(4, "partial1+2布防"),
+
+ // 强制布防
+ EM_ARM_STATE_FORCEARMING(5, "强制布防"),
+
+ // 撤防
+ EM_ARM_STATE_DISARMING(6, "撤防");
+
+ private int value;
+ private String note;
+
+ private EM_ARM_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_ARM_STATE enumType : EM_ARM_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_ARM_STATE enumType : EM_ARM_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ARM_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_ARM_TYPE.java
new file mode 100644
index 0000000..43be98f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ARM_TYPE.java
@@ -0,0 +1,81 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 291189
+ * @description 布撤防类型
+ * @date 2022/07/19 10:54:34
+ */
+public enum EM_ARM_TYPE {
+ /**
+ * 未知
+ */
+ EM_ARM_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * Total布防
+ */
+ EM_ARM_TYPE_TOTAL_ARMING(1, "Total布防"),
+ /**
+ * partial1布防
+ */
+ EM_ARM_TYPE_PARTIAL1_ARMING(2, "partial1布防"),
+ /**
+ * partial2布防
+ */
+ EM_ARM_TYPE_PARTIAL2_ARMING(3, "partial2布防"),
+ /**
+ * partial1+2布防
+ */
+ EM_ARM_TYPE_PARTIAL_ARMING(4, "partial1+2布防"),
+ /**
+ * 强制布防
+ */
+ EM_ARM_TYPE_DENFENCE_ARMING(5, "强制布防"),
+ /**
+ * 撤防
+ */
+ EM_ARM_TYPE_DISARMING(6, "撤防");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_ARM_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_ARM_TYPE enumType : EM_ARM_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_ARM_TYPE enumType : EM_ARM_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_ARM_TYPE getEnum(int value) {
+ for (EM_ARM_TYPE e : EM_ARM_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_ARM_TYPE.EM_ARM_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ASG_WORK_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_ASG_WORK_MODE.java
new file mode 100644
index 0000000..b5fc3bc
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ASG_WORK_MODE.java
@@ -0,0 +1,48 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 工作模式
+ * @date 2021/2/7
+ */
+public enum EM_ASG_WORK_MODE {
+ /** 未知 */
+ EM_ASG_WORK_MODE_UNKNOWN(-1, "未知"),
+ /** 常闭模式 */
+ EM_ASG_WORK_MODE_CLOSE(0, "常闭模式"),
+ EM_ASG_WORK_MODE_OPEN(1, "常开模式");
+
+ private int mode;
+ private String desc;
+
+ EM_ASG_WORK_MODE(int mode, String desc) {
+ this.mode = mode;
+ this.desc = desc;
+ }
+
+ public static EM_ASG_WORK_MODE getAsgWorkMode(int mode) {
+ for (EM_ASG_WORK_MODE workMode : EM_ASG_WORK_MODE.values()) {
+ if (workMode.mode == mode) {
+ return workMode;
+ }
+ }
+ return EM_ASG_WORK_MODE_UNKNOWN;
+ }
+
+ public int getMode() {
+ return mode;
+ }
+
+ public void setMode(int mode) {
+ this.mode = mode;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ASSOCIATED_RECORD_SOURCE.java b/src/main/java/com/netsdk/lib/enumeration/EM_ASSOCIATED_RECORD_SOURCE.java
new file mode 100644
index 0000000..294e078
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ASSOCIATED_RECORD_SOURCE.java
@@ -0,0 +1,46 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 是否与其他目标关联
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_ASSOCIATED_RECORD_SOURCE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_ASSOCIATED_RECORD_SOURCE_UNKNOWN = -1;
+ /**
+ * 未关联
+ */
+ public static final int EM_ASSOCIATED_RECORD_SOURCE_NONE = 0;
+ /**
+ * 与人体有关联成功
+ */
+ public static final int EM_ASSOCIATED_RECORD_SOURCE_HUMAN = 1;
+ /**
+ * 与机动车过车有关联
+ */
+ public static final int EM_ASSOCIATED_RECORD_SOURCE_MOTOR_VEHICLE_PASSING = 2;
+ /**
+ * 与机动车违章有关联
+ */
+ public static final int EM_ASSOCIATED_RECORD_SOURCE_MOTOR_VEHICLE_VIOLATION = 3;
+ /**
+ * 与结构化机动车有关联
+ */
+ public static final int EM_ASSOCIATED_RECORD_SOURCE_STRUCTURED_MOTOR_VEHICLE = 4;
+ /**
+ * 与人脸有关联
+ */
+ public static final int EM_ASSOCIATED_RECORD_SOURCE_FACE = 5;
+ /**
+ * 与非机动车有关联
+ */
+ public static final int EM_ASSOCIATED_RECORD_SOURCE_NON_MOTOR_VEHICLE = 6;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ATTACH_TOPICS.java b/src/main/java/com/netsdk/lib/enumeration/EM_ATTACH_TOPICS.java
new file mode 100644
index 0000000..d7916cc
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ATTACH_TOPICS.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 订阅类型
+ * @date 2022/04/20 10:16:56
+ */
+public enum EM_ATTACH_TOPICS {
+ /**
+ * 表示订阅所有属性和事件
+ */
+ EM_ATTACH_TOPICS_ALL(0, " * 表示订阅所有属性和事件"),
+ /**
+ * Props 表示订阅设备属性上报
+ */
+ EM_ATTACH_TOPICS_PROPS(1, " Props 表示订阅设备属性上报"),
+ /**
+ * Events 标识订阅设备事件上报
+ */
+ EM_ATTACH_TOPICS_EVENTS(2, " Events 标识订阅设备事件上报");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_ATTACH_TOPICS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_ATTACH_TOPICS enumType : EM_ATTACH_TOPICS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_ATTACH_TOPICS enumType : EM_ATTACH_TOPICS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_ATTACH_TOPICS getEnum(int value) {
+ for (EM_ATTACH_TOPICS e : EM_ATTACH_TOPICS.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_ATTACH_TOPICS.EM_ATTACH_TOPICS_ALL;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_AUDIO_DATA_SOURCE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_AUDIO_DATA_SOURCE_TYPE.java
new file mode 100644
index 0000000..17d0f00
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_AUDIO_DATA_SOURCE_TYPE.java
@@ -0,0 +1,54 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 音频解码能力数据流源类型
+ * @date 2021/01/06
+ */
+public enum EM_AUDIO_DATA_SOURCE_TYPE {
+ // 未知数据类型
+ EM_AUDIO_DATA_SOURCE_TYPE_UNKNOWN(-1, "未知数据类型"),
+
+ // 对讲数据
+ EM_AUDIO_DATA_SOURCE_TYPE_TALK(0, "对讲数据"),
+
+ // 普通音频数据,如伴音
+ EM_AUDIO_DATA_SOURCE_TYPE_NORMAL(1, "普通音频数据,如伴音"),
+
+ // 报警音频数据流
+ EM_AUDIO_DATA_SOURCE_TYPE_ALARM(2, "报警音频数据流");
+
+ private int value;
+ private String note;
+
+ private EM_AUDIO_DATA_SOURCE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_AUDIO_DATA_SOURCE_TYPE enumType : EM_AUDIO_DATA_SOURCE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_AUDIO_DATA_SOURCE_TYPE enumType : EM_AUDIO_DATA_SOURCE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_AUDIO_DATA_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_AUDIO_DATA_TYPE.java
new file mode 100644
index 0000000..084dc94
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_AUDIO_DATA_TYPE.java
@@ -0,0 +1,29 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 音频数据类型
+ * @date 2021/2/22
+ */
+public enum EM_AUDIO_DATA_TYPE {
+ /** 默认 */
+ EM_AUDIO_DATA_TYPE_DEFAULT,
+ /** 音频强制转换为AAC */
+ EM_AUDIO_DATA_TYPE_AAC,
+ /** 音频强制转换为G711A */
+ EM_AUDIO_DATA_TYPE_G711A,
+ /** 音频强制转换为G711U */
+ EM_AUDIO_DATA_TYPE_G711U,
+ /** 音频强制转换为MP2 */
+ EM_AUDIO_DATA_TYPE_MP2;
+
+ public static EM_AUDIO_DATA_TYPE getAudioDataType(int type) {
+ for (EM_AUDIO_DATA_TYPE audioType : EM_AUDIO_DATA_TYPE.values()) {
+ if (audioType.ordinal() == type) {
+ return audioType;
+ }
+ }
+ return EM_AUDIO_DATA_TYPE_DEFAULT;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_AUDIO_SOURCE_FLAG.java b/src/main/java/com/netsdk/lib/enumeration/EM_AUDIO_SOURCE_FLAG.java
new file mode 100644
index 0000000..1128c8c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_AUDIO_SOURCE_FLAG.java
@@ -0,0 +1,51 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 音频数据来源
+ * @date 2021/12/29
+ */
+public enum EM_AUDIO_SOURCE_FLAG {
+ // 未知状态
+ EM_AUDIO_SOURCE_FLAG_UNKNOWN(-1, "未知状态"),
+
+ // 本地录音数据,可以发送给设备
+ EM_AUDIO_SOURCE_FLAG_LOCAL(0, "本地录音数据,可以发送给设备"),
+
+ // 远程音频数据,即从设备接收到音频数据
+ EM_AUDIO_SOURCE_FLAG_REMOTE(1, "远程音频数据,即从设备接收到音频数据");
+
+ private int value;
+ private String note;
+
+ private EM_AUDIO_SOURCE_FLAG(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_AUDIO_SOURCE_FLAG enumType : EM_AUDIO_SOURCE_FLAG.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_AUDIO_SOURCE_FLAG enumType : EM_AUDIO_SOURCE_FLAG.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_AUTO_PROTECT_WEEK.java b/src/main/java/com/netsdk/lib/enumeration/EM_AUTO_PROTECT_WEEK.java
new file mode 100644
index 0000000..16979f9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_AUTO_PROTECT_WEEK.java
@@ -0,0 +1,61 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 自动维护星期
+ * @date 2021/08/24
+ */
+public enum EM_AUTO_PROTECT_WEEK {
+ // 未知
+ EM_AUTO_PROTECT_UNKNOWN(0, "未知"),
+ // 星期一
+ EM_AUTO_PROTECT_MONDAY(1, "星期一"),
+ // 星期二
+ EM_AUTO_PROTECT_TUESDAY(2, "星期二"),
+ // 星期三
+ EM_AUTO_PROTECT_WEDNESDAY(3, "星期三"),
+ // 星期四
+ EM_AUTO_PROTECT_THURSDAY(4, "星期四"),
+ // 星期五
+ EM_AUTO_PROTECT_FIRDAY(5, "星期五"),
+ // 星期六
+ EM_AUTO_PROTECT_SATURDAY(6, "星期六"),
+ // 星期天
+ EM_AUTO_PROTECT_SUNDAY(7, "星期天"),
+ // 每天
+ EM_AUTO_PROTECT_EVERYDAY(8, "每天");
+
+ private int value;
+ private String note;
+
+ private EM_AUTO_PROTECT_WEEK(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_AUTO_PROTECT_WEEK enumType : EM_AUTO_PROTECT_WEEK.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_AUTO_PROTECT_WEEK enumType : EM_AUTO_PROTECT_WEEK.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_BACKUP_ERROR_CODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_BACKUP_ERROR_CODE.java
new file mode 100644
index 0000000..2598d16
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_BACKUP_ERROR_CODE.java
@@ -0,0 +1,78 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 备份模式设置错误码
+ * @date 2021/09/28
+ */
+public enum EM_BACKUP_ERROR_CODE {
+ // 未知
+ EM_BACKUP_ERROR_CODE_UNKNOWN(-1, "未知"),
+ // 备份模式设置成功
+ EM_BACKUP_ERROR_CODE_SUCCESS(0, "备份模式设置成功"),
+ // 周期方案表有误
+ EM_BACKUP_ERROR_CODE_CYCLE_PLAN(1, "周期方案表有误"),
+ // 绿信比表有误
+ EM_BACKUP_ERROR_CODE_GREEN_LETTER(2, "绿信比表有误"),
+ // 时基方案表有误
+ EM_BACKUP_ERROR_CODE_TIME_BASE_PLAN(3, "时基方案表有误"),
+ // 日计划表有误
+ EM_BACKUP_ERROR_CODE_DAY_PLAN(4, "日计划表有误"),
+ // 动作方案表有误
+ EM_BACKUP_ERROR_CODE_ACTION_PLAN(5, "动作方案表有误"),
+ // 相序表有误
+ EM_BACKUP_ERROR_CODE_PHASE_SEQUENCE(6, "相序表有误"),
+ // 通道表有误
+ EM_BACKUP_ERROR_CODE_CHANNEL_TABLE(7, "通道表有误"),
+ // 跟随相位表有误
+ EM_BACKUP_ERROR_CODE_FOLLOW_PHASE_TABLE(8, "跟随相位表有误"),
+ // 相位冲突
+ EM_BACKUP_ERROR_CODE_PHASE_CONFLCT(9, "相位冲突"),
+ // 下发方案超时
+ EM_BACKUP_ERROR_CODE_DELIVERY_PLAN(10, "下发方案超时"),
+ // 车道表设置有误
+ EM_BACKUP_ERROR_CODE_LANE_TABLE_SETTING(11, "车道表设置有误"),
+ // 用于信号灯,提示信号灯不支持短连接路口
+ EM_BACKUP_ERROR_CODE_NOT_SUPPORT_SHORT_JUNCTIONS(12, "用于信号灯,提示信号灯不支持短连接路口"),
+ // 通道配置有误 用于信号灯 无掉头箭头灯、直行非机动车灯、左转非机动车灯、公交信号灯--可变车道
+ EM_BACKUP_ERROR_CODE_CHANNEL_CONFIGURATION(13, "通道配置有误"),
+ // 可变车道方案表有误
+ EM_BACKUP_ERROR_CODE_VARIABLEE_LANE_TABLE(14, "可变车道方案表有误 "),
+ // 周计划方案表有误
+ EM_BACKUP_ERROR_CODE_WEEKLY_PLAN(15, "周计划方案表有误");
+
+ private int value;
+ private String note;
+
+ private EM_BACKUP_ERROR_CODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_BACKUP_ERROR_CODE enumType : EM_BACKUP_ERROR_CODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_BACKUP_ERROR_CODE enumType : EM_BACKUP_ERROR_CODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_BACKUP_FORMAT.java b/src/main/java/com/netsdk/lib/enumeration/EM_BACKUP_FORMAT.java
new file mode 100644
index 0000000..cddbd6f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_BACKUP_FORMAT.java
@@ -0,0 +1,46 @@
+package com.netsdk.lib.enumeration;
+/**
+ *
+ * @author 119178
+ *
+ */
+public enum EM_BACKUP_FORMAT {
+ EM_BACKUP_FORMAT_ASF(0,"asf"), // "asf"
+ EM_BACKUP_FORMAT_DAV(1,"dav"), // "dav"
+ EM_BACKUP_FORMAT_MP4(2,"mp4"); // "mp4"
+
+
+ private int value;
+ private String note;
+
+ private EM_BACKUP_FORMAT(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFICSTROBE_STATUS enumType : EM_TRAFFICSTROBE_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFICSTROBE_STATUS enumType : EM_TRAFFICSTROBE_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_BACKUP_SOURCE_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_BACKUP_SOURCE_MODE.java
new file mode 100644
index 0000000..4097a3b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_BACKUP_SOURCE_MODE.java
@@ -0,0 +1,40 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_BACKUP_SOURCE_MODE {
+ EM_SOURCE_MODE_SINGLE(0,"Single"), // "Single",/*单个备份模式*/
+ EM_SOURCE_MODE_COMBIN(1,"Combin"); // "Combin",/*合并备份模式*/
+
+ private int value;
+ private String note;
+
+ private EM_BACKUP_SOURCE_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFICSTROBE_STATUS enumType : EM_TRAFFICSTROBE_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFICSTROBE_STATUS enumType : EM_TRAFFICSTROBE_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_BACKUP_SOURCE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_BACKUP_SOURCE_TYPE.java
new file mode 100644
index 0000000..22d07fe
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_BACKUP_SOURCE_TYPE.java
@@ -0,0 +1,40 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_BACKUP_SOURCE_TYPE {
+ EM_SOURCE_TYPE_REALTIME(0,"RealTime"), // "RealTime", /*实时源*/,源类型有效
+ EM_SOURCE_TYPE_LOCAL(1,"Local"), // "Local", /*本地源*/
+ EM_SOURCE_TYPE_NETWORK(2,"Network"); // "Network", /*网络源*/
+ private int value;
+ private String note;
+
+ private EM_BACKUP_SOURCE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFICSTROBE_STATUS enumType : EM_TRAFFICSTROBE_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFICSTROBE_STATUS enumType : EM_TRAFFICSTROBE_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_BACKUP_TARGET_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_BACKUP_TARGET_MODE.java
new file mode 100644
index 0000000..dec1b8a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_BACKUP_TARGET_MODE.java
@@ -0,0 +1,41 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_BACKUP_TARGET_MODE {
+ EM_TARGET_MODE_SYNC(0,"Sync"), // "Sync", /*同步备份*/
+ EM_TARGET_MODE_TURN(1,"Turn"), // "Turn", /*轮训备份*/
+ EM_TARGET_MODE_CYCLE(2,"Cycle"); // "Cycle", /*循环备份*/
+
+ private int value;
+ private String note;
+
+ private EM_BACKUP_TARGET_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFICSTROBE_STATUS enumType : EM_TRAFFICSTROBE_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFICSTROBE_STATUS enumType : EM_TRAFFICSTROBE_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_BACKUP_TARGET_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_BACKUP_TARGET_TYPE.java
new file mode 100644
index 0000000..ee4bef5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_BACKUP_TARGET_TYPE.java
@@ -0,0 +1,39 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_BACKUP_TARGET_TYPE {
+ EM_TARGET_TYPE_LOCAL(0,"Local"), // "Local", /*本地源*/
+ EM_TARGET_TYPE_NETWORK(1,"Network"); // "Network", /*网络源*/
+ private int value;
+ private String note;
+
+ private EM_BACKUP_TARGET_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFICSTROBE_STATUS enumType : EM_TRAFFICSTROBE_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFICSTROBE_STATUS enumType : EM_TRAFFICSTROBE_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_BAG_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_BAG_TYPE.java
new file mode 100644
index 0000000..df295b7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_BAG_TYPE.java
@@ -0,0 +1,42 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 包类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_BAG_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_BAG_UNKNOWN = 0;
+ /**
+ * 手提包
+ */
+ public static final int EM_BAG_HANDBAG = 1;
+ /**
+ * 肩包
+ */
+ public static final int EM_BAG_SHOULDERBAG = 2;
+ /**
+ * 背包
+ */
+ public static final int EM_BAG_KNAPSACK = 3;
+ /**
+ * 拉杆箱
+ */
+ public static final int EM_BAG_DRAWBARBOX = 4;
+ /**
+ * 腰包
+ */
+ public static final int EM_BAG_WAISTPACK = 5;
+ /**
+ * 无包
+ */
+ public static final int EM_BAG_NONE = 6;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_BATTERY_EXIST_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_BATTERY_EXIST_STATE.java
new file mode 100644
index 0000000..85eb482
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_BATTERY_EXIST_STATE.java
@@ -0,0 +1,43 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_BATTERY_EXIST_STATE {
+
+ EM_BATTERY_EXIST_STATE_UNKNOWN(0, "电池在位未知"),
+ EM_BATTERY_EXIST_STATE_EXIST(1, "电池在位"), // 电池在位
+ EM_BATTERY_EXIST_STATE_MISSING(2, "电池丢失"); // 电池丢失
+
+ private int value;
+ private String note;
+
+ private EM_BATTERY_EXIST_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_BATTERY_EXIST_STATE enumType : EM_BATTERY_EXIST_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_BATTERY_EXIST_STATE enumType : EM_BATTERY_EXIST_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_BATTERY_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_BATTERY_STATE.java
new file mode 100644
index 0000000..77d9d61
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_BATTERY_STATE.java
@@ -0,0 +1,41 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_BATTERY_STATE {
+ EM_BATTERY_STATE_UNKNOWN(0, "电量未知"),
+ EM_BATTERY_STATE_NORMAL(1, "电量正常"), // 电量正常
+ EM_BATTERY_STATE_LOW(2, "电量低"); // 电量低
+
+ private int value;
+ private String note;
+
+ private EM_BATTERY_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_BATTERY_STATE enumType : EM_BATTERY_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_BATTERY_STATE enumType : EM_BATTERY_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_BATTERY_TEMPER_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_BATTERY_TEMPER_STATE.java
new file mode 100644
index 0000000..52a8248
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_BATTERY_TEMPER_STATE.java
@@ -0,0 +1,61 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 电池温度状态
+ * @date 2022/03/31
+ */
+public enum EM_BATTERY_TEMPER_STATE {
+ // 未知
+ EM_BATTERY_TEMPER_STATE_UNKNOWN(0, "未知"),
+
+ // 低温
+ EM_BATTERY_TEMPER_STATE_LOW_TEMPER(1, "低温"),
+
+ // 常温
+ EM_BATTERY_TEMPER_STATE_NORMAL_TEMPER(2, "常温"),
+
+ // 高温
+ EM_BATTERY_TEMPER_STATE_HIGH_TEMPER(3, "高温"),
+
+ // 超温
+ EM_BATTERY_TEMPER_STATE_OVER_TEMPER(4, "超温"),
+
+ // 异常
+ EM_BATTERY_TEMPER_STATE_ABNORMAL_TEMPER(5, "异常");
+
+ private int value;
+ private String note;
+
+ private EM_BATTERY_TEMPER_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_BATTERY_TEMPER_STATE enumType : EM_BATTERY_TEMPER_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_BATTERY_TEMPER_STATE enumType : EM_BATTERY_TEMPER_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_BEARD_STATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_BEARD_STATE_TYPE.java
new file mode 100644
index 0000000..2ef1c31
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_BEARD_STATE_TYPE.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 胡子状态
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_BEARD_STATE_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_BEARD_STATE_UNKNOWN = 0;
+ /**
+ * 未识别
+ */
+ public static final int EM_BEARD_STATE_NODISTI = 1;
+ /**
+ * 没胡子
+ */
+ public static final int EM_BEARD_STATE_NOBEARD = 2;
+ /**
+ * 有胡子
+ */
+ public static final int EM_BEARD_STATE_HAVEBEARD = 3;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_BOAT_DIRECTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_BOAT_DIRECTION.java
new file mode 100644
index 0000000..7b53063
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_BOAT_DIRECTION.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 船只行驶方向
+ * @date 2022/06/16 11:14:19
+ */
+public enum EM_BOAT_DIRECTION {
+ /**
+ * 未知
+ */
+ EM_BOAT_DIRECTION_UNKNOWN(0, "未知"),
+ /**
+ * 逆向
+ */
+ EM_BOAT_DIRECTION_OPPOSITE(1, "逆向"),
+ /**
+ * 正向
+ */
+ EM_BOAT_DIRECTION_POSITIVE(2, "正向");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_BOAT_DIRECTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_BOAT_DIRECTION enumType : EM_BOAT_DIRECTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_BOAT_DIRECTION enumType : EM_BOAT_DIRECTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_BREED_DETECT_CATEGORY_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_BREED_DETECT_CATEGORY_TYPE.java
new file mode 100644
index 0000000..eba10ca
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_BREED_DETECT_CATEGORY_TYPE.java
@@ -0,0 +1,62 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 智慧养殖检测目标子类型
+* @date 2022/04/15 15:29:30
+*/
+public enum EM_BREED_DETECT_CATEGORY_TYPE {
+/**
+未知
+*/
+EM_BREED_DETECT_CATEGORY_UNKNOWN(0,"未知"),
+/**
+猪
+*/
+EM_BREED_DETECT_CATEGORY_PIG(1,"猪");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_BREED_DETECT_CATEGORY_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_BREED_DETECT_CATEGORY_TYPE enumType : EM_BREED_DETECT_CATEGORY_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_BREED_DETECT_CATEGORY_TYPE enumType : EM_BREED_DETECT_CATEGORY_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_BREED_DETECT_CATEGORY_TYPE getEnum(int value) {
+ for (EM_BREED_DETECT_CATEGORY_TYPE e : EM_BREED_DETECT_CATEGORY_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_BREED_DETECT_CATEGORY_TYPE.EM_BREED_DETECT_CATEGORY_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_BROADCAST_TEXT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_BROADCAST_TEXT_TYPE.java
new file mode 100644
index 0000000..47ba760
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_BROADCAST_TEXT_TYPE.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 播报文本类型
+ * @date 2022/11/28 16:20:42
+ */
+public enum EM_BROADCAST_TEXT_TYPE {
+ /**
+ * 未知
+ */
+ EM_BROADCAST_TEXT_TYPE_UNKNOWN(-1, "未知"),
+ /**
+ * 普通
+ */
+ EM_BROADCAST_TEXT_TYPE_ORDINARY(0, "普通"),
+ /**
+ * 车牌号
+ */
+ EM_BROADCAST_TEXT_TYPE_PLATE_NUMBER(1, "车牌号"),
+ /**
+ * 时间
+ */
+ EM_BROADCAST_TEXT_TYPE_TIME(2, "时间"),
+ /**
+ * 数字字符串
+ */
+ EM_BROADCAST_TEXT_TYPE_NUMBER_STRING(3, "数字字符串");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_BROADCAST_TEXT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_BROADCAST_TEXT_TYPE enumType : EM_BROADCAST_TEXT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_BROADCAST_TEXT_TYPE enumType : EM_BROADCAST_TEXT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_BUTTON_ALARM_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_BUTTON_ALARM_TYPE.java
new file mode 100644
index 0000000..3759c52
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_BUTTON_ALARM_TYPE.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 按钮报警类型
+* @date 2022/08/31 14:44:18
+*/
+public enum EM_BUTTON_ALARM_TYPE {
+/**
+未知
+*/
+EM_BUTTON_ALARM_UNKNOWN(-1,"未知"),
+/**
+火警
+*/
+EM_BUTTON_ALARM_FIRE(0,"火警"),
+/**
+紧急报警
+*/
+EM_BUTTON_ALARM_EMERGENCY(1,"紧急报警"),
+/**
+医疗报警
+*/
+EM_BUTTON_ALARM_MEDICAL(2,"医疗报警");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_BUTTON_ALARM_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_BUTTON_ALARM_TYPE enumType : EM_BUTTON_ALARM_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_BUTTON_ALARM_TYPE enumType : EM_BUTTON_ALARM_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_BUTTON_ALARM_TYPE getEnum(int value) {
+ for (EM_BUTTON_ALARM_TYPE e : EM_BUTTON_ALARM_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_BUTTON_ALARM_TYPE.EM_BUTTON_ALARM_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_BYPASSMODE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_BYPASSMODE_TYPE.java
new file mode 100644
index 0000000..0f041cb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_BYPASSMODE_TYPE.java
@@ -0,0 +1,68 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 旁路模式类型
+ * @date 2023/03/15 16:33:42
+ */
+public enum EM_BYPASSMODE_TYPE {
+ /**
+ * 未知
+ */
+ EM_BYPASSMODE_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 不使用
+ */
+ EM_BYPASSMODE_TYPE_OFF(1, "不使用"),
+ /**
+ * 正常
+ */
+ EM_BYPASSMODE_TYPE_ACTIVE(2, "正常"),
+ /**
+ * 旁路
+ */
+ EM_BYPASSMODE_TYPE_BYPASSED(3, "旁路"),
+ /**
+ * 隔离
+ */
+ EM_BYPASSMODE_TYPE_ISOLATED(4, "隔离"),
+ /**
+ * 测试
+ */
+ EM_BYPASSMODE_TYPE_TEST(5, "测试");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_BYPASSMODE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_BYPASSMODE_TYPE enumType : EM_BYPASSMODE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_BYPASSMODE_TYPE enumType : EM_BYPASSMODE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CALIBRATEAREA_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CALIBRATEAREA_TYPE.java
new file mode 100644
index 0000000..0a3ea19
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CALIBRATEAREA_TYPE.java
@@ -0,0 +1,57 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 标定区域类型
+ * @date 2021/01/11
+ */
+public enum EM_CALIBRATEAREA_TYPE {
+ // 错误
+ EM_CALIBRATEAREA_TYPE_ERR(0, "err"),
+
+ //地面,需要N条竖直线段+M条水平线段((N=3,M=1);(N=2,M=2);今后扩展)
+ EM_CALIBRATEAREA_TYPE_GROUD(1, "Groud"),
+
+ //水平面,需要水平面上一点到地面点的投影垂直线段
+ EM_CALIBRATEAREA_TYPE_HORIZONTAL(2, "Horizontal"),
+
+ //垂直面,需要垂直面与地面的交线
+ EM_CALIBRATEAREA_TYPE_VERTICAL(3, "Vertical"),
+
+ //任意平面,N条竖直线段,及每条长度(N=3,及今后扩展)
+ EM_CALIBRATEAREA_TYPE_ANY(4, "Any");
+
+ private int value;
+ private String note;
+
+ private EM_CALIBRATEAREA_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CALIBRATEAREA_TYPE enumType : EM_CALIBRATEAREA_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CALIBRATEAREA_TYPE enumType : EM_CALIBRATEAREA_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CALLLIFT_ACTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_CALLLIFT_ACTION.java
new file mode 100644
index 0000000..b8eb4c6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CALLLIFT_ACTION.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 呼叫电梯方式
+* @date 2022/10/19 14:01:07
+*/
+public enum EM_CALLLIFT_ACTION {
+/**
+未知
+*/
+EM_CALLLIFT_ACTION_UNKNOWN(-1,"未知"),
+/**
+用户通过对讲分机打开单元门锁,同时呼叫电梯到单元门处
+*/
+EM_CALLLIFT_ACTION_USER_UNLOCK_CALL(0,"用户通过对讲分机打开单元门锁,同时呼叫电梯到单元门处"),
+/**
+用户呼叫电梯到用户所在楼层
+*/
+EM_CALLLIFT_ACTION_USER_DIRECT_CALL(1,"用户呼叫电梯到用户所在楼层"),
+/**
+用户呼叫电梯经由某层到某层
+*/
+EM_CALLLIFT_ACTION_USER_REDIRECT_CALL(2,"用户呼叫电梯经由某层到某层"),
+/**
+单元门开锁,同时呼叫电梯到单元门处
+*/
+EM_CALLLIFT_ACTION_DIRECT_UNLOCK_CALL(3,"单元门开锁,同时呼叫电梯到单元门处");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_CALLLIFT_ACTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_CALLLIFT_ACTION enumType : EM_CALLLIFT_ACTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_CALLLIFT_ACTION enumType : EM_CALLLIFT_ACTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_CALLLIFT_ACTION getEnum(int value) {
+ for (EM_CALLLIFT_ACTION e : EM_CALLLIFT_ACTION.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_CALLLIFT_ACTION.EM_CALLLIFT_ACTION_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CALLLIFT_CMD.java b/src/main/java/com/netsdk/lib/enumeration/EM_CALLLIFT_CMD.java
new file mode 100644
index 0000000..b19ad16
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CALLLIFT_CMD.java
@@ -0,0 +1,78 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 呼叫电梯命令
+* @date 2022/10/19 14:01:07
+*/
+public enum EM_CALLLIFT_CMD {
+/**
+未知
+*/
+EM_CALLLIFT_CMD_UNKNOWN(-1,"未知"),
+/**
+呼叫电梯到某个楼层,并开放其它任何楼层数
+*/
+EM_CALLLIFT_CMD_ANY_FLOOR(0,"呼叫电梯到某个楼层,并开放其它任何楼层数"),
+/**
+呼叫电梯到某个楼层,用户进去后只能按目标楼层
+*/
+EM_CALLLIFT_CMD_DEST_FLOOR(1,"呼叫电梯到某个楼层,用户进去后只能按目标楼层"),
+/**
+呼叫电梯到某个楼层后,还需要刷卡,电梯才能运行, 默认电梯上行
+*/
+EM_CALLLIFT_CMD_CARD_UP(2,"呼叫电梯到某个楼层后,还需要刷卡,电梯才能运行, 默认电梯上行"),
+/**
+呼叫电梯到某个楼层,用户进去不用按钮,电梯会自动运行到目标楼层
+*/
+EM_CALLLIFT_CMD_AUTO_FLOOR(3,"呼叫电梯到某个楼层,用户进去不用按钮,电梯会自动运行到目标楼层"),
+/**
+呼叫电梯到某个楼层后,还需要刷卡,电梯才能运行, 默认电梯下行
+*/
+EM_CALLLIFT_CMD_CARD_DOWN(4,"呼叫电梯到某个楼层后,还需要刷卡,电梯才能运行, 默认电梯下行");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_CALLLIFT_CMD(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_CALLLIFT_CMD enumType : EM_CALLLIFT_CMD.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_CALLLIFT_CMD enumType : EM_CALLLIFT_CMD.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_CALLLIFT_CMD getEnum(int value) {
+ for (EM_CALLLIFT_CMD e : EM_CALLLIFT_CMD.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_CALLLIFT_CMD.EM_CALLLIFT_CMD_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CALL_ACTION_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CALL_ACTION_TYPE.java
new file mode 100644
index 0000000..6daf607
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CALL_ACTION_TYPE.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 打电话的动作类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_CALL_ACTION_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_CALL_ACTION_TYPE_UNKNOWN = 0;
+ /**
+ * 贴耳
+ */
+ public static final int EM_CALL_ACTION_TYPE_CALL_BY_EAR = 1;
+ /**
+ * 手持
+ */
+ public static final int EM_CALL_ACTION_TYPE_CALL_HAND_HOLD = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CAMERA_CONNECT_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CAMERA_CONNECT_STATE.java
new file mode 100644
index 0000000..d49a8f5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CAMERA_CONNECT_STATE.java
@@ -0,0 +1,51 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @version 1.0
+ * @description 相机连接状态
+ * @date 2020/11/09
+ */
+public enum EM_CAMERA_CONNECT_STATE {
+ // 未知
+ EM_CAMERA_CONNECT_STATE_UNKNOWN(-1, "未知"),
+ // 北向南
+ EM_CAMERA_CONNECT_STATE_UNCONNECT(0, "未连接"),
+ // 东北向西南
+ EM_CAMERA_CONNECT_STATE_CONNECTED(1, "已连接");
+
+ private int value;
+ private String note;
+
+ private EM_CAMERA_CONNECT_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CAMERA_CONNECT_STATE enumType : EM_CAMERA_CONNECT_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CAMERA_CONNECT_STATE enumType : EM_CAMERA_CONNECT_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CAMERA_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_CAMERA_STATUS.java
new file mode 100644
index 0000000..0428181
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CAMERA_STATUS.java
@@ -0,0 +1,59 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 相机状态
+ * @date 2021/08/25
+ */
+public enum EM_CAMERA_STATUS {
+ // 未知
+ EM_CAMERA_UNKNOWN(0, "未知"),
+ // 红灯
+ EM_CAMERA_RED(1, "红灯"),
+ // 黄灯
+ EM_CAMERA_YELLOW(2, "黄灯"),
+ // 绿灯
+ EM_CAMERA_GREEN(3, "绿灯"),
+ // 红闪
+ EM_CAMERA_RED_FLASH(4, "红闪"),
+ // 黄闪
+ EM_CAMERA_YELLOW_FLASH(5, "黄闪"),
+ // 绿闪
+ EM_CAMERA_GREEN_FLASH(6, "绿闪"),
+ // 灭灯
+ EM_CAMERA_LIGHT_OFF(7, "灭灯");
+
+ private int value;
+ private String note;
+
+ private EM_CAMERA_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CAMERA_STATUS enumType : EM_CAMERA_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CAMERA_STATUS enumType : EM_CAMERA_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CAN_START_STREAM.java b/src/main/java/com/netsdk/lib/enumeration/EM_CAN_START_STREAM.java
new file mode 100644
index 0000000..a0a7a66
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CAN_START_STREAM.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 拉流使能
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/17 15:53
+ */
+public enum EM_CAN_START_STREAM {
+
+ /**
+ * 未知
+ */
+ EM_CAN_START_STREAM_UNKNOWN(-1, "未知"),
+
+ /**
+ * 不拉流
+ */
+ EM_CAN_START_STREAM_OFF(0, "不拉流"),
+
+ /**
+ * 拉流
+ */
+ EM_CAN_START_STREAM_ON(1, "拉流");
+
+ private int value;
+ private String note;
+
+ EM_CAN_START_STREAM(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CAN_START_STREAM enumType : EM_CAN_START_STREAM.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CAN_START_STREAM enumType : EM_CAN_START_STREAM.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_CAN_START_STREAM getEnum(int value) {
+ for (EM_CAN_START_STREAM e : EM_CAN_START_STREAM.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_CAN_START_STREAM.EM_CAN_START_STREAM_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CAPTURE_PROCESS_END_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CAPTURE_PROCESS_END_TYPE.java
new file mode 100644
index 0000000..c9efeab
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CAPTURE_PROCESS_END_TYPE.java
@@ -0,0 +1,52 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_CAPTURE_PROCESS_END_TYPE {
+
+ /**
+ * 未知
+ */
+ EM_CAPTURE_PROCESS_END_TYPE_UNKNOWN(-1,"未知"),
+ /**
+ * 异常
+ */
+ EM_CAPTURE_PROCESS_END_TYPE_ABNORMAL(0,"异常"),
+ /**
+ * 正常
+ */
+ EM_CAPTURE_PROCESS_END_TYPE_NORMAL(1,"正常");
+
+ private int value;
+ private String note;
+
+ private EM_CAPTURE_PROCESS_END_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CAPTURE_PROCESS_END_TYPE enumType : EM_CAPTURE_PROCESS_END_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CAPTURE_PROCESS_END_TYPE enumType : EM_CAPTURE_PROCESS_END_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote()) ) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CAP_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CAP_TYPE.java
new file mode 100644
index 0000000..932c5f0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CAP_TYPE.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 帽子类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_CAP_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_CAP_UNKNOWN = 0;
+ /**
+ * 普通帽子
+ */
+ public static final int EM_CAP_ORDINARY = 1;
+ /**
+ * 头盔
+ */
+ public static final int EM_CAP_HELMET = 2;
+ /**
+ * 安全帽
+ */
+ public static final int EM_CAP_SAFE = 3;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CARD_PROVINCE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CARD_PROVINCE.java
new file mode 100644
index 0000000..32ea59f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CARD_PROVINCE.java
@@ -0,0 +1,154 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 卡号省份
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_CARD_PROVINCE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 解析出错,未知省份
+ */
+ public static final int EM_CARD_UNKNOWN = 10;
+ /**
+ * 北京
+ */
+ public static final int EM_CARD_BEIJING = 11;
+ /**
+ * 天津
+ */
+ public static final int EM_CARD_TIANJIN = 12;
+ /**
+ * 河北
+ */
+ public static final int EM_CARD_HEBEI = 13;
+ /**
+ * 山西
+ */
+ public static final int EM_CARD_SHANXI_TAIYUAN = 14;
+ /**
+ * 内蒙古
+ */
+ public static final int EM_CARD_NEIMENGGU = 15;
+ /**
+ * 辽宁
+ */
+ public static final int EM_CARD_LIAONING = 21;
+ /**
+ * 吉林
+ */
+ public static final int EM_CARD_JILIN = 22;
+ /**
+ * 黑龙江
+ */
+ public static final int EM_CARD_HEILONGJIANG = 23;
+ /**
+ * 上海
+ */
+ public static final int EM_CARD_SHANGHAI = 31;
+ /**
+ * 江苏
+ */
+ public static final int EM_CARD_JIANGSU = 32;
+ /**
+ * 浙江
+ */
+ public static final int EM_CARD_ZHEJIANG = 33;
+ /**
+ * 安徽
+ */
+ public static final int EM_CARD_ANHUI = 34;
+ /**
+ * 福建
+ */
+ public static final int EM_CARD_FUJIAN = 35;
+ /**
+ * 江西
+ */
+ public static final int EM_CARD_JIANGXI = 36;
+ /**
+ * 山东
+ */
+ public static final int EM_CARD_SHANDONG = 37;
+ /**
+ * 河南
+ */
+ public static final int EM_CARD_HENAN = 41;
+ /**
+ * 湖北
+ */
+ public static final int EM_CARD_HUBEI = 42;
+ /**
+ * 湖南
+ */
+ public static final int EM_CARD_HUNAN = 43;
+ /**
+ * 广东
+ */
+ public static final int EM_CARD_GUANGDONG = 44;
+ /**
+ * 广西
+ */
+ public static final int EM_CARD_GUANGXI = 45;
+ /**
+ * 海南
+ */
+ public static final int EM_CARD_HAINAN = 46;
+ /**
+ * 重庆
+ */
+ public static final int EM_CARD_CHONGQING = 50;
+ /**
+ * 四川
+ */
+ public static final int EM_CARD_SICHUAN = 51;
+ /**
+ * 贵州
+ */
+ public static final int EM_CARD_GUIZHOU = 52;
+ /**
+ * 云南
+ */
+ public static final int EM_CARD_YUNNAN = 53;
+ /**
+ * 西藏
+ */
+ public static final int EM_CARD_XIZANG = 54;
+ /**
+ * 陕西
+ */
+ public static final int EM_CARD_SHANXI_XIAN = 61;
+ /**
+ * 甘肃
+ */
+ public static final int EM_CARD_GANSU = 62;
+ /**
+ * 青海
+ */
+ public static final int EM_CARD_QINGHAI = 63;
+ /**
+ * 宁夏
+ */
+ public static final int EM_CARD_NINGXIA = 64;
+ /**
+ * 新疆
+ */
+ public static final int EM_CARD_XINJIANG = 65;
+ /**
+ * 香港
+ */
+ public static final int EM_CARD_XIANGGANG = 71;
+ /**
+ * 澳门
+ */
+ public static final int EM_CARD_AOMEN = 82;
+ /**
+ * 台湾
+ */
+ public static final int EM_CARD_TAIWAN = 83;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CAR_COLOR_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CAR_COLOR_TYPE.java
new file mode 100644
index 0000000..8c8d731
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CAR_COLOR_TYPE.java
@@ -0,0 +1,166 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 车身颜色
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_CAR_COLOR_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 白色
+ */
+ public static final int EM_CAR_COLOR_WHITE = 0;
+ /**
+ * 黑色
+ */
+ public static final int EM_CAR_COLOR_BLACK = 1;
+ /**
+ * 红色
+ */
+ public static final int EM_CAR_COLOR_RED = 2;
+ /**
+ * 黄色
+ */
+ public static final int EM_CAR_COLOR_YELLOW = 3;
+ /**
+ * 灰色
+ */
+ public static final int EM_CAR_COLOR_GRAY = 4;
+ /**
+ * 蓝色
+ */
+ public static final int EM_CAR_COLOR_BLUE = 5;
+ /**
+ * 绿色
+ */
+ public static final int EM_CAR_COLOR_GREEN = 6;
+ /**
+ * 粉色
+ */
+ public static final int EM_CAR_COLOR_PINK = 7;
+ /**
+ * 紫色
+ */
+ public static final int EM_CAR_COLOR_PURPLE = 8;
+ /**
+ * 暗紫色
+ */
+ public static final int EM_CAR_COLOR_DARK_PURPLE = 9;
+ /**
+ * 棕色
+ */
+ public static final int EM_CAR_COLOR_BROWN = 10;
+ /**
+ * 粟色
+ */
+ public static final int EM_CAR_COLOR_MAROON = 11;
+ /**
+ * 银灰色
+ */
+ public static final int EM_CAR_COLOR_SILVER_GRAY = 12;
+ /**
+ * 暗灰色
+ */
+ public static final int EM_CAR_COLOR_DARK_GRAY = 13;
+ /**
+ * 白烟色
+ */
+ public static final int EM_CAR_COLOR_WHITE_SMOKE = 14;
+ /**
+ * 深橙色
+ */
+ public static final int EM_CAR_COLOR_DEEP_ORANGE = 15;
+ /**
+ * 浅玫瑰色
+ */
+ public static final int EM_CAR_COLOR_LIGHT_ROSE = 16;
+ /**
+ * 番茄红色
+ */
+ public static final int EM_CAR_COLOR_TOMATO_RED = 17;
+ /**
+ * 橄榄色
+ */
+ public static final int EM_CAR_COLOR_OLIVE = 18;
+ /**
+ * 金色
+ */
+ public static final int EM_CAR_COLOR_GOLDEN = 19;
+ /**
+ * 暗橄榄色
+ */
+ public static final int EM_CAR_COLOR_DARK_OLIVE = 20;
+ /**
+ * 黄绿色
+ */
+ public static final int EM_CAR_COLOR_YELLOW_GREEN = 21;
+ /**
+ * 绿黄色
+ */
+ public static final int EM_CAR_COLOR_GREEN_YELLOW = 22;
+ /**
+ * 森林绿
+ */
+ public static final int EM_CAR_COLOR_FOREST_GREEN = 23;
+ /**
+ * 海洋绿
+ */
+ public static final int EM_CAR_COLOR_OCEAN_BLUE = 24;
+ /**
+ * 深天蓝
+ */
+ public static final int EM_CAR_COLOR_DEEP_SKYBLUE = 25;
+ /**
+ * 青色
+ */
+ public static final int EM_CAR_COLOR_CYAN = 26;
+ /**
+ * 深蓝色
+ */
+ public static final int EM_CAR_COLOR_DEEP_BLUE = 27;
+ /**
+ * 深红色
+ */
+ public static final int EM_CAR_COLOR_DEEP_RED = 28;
+ /**
+ * 深绿色
+ */
+ public static final int EM_CAR_COLOR_DEEP_GREEN = 29;
+ /**
+ * 深黄色
+ */
+ public static final int EM_CAR_COLOR_DEEP_YELLOW = 30;
+ /**
+ * 深粉色
+ */
+ public static final int EM_CAR_COLOR_DEEP_PINK = 31;
+ /**
+ * 深紫色
+ */
+ public static final int EM_CAR_COLOR_DEEP_PURPLE = 32;
+ /**
+ * 深棕色
+ */
+ public static final int EM_CAR_COLOR_DEEP_BROWN = 33;
+ /**
+ * 深青色
+ */
+ public static final int EM_CAR_COLOR_DEEP_CYAN = 34;
+ /**
+ * 橙色
+ */
+ public static final int EM_CAR_COLOR_ORANGE = 35;
+ /**
+ * 深金色
+ */
+ public static final int EM_CAR_COLOR_DEEP_GOLDEN = 36;
+ /**
+ * 未识别、其他
+ */
+ public static final int EM_CAR_COLOR_OTHER = 255;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CAR_DRIVING_DIRECTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_CAR_DRIVING_DIRECTION.java
new file mode 100644
index 0000000..d348846
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CAR_DRIVING_DIRECTION.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 规则区内车辆行驶方向
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_CAR_DRIVING_DIRECTION extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_CAR_DRIVING_DIRECTION_UNKNOWN = 0;
+ /**
+ * 驶入区域
+ */
+ public static final int EM_CAR_DRIVING_DIRECTION_DRIVE_IN_AREA = 1;
+ /**
+ * 驶出区域
+ */
+ public static final int EM_CAR_DRIVING_DIRECTION_EXIT_AREA = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CAR_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CAR_TYPE.java
new file mode 100644
index 0000000..aca92d3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CAR_TYPE.java
@@ -0,0 +1,938 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 车辆类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_CAR_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 其他车辆
+ */
+ public static final int EM_CAR_0 = 0;
+ /**
+ * 大型普通客车
+ */
+ public static final int EM_CAR_1 = 1;
+ /**
+ * 大型双层客车
+ */
+ public static final int EM_CAR_2 = 2;
+ /**
+ * 大型卧铺客车
+ */
+ public static final int EM_CAR_3 = 3;
+ /**
+ * 大型铰接客车
+ */
+ public static final int EM_CAR_4 = 4;
+ /**
+ * 大型越野客车
+ */
+ public static final int EM_CAR_5 = 5;
+ /**
+ * 大型轿车
+ */
+ public static final int EM_CAR_6 = 6;
+ /**
+ * 大型专用客车
+ */
+ public static final int EM_CAR_7 = 7;
+ /**
+ * 大型专用校车
+ */
+ public static final int EM_CAR_8 = 8;
+ /**
+ * 中型普通客车
+ */
+ public static final int EM_CAR_9 = 9;
+ /**
+ * 中型双层客车
+ */
+ public static final int EM_CAR_10 = 10;
+ /**
+ * 中型卧铺客车
+ */
+ public static final int EM_CAR_11 = 11;
+ /**
+ * 中型铰接客车
+ */
+ public static final int EM_CAR_12 = 12;
+ /**
+ * 中型越野客车
+ */
+ public static final int EM_CAR_13 = 13;
+ /**
+ * 中型轿车
+ */
+ public static final int EM_CAR_14 = 14;
+ /**
+ * 中型专用客车
+ */
+ public static final int EM_CAR_15 = 15;
+ /**
+ * 中型专用校车
+ */
+ public static final int EM_CAR_16 = 16;
+ /**
+ * 小型普通客车
+ */
+ public static final int EM_CAR_17 = 17;
+ /**
+ * 小型越野客车
+ */
+ public static final int EM_CAR_18 = 18;
+ /**
+ * 小型轿车
+ */
+ public static final int EM_CAR_19 = 19;
+ /**
+ * 小型专用客车
+ */
+ public static final int EM_CAR_20 = 20;
+ /**
+ * 小型专用校车
+ */
+ public static final int EM_CAR_21 = 21;
+ /**
+ * 小型面包车
+ */
+ public static final int EM_CAR_22 = 22;
+ /**
+ * 微型普通客车
+ */
+ public static final int EM_CAR_23 = 23;
+ /**
+ * 微型越野客车
+ */
+ public static final int EM_CAR_24 = 24;
+ /**
+ * 微型轿车
+ */
+ public static final int EM_CAR_25 = 25;
+ /**
+ * 微型面包车
+ */
+ public static final int EM_CAR_26 = 26;
+ /**
+ * 重型半挂牵引车
+ */
+ public static final int EM_CAR_27 = 27;
+ /**
+ * 重型全挂牵引车
+ */
+ public static final int EM_CAR_28 = 28;
+ /**
+ * 中型半挂牵引车
+ */
+ public static final int EM_CAR_29 = 29;
+ /**
+ * 中型全挂牵引车
+ */
+ public static final int EM_CAR_30 = 30;
+ /**
+ * 轻型半挂牵引车
+ */
+ public static final int EM_CAR_31 = 31;
+ /**
+ * 轻型全挂牵引车
+ */
+ public static final int EM_CAR_32 = 32;
+ /**
+ * 大型非载货专项作业车
+ */
+ public static final int EM_CAR_33 = 33;
+ /**
+ * 大型载货专项作业车
+ */
+ public static final int EM_CAR_34 = 34;
+ /**
+ * 中型非载货专项作业车
+ */
+ public static final int EM_CAR_35 = 35;
+ /**
+ * 中型载货专项作业车
+ */
+ public static final int EM_CAR_36 = 36;
+ /**
+ * 小型非载货专项作业车
+ */
+ public static final int EM_CAR_37 = 37;
+ /**
+ * 小型载货专项作业车
+ */
+ public static final int EM_CAR_38 = 38;
+ /**
+ * 微型非载货专项作业车
+ */
+ public static final int EM_CAR_39 = 39;
+ /**
+ * 微型载货专项作业车
+ */
+ public static final int EM_CAR_40 = 40;
+ /**
+ * 重型非载货专项作业车
+ */
+ public static final int EM_CAR_41 = 41;
+ /**
+ * 重型载货专项作业车
+ */
+ public static final int EM_CAR_42 = 42;
+ /**
+ * 轻型非载货专项作业车
+ */
+ public static final int EM_CAR_43 = 43;
+ /**
+ * 轻型载货专项作业车
+ */
+ public static final int EM_CAR_44 = 44;
+ /**
+ * 普通正三轮摩托车
+ */
+ public static final int EM_CAR_45 = 45;
+ /**
+ * 轻便正三轮摩托车
+ */
+ public static final int EM_CAR_46 = 46;
+ /**
+ * 正三轮载客摩托车
+ */
+ public static final int EM_CAR_47 = 47;
+ /**
+ * 正三轮载货摩托车
+ */
+ public static final int EM_CAR_48 = 48;
+ /**
+ * 侧三轮摩托车
+ */
+ public static final int EM_CAR_49 = 49;
+ /**
+ * 普通二轮摩托车
+ */
+ public static final int EM_CAR_50 = 50;
+ /**
+ * 轻便二轮摩托车
+ */
+ public static final int EM_CAR_51 = 51;
+ /**
+ * 无轨电车
+ */
+ public static final int EM_CAR_52 = 52;
+ /**
+ * 有轨电车
+ */
+ public static final int EM_CAR_53 = 53;
+ /**
+ * 三轮汽车
+ */
+ public static final int EM_CAR_54 = 54;
+ /**
+ * 轮式装载机械
+ */
+ public static final int EM_CAR_55 = 55;
+ /**
+ * 轮式挖掘机械
+ */
+ public static final int EM_CAR_56 = 56;
+ /**
+ * 轮式平地机械
+ */
+ public static final int EM_CAR_57 = 57;
+ /**
+ * 重型普通货车
+ */
+ public static final int EM_CAR_58 = 58;
+ /**
+ * 重型厢式货车
+ */
+ public static final int EM_CAR_59 = 59;
+ /**
+ * 重型封闭货车
+ */
+ public static final int EM_CAR_60 = 60;
+ /**
+ * 重型罐式货车
+ */
+ public static final int EM_CAR_61 = 61;
+ /**
+ * 重型平板货车
+ */
+ public static final int EM_CAR_62 = 62;
+ /**
+ * 重型集装箱车
+ */
+ public static final int EM_CAR_63 = 63;
+ /**
+ * 重型自卸货车
+ */
+ public static final int EM_CAR_64 = 64;
+ /**
+ * 重型特殊结构货车
+ */
+ public static final int EM_CAR_65 = 65;
+ /**
+ * 重型仓栅式货车
+ */
+ public static final int EM_CAR_66 = 66;
+ /**
+ * 重型车辆运输车
+ */
+ public static final int EM_CAR_67 = 67;
+ /**
+ * 重型厢式自卸货车
+ */
+ public static final int EM_CAR_68 = 68;
+ /**
+ * 重型罐式自卸货车
+ */
+ public static final int EM_CAR_69 = 69;
+ /**
+ * 重型平板自卸货车
+ */
+ public static final int EM_CAR_70 = 70;
+ /**
+ * 重型集装箱自卸货车
+ */
+ public static final int EM_CAR_71 = 71;
+ /**
+ * 重型特殊结构自卸货车
+ */
+ public static final int EM_CAR_72 = 72;
+ /**
+ * 重型仓栅式自卸货车
+ */
+ public static final int EM_CAR_73 = 73;
+ /**
+ * 中型普通货车
+ */
+ public static final int EM_CAR_74 = 74;
+ /**
+ * 中型厢式货车
+ */
+ public static final int EM_CAR_75 = 75;
+ /**
+ * 中型封闭货车
+ */
+ public static final int EM_CAR_76 = 76;
+ /**
+ * 中型罐式货车
+ */
+ public static final int EM_CAR_77 = 77;
+ /**
+ * 中型平板货车
+ */
+ public static final int EM_CAR_78 = 78;
+ /**
+ * 中型集装箱车
+ */
+ public static final int EM_CAR_79 = 79;
+ /**
+ * 中型自卸货车
+ */
+ public static final int EM_CAR_80 = 80;
+ /**
+ * 中型特殊结构货车
+ */
+ public static final int EM_CAR_81 = 81;
+ /**
+ * 中型仓栅式货车
+ */
+ public static final int EM_CAR_82 = 82;
+ /**
+ * 中型车辆运输车
+ */
+ public static final int EM_CAR_83 = 83;
+ /**
+ * 中型厢式自卸货车
+ */
+ public static final int EM_CAR_84 = 84;
+ /**
+ * 中型罐式自卸货车
+ */
+ public static final int EM_CAR_85 = 85;
+ /**
+ * 中型平板自卸货车
+ */
+ public static final int EM_CAR_86 = 86;
+ /**
+ * 中型集装箱自卸货车
+ */
+ public static final int EM_CAR_87 = 87;
+ /**
+ * 中型特殊结构自卸货车
+ */
+ public static final int EM_CAR_88 = 88;
+ /**
+ * 中型仓栅式自卸货车
+ */
+ public static final int EM_CAR_89 = 89;
+ /**
+ * 轻型普通货车
+ */
+ public static final int EM_CAR_90 = 90;
+ /**
+ * 轻型厢式货车
+ */
+ public static final int EM_CAR_91 = 91;
+ /**
+ * 轻型封闭货车
+ */
+ public static final int EM_CAR_92 = 92;
+ /**
+ * 轻型罐式货车
+ */
+ public static final int EM_CAR_93 = 93;
+ /**
+ * 轻型平板货车
+ */
+ public static final int EM_CAR_94 = 94;
+ /**
+ * 轻型自卸货车
+ */
+ public static final int EM_CAR_95 = 95;
+ /**
+ * 轻型特殊结构货车
+ */
+ public static final int EM_CAR_96 = 96;
+ /**
+ * 轻型仓栅式货车
+ */
+ public static final int EM_CAR_97 = 97;
+ /**
+ * 轻型车辆运输车
+ */
+ public static final int EM_CAR_98 = 98;
+ /**
+ * 轻型厢式自卸货车
+ */
+ public static final int EM_CAR_99 = 99;
+ /**
+ * 轻型罐式自卸货车
+ */
+ public static final int EM_CAR_100 = 100;
+ /**
+ * 轻型平板自卸货车
+ */
+ public static final int EM_CAR_101 = 101;
+ /**
+ * 轻型特殊结构自卸货车
+ */
+ public static final int EM_CAR_102 = 102;
+ /**
+ * 轻型仓栅式自卸货车
+ */
+ public static final int EM_CAR_103 = 103;
+ /**
+ * 微型普通货车
+ */
+ public static final int EM_CAR_104 = 104;
+ /**
+ * 微型厢式货车
+ */
+ public static final int EM_CAR_105 = 105;
+ /**
+ * 微型封闭货车
+ */
+ public static final int EM_CAR_106 = 106;
+ /**
+ * 微型罐式货车
+ */
+ public static final int EM_CAR_107 = 107;
+ /**
+ * 微型自卸货车
+ */
+ public static final int EM_CAR_108 = 108;
+ /**
+ * 微型特殊结构货车
+ */
+ public static final int EM_CAR_109 = 109;
+ /**
+ * 微型仓栅式货车
+ */
+ public static final int EM_CAR_110 = 110;
+ /**
+ * 微型车辆运输车
+ */
+ public static final int EM_CAR_111 = 111;
+ /**
+ * 微型厢式自卸货车
+ */
+ public static final int EM_CAR_112 = 112;
+ /**
+ * 微型罐式自卸货车
+ */
+ public static final int EM_CAR_113 = 113;
+ /**
+ * 微型特殊结构自卸货车
+ */
+ public static final int EM_CAR_114 = 114;
+ /**
+ * 微型仓栅式自卸货车
+ */
+ public static final int EM_CAR_115 = 115;
+ /**
+ * 普通低速货车
+ */
+ public static final int EM_CAR_116 = 116;
+ /**
+ * 厢式低速货车
+ */
+ public static final int EM_CAR_117 = 117;
+ /**
+ * 罐式低速货车
+ */
+ public static final int EM_CAR_118 = 118;
+ /**
+ * 自卸低速货车
+ */
+ public static final int EM_CAR_119 = 119;
+ /**
+ * 仓栅式低速货车
+ */
+ public static final int EM_CAR_120 = 120;
+ /**
+ * 厢式自卸低速货车
+ */
+ public static final int EM_CAR_121 = 121;
+ /**
+ * 罐式自卸低速货车
+ */
+ public static final int EM_CAR_122 = 122;
+ /**
+ * 重型普通全挂车
+ */
+ public static final int EM_CAR_123 = 123;
+ /**
+ * 重型厢式全挂车
+ */
+ public static final int EM_CAR_124 = 124;
+ /**
+ * 重型罐式全挂车
+ */
+ public static final int EM_CAR_125 = 125;
+ /**
+ * 重型平板全挂车
+ */
+ public static final int EM_CAR_126 = 126;
+ /**
+ * 重型集装箱全挂车
+ */
+ public static final int EM_CAR_127 = 127;
+ /**
+ * 重型自卸全挂车
+ */
+ public static final int EM_CAR_128 = 128;
+ /**
+ * 重型仓栅式全挂车
+ */
+ public static final int EM_CAR_129 = 129;
+ /**
+ * 重型旅居全挂车
+ */
+ public static final int EM_CAR_130 = 130;
+ /**
+ * 重型专项作业全挂车
+ */
+ public static final int EM_CAR_131 = 131;
+ /**
+ * 重型厢式自卸全挂车
+ */
+ public static final int EM_CAR_132 = 132;
+ /**
+ * 重型罐式自卸全挂车
+ */
+ public static final int EM_CAR_133 = 133;
+ /**
+ * 重型平板自卸全挂车
+ */
+ public static final int EM_CAR_134 = 134;
+ /**
+ * 重型集装箱自卸全挂车
+ */
+ public static final int EM_CAR_135 = 135;
+ /**
+ * 重型仓栅式自卸全挂车
+ */
+ public static final int EM_CAR_136 = 136;
+ /**
+ * 重型专项作业自卸全挂车
+ */
+ public static final int EM_CAR_137 = 137;
+ /**
+ * 中型普通全挂车
+ */
+ public static final int EM_CAR_138 = 138;
+ /**
+ * 中型厢式全挂车
+ */
+ public static final int EM_CAR_139 = 139;
+ /**
+ * 中型罐式全挂车
+ */
+ public static final int EM_CAR_140 = 140;
+ /**
+ * 中型平板全挂车
+ */
+ public static final int EM_CAR_141 = 141;
+ /**
+ * 中型集装箱全挂车
+ */
+ public static final int EM_CAR_142 = 142;
+ /**
+ * 中型自卸全挂车
+ */
+ public static final int EM_CAR_143 = 143;
+ /**
+ * 中型仓栅式全挂车
+ */
+ public static final int EM_CAR_144 = 144;
+ /**
+ * 中型旅居全挂车
+ */
+ public static final int EM_CAR_145 = 145;
+ /**
+ * 中型专项作业全挂车
+ */
+ public static final int EM_CAR_146 = 146;
+ /**
+ * 中型厢式自卸全挂车
+ */
+ public static final int EM_CAR_147 = 147;
+ /**
+ * 中型罐式自卸全挂车
+ */
+ public static final int EM_CAR_148 = 148;
+ /**
+ * 中型平板自卸全挂车
+ */
+ public static final int EM_CAR_149 = 149;
+ /**
+ * 中型集装箱自卸全挂车
+ */
+ public static final int EM_CAR_150 = 150;
+ /**
+ * 中型仓栅式自卸全挂车
+ */
+ public static final int EM_CAR_151 = 151;
+ /**
+ * 中型专项作业自卸全挂车
+ */
+ public static final int EM_CAR_152 = 152;
+ /**
+ * 轻型普通全挂车
+ */
+ public static final int EM_CAR_153 = 153;
+ /**
+ * 轻型厢式全挂车
+ */
+ public static final int EM_CAR_154 = 154;
+ /**
+ * 轻型罐式全挂车
+ */
+ public static final int EM_CAR_155 = 155;
+ /**
+ * 轻型平板全挂车
+ */
+ public static final int EM_CAR_156 = 156;
+ /**
+ * 轻型自卸全挂车
+ */
+ public static final int EM_CAR_157 = 157;
+ /**
+ * 轻型仓栅式全挂车
+ */
+ public static final int EM_CAR_158 = 158;
+ /**
+ * 轻型旅居全挂车
+ */
+ public static final int EM_CAR_159 = 159;
+ /**
+ * 轻型专项作业全挂车
+ */
+ public static final int EM_CAR_160 = 160;
+ /**
+ * 轻型厢式自卸全挂车
+ */
+ public static final int EM_CAR_161 = 161;
+ /**
+ * 轻型罐式自卸全挂车
+ */
+ public static final int EM_CAR_162 = 162;
+ /**
+ * 轻型平板自卸全挂车
+ */
+ public static final int EM_CAR_163 = 163;
+ /**
+ * 轻型集装箱自卸全挂车
+ */
+ public static final int EM_CAR_164 = 164;
+ /**
+ * 轻型仓栅式自卸全挂车
+ */
+ public static final int EM_CAR_165 = 165;
+ /**
+ * 轻型专项作业自卸全挂车
+ */
+ public static final int EM_CAR_166 = 166;
+ /**
+ * 重型普通半挂车
+ */
+ public static final int EM_CAR_167 = 167;
+ /**
+ * 重型厢式半挂车
+ */
+ public static final int EM_CAR_168 = 168;
+ /**
+ * 重型罐式半挂车
+ */
+ public static final int EM_CAR_169 = 169;
+ /**
+ * 重型平板半挂车
+ */
+ public static final int EM_CAR_170 = 170;
+ /**
+ * 重型集装箱半挂车
+ */
+ public static final int EM_CAR_171 = 171;
+ /**
+ * 重型自卸半挂车
+ */
+ public static final int EM_CAR_172 = 172;
+ /**
+ * 重型特殊结构半挂车
+ */
+ public static final int EM_CAR_173 = 173;
+ /**
+ * 重型仓栅式半挂车
+ */
+ public static final int EM_CAR_174 = 174;
+ /**
+ * 重型旅居半挂车
+ */
+ public static final int EM_CAR_175 = 175;
+ /**
+ * 重型专项作业半挂车
+ */
+ public static final int EM_CAR_176 = 176;
+ /**
+ * 重型低平板半挂车
+ */
+ public static final int EM_CAR_177 = 177;
+ /**
+ * 重型车辆运输半挂车
+ */
+ public static final int EM_CAR_178 = 178;
+ /**
+ * 重型罐式自卸半挂车
+ */
+ public static final int EM_CAR_179 = 179;
+ /**
+ * 重型平板自卸半挂车
+ */
+ public static final int EM_CAR_180 = 180;
+ /**
+ * 重型集装箱自卸半挂车
+ */
+ public static final int EM_CAR_181 = 181;
+ /**
+ * 重型特殊结构自卸半挂车
+ */
+ public static final int EM_CAR_182 = 182;
+ /**
+ * 重型仓栅式自卸半挂车
+ */
+ public static final int EM_CAR_183 = 183;
+ /**
+ * 重型专项作业自卸半挂车
+ */
+ public static final int EM_CAR_184 = 184;
+ /**
+ * 重型低平板自卸半挂车
+ */
+ public static final int EM_CAR_185 = 185;
+ /**
+ * 重型中置轴旅居挂车
+ */
+ public static final int EM_CAR_186 = 186;
+ /**
+ * 重型中置轴车辆运输车
+ */
+ public static final int EM_CAR_187 = 187;
+ /**
+ * 重型中置轴普通挂车
+ */
+ public static final int EM_CAR_188 = 188;
+ /**
+ * 中型普通半挂车
+ */
+ public static final int EM_CAR_189 = 189;
+ /**
+ * 中型厢式半挂车
+ */
+ public static final int EM_CAR_190 = 190;
+ /**
+ * 中型罐式半挂车
+ */
+ public static final int EM_CAR_191 = 191;
+ /**
+ * 中型平板半挂车
+ */
+ public static final int EM_CAR_192 = 192;
+ /**
+ * 中型集装箱半挂车
+ */
+ public static final int EM_CAR_193 = 193;
+ /**
+ * 中型自卸半挂车
+ */
+ public static final int EM_CAR_194 = 194;
+ /**
+ * 中型特殊结构半挂车
+ */
+ public static final int EM_CAR_195 = 195;
+ /**
+ * 中型仓栅式半挂车
+ */
+ public static final int EM_CAR_196 = 196;
+ /**
+ * 中型旅居半挂车
+ */
+ public static final int EM_CAR_197 = 197;
+ /**
+ * 中型专项作业半挂车
+ */
+ public static final int EM_CAR_198 = 198;
+ /**
+ * 中型低平板半挂车
+ */
+ public static final int EM_CAR_199 = 199;
+ /**
+ * 中型车辆运输半挂车
+ */
+ public static final int EM_CAR_200 = 200;
+ /**
+ * 中型罐式自卸半挂车
+ */
+ public static final int EM_CAR_201 = 201;
+ /**
+ * 中型平板自卸半挂车
+ */
+ public static final int EM_CAR_202 = 202;
+ /**
+ * 中型集装箱自卸半挂车
+ */
+ public static final int EM_CAR_203 = 203;
+ /**
+ * 中型特殊结构自卸挂车
+ */
+ public static final int EM_CAR_204 = 204;
+ /**
+ * 中型仓栅式自卸半挂车
+ */
+ public static final int EM_CAR_205 = 205;
+ /**
+ * 中型专项作业自卸半挂车
+ */
+ public static final int EM_CAR_206 = 206;
+ /**
+ * 中型低平板自卸半挂车
+ */
+ public static final int EM_CAR_207 = 207;
+ /**
+ * 中型中置轴旅居挂车
+ */
+ public static final int EM_CAR_208 = 208;
+ /**
+ * 中型中置轴车辆运输车
+ */
+ public static final int EM_CAR_209 = 209;
+ /**
+ * 中型中置轴普通挂车
+ */
+ public static final int EM_CAR_210 = 210;
+ /**
+ * 轻型普通半挂车
+ */
+ public static final int EM_CAR_211 = 211;
+ /**
+ * 轻型厢式半挂车
+ */
+ public static final int EM_CAR_212 = 212;
+ /**
+ * 轻型罐式半挂车
+ */
+ public static final int EM_CAR_213 = 213;
+ /**
+ * 轻型平板半挂车
+ */
+ public static final int EM_CAR_214 = 214;
+ /**
+ * 轻型自卸半挂车
+ */
+ public static final int EM_CAR_215 = 215;
+ /**
+ * 轻型仓栅式半挂车
+ */
+ public static final int EM_CAR_216 = 216;
+ /**
+ * 轻型旅居半挂车
+ */
+ public static final int EM_CAR_217 = 217;
+ /**
+ * 轻型专项作业半挂车
+ */
+ public static final int EM_CAR_218 = 218;
+ /**
+ * 轻型低平板半挂车
+ */
+ public static final int EM_CAR_219 = 219;
+ /**
+ * 轻型车辆运输半挂车
+ */
+ public static final int EM_CAR_220 = 220;
+ /**
+ * 轻型罐式自卸半挂车
+ */
+ public static final int EM_CAR_221 = 221;
+ /**
+ * 轻型平板自卸半挂车
+ */
+ public static final int EM_CAR_222 = 222;
+ /**
+ * 轻型集装箱自卸半挂车
+ */
+ public static final int EM_CAR_223 = 223;
+ /**
+ * 轻型特殊结构自卸挂车
+ */
+ public static final int EM_CAR_224 = 224;
+ /**
+ * 轻型仓栅式自卸半挂车
+ */
+ public static final int EM_CAR_225 = 225;
+ /**
+ * 轻型专项作业自卸半挂车
+ */
+ public static final int EM_CAR_226 = 226;
+ /**
+ * 轻型低平板自卸半挂车
+ */
+ public static final int EM_CAR_227 = 227;
+ /**
+ * 轻型中置轴旅居挂车
+ */
+ public static final int EM_CAR_228 = 228;
+ /**
+ * 轻型中置轴车辆运输车
+ */
+ public static final int EM_CAR_229 = 229;
+ /**
+ * 轻型中置轴普通挂车
+ */
+ public static final int EM_CAR_230 = 230;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CATEGORY_NONMOTOR_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CATEGORY_NONMOTOR_TYPE.java
new file mode 100644
index 0000000..c87b1e7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CATEGORY_NONMOTOR_TYPE.java
@@ -0,0 +1,82 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 非机动车子类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_CATEGORY_NONMOTOR_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_CATEGORY_NONMOTOR_TYPE_UNKNOWN = 0;
+ /**
+ * "Tricycle" 三轮车
+ */
+ public static final int EM_CATEGORY_NONMOTOR_TYPE_TRICYCLE = 1;
+ /**
+ * "Motorcycle" 摩托车
+ */
+ public static final int EM_CATEGORY_NONMOTOR_TYPE_MOTORCYCLE = 2;
+ /**
+ * "Non-Motor" 非机动车
+ */
+ public static final int EM_CATEGORY_NONMOTOR_TYPE_NON_MOTOR = 3;
+ /**
+ * "Bicycle" 自行车
+ */
+ public static final int EM_CATEGORY_NONMOTOR_TYPE_BICYCLE = 4;
+ /**
+ * "DualTriWheelMotorcycle"两、三轮摩托车
+ */
+ public static final int EM_CATEGORY_NONMOTOR_TYPE_DUALTRIWHEELMOTORCYCLE = 5;
+ /**
+ * "LightMotorcycle" 轻便摩托车
+ */
+ public static final int EM_CATEGORY_NONMOTOR_TYPE_LIGHTMOTORCYCLE = 6;
+ /**
+ * "EmbassyMotorcycle "使馆摩托车
+ */
+ public static final int EM_CATEGORY_NONMOTOR_TYPE_EMBASSYMOTORCYCLE = 7;
+ /**
+ * "MarginalMotorcycle " 领馆摩托车
+ */
+ public static final int EM_CATEGORY_NONMOTOR_TYPE_MARGINALMOTORCYCLE = 8;
+ /**
+ * "AreaoutMotorcycle " 境外摩托车
+ */
+ public static final int EM_CATEGORY_NONMOTOR_TYPE_AREAOUTMOTORCYCLE = 9;
+ /**
+ * "ForeignMotorcycle " 外籍摩托车
+ */
+ public static final int EM_CATEGORY_NONMOTOR_TYPE_FOREIGNMOTORCYCLE = 10;
+ /**
+ * "TrialMotorcycle " 试验摩托车
+ */
+ public static final int EM_CATEGORY_NONMOTOR_TYPE_TRIALMOTORCYCLE = 11;
+ /**
+ * "CoachMotorcycle " 教练摩托车
+ */
+ public static final int EM_CATEGORY_NONMOTOR_TYPE_COACHMOTORCYCLE = 12;
+ /**
+ * "Passerby" 行人
+ */
+ public static final int EM_CATEGORY_NONMOTOR_TYPE_PASSERBY = 13;
+ /**
+ * "VanTricycle" 厢式三轮车
+ */
+ public static final int EM_CATEGORY_NONMOTOR_TYPE_VANTRICYCLE = 14;
+ /**
+ * "MannedConvertibleTricycle" 载人敞篷三轮车
+ */
+ public static final int EM_CATEGORY_NONMOTOR_TYPE_MANNEDCONVERTIBLETRICYCLE = 15;
+ /**
+ * "NoMannedConvertibleTricycle" 不载人敞篷三轮车
+ */
+ public static final int EM_CATEGORY_NONMOTOR_TYPE_NOMANNEDCONVERTIBLETRICYCLE = 16;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CB_STATES.java b/src/main/java/com/netsdk/lib/enumeration/EM_CB_STATES.java
new file mode 100644
index 0000000..dbcded7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CB_STATES.java
@@ -0,0 +1,47 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_CB_STATES {
+ EM_CB_STATES_UNKNOWN(0,"Unknown"), // "Unknown"
+ EM_CB_STATES_CREATED(1,"Created"), // "Created"
+ EM_CB_STATES_READY(2,"Ready"), // "Ready"
+ EM_CB_STATES_RUNNING(3,"Running"), // "Running"
+ EM_CB_STATES_FINISHED(4,"Finished"), // "Finished"
+ EM_CB_STATES_ERROR(5,"Error"), // "Error"
+ EM_CB_STATES_ABORTED(6,"Aborted"), // "Aborted"
+ EM_CB_STATES_PAUSE(7,"Pause"); // "Pause"
+
+
+ private int value;
+ private String note;
+
+ private EM_CB_STATES(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFICSTROBE_STATUS enumType : EM_TRAFFICSTROBE_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFICSTROBE_STATUS enumType : EM_TRAFFICSTROBE_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CFG_3GFLUXTACTIC.java b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_3GFLUXTACTIC.java
new file mode 100644
index 0000000..dd574f8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_3GFLUXTACTIC.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 流量使用策略
+ * @date 2023/03/16 14:28:39
+ */
+public enum EM_CFG_3GFLUXTACTIC {
+ /**
+ * 未知类型
+ */
+ EM_3GFLUXTACTIC_UNKNOWN(-1, "未知类型"),
+ /**
+ * 按月包流量
+ */
+ EM_3GFLUXTACTIC_BYFLUX(0, "按月包流量"),
+ /**
+ * 按月包时长
+ */
+ EM_3GFLUXTACTIC_BYTIME(1, "按月包时长");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CFG_3GFLUXTACTIC(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CFG_3GFLUXTACTIC enumType : EM_CFG_3GFLUXTACTIC.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CFG_3GFLUXTACTIC enumType : EM_CFG_3GFLUXTACTIC.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CFG_APN.java b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_APN.java
new file mode 100644
index 0000000..d053a1e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_APN.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 接入的网络名称
+ * @date 2023/03/16 14:23:46
+ */
+public enum EM_CFG_APN {
+ /**
+ * 中国电信
+ */
+ EM_CFG_APN_CTNET(0, "中国电信"),
+ /**
+ * 中国移动
+ */
+ EM_CFG_APN_CMNET(1, "中国移动"),
+ /**
+ * 中国联通
+ */
+ EM_CFG_APN_UNINET(2, "中国联通");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CFG_APN(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CFG_APN enumType : EM_CFG_APN.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CFG_APN enumType : EM_CFG_APN.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CFG_AUTHMODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_AUTHMODE.java
new file mode 100644
index 0000000..dfd6bb2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_AUTHMODE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 鉴权模式
+ * @date 2023/03/16 14:23:46
+ */
+public enum EM_CFG_AUTHMODE {
+ /**
+ * 不需要鉴权
+ */
+ EM_AUTHMODE_NO(0, "不需要鉴权"),
+ /**
+ * PAP鉴权
+ */
+ EM_AUTHMODE_PAP(1, "PAP鉴权"),
+ /**
+ * CHAP鉴权
+ */
+ EM_AUTHMODE_CHAP(2, "CHAP鉴权");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CFG_AUTHMODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CFG_AUTHMODE enumType : EM_CFG_AUTHMODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CFG_AUTHMODE enumType : EM_CFG_AUTHMODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CFG_CAP_CMD.java b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_CAP_CMD.java
new file mode 100644
index 0000000..c39c08d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_CAP_CMD.java
@@ -0,0 +1,35 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 命令类型,对应QueryNewSystemInfo接口
+ */
+public enum EM_CFG_CAP_CMD {
+ /**
+ * 获取设备状态信息 (对应 CFG_CAP_TRAFFIC_DEVICE_STATUS)
+ */
+ CFG_CAP_CMD_DEVICE_STATE("trafficSnap.getDeviceStatus"),
+ /**
+ * 获取查询记录能力集, (对应结构体 CFG_CAP_RECORDFINDER_INFO)
+ */
+ CFG_CAP_CMD_RECORDFINDER("RecordFinder.getCaps"),
+ /**
+ *获取视频诊断进行状态(CFG_VIDEODIAGNOSIS_STATE_INFO)
+ */
+ CFG_CMD_VIDEODIAGNOSIS_GETSTATE("videoDiagnosisServer.getState"),
+ /**
+ * 获取云台支持信息(CFG_CAP_PTZ_ENABLEINFO)
+ */
+ CFG_CAP_CMD_PTZ_ENABLE("ptz.factory.instance");
+ /**
+ * 获取门禁能力集,对应结构体CFG_CAP_ACCESSCONTROL
+ */
+ public static final String CFG_CAP_CMD_ACCESSCONTROLMANAGER="accessControlManager.getCaps";
+ private String cmd;
+ EM_CFG_CAP_CMD(String cmd){
+ this.cmd=cmd;
+ }
+
+ public String getCmd() {
+ return cmd;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CFG_CHEF_CLOTHES_COLORS.java b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_CHEF_CLOTHES_COLORS.java
new file mode 100644
index 0000000..f37d7ab
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_CHEF_CLOTHES_COLORS.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 检测符合要求的厨师服颜色不报警
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:18
+ */
+public class EM_CFG_CHEF_CLOTHES_COLORS extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_CFG_CHEF_CLOTHES_COLORS_UNKNOWN = 0;
+ /**
+ * 黑色
+ */
+ public static final int EM_CFG_CHEF_CLOTHES_COLORS_BLACK = 1;
+ /**
+ * 白色
+ */
+ public static final int EM_CFG_CHEF_CLOTHES_COLORS_WHITE = 2;
+ /**
+ * 红色
+ */
+ public static final int EM_CFG_CHEF_CLOTHES_COLORS_RED = 3;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CFG_CROSSREGION_ALARMTYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_CROSSREGION_ALARMTYPE.java
new file mode 100644
index 0000000..a07c7fe
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_CROSSREGION_ALARMTYPE.java
@@ -0,0 +1,71 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 报警类型
+ * @since : Created in 2021/11/26 10:13
+ */
+
+public enum EM_CFG_CROSSREGION_ALARMTYPE {
+ /**
+ * 未知
+ */
+ EM_CFG_CROSSREGION_ALARMTYPE_UNKNOWN(0,"未知"),
+ /**
+ * 报警
+ */
+ EM_CFG_CROSSREGION_ALARMTYPE_ALARM(1,"报警"),
+ /**
+ * 预警
+ */
+ EM_CFG_CROSSREGION_ALARMTYPE_WARNING(2,"预警"),
+ /**
+ * 屏蔽
+ */
+ EM_CFG_CROSSREGION_ALARMTYPE_SHIELD(3,"屏蔽");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CFG_CROSSREGION_ALARMTYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CFG_CROSSREGION_ALARMTYPE enumType : EM_CFG_CROSSREGION_ALARMTYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CFG_CROSSREGION_ALARMTYPE enumType : EM_CFG_CROSSREGION_ALARMTYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_CFG_CROSSREGION_ALARMTYPE getEnum(int value) {
+ for (EM_CFG_CROSSREGION_ALARMTYPE e : EM_CFG_CROSSREGION_ALARMTYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_CFG_CROSSREGION_ALARMTYPE.EM_CFG_CROSSREGION_ALARMTYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CFG_DAY3GFLUXACTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_DAY3GFLUXACTION.java
new file mode 100644
index 0000000..a83fda6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_DAY3GFLUXACTION.java
@@ -0,0 +1,52 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 流量报警策略
+ * @date 2023/03/16 14:23:46
+ */
+public enum EM_CFG_DAY3GFLUXACTION {
+ /**
+ * 无动作
+ */
+ EM_CFG_DAY3GFLUXACTION_NOTHING(0, "无动作"),
+ /**
+ * 3G下线
+ */
+ EM_CFG_DAY3GFLUXACTION_3GNETDOWN(1, "3G下线");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CFG_DAY3GFLUXACTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CFG_DAY3GFLUXACTION enumType : EM_CFG_DAY3GFLUXACTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CFG_DAY3GFLUXACTION enumType : EM_CFG_DAY3GFLUXACTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CFG_DAY3GFLUXTACTIC.java b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_DAY3GFLUXTACTIC.java
new file mode 100644
index 0000000..5e35a32
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_DAY3GFLUXTACTIC.java
@@ -0,0 +1,52 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 每日流量控制策略
+ * @date 2023/03/16 14:23:46
+ */
+public enum EM_CFG_DAY3GFLUXTACTIC {
+ /**
+ * 按流量
+ */
+ EM_CFG_DAY3GFLUXTACTIC_BYFLUX(0, "按流量"),
+ /**
+ * 按时间
+ */
+ EM_CFG_DAY3GFLUXTACTIC_BYTIME(1, "按时间");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CFG_DAY3GFLUXTACTIC(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CFG_DAY3GFLUXTACTIC enumType : EM_CFG_DAY3GFLUXTACTIC.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CFG_DAY3GFLUXTACTIC enumType : EM_CFG_DAY3GFLUXTACTIC.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CFG_EAP_AUTH_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_EAP_AUTH_TYPE.java
new file mode 100644
index 0000000..8aa4bd2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_EAP_AUTH_TYPE.java
@@ -0,0 +1,68 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description EAP身份验证方法
+ * @date 2023/03/16 11:15:26
+ */
+public enum EM_CFG_EAP_AUTH_TYPE {
+ /**
+ * UnKnown
+ */
+ EM_CFG_EAP_AUTH_TYPE_UNKNOWN(0, "UnKnown"),
+ /**
+ * NONE
+ */
+ EM_CFG_EAP_AUTH_TYPE_NONE(1, "NONE"),
+ /**
+ * PAP
+ */
+ EM_CFG_EAP_AUTH_TYPE_PAP(2, "PAP"),
+ /**
+ * MSCHAP
+ */
+ EM_CFG_EAP_AUTH_TYPE_MSCHAP(3, "MSCHAP"),
+ /**
+ * MSCHAPV2
+ */
+ EM_CFG_EAP_AUTH_TYPE_MSCHAPV2(4, "MSCHAPV2"),
+ /**
+ * GTC
+ */
+ EM_CFG_EAP_AUTH_TYPE_GTC(5, "GTC");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CFG_EAP_AUTH_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CFG_EAP_AUTH_TYPE enumType : EM_CFG_EAP_AUTH_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CFG_EAP_AUTH_TYPE enumType : EM_CFG_EAP_AUTH_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CFG_EAP_METHOD.java b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_EAP_METHOD.java
new file mode 100644
index 0000000..adef2da
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_EAP_METHOD.java
@@ -0,0 +1,60 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description EAP方法
+ * @date 2023/03/16 11:15:26
+ */
+public enum EM_CFG_EAP_METHOD {
+ /**
+ * UnKnown
+ */
+ EM_CFG_EAP_METHOD_UNKNOWN(0, "UnKnown"),
+ /**
+ * PEAP
+ */
+ EM_CFG_EAP_METHOD_PEAP(1, "PEAP"),
+ /**
+ * TLS
+ */
+ EM_CFG_EAP_METHOD_TLS(2, "TLS"),
+ /**
+ * TTLS
+ */
+ EM_CFG_EAP_METHOD_TTLS(3, "TTLS");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CFG_EAP_METHOD(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CFG_EAP_METHOD enumType : EM_CFG_EAP_METHOD.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CFG_EAP_METHOD enumType : EM_CFG_EAP_METHOD.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CFG_NAS_CLOUDPROTOCOL_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_NAS_CLOUDPROTOCOL_TYPE.java
new file mode 100644
index 0000000..2638429
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_NAS_CLOUDPROTOCOL_TYPE.java
@@ -0,0 +1,60 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 云存储协议类型
+ * @date 2022/09/08 19:33:10
+ */
+public enum EM_CFG_NAS_CLOUDPROTOCOL_TYPE {
+ /**
+ * 未知
+ */
+ EM_CFG_NAS_CLOUDPROTOCOL_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * BaiduCloud
+ */
+ EM_CFG_NAS_CLOUDPROTOCOL_TYPE_BAIDU_CLOUD(1, " BaiduCloud "),
+ /**
+ * GoogleDrive
+ */
+ EM_CFG_NAS_CLOUDPROTOCOL_TYPE_GOOGLE_DRIVE(2, " GoogleDrive "),
+ /**
+ * Dropbox
+ */
+ EM_CFG_NAS_CLOUDPROTOCOL_TYPE_DROPBOX(3, " Dropbox ");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CFG_NAS_CLOUDPROTOCOL_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CFG_NAS_CLOUDPROTOCOL_TYPE enumType : EM_CFG_NAS_CLOUDPROTOCOL_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CFG_NAS_CLOUDPROTOCOL_TYPE enumType : EM_CFG_NAS_CLOUDPROTOCOL_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CFG_NAS_DIRECTORY_CACHE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_NAS_DIRECTORY_CACHE_TYPE.java
new file mode 100644
index 0000000..66484ee
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_NAS_DIRECTORY_CACHE_TYPE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 缓存类型枚举
+* @date 2022/09/22 17:24:07
+*/
+public enum EM_CFG_NAS_DIRECTORY_CACHE_TYPE {
+/**
+未知枚举
+*/
+EM_CFG_NAS_DIRECTORY_CACHE_TYPE_UNKNOWN(0,"未知枚举"),
+/**
+直存
+*/
+EM_CFG_NAS_DIRECTORY_CACHE_TYPE_DIRECT(1,"直存"),
+/**
+回存
+*/
+EM_CFG_NAS_DIRECTORY_CACHE_TYPE_INDIRECT(2,"回存");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_CFG_NAS_DIRECTORY_CACHE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_CFG_NAS_DIRECTORY_CACHE_TYPE enumType : EM_CFG_NAS_DIRECTORY_CACHE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_CFG_NAS_DIRECTORY_CACHE_TYPE enumType : EM_CFG_NAS_DIRECTORY_CACHE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_CFG_NAS_DIRECTORY_CACHE_TYPE getEnum(int value) {
+ for (EM_CFG_NAS_DIRECTORY_CACHE_TYPE e : EM_CFG_NAS_DIRECTORY_CACHE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_CFG_NAS_DIRECTORY_CACHE_TYPE.EM_CFG_NAS_DIRECTORY_CACHE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CFG_NAS_DIRECTORY_PROTOCAL.java b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_NAS_DIRECTORY_PROTOCAL.java
new file mode 100644
index 0000000..8205023
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_NAS_DIRECTORY_PROTOCAL.java
@@ -0,0 +1,78 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 共享类型枚举
+* @date 2022/09/22 17:24:07
+*/
+public enum EM_CFG_NAS_DIRECTORY_PROTOCAL {
+/**
+未知枚举
+*/
+EM_CFG_NAS_DIRECTORY_PROTOCAL_UNKNOWN(0,"未知枚举"),
+/**
+NFS
+*/
+EM_CFG_NAS_DIRECTORY_PROTOCAL_NFS(1,"NFS"),
+/**
+FTP
+*/
+EM_CFG_NAS_DIRECTORY_PROTOCAL_FTP(2,"FTP"),
+/**
+SAMBA
+*/
+EM_CFG_NAS_DIRECTORY_PROTOCAL_SAMBA(3,"SAMBA"),
+/**
+ISCSI
+*/
+EM_CFG_NAS_DIRECTORY_PROTOCAL_ISCSI(4,"ISCSI"),
+/**
+表示裸的LV, 没有做共享文件夹
+*/
+EM_CFG_NAS_DIRECTORY_PROTOCAL_NONE(5,"表示裸的LV, 没有做共享文件夹");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_CFG_NAS_DIRECTORY_PROTOCAL(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_CFG_NAS_DIRECTORY_PROTOCAL enumType : EM_CFG_NAS_DIRECTORY_PROTOCAL.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_CFG_NAS_DIRECTORY_PROTOCAL enumType : EM_CFG_NAS_DIRECTORY_PROTOCAL.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_CFG_NAS_DIRECTORY_PROTOCAL getEnum(int value) {
+ for (EM_CFG_NAS_DIRECTORY_PROTOCAL e : EM_CFG_NAS_DIRECTORY_PROTOCAL.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_CFG_NAS_DIRECTORY_PROTOCAL.EM_CFG_NAS_DIRECTORY_PROTOCAL_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CFG_OBJECT_FILTER_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_OBJECT_FILTER_TYPE.java
new file mode 100644
index 0000000..dfed64e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_OBJECT_FILTER_TYPE.java
@@ -0,0 +1,52 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 物体过滤类型
+ * @date 2021/07/06
+ */
+public enum EM_CFG_OBJECT_FILTER_TYPE {
+
+ // 未知
+ EM_CFG_OBJECT_FILTER_TYPE_UNKNOWN(0, "未知"),
+
+ // 人
+ EM_CFG_OBJECT_FILTER_TYPE_HUMAN(1, "人"),
+
+ // 车
+ EM_CFG_OBJECT_FILTER_TYPE_VEHICLE(2, "车");
+
+ private int value;
+ private String note;
+
+ private EM_CFG_OBJECT_FILTER_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CFG_OBJECT_FILTER_TYPE enumType : EM_CFG_OBJECT_FILTER_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CFG_OBJECT_FILTER_TYPE enumType : EM_CFG_OBJECT_FILTER_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CFG_RULE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_RULE_TYPE.java
new file mode 100644
index 0000000..1b41620
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_RULE_TYPE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 规则类型
+ * @date 2022/12/19 09:10:21
+ */
+public enum EM_CFG_RULE_TYPE {
+ /**
+ * 未知
+ */
+ EM_CFG_RULE_UNKNOWN(0, "未知"),
+ /**
+ * 人数统计
+ */
+ EM_CFG_RULE_NUMBER_STAT(1, "人数统计"),
+ /**
+ * 区域内人数统计
+ */
+ EM_CFG_RULE_MAN_NUM_DETECTION(2, "区域内人数统计");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CFG_RULE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CFG_RULE_TYPE enumType : EM_CFG_RULE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CFG_RULE_TYPE enumType : EM_CFG_RULE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CFG_WIRELESS_AUTHENTICATION.java b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_WIRELESS_AUTHENTICATION.java
new file mode 100644
index 0000000..d7afcba
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_WIRELESS_AUTHENTICATION.java
@@ -0,0 +1,97 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 无线设备认证方式
+ * @date 2023/03/16 11:15:26
+ */
+public enum EM_CFG_WIRELESS_AUTHENTICATION {
+ /**
+ * UnKnown
+ */
+ EM_CFG_WIRELESS_AUTHENTICATION_UNKNOWN(0, "UnKnown"),
+ /**
+ * OPEN
+ */
+ EM_CFG_WIRELESS_AUTHENTICATION_OPEN(1, "OPEN"),
+ /**
+ * SHARED
+ */
+ EM_CFG_WIRELESS_AUTHENTICATION_SHARED(2, "SHARED"),
+ /**
+ * WPA
+ */
+ EM_CFG_WIRELESS_AUTHENTICATION_WPA(3, "WPA"),
+ /**
+ * WPA-PSK
+ */
+ EM_CFG_WIRELESS_AUTHENTICATION_WPAPSK(4, "WPA-PSK"),
+ /**
+ * WPA2
+ */
+ EM_CFG_WIRELESS_AUTHENTICATION_WPA2(5, "WPA2"),
+ /**
+ * WPA2-PSK
+ */
+ EM_CFG_WIRELESS_AUTHENTICATION_WPA2PSK(6, "WPA2-PSK"),
+ /**
+ * WPA-NONE
+ */
+ EM_CFG_WIRELESS_AUTHENTICATION_WPANONE(7, "WPA-NONE"),
+ /**
+ * WPA-PSK|WPA2-PSK
+ */
+ EM_CFG_WIRELESS_AUTHENTICATION_WPAPSK_WPA2PSK(8, "WPA-PSK|WPA2-PSK"),
+ /**
+ * WPA|WPA2
+ */
+ EM_CFG_WIRELESS_AUTHENTICATION_WPA_WPA2(9, "WPA|WPA2"),
+ /**
+ * WPA | WPA-PSK
+ */
+ EM_CFG_WIRELESS_AUTHENTICATION_WPA_WPAPSK(10, "WPA | WPA-PSK"),
+ /**
+ * WPA2|WPA2-PSK
+ */
+ EM_CFG_WIRELESS_AUTHENTICATION_WPA2_WPA2PSK(11, "WPA2|WPA2-PSK"),
+ /**
+ * WPA|WPA-PSK|WPA2|WPA2-PSK
+ */
+ EM_CFG_WIRELESS_AUTHENTICATION_WPA_WPAPSK_WPA2_WPA2PSK(12, "WPA|WPA-PSK|WPA2|WPA2-PSK");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CFG_WIRELESS_AUTHENTICATION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CFG_WIRELESS_AUTHENTICATION enumType : EM_CFG_WIRELESS_AUTHENTICATION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CFG_WIRELESS_AUTHENTICATION enumType : EM_CFG_WIRELESS_AUTHENTICATION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CFG_WIRELESS_DATA_ENCRYPT.java b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_WIRELESS_DATA_ENCRYPT.java
new file mode 100644
index 0000000..8c412c1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_WIRELESS_DATA_ENCRYPT.java
@@ -0,0 +1,68 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 无线数据加密方式
+ * @date 2023/03/16 11:15:26
+ */
+public enum EM_CFG_WIRELESS_DATA_ENCRYPT {
+ /**
+ * UnKnown
+ */
+ EM_CFG_WIRELESS_DATA_ENCRYPT_UNKNOWN(0, "UnKnown"),
+ /**
+ * NONE
+ */
+ EM_CFG_WIRELESS_DATA_ENCRYPT_NONE(1, "NONE"),
+ /**
+ * WEP
+ */
+ EM_CFG_WIRELESS_DATA_ENCRYPT_WEP(2, "WEP"),
+ /**
+ * TKIP
+ */
+ EM_CFG_WIRELESS_DATA_ENCRYPT_TKIP(3, "TKIP"),
+ /**
+ * AES(CCMP)
+ */
+ EM_CFG_WIRELESS_DATA_ENCRYPT_AES(4, "AES(CCMP)"),
+ /**
+ * TKIP+AES
+ */
+ EM_CFG_WIRELESS_DATA_ENCRYPT_TKIP_AES(5, "TKIP+AES");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CFG_WIRELESS_DATA_ENCRYPT(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CFG_WIRELESS_DATA_ENCRYPT enumType : EM_CFG_WIRELESS_DATA_ENCRYPT.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CFG_WIRELESS_DATA_ENCRYPT enumType : EM_CFG_WIRELESS_DATA_ENCRYPT.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CFG_WORKMODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_WORKMODE.java
new file mode 100644
index 0000000..1ffd580
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CFG_WORKMODE.java
@@ -0,0 +1,84 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 工作模式选择
+ * @date 2023/03/16 14:23:46
+ */
+public enum EM_CFG_WORKMODE {
+ /**
+
+ */
+ EM_WORKMODE_UNKNOWN(-1, ""),
+ /**
+ * CDMA1x
+ */
+ EM_WORKMODE_CDMA1X(0, " CDMA1x "),
+ /**
+ * EVDO
+ */
+ EM_WORKMODE_EVDO(1, " EVDO "),
+ /**
+ * TD-SCDMA
+ */
+ EM_WORKMODE_TDSCDMA(2, " TD-SCDMA "),
+ /**
+ * WCDMA
+ */
+ EM_WORKMODE_WCDMA(3, " WCDMA "),
+ /**
+ * EDGE
+ */
+ EM_WORKMODE_EDGE(4, " EDGE "),
+ /**
+ * TDD-LTE
+ */
+ EM_WORKMODE_TDDLTE(5, " TDD-LTE "),
+ /**
+ * FDD-LTE
+ */
+ EM_WORKMODE_FDDLTE(6, " FDD-LTE "),
+ /**
+ * TD-LTE
+ */
+ EM_WORKMODE_TDLTE(7, " TD-LTE "),
+ /**
+ * Auto
+ */
+ EM_WORKMODE_AUTO(8, " Auto ");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CFG_WORKMODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CFG_WORKMODE enumType : EM_CFG_WORKMODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CFG_WORKMODE enumType : EM_CFG_WORKMODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CHANNELS_STATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CHANNELS_STATE_TYPE.java
new file mode 100644
index 0000000..870b049
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CHANNELS_STATE_TYPE.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 通道类型
+* @date 2022/10/09 11:22:21
+*/
+public enum EM_CHANNELS_STATE_TYPE {
+/**
+未知
+*/
+EM_CHANNELS_STATE_TYPE_UNKNOWN(0,"未知"),
+/**
+所有通道
+*/
+EM_CHANNELS_STATE_TYPE_ALL(1,"所有通道"),
+/**
+报警输入通道
+*/
+EM_CHANNELS_STATE_TYPE_ALARMIN(2,"报警输入通道"),
+/**
+报警输出通道
+*/
+EM_CHANNELS_STATE_TYPE_ALARMOUT(3,"报警输出通道"),
+/**
+警号通道
+*/
+EM_CHANNELS_STATE_TYPE_SIREN(4,"警号通道");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_CHANNELS_STATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_CHANNELS_STATE_TYPE enumType : EM_CHANNELS_STATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_CHANNELS_STATE_TYPE enumType : EM_CHANNELS_STATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_CHANNELS_STATE_TYPE getEnum(int value) {
+ for (EM_CHANNELS_STATE_TYPE e : EM_CHANNELS_STATE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_CHANNELS_STATE_TYPE.EM_CHANNELS_STATE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CHANNEL_WIDTH.java b/src/main/java/com/netsdk/lib/enumeration/EM_CHANNEL_WIDTH.java
new file mode 100644
index 0000000..6b00e55
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CHANNEL_WIDTH.java
@@ -0,0 +1,57 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 通道宽度
+ * @date 2021/2/7
+ */
+public enum EM_CHANNEL_WIDTH {
+ /** 未知 */
+ EM_CHANNEL_WIDTH_UNKNOWN(-1, "未知"),
+ /** 600mm */
+ EM_CHANNEL_WIDTH_600(0, "600mm"),
+ /** 700mm */
+ EM_CHANNEL_WIDTH_700(1, "700mm"),
+ /** 800mm */
+ EM_CHANNEL_WIDTH_800(2, "800mm"),
+ /** 900mm */
+ EM_CHANNEL_WIDTH_900(3, "900mm"),
+ /** 1000mm */
+ EM_CHANNEL_WIDTH_1000(4, "1000mm"),
+ /** 1100mm */
+ EM_CHANNEL_WIDTH_1100(5, "1100mm"),
+ /** 1200mm */
+ EM_CHANNEL_WIDTH_1200(6, "1200mm");
+ private int emWidth;
+ private String desc;
+
+ EM_CHANNEL_WIDTH(int emWidth, String desc) {
+ this.emWidth = emWidth;
+ this.desc = desc;
+ }
+
+ public int getEmWidth() {
+ return emWidth;
+ }
+
+ public void setEmWidth(int emWidth) {
+ this.emWidth = emWidth;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+ public static EM_CHANNEL_WIDTH getChannelWidth(int emWidth){
+ for (EM_CHANNEL_WIDTH channelWidth :EM_CHANNEL_WIDTH.values() ) {
+ if(channelWidth.emWidth==emWidth){
+ return channelWidth;
+ }
+ }
+ return EM_CHANNEL_WIDTH_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CITIZENIDCARD_SEX_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CITIZENIDCARD_SEX_TYPE.java
new file mode 100644
index 0000000..0096520
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CITIZENIDCARD_SEX_TYPE.java
@@ -0,0 +1,54 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_CITIZENIDCARD_SEX_TYPE {
+ /**
+ * 未知
+ */
+ EM_CITIZENIDCARD_SEX_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 男
+ */
+ EM_CITIZENIDCARD_SEX_TYPE_MALE(1, "男"),
+ /**
+ * 女
+ */
+ EM_CITIZENIDCARD_SEX_TYPE_FEMALE(2, "女"),
+ /**
+ * 未说明
+ */
+ EM_CITIZENIDCARD_SEX_TYPE_UNTOLD(3, "未说明");
+
+ private int value;
+ private String note;
+
+ private EM_CITIZENIDCARD_SEX_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CITIZENIDCARD_SEX_TYPE enumType : EM_CITIZENIDCARD_SEX_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CITIZENIDCARD_SEX_TYPE enumType : EM_CITIZENIDCARD_SEX_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CITYMOTOR_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_CITYMOTOR_STATUS.java
new file mode 100644
index 0000000..6d999a2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CITYMOTOR_STATUS.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 车辆状态
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:00
+ */
+public class EM_CITYMOTOR_STATUS extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_CITYMOTOR_STATUS_UNKNOWN = 0;
+ /**
+ * 驶入
+ */
+ public static final int EM_CITYMOTOR_STATUS_DRIVE_IN = 1;
+ /**
+ * 驶离
+ */
+ public static final int EM_CITYMOTOR_STATUS_DRIVE_OUT = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CLASS_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CLASS_TYPE.java
new file mode 100644
index 0000000..df690b3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CLASS_TYPE.java
@@ -0,0 +1,387 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 大类业务方案
+ * @since : Created in 2021/11/05 16:06
+ */
+
+public enum EM_CLASS_TYPE {
+ /**
+ * 未知业务
+ */
+ EM_CLASS_UNKNOWN(0,"未知业务"),
+ /**
+ * 视频浓缩
+ */
+ EM_CLASS_VIDEO_SYNOPSIS(1,"视频浓缩"),
+ /**
+ * 卡口
+ */
+ EM_CLASS_TRAFFIV_GATE(2,"卡口"),
+ /**
+ * 电警
+ */
+ EM_CLASS_ELECTRONIC_POLICE(3,"电警"),
+ /**
+ * 单球违停
+ */
+ EM_CLASS_SINGLE_PTZ_PARKING(4,"单球违停"),
+ /**
+ * 主从违停
+ */
+ EM_CLASS_PTZ_PARKINBG(5,"主从违停"),
+ /**
+ * 交通事件 Traffic
+ */
+ EM_CLASS_TRAFFIC(6,"交通事件 Traffic "),
+ /**
+ * 通用行为分析 Normal
+ */
+ EM_CLASS_NORMAL(7,"通用行为分析 Normal "),
+ /**
+ *
+ */
+ EM_CLASS_PS(8,""),
+ /**
+ * 金融行为分析 ATM
+ */
+ EM_CLASS_ATM(9,"金融行为分析 ATM "),
+ /**
+ * 地铁行为分析
+ */
+ EM_CLASS_METRO(10,"地铁行为分析"),
+ /**
+ * 人脸检测 FaceDetection
+ */
+ EM_CLASS_FACE_DETECTION(11,"人脸检测 FaceDetection "),
+ /**
+ * 目标识别 FaceRecognition
+ */
+ EM_CLASS_FACE_RECOGNITION(12,"目标识别 FaceRecognition "),
+ /**
+ * 人数统计 NumberStat
+ */
+ EM_CLASS_NUMBER_STAT(13,"人数统计 NumberStat "),
+ /**
+ * 热度图 HeatMap
+ */
+ EM_CLASS_HEAT_MAP(14,"热度图 HeatMap "),
+ /**
+ * 视频诊断 VideoDiagnosis
+ */
+ EM_CLASS_VIDEO_DIAGNOSIS(15,"视频诊断 VideoDiagnosis "),
+ /**
+ * 视频增强
+ */
+ EM_CLASS_VIDEO_ENHANCE(16,"视频增强"),
+ /**
+ * 烟火检测
+ */
+ EM_CLASS_SMOKEFIRE_DETECT(17,"烟火检测"),
+ /**
+ * 车辆特征识别 VehicleAnalyse
+ */
+ EM_CLASS_VEHICLE_ANALYSE(18,"车辆特征识别 VehicleAnalyse "),
+ /**
+ * 人员特征识别
+ */
+ EM_CLASS_PERSON_FEATURE(19,"人员特征识别"),
+ /**
+ * 多预置点人脸检测 SDFaceDetect
+ */
+ EM_CLASS_SDFACEDETECTION(20,"多预置点人脸检测 SDFaceDetect "),
+ /**
+ * 球机热度图计划 HeatMapPlan
+ */
+ EM_CLASS_HEAT_MAP_PLAN(21,"球机热度图计划 HeatMapPlan "),
+ /**
+ * 球机客流量统计计划 NumberStatPlan
+ */
+ EM_CLASS_NUMBERSTAT_PLAN(22,"球机客流量统计计划 NumberStatPlan "),
+ /**
+ * 金融人脸检测,包括正常人脸、异常人脸、相邻人脸、头盔人脸等针对ATM场景特殊优化
+ */
+ EM_CLASS_ATMFD(23,"金融人脸检测,包括正常人脸、异常人脸、相邻人脸、头盔人脸等针对ATM场景特殊优化"),
+ /**
+ * 高速交通事件检测 Highway
+ */
+ EM_CLASS_HIGHWAY(24,"高速交通事件检测 Highway "),
+ /**
+ * 城市交通事件检测 City
+ */
+ EM_CLASS_CITY(25,"城市交通事件检测 City "),
+ /**
+ * 民用简易跟踪 LeTrack
+ */
+ EM_CLASS_LETRACK(26,"民用简易跟踪 LeTrack "),
+ /**
+ * 打靶相机 SCR
+ */
+ EM_CLASS_SCR(27,"打靶相机 SCR "),
+ /**
+ * 立体视觉(双目) StereoVision
+ */
+ EM_CLASS_STEREO_VISION(28,"立体视觉(双目) StereoVision "),
+ /**
+ * 人体检测 HumanDetect
+ */
+ EM_CLASS_HUMANDETECT(29,"人体检测 HumanDetect "),
+ /**
+ * 人脸分析 FaceAnalysis
+ */
+ EM_CLASS_FACE_ANALYSIS(30,"人脸分析 FaceAnalysis "),
+ /**
+ * X光检测 XRayDetection
+ */
+ EM_CALSS_XRAY_DETECTION(31,"X光检测 XRayDetection "),
+ /**
+ * 双目相机客流量统计 StereoNumber
+ */
+ EM_CLASS_STEREO_NUMBER(32,"双目相机客流量统计 StereoNumber "),
+ /**
+ * 人群分布图
+ */
+ EM_CLASS_CROWDDISTRIMAP(33,"人群分布图"),
+ /**
+ * 目标检测
+ */
+ EM_CLASS_OBJECTDETECT(34,"目标检测"),
+ /**
+ * IVSS人脸检测 FaceAttribute
+ */
+ EM_CLASS_FACEATTRIBUTE(35,"IVSS人脸检测 FaceAttribute "),
+ /**
+ * IVSS目标识别 FaceCompare
+ */
+ EM_CLASS_FACECOMPARE(36,"IVSS目标识别 FaceCompare "),
+ /**
+ * 立体行为分析 StereoBehavior
+ */
+ EM_CALSS_STEREO_BEHAVIOR(37,"立体行为分析 StereoBehavior "),
+ /**
+ * 智慧城管 IntelliCityMgr
+ */
+ EM_CALSS_INTELLICITYMANAGER(38,"智慧城管 IntelliCityMgr "),
+ /**
+ * 防护舱(ATM舱内) ProtectiveCabin
+ */
+ EM_CALSS_PROTECTIVECABIN(39,"防护舱(ATM舱内) ProtectiveCabin "),
+ /**
+ * 飞机行为检测 AirplaneDetect
+ */
+ EM_CALSS_AIRPLANEDETECT(40,"飞机行为检测 AirplaneDetect "),
+ /**
+ * 人群态势(人群分布图服务) CrowdPosture
+ */
+ EM_CALSS_CROWDPOSTURE(41,"人群态势(人群分布图服务) CrowdPosture "),
+ /**
+ * 打电话检测 PhoneCallDetect
+ */
+ EM_CLASS_PHONECALLDETECT(42,"打电话检测 PhoneCallDetect "),
+ /**
+ * 烟雾检测 SmokeDetection
+ */
+ EM_CLASS_SMOKEDETECTION(43,"烟雾检测 SmokeDetection "),
+ /**
+ * 船只检测 BoatDetection
+ */
+ EM_CLASS_BOATDETECTION(44,"船只检测 BoatDetection "),
+ /**
+ * 吸烟检测 SmokingDetect
+ */
+ EM_CLASS_SMOKINGDETECT(45,"吸烟检测 SmokingDetect "),
+ /**
+ * 水利监测 WaterMonitor
+ */
+ EM_CLASS_WATERMONITOR(46,"水利监测 WaterMonitor "),
+ /**
+ * 生成图规则 GenerateGraphDetection
+ */
+ EM_CLASS_GENERATEGRAPHDETECTION(47,"生成图规则 GenerateGraphDetection "),
+ /**
+ * 交通停车 TrafficPark
+ */
+ EM_CLASS_TRAFFIC_PARK(48,"交通停车 TrafficPark "),
+ /**
+ * 作业检测 OperateMonitor
+ */
+ EM_CLASS_OPERATEMONITOR(49,"作业检测 OperateMonitor "),
+ /**
+ * 智慧零售大类 IntelliRetail
+ */
+ EM_CLASS_INTELLI_RETAIL(50,"智慧零售大类 IntelliRetail "),
+ /**
+ * 教育智慧课堂 ClassroomAnalyse
+ */
+ EM_CLASS_CLASSROOM_ANALYSE(51,"教育智慧课堂 ClassroomAnalyse "),
+ /**
+ * 特征向量提取大类 FeatureAbstract
+ */
+ EM_CLASS_FEATURE_ABSTRACT(52,"特征向量提取大类 FeatureAbstract "),
+ /**
+ * 人体检测大类 FaceBodyDetect
+ */
+ EM_CLASS_FACEBODY_DETECT(53,"人体检测大类 FaceBodyDetect "),
+ /**
+ * 人体识别大类 FaceBodyAnalyse
+ */
+ EM_CLASS_FACEBODY_ANALYSE(54,"人体识别大类 FaceBodyAnalyse "),
+ /**
+ * 车辆密度 VehiclesDistri
+ */
+ EM_CLASS_VEHICLES_DISTRI(55,"车辆密度 VehiclesDistri "),
+ /**
+ * 智慧养殖检测 IntelliBreed
+ */
+ EM_CLASS_INTELLI_BREED(56,"智慧养殖检测 IntelliBreed "),
+ /**
+ *
+ */
+ EM_CLASS_INTELLI_PS(57,""),
+ /**
+ * 电力检测 ElectricDetect
+ */
+ EM_CLASS_ELECTRIC_DETECT(58,"电力检测 ElectricDetect "),
+ /**
+ * 雷达检测 RadarDetect
+ */
+ EM_CLASS_RADAR_DETECT(59,"雷达检测 RadarDetect "),
+ /**
+ * 车位检测大类 ParkingSpace
+ */
+ EM_CLASS_PARKINGSPACE(60,"车位检测大类 ParkingSpace "),
+ /**
+ * 智慧金融 IntelliFinance
+ */
+ EM_CLASS_INTELLI_FINANCE(61,"智慧金融 IntelliFinance "),
+ /**
+ * 人群异常检测 CrowdAbnormal
+ */
+ EM_CLASS_CROWD_ABNORMAL(62,"人群异常检测 CrowdAbnormal "),
+ /**
+ * 人体温智能检测 AnatomyTempDetect
+ */
+ EM_CLASS_ANATOMY_TEMP_DETECT(63,"人体温智能检测 AnatomyTempDetect "),
+ /**
+ * 天气监控 WeatherMonitor
+ */
+ EM_CLASS_WEATHER_MONITOR(64,"天气监控 WeatherMonitor "),
+ /**
+ * 电梯门禁 ElevatorAccessControl
+ */
+ EM_CLASS_ELEVATOR_ACCESS_CONTROL(65,"电梯门禁 ElevatorAccessControl "),
+ /**
+ * 违章建筑 BreakRuleBuilding
+ */
+ EM_CLASS_BREAK_RULE_BUILDING(66,"违章建筑 BreakRuleBuilding "),
+ /**
+ * 异物检测 ForeignDetection
+ */
+ EM_CLASS_FOREIGN_DETECT(67,"异物检测 ForeignDetection "),
+ /**
+ * 全景交通 PanoramaTraffic
+ */
+ EM_CLASS_PANORAMA_TRAFFIC(68,"全景交通 PanoramaTraffic "),
+ /**
+ * 传送带阻塞 ConveyorBlock
+ */
+ EM_CLASS_CONVEY_OR_BLOCK(69,"传送带阻塞 ConveyorBlock "),
+ /**
+ * 厨房有害动物检测 KitchenAnimal
+ */
+ EM_CLASS_KITCHEN_ANIMAL(70,"厨房有害动物检测 KitchenAnimal "),
+ /**
+ * 万物检测 AllSeeingEye
+ */
+ EM_CLASS_ALLSEEINGEYE(71,"万物检测 AllSeeingEye "),
+ /**
+ * 智慧消防 IntelliFireControl
+ */
+ EM_CLASS_INTELLI_FIRE_CONTROL(72,"智慧消防 IntelliFireControl "),
+ /**
+ * 传送带检测 ConveyerBelt
+ */
+ EM_CLASS_CONVERYER_BELT(73,"传送带检测 ConveyerBelt "),
+ /**
+ * 智慧物流 IntelliLogistics
+ */
+ EM_CLASS_INTELLI_LOGISTICS(74,"智慧物流 IntelliLogistics "),
+ /**
+ * 烟火检测 SmokeFire
+ */
+ EM_CLASS_SMOKE_FIRE(75,"烟火检测 SmokeFire "),
+ /**
+ * 物品监控 ObjectMonitor
+ */
+ EM_CLASS_OBJECT_MONITOR(76,"物品监控 ObjectMonitor "),
+ /**
+ * 智能停车 IntelliParking
+ */
+ EM_CLASS_INTELLI_PARKING(77,"智能停车 IntelliParking "),
+ /**
+ * 智慧消防 FireControl
+ */
+ EM_CLASS_FIRE_CONTROL(78,"智慧消防 FireControl "),
+ /**
+ * 动物检测 AnimalDetection
+ */
+ EM_CLASS_ANIMAL_DETECTION(79,"动物检测 AnimalDetection "),
+ /**
+ * 火警监控 FireControlMonitor
+ */
+ EM_CLASS_FIRE_CONTROL_MONITOR(80,"火警监控 FireControlMonitor "),
+ /**
+ * 鱼群监测 FishMonitor
+ */
+ EM_CLASS_FISH_MONITOR(81,"鱼群监测 FishMonitor "),
+ /**
+ * 工程车检测 ShopTruckDetect
+ */
+ EM_CLASS_SHOPTRUCK_DETECT(82,"工程车检测 ShopTruckDetect ");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CLASS_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CLASS_TYPE enumType : EM_CLASS_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CLASS_TYPE enumType : EM_CLASS_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_CLASS_TYPE getEnum(int value) {
+ for (EM_CLASS_TYPE e : EM_CLASS_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_CLASS_TYPE.EM_CLASS_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CLOTHES_COLOR.java b/src/main/java/com/netsdk/lib/enumeration/EM_CLOTHES_COLOR.java
new file mode 100644
index 0000000..63f49fb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CLOTHES_COLOR.java
@@ -0,0 +1,138 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 衣服颜色
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_CLOTHES_COLOR extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_CLOTHES_COLOR_UNKNOWN = 0;
+ /**
+ * 白色
+ */
+ public static final int EM_CLOTHES_COLOR_WHITE = 1;
+ /**
+ * 橙色
+ */
+ public static final int EM_CLOTHES_COLOR_ORANGE = 2;
+ /**
+ * 粉色
+ */
+ public static final int EM_CLOTHES_COLOR_PINK = 3;
+ /**
+ * 黑色
+ */
+ public static final int EM_CLOTHES_COLOR_BLACK = 4;
+ /**
+ * 红色
+ */
+ public static final int EM_CLOTHES_COLOR_RED = 5;
+ /**
+ * 黄色
+ */
+ public static final int EM_CLOTHES_COLOR_YELLOW = 6;
+ /**
+ * 灰色
+ */
+ public static final int EM_CLOTHES_COLOR_GRAY = 7;
+ /**
+ * 蓝色
+ */
+ public static final int EM_CLOTHES_COLOR_BLUE = 8;
+ /**
+ * 绿色
+ */
+ public static final int EM_CLOTHES_COLOR_GREEN = 9;
+ /**
+ * 紫色
+ */
+ public static final int EM_CLOTHES_COLOR_PURPLE = 10;
+ /**
+ * 棕色
+ */
+ public static final int EM_CLOTHES_COLOR_BROWN = 11;
+ /**
+ * 深橙色
+ */
+ public static final int EM_CLOTHES_COLOR_DARKORANGE = 12;
+ /**
+ * 其他颜色(该选项设备协议已不支持, 此处为了兼容保留)
+ */
+ public static final int EM_CLOTHES_COLOR_OTHER = 13;
+ /**
+ * 银色
+ */
+ public static final int EM_CLOTHES_COLOR_SILVER = 14;
+ /**
+ * 暗紫罗兰色
+ */
+ public static final int EM_CLOTHES_COLOR_DARKVIOLET = 15;
+ /**
+ * 栗色
+ */
+ public static final int EM_CLOTHES_COLOR_MARRON = 16;
+ /**
+ * 暗灰色
+ */
+ public static final int EM_CLOTHES_COLOR_DIMGRAY = 17;
+ /**
+ * 白烟色
+ */
+ public static final int EM_CLOTHES_COLOR_WHITESMOKE = 18;
+ /**
+ * 浅玫瑰色
+ */
+ public static final int EM_CLOTHES_COLOR_MISTYROSE = 19;
+ /**
+ * 番茄红色
+ */
+ public static final int EM_CLOTHES_COLOR_TOMATO = 20;
+ /**
+ * 橄榄色
+ */
+ public static final int EM_CLOTHES_COLOR_OLIVE = 21;
+ /**
+ * 金色
+ */
+ public static final int EM_CLOTHES_COLOR_GLOD = 22;
+ /**
+ * 暗橄榄绿色
+ */
+ public static final int EM_CLOTHES_COLOR_DARKOLIVEGREEN = 23;
+ /**
+ * 黄绿色
+ */
+ public static final int EM_CLOTHES_COLOR_CHARTREUSE = 24;
+ /**
+ * 绿黄色
+ */
+ public static final int EM_CLOTHES_COLOR_GREENYELLOW = 25;
+ /**
+ * 森林绿色
+ */
+ public static final int EM_CLOTHES_COLOR_FORESTGREEN = 26;
+ /**
+ * 海洋绿色
+ */
+ public static final int EM_CLOTHES_COLOR_SEAGREEN = 27;
+ /**
+ * 深天蓝色
+ */
+ public static final int EM_CLOTHES_COLOR_DEEPSKYBLUE = 28;
+ /**
+ * 青色
+ */
+ public static final int EM_CLOTHES_COLOR_CYAN = 29;
+ /**
+ * 浅绿色
+ */
+ public static final int EM_CLOTHES_COLOR_LIGHTGREEN = 30;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CLOTHES_LEGAL_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CLOTHES_LEGAL_STATE.java
new file mode 100644
index 0000000..281a200
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CLOTHES_LEGAL_STATE.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 工作服合法状态
+ * @since : Created in 2022/03/10 11:17
+ */
+
+public enum EM_CLOTHES_LEGAL_STATE {
+ /**
+ * 未知
+ */
+ EM_CLOTHES_LEGAL_STATE_UNKNOWN(0,"未知"),
+ /**
+ * 不合法
+ */
+ EM_CLOTHES_LEGAL_STATE_WRONGFUL(1,"不合法"),
+ /**
+ * 合法
+ */
+ EM_CLOTHES_LEGAL_STATE_LEGAL(2,"合法");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CLOTHES_LEGAL_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CLOTHES_LEGAL_STATE enumType : EM_CLOTHES_LEGAL_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CLOTHES_LEGAL_STATE enumType : EM_CLOTHES_LEGAL_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_CLOTHES_LEGAL_STATE getEnum(int value) {
+ for (EM_CLOTHES_LEGAL_STATE e : EM_CLOTHES_LEGAL_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_CLOTHES_LEGAL_STATE.EM_CLOTHES_LEGAL_STATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CLOTHES_PATTERN.java b/src/main/java/com/netsdk/lib/enumeration/EM_CLOTHES_PATTERN.java
new file mode 100644
index 0000000..1ee3122
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CLOTHES_PATTERN.java
@@ -0,0 +1,46 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 衣服图案
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_CLOTHES_PATTERN extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_CLOTHES_PATTERN_UNKNOWN = 0;
+ /**
+ * 纯色
+ */
+ public static final int EM_CLOTHES_PATTERN_PURE = 1;
+ /**
+ * 条纹
+ */
+ public static final int EM_CLOTHES_PATTERN_STRIPE = 2;
+ /**
+ * 图案
+ */
+ public static final int EM_CLOTHES_PATTERN_PATTERN = 3;
+ /**
+ * 缝隙
+ */
+ public static final int EM_CLOTHES_PATTERN_GAP = 4;
+ /**
+ * 格子
+ */
+ public static final int EM_CLOTHES_PATTERN_LATTICE = 5;
+ /**
+ * 拼接
+ */
+ public static final int EM_CLOTHES_PATTERN_SPLITJOIN = 6;
+ /**
+ * 碎花
+ */
+ public static final int EM_CLOTHES_PATTERN_FLORAL = 7;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CLOTHES_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CLOTHES_TYPE.java
new file mode 100644
index 0000000..6a1cb2e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CLOTHES_TYPE.java
@@ -0,0 +1,50 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * EM_CLOTHES_TYPE
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_CLOTHES_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_CLOTHES_TYPE_UNKNOWN = 0;
+ /**
+ * 长袖
+ */
+ public static final int EM_CLOTHES_TYPE_LONG_SLEEVE = 1;
+ /**
+ * 短袖
+ */
+ public static final int EM_CLOTHES_TYPE_SHORT_SLEEVE = 2;
+ /**
+ * 长裤
+ */
+ public static final int EM_CLOTHES_TYPE_TROUSERS = 3;
+ /**
+ * 短裤
+ */
+ public static final int EM_CLOTHES_TYPE_SHORTS = 4;
+ /**
+ * 裙子
+ */
+ public static final int EM_CLOTHES_TYPE_SKIRT = 5;
+ /**
+ * 背心
+ */
+ public static final int EM_CLOTHES_TYPE_WAISTCOAT = 6;
+ /**
+ * 超短裤
+ */
+ public static final int EM_CLOTHES_TYPE_MINIPANTS = 7;
+ /**
+ * 超短裙
+ */
+ public static final int EM_CLOTHES_TYPE_MINISKIRT = 8;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_COAT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_COAT_TYPE.java
new file mode 100644
index 0000000..9bc5205
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_COAT_TYPE.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 上衣类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_COAT_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_COAT_TYPE_UNKNOWN = 0;
+ /**
+ * 长袖
+ */
+ public static final int EM_COAT_TYPE_LONG_SLEEVE = 1;
+ /**
+ * 短袖
+ */
+ public static final int EM_COAT_TYPE_COTTA = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CODEID_SENSE_METHOD_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CODEID_SENSE_METHOD_TYPE.java
new file mode 100644
index 0000000..bdebdeb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CODEID_SENSE_METHOD_TYPE.java
@@ -0,0 +1,88 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 传感器方式
+ * @date 2023/03/16 14:52:52
+ */
+public enum EM_CODEID_SENSE_METHOD_TYPE {
+ /**
+ * 未知的
+ */
+ EM_CODEID_SENSE_METHOD_TYPE_UNKOWN(0, "未知的"),
+ /**
+ * 门磁
+ */
+ EM_CODEID_SENSE_METHOD_TYPE_DOOR_MAGNETISM(1, "门磁"),
+ /**
+ * 燃气传感
+ */
+ EM_CODEID_SENSE_METHOD_TYPE_GAS_SENSOR(2, "燃气传感"),
+ /**
+ * 幕帘传感器
+ */
+ EM_CODEID_SENSE_METHOD_TYPE_CURTAIN_SENSOR(3, "幕帘传感器"),
+ /**
+ * 移动传感器
+ */
+ EM_CODEID_SENSE_METHOD_TYPE_MOBILE_SENSOR(4, "移动传感器"),
+ /**
+ * 被动红外传感器
+ */
+ EM_CODEID_SENSE_METHOD_TYPE_PASSIVEINFRA(5, "被动红外传感器"),
+ /**
+ * 紧急按钮
+ */
+ EM_CODEID_SENSE_METHOD_TYPE_URGENCY_BUTTON(6, "紧急按钮"),
+ /**
+ * 烟雾传感器
+ */
+ EM_CODEID_SENSE_METHOD_TYPE_SMOKING_SENSOR(7, "烟雾传感器"),
+ /**
+ * 双鉴传感器(红外+微波)
+ */
+ EM_CODEID_SENSE_METHOD_TYPE_DOUBLEMETHOD(8, "双鉴传感器(红外+微波)"),
+ /**
+ * 水浸传感器
+ */
+ EM_CODEID_SENSE_METHOD_TYPE_WATER_SENSOR(9, "水浸传感器"),
+ /**
+ * 三技术
+ */
+ EM_CODEID_SENSE_METHOD_TYPE_THREEMETHOD(10, "三技术");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CODEID_SENSE_METHOD_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CODEID_SENSE_METHOD_TYPE enumType : EM_CODEID_SENSE_METHOD_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CODEID_SENSE_METHOD_TYPE enumType : EM_CODEID_SENSE_METHOD_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_COLLECTIVITY_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_COLLECTIVITY_STATE.java
new file mode 100644
index 0000000..b99395d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_COLLECTIVITY_STATE.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 诊断结果状态
+ * @date 2021/2/22
+ */
+public enum EM_COLLECTIVITY_STATE {
+ /** 成功 */
+ EM_COLLECTIVITY_STATE_SUCCESSED,
+ /** 失败 */
+ EM_COLLECTIVITY_STATE_FAILED;
+
+ /**
+ * 默认返回failed
+ * @param state
+ * @return
+ */
+ public EM_COLLECTIVITY_STATE getCollectivityState(int state) {
+ for (EM_COLLECTIVITY_STATE collectivityState : EM_COLLECTIVITY_STATE.values()) {
+ if (collectivityState.ordinal() == state) {
+ return collectivityState;
+ }
+ }
+ return EM_COLLECTIVITY_STATE_FAILED;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_COLLISION_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_COLLISION_MODE.java
new file mode 100644
index 0000000..b37658d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_COLLISION_MODE.java
@@ -0,0 +1,41 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 闸机防冲撞模式
+ * @date 2021/2/7
+ */
+public enum EM_COLLISION_MODE {
+ /** 未知 */
+ EM_COLLISION_MODE_UNKNOWN(-1, "未知"),
+ /** 2s松开离合 */
+ EM_COLLISION_MODE_2S(0, "2s松开离合"),
+ /** 5s松开离合 */
+ EM_COLLISION_MODE_5S(1, "5s松开离合"),
+ /** 人员离开松开离合 */
+ EM_COLLISION_MODE_LEAVING(2, "人员离开松开离合");
+ private int mode;
+ private String desc;
+
+ EM_COLLISION_MODE(int mode, String desc) {
+ this.mode = mode;
+ this.desc = desc;
+ }
+
+ public int getMode() {
+ return mode;
+ }
+
+ public void setMode(int mode) {
+ this.mode = mode;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_COMMON_SEAT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_COMMON_SEAT_TYPE.java
new file mode 100644
index 0000000..a31bcec
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_COMMON_SEAT_TYPE.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 默认检测最大座驾个数
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_COMMON_SEAT_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未识别
+ */
+ public static final int COMMON_SEAT_TYPE_UNKNOWN = 0;
+ /**
+ * 主驾驶
+ */
+ public static final int COMMON_SEAT_TYPE_MAIN = 1;
+ /**
+ * 副驾驶
+ */
+ public static final int COMMON_SEAT_TYPE_SLAVE = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_COMM_ATTACHMENT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_COMM_ATTACHMENT_TYPE.java
new file mode 100644
index 0000000..f64bc0e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_COMM_ATTACHMENT_TYPE.java
@@ -0,0 +1,38 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 车辆物件类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_COMM_ATTACHMENT_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知类型
+ */
+ public static final int COMM_ATTACHMENT_TYPE_UNKNOWN = 0;
+ /**
+ * 摆件
+ */
+ public static final int COMM_ATTACHMENT_TYPE_FURNITURE = 1;
+ /**
+ * 挂件
+ */
+ public static final int COMM_ATTACHMENT_TYPE_PENDANT = 2;
+ /**
+ * 纸巾盒
+ */
+ public static final int COMM_ATTACHMENT_TYPE_TISSUEBOX = 3;
+ /**
+ * 危险品
+ */
+ public static final int COMM_ATTACHMENT_TYPE_DANGER = 4;
+ /**
+ * 香水
+ */
+ public static final int COMM_ATTACHMENT_TYPE_PERFUMEBOX = 5;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_COMPARE_RESULT.java b/src/main/java/com/netsdk/lib/enumeration/EM_COMPARE_RESULT.java
new file mode 100644
index 0000000..5e9ac0f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_COMPARE_RESULT.java
@@ -0,0 +1,60 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 比对结果
+ * @date 2021/08/15
+ */
+public enum EM_COMPARE_RESULT {
+ // 未知
+ EM_COMPARE_RESULT_UNKNOWN(-1, "未知"),
+ // 成功
+ EM_COMPARE_RESULT_SUCCESS(0, "成功"),
+ // 其他错误
+ EM_COMPARE_RESULT_OTHERERROR(1, "其他错误"),
+ // 不在人脸库中
+ EM_COMPARE_RESULT_NOTINDATABASE(2, "不在人脸库中"),
+ // 超过单日进门次数限制
+ EM_COMPARE_RESULT_EXCEED_SINGLE_DAY_ENTER_TIMES(3, "超过单日进门次数限制"),
+ // 无进门记录,离开失败
+ EM_COMPARE_RESULT_NO_ENTER_RECORD_LEAVE_FAIL(4, "无进门记录,离开失败"),
+ // 区域人员已满
+ EM_COMPARE_RESULT_AREA_FULL(5, "区域人员已满"),
+ // 防反潜验证失败(没有正常出门记录再次进门)
+ EM_COMPARE_RESULT_REPEATENTER_CHECK_FAIL(6, "防反潜验证失败(没有正常出门记录再次进门)");
+
+ private int value;
+ private String note;
+
+ private EM_COMPARE_RESULT(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_COMPARE_RESULT enumType : EM_COMPARE_RESULT.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_COMPARE_RESULT enumType : EM_COMPARE_RESULT.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_COMPLIANCE_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_COMPLIANCE_STATE.java
new file mode 100644
index 0000000..c5edfd8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_COMPLIANCE_STATE.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 合规检测状态
+ * @since : Created in 2022/03/10 11:17
+ */
+
+public enum EM_COMPLIANCE_STATE {
+ /**
+ * 合规
+ */
+ EM_COMPLIANCE_STATE_COMPLIANT(0,"合规"),
+ /**
+ * 不合规
+ */
+ EM_COMPLIANCE_STATE_NONCOMPLIANT(1,"不合规"),
+ /**
+ * 未知
+ */
+ EM_COMPLIANCE_STATE_UNKNOWN(2,"未知");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_COMPLIANCE_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_COMPLIANCE_STATE enumType : EM_COMPLIANCE_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_COMPLIANCE_STATE enumType : EM_COMPLIANCE_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_COMPLIANCE_STATE getEnum(int value) {
+ for (EM_COMPLIANCE_STATE e : EM_COMPLIANCE_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_COMPLIANCE_STATE.EM_COMPLIANCE_STATE_COMPLIANT;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_COMPLIANTDETAIL_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_COMPLIANTDETAIL_TYPE.java
new file mode 100644
index 0000000..1e86011
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_COMPLIANTDETAIL_TYPE.java
@@ -0,0 +1,42 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 判断是否合规的属性列表信息
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_COMPLIANTDETAIL_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_COMPLIANTDETAIL_UNKNOWN = 0;
+ /**
+ * 面具
+ */
+ public static final int EM_COMPLIANTDETAIL_MASK = 1;
+ /**
+ * 头盔
+ */
+ public static final int EM_COMPLIANTDETAIL_HELMET = 2;
+ /**
+ * 反光背心
+ */
+ public static final int EM_COMPLIANTDETAIL_VEST = 3;
+ /**
+ * 反光眼镜
+ */
+ public static final int EM_COMPLIANTDETAIL_GLASSESS = 4;
+ /**
+ * 上装颜色
+ */
+ public static final int EM_COMPLIANTDETAIL_COATCOLOR = 5;
+ /**
+ * 下装颜色
+ */
+ public static final int EM_COMPLIANTDETAIL_TROUSESCOLOR = 6;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_COMPOSIT_CHANNEL_BIND_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_COMPOSIT_CHANNEL_BIND_MODE.java
new file mode 100644
index 0000000..1750a94
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_COMPOSIT_CHANNEL_BIND_MODE.java
@@ -0,0 +1,68 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 默认组合通道绑定模式
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/27 15:32
+ */
+public enum EM_COMPOSIT_CHANNEL_BIND_MODE {
+ /**
+ * 未知
+ */
+ EM_COMPOSIT_CHANNEL_BIND_MODE_UNKNOWN(0, "未知"),
+ /**
+ * 自动
+ */
+ EM_COMPOSIT_CHANNEL_BIND_MODE_AUTOMATIC(1, "自动"),
+ /**
+ * 半自动
+ */
+ EM_COMPOSIT_CHANNEL_BIND_MODE_SEMIAUTOMATIC(2, "半自动"),
+ /**
+ * 手动
+ */
+ EM_COMPOSIT_CHANNEL_BIND_MODE_MANUAL(3, "手动");
+
+ private int value;
+ private String note;
+
+ EM_COMPOSIT_CHANNEL_BIND_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_COMPOSIT_CHANNEL_BIND_MODE enumType : EM_COMPOSIT_CHANNEL_BIND_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_COMPOSIT_CHANNEL_BIND_MODE enumType : EM_COMPOSIT_CHANNEL_BIND_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_COMPOSIT_CHANNEL_BIND_MODE getEnum(int value) {
+ for (EM_COMPOSIT_CHANNEL_BIND_MODE e : EM_COMPOSIT_CHANNEL_BIND_MODE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_COMPOSIT_CHANNEL_BIND_MODE.EM_COMPOSIT_CHANNEL_BIND_MODE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CONSUMPTION_EVENT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CONSUMPTION_EVENT_TYPE.java
new file mode 100644
index 0000000..7dc3e26
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CONSUMPTION_EVENT_TYPE.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 消费记录类型
+* @date 2022/03/07 11:45:31
+*/
+public enum EM_CONSUMPTION_EVENT_TYPE {
+/**
+未知
+*/
+EM_CONSUMPTION_EVENT_TYPE_UNKNOWN(-1,"未知"),
+/**
+定额消费事件
+*/
+EM_CONSUMPTION_EVENT_TYPE_QUOTA(0,"定额消费事件"),
+/**
+非定额消费事件
+*/
+EM_CONSUMPTION_EVENT_TYPE_NONQUOTA(1,"非定额消费事件"),
+/**
+充值事件
+*/
+EM_CONSUMPTION_EVENT_TYPE_DEPOSIT(2,"充值事件"),
+/**
+末次返还事件
+*/
+EM_CONSUMPTION_EVENT_TYPE_RESTORE(3,"末次返还事件");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_CONSUMPTION_EVENT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_CONSUMPTION_EVENT_TYPE enumType : EM_CONSUMPTION_EVENT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_CONSUMPTION_EVENT_TYPE enumType : EM_CONSUMPTION_EVENT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_CONSUMPTION_EVENT_TYPE getEnum(int value) {
+ for (EM_CONSUMPTION_EVENT_TYPE e : EM_CONSUMPTION_EVENT_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_CONSUMPTION_EVENT_TYPE.EM_CONSUMPTION_EVENT_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CONSUMPTION_RECORD_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CONSUMPTION_RECORD_TYPE.java
new file mode 100644
index 0000000..05f8fc2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CONSUMPTION_RECORD_TYPE.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 消费记录类型
+* @date 2022/03/08 17:16:39
+*/
+public enum EM_CONSUMPTION_RECORD_TYPE {
+/**
+未知
+*/
+EM_CONSUMPTION_RECORD_TYPE_UNKNOWN(-1,"未知"),
+/**
+定额消费记录
+*/
+EM_CONSUMPTION_RECORD_TYPE_QUOTA(0,"定额消费记录"),
+/**
+非定额消费记录
+*/
+EM_CONSUMPTION_RECORD_TYPE_NONQUOTA(1,"非定额消费记录"),
+/**
+充值记录
+*/
+EM_CONSUMPTION_RECORD_TYPE_DEPOSIT(2,"充值记录");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_CONSUMPTION_RECORD_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_CONSUMPTION_RECORD_TYPE enumType : EM_CONSUMPTION_RECORD_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_CONSUMPTION_RECORD_TYPE enumType : EM_CONSUMPTION_RECORD_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_CONSUMPTION_RECORD_TYPE getEnum(int value) {
+ for (EM_CONSUMPTION_RECORD_TYPE e : EM_CONSUMPTION_RECORD_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_CONSUMPTION_RECORD_TYPE.EM_CONSUMPTION_RECORD_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CONSUMPTION_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_CONSUMPTION_STATUS.java
new file mode 100644
index 0000000..e17166c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CONSUMPTION_STATUS.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 消费结果
+* @date 2022/03/07 11:45:30
+*/
+public enum EM_CONSUMPTION_STATUS {
+/**
+未知
+*/
+EM_CONSUMPTION_STATUS_UNKNOWN(-1,"未知"),
+/**
+失败
+*/
+EM_CONSUMPTION_STATUS_FAIL(0,"失败"),
+/**
+成功
+*/
+EM_CONSUMPTION_STATUS_SUCC(1,"成功");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_CONSUMPTION_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_CONSUMPTION_STATUS enumType : EM_CONSUMPTION_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_CONSUMPTION_STATUS enumType : EM_CONSUMPTION_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_CONSUMPTION_STATUS getEnum(int value) {
+ for (EM_CONSUMPTION_STATUS e : EM_CONSUMPTION_STATUS.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_CONSUMPTION_STATUS.EM_CONSUMPTION_STATUS_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CONTROL_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CONTROL_MODE.java
new file mode 100644
index 0000000..e8577a0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CONTROL_MODE.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 控制模式
+ * @date 2021/09/01
+ */
+public enum EM_CONTROL_MODE {
+ // 未知
+ EM_CONTROL_UNKNOWN(0, "未知"),
+ // 黄闪控制
+ EM_CONTROL_YELLOW_FLASH(1, "黄闪控制"),
+ // 多时段控制
+ EM_CONTROL_MULITI_TIME(2, "多时段控制"),
+ // 手动控制
+ EM_CONTROL_MANUAL(3, "手动控制"),
+ // 感应控制
+ EM_CONTROL_INDUCTION(4, "感应控制"),
+ // 无电缆协调控制
+ EM_CONTROL_WIRELESS_COORDINATION(5, "无电缆协调控制"),
+ // 单点协调控制
+ EM_CONTROL_SINGLE_OPTIMIZATION(6, "单点协调控制"),
+ //公交信号优先
+ EM_CONTROL_BUS_SINGAL(7, "公交信号优先"),
+ // 紧急信号优先
+ EM_CONTROL_EMERGENCY_SINGAL(8, "紧急信号优先"),
+ // 其他
+ EM_CONTROL_OTHER(9, "其他");
+
+ private int value;
+ private String note;
+
+ private EM_CONTROL_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CONTROL_MODE enumType : EM_CONTROL_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CONTROL_MODE enumType : EM_CONTROL_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_COORDINATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_COORDINATE_TYPE.java
new file mode 100644
index 0000000..b14451d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_COORDINATE_TYPE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 坐标系类型
+ * @date 2022/11/21 17:53:12
+ */
+public enum EM_COORDINATE_TYPE {
+ /**
+ * 未知
+ */
+ EM_COORDINATE_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 绝对坐标
+ */
+ EM_COORDINATE_TYPE_ABSOLUTE(1, "绝对坐标"),
+ /**
+ * 8192坐标
+ */
+ EM_COORDINATE_TYPE_8192(2, "8192坐标");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_COORDINATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_COORDINATE_TYPE enumType : EM_COORDINATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_COORDINATE_TYPE enumType : EM_COORDINATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_COORDINATE_TYPE getEnum(int value) {
+ for (EM_COORDINATE_TYPE e : EM_COORDINATE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_COORDINATE_TYPE.EM_COORDINATE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_COUNTDOWN_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_COUNTDOWN_TYPE.java
new file mode 100644
index 0000000..1b72bf2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_COUNTDOWN_TYPE.java
@@ -0,0 +1,53 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 倒计时方式
+ * @date 2021/08/24
+ */
+public enum EM_COUNTDOWN_TYPE {
+ // 未知
+ EM_COUNTDOWN_TYPE_UNKNOWN(0, "未知"),
+ // 学习式
+ EM_COUNTDOWN_TYPE_LEARNING(1, "学习式"),
+ // 脉冲式
+ EM_COUNTDOWN_TYPE_PLUSE(2, "脉冲式"),
+ // 全程485式
+ EM_COUNTDOWN_TYPE_FULL485(3, "全程485式"),
+ // 半程485式
+ EM_COUNTDOWN_TYPE_HALFWAY485(4, "半程485式");
+
+ private int value;
+ private String note;
+
+ private EM_COUNTDOWN_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_COUNTDOWN_TYPE enumType : EM_COUNTDOWN_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_COUNTDOWN_TYPE enumType : EM_COUNTDOWN_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_COURSECOMPOSITE_OPERATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_COURSECOMPOSITE_OPERATE_TYPE.java
new file mode 100644
index 0000000..8c5fccb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_COURSECOMPOSITE_OPERATE_TYPE.java
@@ -0,0 +1,84 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.structure.*;
+
+/**
+ * 录播主机组合通道操作
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/28 19:49
+ */
+public enum EM_COURSECOMPOSITE_OPERATE_TYPE {
+ /**
+ * 控制组合通道与逻辑通道,对应结构体
+ * pInParam = {@link NET_IN_COURSECOMPOSITE_LOCK_CONTROL}
+ * pOutParam = {@link NET_OUT_COURSECOMPOSITE_LOCK_CONTROL}
+ */
+ EM_COURSECOMPOSITE_TYPE_LOCK_CONTROL(0, "控制组合通道与逻辑通道"),
+ /**
+ * 获取组合通道与逻辑通道的锁定信息,对应结构体
+ * pInParam = {@link NET_IN_COURSECOMPOSITE_GET_LOCKINFO}
+ * pOutParam = {@link NET_OUT_COURSECOMPOSITE_GET_LOCKINFO}
+ */
+ EM_COURSECOMPOSITE_TYPE_GET_LOCKINFO(1, "获取组合通道与逻辑通道的锁定信息"),
+ /**
+ * 获取组合通道信息,对应结构体
+ * pInParam = {@link NET_IN_COURSECOMPOSITE_GET_INFO}
+ * pOutParam = {@link NET_OUT_COURSECOMPOSITE_GET_INFO}
+ */
+ EM_COURSECOMPOSITE_TYPE_GET_INFO(2, "获取组合通道信息"),
+ /**
+ * 设置组合通道信息,对应结构体
+ * pInParam = {@link NET_IN_COURSECOMPOSITE_SET_INFO}
+ * pOutParam = {@link NET_OUT_COURSECOMPOSITE_SET_INFO}
+ */
+ EM_COURSECOMPOSITE_TYPE_SET_INFO(3, "设置组合通道信息"),
+ /**
+ * 将组合通道信息更新到time时的信息,对应结构体
+ * pInParam = {@link NET_IN_COURSECOMPOSITE_UPDATE_INFO}
+ * pOutParam = {@link NET_OUT_COURSECOMPOSITE_UPDATE_INFO}
+ */
+ EM_COURSECOMPOSITE_TYPE_UPDATE_INFO(4, "将组合通道信息更新到time时的信息");
+
+ private int value;
+ private String note;
+
+ EM_COURSECOMPOSITE_OPERATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_COURSECOMPOSITE_OPERATE_TYPE enumType : EM_COURSECOMPOSITE_OPERATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_COURSECOMPOSITE_OPERATE_TYPE enumType : EM_COURSECOMPOSITE_OPERATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_COURSECOMPOSITE_OPERATE_TYPE getEnum(int value) {
+ for (EM_COURSECOMPOSITE_OPERATE_TYPE e : EM_COURSECOMPOSITE_OPERATE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_COURSECOMPOSITE_OPERATE_TYPE.EM_COURSECOMPOSITE_TYPE_LOCK_CONTROL;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_COURSERECORD_OPERATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_COURSERECORD_OPERATE_TYPE.java
new file mode 100644
index 0000000..187c38e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_COURSERECORD_OPERATE_TYPE.java
@@ -0,0 +1,78 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.structure.*;
+
+/**
+ * 录播主机录像信息操作
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/28 19:17
+ */
+public enum EM_COURSERECORD_OPERATE_TYPE {
+ /**
+ * 获取教室录像信息,对应结构体
+ * pInParam = {@link NET_IN_COURSERECORD_GETINFO}
+ * pOutParam = {@link NET_OUT_COURSERECORD_GETINFO}
+ */
+ EM_COURSERECORDE_TYPE_GET_INFO(0, "获取教室录像信息"),
+ /**
+ * 设置教室录像信息,对应结构体
+ * pInParam = {@link NET_IN_COURSERECORD_SETINFO}
+ * pOutParam = {@link NET_OUT_COURSERECORD_SETINFO}
+ */
+ EM_COURSERECORDE_TYPE_SET_INFO(1, "设置教室录像信息"),
+ /**
+ * 将录像信息更新到time时的信息,对应结构体
+ * pInParam = {@link NET_IN_COURSERECORD_UPDATE_INFO}
+ * pOutParam = {@link NET_OUT_COURSERECORD_UPDATE_INFO}
+ */
+ EM_COURSERECORDE_TYPE_UPDATE_INFO(2, "将录像信息更新到time时的信息"),
+ /**
+ * 获取当前课程教室已录制时间,对应结构体
+ * pInParam = {@link NET_IN_COURSERECORD_GET_TIME}
+ * pOutParam = {@link NET_OUT_COURSERECORD_GET_TIME}
+ */
+ EM_COURSERECORDE_TYPE_GET_TIME(3, "获取当前课程教室已录制时间");
+
+ private int value;
+ private String note;
+
+ EM_COURSERECORD_OPERATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_COURSERECORD_OPERATE_TYPE enumType : EM_COURSERECORD_OPERATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_COURSERECORD_OPERATE_TYPE enumType : EM_COURSERECORD_OPERATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_COURSERECORD_OPERATE_TYPE getEnum(int value) {
+ for (EM_COURSERECORD_OPERATE_TYPE e : EM_COURSERECORD_OPERATE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_COURSERECORD_OPERATE_TYPE.EM_COURSERECORDE_TYPE_GET_INFO;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_COURSE_LOCK_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_COURSE_LOCK_TYPE.java
new file mode 100644
index 0000000..66f3b30
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_COURSE_LOCK_TYPE.java
@@ -0,0 +1,69 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 课程录像锁定类型
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/28 16:27
+ */
+public enum EM_COURSE_LOCK_TYPE {
+ /**
+ * 未知
+ */
+ EM_COURSE_LOCK_TYPE_UNKNOWN(-1, "未知"),
+ /**
+ * 全部类型
+ */
+ EM_COURSE_LOCK_TYPE_ALL(0, "全部类型"),
+ /**
+ * 非锁定类型
+ */
+ EM_COURSE_LOCK_TYPE_NON_LOCKING(1, "非锁定类型"),
+ /**
+ * 锁定类型
+ */
+ EM_COURSE_LOCK_TYPE_LOCK(2, "锁定类型");
+
+ private int value;
+ private String note;
+
+ EM_COURSE_LOCK_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_COURSE_LOCK_TYPE enumType : EM_COURSE_LOCK_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_COURSE_LOCK_TYPE enumType : EM_COURSE_LOCK_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_COURSE_LOCK_TYPE getEnum(int value) {
+ for (EM_COURSE_LOCK_TYPE e : EM_COURSE_LOCK_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_COURSE_LOCK_TYPE.EM_COURSE_LOCK_TYPE_UNKNOWN;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_COURSE_RECORD_COMPRESSION_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_COURSE_RECORD_COMPRESSION_TYPE.java
new file mode 100644
index 0000000..c866682
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_COURSE_RECORD_COMPRESSION_TYPE.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 课程录像压缩类型
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/28 16:55
+ */
+public enum EM_COURSE_RECORD_COMPRESSION_TYPE {
+ /**
+ * 未知
+ */
+ EM_COURSE_RECORD_COMPRESSION_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * H.264 默认值
+ */
+ EM_COURSE_RECORD_COMPRESSION_TYPE_H264(1, "H.264 默认值"),
+ /**
+ * H.265
+ */
+ EM_COURSE_RECORD_COMPRESSION_TYPE_H265(2, "H.265");
+
+ private int value;
+ private String note;
+
+ EM_COURSE_RECORD_COMPRESSION_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_COURSE_RECORD_COMPRESSION_TYPE enumType : EM_COURSE_RECORD_COMPRESSION_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_COURSE_RECORD_COMPRESSION_TYPE enumType : EM_COURSE_RECORD_COMPRESSION_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_COURSE_RECORD_COMPRESSION_TYPE getEnum(int value) {
+ for (EM_COURSE_RECORD_COMPRESSION_TYPE e : EM_COURSE_RECORD_COMPRESSION_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_COURSE_RECORD_COMPRESSION_TYPE.EM_COURSE_RECORD_COMPRESSION_TYPE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_COURSE_RECORD_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_COURSE_RECORD_TYPE.java
new file mode 100644
index 0000000..38fb742
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_COURSE_RECORD_TYPE.java
@@ -0,0 +1,71 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 课程录像类型
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/28 16:31
+ */
+public enum EM_COURSE_RECORD_TYPE {
+ /**
+ * 未知
+ */
+ EM_COURSE_RECORD_TYPE_UNKNOWN(-1, "未知"),
+
+ /**
+ * 全部录像类型
+ */
+ EM_COURSE_RECORD_TYPE_ALL(0, "全部录像类型"),
+
+ /**
+ * 导播录像类型
+ */
+ EM_COURSE_RECORD_TYPE_GUIDED_BROADCAST(1, "导播录像类型"),
+
+ /**
+ * 互动录像类型
+ */
+ EM_COURSE_RECORD_TYPE_GUIDED_INTERACTION(2, "互动录像类型");
+
+ private int value;
+ private String note;
+
+ EM_COURSE_RECORD_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_COURSE_RECORD_TYPE enumType : EM_COURSE_RECORD_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_COURSE_RECORD_TYPE enumType : EM_COURSE_RECORD_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_COURSE_RECORD_TYPE getEnum(int value) {
+ for (EM_COURSE_RECORD_TYPE e : EM_COURSE_RECORD_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_COURSE_RECORD_TYPE.EM_COURSE_RECORD_TYPE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_COURSE_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_COURSE_STATE.java
new file mode 100644
index 0000000..f394716
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_COURSE_STATE.java
@@ -0,0 +1,60 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 课程状态
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/17 16:00
+ */
+public enum EM_COURSE_STATE {
+ /**
+ * 未知
+ */
+ EM_COURSE_STATE_UNKNOWN(0, "未知"),
+ /**
+ * 未录制
+ */
+ EM_COURSE_STATE_NOT_RECORD(1, "未录制"),
+ /**
+ * 录制中
+ */
+ EM_COURSE_STATE_IN_RECORDING(2, "录制中"),
+ /**
+ * 已录制
+ */
+ EM_COURSE_STATE_ALREADY_RECORDED(3, "已录制");
+
+ private int value;
+ private String note;
+
+ EM_COURSE_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_COURSE_STATE enumType : EM_COURSE_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_COURSE_STATE enumType : EM_COURSE_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_COVER_PLATE_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_COVER_PLATE_STATE.java
new file mode 100644
index 0000000..04c724a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_COVER_PLATE_STATE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 盖板状态
+* @date 2022/06/28 19:44:56
+*/
+public enum EM_COVER_PLATE_STATE {
+/**
+未知
+*/
+EM_COVER_PLATE_STATE_UNKNOWN(0,"未知"),
+/**
+正常
+*/
+EM_COVER_PLATE_STATE_NORMAL(1,"正常"),
+/**
+破裂
+*/
+EM_COVER_PLATE_STATE_BROKEN(2,"破裂");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_COVER_PLATE_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_COVER_PLATE_STATE enumType : EM_COVER_PLATE_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_COVER_PLATE_STATE enumType : EM_COVER_PLATE_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_COVER_PLATE_STATE getEnum(int value) {
+ for (EM_COVER_PLATE_STATE e : EM_COVER_PLATE_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_COVER_PLATE_STATE.EM_COVER_PLATE_STATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CTRL_SCHEME.java b/src/main/java/com/netsdk/lib/enumeration/EM_CTRL_SCHEME.java
new file mode 100644
index 0000000..05b3b57
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CTRL_SCHEME.java
@@ -0,0 +1,58 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 红绿灯方案/可变车道方案
+ * @date 2021/09/28
+ */
+public enum EM_CTRL_SCHEME {
+ // 未知
+ EM_CTRL_SCHEME_UNKNOWN(0, "未知"),
+ // 进入备份模式(红绿灯)
+ EM_CTRL_SCHEME_REDYELLOW_BACKUP(150, "进入备份模式(红绿灯)"),
+ // 正常退出备份模式(红绿灯)
+ EM_CTRL_SCHEME_REDYELLOW_BACKUP_NORMAL_QUIT(151, "正常退出备份模式(红绿灯)"),
+ // 异常退出备份模式(红绿灯)
+ EM_CTRL_SCHEME_REDYELLOW_BACKUP_ABNORMAL_QUIT(152, "异常退出备份模式(红绿灯)"),
+ // 异常退出备份模式(可变车道)
+ EM_CTRL_SCHEME_VARLANE_BACKUP(153, "异常退出备份模式(可变车道)"),
+ // 正常退出备份模式(可变车道)
+ EM_CTRL_SCHEME_VARLANE_BACKUP_NORMAL_QUIT(154, "正常退出备份模式(可变车道)"),
+ // 异常退出备份模式(可变车道)
+ EM_CTRL_SCHEME_VARLANE_BACKUP_ABNORMAL_QUIT(155, "异常退出备份模式(可变车道)");
+
+ private int value;
+ private String note;
+
+ private EM_CTRL_SCHEME(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CTRL_SCHEME enumType : EM_CTRL_SCHEME.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CTRL_SCHEME enumType : EM_CTRL_SCHEME.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CURRENT_OPERATE_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CURRENT_OPERATE_MODE.java
new file mode 100644
index 0000000..48f47ff
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CURRENT_OPERATE_MODE.java
@@ -0,0 +1,78 @@
+package com.netsdk.lib.enumeration;
+/**
+ * @author 251823
+ * @description 当前运行模式
+ * @date 2021/08/24
+ */
+public enum EM_CURRENT_OPERATE_MODE {
+ // 未知
+ EM_CURRENT_OPERATE_UNKNOWN(0, "未知"),
+ // 多时段控制
+ EM_CURRENT_OPERATE_MULPERIOD(1, "多时段控制"),
+ // 手动控制
+ EM_CURRENT_OPERATE_MANUAL_CONTROL(2, "手动控制"),
+ // 关灯控制
+ EM_CURRENT_OPERATE_TURNOFFLIGHT_CONTROL(3, "关灯控制"),
+ // 全红控制
+ EM_CURRENT_OPERATE_ALLRED_CONTROL(4, "全红控制"),
+ // 自适应滤波控制
+ EM_CURRENT_OPERATE_ADAPTFILTER_CONTROL(5, "自适应滤波控制"),
+ // 感应控制
+ EM_CURRENT_OPERATE_INDUCTION_CONTROL(6, "感应控制"),
+ // 黄闪控制
+ EM_CURRENT_OPERATE_YELLOWFLASH_CONTROL(7, "黄闪控制"),
+ // 单点自适应模式
+ EM_CURRENT_OPERATE_SINGAL_ADAPTINVE(8, "单点自适应模式"),
+ // 平台临时方案模式
+ EM_CURRENT_OPERATE_TMPPLATFORM_PLAN(9, "平台临时方案模式"),
+ // 临时手控模式
+ EM_CURRENT_OPERATE_TEMP_HAND(10, "临时手控模式"),
+ // 实时控制模式
+ EM_CURRENT_OPERATE_REALTIME_CONTROL(11, "实时控制模式"),
+ // 灭灯模式
+ EM_CURRENT_OPERATE_LIGHT_OFF(12, "灭灯模式"),
+ // 红闪模式
+ EM_CURRENT_OPERATE_RED_FLASH(13, "红闪模式"),
+ // 绿闪模式
+ EM_CURRENT_OPERATE_GREEN_FLASH(14, "绿闪模式"),
+ // 行人优先控制模式
+ EM_CURRENT_OPERATE_PEDESTRAIN_PRIORITY(15, "行人优先控制模式"),
+ // 拥堵溢出控制模式
+ EM_CURRENT_OPERATE_CONFGOVERFLOW_CONTROL(16, "拥堵溢出控制模式"),
+ // 夜间请求模式
+ EM_CURRENT_OPERATE_NIGHT_REQUEST(17, "夜间请求模式");
+
+ private int value;
+ private String note;
+
+ private EM_CURRENT_OPERATE_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CURRENT_OPERATE_MODE enumType : EM_CURRENT_OPERATE_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CURRENT_OPERATE_MODE enumType : EM_CURRENT_OPERATE_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CURRENT_STATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CURRENT_STATE_TYPE.java
new file mode 100644
index 0000000..ebe64c2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CURRENT_STATE_TYPE.java
@@ -0,0 +1,43 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_CURRENT_STATE_TYPE {
+ EM_CURRENT_STATE_UNKNOWN(0, "电流状态未知"),
+ EM_CURRENT_STATE_OVER_CURRENT(1, "电流过载"), // 电流过载
+ EM_CURRENT_STATE_NORMAL(2, "电流正常"), // 电流正常
+ EM_CURRENT_STATE_UNDER_CURRENT(3, "电源欠流"); // 电源欠流
+
+ private int value;
+ private String note;
+
+ private EM_CURRENT_STATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CURRENT_STATE_TYPE enumType : EM_CURRENT_STATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CURRENT_STATE_TYPE enumType : EM_CURRENT_STATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CUSTOMER_DEV_SETTING_DOOR_METHOD.java b/src/main/java/com/netsdk/lib/enumeration/EM_CUSTOMER_DEV_SETTING_DOOR_METHOD.java
new file mode 100644
index 0000000..6209d56
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CUSTOMER_DEV_SETTING_DOOR_METHOD.java
@@ -0,0 +1,89 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 开门方式
+ * @date 2022/06/02 10:15:21
+ */
+public enum EM_CUSTOMER_DEV_SETTING_DOOR_METHOD {
+ /**
+ * 未知
+ */
+ EM_CUSTOMER_DEV_SETTING_DOOR_METHOD_UNKNOWN(-1, "未知"),
+ /**
+ * CTID 码开门
+ */
+ EM_CUSTOMER_DEV_SETTING_DOOR_METHOD_CTID(0, "CTID 码开门"),
+ /**
+ * CTID 码 + 人脸组合开门
+ */
+ EM_CUSTOMER_DEV_SETTING_DOOR_METHOD_CTID_AND_FACE(1, "CTID 码 + 人脸组合开门"),
+ /**
+ * CTID 码或人脸开门
+ */
+ EM_CUSTOMER_DEV_SETTING_DOOR_METHOD_CTID_OR_FACE(2, "CTID 码或人脸开门"),
+ /**
+ * 腕带码或人脸开门
+ */
+ EM_CUSTOMER_DEV_SETTING_DOOR_METHOD_WRISTBAND_OR_FACE(3, "腕带码或人脸开门"),
+ /**
+ * 腕带码或人脸或证件开门
+ */
+ EM_CUSTOMER_DEV_SETTING_DOOR_METHOD_WRISTBAND_OR_FACE_OR_IDCARD(4, "腕带码或人脸或证件开门"),
+ /**
+ * 码1或码2开门 (码1、码2的含义由平台和设备双方约定)
+ */
+ EM_CUSTOMER_DEV_SETTING_DOOR_METHOD_CODE1_OR_CODE2(5, "码1或码2开门 (码1、码2的含义由平台和设备双方约定)"),
+ /**
+ * 人脸或腕带码或码2
+ */
+ EM_CUSTOMER_DEV_SETTING_DOOR_METHOD_WRISTBAND_OR_FACE_OR_CODE2(6, "人脸或腕带码或码2"),
+ /**
+ * 人脸+(码1或码2)
+ */
+ EM_CUSTOMER_DEV_SETTING_DOOR_METHOD_FACE_AND_CODE1_OR_CODE2(7, "人脸+(码1或码2)"),
+ /**
+ * (人脸或证件)+(码1或者码2)
+ */
+ EM_CUSTOMER_DEV_SETTING_DOOR_METHOD_FACE_OR_IDCARD_AND_CODE1_OR_CODE2(8, "(人脸或证件)+(码1或者码2)"),
+ /**
+ * 人脸或码1或码2或者腕带码
+ */
+ EM_CUSTOMER_DEV_SETTING_DOOR_METHOD_FACE_OR_IDCARD_OR_CODE1_OR_CODE2(9, "人脸或码1或码2或者腕带码");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CUSTOMER_DEV_SETTING_DOOR_METHOD(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CUSTOMER_DEV_SETTING_DOOR_METHOD enumType : EM_CUSTOMER_DEV_SETTING_DOOR_METHOD.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CUSTOMER_DEV_SETTING_DOOR_METHOD enumType : EM_CUSTOMER_DEV_SETTING_DOOR_METHOD.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CUSTOM_DEV_PROTOCOL_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CUSTOM_DEV_PROTOCOL_TYPE.java
new file mode 100644
index 0000000..1d75a8a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CUSTOM_DEV_PROTOCOL_TYPE.java
@@ -0,0 +1,79 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author : 47040
+ * @since : Created in 2020/8/13 9:54
+ */
+public enum EM_CUSTOM_DEV_PROTOCOL_TYPE {
+
+ /**
+ * Private
+ */
+ EM_CUSTOM_DEV_PROTOCOL_TYPE_PRIVATE(0, "Private"),
+ /**
+ * Dahua2
+ */
+ EM_CUSTOM_DEV_PROTOCOL_TYPE_DAHUA2(1, "Dahua2"),
+ /**
+ * Dahua3
+ */
+ EM_CUSTOM_DEV_PROTOCOL_TYPE_DAHUA3(2, "Dahua3"),
+ /**
+ * 以URL形式添加的设备
+ */
+ EM_CUSTOM_DEV_PROTOCOL_TYPE_GENERAL(3, "以URL形式添加的设备"),
+ /**
+ * Onvif接入
+ */
+ EM_CUSTOM_DEV_PROTOCOL_TYPE_ONVIF(4, "Onvif接入"),
+ /**
+ * Onvif加密形式接入
+ */
+ EM_CUSTOM_DEV_PROTOCOL_TYPE_ONVIFS(5, "Onvif加密形式接入"),
+ /**
+ * 国标28181接入
+ */
+ EM_CUSTOM_DEV_PROTOCOL_TYPE_GB28181(6, "国标28181接入"),
+ /**
+ * Ehome协议
+ */
+ EM_CUSTOM_DEV_PROTOCOL_TYPE_EHOME(7, "Ehome协议"),
+ /**
+ * 主动注册
+ */
+ EM_CUSTOM_DEV_PROTOCOL_TYPE_DAHUA_REG(8, "主动注册");
+
+ private int value;
+ private String note;
+
+ private EM_CUSTOM_DEV_PROTOCOL_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CUSTOM_DEV_PROTOCOL_TYPE enumType : EM_CUSTOM_DEV_PROTOCOL_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CUSTOM_DEV_PROTOCOL_TYPE enumType : EM_CUSTOM_DEV_PROTOCOL_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote()) ) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CUSTOM_EDUCATION_VOICE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CUSTOM_EDUCATION_VOICE_TYPE.java
new file mode 100644
index 0000000..8f932df
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CUSTOM_EDUCATION_VOICE_TYPE.java
@@ -0,0 +1,194 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 语音类型
+ * @date 2023/01/03 11:10:33
+ */
+public enum EM_CUSTOM_EDUCATION_VOICE_TYPE {
+ /**
+ * 未知
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 超时出校
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_LEAVE_SCHOOL_TIMEOUT(1, "超时出校"),
+ /**
+ * 超时进校
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_ENTER_SCHOOL_TIMEOUT(2, "超时进校"),
+ /**
+ * 出校
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_LEAVE_SCHOOL(3, "出校"),
+ /**
+ * 此卡未绑定
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_CARD_NOT_BIND(4, "此卡未绑定"),
+ /**
+ * 寄宿生
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_BOARDER(5, "寄宿生"),
+ /**
+ * 家长卡已挂失
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_PARENT_CARD_REPORT_LOST(6, "家长卡已挂失"),
+ /**
+ * 进校已过期
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_ENTER_SCHOOL_OVERDUE(7, "进校已过期"),
+ /**
+ * 您有包裹待领取
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_PACKAGE_TO_PICKUP(8, "您有包裹待领取"),
+ /**
+ * 请假
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_ASKFORLEAVE(9, "请假"),
+ /**
+ * 请假返校超时
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_RETURN_SCHOOL_TIMEOUT_WHEN_ASKFORLEAVE(10, "请假返校超时"),
+ /**
+ * 请假进出校时间未到
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_INANDOUT_SCHOOL_TIMENOTUP_WHEN_ASKFORLEAVE(11, "请假进出校时间未到"),
+ /**
+ * 请假拒绝出校
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_REFUSE_LEAVE_SCHOOL_WHEN_ASKFORLEAVE(12, "请假拒绝出校"),
+ /**
+ * 请假拒绝进校
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_REFUSE_ENTER_SCHOOL_WHEN_ASKFORLEAVE(13, "请假拒绝进校"),
+ /**
+ * 请假审核中
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_ASKFORLEAVE_IN_REVIEW(14, "请假审核中"),
+ /**
+ * 请假已过期
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_ASKFORLEAVE_EXPIRED(15, "请假已过期"),
+ /**
+ * 请假已批准
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_ASKFORLEAVE_APPROVED(16, "请假已批准"),
+ /**
+ * 请假已失效禁止重复出校
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_FORBID_LEAVE_SCHOOL_WITH_LEAVE_INVALID(17, "请假已失效禁止重复出校"),
+ /**
+ * 时间未到
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_TIME_ISNOT_UP(18, "时间未到"),
+ /**
+ * 未预约
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_NOT_APPOINT(19, "未预约"),
+ /**
+ * 未在允许时段内禁止通行
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_NO_PASSAGE_IN_NONPERMIT_TIMESECTION(20, "未在允许时段内禁止通行"),
+ /**
+ * 无效卡
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_INVALID_CARD(21, "无效卡"),
+ /**
+ * 已预约
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_ALREADY_APPOINTED(22, "已预约"),
+ /**
+ * 允许返校
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_ALLOW_BACK_SCHOOL(23, "允许返校"),
+ /**
+ * 再见
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_GOODBYE(24, "再见"),
+ /**
+ * 正常进校
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_ENTER_SCHOOL_NORMALLY(25, "正常进校"),
+ /**
+ * 重复出校
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_REPEAT_LEAVE_SCHOOLL(26, "重复出校"),
+ /**
+ * 重复进校
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_REPEAT_ENTER_SCHOOLL(27, "重复进校"),
+ /**
+ * 走读生
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_DAY_STUDENT(28, "走读生"),
+ /**
+ * 欢迎光临
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_WELCOME(29, "欢迎光临"),
+ /**
+ * 教职工
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_FACULTY(30, "教职工"),
+ /**
+ * 老师
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_TEACHER(31, "老师"),
+ /**
+ * 老师好
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_HELLO_TEACHER(32, "老师好"),
+ /**
+ * 允许访问
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_ALLOW_ACCESS(33, "允许访问"),
+ /**
+ * tts文字语音输出
+ */
+ EM_CUSTOM_EDUCATION_VOICE_TYPE_TTS_TEXT_VOICE_OUTPUT(50, "tts文字语音输出");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CUSTOM_EDUCATION_VOICE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CUSTOM_EDUCATION_VOICE_TYPE enumType : EM_CUSTOM_EDUCATION_VOICE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CUSTOM_EDUCATION_VOICE_TYPE enumType : EM_CUSTOM_EDUCATION_VOICE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_CUSTOM_EDUCATION_VOICE_TYPE getEnum(int value) {
+ for (EM_CUSTOM_EDUCATION_VOICE_TYPE e : EM_CUSTOM_EDUCATION_VOICE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_CUSTOM_EDUCATION_VOICE_TYPE.EM_CUSTOM_EDUCATION_VOICE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CUSTOM_MEDICAL_VOICE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CUSTOM_MEDICAL_VOICE_TYPE.java
new file mode 100644
index 0000000..321ab5c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CUSTOM_MEDICAL_VOICE_TYPE.java
@@ -0,0 +1,86 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 语音类型
+ * @date 2022/11/15 20:11:54
+ */
+public enum EM_CUSTOM_MEDICAL_VOICE_TYPE {
+ /**
+ * 未知
+ */
+ EM_CUSTOM_MEDICAL_VOICE_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 门已打开,可以进入
+ */
+ EM_CUSTOM_MEDICAL_VOICE_TYPE_1(1, "门已打开,可以进入"),
+ /**
+ * 不是本科室,不能进入
+ */
+ EM_CUSTOM_MEDICAL_VOICE_TYPE_2(2, "不是本科室,不能进入"),
+ /**
+ * 已出院,不能进入
+ */
+ EM_CUSTOM_MEDICAL_VOICE_TYPE_3(3, "已出院,不能进入"),
+ /**
+ * 核酸检测超期,不能进入
+ */
+ EM_CUSTOM_MEDICAL_VOICE_TYPE_4(4, "核酸检测超期,不能进入"),
+ /**
+ * 体温不正常,不能进入
+ */
+ EM_CUSTOM_MEDICAL_VOICE_TYPE_5(5, "体温不正常,不能进入"),
+ /**
+ * 证件信息缺失,不能进入
+ */
+ EM_CUSTOM_MEDICAL_VOICE_TYPE_6(6, "证件信息缺失,不能进入"),
+ /**
+ * 其他问题,不能进入
+ */
+ EM_CUSTOM_MEDICAL_VOICE_TYPE_7(7, "其他问题,不能进入");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_CUSTOM_MEDICAL_VOICE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_CUSTOM_MEDICAL_VOICE_TYPE enumType : EM_CUSTOM_MEDICAL_VOICE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_CUSTOM_MEDICAL_VOICE_TYPE enumType : EM_CUSTOM_MEDICAL_VOICE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_CUSTOM_MEDICAL_VOICE_TYPE getEnum(int value) {
+ for (EM_CUSTOM_MEDICAL_VOICE_TYPE e : EM_CUSTOM_MEDICAL_VOICE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_CUSTOM_MEDICAL_VOICE_TYPE.EM_CUSTOM_MEDICAL_VOICE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CUSTOM_PASSWORD_ENCRYPTION_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CUSTOM_PASSWORD_ENCRYPTION_MODE.java
new file mode 100644
index 0000000..f8a1cb1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CUSTOM_PASSWORD_ENCRYPTION_MODE.java
@@ -0,0 +1,19 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * AccessControlCustomPassword记录集中密码的保存方式
+ */
+public enum EM_CUSTOM_PASSWORD_ENCRYPTION_MODE {
+ /**
+ * 未知方式
+ */
+ EM_CUSTOM_PASSWORD_ENCRYPTION_MODE_UNKNOWN,
+ /**
+ * 明文
+ */
+ EM_CUSTOM_PASSWORD_ENCRYPTION_MODE_PLAINTEXT,
+ /**
+ * MD5加密方式
+ */
+ EM_CUSTOM_PASSWORD_ENCRYPTION_MODE_MD5,
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_CUSTOM_SNAP_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_CUSTOM_SNAP_TYPE.java
new file mode 100644
index 0000000..768f59d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_CUSTOM_SNAP_TYPE.java
@@ -0,0 +1,62 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 自定义抓图类型
+* @date 2022/03/31 14:04:19
+*/
+public enum EM_CUSTOM_SNAP_TYPE {
+/**
+未知
+*/
+EM_CUSTOM_SNAP_UNKNOWN(0,"未知"),
+/**
+猪体温检测, 对应结构体 NET_PIG_TEMPERATURE_INFO
+*/
+EM_CUSTOM_SNAP_PIG_TEMPERATURE(1,"猪体温检测, 对应结构体 NET_PIG_TEMPERATURE_INFO");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_CUSTOM_SNAP_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_CUSTOM_SNAP_TYPE enumType : EM_CUSTOM_SNAP_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_CUSTOM_SNAP_TYPE enumType : EM_CUSTOM_SNAP_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_CUSTOM_SNAP_TYPE getEnum(int value) {
+ for (EM_CUSTOM_SNAP_TYPE e : EM_CUSTOM_SNAP_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_CUSTOM_SNAP_TYPE.EM_CUSTOM_SNAP_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DATA_SOURCE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_DATA_SOURCE_TYPE.java
new file mode 100644
index 0000000..18d441f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DATA_SOURCE_TYPE.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 291189
+ * @description 智能分析数据源类型
+ * @date 2022/06/28 15:29:39
+ */
+public enum EM_DATA_SOURCE_TYPE {
+ /**
+ 未知
+ */
+ EM_DATA_SOURCE_REMOTE_UNKNOWN(0,"未知"),
+ /**
+ 远程实时流 , 对应 NET_REMOTE_REALTIME_STREAM_INFO
+ */
+ EM_DATA_SOURCE_REMOTE_REALTIME_STREAM(1,"远程实时流 , 对应 NET_REMOTE_REALTIME_STREAM_INFO"),
+ /**
+ 主动推送图片文件, 对应 NET_PUSH_PICFILE_INFO
+ */
+ EM_DATA_SOURCE_PUSH_PICFILE(2,"主动推送图片文件, 对应 NET_PUSH_PICFILE_INFO"),
+ /**
+ 远程视频文件, 对应 NET_REMOTE_VIDEO_FILE_INFO
+ */
+ EM_DATA_SOURCE_REMOTE_VIDEO_FILE(3,"远程视频文件, 对应 NET_REMOTE_VIDEO_FILE_INFO"),
+ /**
+ 远程图片文件, 对应 NET_REMOTE_PICTURE_FILE_INFO
+ */
+ EM_DATA_SOURCE_REMOTE_PICTURE_FILE(4,"远程图片文件, 对应 NET_REMOTE_PICTURE_FILE_INFO"),
+ /**
+ 离线视频文件(第三方导入的文件), 对应 NET_OFFLINE_VIDEO_FILE_INFO
+ */
+ EM_DATA_SOURCE_OFFLINE_VIDEO_FILE(5,"离线视频文件(第三方导入的文件), 对应 NET_OFFLINE_VIDEO_FILE_INFO"),
+ /**
+ 主动推送图片文件,添加任务时无规则和图片信息,通过推送图片接口,每张图片中带有不同的规则信息(目前能源场景中使用), 对应 NET_PUSH_PICFILE_BYRULE_INFO
+ */
+ EM_DATA_SOURCE_PUSH_PICFILE_BYRULE(6,"主动推送图片文件,添加任务时无规则和图片信息,通过推送图片接口,每张图片中带有不同的规则信息(目前能源场景中使用), 对应 NET_PUSH_PICFILE_BYRULE_INFO"),
+ /**
+ 本地实时流, 对应 NET_LOCAL_STREAM_INFO
+ */
+ EM_DATA_SOURCE_LOCAL_STREAM(7,"本地实时流, 对应 NET_LOCAL_STREAM_INFO");
+
+ private int type;
+ private String des;
+
+ private EM_DATA_SOURCE_TYPE(int type, String des) {
+ this.type = type;
+ this.des = des;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public String getDes() {
+ return des;
+ }
+
+ public void setDes(String des) {
+ this.des = des;
+ }
+
+ public static EM_DATA_SOURCE_TYPE getDataSourceType(int type) {
+ for (EM_DATA_SOURCE_TYPE source : EM_DATA_SOURCE_TYPE.values()) {
+ if (type == source.getType()) {
+ return source;
+ }
+ }
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DEFENCE_AREA_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_DEFENCE_AREA_TYPE.java
new file mode 100644
index 0000000..2255f88
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DEFENCE_AREA_TYPE.java
@@ -0,0 +1,102 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 防区类型
+* @date 2022/07/19 19:31:27
+*/
+public enum EM_DEFENCE_AREA_TYPE {
+/**
+未知
+*/
+EM_DEFENCE_AREA_TYPE_UNKNOWN(0,"未知"),
+/**
+立即防区
+*/
+EM_DEFENCE_AREA_TYPE_INTIME(1,"立即防区"),
+/**
+延时防区
+*/
+EM_DEFENCE_AREA_TYPE_DELAY(2,"延时防区"),
+/**
+延时防区2
+*/
+EM_DEFENCE_AREA_TYPE_DELAY2(3,"延时防区2"),
+/**
+跟随防区
+*/
+EM_DEFENCE_AREA_TYPE_FOLLOW(4,"跟随防区"),
+/**
+退出防区
+*/
+EM_DEFENCE_AREA_TYPE_EXITEND(5,"退出防区"),
+/**
+24小时防区
+*/
+EM_DEFENCE_AREA_TYPE_FULLDAY(6,"24小时防区"),
+/**
+火警防区
+*/
+EM_DEFENCE_AREA_TYPE_FIRE(7,"火警防区"),
+/**
+恐慌防区
+*/
+EM_DEFENCE_AREA_TYPE_PANIC(8,"恐慌防区"),
+/**
+匪警防区
+*/
+EM_DEFENCE_AREA_TYPE_ROBBERY(9,"匪警防区"),
+/**
+医疗紧急防区
+*/
+EM_DEFENCE_AREA_TYPE_MEDICAL(10,"医疗紧急防区"),
+/**
+key防区
+*/
+EM_DEFENCE_AREA_TYPE_KEY(11,"key防区");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_DEFENCE_AREA_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_DEFENCE_AREA_TYPE enumType : EM_DEFENCE_AREA_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_DEFENCE_AREA_TYPE enumType : EM_DEFENCE_AREA_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_DEFENCE_AREA_TYPE getEnum(int value) {
+ for (EM_DEFENCE_AREA_TYPE e : EM_DEFENCE_AREA_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_DEFENCE_AREA_TYPE.EM_DEFENCE_AREA_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DELETE_BY_SOURCEUID_ERRCODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_DELETE_BY_SOURCEUID_ERRCODE.java
new file mode 100644
index 0000000..9487534
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DELETE_BY_SOURCEUID_ERRCODE.java
@@ -0,0 +1,69 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 通过全景图唯一标识符删除工装合规样本错误码信息
+ * @date 2022/10/08 20:13:32
+ */
+public enum EM_DELETE_BY_SOURCEUID_ERRCODE {
+ /**
+ * 未知
+ */
+ EM_DELETE_BY_SOURCEUID_ERRCODE_UNKNWON(-1, "未知"),
+ /**
+ * 成功
+ */
+ EM_DELETE_BY_SOURCEUID_ERRCODE_SUCCESS(0, "成功"),
+ /**
+ * 工装不存在
+ */
+ EM_DELETE_BY_SOURCEUID_ERRCODE_NOT_EXIST(1, "工装不存在"),
+ /**
+ * 数据库操作失败
+ */
+ EM_DELETE_BY_SOURCEUID_ERRCODE_DB_ERROR(2, "数据库操作失败");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_DELETE_BY_SOURCEUID_ERRCODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_DELETE_BY_SOURCEUID_ERRCODE enumType : EM_DELETE_BY_SOURCEUID_ERRCODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_DELETE_BY_SOURCEUID_ERRCODE enumType : EM_DELETE_BY_SOURCEUID_ERRCODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+ public static EM_DELETE_BY_SOURCEUID_ERRCODE getEnum(int value) {
+ for (EM_DELETE_BY_SOURCEUID_ERRCODE e : EM_DELETE_BY_SOURCEUID_ERRCODE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_DELETE_BY_SOURCEUID_ERRCODE.EM_DELETE_BY_SOURCEUID_ERRCODE_UNKNWON;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DELIVERY_FILE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_DELIVERY_FILE_TYPE.java
new file mode 100644
index 0000000..5c4b3a1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DELIVERY_FILE_TYPE.java
@@ -0,0 +1,48 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description
+ * @date 2020/9/14
+ */
+public enum EM_DELIVERY_FILE_TYPE {
+ /**
+ * 未知
+ */
+ EM_DELIVERY_FILE_TYPE_UNKNOWN(0,"未知"),
+ /**
+ * 视频
+ */
+ EM_DELIVERY_FILE_TYPE_VIDEO(1,"视频"),
+ /**
+ * 图片
+ */
+ EM_DELIVERY_FILE_TYPE_IMAGE(2,"图片"),
+ /**
+ * 音频
+ */
+ EM_DELIVERY_FILE_TYPE_AUDIO(3,"音频");
+ private int type;
+ private String desc;
+ private EM_DELIVERY_FILE_TYPE(int type,String desc){
+ this.type=type;
+ this.desc=desc;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DETECTION_SCENE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_DETECTION_SCENE_TYPE.java
new file mode 100644
index 0000000..9bb81a5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DETECTION_SCENE_TYPE.java
@@ -0,0 +1,71 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 动物检测规则下的场景类型
+ * @since : Created in 2021/11/05 15:07
+ */
+
+public enum EM_DETECTION_SCENE_TYPE {
+ /**
+ * 未知
+ */
+ EM_DETECTION_SCENE_TYPE_UNKNOWN(0,"未知"),
+ /**
+ * 兽类场景,可检测动物、人、车
+ */
+ EM_DETECTION_SCENE_TYPE_ANIMAL(1,"兽类场景,可检测动物、人、车"),
+ /**
+ * 鸟类场景,可检测鸟类,人、车
+ */
+ EM_DETECTION_SCENE_TYPE_BIRD(2,"鸟类场景,可检测鸟类,人、车"),
+ /**
+ * 猪类场景,可检测猪只
+ */
+ EM_DETECTION_SCENE_TYPE_PIG(3, "猪类场景,可检测猪只");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_DETECTION_SCENE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_DETECTION_SCENE_TYPE enumType : EM_DETECTION_SCENE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_DETECTION_SCENE_TYPE enumType : EM_DETECTION_SCENE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_DETECTION_SCENE_TYPE getEnum(int value) {
+ for (EM_DETECTION_SCENE_TYPE e : EM_DETECTION_SCENE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_DETECTION_SCENE_TYPE.EM_DETECTION_SCENE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DETECTOR_STATUS_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_DETECTOR_STATUS_TYPE.java
new file mode 100644
index 0000000..a5569bf
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DETECTOR_STATUS_TYPE.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 探测器状态类型
+* @date 2022/08/31 14:44:15
+*/
+public enum EM_DETECTOR_STATUS_TYPE {
+/**
+未知
+*/
+EM_DETECTOR_STATUS_UNKNOWN(-1,"未知"),
+/**
+启用所有功能
+*/
+EM_DETECTOR_STATUS_ALLFUNCT_ENABLE(0,"启用所有功能"),
+/**
+禁用防拆功能
+*/
+EM_DETECTOR_STATUS_ANTITAMPER_DISABLE(1,"禁用防拆功能"),
+/**
+禁用所有功能
+*/
+EM_DETECTOR_STATUS_ALLFUNCT_DISABLE(2,"禁用所有功能");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_DETECTOR_STATUS_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_DETECTOR_STATUS_TYPE enumType : EM_DETECTOR_STATUS_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_DETECTOR_STATUS_TYPE enumType : EM_DETECTOR_STATUS_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_DETECTOR_STATUS_TYPE getEnum(int value) {
+ for (EM_DETECTOR_STATUS_TYPE e : EM_DETECTOR_STATUS_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_DETECTOR_STATUS_TYPE.EM_DETECTOR_STATUS_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DETECT_OBJECT.java b/src/main/java/com/netsdk/lib/enumeration/EM_DETECT_OBJECT.java
new file mode 100644
index 0000000..5b3cb26
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DETECT_OBJECT.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 目标类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:34
+ */
+public class EM_DETECT_OBJECT extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_DETECT_OBJECT_TYPE_UNKNOWN = 0;
+ /**
+ * 人脸
+ */
+ public static final int EM_DETECT_OBJECT_TYPE_FACE = 1;
+ /**
+ * 车辆
+ */
+ public static final int EM_DETECT_OBJECT_TYPE_VEHICLE = 2;
+ /**
+ * 结构化
+ */
+ public static final int EM_DETECT_OBJECT_TYPE_STRUCTLIZE = 3;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DETECT_OBJECT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_DETECT_OBJECT_TYPE.java
new file mode 100644
index 0000000..a70a33c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DETECT_OBJECT_TYPE.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 目标类型
+ * @date 2022/11/21 17:53:12
+ */
+public enum EM_DETECT_OBJECT_TYPE {
+ /**
+ * 未知
+ */
+ EM_DETECT_OBJECT_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 人脸
+ */
+ EM_DETECT_OBJECT_TYPE_FACE(1, "人脸"),
+ /**
+ * 车辆
+ */
+ EM_DETECT_OBJECT_TYPE_VEHICLE(2, "车辆"),
+ /**
+ * 结构化
+ */
+ EM_DETECT_OBJECT_TYPE_STRUCTLIZE(3, "结构化");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_DETECT_OBJECT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_DETECT_OBJECT_TYPE enumType : EM_DETECT_OBJECT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_DETECT_OBJECT_TYPE enumType : EM_DETECT_OBJECT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_DETECT_OBJECT_TYPE getEnum(int value) {
+ for (EM_DETECT_OBJECT_TYPE e : EM_DETECT_OBJECT_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_DETECT_OBJECT_TYPE.EM_DETECT_OBJECT_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DETECT_SENSOR_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_DETECT_SENSOR_TYPE.java
new file mode 100644
index 0000000..6ab3101
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DETECT_SENSOR_TYPE.java
@@ -0,0 +1,76 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 探测物体的传感器类型
+ *
+ * @author : 47040
+ * @since : Created in 2020/12/17 13:45
+ */
+public enum EM_DETECT_SENSOR_TYPE {
+ /**
+ * 未知
+ */
+ EM_DETECT_SENSOR_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 线圈
+ */
+ EM_DETECT_SENSOR_TYPE_COIL(1, "线圈"),
+ /**
+ * 视频
+ */
+ EM_DETECT_SENSOR_TYPE_VIDEO(2, "视频"),
+ /**
+ * 雷达
+ */
+ EM_DETECT_SENSOR_TYPE_RADAR(3, "雷达"),
+ /**
+ * 5G
+ */
+ EM_DETECT_SENSOR_TYPE_5G(4, "5G"),
+ /**
+ * 融合
+ */
+ EM_DETECT_SENSOR_TYPE_FUSION(5, "融合");
+
+ private final int value;
+ private final String note;
+
+ EM_DETECT_SENSOR_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_DETECT_SENSOR_TYPE enumType : EM_DETECT_SENSOR_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_DETECT_SENSOR_TYPE enumType : EM_DETECT_SENSOR_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_DETECT_SENSOR_TYPE getEnum(int value) {
+ for (EM_DETECT_SENSOR_TYPE e : EM_DETECT_SENSOR_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_DETECT_SENSOR_TYPE.EM_DETECT_SENSOR_TYPE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DEV_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_DEV_STATUS.java
new file mode 100644
index 0000000..db4a428
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DEV_STATUS.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 设备状态
+* @date 2022/10/09 11:29:42
+*/
+public enum EM_DEV_STATUS {
+/**
+未知
+*/
+EM_DEV_STATUS_UNKNOWN(-1,"未知"),
+/**
+离线
+*/
+EM_DEV_STATUS_OFFLINE(0,"离线"),
+/**
+在线
+*/
+EM_DEV_STATUS_ONLINE(1,"在线");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_DEV_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_DEV_STATUS enumType : EM_DEV_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_DEV_STATUS enumType : EM_DEV_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_DEV_STATUS getEnum(int value) {
+ for (EM_DEV_STATUS e : EM_DEV_STATUS.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_DEV_STATUS.EM_DEV_STATUS_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DEV_VARIABLE_CARS_MANAGER_FUNC_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_DEV_VARIABLE_CARS_MANAGER_FUNC_TYPE.java
new file mode 100644
index 0000000..3b05209
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DEV_VARIABLE_CARS_MANAGER_FUNC_TYPE.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * className:EM_DEV_VARIABLE_CARS_MANAGER_FUNC_TYPE
+ * description:
+ * 枚举值,下发设置&获取设置
+ *
+ * author:251589
+ * createTime:2020/12/29 14:04
+ *
+ * @version v1.0
+ */
+public class EM_DEV_VARIABLE_CARS_MANAGER_FUNC_TYPE {
+
+ public static final int EM_DEV_VARIABLE_CARS_MANAGER_FUNC_TYPE_UNKNOWN = 0; // 未知
+ public static final int EM_DEV_VARIABLE_CARS_MANAGER_FUNC_TYPE_FACE_DETECTION = 1; // 人脸检测
+ public static final int EM_DEV_VARIABLE_CARS_MANAGER_FUNC_TYPE_FACE_ANALYSIS = 2; // 人脸分析
+ public static final int EM_DEV_VARIABLE_CARS_MANAGER_FUNC_TYPE_FACE_ATTRIBUTE = 3; // 人脸属性
+ public static final int EM_DEV_VARIABLE_CARS_MANAGER_FUNC_TYPE_FACE_COMPARE = 4; // 人脸比对
+ public static final int EM_DEV_VARIABLE_CARS_MANAGER_FUNC_TYPE_NORMAL = 5; // 智能通用行为分析
+ public static final int EM_DEV_VARIABLE_CARS_MANAGER_FUNC_TYPE_OBJECT_DETECT = 6; // 智能 视频结构化
+ public static final int EM_DEV_VARIABLE_CARS_MANAGER_FUNC_TYPE_SMART_MOTION = 7; // 动检,对应的结构体 NET_CFG_SMART_MOTION_DETECT
+ public static final int EM_DEV_VARIABLE_CARS_MANAGER_FUNC_TYPE_ENCODE_ENHANCE = 8; // 编码增强
+ public static final int EM_DEV_VARIABLE_CARS_MANAGER_FUNC_TYPE_ONE_KEY_EXPAND = 9; // 一键扩展
+ public static final int EM_DEV_VARIABLE_CARS_MANAGER_FUNC_TYPE_NUMBER_STAT = 10; // 人数统计
+ public static final int EM_DEV_VARIABLE_CARS_MANAGER_FUNC_TYPE_INTELLIGENT = 11; // 智能功能,表示所有智能功能
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DIALDETECT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_DIALDETECT_TYPE.java
new file mode 100644
index 0000000..d09a3bd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DIALDETECT_TYPE.java
@@ -0,0 +1,110 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 仪表类型
+* @date 2022/06/30 11:30:53
+*/
+public enum EM_DIALDETECT_TYPE {
+/**
+未知
+*/
+EM_DIALDETECT_TYPE_UNKNOWN(0,"未知"),
+/**
+压板检测
+*/
+EM_DIALDETECT_TYPE_PLATEN(1,"压板检测"),
+/**
+刀闸检测
+*/
+EM_DIALDETECT_TYPE_KNIFE(2,"刀闸检测"),
+/**
+指针表计检测
+*/
+EM_DIALDETECT_TYPE_POINTERMETER(3,"指针表计检测"),
+/**
+油位表计
+*/
+EM_DIALDETECT_TYPE_OILMETER(4,"油位表计"),
+/**
+数码管字符检测
+*/
+EM_DIALDETECT_TYPE_LED(5,"数码管字符检测"),
+/**
+液晶屏字符检测
+*/
+EM_DIALDETECT_TYPE_LCD(6,"液晶屏字符检测"),
+/**
+指示灯检测
+*/
+EM_DIALDETECT_TYPE_LIGHT(7,"指示灯检测"),
+/**
+旋转开关检测
+*/
+EM_DIALDETECT_TYPE_SWITCH(8,"旋转开关检测"),
+/**
+呼吸器检测
+*/
+EM_DIALDETECT_TYPE_PESPIRATOR(9,"呼吸器检测"),
+/**
+字符指示器检测
+*/
+EM_DIALDETECT_TYPE_CHARLNDICTOR(10,"字符指示器检测"),
+/**
+指针指示器检测
+*/
+EM_DIALDETECT_TYPE_POINTERLNDICTOR(11,"指针指示器检测"),
+/**
+液位计检测
+*/
+EM_DIALDETECT_TYPE_OILLEVEL(12,"液位计检测"),
+/**
+拨码盘字符检测
+*/
+EM_DIALDETECT_TYPE_DIALSWTICH(13,"拨码盘字符检测");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_DIALDETECT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_DIALDETECT_TYPE enumType : EM_DIALDETECT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_DIALDETECT_TYPE enumType : EM_DIALDETECT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_DIALDETECT_TYPE getEnum(int value) {
+ for (EM_DIALDETECT_TYPE e : EM_DIALDETECT_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_DIALDETECT_TYPE.EM_DIALDETECT_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DIAL_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_DIAL_STATE.java
new file mode 100644
index 0000000..2a10426
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DIAL_STATE.java
@@ -0,0 +1,78 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 表盘状态
+* @date 2022/06/28 19:44:55
+*/
+public enum EM_DIAL_STATE {
+/**
+未知
+*/
+EM_DIAL_STATE_UNKNOWN(0,"未知"),
+/**
+正常
+*/
+EM_DIAL_STATE_NORMAL(1,"正常"),
+/**
+模糊
+*/
+EM_DIAL_STATE_DIM(2,"模糊"),
+/**
+表盘破损
+*/
+EM_DIAL_STATE_DIAL_BROKEN(3,"表盘破损"),
+/**
+外壳破裂
+*/
+EM_DIAL_STATE_SHELL_BROKEN(4,"外壳破裂"),
+/**
+读数异常
+*/
+EM_DIAL_STATE_ABNORMAL_READING(5,"读数异常");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_DIAL_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_DIAL_STATE enumType : EM_DIAL_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_DIAL_STATE enumType : EM_DIAL_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_DIAL_STATE getEnum(int value) {
+ for (EM_DIAL_STATE e : EM_DIAL_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_DIAL_STATE.EM_DIAL_STATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DIRECTION_AFTER_POWER_OFF.java b/src/main/java/com/netsdk/lib/enumeration/EM_DIRECTION_AFTER_POWER_OFF.java
new file mode 100644
index 0000000..ecdd306
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DIRECTION_AFTER_POWER_OFF.java
@@ -0,0 +1,48 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 闸机断电以后门摆动放向
+ * @date 2021/2/7
+ */
+public enum EM_DIRECTION_AFTER_POWER_OFF {
+ /** 未知 */
+ EM_DIRECTION_AFTER_POWER_OFF_UNKNOWN(-1, "未知"),
+ /** 进门方向 */
+ EM_DIRECTION_AFTER_POWER_OFF_IN(0, "进门方向"),
+ /** 出门方向 */
+ EM_DIRECTION_AFTER_POWER_OFF_OUT(1, "出门方向");
+ private int mode;
+ private String desc;
+
+ EM_DIRECTION_AFTER_POWER_OFF(int mode, String desc) {
+ this.mode = mode;
+ this.desc = desc;
+ }
+
+ public static EM_DIRECTION_AFTER_POWER_OFF getEmDirectionAfterPowerOff(int mode) {
+ for (EM_DIRECTION_AFTER_POWER_OFF powerOff : EM_DIRECTION_AFTER_POWER_OFF.values()) {
+ if (powerOff.mode == mode) {
+ return powerOff;
+ }
+ }
+ return EM_DIRECTION_AFTER_POWER_OFF_UNKNOWN;
+ }
+
+ public int getMode() {
+ return mode;
+ }
+
+ public void setMode(int mode) {
+ this.mode = mode;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DISK_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_DISK_STATE.java
new file mode 100644
index 0000000..cf11d5c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DISK_STATE.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 光盘状态
+ * @date 2021/2/22
+ */
+public enum EM_DISK_STATE {
+ /** 未知 */
+ EM_DISK_STATE_UNKNOWN,
+ /** 已放磁盘 */
+ EM_DISK_STATE_EXIST,
+ /** 未放磁盘 */
+ EM_DISK_STATE_NO_EXIST,
+ /** 需要换盘 */
+ EM_DISK_STATE_NEED_CHANGE;
+
+ public static EM_DISK_STATE getDiskState(int state) {
+ for (EM_DISK_STATE diskState : EM_DISK_STATE.values()) {
+ if (diskState.ordinal() == state) {
+ return diskState;
+ }
+ }
+ return EM_DISK_STATE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DISPLAY_CAMERA_ANGLE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_DISPLAY_CAMERA_ANGLE_TYPE.java
new file mode 100644
index 0000000..9e28e12
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DISPLAY_CAMERA_ANGLE_TYPE.java
@@ -0,0 +1,53 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 摄像头安装角度显示方式
+ * @date 2021/01/11
+ */
+public enum EM_DISPLAY_CAMERA_ANGLE_TYPE {
+
+ // 未知的显示方式
+ EM_DISPLAY_CAMERA_ANGLE_UNKNOWN(0, "未知的显示方式"),
+
+ // 按角度值配置(默认)
+ EM_DISPLAY_CAMERA_ANGLE_NUM(1, "按角度值配置"),
+
+ // 按模式配置,0~20展示为顶装,21~90展示为斜装,配置时按60下发
+ EM_DISPLAY_CAMERA_ANGLE_MODE(2, "按模式配置");
+
+ private int value;
+ private String note;
+
+ private EM_DISPLAY_CAMERA_ANGLE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_DISPLAY_CAMERA_ANGLE_TYPE enumType : EM_DISPLAY_CAMERA_ANGLE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_DISPLAY_CAMERA_ANGLE_TYPE enumType : EM_DISPLAY_CAMERA_ANGLE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DOOR_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_DOOR_STATE.java
new file mode 100644
index 0000000..4c6af6f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DOOR_STATE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 箱门状态
+* @date 2022/06/28 19:44:55
+*/
+public enum EM_DOOR_STATE {
+/**
+未知
+*/
+EM_DOOR_STATE_UNKNOWN(0,"未知"),
+/**
+打开
+*/
+EM_DOOR_STATE_OPEN(1,"打开"),
+/**
+关闭
+*/
+EM_DOOR_STATE_CLOSE(2,"关闭");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_DOOR_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_DOOR_STATE enumType : EM_DOOR_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_DOOR_STATE enumType : EM_DOOR_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_DOOR_STATE getEnum(int value) {
+ for (EM_DOOR_STATE e : EM_DOOR_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_DOOR_STATE.EM_DOOR_STATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DOWNLOAD_DATA_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_DOWNLOAD_DATA_TYPE.java
new file mode 100644
index 0000000..259b5cd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DOWNLOAD_DATA_TYPE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 下载数据类型
+ *
+ * @author : 47040
+ * @since : Created in 2020/12/28 16:03
+ */
+public enum EM_DOWNLOAD_DATA_TYPE {
+
+ EM_DOWNLOAD_DATA_RECORD(0, "录像"),
+ EM_DOWNLOAD_DATA_PICTURE(1, "图片");
+
+ private final int value;
+ private final String note;
+
+ EM_DOWNLOAD_DATA_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_DOWNLOAD_DATA_TYPE enumType : EM_DOWNLOAD_DATA_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_DOWNLOAD_DATA_TYPE enumType : EM_DOWNLOAD_DATA_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_DOWNLOAD_DATA_TYPE getEnum(int value) {
+ for (EM_DOWNLOAD_DATA_TYPE e : EM_DOWNLOAD_DATA_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_DOWNLOAD_DATA_TYPE.EM_DOWNLOAD_DATA_RECORD;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DOWNLOAD_FILE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_DOWNLOAD_FILE_TYPE.java
new file mode 100644
index 0000000..090a4bd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DOWNLOAD_FILE_TYPE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 下载文件方式
+ *
+ * @author : 47040
+ * @since : Created in 2020/12/28 15:25
+ */
+public enum EM_DOWNLOAD_FILE_TYPE {
+
+ EM_DOWNLOAD_BY_FILENAME(0,"按文件名下载"),
+ EM_DOWNLOAD_BY_CONDITION(1,"按条件下载");
+
+ private final int value;
+ private final String note;
+
+ EM_DOWNLOAD_FILE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_DOWNLOAD_FILE_TYPE enumType : EM_DOWNLOAD_FILE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_DOWNLOAD_FILE_TYPE enumType : EM_DOWNLOAD_FILE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_DOWNLOAD_FILE_TYPE getEnum(int value) {
+ for (EM_DOWNLOAD_FILE_TYPE e : EM_DOWNLOAD_FILE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_DOWNLOAD_FILE_TYPE.EM_DOWNLOAD_BY_FILENAME;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DOWNLOAD_TIME_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_DOWNLOAD_TIME_TYPE.java
new file mode 100644
index 0000000..2793e69
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DOWNLOAD_TIME_TYPE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 下载时间类型
+ *
+ * @author : 47040
+ * @since : Created in 2020/12/28 15:58
+ */
+public enum EM_DOWNLOAD_TIME_TYPE {
+
+ EM_DOWNLOAD_TIME_SNAP(0, "抓拍时间"),
+ EM_DOWNLOAD_TIME_STORAGE(1, "存储时间");
+
+ private final int value;
+ private final String note;
+
+ EM_DOWNLOAD_TIME_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_DOWNLOAD_TIME_TYPE enumType : EM_DOWNLOAD_TIME_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_DOWNLOAD_TIME_TYPE enumType : EM_DOWNLOAD_TIME_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_DOWNLOAD_TIME_TYPE getEnum(int value) {
+ for (EM_DOWNLOAD_TIME_TYPE e : EM_DOWNLOAD_TIME_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_DOWNLOAD_TIME_TYPE.EM_DOWNLOAD_TIME_SNAP;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DRIVING_DIRECTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_DRIVING_DIRECTION.java
new file mode 100644
index 0000000..cbf45d5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DRIVING_DIRECTION.java
@@ -0,0 +1,51 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_DRIVING_DIRECTION {
+
+ /**
+ * 未知
+ */
+ EM_DRIVING_DIRECTION_UNKNOWN(0,"未知"),
+ /**
+ * 驶入
+ */
+ EM_DRIVING_DIRECTION_IN(1,"驶入"),
+ /**
+ * 驶出
+ */
+ EM_DRIVING_DIRECTION_OUT(2,"驶出");
+
+ private int value;
+ private String note;
+
+ private EM_DRIVING_DIRECTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_DRIVING_DIRECTION enumType : EM_DRIVING_DIRECTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_DRIVING_DIRECTION enumType : EM_DRIVING_DIRECTION.values()) {
+ if (givenNote.equals(enumType.getNote()) ) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_DYNAMIC_LOCK_ERRORCODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_DYNAMIC_LOCK_ERRORCODE.java
new file mode 100644
index 0000000..0a38c1b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_DYNAMIC_LOCK_ERRORCODE.java
@@ -0,0 +1,78 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 动态密码锁错误码
+* @date 2022/06/23 10:09:19
+*/
+public enum EM_DYNAMIC_LOCK_ERRORCODE {
+/**
+未知
+*/
+EM_DYNAMIC_LOCK_ERRORCODE_UNKNOWN(-1,"未知"),
+/**
+成功
+*/
+EM_DYNAMIC_LOCK_ERRORCODE_SUCCESS(0,"成功"),
+/**
+操作失败
+*/
+EM_DYNAMIC_LOCK_ERRORCODE_FAIL(1,"操作失败"),
+/**
+锁ID不存在
+*/
+EM_DYNAMIC_LOCK_ERRORCODE_LOCK_NO_EXIT(2,"锁ID不存在"),
+/**
+锁已初始化
+*/
+EM_DYNAMIC_LOCK_ERRORCODE_LOCK_INIT(3,"锁已初始化"),
+/**
+锁模块未启用
+*/
+EM_DYNAMIC_LOCK_ERRORCODE_LOCK_NOT_USE(4,"锁模块未启用");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_DYNAMIC_LOCK_ERRORCODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_DYNAMIC_LOCK_ERRORCODE enumType : EM_DYNAMIC_LOCK_ERRORCODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_DYNAMIC_LOCK_ERRORCODE enumType : EM_DYNAMIC_LOCK_ERRORCODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_DYNAMIC_LOCK_ERRORCODE getEnum(int value) {
+ for (EM_DYNAMIC_LOCK_ERRORCODE e : EM_DYNAMIC_LOCK_ERRORCODE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_DYNAMIC_LOCK_ERRORCODE.EM_DYNAMIC_LOCK_ERRORCODE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_EMERGENCYSTATUS_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_EMERGENCYSTATUS_TYPE.java
new file mode 100644
index 0000000..218db6b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_EMERGENCYSTATUS_TYPE.java
@@ -0,0 +1,38 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 紧急报警状态
+ * @date 2021/2/22
+ */
+public enum EM_EMERGENCYSTATUS_TYPE {
+ /** 未知 */
+ EM_EMERGENCYSTATUS_UNKNOWN(-1, "未知"),
+ EM_EMERGENCYSTATUS_CLOSE(0, "关闭"),
+ EM_EMERGENCYSTATUS_OPEN(1, "开启");
+ private int type;
+ private String desc;
+
+ EM_EMERGENCYSTATUS_TYPE(int type, String desc) {
+ this.type = type;
+ this.desc = desc;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public static EM_EMERGENCYSTATUS_TYPE getEmergencyStatusType(int type) {
+ for (EM_EMERGENCYSTATUS_TYPE emergencyStatus : EM_EMERGENCYSTATUS_TYPE.values()) {
+ if (emergencyStatus.type == type) {
+ return emergencyStatus;
+ }
+ }
+ return EM_EMERGENCYSTATUS_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_EMOTION_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_EMOTION_TYPE.java
new file mode 100644
index 0000000..578dca2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_EMOTION_TYPE.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 表情
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_EMOTION_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_EMOTION_TYPE_UNKNOWN = 0;
+ /**
+ * 普通/正常
+ */
+ public static final int EM_EMOTION_TYPE_NORMAL = 1;
+ /**
+ * 微笑
+ */
+ public static final int EM_EMOTION_TYPE_SMILE = 2;
+ /**
+ * 愤怒
+ */
+ public static final int EM_EMOTION_TYPE_ANGER = 3;
+ /**
+ * 悲伤
+ */
+ public static final int EM_EMOTION_TYPE_SADNESS = 4;
+ /**
+ * 厌恶
+ */
+ public static final int EM_EMOTION_TYPE_DISGUST = 5;
+ /**
+ * 害怕
+ */
+ public static final int EM_EMOTION_TYPE_FEAR = 6;
+ /**
+ * 惊讶
+ */
+ public static final int EM_EMOTION_TYPE_SURPRISE = 7;
+ /**
+ * 正常
+ */
+ public static final int EM_EMOTION_TYPE_NEUTRAL = 8;
+ /**
+ * 大笑
+ */
+ public static final int EM_EMOTION_TYPE_LAUGH = 9;
+ /**
+ * 高兴
+ */
+ public static final int EM_EMOTION_TYPE_HAPPY = 10;
+ /**
+ * 困惑
+ */
+ public static final int EM_EMOTION_TYPE_CONFUSED = 11;
+ /**
+ * 尖叫
+ */
+ public static final int EM_EMOTION_TYPE_SCREAM = 12;
+ /**
+ * 平静
+ */
+ public static final int EM_EMOTION_TYPE_CALMNESS = 13;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ENCLOSURE_ALARM_TYPE_EX.java b/src/main/java/com/netsdk/lib/enumeration/EM_ENCLOSURE_ALARM_TYPE_EX.java
new file mode 100644
index 0000000..27ab478
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ENCLOSURE_ALARM_TYPE_EX.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 详细类型
+ * @date 2022/12/06 19:32:31
+ */
+public enum EM_ENCLOSURE_ALARM_TYPE_EX {
+ /**
+ * 未知
+ */
+ ENCLOSURE_ALARM_EX_UNKNOWN(0, "未知"),
+ /**
+ * 驶入
+ */
+ ENCLOSURE_ALARM_EX_DRIVEIN(1, "驶入"),
+ /**
+ * 驶出
+ */
+ ENCLOSURE_ALARM_EX_DRIVEOUT(2, "驶出"),
+ /**
+ * 超速
+ */
+ ENCLOSURE_ALARM_EX_OVERSPEED(3, "超速"),
+ /**
+ * 超速消失
+ */
+ ENCLOSURE_ALARM_EX_SPEEDCLEAR(4, "超速消失");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_ENCLOSURE_ALARM_TYPE_EX(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_ENCLOSURE_ALARM_TYPE_EX enumType : EM_ENCLOSURE_ALARM_TYPE_EX.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_ENCLOSURE_ALARM_TYPE_EX enumType : EM_ENCLOSURE_ALARM_TYPE_EX.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ENCLOSURE_TYPE_EX.java b/src/main/java/com/netsdk/lib/enumeration/EM_ENCLOSURE_TYPE_EX.java
new file mode 100644
index 0000000..1419901
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ENCLOSURE_TYPE_EX.java
@@ -0,0 +1,68 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 围栏报警类型
+ * @date 2022/12/06 19:32:31
+ */
+public enum EM_ENCLOSURE_TYPE_EX {
+ /**
+ * 未知
+ */
+ EM_ENCLOSURE_TYPE_EX_UNKNOWN(0, "未知"),
+ /**
+ * 限速区
+ */
+ EM_ENCLOSURE_TYPE_EX_LIMITSPEED(1, "限速区"),
+ /**
+ * 驾驶区
+ */
+ EM_ENCLOSURE_TYPE_EX_DRIVEALLOW(2, "驾驶区"),
+ /**
+ * 禁止区
+ */
+ EM_ENCLOSURE_TYPE_EX_FORBIDDRIVE(3, "禁止区"),
+ /**
+ * 装货区
+ */
+ EM_ENCLOSURE_TYPE_EX_LOADGOODS(4, "装货区"),
+ /**
+ * 卸货区
+ */
+ EM_ENCLOSURE_TYPE_EX_UPLOADGOODS(5, "卸货区");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_ENCLOSURE_TYPE_EX(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_ENCLOSURE_TYPE_EX enumType : EM_ENCLOSURE_TYPE_EX.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_ENCLOSURE_TYPE_EX enumType : EM_ENCLOSURE_TYPE_EX.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ENTRY_DIRECTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_ENTRY_DIRECTION.java
new file mode 100644
index 0000000..b22293e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ENTRY_DIRECTION.java
@@ -0,0 +1,63 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @version 1.0
+ * @description 进口方向
+ * @date 2020/11/07
+ */
+public enum EM_ENTRY_DIRECTION {
+
+ // 未知
+ EM_ENTRY_UNKNOWN(0, "未知"),
+ // 北向南
+ EM_ENTRY_NORTH_TO_SOUTH(1, "北向南"),
+ // 东北向西南
+ EM_ENTRY_EASTNORTH_TO_WESTSOUTH(2, "东北向西南"),
+ // 东向西
+ EM_ENTRY_EAST_TO_WEST(3, "东向西"),
+ // 东南向西北
+ EM_ENTRY_EASTSOUTH_TO_WESTNORTH(4, "东南向西北"),
+ // 南向北
+ EM_ENTRY_SOUTH_TO_NORTH(5, "南向北"),
+ // 西南向东北
+ EM_ENTRY_WESTSOUTH_TO_EASTSOUTH(6, "西南向东北"),
+ // 西向东
+ EM_ENTRY_WEST_TO_EAST(7, "西向东"),
+ // 西北向东南
+ EM_ENTRY_WESTNORTH_TO_EASTSOUTH(8, "西北向东南");
+
+ private int value;
+ private String note;
+
+ private EM_ENTRY_DIRECTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_ENTRY_DIRECTION enumType : EM_ENTRY_DIRECTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_ENTRY_DIRECTION enumType : EM_ENTRY_DIRECTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ENTRY_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_ENTRY_TYPE.java
new file mode 100644
index 0000000..94bcc26
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ENTRY_TYPE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @version 1.0
+ * @description 进口类型
+ * @date 2020/11/07
+ */
+public enum EM_ENTRY_TYPE {
+
+ // 未知
+ EM_ENTRY_TYPE_UNKNOWN(0, "未知"),
+ // 左转
+ EM_ENTRY_TYPE_TURN_LEFT(1, "左转"),
+ // 直行
+ EM_ENTRY_TYPE_STRAIGHT(2, "直行"),
+ // 右转
+ EM_ENTRY_TYPE_TRUN_RIGHT(3, "右转"),
+ // 掉头
+ EM_ENTRY_TYPE_TURN_ROUND(4, "掉头");
+
+ private int value;
+ private String note;
+
+ private EM_ENTRY_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_ENTRY_TYPE enumType : EM_ENTRY_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_ENTRY_TYPE enumType : EM_ENTRY_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_DETECT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_DETECT_TYPE.java
new file mode 100644
index 0000000..d1f3baf
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_DETECT_TYPE.java
@@ -0,0 +1,68 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_EVENT_DETECT_TYPE {
+ /**未知*/
+ EM_EVENT_DETECT_TYPE_UNKNOWN(-1,"未知"),
+ /**小于等于阈值报警*/
+ EM_EVENT_DETECT_TYPE_LESS_OR_EQUAL(0,"小于等于阈值报警"),
+ /**大于等于阈值报警*/
+ EM_EVENT_DETECT_TYPE_GREATER_OR_EQUAL(1,"大于等于阈值报警"),
+ /**等于阀值报警*/
+ EM_EVENT_DETECT_TYPE_EQUAL(2,"等于阀值报警"),
+ /**不等于阀值报警*/
+ EM_EVENT_DETECT_TYPE_NOEQUAL(3,"不等于阀值报警"),
+ /**人数变化报警*/
+ EM_EVENT_DETECT_TYPE_CHANGE(4,"人数变化报警"),
+ /**大于阈值报警*/
+ EM_EVENT_DETECT_TYPE_GREATER(5,"大于阈值报警"),
+ /**小于阈值报警*/
+ EM_EVENT_DETECT_TYPE_LESS(6,"小于阈值报警"),
+ /**区间内报警,检测人数在区间范围内报警,包括边界值。区间值对应PersonNum字段*/
+ EM_EVENT_DETECT_TYPE_IN_INTERVAL(7,"区间内报警,检测人数在区间范围内报警,包括边界值。区间值对应PersonNum字段"),
+ /**区间外报警,检测人数在区间范围外报警,不包括边界值。区间值对应PersonNum字段*/
+ EM_EVENT_DETECT_TYPE_OUT_INTERVAL(8,"区间外报警,检测人数在区间范围外报警,不包括边界值。区间值对应PersonNum字段");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_EVENT_DETECT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_EVENT_DETECT_TYPE enumType : EM_EVENT_DETECT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_EVENT_DETECT_TYPE enumType : EM_EVENT_DETECT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+ public static EM_EVENT_DETECT_TYPE getEnum(int value) {
+ for (EM_EVENT_DETECT_TYPE e : EM_EVENT_DETECT_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_EVENT_DETECT_TYPE.EM_EVENT_DETECT_TYPE_UNKNOWN;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_IVS.java b/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_IVS.java
new file mode 100644
index 0000000..d6f089f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_IVS.java
@@ -0,0 +1,484 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 智能分析事件类型枚举类
+ */
+public enum EM_EVENT_IVS {
+
+ /**
+ * 订阅所有事件
+ */
+ EVENT_IVS_ALL(0x00000001),
+ /**
+ * 警戒线事件(对应 DEV_EVENT_CROSSLINE_INFO)
+ */
+ EVENT_IVS_CROSSLINEDETECTION(0x00000002),
+ /**
+ * 警戒区事件(对应 DEV_EVENT_CROSSREGION_INFO)
+ */
+ EVENT_IVS_CROSSREGIONDETECTION(0x00000003),
+ /**
+ * 物品遗留事件(对应 DEV_EVENT_LEFT_INFO)
+ */
+ EVENT_IVS_LEFTDETECTION(0x00000005),
+ /**
+ * 停留事件(对应 DEV_EVENT_STAY_INFO)
+ */
+ EVENT_IVS_STAYDETECTION(0x00000006),
+ /**
+ * 徘徊事件(对应 DEV_EVENT_WANDER_INFO)
+ */
+ EVENT_IVS_WANDERDETECTION(0x00000007),
+ /**
+ * 移动事件(对应 DEV_EVENT_MOVE_INFO)
+ */
+ EVENT_IVS_MOVEDETECTION(0x00000009),
+ /**
+ * 聚众事件(对应 DEV_EVENT_RIOTERL_INFO)
+ */
+ EVENT_IVS_RIOTERDETECTION(0x0000000B),
+ /**
+ * 斗殴事件(对应 DEV_EVENT_FIGHT_INFO)
+ */
+ EVENT_IVS_FIGHTDETECTION(0x0000000E),
+ /**
+ * 交通路口事件----老规则(对应 DEV_EVENT_TRAFFICJUNCTION_INFO)
+ */
+ EVENT_IVS_TRAFFICJUNCTION(0x00000017),
+ /**
+ * 交通卡口事件----老规则(对应 DEV_EVENT_TRAFFICGATE_INFO)
+ */
+ EVENT_IVS_TRAFFICGATE(0x00000018),
+ /**
+ * 人脸检测事件 (对应 DEV_EVENT_FACEDETECT_INFO)(智能规则对应 EVENT_IVS_FACEDETECT)
+ */
+ EVENT_IVS_FACEDETECT(0x0000001A),
+ /**
+ * 交通拥堵事件(对应 DEV_EVENT_TRAFFICJAM_INFO)
+ */
+ EVENT_IVS_TRAFFICJAM(0x0000001B),
+ /**
+ * 交通违章-闯红灯事件(对应 DEV_EVENT_TRAFFIC_RUNREDLIGHT_INFO)
+ */
+ EVENT_IVS_TRAFFIC_RUNREDLIGHT(0x00000100),
+ /**
+ * 交通违章-压车道线事件(对应 DEV_EVENT_TRAFFIC_OVERLINE_INFO)
+ */
+ EVENT_IVS_TRAFFIC_OVERLINE(0x00000101),
+ /**
+ * 交通违章-逆行事件(对应 DEV_EVENT_TRAFFIC_RETROGRADE_INFO)
+ */
+ EVENT_IVS_TRAFFIC_RETROGRADE(0x00000102),
+ /**
+ * 交通违章-违章左转(对应 DEV_EVENT_TRAFFIC_TURNLEFT_INFO)
+ */
+ EVENT_IVS_TRAFFIC_TURNLEFT(0x00000103),
+ /**
+ * 交通违章-违章右转(对应 DEV_EVENT_TRAFFIC_TURNRIGHT_INFO)
+ */
+ EVENT_IVS_TRAFFIC_TURNRIGHT(0x00000104),
+ /**
+ * 交通违章-违章掉头(对应 DEV_EVENT_TRAFFIC_UTURN_INFO)
+ */
+ EVENT_IVS_TRAFFIC_UTURN(0x00000105),
+ /**
+ * 交通违章-超速(对应 DEV_EVENT_TRAFFIC_OVERSPEED_INFO)
+ */
+ EVENT_IVS_TRAFFIC_OVERSPEED(0x00000106),
+ /**
+ * 交通违章-低速(对应 DEV_EVENT_TRAFFIC_UNDERSPEED_INFO)
+ */
+ EVENT_IVS_TRAFFIC_UNDERSPEED(0x00000107),
+ /**
+ * 交通违章-违章停车(对应 DEV_EVENT_TRAFFIC_PARKING_INFO)
+ */
+ EVENT_IVS_TRAFFIC_PARKING(0x00000108),
+ /**
+ * 交通违章-不按车道行驶(对应 DEV_EVENT_TRAFFIC_WRONGROUTE_INFO)
+ */
+ EVENT_IVS_TRAFFIC_WRONGROUTE(0x00000109),
+ /**
+ * 交通违章-违章变道(对应 DEV_EVENT_TRAFFIC_CROSSLANE_INFO)
+ */
+ EVENT_IVS_TRAFFIC_CROSSLANE(0x0000010A),
+ /**
+ * 交通违章-压黄线 (对应 DEV_EVENT_TRAFFIC_OVERYELLOWLINE_INFO)
+ */
+ EVENT_IVS_TRAFFIC_OVERYELLOWLINE(0x0000010B),
+ /**
+ * 交通违章-黄牌车占道事件(对应 DEV_EVENT_TRAFFIC_YELLOWPLATEINLANE_INFO)
+ */
+ EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE(0x0000010E),
+ /**
+ * 交通违章-斑马线行人优先事件(对应 DEV_EVENT_TRAFFIC_PEDESTRAINPRIORITY_INFO)
+ */
+ EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY(0x0000010F),
+ /**
+ * 交通违章-禁止通行事件(对应 DEV_EVENT_TRAFFIC_NOPASSING_INFO)
+ */
+ EVENT_IVS_TRAFFIC_NOPASSING(0x00000111),
+ /**
+ * 异常奔跑事件(对应 DEV_EVENT_ABNORMALRUNDETECTION_INFO)
+ */
+ EVENT_IVS_ABNORMALRUNDETECTION(0x00000112),
+ /**
+ * 物品搬移事件(对应 DEV_EVENT_TAKENAWAYDETECTION_INFO)
+ */
+ EVENT_IVS_TAKENAWAYDETECTION(0x00000115),
+ /**
+ * 非法停车事件(对应 DEV_EVENT_PARKINGDETECTION_INFO)
+ */
+ EVENT_IVS_PARKINGDETECTION(0x00000116),
+ /**
+ * 目标识别事件(对应 DEV_EVENT_FACERECOGNITION_INFO, (对应的智能规则配置 CFG_FACERECOGNITION_INFO)
+ */
+ EVENT_IVS_FACERECOGNITION(0x00000117),
+ /**
+ * 交通手动抓拍事件(对应 DEV_EVENT_TRAFFIC_MANUALSNAP_INFO)
+ */
+ EVENT_IVS_TRAFFIC_MANUALSNAP(0x00000118),
+ /**
+ * 交通流量统计事件(对应 DEV_EVENT_TRAFFIC_FLOW_STATE)
+ */
+ EVENT_IVS_TRAFFIC_FLOWSTATE(0x00000119),
+ /**
+ * 有车占道事件(对应 DEV_EVENT_TRAFFIC_VEHICLEINROUTE_INFO)
+ */
+ EVENT_IVS_TRAFFIC_VEHICLEINROUTE(0x0000011B),
+ /**
+ * 外部报警事件(对应 DEV_EVENT_ALARM_INFO)
+ */
+ EVENT_ALARM_LOCALALARM(0x0000011D),
+ /**
+ * 交通违章--卡口事件----新规则(对应 DEV_EVENT_TRAFFICJUNCTION_INFO)
+ */
+ EVENT_IVS_TRAFFIC_TOLLGATE(0x00000120),
+ /**
+ * 交通违章--占用公交车道事件(对应 DEV_EVENT_TRAFFIC_VEHICLEINBUSROUTE_INFO)
+ */
+ EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE(0x00000124),
+ /**
+ * 交通违章--违章倒车事件(对应 DEV_EVENT_IVS_TRAFFIC_BACKING_INFO)
+ */
+ EVENT_IVS_TRAFFIC_BACKING(0x00000125),
+ /**
+ * 声音异常检测(对应 DEV_EVENT_IVS_AUDIO_ABNORMALDETECTION_INFO)
+ */
+ EVENT_IVS_AUDIO_ABNORMALDETECTION(0x00000126),
+ /**
+ * 交通违章-闯黄灯事件(对应 DEV_EVENT_TRAFFIC_RUNYELLOWLIGHT_INFO)
+ */
+ EVENT_IVS_TRAFFIC_RUNYELLOWLIGHT(0x00000127),
+ /**
+ * 攀高检测事件(对应 DEV_EVENT_IVS_CLIMB_INFO)
+ */
+ EVENT_IVS_CLIMBDETECTION(0x00000128),
+ /**
+ * 离岗检测事件(对应 DEV_EVENT_IVS_LEAVE_INFO)
+ */
+ EVENT_IVS_LEAVEDETECTION(0x00000129),
+ /**
+ * 交通违章--黄网格线抓拍事件(对应 DEV_EVENT_TRAFFIC_PARKINGONYELLOWBOX_INFO)
+ */
+ EVENT_IVS_TRAFFIC_PARKINGONYELLOWBOX(0x0000012A),
+ /**
+ * 车位有车事件(对应 DEV_EVENT_TRAFFIC_PARKINGSPACEPARKING_INFO )
+ */
+ EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING(0x0000012B),
+ /**
+ * 车位无车事件(对应 DEV_EVENT_TRAFFIC_PARKINGSPACENOPARKING_INFO )
+ */
+ EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING(0x0000012C),
+ /**
+ * 交通行人事件(对应 DEV_EVENT_TRAFFIC_PEDESTRAIN_INFO)
+ */
+ EVENT_IVS_TRAFFIC_PEDESTRAIN(0x0000012D),
+ /**
+ * 交通抛洒物品事件(对应 DEV_EVENT_TRAFFIC_THROW_INFO)
+ */
+ EVENT_IVS_TRAFFIC_THROW(0x0000012E),
+ /**
+ * 交通违章--压停止线事件(对应 DEV_EVENT_TRAFFIC_OVERSTOPLINE)
+ */
+ EVENT_IVS_TRAFFIC_OVERSTOPLINE(0X00000137),
+ /**
+ * 交通违章--交通未系安全带事件(对应 DEV_EVENT_TRAFFIC_WITHOUT_SAFEBELT)
+ */
+ EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT(0x00000138),
+ /**
+ * 驾驶员抽烟事件(对应 DEV_EVENT_TRAFFIC_DRIVER_SMOKING)
+ */
+ EVENT_IVS_TRAFFIC_DRIVER_SMOKING(0x00000139),
+ /**
+ * 驾驶员打电话事件(对应 DEV_EVENT_TRAFFIC_DRIVER_CALLING)
+ */
+ EVENT_IVS_TRAFFIC_DRIVER_CALLING(0x0000013A),
+ /**
+ * 交通违章--未按规定依次通行(对应 DEV_EVENT_TRAFFIC_PASSNOTINORDER_INFO)
+ */
+ EVENT_IVS_TRAFFIC_PASSNOTINORDER(0x0000013C),
+ /**
+ * 视频遮挡事件(对应 DEV_EVENT_ALARM_VIDEOBLIND)
+ */
+ EVENT_ALARM_VIDEOBLIND(0x00000153),
+ /**
+ * 交通违章--车辆拥堵禁入事件(对应 DEV_EVENT_ALARM_JAMFORBIDINTO_INFO)
+ */
+ EVENT_IVS_TRAFFIC_JAM_FORBID_INTO(0x00000163),
+ /**
+ * 加油站提枪、挂枪事件(对应 DEV_EVENT_TRAFFIC_FCC_INFO)
+ */
+ EVENT_IVS_TRAFFIC_FCC(0x0000016B),
+ /**
+ * 门禁事件 (对应 DEV_EVENT_ACCESS_CTL_INFO)
+ */
+ EVENT_IVS_ACCESS_CTL(0x00000204),
+ /**
+ * SnapManual事件(对应 DEV_EVENT_SNAPMANUAL)
+ */
+ EVENT_IVS_SNAPMANUAL(0x00000205),
+ /**
+ * 生理疲劳驾驶事件(对应 DEV_EVENT_TIREDPHYSIOLOGICAL_INFO)
+ */
+ EVENT_IVS_TRAFFIC_TIREDPHYSIOLOGICAL(0x00000207),
+ /**
+ * 人证比对事件(对应 DEV_EVENT_CITIZEN_PICTURE_COMPARE_INFO )
+ */
+ EVENT_IVS_CITIZEN_PICTURE_COMPARE(0x00000209),
+ /**
+ * 人体特征事件(对应 DEV_EVENT_HUMANTRAIT_INFO)
+ */
+ EVENT_IVS_HUMANTRAIT(0x00000215),
+ /**
+ * 开车低头报警事件(对应DEV_EVENT_TIREDLOWERHEAD_INFO)
+ */
+ EVENT_IVS_TRAFFIC_TIREDLOWERHEAD(0x0000020A),
+ /**
+ * 开车左顾右盼报警事件(对应DEV_EVENT_DRIVERLOOKAROUND_INFO)
+ */
+ EVENT_IVS_TRAFFIC_DRIVERLOOKAROUND(0x0000020B),
+ /**
+ * 开车离岗报警事件(对应DEV_EVENT_DRIVERLEAVEPOST_INFO)
+ */
+ EVENT_IVS_TRAFFIC_DRIVERLEAVEPOST(0x0000020C),
+ /**
+ * 开车打哈欠事件(对应DEV_EVENT_DRIVERYAWN_INFO)
+ */
+ EVENT_IVS_TRAFFIC_DRIVERYAWN(0x00000210),
+ /**
+ * 人脸分析事件 (暂未有具体事件)
+ */
+ EVENT_IVS_FACEANALYSIS(0x00000217),
+ /**
+ * 车辆超速报警事件(对应 DEV_EVENT_HIGHSPEED_INFO)
+ */
+ EVENT_IVS_HIGHSPEED(0x0000022B),
+ /**
+ * 车牌对比事件(智慧加油站项目)(对应 DEV_EVENT_VEHICLE_RECOGNITION_INFO)
+ */
+ EVENT_IVS_VEHICLE_RECOGNITION(0x00000231),
+
+ /**
+ * 人群密度检测事件(对应结构体 DEV_EVENT_CROWD_DETECTION_INFO)
+ */
+ EVENT_IVS_CROWDDETECTION(0x0000022C),
+ /**
+ * 立体视觉区域内人数统计事件(对应DEV_EVENT_MANNUM_DETECTION_INFO)
+ */
+ EVENT_IVS_MAN_NUM_DETECTION(0x0000020E),
+ /**
+ * 电动扶梯运行异常事件 (对应DEV_EVENT_ELEVATOR_ABNORMAL_INFO)
+ */
+ EVENT_IVS_ELEVATOR_ABNORMAL(0x0000023D),
+ /**
+ * IVSS人脸检测事件 (暂未有具体事件)
+ */
+ EVENT_IVSS_FACEATTRIBUTE(0x00000243),
+ /**
+ * IVSS目标识别事件 (暂未有具体事件)
+ */
+ EVENT_IVSS_FACECOMPARE(0x00000244),
+ /**
+ * 火警事件(对应 DEV_EVENT_FIREWARNING_INFO)
+ */
+ EVENT_IVS_FIREWARNING(0x00000245),
+ /**
+ * 车道偏移预警(对应 DEV_EVENT_LANEDEPARTURE_WARNNING_INFO)
+ */
+ EVENT_IVS_LANEDEPARTURE_WARNNING(0X00000251),
+ /**
+ * 前向碰撞预警(对应 DEV_EVENT_FORWARDCOLLISION_WARNNING_INFO)
+ */
+ EVENT_IVS_FORWARDCOLLISION_WARNNING(0x00000252),
+ /**
+ * 漂浮物检测事件 (对应 DEV_EVENT_FLOATINGOBJECT_DETECTION_INFO)
+ */
+ EVENT_IVS_FLOATINGOBJECT_DETECTION(0x00000257),
+ /**
+ * 打电话检测事件(对应 DEV_EVENT_PHONECALL_DETECT_INFO)
+ */
+ EVENT_IVS_PHONECALL_DETECT(0x0000025A),
+ /**
+ * 吸烟检测事件(对应 DEV_EVENT_SMOKING_DETECT_INFO)
+ */
+ EVENT_IVS_SMOKING_DETECT(0x0000025B),
+ /**
+ * 雷达限速报警事件(对应 DEV_EVENT_RADAR_SPEED_LIMIT_ALARM_INFO)
+ */
+ EVENT_IVS_RADAR_SPEED_LIMIT_ALARM(0x0000025C),
+ /**
+ * 水位检测事件 (对应 DEV_EVENT_WATER_LEVEL_DETECTION_INFO)
+ */
+ EVENT_IVS_WATER_LEVEL_DETECTION(0x0000025D),
+ /**
+ * 城市机动车违停事件 (对应 DEV_EVENT_CITY_MOTORPARKING_INFO)
+ */
+ EVENT_IVS_CITY_MOTORPARKING(0x0000024F),
+ /**
+ * 城市机非动车违停事件 (对应 DEV_EVENT_CITY_NONMOTORPARKING_INFO)
+ */
+ EVENT_IVS_CITY_NONMOTORPARKING(0x00000250),
+ /**
+ * 违规撑伞检测事件 (对应 DEV_EVENT_HOLD_UMBRELLA_INFO)
+ */
+ EVENT_IVS_HOLD_UMBRELLA(0x0000025E),
+ /**
+ * 垃圾暴露检测事件 (对应 DEV_EVENT_GARBAGE_EXPOSURE_INFO)
+ */
+ EVENT_IVS_GARBAGE_EXPOSURE(0x0000025F),
+ /**
+ * 垃圾桶满溢检测事件 (对应 DEV_EVENT_DUSTBIN_OVER_FLOW_INFO)
+ */
+ EVENT_IVS_DUSTBIN_OVER_FLOW(0x00000260),
+ /**
+ * 门前脏乱检测事件 (对应 DEV_EVENT_DOOR_FRONT_DIRTY_INFO)
+ */
+ EVENT_IVS_DOOR_FRONT_DIRTY(0x00000261),
+ /**
+ * 排队滞留时间报警事件 (对应 DEV_EVENT_QUEUESTAY_DETECTION_INFO)
+ */
+ EVENT_IVS_QUEUESTAY_DETECTION(0X00000262),
+ /**
+ * 排队人数异常报警事件(对应 DEV_EVENT_QUEUENUM_DETECTION_INFO)
+ */
+ EVENT_IVS_QUEUENUM_DETECTION(0X00000263),
+ /**
+ * 生成图规则事件(对应 DEV_EVENT_GENERATEGRAPH_DETECTION_INFO)
+ */
+ EVENT_IVS_GENERATEGRAPH_DETECTION(0X00000264),
+ /**
+ * 交通违章-手动取证(对应 DEV_EVENT_TRAFFIC_PARKING_MANUAL_INFO)
+ */
+ EVENT_IVS_TRAFFIC_PARKING_MANUAL(0x00000265),
+ /**
+ * 安全帽检测事件(对应 DEV_EVENT_HELMET_DETECTION_INFO)
+ */
+ EVENT_IVS_HELMET_DETECTION(0x00000266),
+ /**
+ * 包裹堆积程度检测事件(对应 DEV_EVENT_DEPOSIT_DETECTION_INFO)
+ */
+ EVENT_IVS_DEPOSIT_DETECTION(0x00000267),
+ /**
+ * 热点异常报警事件(对应 DEV_EVENT_HOTSPOT_WARNING_INFO)
+ */
+ EVENT_IVS_HOTSPOT_WARNING(0x00000268),
+ /**
+ * 称重平台检测事件(对应 DEV_EVENT_WEIGHING_PLATFORM_DETECTION_INFO)
+ */
+ EVENT_IVS_WEIGHING_PLATFORM_DETECTION(0x00000269),
+ /**
+ * 课堂行为分析事件(对应 DEV_EVENT_CLASSROOM_BEHAVIOR_INFO)
+ */
+ EVENT_IVS_CLASSROOM_BEHAVIOR(0x0000026A),
+ /**
+ * 工装(安全帽/工作服等)检测事件(对应 DEV_EVENT_WORKCLOTHES_DETECT_INFO)
+ */
+ EVENT_IVS_WORKCLOTHES_DETECT(0x0000026E),
+ /**
+ * 立体视觉站立事件(对应DEV_EVENT_MANSTAND_DETECTION_INFO)
+ */
+ EVENT_IVS_MAN_STAND_DETECTION(0x0000020D),
+ /**
+ * 加油站车辆检测事件 (对应 DEV_EVENT_GASSTATION_VEHICLE_DETECT_INFO)
+ */
+ EVENT_IVS_GASSTATION_VEHICLE_DETECT(0x00000283),
+ /**
+ * 商铺占道经营事件(对应 DEV_EVENT_SHOPPRESENCE_INFO)
+ */
+ EVENT_IVS_SHOPPRESENCE(0x00000246),
+ /**
+ * 流动摊贩事件 (对应 DEV_EVENT_FLOWBUSINESS_INFO)
+ */
+ EVENT_IVS_FLOWBUSINESS(0x0000024E),
+ /**
+ * 行人卡口事件(对应 DEV_EVENT_PEDESTRIAN_JUNCTION_INFO)
+ */
+ EVENT_IVS_PEDESTRIAN_JUNCTION(0x00000230),
+ /**
+ * 拉横幅事件(对应 DEV_EVENT_BANNER_DETECTION_INFO)
+ */
+ EVENT_IVS_BANNER_DETECTION(0x0000023B),
+ /**
+ * 智慧厨房穿着检测事件(对不戴口罩、厨师帽以及颜色不符合规定的厨师服进行报警)(对应 DEV_EVENT_SMART_KITCHEN_CLOTHES_DETECTION_INFO)
+ */
+ EVENT_IVS_SMART_KITCHEN_CLOTHES_DETECTION(0x0000029D),
+ /**
+ * 水位监测事件
+ */
+ EVENT_IVS_WATER_STAGE_MONITOR(0x0000030A),
+ /**
+ * 暴力抛物检测(对应 DEV_EVENT_VIOLENT_THROW_DETECTION_INFO)
+ */
+ EVENT_IVS_VIOLENT_THROW_DETECTION(0x0000027D),
+ /**
+ * 人体温智能检测事件(对应 DEV_EVENT_ANATOMY_TEMP_DETECT_INFO)
+ */
+ EVENT_IVS_ANATOMY_TEMP_DETECT(0x00000303),
+ /**
+ * 起雾检测事件(对应 DEV_EVENT_FOG_DETECTION)
+ */
+ EVENT_IVS_FOG_DETECTION(0x00000308),
+ /**
+ * 视频异常事件(对应 DEV_EVENT_VIDEOABNORMALDETECTION_INFO)
+ */
+ EVENT_IVS_VIDEOABNORMALDETECTION(0x00000013),
+ /**
+ * 单人独处事件(对应 DEV_EVENT_STAY_ALONE_DETECTION_INFO)
+ */
+ EVENT_IVS_STAY_ALONE_DETECTION(0x00000270),
+ /**
+ * 囚犯起身事件(对应 DEV_EVENT_PSRISEDETECTION_INFO)
+ */
+ EVENT_IVS_PSRISEDETECTION(0x0000011E),
+ /**
+ * 高空抛物检测(对应DEV_EVENT_HIGH_TOSS_DETECT_INFO)
+ */
+ EVENT_IVS_HIGH_TOSS_DETECT(0x0000028D),
+
+ /**
+ * 特征提取事件(对应 DEV_EVENT_FEATURE_ABSTRACT_INFO)
+ */
+ EVENT_IVS_FEATURE_ABSTRACT(0x00000276),
+
+ /**
+ * 非法运输事件(对应 NET_DEV_EVENT_ILLEGAL_CARRIAGE_INFO)
+ */
+ EVENT_IVS_ILLEGAL_CARRIAGE( 0x0000042F),
+
+ /**
+ * 打包垃圾检测事件(对应 NET_DEV_EVENT_GARBAGE_PLASTICBAG_INFO)
+ */
+ EVENT_IVS_GARBAGE_PLASTICBAG( 0x00000459);
+
+
+ private final int id;
+
+ private EM_EVENT_IVS(int id) {
+ this.id = id;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_IVS_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_IVS_TYPE.java
new file mode 100644
index 0000000..04d8039
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_IVS_TYPE.java
@@ -0,0 +1,832 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.structure.DEV_EVENT_NUMBERSTAT_INFO;
+import com.sun.jna.Callback;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 智能分析事件类型
+ * 对应接口{@link com.netsdk.lib.NetSDKLib#CLIENT_RealLoadPictureEx(NetSDKLib.LLong, int, int, int, Callback, Pointer, Pointer)}
+ * @date 2020/10/14
+ */
+public enum EM_EVENT_IVS_TYPE {
+ /**
+ * 订阅所有事件
+ */
+ EVENT_IVS_ALL(0x00000001, "所有事件"),
+ /**
+ * 警戒线事件
+ * 对应结构体{@link NetSDKLib.DEV_EVENT_CROSSLINE_INFO}
+ */
+ EVENT_IVS_CROSSLINEDETECTION(0x00000002, "警戒线事件"),
+ /**
+ * 警戒区事件
+ * 对应 {@link NetSDKLib.DEV_EVENT_CROSSREGION_INFO}
+ */
+ EVENT_IVS_CROSSREGIONDETECTION(0x00000003, "警戒区事件"),
+ /**
+ * 贴条事件
+ * 对应 {@see DEV_EVENT_PASTE_INFO}
+ */
+ EVENT_IVS_PASTEDETECTION(0x00000004, "贴条事件"),
+ /**
+ * 物品遗留事件
+ * (对应 {@link NetSDKLib.DEV_EVENT_LEFT_INFO})
+ */
+ EVENT_IVS_LEFTDETECTION(0x00000005, "物品遗留事件"),
+ /**
+ * 停留事件
+ * (对应 {@link NetSDKLib.DEV_EVENT_STAY_INFO})
+ */
+ EVENT_IVS_STAYDETECTION(0x00000006, "停留事件"),
+ /**
+ * 徘徊事件
+ * (对应 {@link NetSDKLib.DEV_EVENT_WANDER_INFO})
+ */
+ EVENT_IVS_WANDERDETECTION(0x00000007, "徘徊事件"),
+ /**
+ * 物品保全事件
+ * (对应 {@see DEV_EVENT_PRESERVATION_INFO})
+ */
+ EVENT_IVS_PRESERVATION(0x00000008, "物品保全事件"),
+ /**
+ * (对应 {@link NetSDKLib.DEV_EVENT_MOVE_INFO})
+ */
+ EVENT_IVS_MOVEDETECTION(0x00000009, "移动事件"),
+ /**
+ * {@see DEV_EVENT_TAIL_INFO}
+ */
+ EVENT_IVS_TAILDETECTION(0x0000000A, "尾随事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_RIOTERL_INFO}
+ */
+ EVENT_IVS_RIOTERDETECTION(0x0000000B, "聚众事件"),
+ /**
+ * {@see DEV_EVENT_FIRE_INFO}
+ */
+ EVENT_IVS_FIREDETECTION(0x0000000C, "火警事件"),
+ /**
+ * {@see DEV_EVENT_SMOKE_INFO}
+ */
+ EVENT_IVS_SMOKEDETECTION(0x0000000D, "烟雾报警事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_FIGHT_INFO}
+ */
+ EVENT_IVS_FIGHTDETECTION(0x0000000E, "斗殴事件"),
+ /**
+ * {@see DEV_EVENT_FLOWSTAT_INFO}
+ */
+ EVENT_IVS_FLOWSTAT(0x0000000F, "流量统计事件"),
+ /**
+ * {@link DEV_EVENT_NUMBERSTAT_INFO}
+ */
+ EVENT_IVS_NUMBERSTAT(0x00000010, "数量统计事件"),
+ EVENT_IVS_CAMERACOVERDDETECTION(0x00000011, "摄像头覆盖事件(保留)"),
+ EVENT_IVS_CAMERAMOVEDDETECTION(0x00000012, "摄像头移动事件(保留)"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_VIDEOABNORMALDETECTION_INFO}
+ */
+ EVENT_IVS_VIDEOABNORMALDETECTION(0x00000013, "视频异常事件"),
+ EVENT_IVS_VIDEOBADDETECTION(0x00000014, "视频损坏事件(保留)"),
+ /**
+ * {@see DEV_EVENT_TRAFFICCONTROL_INFO}
+ *
+ * {@see }
+ */
+ EVENT_IVS_TRAFFICCONTROL(0x00000015, "交通管理事件"),
+ /**
+ * {@see DEV_EVENT_TRAFFICACCIDENT_INFO}
+ */
+ EVENT_IVS_TRAFFICACCIDENT(0x00000016, "交通事故事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFICJUNCTION_INFO}
+ */
+ EVENT_IVS_TRAFFICJUNCTION(0x00000017, "交通路口事件----老规则"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFICGATE_INFO}
+ */
+ EVENT_IVS_TRAFFICGATE(0x00000018, "交通卡口事件----老规则"),
+ /**
+ * {@see DEV_EVENT_TRAFFICSNAPSHOT_INFO}
+ */
+ EVENT_TRAFFICSNAPSHOT(0x00000019, "交通抓拍事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_FACEDETECT_INFO}
+ */
+ EVENT_IVS_FACEDETECT(0x0000001A, "人脸检测事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFICJAM_INFO}
+ */
+ EVENT_IVS_TRAFFICJAM(0x0000001B, "交通拥堵事件"),
+ /**
+ * {@see DEV_EVENT_TRAFFIC_NONMOTORINMOTORROUTE_INFO}
+ */
+ EVENT_IVS_TRAFFIC_NONMOTORINMOTORROUTE(0x0000001C, "非机动车占机动车车道事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_RUNREDLIGHT_INFO}
+ */
+ EVENT_IVS_TRAFFIC_RUNREDLIGHT(0x00000100, "交通违章-闯红灯事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_OVERLINE_INFO}
+ */
+ EVENT_IVS_TRAFFIC_OVERLINE(0x00000101, "交通违章-压车道线事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_RETROGRADE_INFO}
+ */
+ EVENT_IVS_TRAFFIC_RETROGRADE(0x00000102, "交通违章-逆行事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_TURNLEFT_INFO}
+ */
+ EVENT_IVS_TRAFFIC_TURNLEFT(0x00000103, "交通违章-违章左转"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_TURNRIGHT_INFO}
+ */
+ EVENT_IVS_TRAFFIC_TURNRIGHT(0x00000104, "交通违章-违章右转"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_UTURN_INFO}
+ */
+ EVENT_IVS_TRAFFIC_UTURN(0x00000105, "交通违章-违章掉头"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_OVERSPEED_INFO}
+ */
+ EVENT_IVS_TRAFFIC_OVERSPEED(0x00000106, "交通违章-超速"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_UNDERSPEED_INFO}
+ */
+ EVENT_IVS_TRAFFIC_UNDERSPEED(0x00000107, "交通违章-低速"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_PARKING_INFO}
+ */
+ EVENT_IVS_TRAFFIC_PARKING(0x00000108, "交通违章-违章停车"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_WRONGROUTE_INFO}
+ */
+ EVENT_IVS_TRAFFIC_WRONGROUTE(0x00000109, "交通违章-不按车道行驶"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_CROSSLANE_INFO}
+ */
+ EVENT_IVS_TRAFFIC_CROSSLANE(0x0000010A, "交通违章-违章变道"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_OVERYELLOWLINE_INFO}
+ */
+ EVENT_IVS_TRAFFIC_OVERYELLOWLINE(0x0000010B, "交通违章-压黄线"),
+ /**
+ * {@see DEV_EVENT_TRAFFIC_DRIVINGONSHOULDER_INFO}
+ */
+ EVENT_IVS_TRAFFIC_DRIVINGONSHOULDER(0x0000010C, "交通违章-路肩行驶事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_YELLOWPLATEINLANE_INFO}
+ */
+ EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE(0x0000010E, "交通违章-黄牌车占道事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_PEDESTRAINPRIORITY_INFO}
+ */
+ EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY(0x0000010F, "交通违章-礼让行人/斑马线行人优先事件"),
+ /**
+ * {@see DEV_EVENT_CROSSFENCEDETECTION_INFO}
+ */
+ EVENT_IVS_CROSSFENCEDETECTION(0x0000011F, "翻越围栏事件"),
+ /**
+ * {@see DEV_EVENT_ELECTROSPARK_INFO}
+ */
+ EVENT_IVS_ELECTROSPARKDETECTION(0x00000110, "电火花事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_NOPASSING_INFO}
+ */
+ EVENT_IVS_TRAFFIC_NOPASSING(0x00000111, "交通违章-禁止通行事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_ABNORMALRUNDETECTION_INFO}
+ */
+ EVENT_IVS_ABNORMALRUNDETECTION(0x00000112, "异常奔跑事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_RETROGRADEDETECTION_INFO}
+ */
+ EVENT_IVS_RETROGRADEDETECTION(0x00000113, "人员逆行事件"),
+ /**
+ * {@see DEV_EVENT_INREGIONDETECTION_INFO}
+ */
+ EVENT_IVS_INREGIONDETECTION(0x00000114, "区域内检测事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TAKENAWAYDETECTION_INFO}
+ */
+ EVENT_IVS_TAKENAWAYDETECTION(0x00000115, "物品搬移事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_PARKINGDETECTION_INFO}
+ */
+ EVENT_IVS_PARKINGDETECTION(0x00000116, "非法停车事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_FACERECOGNITION_INFO}
+ */
+ EVENT_IVS_FACERECOGNITION(0x00000117, "目标识别事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_MANUALSNAP_INFO}
+ */
+ EVENT_IVS_TRAFFIC_MANUALSNAP(0x00000118, "交通手动抓拍事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_FLOW_STATE}
+ */
+ EVENT_IVS_TRAFFIC_FLOWSTATE(0x00000119, "交通流量统计事件"),
+ /**
+ * {@see DEV_EVENT_TRAFFIC_STAY_INFO}
+ */
+ EVENT_IVS_TRAFFIC_STAY(0x0000011A, "交通滞留事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_VEHICLEINROUTE_INFO}
+ */
+ EVENT_IVS_TRAFFIC_VEHICLEINROUTE(0x0000011B, "有车占道事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_ALARM_INFO}
+ */
+ EVENT_ALARM_MOTIONDETECT(0x0000011C, "视频移动侦测事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_ALARM_INFO}
+ */
+ EVENT_ALARM_LOCALALARM(0x0000011D, "外部报警事件"),
+
+ /**
+ * {@link NetSDKLib.DEV_EVENT_PSRISEDETECTION_INFO}
+ */
+ EVENT_IVS_PSRISEDETECTION(0x0000011E, "囚犯起身事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFICJUNCTION_INFO}
+ */
+ EVENT_IVS_TRAFFIC_TOLLGATE(0x00000120, "交通违章-卡口事件----新规则"),
+ /**
+ * {@see DEV_EVENT_DENSITYDETECTION_INFO}
+ */
+ EVENT_IVS_DENSITYDETECTION(0x00000121, "人员密集度检测"),
+ /**
+ * {@link NetSDKLib.NET_VIDEODIAGNOSIS_COMMON_INFO}
+ * {@link NetSDKLib.NET_REAL_DIAGNOSIS_RESULT}
+ */
+ EVENT_IVS_VIDEODIAGNOSIS(0x00000122, "视频诊断结果事件"),
+ /**
+ * {@see DEV_EVENT_QUEUEDETECTION_INFO}
+ */
+ EVENT_IVS_QUEUEDETECTION(0x00000123, "排队检测报警事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_VEHICLEINBUSROUTE_INFO}
+ */
+ EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE(0x00000124, "占用公交车道事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_IVS_TRAFFIC_BACKING_INFO}
+ */
+ EVENT_IVS_TRAFFIC_BACKING(0x00000125, "违章倒车事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_IVS_AUDIO_ABNORMALDETECTION_INFO}
+ */
+ EVENT_IVS_AUDIO_ABNORMALDETECTION(0x00000126, "声音异常检测"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_RUNYELLOWLIGHT_INFO}
+ */
+ EVENT_IVS_TRAFFIC_RUNYELLOWLIGHT(0x00000127, "交通违章-闯黄灯事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_IVS_CLIMB_INFO}
+ */
+ EVENT_IVS_CLIMBDETECTION(0x00000128, "攀高检测事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_IVS_LEAVE_INFO}
+ */
+ EVENT_IVS_LEAVEDETECTION(0x00000129, "离岗检测事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_PARKINGONYELLOWBOX_INFO}
+ */
+ EVENT_IVS_TRAFFIC_PARKINGONYELLOWBOX(0x0000012A, "黄网格线抓拍事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_PARKINGSPACEPARKING_INFO}
+ */
+ EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING(0x0000012B, "车位有车事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_PARKINGSPACENOPARKING_INFO}
+ */
+ EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING(0x0000012C, "车位无车事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_PEDESTRAIN_INFO}
+ */
+ EVENT_IVS_TRAFFIC_PEDESTRAIN(0x0000012D, "交通行人事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_THROW_INFO}
+ */
+ EVENT_IVS_TRAFFIC_THROW(0x0000012E, "交通抛洒物品事件"),
+ /**
+ * {@see DEV_EVENT_TRAFFIC_IDLE_INFO}
+ */
+ EVENT_IVS_TRAFFIC_IDLE(0x0000012F, "交通空闲事件"),
+ /**
+ * {@see DEV_EVENT_ALARM_VEHICLEACC_INFO}
+ */
+ EVENT_ALARM_VEHICLEACC(0x00000130, "车载ACC断电报警事件"),
+ /**
+ * {@see DEV_EVENT_VEHICEL_ALARM_INFO}
+ */
+ EVENT_ALARM_VEHICLE_TURNOVER(0x00000131, "车辆侧翻报警事件"),
+ /**
+ * {@see DEV_EVENT_VEHICEL_ALARM_INFO}
+ */
+ EVENT_ALARM_VEHICLE_COLLISION(0x00000132, "车辆撞车报警事件"),
+ EVENT_ALARM_VEHICLE_LARGE_ANGLE(0x00000133, "车载摄像头大角度扭转事件"),
+ /**
+ * {@see DEV_EVENT_TRAFFIC_PARKINGSPACEOVERLINE_INFO}
+ */
+ EVENT_IVS_TRAFFIC_PARKINGSPACEOVERLINE(0x00000134, "车位压线事件"),
+ /**
+ * {@see DEV_EVENT_IVS_MULTI_SCENE_SWICH_INFO}
+ */
+ EVENT_IVS_MULTISCENESWITCH(0x00000135, "多场景切换事件"),
+ /**
+ * {@see DEV_EVENT_TRAFFIC_RESTRICTED_PLATE}
+ */
+ EVENT_IVS_TRAFFIC_RESTRICTED_PLATE(0x00000136, "受限车牌事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_OVERSTOPLINE}
+ */
+ EVENT_IVS_TRAFFIC_OVERSTOPLINE(0x00000137, "压停止线事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_WITHOUT_SAFEBELT}
+ */
+ EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT(0x00000138, "交通未系安全带事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_DRIVER_SMOKING}
+ */
+ EVENT_IVS_TRAFFIC_DRIVER_SMOKING(0x00000139, "驾驶员抽烟事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_DRIVER_CALLING}
+ */
+ EVENT_IVS_TRAFFIC_DRIVER_CALLING(0x0000013A, "驾驶员打电话事件"),
+ /**
+ * {@link com.netsdk.lib.structure.DEV_EVENT_TRAFFIC_PEDESTRAINRUNREDLIGHT_INFO}
+ */
+ EVENT_IVS_TRAFFIC_PEDESTRAINRUNREDLIGHT(0x0000013B, "行人闯红灯事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_TRAFFIC_PASSNOTINORDER_INFO}
+ */
+ EVENT_IVS_TRAFFIC_PASSNOTINORDER(0x0000013C, "未按规定依次通行"),
+ EVENT_IVS_OBJECT_DETECTION(0x00000141, "物体特征检测事件"),
+ /**
+ * {@see DEV_EVENT_ALARM_ANALOGALRM_INFO}
+ */
+ EVENT_ALARM_ANALOGALARM(0x00000150, "模拟量报警通道的报警事件"),
+ EVENT_IVS_CROSSLINEDETECTION_EX(0x00000151, "警戒线扩展事件"),
+ EVENT_ALARM_COMMON(0x00000152, "普通录像"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_ALARM_VIDEOBLIND}
+ */
+ EVENT_ALARM_VIDEOBLIND(0x00000153, "视频遮挡事件"),
+ EVENT_ALARM_VIDEOLOSS(0x00000154, "视频丢失事件"),
+ /**
+ * {@see DEV_EVENT_GETOUTBED_INFO}
+ */
+ EVENT_IVS_GETOUTBEDDETECTION(0x00000155, "下床事件"),
+ /**
+ * {@see DEV_EVENT_PATROL_INFO}
+ */
+ EVENT_IVS_PATROLDETECTION(0x00000156, "巡逻检测事件"),
+ /**
+ * {@see DEV_EVENT_ONDUTY_INFO}
+ */
+ EVENT_IVS_ONDUTYDETECTION(0x00000157, "站岗检测事件"),
+ EVENT_IVS_NOANSWERCALL(0x00000158, "门口机呼叫未响应事件"),
+ EVENT_IVS_STORAGENOTEXIST(0x00000159, "存储组不存在事件"),
+ EVENT_IVS_STORAGELOWSPACE(0x0000015A, "硬盘空间低报警事件"),
+ EVENT_IVS_STORAGEFAILURE(0x0000015B, "存储错误事件"),
+ /**
+ * {@see DEV_EVENT_PROFILE_ALARM_TRANSMIT_INFO}
+ */
+ EVENT_IVS_PROFILEALARMTRANSMIT(0x0000015C, "报警传输事件"),
+ /**
+ * {@see DEV_EVENT_ALARM_VIDEOSTATIC_INFO}
+ */
+ EVENT_IVS_VIDEOSTATIC(0x0000015D, "视频静态检测事件"),
+ /**
+ * {@see DEV_EVENT_ALARM_VIDEOTIMING_INFO}
+ */
+ EVENT_IVS_VIDEOTIMING(0x0000015E, "视频定时检测事件"),
+ /**
+ * {@see CFG_IVS_HEATMAP_INFO}
+ */
+ EVENT_IVS_HEATMAP(0x0000015F, "热度图"),
+ /**
+ * {@see DEV_EVENT_ALARM_CITIZENIDCARD_INFO}
+ */
+ EVENT_IVS_CITIZENIDCARD(0x00000160, "证件信息读取事件"),
+ /**
+ * {@see DEV_EVENT_ALARM_PIC_INFO}
+ */
+ EVENT_IVS_PICINFO(0x00000161, "图片信息事件"),
+ /**
+ * {@see DEV_EVENT_ALARM_NETPLAYCHECK_INFO}
+ */
+ EVENT_IVS_NETPLAYCHECK(0x00000162, "上网登记事件"),
+ /**
+ * {@see DEV_EVENT_ALARM_JAMFORBIDINTO_INFO}
+ */
+ EVENT_IVS_TRAFFIC_JAM_FORBID_INTO(0x00000163, "车辆拥堵禁入事件"),
+ /**
+ * {@see EV_EVENT_SNAPBYTIME}
+ */
+ EVENT_IVS_SNAPBYTIME(0x00000164, "定时抓图事件"),
+ EVENT_IVS_PTZ_PRESET(0x00000165, "云台转动到预置点事件"), // (对应 DEV_EVENT_ALARM_PTZ_PRESET_INFO)
+ EVENT_IVS_RFID_INFO(0x00000166, "红外线检测信息事件"), // (对应 DEV_EVENT_ALARM_RFID_INFO)
+ EVENT_IVS_STANDUPDETECTION(0x00000167, "人起立检测事件"), //
+ EVENT_IVS_QSYTRAFFICCARWEIGHT(0x00000168, "交通卡口称重事件"), // (对应 DEV_EVENT_QSYTRAFFICCARWEIGHT_INFO)
+ EVENT_IVS_TRAFFIC_COMPAREPLATE(0x00000169, "卡口前后车牌合成事件"), // (对应DEV_EVENT_TRAFFIC_COMPAREPLATE_INFO)
+ EVENT_IVS_SHOOTINGSCORERECOGNITION(0x0000016A, "打靶像机事件"), // (对应 DEV_EVENT_SHOOTING_SCORE_RECOGNITION_INFO,CFG_IVS_SHOOTINGSCORERECOGNITION_INFO)
+ EVENT_IVS_TRAFFIC_FCC(0x0000016B, "加油站提枪、挂枪事件"), // (对应 DEV_EVENT_TRAFFIC_FCC_INFO)
+ EVENT_IVS_TRAFFIC_TRANSFINITE(0x0000016C, "违章超限抓图上报事件"), // ,绍兴科技治超(对应 DEV_EVENT_TRAFFIC_TRANSFINITE_INFO)
+ EVENT_IVS_SCENE_CHANGE(0x0000016D, "场景变更事件"), // (对应 DEV_ALRAM_SCENECHANGE_INFO,CFG_VIDEOABNORMALDETECTION_INFO)
+ EVENT_IVS_LETRACK(0x0000016E, "简单跟踪事件(暂未有具体事件)"), //
+ EVENT_IVS_OBJECT_ACTION(0x0000016F, "物体检测事件(暂未有具体事件)"), //
+ EVENT_IVS_TRAFFIC_ANALYSE_PRESNAP(0x00000170, "预分析抓拍图片事件"), // (对应 DEV_EVENT_TRAFFIC_ANALYSE_PRESNAP_INFO)
+ EVENT_ALARM_EQSTATE(0x00000171, "智能插座电量状态上报(暂未有具体事件)"), //
+ EVENT_IVS_ALARM_IPC(0x00000172, "DVR/NVR设备上的IPC报警"), // (对应 DEV_EVENT_ALARM_IPC_INFO)
+ EVENT_IVS_POS_RECORD(0x00000173, "POS录像查询事件(暂未有具体事件)"), //
+ EVENT_IVS_NEAR_DISTANCE_DETECTION(0x00000174, "近距离接触事件"), // (对应 DEV_EVENT_NEAR_DISTANCE_DETECTION_INFO)
+ EVENT_IVS_OBJECTSTRUCTLIZE_PERSON(0x00000175, "行人特征检测事件"), // (对应 DEV_EVENT_OBJECTSTRUCTLIZE_PERSON_INFO)
+ EVENT_IVS_OBJECTSTRUCTLIZE_NONMOTOR(0x00000176, "非机动车特征检测事件"), // (对应 DEV_EVENT_OBJECTSTRUCTLIZE_NONMOTOR_INFO)
+ EVENT_IVS_TUMBLE_DETECTION(0x00000177, "倒地报警事件"), // (对应 DEV_EVENT_TUMBLE_DETECTION_INFO)
+ /**
+ * 所有以traffic开头的事件
+ * 目前指的是
+ * EVENT_IVS_TRAFFICCONTROL -> EVENT_TRAFFICSNAPSHOT
+ * EVENT_IVS_TRAFFIC_RUNREDLIGHT -> EVENT_IVS_TRAFFIC_UNDERSPEED
+ */
+ EVENT_IVS_TRAFFIC_ALL(0x000001FF, "所有以traffic开头的事件"),
+ EVENT_IVS_VIDEOANALYSE(0x00000200, "所有智能分析事件"),
+ EVENT_IVS_LINKSD(0x00000201, "LinkSD事件"), // (对应 DEV_EVENT_LINK_SD)
+ EVENT_IVS_VEHICLEANALYSE(0x00000202, "车辆特征检测分析"), // (对应DEV_EVENT_VEHICLEANALYSE)
+ EVENT_IVS_FLOWRATE(0x00000203, "流量使用情况事件"), // (对应 DEV_EVENT_FLOWRATE_INFO)
+ /**
+ * {@link NetSDKLib.DEV_EVENT_ACCESS_CTL_INFO}
+ */
+ EVENT_IVS_ACCESS_CTL(0x00000204, "门禁事件"),
+ /**
+ * {@link NetSDKLib.DEV_EVENT_SNAPMANUAL}
+ */
+ EVENT_IVS_SNAPMANUAL(0x00000205, "SnapManual事件"),
+ EVENT_IVS_TRAFFIC_ELETAGINFO(0x00000206, "RFID电子车牌标签事件"), // (对应 DEV_EVENT_TRAFFIC_ELETAGINFO_INFO)
+ EVENT_IVS_TRAFFIC_TIREDPHYSIOLOGICAL(0x00000207, "生理疲劳驾驶事件"), // (对应 DEV_EVENT_TIREDPHYSIOLOGICAL_INFO)
+ EVENT_IVS_TRAFFIC_BUSSHARPTURN(0x00000208, "车辆急转报警事件"), // (对应DEV_EVENT_BUSSHARPTURN_INFO)
+ EVENT_IVS_CITIZEN_PICTURE_COMPARE(0x00000209, "人证比对事件"), // (对应 DEV_EVENT_CITIZEN_PICTURE_COMPARE_INFO)
+ EVENT_IVS_TRAFFIC_TIREDLOWERHEAD(0x0000020A, "开车低头报警事件"), // (对应DEV_EVENT_TIREDLOWERHEAD_INFO)
+ EVENT_IVS_TRAFFIC_DRIVERLOOKAROUND(0x0000020B, "开车左顾右盼报警事件"), // (对应DEV_EVENT_DRIVERLOOKAROUND_INFO)
+ EVENT_IVS_TRAFFIC_DRIVERLEAVEPOST(0x0000020C, "开车离岗报警事件"), // (对应DEV_EVENT_DRIVERLEAVEPOST_INFO)
+ EVENT_IVS_MAN_STAND_DETECTION(0x0000020D, "立体视觉站立事件"), // (对应DEV_EVENT_MANSTAND_DETECTION_INFO)
+ EVENT_IVS_MAN_NUM_DETECTION(0x0000020E, "立体视觉区域内人数统计事件"), // (对应DEV_EVENT_MANNUM_DETECTION_INFO)
+ EVENT_IVS_STEREO_NUMBERSTAT(0x0000020F, "客流量统计事件"), // (暂未有具体事件)
+ EVENT_IVS_TRAFFIC_DRIVERYAWN(0x00000210, "开车打哈欠事件"), // (对应DEV_EVENT_DRIVERYAWN_INFO)
+ EVENT_IVS_NUMBERSTAT_PLAN(0x00000211, "客流量统计计划"), // (暂未有具体事件,球机使用,对应规则配置结构体 CFG_NUMBERSTAT_INFO)
+ EVENT_IVS_HEATMAP_PLAN(0x00000212, "热度图计划"), // (暂未有具体事件,球机使用,对应规则配置结构体 CFG_IVS_HEATMAP_INFO)
+ EVENT_IVS_CALLNOANSWERED(0x00000213, "呼叫无答应事件"), //
+ EVENT_IVS_IGNOREINVITE(0x00000214, "无视邀请事件"), //
+ EVENT_IVS_HUMANTRAIT(0x00000215, "人体特征事件"), // (对应 DEV_EVENT_HUMANTRAIT_INFO)
+ EVENT_ALARM_LE_HEADDETECTION(0x00000216, "乐橙人头检测事件"), // (对应 DEV_EVENT_LE_HEADDETECTION_INFO)
+ EVENT_IVS_FACEANALYSIS(0x00000217, "人脸分析事件"), // (暂未有具体事件)
+ EVENT_IVS_TRAFFIC_TURNLEFTAFTERSTRAIGHT(0x00000218, "左转不礼让直行事件"), // (对应 DEV_EVENT_TURNLEFTAFTERSTRAIGHT_INFO)
+ EVENT_IVS_TRAFFIC_BIGBENDSMALLTURN(0x00000219, "大弯小转事件"), // (对应 DEV_EVENT_BIGBENDSMALLTURN_INFO)
+ EVENT_IVS_ROAD_CONSTRUCTION(0x0000021A, "道路施工监测事件"), // (对应DEV_EVENT_ROAD_CONSTRUCTION_INFO)
+ EVENT_IVS_ROAD_BLOCK(0x0000021B, "路障检测事件"), // (对应DEV_EVENT_ROAD_BLOCK_INFO)
+ EVENT_IVS_TRAFFIC_QUEUEJUMP(0x0000021C, "车辆加塞事件"), // (对应 DEV_EVENT_TRAFFIC_QUEUEJUMP_INFO)
+ EVENT_IVS_VEHICLE_SUSPICIOUSCAR(0x0000021D, "嫌疑车辆事件"), // (对应 DEV_EVENT_VEHICLE_SUSPICIOUSCAR_INFO)
+ EVENT_IVS_TRAFFIC_TURNRIGHTAFTERSTRAIGHT(0x0000021E, "右转不礼让直行事件"), // (对应 DEV_EVENT_TURNRIGHTAFTERSTRAIGHT_INFO)
+ EVENT_IVS_TRAFFIC_TURNRIGHTAFTERPEOPLE(0x0000021F, "右转不礼让直行行人"), // (对应 DEV_EVENT_TURNRIGHTAFTERPEOPLE_INFO)
+ EVENT_IVS_INSTALL_CARDREADER(0x00000220, "安装读卡器事件"), // (对应 DEV_EVENT_INSTALL_CARDREADER_INFO)
+ EVENT_ALARM_YALE_DROPBOX_BADTOKEN(0x00000221, " Yale token失效事件,只用于订阅手机推送"), //
+ EVENT_IVS_ACC_OFF_SNAP(0x00000222, "车载设备断电前抓拍上传事件"), // (对应 DEV_EVENT_ACC_OFF_SNAP_INFO)
+ EVENI_IVS_XRAY_DETECTION(0x00000223, "X光检测事件"), // (对应 DEV_EVENT_XRAY_DETECTION_INFO)
+ EVENT_IVS_NOTCLEARCAR(0x00000224, "未清车告警"), // (对应 DEV_EVENT_NOTCLEARCAR_INFO)
+ EVENT_IVS_SOSALEART(0x00000225, "sos求救报警"), // (对应 DEV_EVENT_SOSALEART_INFO)
+ EVENT_IVS_OVERLOAD(0x00000226, "超载抓图"), // (对应 DEV_EVENT_OVERLOAD_INFO)
+ EVENT_IVS_NONWORKINGTIME(0x00000227, "非工作时间告警"), // (对应 DEV_EVENT_NONWORKINGTIME_INFO)
+ EVENT_IVS_TRAFFIC_HIGH_BEAM(0x00000228, "远光灯违章事件"), // (对应 DEV_EVENT_TRAFFIC_HIGH_BEAM_INFO)
+ EVENT_IVS_TRAFFIC_TRUCKFORBID(0x00000229, "禁止货车事件"), // (对应 DEV_EVENT_TRAFFICTRUCKFORBID_INFO)
+ EVENT_IVS_DRIVINGWITHOUTCARD(0x0000022A, "无卡驾驶报警事件"), // (对应 DEV_EVENT_DRIVINGWITHOUTCARD_INFO)
+ EVENT_IVS_HIGHSPEED(0x0000022B, "车辆超速报警事件"), // (对应 DEV_EVENT_HIGHSPEED_INFO)
+ EVENT_IVS_CROWDDETECTION(0x0000022C, "人群密度检测事件"), // (对应结构体 DEV_EVENT_CROWD_DETECTION_INFO)
+ EVENT_IVS_TRAFFIC_CARDISTANCESHORT(0x0000022D, "车间距过小报警事件"), // (对应 DEV_EVENT_TRAFFIC_CARDISTANCESHORT_INFO)
+ /**
+ * {@link NetSDKLib.DEV_EVENT_PEDESTRIAN_JUNCTION_INFO}
+ */
+ EVENT_IVS_PEDESTRIAN_JUNCTION(0x00000230, "行人卡口事件"),
+ EVENT_IVS_VEHICLE_RECOGNITION(0x00000231, "车牌对比事件"), // (智慧加油站项目)(对应 DEV_EVENT_VEHICLE_RECOGNITION_INFO)
+ EVENT_IVS_PASS_CHANGE(0x00000232, "预置点图片变化事件"), // (对应 DEV_EVENT_PASS_CHANGE_INFO)
+ EVENT_IVS_TRAFFIC_PARKING_SPACEDETECTION(0x00000233, "违停相机单球车位检测规则事件"), //
+ EVENT_IVS_TRAFFIC_WAITINGAREA(0x00000234, "违章进入待行区事件"), // (对应 DEV_EVENT_TRAFFIC_WAITINGAREA_INFO)
+ EVENT_IVS_TRAFFIC_BAN(0x00000235, "机动车违法禁令标识事件"), // (对应 DEV_EVENT_TRAFFIC_BAN_INFO)
+ EVENT_IVS_POS_EXCHANGE(0x00000236, "POS机交易事件"), // (对应 DEV_EVENT_POS_EXCHANGE_INFO)
+ EVENT_IVS_STEREO_FIGHTDETECTION(0x00000237, "立体行为分析打架/剧烈运动检测规则"), // (仅用于规则配置,对应事件 EVENT_IVS_FIGHTDETECTION)
+ EVENT_IVS_STEREO_DISTANCE_DETECTION(0x00000238, "立体行为分析间距异常/人员靠近检测"), // (仅用于规则配置,对应事件)
+ EVENT_IVS_STEREO_STEREOFALLDETECTION(0x00000239, "立体行为分析跌倒检测规则"), // (仅用于规则配置,对应事件 EVENT_IVS_TUMBLE_DETECTION)
+ EVENT_IVS_STEREO_STAYDETECTION(0x0000023A, "立体行为分析人员滞留检测规则"), // (仅用于规则配置,对应事件 EVENT_IVS_STAYDETECTION)
+ EVENT_IVS_BANNER_DETECTION(0x0000023B, "拉横幅事件"), // (对应 DEV_EVENT_BANNER_DETECTION_INFO)
+ EVENT_IVS_NORMAL_FIGHTDETECTION(0x0000023C, "普通打架事件"), // (只用于普通打架规则, 事件采用EVENT_IVS_FIGHTDETECTION)
+ EVENT_IVS_ELEVATOR_ABNORMAL(0x0000023D, "电动扶梯运行异常事件"), // (对应DEV_EVENT_ELEVATOR_ABNORMAL_INFO)
+ EVENT_IVS_NONMOTORDETECT(0x0000023E, "非机动车检测"), // (对应结构体 DEV_EVENT_NONMOTORDETECT_INFO)
+ EVENT_IVS_VEHICLEDETECT(0x0000023F, "机动车检测"), // (只用于规则配置,事件采用EVENT_IVS_TRAFFICJUNCTION)
+ EVENT_IVS_TRAFFIC_PARKING_B(0x00000240, "交通违章-B类违章停车"), // (对应 DEV_EVENT_TRAFFIC_PARKING_B_INFO)
+ EVENT_IVS_TRAFFIC_PARKING_C(0x00000241, "交通违章-C类违章停车"), // (对应 DEV_EVENT_TRAFFIC_PARKING_C_INFO)
+ EVENT_IVS_TRAFFIC_PARKING_D(0x00000242, "交通违章-D类违章停车"), // (对应 DEV_EVENT_TRAFFIC_PARKING_D_INFO)
+ EVENT_IVSS_FACEATTRIBUTE(0x00000243, "IVSS人脸检测事件 (暂未有具体事件)"), //
+ EVENT_IVSS_FACECOMPARE(0x00000244, "IVSS目标识别事件 (暂未有具体事件)"), //
+ EVENT_IVS_FIREWARNING(0x00000245, "火警事件"), // (对应 DEV_EVENT_FIREWARNING_INFO)
+ EVENT_IVS_SHOPPRESENCE(0x00000246, "商铺占道经营事件"), // (对应 DEV_EVENT_SHOPPRESENCE_INFO)
+ EVENT_IVS_WASTEDUMPED(0x00000247, "垃圾违章倾倒事件"), // (对应 DEV_EVENT_WASTEDUMPED_INFO)
+ EVENT_IVS_SPILLEDMATERIAL_DETECTION(0x00000248, "抛洒物检测事件"), // (对应 DEV_EVENT_SPILLEDMATERIAL_DETECTION_INFO)
+ EVENT_IVS_STEREO_MANNUM_DETECTION(0x00000249, "立体行为分析人数异常检测"), // (仅用于规则配置,对应事件 EVENT_IVS_MAN_NUM_DETECTION)
+ EVENT_IVS_DISTANCE_DETECTION(0x0000024A, "异常间距事件 "), // (对应 DEV_EVENT_DISTANCE_DETECTION_INFO)
+ EVENT_IVS_TRAFFIC_NONMOTOR_OVERLOAD(0x0000024B, "非机动车超载事件"), // (对应 DEV_EVENT_TRAFFIC_NONMOTOR_OVERLOAD_INFO)
+ EVENT_IVS_TRAFFIC_NONMOTOR_WITHOUTSAFEHAT(0x0000024C, "非机动车未戴安全帽事件"), // (对应 DEV_EVENT_TRAFFIC_NONMOTOR_WITHOUTSAFEHAT_INFO)
+ EVENT_IVS_TRAFFIC_JAM_STOP_ON_ZEBRACROSSING(0x0000024D, "拥堵滞留斑马线事件"), // (对应 DEV_EVENT_TRAFFIC_JAM_STOP_ON_ZEBRACROSSING_INFO)
+
+ EVENT_IVS_FLOWBUSINESS(0x0000024E, "流动摊贩事件"), // (对应 DEV_EVENT_FLOWBUSINESS_INFO)
+
+ EVENT_IVS_CITY_MOTORPARKING(0x0000024F, "城市机动车违停事件"), // (对应 DEV_EVENT_CITY_MOTORPARKING_INFO)
+
+ EVENT_IVS_CITY_NONMOTORPARKING(0x00000250, "城市机非动车违停事件"), // (对应 DEV_EVENT_CITY_NONMOTORPARKING_INFO)
+
+ EVENT_IVS_LANEDEPARTURE_WARNNING(0X00000251, "车道偏移预警"), // (对应 DEV_EVENT_LANEDEPARTURE_WARNNING_INFO)
+
+ EVENT_IVS_FORWARDCOLLISION_WARNNING(0x00000252, "前向碰撞预警"), // (对应 DEV_EVENT_FORWARDCOLLISION_WARNNING_INFO)
+
+ EVENT_IVS_MATERIALSSTAY(0x00000253, "物料堆放事件"), // (对应 DEV_EVENT_MATERIALSSTAY_INFO)
+
+ EVENT_IVS_TRAFFIC_NONMOTOR_HOLDUMBRELLA(0x00000254, "非机动车装载伞具"), // (对应 DEV_EVENT_TRAFFIC_NONMOTOR_HOLDUMBRELLA_INFO)
+
+ EVENT_IVS_JABLOTRON_ALARM(0x00000255, "客户报警产品"), //
+
+ EVENT_IVS_VIDEOUNFOCUS_ALARM(0x00000256, "视频虚焦事件"), // (对应DEV_EVENT_VIDEOUNFOCUS_INFO)
+
+ EVENT_IVS_FLOATINGOBJECT_DETECTION(0x00000257, "漂浮物检测事件"), // (对应 DEV_EVENT_FLOATINGOBJECT_DETECTION_INFO)
+
+ EVENT_IVS_SHIP_DETECTION(0x00000258, "船舶检测事件"), // (对应 DEV_EVENT_SHIP_DETECTION_INFO)
+
+ EVENT_IVS_AIRPLANE_DETECTION(0x00000259, "飞机行为检测事件"), // (对应 DEV_EVENT_AIRPLANE_DETECTION_INFO)
+
+ EVENT_IVS_PHONECALL_DETECT(0x0000025A, "打电话检测事件"), // (对应 DEV_EVENT_PHONECALL_DETECT_INFO)
+
+ EVENT_IVS_SMOKING_DETECT(0x0000025B, "吸烟检测事件"), // (对应 DEV_EVENT_SMOKING_DETECT_INFO)
+
+ EVENT_IVS_RADAR_SPEED_LIMIT_ALARM(0x0000025C, "雷达限速报警事件"), // (对应 DEV_EVENT_RADAR_SPEED_LIMIT_ALARM_INFO)
+
+ EVENT_IVS_WATER_LEVEL_DETECTION(0x0000025D, "水位检测事件"), // (对应 DEV_EVENT_WATER_LEVEL_DETECTION_INFO)
+
+ EVENT_IVS_HOLD_UMBRELLA(0x0000025E, "违规撑伞检测事件"), // (对应 DEV_EVENT_HOLD_UMBRELLA_INFO)
+
+ EVENT_IVS_GARBAGE_EXPOSURE(0x0000025F, "垃圾暴露检测事件"), // (对应 DEV_EVENT_GARBAGE_EXPOSURE_INFO)
+
+ EVENT_IVS_DUSTBIN_OVER_FLOW(0x00000260, "垃圾桶满溢检测事件"), // (对应 DEV_EVENT_DUSTBIN_OVER_FLOW_INFO)
+
+ EVENT_IVS_DOOR_FRONT_DIRTY(0x00000261, "门前脏乱检测事件"), // (对应 DEV_EVENT_DOOR_FRONT_DIRTY_INFO)
+
+ EVENT_IVS_QUEUESTAY_DETECTION(0X00000262, "排队滞留时间报警事件"), // (对应 DEV_EVENT_QUEUESTAY_DETECTION_INFO)
+
+ EVENT_IVS_QUEUENUM_DETECTION(0X00000263, "排队人数异常报警事件"), // (对应 DEV_EVENT_QUEUENUM_DETECTION_INFO)
+
+ EVENT_IVS_GENERATEGRAPH_DETECTION(0X00000264, "生成图规则事件"), // (对应 DEV_EVENT_GENERATEGRAPH_DETECTION_INFO)
+
+ EVENT_IVS_TRAFFIC_PARKING_MANUAL(0x00000265, "交通违章-手动取证"), // (对应 DEV_EVENT_TRAFFIC_PARKING_MANUAL_INFO)
+
+ EVENT_IVS_HELMET_DETECTION(0x00000266, "安全帽检测事件"), // (对应 DEV_EVENT_HELMET_DETECTION_INFO)
+
+ EVENT_IVS_DEPOSIT_DETECTION(0x00000267, "包裹堆积程度检测事件"), // (对应 DEV_EVENT_DEPOSIT_DETECTION_INFO)
+
+ EVENT_IVS_HOTSPOT_WARNING(0x00000268, "热点异常报警事件"), // (对应 DEV_EVENT_HOTSPOT_WARNING_INFO)
+
+ EVENT_IVS_WEIGHING_PLATFORM_DETECTION(0x00000269, "称重平台检测事件"), // (对应 DEV_EVENT_WEIGHING_PLATFORM_DETECTION_INFO)
+
+ EVENT_IVS_CLASSROOM_BEHAVIOR(0x0000026A, "课堂行为分析事件"), // (对应 DEV_EVENT_CLASSROOM_BEHAVIOR_INFO)
+
+ EVENT_IVS_VEHICLE_DISTANCE_NEAR(0x0000026B, "安全驾驶车距过近报警事件"), // (对应 DEV_EVENT_VEHICLE_DISTANCE_NEAR_INFO)
+
+ EVENT_IVS_TRAFFIC_DRIVER_ABNORMAL(0x0000026C, "驾驶员异常报警事件"), // (对应 DEV_EVENT_TRAFFIC_DRIVER_ABNORMAL_INFO)
+
+ EVENT_IVS_TRAFFIC_DRIVER_CHANGE(0x0000026D, "驾驶员变更报警事件"), // (对应 DEV_EVENT_TRAFFIC_DRIVER_CHANGE_INFO)
+
+ EVENT_IVS_WORKCLOTHES_DETECT(0x0000026E, "工装(安全帽/工作服等)检测事件"), // (对应 DEV_EVENT_WORKCLOTHES_DETECT_INFO)
+
+ EVENT_IVS_SECURITYGATE_PERSONALARM(0x0000026F, "安检门人员报警事件"), // (对应 DEV_EVENT_SECURITYGATE_PERSONALARM_INFO)
+
+ EVENT_IVS_STAY_ALONE_DETECTION(0x00000270, "单人独处事件"), // (对应 DEV_EVENT_STAY_ALONE_DETECTION_INFO)
+
+ EVENT_IVS_TRAFFIC_ROAD_BLOCK(0x00000271, "交通路障检测事件"), // (对应 DEV_EVENT_TRAFFIC_ROAD_BLOCK_INFO)
+
+ EVENT_IVS_TRAFFIC_ROAD_CONSTRUCTION(0x00000272, "交通道路施工检测事件"), // (对应 DEV_EVENT_TRAFFIC_ROAD_CONSTRUCTION_INFO)
+
+ EVENT_IVS_XRAY_DETECT_BYOBJECT(0x00000273, "X光按物体检测规则配置"), // , 对应事件 EVENI_IVS_XRAY_DETECTION
+
+ EVENT_IVS_WORKSTATDETECTION(0x00000274, "作业统计事件"), // (对应 DEV_EVENT_WORKSTATDETECTION_INFO)
+
+ EVENT_IVS_INFRAREDBLOCK(0x00000275, "红外阻断事件"), // (对应 DEV_EVENT_INFRAREDBLOCK_INFO)
+
+ EVENT_IVS_FEATURE_ABSTRACT(0x00000276, "特征提取事件"), // (对应 DEV_EVENT_FEATURE_ABSTRACT_INFO)
+
+ EVENT_IVS_INTELLI_SHELF(0x00000277, "智能补货事件"), // (对应 DEV_EVENT_INTELLI_SHELF_INFO)
+
+ EVENT_IVS_PANORAMA_SHOT(0x00000278, "全景抓拍事件"), // (对应 DEV_EVENT_PANORAMA_SHOT_INFO)
+
+ EVENT_ALARM_SMARTMOTION_HUMAN(0x00000279, "智能视频移动侦测事件(人)"), // ,目前只用于订阅手机推送, 无具体事件
+
+ EVENT_ALARM_SMARTMOTION_VEHICLE(0x0000027A, "智能视频移动侦测事件(车)"), // ,目前只用于订阅手机推送, 无具体事件
+
+ EVENT_IVS_CAR_DRIVING_IN_OUT(0x0000027B, "车辆驶入驶出状态事件"), // (对应 DEV_EVENT_CAR_DRIVING_IN_OUT_INFO)
+
+ EVENT_IVS_PARKINGSPACE_STATUS(0x0000027C, "停车位状态事件"), // (对应 DEV_EVENT_PARKINGSPACE_STATUS_INFO)
+
+ EVENT_IVS_VIOLENT_THROW_DETECTION(0x0000027D, "暴力抛物检测"), // (对应 DEV_EVENT_VIOLENT_THROW_DETECTION_INFO)
+
+ EVENT_IVS_TRAMCARSECTIONS_DETECTION(0x0000027E, "矿车超挂报警事件"), // (对应 DEV_EVENT_TRAMCARSECTIONS_DETECTION_INFO)
+
+ EVENT_IVS_ALARM_BOX_ALARM(0x0000027F, "报警盒通道的触发报警事件"), // , 目前只用于订阅手机推送
+
+ EVENT_IVS_FACE_COMPARISION(0x00000280, "人脸比对事件"), // , 专用于手机推送的目标识别事件, 目前只用于订阅手机推送
+
+ EVENT_IVS_FACEBODY_DETECT(0x00000281, "人像检测事件"), // (对应 DEV_EVENT_FACEBODY_DETECT_INFO)
+
+ EVENT_IVS_FACEBODY_ANALYSE(0x00000282, "人像识别事件"), // (对应 DEV_EVENT_FACEBODY_ANALYSE_INFO)
+
+ EVENT_IVS_GASSTATION_VEHICLE_DETECT(0x00000283, "加油站车辆检测事件"), // (对应 DEV_EVENT_GASSTATION_VEHICLE_DETECT_INFO)
+
+ EVENT_IVS_CONGESTION_DETECTION(0x00000284, "道路场景车辆拥堵报警事件"), // (对应 DEV_EVENT_CONGESTION_DETECTION_INFO)
+
+ EVENT_IVS_VEHICLELIMIT_DETECTION(0x00000285, "停车场场景下停车车辆上限报警"), // (对应 DEV_EVENT_VEHICLELIMIT_DETECTION_INFO)
+
+ EVENT_IVS_ANIMAL_DETECTION(0x00000286, "动物检测事件"), // (对应 DEV_EVENT_ANIMAL_DETECTION_INFO)
+ /**
+ * {@link com.netsdk.lib.structure.DEV_EVENT_SHOP_WINDOW_POST_INFO}
+ */
+
+ EVENT_IVS_SHOP_WINDOW_POST(0x00000287, "橱窗张贴事件"),
+ /**
+ * (对应 DEV_EVENT_SHOP_SIGN_ABNORMAL_INFO)
+ * {@link com.netsdk.lib.structure.DEV_EVENT_SHOP_SIGN_ABNORMAL_INFO}
+ */
+ EVENT_IVS_SHOP_SIGN_ABNORMAL(0x00000288, "店招异常事件"),
+
+ EVENT_IVS_BREED_DETECTION(0x00000289, "智慧养殖检测事件"), // (对应 DEV_EVENT_BREED_DETECTION_INFO)
+
+ EVENT_IVS_AIRPORT_VEHICLE_DETECT(0x0000028A, "机场智能保障车辆检测事件"), // (对应 DEV_EVENT_AIRPORT_VEHICLE_DETECT_INFO)
+
+ EVENT_IVS_PIG_TEMPERATURE_DETECT(0x0000028B, "智慧养殖猪体温检测"), // (只用于规则配置)
+
+ EVENT_IVS_MAN_CAR_COEXISTANCE(0x0000028C, "人车共存事件"), // (对应 DEV_EVENT_MAN_CAR_COEXISTANCE_INFO)
+
+ EVENT_IVS_HIGH_TOSS_DETECT(0x0000028D, "高空抛物检测"), // (对应DEV_EVENT_HIGH_TOSS_DETECT_INFO)
+
+ EVENT_IVS_ELECTRIC_GLOVE_DETECT(0x0000028E, "电力检测手套检测事件"), // (对应DEV_EVENT_ELECTRIC_GLOVE_DETECT_INFO)
+
+ EVENT_IVS_ELECTRIC_LADDER_DETECT(0x0000028F, "电力检测梯子检测事件"), // (对应DEV_EVENT_ELECTRIC_LADDER_DETECT_INFO)
+
+ EVENT_IVS_ELECTRIC_CURTAIN_DETECT(0x00000290, "电力检测布幔检测事件"), // (对应DEV_EVENT_ELECTRIC_CURTAIN_DETECT_INFO)
+
+ EVENT_IVS_ELECTRIC_FENCE_DETECT(0x00000291, "电力检测围栏检测事件"), // (对应DEV_EVENT_ELECTRIC_FENCE_DETECT_INFO)
+
+ EVENT_IVS_ELECTRIC_SIGNBOARD_DETECT(0x00000292, "电力检测标识牌检测事件"), // (对应DEV_EVENT_ELECTRIC_SIGNBOARD_DETECT_INFO)
+
+ EVENT_IVS_ELECTRIC_BELT_DETECT(0x00000293, "电力检测安全带检测事件"), // (对应DEV_EVENT_ELECTRIC_BELT_DETECT_INFO)
+
+ EVENT_IVS_RADAR_LINE_DETECTION(0x00000294, "雷达警戒线/绊线检测"), // (对应DEV_EVENT_RADAR_LINE_DETECTION_INFO)
+
+ EVENT_IVS_RADAR_REGION_DETECTION(0x00000295, "雷达警戒区检测事件"), // (对应DEV_EVENT_RADAR_REGION_DETECTION_INFO)
+
+ EVENT_IVS_AUDIO_INTENSITY(0x00000296, "异常音事件"), // (对应 DEV_EVENT_AUDIO_INTENSITY_INFO)
+
+ EVENT_IVS_PARKING_LOT_STATUS_DETECTION(0x00000297, "室外停车位状态检测"), // (对应 DEV_EVENT_PARKING_LOT_STATUS_DETECTION_INFO)
+
+ EVENT_IVS_VEHICLE_COMPARE(0x00000298, ""), // (只用于规则配置)
+
+ EVENT_IVS_DREGS_UNCOVERED(0x00000299, "渣土车未遮盖载货检测事件"), // (对应 DEV_EVENT_DREGS_UNCOVERED_INFO)
+
+ EVENT_IVS_WALK_DETECTION(0x0000029A, "走动检测事件"), // (对应 DEV_EVENT_WALK_DETECTION_INFO)
+
+ EVENT_IVS_BACK_TO_DETECTION(0x0000029B, "背对检测事件"), // (对应 DEV_EVENT_BACK_TO_DETECTION_INFO)
+
+ EVENT_IVS_WRITE_ON_THE_BOARD_DETECTION(0x0000029C, "板书检测事件"), // (对应 DEV_EVENT_WRITE_ON_THE_BOARD_DETECTION_INFO)
+
+ EVENT_IVS_SMART_KITCHEN_CLOTHES_DETECTION(0x0000029D, "智慧厨房穿着检测事件"), // (对不戴口罩、厨师帽以及颜色不符合规定的厨师服进行报警)(对应 DEV_EVENT_SMART_KITCHEN_CLOTHES_DETECTION_INFO)
+
+ EVENT_IVS_SLEEP_DETECT(0x0000029E, "睡觉检测事件"), // (对应 DEV_EVENT_SLEEP_DETECT_INFO)
+
+ EVENT_IVS_WALK_AROUND_DETECT(0x0000029F, "随意走动检测事件"), // (对应 DEV_EVENT_WALK_AROUND_DETECT_INFO)
+
+ EVENT_IVS_PLAY_MOBILEPHONE(0x00000300, "玩手机事件"), // (对应 DEV_EVENT_PLAY_MOBILEPHONE_INFO)
+
+ EVENT_IVS_FINANCE_CONTRABAND_DETECT(0x00000301, "智慧金融违规物品检测事件"), // (对应 DEV_EVENT_FINANCE_CONTRABAND_DETECT_INFO)
+
+ EVENT_IVS_FINANCE_CASH_TRANSACTION(0x00000302, "智慧金融现金交易检测事件"), // (对应 DEV_EVENT_FINANCE_CASH_TRANSACTION_INFO)
+
+ /**
+ * (对应 DEV_EVENT_ANATOMY_TEMP_DETECT_INFO)
+ */
+ EVENT_IVS_ANATOMY_TEMP_DETECT(0x00000303, "人体温智能检测事件"),
+
+ EVENT_IVS_ACTIVITY_ANALYSE(0x00000304, "活跃度统计规则"), // (只用于规则配置)
+
+ EVENT_IVS_DOOR_STATUS(0x00000305, "门状态事件"), // (对应 DEV_EVENT_DOOR_STATUS_INFO)
+
+ EVENT_IVS_DHOP_CUSTOM(0x00000306, "Dhop自定义事件"), // (start/stop, 对应 DEV_EVENT_DHOP_CUSTOM_INFO)
+
+ EVENT_IVS_DHOP_CUSTOM_ONCE(0x00000307, "Dhop自定义事件"), // (Pulse, 对应 DEV_EVENT_DHOP_CUSTOM_INFO)
+
+ EVENT_IVS_FOG_DETECTION(0x00000308, "起雾检测事件"), // (对应 DEV_EVENT_FOG_DETECTION)
+
+ EVENT_IVS_TRAFFIC_VEHICLE_BC(0x00000309, "飙车事件"), // (对应 DEV_EVENT_TRAFFIC_VEHICLE_BC )
+
+ EVENT_IVS_TRAFFIC_MOTOR_OVERLOAD(0x0000030A, "机动车超载"), // (对应 DEV_EVENT_TRAFFIC_MOTOR_OVERLOAD_INFO)
+
+ EVENT_IVS_TRAFFIC_PLATE_OCCLUSION(0x0000030B, "车牌污损"), // (对应 DEV_EVENT_TRAFFIC_PLATE_OCCLUSION_INFO)
+
+ EVENT_IVS_NONMOTOR_ENTRYING(0x0000030C, "非机动车进入电梯"), // (对应 DEV_EVENT_NONMOTOR_ENTRYING_INFO)
+
+ EVENT_IVS_WATER_STAGE_MONITOR(0x0000030D, "水位监测事件"), // , 目前仅用于任务型智能分析 (对应 DEV_EVENT_WATER_STAGE_MONITOR_INFO)
+
+ EVENT_IVS_TRAFFIC_ROAD_ALERT(0x0000030E, "道路安全预警"), // (对应 DEV_EVENT_TRAFFIC_ROAD_ALERT_INFO)
+
+ EVENT_IVS_BREAK_RULE_BUILDING_DETECTION(0x0000030F, "违章建筑检测事件"), // (对应 DEV_EVENT_BREAK_RULE_BUILDIING_DETECTION_INFO)
+
+ EVENT_IVS_TRAFFIC_NONMOTOR_RUN_REDLIGHT(0x00000310, "非机动车闯红灯"), // (对应 DEV_EVENT_TRAFFIC_NONMOTOR_RUN_REDLIGHT_INFO )
+ /**
+ * 占用应急车道事件
+ */
+ EVENT_IVS_TRAFFIC_VEHICLE_IN_EMERGENCY_LANE(0x00000311, "占用应急车道事件"),// (对应 DEV_EVENT_TRAFFIC_VEHICLE_IN_EMERGENCY_LANE_INFO )
+
+ EVENT_IVS_TRAFFIC_REAREND_ACCIDENT(0x00000322, "交通事故事件"), // (对应 DEV_EVENT_TRAFFIC_REAREND_ACCIDENT_INFO )
+ /**
+ * 特殊车辆检测
+ */
+ EVENT_IVS_TRAFFIC_SPECIAL_VEHICLE_DETECT(0x00000333, "特殊车辆检测"),// (对应 DEV_EVENT_TRAFFIC_SPECIAL_VEHICLE_INFO )
+
+ EVENT_IVS_TRAFFIC_NONMOTOR(0x00000335, "交通非机动车事件检测"), // (对应 DEV_EVENT_TRAFFIC_NONMOTOR_INFO )
+
+ EVENT_IVS_TRAFFIC_VISIBILITY(0x00000337, "交通能见度事件检测"), // (对应 DEV_EVENT_TRAFFIC_VISIBILITY_INFO )
+
+ EVENT_IVS_ANYTHING_DETECT(0x0000033F, "全物体类型检测事件"), // 全物体类型检测事件 ( 对应 DEV_EVENT_ANYTHING_DETECT_INFO )
+
+ EVENT_IVS_OBJECT_ABNORMAL(0x00000340, "目标异常事件"), // 目标异常事件(对应 DEV_EVENT_OBJECT_ABNORMAL_INFO )
+
+ EVENT_IVS_STREET_SUNCURE(0x00000347,"沿街晾晒事件"), //对应DEV_EVENT_STREET_SUNCURE_INFO
+
+ EVENT_IVS_OUTDOOR_ADVERTISEMENT(0x00000348,"户外广告事件"), //对应DEV_EVENT_OUTDOOR_ADVERTISEMENT_INFO
+
+ EVENT_IVS_HUDDLE_MATERIAL(0x00000349,"乱堆物料检测事件"), //对应DEV_EVENT_HUDDLE_MATERIAL_INFO
+
+ EVENT_IVS_FOLLOW_CAR_ALARM(0x0000034F,"跟车报警事件"), //对应DEV_EVENT_FOLLOW_CAR_ALARM_INFO
+
+ EVENT_IVS_FIRE_LANE_DETECTION(0x00000324,"消防占道检测事件"), //对应DEV_EVENT_FIRE_LANE_DETECTION_INFO)
+
+ EVENT_IVS_TRAFFIC_NON_MOTOR_RETROGRADE(0x00000328,"非机动车逆行事件"), //(对应 DEV_EVENT_TRAFFIC_NON_MOTOR_RETROGRADE_INFO)
+
+ EVENT_IVS_TRAFFIC_VEHICLE_CLEANLINESS(0x00000338, "交通车辆清洁度检测事件检测"), //(对应 DEV_EVENT_TRAFFIC_VEHICLE_CLEANLINESS_INFO)
+
+ EVENT_IVS_TRAFFIC_PARKING_STATISTICS(0x0000035B,"车位统计事件"), //(对应 DEV_EVENT_TRAFFIC_PARKING_STATISTICS_INFO)
+
+ EVENT_IVS_HEAT_IMAGING_TEMPER(0x0000035C,"热成像测温点温度异常报警事件"), //(对应 DEV_EVENT_HEAT_IMAGING_TEMPER_INFO)
+
+ EVENT_IVS_FIRE_EXTINGUISHER_DETECTION(0x0000036C,"灭火器检测事件"), // 对应DEV_EVENT_FIRE_EXTINGUISHER_DETECTION_INFO
+
+ EVENT_IVS_XRAY_UNPACKING_CHECK(0x00000384,"X光开包检查事件"), // 对应DEV_EVENT_XRAY_UPACKING_CHECK_INFO
+
+ EVENT_IVS_RIDING_MOTOR_CYCLE(0x00000401,"摩托车骑跨检测事件"), // 对应DEV_EVENT_RIDING_MOTOR_CYCLE_INFO
+
+ EVENT_IVS_HUMAN_ANIMAL_COEXISTENCE(0x00000411,"人和动物检测事件"), // 对应 DEV_EVENT_HUMAN_ANIMAL_COEXISTENCE_INFO
+
+ EVENT_IVS_TEMPERATURE_ALARM(0x0000042A,"温度报警事件"), // 对应 NET_DEV_EVENT_TEMPERATURE_ALARM_INFO
+
+ EVENT_IVS_ILLEGAL_CARRIAGE( 0x0000042F,"非法运输事件"), // (对应 NET_DEV_EVENT_ILLEGAL_CARRIAGE_INFO)
+
+ EVENT_IVS_GARBAGE_PLASTICBAG( 0x00000459," 打包垃圾检测事件"); // (对应 NET_DEV_EVENT_GARBAGE_PLASTICBAG_INFO)
+
+ private int type;
+ private String description;
+
+ private EM_EVENT_IVS_TYPE(int type, String description) {
+ this.type = type;
+ this.description = description;
+ }
+
+ public static EM_EVENT_IVS_TYPE getEventType(int type) {
+ for (EM_EVENT_IVS_TYPE event : EM_EVENT_IVS_TYPE.values()) {
+ if (type == event.getType()) {
+ return event;
+ }
+ }
+ return null;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_LEVEL.java b/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_LEVEL.java
new file mode 100644
index 0000000..bd1f309
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_LEVEL.java
@@ -0,0 +1,69 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 事件级别枚举
+ *
+ * @author 47040
+ * @since Created in 2021/5/13 19:49
+ */
+public enum EM_EVENT_LEVEL {
+
+ /**
+ * 未知
+ */
+ EM_EVENT_LEVEL_UNKNOWN(-1, "未知"),
+ /**
+ * 提示
+ */
+ EM_EVENT_LEVEL_HINT(0, "提示"),
+ /**
+ * 普通
+ */
+ EM_EVENT_LEVEL_GENERAL(1, "普通"),
+ /**
+ * 警告
+ */
+ EM_EVENT_LEVEL_WARNING(2, "警告");
+
+ private final int value;
+ private final String note;
+
+ EM_EVENT_LEVEL(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_EVENT_LEVEL enumType : EM_EVENT_LEVEL.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_EVENT_LEVEL enumType : EM_EVENT_LEVEL.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_EVENT_LEVEL getEnum(int value) {
+ for (EM_EVENT_LEVEL e : EM_EVENT_LEVEL.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_EVENT_LEVEL.EM_EVENT_LEVEL_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_ORDER.java b/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_ORDER.java
new file mode 100644
index 0000000..5d139ed
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_ORDER.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 设备给客户端传离线图片需要按照的顺序
+ * @date 2022/11/24 20:18:58
+ */
+public enum EM_EVENT_ORDER {
+ /**
+ * 未知
+ */
+ EM_EVENT_ORDER_UNKNOWN(0, "未知"),
+ /**
+ * 正序上传
+ */
+ EM_EVENT_ORDER_ASCENT(1, "正序上传"),
+ /**
+ * 倒序上传
+ */
+ EM_EVENT_ORDER_DESCENT(2, "倒序上传");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_EVENT_ORDER(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_EVENT_ORDER enumType : EM_EVENT_ORDER.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_EVENT_ORDER enumType : EM_EVENT_ORDER.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_TYPE.java
new file mode 100644
index 0000000..70f7df3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_TYPE.java
@@ -0,0 +1,1513 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.structure.DEV_EVENT_TRAFFIC_NONMOTOR_INFO;
+import com.netsdk.lib.structure.DEV_EVENT_TRAFFIC_REAREND_ACCIDENT_INFO;
+import com.netsdk.lib.structure.DEV_EVENT_TRAFFIC_VISIBILITY_INFO;
+
+/**
+ * className:EM_EVENT_TYPE
+ * description:
+ * author:251589
+ * createTime:2021/1/25 17:24
+ *
+ * @version v1.0
+ */
+public enum EM_EVENT_TYPE {
+ /**
+ * 订阅所有事件
+ */
+ EVENT_IVS_ALL(0x00000001, "订阅所有事件"),
+ /**
+ * 警戒线事件
+ */
+ EVENT_IVS_CROSSLINEDETECTION(0x00000002, "警戒线事件"),
+ /**
+ * 警戒区事件
+ */
+ EVENT_IVS_CROSSREGIONDETECTION(0x00000003, "警戒区事件"),
+ /**
+ * 贴条事件
+ */
+ EVENT_IVS_PASTEDETECTION(0x00000004, "贴条事件"),
+ /**
+ * 物品遗留事件
+ */
+ EVENT_IVS_LEFTDETECTION(0x00000005, "物品遗留事件"),
+ /**
+ * 停留事件
+ */
+ EVENT_IVS_STAYDETECTION(0x00000006, "停留事件"),
+ /**
+ * 徘徊事件
+ */
+ EVENT_IVS_WANDERDETECTION(0x00000007, "徘徊事件"),
+ /**
+ * 物品保全事件
+ */
+ EVENT_IVS_PRESERVATION(0x00000008, "物品保全事件"),
+ /**
+ * 移动事件
+ */
+ EVENT_IVS_MOVEDETECTION(0x00000009, "移动事件"),
+ /**
+ * 尾随事件
+ */
+ EVENT_IVS_TAILDETECTION(0x0000000A, "尾随事件"),
+ /**
+ * 聚众事件
+ */
+ EVENT_IVS_RIOTERDETECTION(0x0000000B, "聚众事件"),
+ /**
+ * 火警事件
+ */
+ EVENT_IVS_FIREDETECTION(0x0000000C, "火警事件"),
+ /**
+ * 烟雾报警事件
+ */
+ EVENT_IVS_SMOKEDETECTION(0x0000000D, "烟雾报警事件"),
+ /**
+ * 斗殴事件
+ */
+ EVENT_IVS_FIGHTDETECTION(0x0000000E, "斗殴事件"),
+ /**
+ * 流量统计事件
+ */
+ EVENT_IVS_FLOWSTAT(0x0000000F, "流量统计事件"),
+ /**
+ * 数量统计事件
+ */
+ EVENT_IVS_NUMBERSTAT(0x00000010, "数量统计事件"),
+ /**
+ * 摄像头覆盖事件
+ */
+ EVENT_IVS_CAMERACOVERDDETECTION(0x00000011, "摄像头覆盖事件"),
+ /**
+ * 摄像头移动事件
+ */
+ EVENT_IVS_CAMERAMOVEDDETECTION(0x00000012, "摄像头移动事件"),
+ /**
+ * 视频异常事件
+ */
+ EVENT_IVS_VIDEOABNORMALDETECTION(0x00000013, "视频异常事件"),
+ /**
+ * 视频损坏事件
+ */
+ EVENT_IVS_VIDEOBADDETECTION(0x00000014, "视频损坏事件"),
+ /**
+ * 交通管理事件
+ */
+ EVENT_IVS_TRAFFICCONTROL(0x00000015, "交通管理事件"),
+ /**
+ * 交通事故事件
+ */
+ EVENT_IVS_TRAFFICACCIDENT(0x00000016, "交通事故事件"),
+ /**
+ * 交通路口事件----老规则
+ */
+ EVENT_IVS_TRAFFICJUNCTION(0x00000017, "交通路口事件----老规则"),
+ /**
+ * 交通卡口事件----老规则
+ */
+ EVENT_IVS_TRAFFICGATE(0x00000018, "交通卡口事件----老规则"),
+ /**
+ * 交通抓拍事件
+ */
+ EVENT_TRAFFICSNAPSHOT(0x00000019, "交通抓拍事件"),
+ /**
+ * 人脸检测事件
+ */
+ EVENT_IVS_FACEDETECT(0x0000001A, "人脸检测事件"),
+ /**
+ * 交通拥堵事件,{@link NetSDKLib.DEV_EVENT_TRAFFICJAM_INFO}
+ */
+ EVENT_IVS_TRAFFICJAM(0x0000001B, "交通拥堵事件"),
+ /**
+ * 非机动车占机动车车道事件
+ */
+ EVENT_IVS_TRAFFIC_NONMOTORINMOTORROUTE(0x0000001C, "非机动车占机动车车道事件"),
+ /**
+ * 交通违章-闯红灯事件
+ */
+ EVENT_IVS_TRAFFIC_RUNREDLIGHT(0x00000100, "交通违章-闯红灯事件"),
+ /**
+ * 交通违章-压车道线事件
+ */
+ EVENT_IVS_TRAFFIC_OVERLINE(0x00000101, "交通违章-压车道线事件"),
+ /**
+ * 交通违章-逆行事件
+ */
+ EVENT_IVS_TRAFFIC_RETROGRADE(0x00000102, "交通违章-逆行事件"),
+ /**
+ * 交通违章-违章左转
+ */
+ EVENT_IVS_TRAFFIC_TURNLEFT(0x00000103, "交通违章-违章左转"),
+ /**
+ * 交通违章-违章右转
+ */
+ EVENT_IVS_TRAFFIC_TURNRIGHT(0x00000104, "交通违章-违章右转"),
+ /**
+ * 交通违章-违章掉头
+ */
+ EVENT_IVS_TRAFFIC_UTURN(0x00000105, "交通违章-违章掉头"),
+ /**
+ * 交通违章-超速
+ */
+ EVENT_IVS_TRAFFIC_OVERSPEED(0x00000106, "交通违章-超速"),
+ /**
+ * 交通违章-低速
+ */
+ EVENT_IVS_TRAFFIC_UNDERSPEED(0x00000107, "交通违章-低速"),
+ /**
+ * 交通违章-违章停车
+ */
+ EVENT_IVS_TRAFFIC_PARKING(0x00000108, "交通违章-违章停车"),
+ /**
+ * 交通违章-不按车道行驶
+ */
+ EVENT_IVS_TRAFFIC_WRONGROUTE(0x00000109, "交通违章-不按车道行驶"),
+ /**
+ * 交通违章-违章变道
+ */
+ EVENT_IVS_TRAFFIC_CROSSLANE(0x0000010A, "交通违章-违章变道"),
+ /**
+ * 交通违章-压黄线
+ */
+ EVENT_IVS_TRAFFIC_OVERYELLOWLINE(0x0000010B, "交通违章-压黄线"),
+ /**
+ * 交通违章-路肩行驶事件
+ */
+ EVENT_IVS_TRAFFIC_DRIVINGONSHOULDER(0x0000010C, "交通违章-路肩行驶事件"),
+ /**
+ * 交通违章-黄牌车占道事件
+ */
+ EVENT_IVS_TRAFFIC_YELLOWPLATEINLANE(0x0000010E, "交通违章-黄牌车占道事件"),
+ /**
+ * 交通违章-礼让行人/斑马线行人优先事件
+ */
+ EVENT_IVS_TRAFFIC_PEDESTRAINPRIORITY(0x0000010F, "交通违章-礼让行人/斑马线行人优先事件"),
+ /**
+ * 电火花事件
+ */
+ EVENT_IVS_ELECTROSPARKDETECTION(0x00000110, "电火花事件"),
+ /**
+ * 交通违章-禁止通行事件
+ */
+ EVENT_IVS_TRAFFIC_NOPASSING(0x00000111, "交通违章-禁止通行事件"),
+ /**
+ * 异常奔跑事件
+ */
+ EVENT_IVS_ABNORMALRUNDETECTION(0x00000112, "异常奔跑事件"),
+ /**
+ * 人员逆行事件
+ */
+ EVENT_IVS_RETROGRADEDETECTION(0x00000113, "人员逆行事件"),
+ /**
+ * 区域内检测事件
+ */
+ EVENT_IVS_INREGIONDETECTION(0x00000114, "区域内检测事件"),
+ /**
+ * 物品搬移事件
+ */
+ EVENT_IVS_TAKENAWAYDETECTION(0x00000115, "物品搬移事件"),
+ /**
+ * 非法停车事件
+ */
+ EVENT_IVS_PARKINGDETECTION(0x00000116, "非法停车事件"),
+ /**
+ * 目标识别事件
+ */
+ EVENT_IVS_FACERECOGNITION(0x00000117, "目标识别事件"),
+ /**
+ * 交通手动抓拍事件
+ */
+ EVENT_IVS_TRAFFIC_MANUALSNAP(0x00000118, "交通手动抓拍事件"),
+ /**
+ * 交通流量统计事件
+ */
+ EVENT_IVS_TRAFFIC_FLOWSTATE(0x00000119, "交通流量统计事件"),
+ /**
+ * 交通滞留事件
+ */
+ EVENT_IVS_TRAFFIC_STAY(0x0000011A, "交通滞留事件"),
+ /**
+ * 有车占道事件
+ */
+ EVENT_IVS_TRAFFIC_VEHICLEINROUTE(0x0000011B, "有车占道事件"),
+ /**
+ * 视频移动侦测事件
+ */
+ EVENT_ALARM_MOTIONDETECT(0x0000011C, "视频移动侦测事件"),
+ /**
+ * 外部报警事件
+ */
+ EVENT_ALARM_LOCALALARM(0x0000011D, "外部报警事件"),
+ /**
+ * 囚犯起身事件
+ */
+ EVENT_IVS_PSRISEDETECTION(0x0000011E, "囚犯起身事件"),
+ /**
+ * 翻越围栏事件
+ */
+ EVENT_IVS_CROSSFENCEDETECTION(0x0000011F, "翻越围栏事件"),
+ /**
+ * 交通违章-卡口事件----新规则
+ */
+ EVENT_IVS_TRAFFIC_TOLLGATE(0x00000120, "交通违章-卡口事件----新规则"),
+ /**
+ * 人员密集度检测
+ */
+ EVENT_IVS_DENSITYDETECTION(0x00000121, "人员密集度检测"),
+ /**
+ * 视频诊断结果事件
+ */
+ EVENT_IVS_VIDEODIAGNOSIS(0x00000122, "视频诊断结果事件"),
+ /**
+ * 排队检测报警事件
+ */
+ EVENT_IVS_QUEUEDETECTION(0x00000123, "排队检测报警事件"),
+ /**
+ * 占用公交车道事件
+ */
+ EVENT_IVS_TRAFFIC_VEHICLEINBUSROUTE(0x00000124, "占用公交车道事件"),
+ /**
+ * 违章倒车事件
+ */
+ EVENT_IVS_TRAFFIC_BACKING(0x00000125, "违章倒车事件"),
+ /**
+ * 声音异常检测
+ */
+ EVENT_IVS_AUDIO_ABNORMALDETECTION(0x00000126, "声音异常检测"),
+ /**
+ * 交通违章-闯黄灯事件
+ */
+ EVENT_IVS_TRAFFIC_RUNYELLOWLIGHT(0x00000127, "交通违章-闯黄灯事件"),
+ /**
+ * 攀高检测事件
+ */
+ EVENT_IVS_CLIMBDETECTION(0x00000128, "攀高检测事件"),
+ /**
+ * 离岗检测事件
+ */
+ EVENT_IVS_LEAVEDETECTION(0x00000129, "离岗检测事件"),
+ /**
+ * 黄网格线抓拍事件
+ */
+ EVENT_IVS_TRAFFIC_PARKINGONYELLOWBOX(0x0000012A, "黄网格线抓拍事件"),
+ /**
+ * 车位有车事件
+ */
+ EVENT_IVS_TRAFFIC_PARKINGSPACEPARKING(0x0000012B, "车位有车事件"),
+ /**
+ * 车位无车事件
+ */
+ EVENT_IVS_TRAFFIC_PARKINGSPACENOPARKING(0x0000012C, "车位无车事件"),
+ /**
+ * 交通行人事件
+ */
+ EVENT_IVS_TRAFFIC_PEDESTRAIN(0x0000012D, "交通行人事件"),
+ /**
+ * 交通抛洒物品事件
+ */
+ EVENT_IVS_TRAFFIC_THROW(0x0000012E, "交通抛洒物品事件"),
+ /**
+ * 交通空闲事件
+ */
+ EVENT_IVS_TRAFFIC_IDLE(0x0000012F, "交通空闲事件"),
+ /**
+ * 车载ACC断电报警事件
+ */
+ EVENT_ALARM_VEHICLEACC(0x00000130, "车载ACC断电报警事件"),
+ /**
+ * 车辆侧翻报警事件
+ */
+ EVENT_ALARM_VEHICLE_TURNOVER(0x00000131, "车辆侧翻报警事件"),
+ /**
+ * 车辆撞车报警事件
+ */
+ EVENT_ALARM_VEHICLE_COLLISION(0x00000132, "车辆撞车报警事件"),
+ /**
+ * 车载摄像头大角度扭转事件
+ */
+ EVENT_ALARM_VEHICLE_LARGE_ANGLE(0x00000133, "车载摄像头大角度扭转事件"),
+ /**
+ * 车位压线事件
+ */
+ EVENT_IVS_TRAFFIC_PARKINGSPACEOVERLINE(0x00000134, "车位压线事件"),
+ /**
+ * 多场景切换事件
+ */
+ EVENT_IVS_MULTISCENESWITCH(0x00000135, "多场景切换事件"),
+ /**
+ * 受限车牌事件
+ */
+ EVENT_IVS_TRAFFIC_RESTRICTED_PLATE(0x00000136, "受限车牌事件"),
+ /**
+ * 压停止线事件
+ */
+ EVENT_IVS_TRAFFIC_OVERSTOPLINE(0x00000137, "压停止线事件"),
+ /**
+ * 交通未系安全带事件
+ */
+ EVENT_IVS_TRAFFIC_WITHOUT_SAFEBELT(0x00000138, "交通未系安全带事件"),
+ /**
+ * 驾驶员抽烟事件
+ */
+ EVENT_IVS_TRAFFIC_DRIVER_SMOKING(0x00000139, "驾驶员抽烟事件"),
+ /**
+ * 驾驶员打电话事件
+ */
+ EVENT_IVS_TRAFFIC_DRIVER_CALLING(0x0000013A, "驾驶员打电话事件"),
+ /**
+ * 行人闯红灯事件
+ */
+ EVENT_IVS_TRAFFIC_PEDESTRAINRUNREDLIGHT(0x0000013B, "行人闯红灯事件"),
+ /**
+ * 未按规定依次通行
+ */
+ EVENT_IVS_TRAFFIC_PASSNOTINORDER(0x0000013C, "未按规定依次通行"),
+ /**
+ * 物体特征检测事件
+ */
+ EVENT_IVS_OBJECT_DETECTION(0x00000141, "物体特征检测事件"),
+ /**
+ * 模拟量报警通道的报警事件
+ */
+ EVENT_ALARM_ANALOGALARM(0x00000150, "模拟量报警通道的报警事件"),
+ /**
+ * 警戒线扩展事件
+ */
+ EVENT_IVS_CROSSLINEDETECTION_EX(0x00000151, "警戒线扩展事件"),
+ /**
+ * 普通录像
+ */
+ EVENT_ALARM_COMMON(0x00000152, "普通录像"),
+ /**
+ * 视频遮挡事件
+ */
+ EVENT_ALARM_VIDEOBLIND(0x00000153, "视频遮挡事件"),
+ /**
+ * 视频丢失事件
+ */
+ EVENT_ALARM_VIDEOLOSS(0x00000154, "视频丢失事件"),
+ /**
+ * 下床事件
+ */
+ EVENT_IVS_GETOUTBEDDETECTION(0x00000155, "下床事件"),
+ /**
+ * 巡逻检测事件
+ */
+ EVENT_IVS_PATROLDETECTION(0x00000156, "巡逻检测事件"),
+ /**
+ * 站岗检测事件
+ */
+ EVENT_IVS_ONDUTYDETECTION(0x00000157, "站岗检测事件"),
+ /**
+ * 门口机呼叫未响应事件
+ */
+ EVENT_IVS_NOANSWERCALL(0x00000158, "门口机呼叫未响应事件"),
+ /**
+ * 存储组不存在事件
+ */
+ EVENT_IVS_STORAGENOTEXIST(0x00000159, "存储组不存在事件"),
+ /**
+ * 硬盘空间低报警事件
+ */
+ EVENT_IVS_STORAGELOWSPACE(0x0000015A, "硬盘空间低报警事件"),
+ /**
+ * 存储错误事件
+ */
+ EVENT_IVS_STORAGEFAILURE(0x0000015B, "存储错误事件"),
+ /**
+ * 报警传输事件
+ */
+ EVENT_IVS_PROFILEALARMTRANSMIT(0x0000015C, "报警传输事件"),
+ /**
+ * 视频静态检测事件
+ */
+ EVENT_IVS_VIDEOSTATIC(0x0000015D, "视频静态检测事件"),
+ /**
+ * 视频定时检测事件
+ */
+ EVENT_IVS_VIDEOTIMING(0x0000015E, "视频定时检测事件"),
+ /**
+ * 热度图
+ */
+ EVENT_IVS_HEATMAP(0x0000015F, "热度图"),
+ /**
+ * 证件信息读取事件
+ */
+ EVENT_IVS_CITIZENIDCARD(0x00000160, "证件信息读取事件"),
+ /**
+ * 图片信息事件
+ */
+ EVENT_IVS_PICINFO(0x00000161, "图片信息事件"),
+ /**
+ * 上网登记事件
+ */
+ EVENT_IVS_NETPLAYCHECK(0x00000162, "上网登记事件"),
+ /**
+ * 车辆拥堵禁入事件
+ */
+ EVENT_IVS_TRAFFIC_JAM_FORBID_INTO(0x00000163, "车辆拥堵禁入事件"),
+ /**
+ * 定时抓图事件
+ */
+ EVENT_IVS_SNAPBYTIME(0x00000164, "定时抓图事件"),
+ /**
+ * 云台转动到预置点事件
+ */
+ EVENT_IVS_PTZ_PRESET(0x00000165, "云台转动到预置点事件"),
+ /**
+ * 红外线检测信息事件
+ */
+ EVENT_IVS_RFID_INFO(0x00000166, "红外线检测信息事件"),
+ /**
+ * 人起立检测事件
+ */
+ EVENT_IVS_STANDUPDETECTION(0x00000167, "人起立检测事件"),
+ /**
+ * 交通卡口称重事件
+ */
+ EVENT_IVS_QSYTRAFFICCARWEIGHT(0x00000168, "交通卡口称重事件"),
+ /**
+ * 卡口前后车牌合成事件
+ */
+ EVENT_IVS_TRAFFIC_COMPAREPLATE(0x00000169, "卡口前后车牌合成事件"),
+ /**
+ * 打靶像机事件
+ */
+ EVENT_IVS_SHOOTINGSCORERECOGNITION(0x0000016A, "打靶像机事件"),
+ /**
+ * 加油站提枪、挂枪事件
+ */
+ EVENT_IVS_TRAFFIC_FCC(0x0000016B, "加油站提枪、挂枪事件"),
+ /**
+ * 违章超限抓图上报事件,绍兴科技治超
+ */
+ EVENT_IVS_TRAFFIC_TRANSFINITE(0x0000016C, "违章超限抓图上报事件,绍兴科技治超"),
+ /**
+ * 场景变更事件
+ */
+ EVENT_IVS_SCENE_CHANGE(0x0000016D, "场景变更事件"),
+ /**
+ * 简单跟踪事件
+ */
+ EVENT_IVS_LETRACK(0x0000016E, "简单跟踪事件"),
+ /**
+ * 物体检测事件
+ */
+ EVENT_IVS_OBJECT_ACTION(0x0000016F, "物体检测事件"),
+ /**
+ * 预分析抓拍图片事件
+ */
+ EVENT_IVS_TRAFFIC_ANALYSE_PRESNAP(0x00000170, "预分析抓拍图片事件"),
+ /**
+ * 智能插座电量状态上报
+ */
+ EVENT_ALARM_EQSTATE(0x00000171, "智能插座电量状态上报"),
+ /**
+ * DVR/NVR设备上的IPC报警
+ */
+ EVENT_IVS_ALARM_IPC(0x00000172, "DVR/NVR设备上的IPC报警"),
+ /**
+ * POS录像查询事件
+ */
+ EVENT_IVS_POS_RECORD(0x00000173, "POS录像查询事件"),
+ /**
+ * 近距离接触事件
+ */
+ EVENT_IVS_NEAR_DISTANCE_DETECTION(0x00000174, "近距离接触事件"),
+ /**
+ * 行人特征检测事件
+ */
+ EVENT_IVS_OBJECTSTRUCTLIZE_PERSON(0x00000175, "行人特征检测事件"),
+ /**
+ * 非机动车特征检测事件
+ */
+ EVENT_IVS_OBJECTSTRUCTLIZE_NONMOTOR(0x00000176, "非机动车特征检测事件"),
+ /**
+ * 倒地报警事件
+ */
+ EVENT_IVS_TUMBLE_DETECTION(0x00000177, "倒地报警事件"),
+ /**
+ * 所有以traffic开头的事件,目前指的是
+ */
+ EVENT_IVS_TRAFFIC_ALL(0x000001FF, "所有以traffic开头的事件,目前指的是"),
+ /**
+ * EVENT_TRAFFICSNAPSHOT
+ */
+ //(EVENT_IVS_TRAFFICCONTROL, "EVENT_TRAFFICSNAPSHOT"),
+ /**
+ * EVENT_IVS_TRAFFIC_UNDERSPEED
+ */
+ //(EVENT_IVS_TRAFFIC_RUNREDLIGHT, "EVENT_IVS_TRAFFIC_UNDERSPEED"),
+ /**
+ * 所有智能分析事件
+ */
+ EVENT_IVS_VIDEOANALYSE(0x00000200, "所有智能分析事件"),
+ /**
+ * LinkSD事件
+ */
+ EVENT_IVS_LINKSD(0x00000201, "LinkSD事件"),
+ /**
+ * 车辆特征检测分析
+ */
+ EVENT_IVS_VEHICLEANALYSE(0x00000202, "车辆特征检测分析"),
+ /**
+ * 流量使用情况事件
+ */
+ EVENT_IVS_FLOWRATE(0x00000203, "流量使用情况事件"),
+ /**
+ * 门禁事件
+ */
+ EVENT_IVS_ACCESS_CTL(0x00000204, "门禁事件"),
+ /**
+ * SnapManual事件
+ */
+ EVENT_IVS_SNAPMANUAL(0x00000205, "SnapManual事件"),
+ /**
+ * RFID电子车牌标签事件
+ */
+ EVENT_IVS_TRAFFIC_ELETAGINFO(0x00000206, "RFID电子车牌标签事件"),
+ /**
+ * 生理疲劳驾驶事件
+ */
+ EVENT_IVS_TRAFFIC_TIREDPHYSIOLOGICAL(0x00000207, "生理疲劳驾驶事件"),
+ /**
+ * 车辆急转报警事件
+ */
+ EVENT_IVS_TRAFFIC_BUSSHARPTURN(0x00000208, "车辆急转报警事件"),
+ /**
+ * 人证比对事件
+ */
+ EVENT_IVS_CITIZEN_PICTURE_COMPARE(0x00000209, "人证比对事件"),
+ /**
+ * 开车低头报警事件
+ */
+ EVENT_IVS_TRAFFIC_TIREDLOWERHEAD(0x0000020A, "开车低头报警事件"),
+ /**
+ * 开车左顾右盼报警事件
+ */
+ EVENT_IVS_TRAFFIC_DRIVERLOOKAROUND(0x0000020B, "开车左顾右盼报警事件"),
+ /**
+ * 开车离岗报警事件
+ */
+ EVENT_IVS_TRAFFIC_DRIVERLEAVEPOST(0x0000020C, "开车离岗报警事件"),
+ /**
+ * 立体视觉站立事件
+ */
+ EVENT_IVS_MAN_STAND_DETECTION(0x0000020D, "立体视觉站立事件"),
+ /**
+ * 立体视觉区域内人数统计事件
+ */
+ EVENT_IVS_MAN_NUM_DETECTION(0x0000020E, "立体视觉区域内人数统计事件"),
+ /**
+ * 客流量统计事件
+ */
+ EVENT_IVS_STEREO_NUMBERSTAT(0x0000020F, "客流量统计事件"),
+ /**
+ * 开车打哈欠事件
+ */
+ EVENT_IVS_TRAFFIC_DRIVERYAWN(0x00000210, "开车打哈欠事件"),
+ /**
+ * 客流量统计计划
+ */
+ EVENT_IVS_NUMBERSTAT_PLAN(0x00000211, "客流量统计计划"),
+ /**
+ * 热度图计划
+ */
+ EVENT_IVS_HEATMAP_PLAN(0x00000212, "热度图计划"),
+ /**
+ * 呼叫无答应事件
+ */
+ EVENT_IVS_CALLNOANSWERED(0x00000213, "呼叫无答应事件"),
+ /**
+ * 无视邀请事件
+ */
+ EVENT_IVS_IGNOREINVITE(0x00000214, "无视邀请事件"),
+ /**
+ * 人体特征事件
+ */
+ EVENT_IVS_HUMANTRAIT(0x00000215, "人体特征事件"),
+ /**
+ * 乐橙人头检测事件
+ */
+ EVENT_ALARM_LE_HEADDETECTION(0x00000216, "乐橙人头检测事件"),
+ /**
+ * 人脸分析事件
+ */
+ EVENT_IVS_FACEANALYSIS(0x00000217, "人脸分析事件"),
+ /**
+ * 左转不礼让直行事件
+ */
+ EVENT_IVS_TRAFFIC_TURNLEFTAFTERSTRAIGHT(0x00000218, "左转不礼让直行事件"),
+ /**
+ * 大弯小转事件
+ */
+ EVENT_IVS_TRAFFIC_BIGBENDSMALLTURN(0x00000219, "大弯小转事件"),
+ /**
+ * 道路施工监测事件
+ */
+ EVENT_IVS_ROAD_CONSTRUCTION(0x0000021A, "道路施工监测事件"),
+ /**
+ * 路障检测事件
+ */
+ EVENT_IVS_ROAD_BLOCK(0x0000021B, "路障检测事件"),
+ /**
+ * 车辆加塞事件
+ */
+ EVENT_IVS_TRAFFIC_QUEUEJUMP(0x0000021C, "车辆加塞事件"),
+ /**
+ * 嫌疑车辆事件
+ */
+ EVENT_IVS_VEHICLE_SUSPICIOUSCAR(0x0000021D, "嫌疑车辆事件"),
+ /**
+ * 右转不礼让直行事件
+ */
+ EVENT_IVS_TRAFFIC_TURNRIGHTAFTERSTRAIGHT(0x0000021E, "右转不礼让直行事件"),
+ /**
+ * 右转不礼让直行行人
+ */
+ EVENT_IVS_TRAFFIC_TURNRIGHTAFTERPEOPLE(0x0000021F, "右转不礼让直行行人"),
+ /**
+ * 安装读卡器事件
+ */
+ EVENT_IVS_INSTALL_CARDREADER(0x00000220, "安装读卡器事件"),
+ /**
+ * Yale
+ */
+ EVENT_ALARM_YALE_DROPBOX_BADTOKEN(0x00000221, "Yale"),
+ /**
+ * 车载设备断电前抓拍上传事件
+ */
+ EVENT_IVS_ACC_OFF_SNAP(0x00000222, "车载设备断电前抓拍上传事件"),
+ /**
+ * X光检测事件
+ */
+ EVENI_IVS_XRAY_DETECTION(0x00000223, "X光检测事件"),
+ /**
+ * 未清车告警
+ */
+ EVENT_IVS_NOTCLEARCAR(0x00000224, "未清车告警"),
+ /**
+ * sos求救报警
+ */
+ EVENT_IVS_SOSALEART(0x00000225, "sos求救报警"),
+ /**
+ * 超载抓图
+ */
+ EVENT_IVS_OVERLOAD(0x00000226, "超载抓图"),
+ /**
+ * 非工作时间告警
+ */
+ EVENT_IVS_NONWORKINGTIME(0x00000227, "非工作时间告警"),
+ /**
+ * 远光灯违章事件
+ */
+ EVENT_IVS_TRAFFIC_HIGH_BEAM(0x00000228, "远光灯违章事件"),
+ /**
+ * 禁止货车事件
+ */
+ EVENT_IVS_TRAFFIC_TRUCKFORBID(0x00000229, "禁止货车事件"),
+ /**
+ * 无卡驾驶报警事件
+ */
+ EVENT_IVS_DRIVINGWITHOUTCARD(0x0000022A, "无卡驾驶报警事件"),
+ /**
+ * 车辆超速报警事件
+ */
+ EVENT_IVS_HIGHSPEED(0x0000022B, "车辆超速报警事件"),
+ /**
+ * 人群密度检测事件
+ */
+ EVENT_IVS_CROWDDETECTION(0x0000022C, "人群密度检测事件"),
+ /**
+ * 车间距过小报警事件
+ */
+ EVENT_IVS_TRAFFIC_CARDISTANCESHORT(0x0000022D, "车间距过小报警事件"),
+ /**
+ * 行人卡口事件
+ */
+ EVENT_IVS_PEDESTRIAN_JUNCTION(0x00000230, "行人卡口事件"),
+ /**
+ * 车牌对比事件
+ */
+ EVENT_IVS_VEHICLE_RECOGNITION(0x00000231, "车牌对比事件"),
+ /**
+ * 预置点图片变化事件
+ */
+ EVENT_IVS_PASS_CHANGE(0x00000232, "预置点图片变化事件"),
+ /**
+ * 违停相机单球车位检测规则事件
+ */
+ EVENT_IVS_TRAFFIC_PARKING_SPACEDETECTION(0x00000233, "违停相机单球车位检测规则事件"),
+ /**
+ * 违章进入待行区事件
+ */
+ EVENT_IVS_TRAFFIC_WAITINGAREA(0x00000234, "违章进入待行区事件"),
+ /**
+ * 机动车违法禁令标识事件
+ */
+ EVENT_IVS_TRAFFIC_BAN(0x00000235, "机动车违法禁令标识事件"),
+ /**
+ * POS机交易事件
+ */
+ EVENT_IVS_POS_EXCHANGE(0x00000236, "POS机交易事件"),
+ /**
+ * 立体行为分析打架/剧烈运动检测规则
+ */
+ EVENT_IVS_STEREO_FIGHTDETECTION(0x00000237, "立体行为分析打架/剧烈运动检测规则"),
+ /**
+ * 立体行为分析间距异常/人员靠近检测
+ */
+ EVENT_IVS_STEREO_DISTANCE_DETECTION(0x00000238, "立体行为分析间距异常/人员靠近检测"),
+ /**
+ * 立体行为分析跌倒检测规则
+ */
+ EVENT_IVS_STEREO_STEREOFALLDETECTION(0x00000239, "立体行为分析跌倒检测规则"),
+ /**
+ * 立体行为分析人员滞留检测规则
+ */
+ EVENT_IVS_STEREO_STAYDETECTION(0x0000023A, "立体行为分析人员滞留检测规则"),
+ /**
+ * 拉横幅事件
+ */
+ EVENT_IVS_BANNER_DETECTION(0x0000023B, "拉横幅事件"),
+ /**
+ * 普通打架事件
+ */
+ EVENT_IVS_NORMAL_FIGHTDETECTION(0x0000023C, "普通打架事件"),
+ /**
+ * 电动扶梯运行异常事件
+ */
+ EVENT_IVS_ELEVATOR_ABNORMAL(0x0000023D, "电动扶梯运行异常事件"),
+ /**
+ * 非机动车检测
+ */
+ EVENT_IVS_NONMOTORDETECT(0x0000023E, "非机动车检测"),
+ /**
+ * 机动车检测
+ */
+ EVENT_IVS_VEHICLEDETECT(0x0000023F, "机动车检测"),
+ /**
+ * 交通违章-B类违章停车
+ */
+ EVENT_IVS_TRAFFIC_PARKING_B(0x00000240, "交通违章-B类违章停车"),
+ /**
+ * 交通违章-C类违章停车
+ */
+ EVENT_IVS_TRAFFIC_PARKING_C(0x00000241, "交通违章-C类违章停车"),
+ /**
+ * 交通违章-D类违章停车
+ */
+ EVENT_IVS_TRAFFIC_PARKING_D(0x00000242, "交通违章-D类违章停车"),
+ /**
+ * IVSS人脸检测事件
+ */
+ EVENT_IVSS_FACEATTRIBUTE(0x00000243, "IVSS人脸检测事件"),
+ /**
+ * IVSS目标识别事件
+ */
+ EVENT_IVSS_FACECOMPARE(0x00000244, "IVSS目标识别事件"),
+ /**
+ * 火警事件
+ */
+ EVENT_IVS_FIREWARNING(0x00000245, "火警事件"),
+ /**
+ * 商铺占道经营事件
+ */
+ EVENT_IVS_SHOPPRESENCE(0x00000246, "商铺占道经营事件"),
+ /**
+ * 垃圾违章倾倒事件
+ */
+ EVENT_IVS_WASTEDUMPED(0x00000247, "垃圾违章倾倒事件"),
+ /**
+ * 抛洒物检测事件
+ */
+ EVENT_IVS_SPILLEDMATERIAL_DETECTION(0x00000248, "抛洒物检测事件"),
+ /**
+ * 立体行为分析人数异常检测
+ */
+ EVENT_IVS_STEREO_MANNUM_DETECTION(0x00000249, "立体行为分析人数异常检测"),
+ /**
+ * 异常间距事件
+ */
+ EVENT_IVS_DISTANCE_DETECTION(0x0000024A, "异常间距事件"),
+ /**
+ * 非机动车超载事件
+ */
+ EVENT_IVS_TRAFFIC_NONMOTOR_OVERLOAD(0x0000024B, "非机动车超载事件"),
+ /**
+ * 非机动车未戴安全帽事件
+ */
+ EVENT_IVS_TRAFFIC_NONMOTOR_WITHOUTSAFEHAT(0x0000024C, "非机动车未戴安全帽事件"),
+ /**
+ * 拥堵滞留斑马线事件
+ */
+ EVENT_IVS_TRAFFIC_JAM_STOP_ON_ZEBRACROSSING(0x0000024D, "拥堵滞留斑马线事件"),
+ /**
+ * 流动摊贩事件
+ */
+ EVENT_IVS_FLOWBUSINESS(0x0000024E, "流动摊贩事件"),
+ /**
+ * 城市机动车违停事件
+ */
+ EVENT_IVS_CITY_MOTORPARKING(0x0000024F, "城市机动车违停事件"),
+ /**
+ * 城市机非动车违停事件
+ */
+ EVENT_IVS_CITY_NONMOTORPARKING(0x00000250, "城市机非动车违停事件"),
+ /**
+ * 车道偏移预警
+ */
+ EVENT_IVS_LANEDEPARTURE_WARNNING(0X00000251, "车道偏移预警"),
+ /**
+ * 前向碰撞预警
+ */
+ EVENT_IVS_FORWARDCOLLISION_WARNNING(0x00000252, "前向碰撞预警"),
+ /**
+ * 物料堆放事件
+ */
+ EVENT_IVS_MATERIALSSTAY(0x00000253, "物料堆放事件"),
+ /**
+ * 非机动车装载伞具
+ */
+ EVENT_IVS_TRAFFIC_NONMOTOR_HOLDUMBRELLA(0x00000254, "非机动车装载伞具"),
+ /**
+ * 客户报警产品
+ */
+ EVENT_IVS_JABLOTRON_ALARM(0x00000255, "客户报警产品"),
+ /**
+ * 视频虚焦事件
+ */
+ EVENT_IVS_VIDEOUNFOCUS_ALARM(0x00000256, "视频虚焦事件"),
+ /**
+ * 漂浮物检测事件
+ */
+ EVENT_IVS_FLOATINGOBJECT_DETECTION(0x00000257, "漂浮物检测事件"),
+ /**
+ * 船舶检测事件
+ */
+ EVENT_IVS_SHIP_DETECTION(0x00000258, "船舶检测事件"),
+ /**
+ * 飞机行为检测事件
+ */
+ EVENT_IVS_AIRPLANE_DETECTION(0x00000259, "飞机行为检测事件"),
+ /**
+ * 打电话检测事件
+ */
+ EVENT_IVS_PHONECALL_DETECT(0x0000025A, "打电话检测事件"),
+ /**
+ * 吸烟检测事件
+ */
+ EVENT_IVS_SMOKING_DETECT(0x0000025B, "吸烟检测事件"),
+ /**
+ * 雷达限速报警事件
+ */
+ EVENT_IVS_RADAR_SPEED_LIMIT_ALARM(0x0000025C, "雷达限速报警事件"),
+ /**
+ * 水位检测事件
+ */
+ EVENT_IVS_WATER_LEVEL_DETECTION(0x0000025D, "水位检测事件"),
+ /**
+ * 违规撑伞检测事件
+ */
+ EVENT_IVS_HOLD_UMBRELLA(0x0000025E, "违规撑伞检测事件"),
+ /**
+ * 垃圾暴露检测事件
+ */
+ EVENT_IVS_GARBAGE_EXPOSURE(0x0000025F, "垃圾暴露检测事件"),
+ /**
+ * 垃圾桶满溢检测事件
+ */
+ EVENT_IVS_DUSTBIN_OVER_FLOW(0x00000260, "垃圾桶满溢检测事件"),
+ /**
+ * 门前脏乱检测事件
+ */
+ EVENT_IVS_DOOR_FRONT_DIRTY(0x00000261, "门前脏乱检测事件"),
+ /**
+ * 排队滞留时间报警事件
+ */
+ EVENT_IVS_QUEUESTAY_DETECTION(0X00000262, "排队滞留时间报警事件"),
+ /**
+ * 排队人数异常报警事件
+ */
+ EVENT_IVS_QUEUENUM_DETECTION(0X00000263, "排队人数异常报警事件"),
+ /**
+ * 生成图规则事件
+ */
+ EVENT_IVS_GENERATEGRAPH_DETECTION(0X00000264, "生成图规则事件"),
+ /**
+ * 交通违章-手动取证
+ */
+ EVENT_IVS_TRAFFIC_PARKING_MANUAL(0x00000265, "交通违章-手动取证"),
+ /**
+ * 安全帽检测事件
+ */
+ EVENT_IVS_HELMET_DETECTION(0x00000266, "安全帽检测事件"),
+ /**
+ * 包裹堆积程度检测事件
+ */
+ EVENT_IVS_DEPOSIT_DETECTION(0x00000267, "包裹堆积程度检测事件"),
+ /**
+ * 热点异常报警事件
+ */
+ EVENT_IVS_HOTSPOT_WARNING(0x00000268, "热点异常报警事件"),
+ /**
+ * 称重平台检测事件
+ */
+ EVENT_IVS_WEIGHING_PLATFORM_DETECTION(0x00000269, "称重平台检测事件"),
+ /**
+ * 课堂行为分析事件
+ */
+ EVENT_IVS_CLASSROOM_BEHAVIOR(0x0000026A, "课堂行为分析事件"),
+ /**
+ * 安全驾驶车距过近报警事件
+ */
+ EVENT_IVS_VEHICLE_DISTANCE_NEAR(0x0000026B, "安全驾驶车距过近报警事件"),
+ /**
+ * 驾驶员异常报警事件
+ */
+ EVENT_IVS_TRAFFIC_DRIVER_ABNORMAL(0x0000026C, "驾驶员异常报警事件"),
+ /**
+ * 驾驶员变更报警事件
+ */
+ EVENT_IVS_TRAFFIC_DRIVER_CHANGE(0x0000026D, "驾驶员变更报警事件"),
+ /**
+ * 工装
+ */
+ EVENT_IVS_WORKCLOTHES_DETECT(0x0000026E, "工装"),
+ /**
+ * 安检门人员报警事件
+ */
+ EVENT_IVS_SECURITYGATE_PERSONALARM(0x0000026F, "安检门人员报警事件"),
+ /**
+ * 单人独处事件
+ */
+ EVENT_IVS_STAY_ALONE_DETECTION(0x00000270, "单人独处事件"),
+ /**
+ * 交通路障检测事件
+ */
+ EVENT_IVS_TRAFFIC_ROAD_BLOCK(0x00000271, "交通路障检测事件"),
+ /**
+ * 交通道路施工检测事件
+ */
+ EVENT_IVS_TRAFFIC_ROAD_CONSTRUCTION(0x00000272, "交通道路施工检测事件"),
+ /**
+ * X光按物体检测规则配置,
+ */
+ EVENT_IVS_XRAY_DETECT_BYOBJECT(0x00000273, "X光按物体检测规则配置,"),
+ /**
+ * 作业统计事件
+ */
+ EVENT_IVS_WORKSTATDETECTION(0x00000274, "作业统计事件"),
+ /**
+ * 红外阻断事件
+ */
+ EVENT_IVS_INFRAREDBLOCK(0x00000275, "红外阻断事件"),
+ /**
+ * 特征提取事件
+ */
+ EVENT_IVS_FEATURE_ABSTRACT(0x00000276, "特征提取事件"),
+ /**
+ * 智能补货事件
+ */
+ EVENT_IVS_INTELLI_SHELF(0x00000277, "智能补货事件"),
+ /**
+ * 全景抓拍事件
+ */
+ EVENT_IVS_PANORAMA_SHOT(0x00000278, "全景抓拍事件"),
+ /**
+ * 智能视频移动侦测事件
+ */
+ EVENT_ALARM_SMARTMOTION_HUMAN(0x00000279, "智能视频移动侦测事件"),
+ /**
+ * 智能视频移动侦测事件
+ */
+ EVENT_ALARM_SMARTMOTION_VEHICLE(0x0000027A, "智能视频移动侦测事件"),
+ /**
+ * 车辆驶入驶出状态事件
+ */
+ EVENT_IVS_CAR_DRIVING_IN_OUT(0x0000027B, "车辆驶入驶出状态事件"),
+ /**
+ * 停车位状态事件
+ */
+ EVENT_IVS_PARKINGSPACE_STATUS(0x0000027C, "停车位状态事件"),
+ /**
+ * 暴力抛物检测
+ */
+ EVENT_IVS_VIOLENT_THROW_DETECTION(0x0000027D, "暴力抛物检测"),
+ /**
+ * 矿车超挂报警事件
+ */
+ EVENT_IVS_TRAMCARSECTIONS_DETECTION(0x0000027E, "矿车超挂报警事件"),
+ /**
+ * 报警盒通道的触发报警事件,
+ */
+ EVENT_IVS_ALARM_BOX_ALARM(0x0000027F, "报警盒通道的触发报警事件,"),
+ /**
+ * 人脸比对事件,
+ */
+ EVENT_IVS_FACE_COMPARISION(0x00000280, "人脸比对事件,"),
+ /**
+ * 人像检测事件
+ */
+ EVENT_IVS_FACEBODY_DETECT(0x00000281, "人像检测事件"),
+ /**
+ * 人像识别事件
+ */
+ EVENT_IVS_FACEBODY_ANALYSE(0x00000282, "人像识别事件"),
+ /**
+ * 加油站车辆检测事件
+ */
+ EVENT_IVS_GASSTATION_VEHICLE_DETECT(0x00000283, "加油站车辆检测事件"),
+ /**
+ * 道路场景车辆拥堵报警事件
+ */
+ EVENT_IVS_CONGESTION_DETECTION(0x00000284, "道路场景车辆拥堵报警事件"),
+ /**
+ * 停车场场景下停车车辆上限报警
+ */
+ EVENT_IVS_VEHICLELIMIT_DETECTION(0x00000285, "停车场场景下停车车辆上限报警"),
+ /**
+ * 动物检测事件,
+ */
+ EVENT_IVS_ANIMAL_DETECTION(0x00000286, "动物检测事件,"),
+ /**
+ * 橱窗张贴事件
+ */
+ EVENT_IVS_SHOP_WINDOW_POST(0x00000287, "橱窗张贴事件"),
+ /**
+ * 店招异常事件
+ */
+ EVENT_IVS_SHOP_SIGN_ABNORMAL(0x00000288, "店招异常事件"),
+ /**
+ * 智慧养殖检测事件
+ */
+ EVENT_IVS_BREED_DETECTION(0x00000289, "智慧养殖检测事件"),
+ /**
+ * 机场智能保障车辆检测事件
+ */
+ EVENT_IVS_AIRPORT_VEHICLE_DETECT(0x0000028A, "机场智能保障车辆检测事件"),
+ /**
+ * 智慧养殖猪体温检测
+ */
+ EVENT_IVS_PIG_TEMPERATURE_DETECT(0x0000028B, "智慧养殖猪体温检测"),
+ /**
+ * 人车共存事件
+ */
+ EVENT_IVS_MAN_CAR_COEXISTANCE(0x0000028C, "人车共存事件"),
+ /**
+ * 高空抛物检测
+ */
+ EVENT_IVS_HIGH_TOSS_DETECT(0x0000028D, "高空抛物检测"),
+ /**
+ * 电力检测手套检测事件
+ */
+ EVENT_IVS_ELECTRIC_GLOVE_DETECT(0x0000028E, "电力检测手套检测事件"),
+ /**
+ * 电力检测梯子检测事件
+ */
+ EVENT_IVS_ELECTRIC_LADDER_DETECT(0x0000028F, "电力检测梯子检测事件"),
+ /**
+ * 电力检测布幔检测事件
+ */
+ EVENT_IVS_ELECTRIC_CURTAIN_DETECT(0x00000290, "电力检测布幔检测事件"),
+ /**
+ * 电力检测围栏检测事件
+ */
+ EVENT_IVS_ELECTRIC_FENCE_DETECT(0x00000291, "电力检测围栏检测事件"),
+ /**
+ * 电力检测标识牌检测事件
+ */
+ EVENT_IVS_ELECTRIC_SIGNBOARD_DETECT(0x00000292, "电力检测标识牌检测事件"),
+ /**
+ * 电力检测安全带检测事件
+ */
+ EVENT_IVS_ELECTRIC_BELT_DETECT(0x00000293, "电力检测安全带检测事件"),
+ /**
+ * 雷达警戒线/绊线检测
+ */
+ EVENT_IVS_RADAR_LINE_DETECTION(0x00000294, "雷达警戒线/绊线检测"),
+ /**
+ * 雷达警戒区检测事件
+ */
+ EVENT_IVS_RADAR_REGION_DETECTION(0x00000295, "雷达警戒区检测事件"),
+ /**
+ * 异常音事件
+ */
+ EVENT_IVS_AUDIO_INTENSITY(0x00000296, "异常音事件"),
+ /**
+ * 室外停车位状态检测
+ */
+ EVENT_IVS_PARKING_LOT_STATUS_DETECTION(0x00000297, "室外停车位状态检测"),
+ /**
+ * 只用于规则配置
+ */
+ EVENT_IVS_VEHICLE_COMPARE(0x00000298, "只用于规则配置"),
+ /**
+ * 渣土车未遮盖载货检测事件
+ */
+ EVENT_IVS_DREGS_UNCOVERED(0x00000299, "渣土车未遮盖载货检测事件"),
+ /**
+ * 走动检测事件
+ */
+ EVENT_IVS_WALK_DETECTION(0x0000029A, "走动检测事件"),
+ /**
+ * 背对检测事件
+ */
+ EVENT_IVS_BACK_TO_DETECTION(0x0000029B, "背对检测事件"),
+ /**
+ * 板书检测事件
+ */
+ EVENT_IVS_WRITE_ON_THE_BOARD_DETECTION(0x0000029C, "板书检测事件"),
+ /**
+ * 智慧厨房穿着检测事件
+ */
+ EVENT_IVS_SMART_KITCHEN_CLOTHES_DETECTION(0x0000029D, "智慧厨房穿着检测事件"),
+ /**
+ * 睡觉检测事件
+ */
+ EVENT_IVS_SLEEP_DETECT(0x0000029E, "睡觉检测事件"),
+ /**
+ * 随意走动检测事件
+ */
+ EVENT_IVS_WALK_AROUND_DETECT(0x0000029F, "随意走动检测事件"),
+ /**
+ * 玩手机事件
+ */
+ EVENT_IVS_PLAY_MOBILEPHONE(0x00000300, "玩手机事件"),
+ /**
+ * 智慧金融违规物品检测事件
+ */
+ EVENT_IVS_FINANCE_CONTRABAND_DETECT(0x00000301, "智慧金融违规物品检测事件"),
+ /**
+ * 智慧金融现金交易检测事件
+ */
+ EVENT_IVS_FINANCE_CASH_TRANSACTION(0x00000302, "智慧金融现金交易检测事件"),
+ /**
+ * 人体温智能检测事件
+ */
+ EVENT_IVS_ANATOMY_TEMP_DETECT(0x00000303, "人体温智能检测事件"),
+ /**
+ * 活跃度统计规则
+ */
+ EVENT_IVS_ACTIVITY_ANALYSE(0x00000304, "活跃度统计规则"),
+ /**
+ * 门状态事件
+ */
+ EVENT_IVS_DOOR_STATUS(0x00000305, "门状态事件"),
+ /**
+ * Dhop自定义事件
+ */
+ EVENT_IVS_DHOP_CUSTOM(0x00000306, "Dhop自定义事件"),
+ /**
+ * Dhop自定义事件
+ */
+ EVENT_IVS_DHOP_CUSTOM_ONCE(0x00000307, "Dhop自定义事件"),
+ /**
+ * 起雾检测事件
+ */
+ EVENT_IVS_FOG_DETECTION(0x00000308, "起雾检测事件"),
+ /**
+ * 飙车事件
+ */
+ EVENT_IVS_TRAFFIC_VEHICLE_BC(0x00000309, "飙车事件"),
+ /**
+ * 机动车超载
+ */
+ EVENT_IVS_TRAFFIC_MOTOR_OVERLOAD(0x0000030A, "机动车超载"),
+ /**
+ * 车牌污损
+ */
+ EVENT_IVS_TRAFFIC_PLATE_OCCLUSION(0x0000030B, "车牌污损"),
+ /**
+ * 非机动车进入电梯
+ */
+ EVENT_IVS_NONMOTOR_ENTRYING(0x0000030C, "非机动车进入电梯"),
+ /**
+ * 水位监测事件,
+ */
+ EVENT_IVS_WATER_STAGE_MONITOR(0x0000030D, "水位监测事件,"),
+ /**
+ * 道路安全预警
+ */
+ EVENT_IVS_TRAFFIC_ROAD_ALERT(0x0000030E, "道路安全预警"),
+ /**
+ * 违章建筑检测事件
+ */
+ EVENT_IVS_BREAK_RULE_BUILDING_DETECTION(0x0000030F, "违章建筑检测事件"),
+ /**
+ * 非机动车闯红灯
+ */
+ EVENT_IVS_TRAFFIC_NONMOTOR_RUN_REDLIGHT(0x00000310, "非机动车闯红灯"),
+ /**
+ * 占用应急车道事件
+ */
+ EVENT_IVS_TRAFFIC_VEHICLE_IN_EMERGENCY_LANE(0x00000311, "占用应急车道事件"),
+ /**
+ * 婴儿车检测事件
+ */
+ EVENT_IVS_PRAM_DETECTION(0x00000312, "婴儿车检测事件"),
+ /**
+ * 立体行为婴儿车检测事件
+ */
+ EVENT_IVS_STEREO_PRAM_DETECTION(0x00000313, "立体行为婴儿车检测事件"),
+ /**
+ * 大件行李箱检测事件
+ */
+ EVENT_IVS_BIG_BAGGAGE_DETECTION(0x00000314, "大件行李箱检测事件"),
+ /**
+ * 立体行为大件行李箱检测事件
+ */
+ EVENT_IVS_STEREO_BIG_BAGGAGE_DETECTION(0x00000315, "立体行为大件行李箱检测事件"),
+ /**
+ * 逃票检测事件
+ */
+ EVENT_IVS_TICKET_EVADE_DETECTION(0x00000316, "逃票检测事件"),
+ /**
+ * 立体行为逃票检测事件
+ */
+ EVENT_IVS_STEREO_TICKET_EVADE_DETECTION(0x00000317, "立体行为逃票检测事件"),
+ /**
+ * 输电线异物检测
+ */
+ EVENT_IVS_POWERLINE_FOREIGN_DETECITON(0x00000318, "输电线异物检测"),
+ /**
+ * 压导流线
+ */
+ EVENT_IVS_TRAFFIC_OVER_GUIDE_LINE(0x00000319, "压导流线"),
+ /**
+ * 交通卡口测量
+ */
+ EVENT_IVS_TRAFFIC_CAR_MEASUREMENT(0x00000320, "交通卡口测量"),
+ /**
+ * 不安规定使用转向灯事件
+ */
+ EVENT_IVS_TRAFFIC_WRONG_TURN_LIGHT(0x00000321, "不安规定使用转向灯事件"),
+ /**
+ * 交通事故事件,{@link DEV_EVENT_TRAFFIC_REAREND_ACCIDENT_INFO}
+ */
+ EVENT_IVS_TRAFFIC_REAREND_ACCIDENT(0x00000322, "交通事故事件"),
+ /**
+ * 对讲动作事件
+ */
+ EVENT_IVS_DO_TALK_ACTION(0x00000323, "对讲动作事件"),
+ /**
+ * 消防占道检测事件
+ */
+ EVENT_IVS_FIRE_LANE_DETECTION(0x00000324, "消防占道检测事件"),
+ /**
+ * 全景异常停车事件
+ */
+ EVENT_IVS_PARKING_DETECTION_FOR_PRMA(0x00000325, "全景异常停车事件"),
+ /**
+ * 全景交通拥堵事件
+ */
+ EVENT_IVS_TRAFFIC_JAM_FOR_PRMA(0x00000326, "全景交通拥堵事件"),
+ /**
+ * 全景交通事故事件
+ */
+ EVENT_IVS_TRAFFIC_ACCIDENT_FOR_PRMA(0x00000327, "全景交通事故事件"),
+ /**
+ * 非机动车逆行事件
+ */
+ EVENT_IVS_TRAFFIC_NON_MOTOR_RETROGRADE(0x00000328, "非机动车逆行事件"),
+ /**
+ * 非机动车越线停车事件
+ */
+ EVENT_IVS_TRAFFIC_NON_MOTOR_OVER_STOP_LINE(0x00000329, "非机动车越线停车事件"),
+ /**
+ * 车辆驶入事件
+ */
+ EVENT_IVS_CAR_DRIVING_IN(0x00000330, "车辆驶入事件"),
+ /**
+ * 车辆驶出事件
+ */
+ EVENT_IVS_CAR_DRIVING_OUT(0x00000331, "车辆驶出事件"),
+ /**
+ * 人像检测
+ */
+ EVENT_IVS_PORTRAIT_DETECTION(0x00000332, "人像检测"),
+ /**
+ * 特殊车辆检测
+ */
+ EVENT_IVS_TRAFFIC_SPECIAL_VEHICLE_DETECT(0x00000333, "特殊车辆检测"),
+ /**
+ * 未开照明灯事件
+ */
+ EVENT_IVS_TRAFFIC_HEAD_LAMP_OFF(0x00000334, "未开照明灯事件"),
+ /**
+ * 交通非机动车事件检测,{@link DEV_EVENT_TRAFFIC_NONMOTOR_INFO}
+ */
+ EVENT_IVS_TRAFFIC_NONMOTOR(0x00000335, "交通非机动车事件检测,"),
+ /**
+ * 交通违章上下客事件检测
+ */
+ EVENT_IVS_TRAFFIC_BOARD(0x00000336, "交通违章上下客事件检测"),
+ /**
+ * 交通能见度事件检测,{@link DEV_EVENT_TRAFFIC_VISIBILITY_INFO}
+ */
+ EVENT_IVS_TRAFFIC_VISIBILITY(0x00000337, "交通能见度事件检测"),
+ /**
+ * 交通车辆清洁度检测事件检测
+ */
+ EVENT_IVS_TRAFFIC_VEHICLE_CLEANLINESS(0x00000338, "交通车辆清洁度检测事件检测"),
+ /**
+ * 全景交通车流
+ */
+ EVENT_IVS_TRAFFICFLOW_FOR_PRMA(0x00000339, "全景交通车流"),
+ /**
+ * 工程车未清洗
+ */
+ EVENT_IVS_TRUCKNOTCLEAN_FOR_PRMA(0x0000033A, "工程车未清洗"),
+ /**
+ * 异物占道事件
+ */
+ EVENT_IVS_ROADOCCUPATION_BY_FOREIGNOBJECT(0x0000033B, "异物占道事件"),
+ /**
+ * 车流量超过上限
+ */
+ EVENT_IVS_TRAFFICFLOW_OVER(0x0000033C, "车流量超过上限"),
+ /**
+ * 违规物品检测事件
+ */
+ EVENT_IVS_GOODS_DETECTION(0x0000033D, "违规物品检测事件"),
+ /**
+ * 传送带阻塞报警事件
+ */
+ EVENT_IVS_CONVEYORBLOCK_DETECTION(0x0000033E, "传送带阻塞报警事件"),
+ /**
+ * 全物体类型检测事件
+ */
+ EVENT_IVS_ANYTHING_DETECT(0x0000033F, "全物体类型检测事件"),
+ /**
+ * 目标异常事件
+ */
+ EVENT_IVS_OBJECT_ABNORMAL(0x00000340, "目标异常事件"),
+ /**
+ * 辅助驾驶
+ */
+ EVENT_IVS_DRIVE_ASSISTANT(0x00000341, "辅助驾驶"),
+ /**
+ * 驾驶行为分析
+ */
+ EVENT_IVS_DRIVE_ACTION_ANAYLSE(0x00000342, "驾驶行为分析"),
+ /**
+ * 驾驶行为分析
+ */
+ EVENT_IVS_DRIVE_HANDSOFF_STEERING_WHEEL(0x00000343, "驾驶行为分析"),
+ /**
+ * 驾驶行为分析
+ */
+ EVENT_IVS_DRIVE_BLIND_SPOT(0x00000344, "驾驶行为分析"),
+ /**
+ * 物品检测
+ */
+ EVENT_IVS_ARTICLE_DETECTION(0x00000345, "物品检测"),
+ /**
+ * 路侧停车位手动抓图
+ */
+ EVENT_IVS_TRAFFIC_PARKINGSPACE_MANUALSNAP(0x00000346, "路侧停车位手动抓图"),
+ /**
+ * 沿街晾晒事件
+ */
+ EVENT_IVS_STREET_SUNCURE(0x00000347, "沿街晾晒事件"),
+ /**
+ * 户外广告事件
+ */
+ EVENT_IVS_OUTDOOR_ADVERTISEMENT(0x00000348, "户外广告事件"),
+ /**
+ * 乱堆物料检测事件
+ */
+ EVENT_IVS_HUDDLE_MATERIAL(0x00000349, "乱堆物料检测事件"),
+ /**
+ * 进入消防通道检测
+ */
+ EVENT_IVS_FIRE_LINE_DETECTION(0x0000034A, "进入消防通道检测"),
+ /**
+ * 违法占用公交车道
+ */
+ EVENT_IVS_OCCUPY_BUS_LANE(0x0000034B, "违法占用公交车道"),
+ /**
+ * 求救检测事件
+ */
+ EVENT_IVS_DISTRESS_DETECTION(0x0000034C, "求救检测事件"),
+ /**
+ * 交通副驾驶未系安全带事件
+ */
+ EVENT_IVS_TRAFFIC_ASSISTANT_WITHOUT_SAFEBELT(0x0000034D, "交通副驾驶未系安全带事件"),
+ /**
+ * 读写组,原型为"ReadWrite*","ReadWrite*",代表读写组,
+ */
+ STOR_POINT_READ_WRITE(0x00001001, "读写组"),
+ /**
+ * 只读组
+ */
+ STOR_POINT_READ_ONLY(0x00001002, "只读组"),
+ /**
+ * 冗余组,和"ReadWirte"组一个冗余副本
+ */
+ STOR_POINT_REDUNDANT(0x00001003, "冗余组"),
+ /**
+ * 备份组,数据写满后停止,不会循环覆盖
+ */
+ STOR_POINT_BACKUP(0x00001004, "备份组,数据写满后停止,不会循环覆盖"),
+ /**
+ * 历史抽帧组,实时录像在指定时间后,抽帧并写入该组
+ */
+ STOR_POINT_DRAW_FRAME(0x00001005, "历史抽帧组,实时录像在指定时间后,抽帧并写入该组"),
+ /**
+ * 远程网络存储组
+ */
+ STOR_POINT_NAS_FTP(0x00001006, "远程网络存储组"),
+ /**
+ * 远程网络存储组
+ */
+ STOR_POINT_NAS_NFS(0x00001007, "远程网络存储组"),
+ /**
+ * 远程网络存储组
+ */
+ STOR_POINT_NAS_SMB(0x00001008, "远程网络存储组"),
+ /**
+ * 远程网络存储组
+ */
+ STOR_POINT_NAS_ISCSI(0x00001009, "远程网络存储组"),
+ /**
+ * 远程网络存储组
+ */
+ STOR_POINT_NAS_CLOUD(0x0000100A, "远程网络存储组");
+ private int type;
+ private String description;
+
+ private EM_EVENT_TYPE(int type, String description) {
+ this.type = type;
+ this.description = description;
+ }
+
+ public static EM_EVENT_TYPE getEventType(int type) {
+ for (EM_EVENT_TYPE event : EM_EVENT_TYPE.values()) {
+ if (type == event.getType()) {
+ return event;
+ }
+ }
+ return null;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_TYPE_DESCEIBEINFO.java b/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_TYPE_DESCEIBEINFO.java
new file mode 100644
index 0000000..a2343b0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_TYPE_DESCEIBEINFO.java
@@ -0,0 +1,52 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 事件类型描述
+ * @date 2022/08/18 10:00:46
+ */
+public enum EM_EVENT_TYPE_DESCEIBEINFO {
+ /**
+ * 正常抓图事件
+ */
+ EM_EVENT_NORMAL(0, "正常抓图事件"),
+ /**
+ * 邮件联动抓图事件
+ */
+ EM_EVENT_EMAIL(1, "邮件联动抓图事件");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_EVENT_TYPE_DESCEIBEINFO(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_EVENT_TYPE_DESCEIBEINFO enumType : EM_EVENT_TYPE_DESCEIBEINFO.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_EVENT_TYPE_DESCEIBEINFO enumType : EM_EVENT_TYPE_DESCEIBEINFO.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_WORKCLOTHES_RULE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_WORKCLOTHES_RULE_TYPE.java
new file mode 100644
index 0000000..962b820
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_EVENT_WORKCLOTHES_RULE_TYPE.java
@@ -0,0 +1,38 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 工装检测报警规则类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:21
+ */
+public class EM_EVENT_WORKCLOTHES_RULE_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_EVENT_WORKCLOTHES_RULE_UNKNWON = 0;
+ /**
+ * 安全帽
+ */
+ public static final int EM_EVENT_WORKCLOTHES_RULE_HELMET = 1;
+ /**
+ * 工作服
+ */
+ public static final int EM_EVENT_WORKCLOTHES_RULE_CLOTHES = 2;
+ /**
+ * 工作裤
+ */
+ public static final int EM_EVENT_WORKCLOTHES_RULE_PANTS = 3;
+ /**
+ * 防护服
+ */
+ public static final int EM_EVENT_WORKCLOTHES_RULE_PROTECTIVESUIT = 4;
+ /**
+ * 鞋套
+ */
+ public static final int EM_EVENT_WORKCLOTHES_RULE_SHOESCOVER = 5;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_EXPOWER_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_EXPOWER_STATE.java
new file mode 100644
index 0000000..9ff6287
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_EXPOWER_STATE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 外接电源状态
+* @date 2022/08/31 14:44:16
+*/
+public enum EM_EXPOWER_STATE {
+/**
+未连接
+*/
+EM_EXPOWER_DISCONNECT(0,"未连接"),
+/**
+连接
+*/
+EM_EXPOWER_CONNECT(1,"连接"),
+/**
+未知
+*/
+EM_EXPOWER_UNKNOWN(2,"未知");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_EXPOWER_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_EXPOWER_STATE enumType : EM_EXPOWER_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_EXPOWER_STATE enumType : EM_EXPOWER_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_EXPOWER_STATE getEnum(int value) {
+ for (EM_EXPOWER_STATE e : EM_EXPOWER_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_EXPOWER_STATE.EM_EXPOWER_DISCONNECT;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_EXTERNAL_WIFI_PRIORITY.java b/src/main/java/com/netsdk/lib/enumeration/EM_EXTERNAL_WIFI_PRIORITY.java
new file mode 100644
index 0000000..904af46
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_EXTERNAL_WIFI_PRIORITY.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 外部wifi优先级
+* @date 2022/08/31 14:44:17
+*/
+public enum EM_EXTERNAL_WIFI_PRIORITY {
+/**
+未知
+*/
+EM_EXTERNAL_WIFI_UNKNOWN(0,"未知"),
+/**
+首选外部wifi
+*/
+EM_EXTERNAL_WIFI_FIRST(1,"首选外部wifi"),
+/**
+备选外部wifi
+*/
+EM_EXTERNAL_WIFI_ALTERNATIVE(2,"备选外部wifi"),
+/**
+仅使用外部wifi
+*/
+EM_EXTERNAL_WIFI_USEONLY(3,"仅使用外部wifi");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_EXTERNAL_WIFI_PRIORITY(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_EXTERNAL_WIFI_PRIORITY enumType : EM_EXTERNAL_WIFI_PRIORITY.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_EXTERNAL_WIFI_PRIORITY enumType : EM_EXTERNAL_WIFI_PRIORITY.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_EXTERNAL_WIFI_PRIORITY getEnum(int value) {
+ for (EM_EXTERNAL_WIFI_PRIORITY e : EM_EXTERNAL_WIFI_PRIORITY.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_EXTERNAL_WIFI_PRIORITY.EM_EXTERNAL_WIFI_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_EYE_STATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_EYE_STATE_TYPE.java
new file mode 100644
index 0000000..f83192b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_EYE_STATE_TYPE.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 眼睛状态
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_EYE_STATE_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_EYE_STATE_UNKNOWN = 0;
+ /**
+ * 未识别
+ */
+ public static final int EM_EYE_STATE_NODISTI = 1;
+ /**
+ * 闭眼
+ */
+ public static final int EM_EYE_STATE_CLOSE = 2;
+ /**
+ * 睁眼
+ */
+ public static final int EM_EYE_STATE_OPEN = 3;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_FACE_APPEND_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_FACE_APPEND_STATE.java
new file mode 100644
index 0000000..33ded92
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_FACE_APPEND_STATE.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 人脸导入的状态
+ * @date 2022/10/31 11:10:10
+ */
+public enum EM_FACE_APPEND_STATE {
+ /**
+ * 未知
+ */
+ EM_FACE_APPEND_STATE_UNKNOWN(0, "未知"),
+ /**
+ * 开始导入
+ */
+ EM_FACE_APPEND_STATE_START(1, "开始导入"),
+ /**
+ * 正在导入
+ */
+ EM_FACE_APPEND_STATE_RUN(2, "正在导入"),
+ /**
+ * 导入结束
+ */
+ EM_FACE_APPEND_STATE_STOP(3, "导入结束"),
+ /**
+ * 导入取消
+ */
+ EM_FACE_APPEND_STATE_CANCLE(4, "导入取消");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_FACE_APPEND_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_FACE_APPEND_STATE enumType : EM_FACE_APPEND_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_FACE_APPEND_STATE enumType : EM_FACE_APPEND_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_FACE_CHECK.java b/src/main/java/com/netsdk/lib/enumeration/EM_FACE_CHECK.java
new file mode 100644
index 0000000..4af511f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_FACE_CHECK.java
@@ -0,0 +1,50 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_FACE_CHECK {
+ EM_FACE_CHECK_UNKNOWN (-1,"未知"), // 未知
+ EM_FACE_CHECK_NODATA(0,"该人员无人脸数据"), // 该人员无人脸数据
+ EM_FACE_CHECK_CONSISTENT(1,"刷卡和人脸人员一致"), // 刷卡和人脸人员一致
+ EM_FACE_CHECK_NOT_CONSISTENT(2,"刷卡和人脸人员不一致"); // 刷卡和人脸人员不一致
+
+ private final int value;
+ private final String note;
+
+ EM_FACE_CHECK(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_FACE_CHECK enumType : EM_FACE_CHECK.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_FACE_CHECK enumType : EM_FACE_CHECK.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_EVENT_LEVEL getEnum(int value) {
+ for (EM_EVENT_LEVEL e : EM_EVENT_LEVEL.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_EVENT_LEVEL.EM_EVENT_LEVEL_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_FACE_TRAIT_ALIVE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_FACE_TRAIT_ALIVE_TYPE.java
new file mode 100644
index 0000000..d8779ed
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_FACE_TRAIT_ALIVE_TYPE.java
@@ -0,0 +1,7 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_FACE_TRAIT_ALIVE_TYPE {
+ EM_FACE_TRAIT_ALIVE_UNKNOWN, // 未知
+ EM_FACE_TRAIT_ALIVE_NON, // 非活体
+ EM_FACE_TRAIT_ALIVE, // 活体
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_FACE_TRAIT_EMOTION_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_FACE_TRAIT_EMOTION_TYPE.java
new file mode 100644
index 0000000..edbb691
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_FACE_TRAIT_EMOTION_TYPE.java
@@ -0,0 +1,17 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_FACE_TRAIT_EMOTION_TYPE {
+ EM_FACE_TRAIT_EMOTION_UNKNOWN, // 未知
+ EM_FACE_TRAIT_EMOTION_UNRECOGNIZE, // 未识别
+ EM_FACE_TRAIT_EMOTION_ANGRY, // 生气
+ EM_FACE_TRAIT_EMOTION_SAD, // 悲伤
+ EM_FACE_TRAIT_EMOTION_DISGUST, // 厌恶
+ EM_FACE_TRAIT_EMOTION_FEAR, // 恐惧
+ EM_FACE_TRAIT_EMOTION_SURPRISE, // 诧异
+ EM_FACE_TRAIT_EMOTION_CALM, // 平静
+ EM_FACE_TRAIT_EMOTION_SMILE, // 微笑
+ EM_FACE_TRAIT_EMOTION_LAUGH, // 大笑
+ EM_FACE_TRAIT_EMOTION_HAPPY, // 高兴
+ EM_FACE_TRAIT_EMOTION_CONFUSED, // 困惑
+ EM_FACE_TRAIT_EMOTION_SCREAM, // 尖叫
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_FEATURE_LIST_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_FEATURE_LIST_TYPE.java
new file mode 100644
index 0000000..7dafd69
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_FEATURE_LIST_TYPE.java
@@ -0,0 +1,57 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 睿厨着装检特征列表
+ * @date 2021/01/11
+ */
+public enum EM_FEATURE_LIST_TYPE {
+ // 未知
+ EM_FEATURE_LIST_UNKNOWN(0, "未知"),
+
+ // 是否戴口罩
+ EM_FEATURE_LIST_HAS_MASK(1, "是否戴口罩"),
+
+ // 是否戴厨师帽
+ EM_FEATURE_LIST_HAS_CHEF_HAT(2, "是否戴厨师帽"),
+
+ // 是否穿厨师服
+ EM_FEATURE_LIST_HAS_CHEF_CLOTHES(3, "是否穿厨师服"),
+
+ // 厨师服的颜色
+ EM_FEATURE_LIST_CHEF_CLOTHES_COLOR(4, "厨师服的颜色");
+
+ private int value;
+ private String note;
+
+ private EM_FEATURE_LIST_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_FEATURE_LIST_TYPE enumType : EM_FEATURE_LIST_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_FEATURE_LIST_TYPE enumType : EM_FEATURE_LIST_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_FEATURE_VERSION.java b/src/main/java/com/netsdk/lib/enumeration/EM_FEATURE_VERSION.java
new file mode 100644
index 0000000..35d4d42
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_FEATURE_VERSION.java
@@ -0,0 +1,162 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 特征值版本类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_FEATURE_VERSION extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_FEATURE_VERSION_UNKNOWN = 0;
+ /**
+ * 人脸,大模型,1.01.001
+ */
+ public static final int EM_FEATURE_VERSION_FACE_LARGE_1_01_001 = 1;
+ /**
+ * 人脸,大模型,1.02.001
+ */
+ public static final int EM_FEATURE_VERSION_FACE_LARGE_1_02_001 = 2;
+ /**
+ * 人脸,大模型,1.03.001
+ */
+ public static final int EM_FEATURE_VERSION_FACE_LARGE_1_03_001 = 3;
+ /**
+ * 人脸,大模型,1.04.001
+ */
+ public static final int EM_FEATURE_VERSION_FACE_LARGE_1_04_001 = 4;
+ /**
+ * 人脸,中模型,1.01.002
+ */
+ public static final int EM_FEATURE_VERSION_FACE_MIDDLE_1_01_002 = 31;
+ /**
+ * 人脸,中模型,1.02.002
+ */
+ public static final int EM_FEATURE_VERSION_FACE_MIDDLE_1_02_002 = 32;
+ /**
+ * 人脸,中模型,1.03.002
+ */
+ public static final int EM_FEATURE_VERSION_FACE_MIDDLE_1_03_002 = 33;
+ /**
+ * 人脸,中模型,1.04.002
+ */
+ public static final int EM_FEATURE_VERSION_FACE_MIDDLE_1_04_002 = 34;
+ /**
+ * 人脸,中模型,1.09.002
+ */
+ public static final int EM_FEATURE_VERSION_FACE_MIDDLE_1_09_002 = 39;
+ /**
+ * 人脸,小模型,1.01.003
+ */
+ public static final int EM_FEATURE_VERSION_FACE_SMALL_1_01_003 = 61;
+ /**
+ * 人脸,小模型,1.02.003
+ */
+ public static final int EM_FEATURE_VERSION_FACE_SMALL_1_02_003 = 62;
+ /**
+ * 人和非机动车,全局无版本号
+ */
+ public static final int EM_FEATURE_VERSION_HUMAN_NONMOTOR = 91;
+ /**
+ * 人和非机动车,全局浮点,1.00.01
+ */
+ public static final int EM_FEATURE_VERSION_HUMAN_NONMOTOR_FLOAT_1_00_01 = 92;
+ /**
+ * 人和非机动车,全局哈希,1.00.01
+ */
+ public static final int EM_FEATURE_VERSION_HUMAN_NONMOTOR_HASH_1_00_01 = 93;
+ /**
+ * 人和非机动车,全局浮点,1.01.00
+ */
+ public static final int EM_FEATURE_VERSION_HUMAN_NONMOTOR_FLOAT_1_01_00 = 94;
+ /**
+ * 人和非机动车,全局哈希,1.01.00
+ */
+ public static final int EM_FEATURE_VERSION_HUMAN_NONMOTOR_HASH_1_01_00 = 95;
+ /**
+ * 人和非机动车,全局浮点,1.01.01
+ */
+ public static final int EM_FEATURE_VERSION_HUMAN_NONMOTOR_FLOAT_1_01_01 = 96;
+ /**
+ * 人和非机动车,全局哈希,1.01.01
+ */
+ public static final int EM_FEATURE_VERSION_HUMAN_NONMOTOR_HASH_1_01_01 = 97;
+ /**
+ * 机动车,全局无版本号
+ */
+ public static final int EM_FEATURE_VERSION_TRAFFIC = 121;
+ /**
+ * 机动车,全局浮点版本号0
+ */
+ public static final int EM_FEATURE_VERSION_TRAFFIC_FLOAT = 122;
+ /**
+ * 机动车,全局浮点版本号1.00.01
+ */
+ public static final int EM_FEATURE_VERSION_TRAFFIC_FLOAT_1_00_01 = 123;
+ /**
+ * 机动车,全局哈希版本号1.00.01
+ */
+ public static final int EM_FEATURE_VERSION_TRAFFIC_HASH_1_00_01 = 124;
+ /**
+ * 机动车,全局浮点版本号1.00.02
+ */
+ public static final int EM_FEATURE_VERSION_TRAFFIC_FLOAT_1_00_02 = 125;
+ /**
+ * 机动车,全局哈希版本号1.00.02
+ */
+ public static final int EM_FEATURE_VERSION_TRAFFIC_HASH_1_00_02 = 126;
+ /**
+ * 商汤,人脸,1.5.0
+ */
+ public static final int EM_FEATURE_VERSION_SHANGTANG_FACE_1_5_0 = 151;
+ /**
+ * 商汤,人脸,1.8.1
+ */
+ public static final int EM_FEATURE_VERSION_SHANGTANG_FACE_1_8_1 = 152;
+ /**
+ * 商汤,人脸,2.1.3
+ */
+ public static final int EM_FEATURE_VERSION_SHANGTANG_FACE_2_1_3 = 153;
+ /**
+ * 商汤,人脸,2.39.6
+ */
+ public static final int EM_FEATURE_VERSION_SHANGTANG_FACE_2_39_6 = 154;
+ /**
+ * 商汤,人脸,2.39.7
+ */
+ public static final int EM_FEATURE_VERSION_SHANGTANG_FACE_2_39_7 = 155;
+ /**
+ * 商汤,人脸,2.39.8
+ */
+ public static final int EM_FEATURE_VERSION_SHANGTANG_FACE_2_39_8 = 156;
+ /**
+ * 商汤,人脸,239
+ */
+ public static final int EM_FEATURE_VERSION_SHANGTANG_FACE_239 = 157;
+ /**
+ * 商汤,人脸,242
+ */
+ public static final int EM_FEATURE_VERSION_SHANGTANG_FACE_242 = 158;
+ /**
+ * 商汤,人脸,244
+ */
+ public static final int EM_FEATURE_VERSION_SHANGTANG_FACE_244 = 159;
+ /**
+ * 商汤,人脸,245
+ */
+ public static final int EM_FEATURE_VERSION_SHANGTANG_FACE_245 = 160;
+ /**
+ * 深瞐,人脸/机动车/非机动车,2.4.2
+ */
+ public static final int EM_FEATURE_VERSION_SHENMO_HUMAN_TRAFFIC_NON_2_4_2 = 181;
+ /**
+ * 深瞐,人脸/机动车/非机动车,2.5.7
+ */
+ public static final int EM_FEATURE_VERSION_SHENMO_HUMAN_TRAFFIC_NON_2_5_7 = 182;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_FILE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_FILE_TYPE.java
new file mode 100644
index 0000000..c94c2de
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_FILE_TYPE.java
@@ -0,0 +1,49 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 文件类型
+ * @date 2021/02/22
+ */
+public enum EM_FILE_TYPE {
+ // 未知
+ EM_FILE_TYPE_UNKNOWN(0, "未知"),
+ // jpg 图片
+ EM_FILE_TYPE_JPG(1, "jpg图片"),
+ // dav 文件
+ EM_FILE_TYPE_DAV(2, "dav文件");
+
+ private int value;
+ private String note;
+
+ private EM_FILE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_FILE_TYPE enumType : EM_FILE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_FILE_TYPE enumType : EM_FILE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_FILE_UPDATE_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_FILE_UPDATE_STATE.java
new file mode 100644
index 0000000..7539639
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_FILE_UPDATE_STATE.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 文件上传状态
+* @date 2022/09/22 19:11:10
+*/
+public enum EM_FILE_UPDATE_STATE {
+/**
+未知
+*/
+EM_FILE_UPDATE_STATE_UNKNOWN(0,"未知"),
+/**
+正在上传
+*/
+EM_FILE_UPDATE_STATE_UPLOADING(1,"正在上传"),
+/**
+上传中断
+*/
+EM_FILE_UPDATE_STATE_PAUSED(2,"上传中断"),
+/**
+上传成功
+*/
+EM_FILE_UPDATE_STATE_SUCCEEDED(3,"上传成功");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_FILE_UPDATE_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_FILE_UPDATE_STATE enumType : EM_FILE_UPDATE_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_FILE_UPDATE_STATE enumType : EM_FILE_UPDATE_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_FILE_UPDATE_STATE getEnum(int value) {
+ for (EM_FILE_UPDATE_STATE e : EM_FILE_UPDATE_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_FILE_UPDATE_STATE.EM_FILE_UPDATE_STATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_FILTER_IMAGE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_FILTER_IMAGE_TYPE.java
new file mode 100644
index 0000000..aaa351c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_FILTER_IMAGE_TYPE.java
@@ -0,0 +1,25 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 返回的图片类型
+ * @date 2021/2/20
+ */
+public enum EM_FILTER_IMAGE_TYPE {
+ /** 未知 */
+ EM_FILTER_IMAGE_UNKNOWN,
+ /** 上报目标抠图 */
+ EM_FILTER_IMAGE_OBJECT,
+ /** 上报场景大图 */
+ EM_FILTER_IMAGE_SCENE;
+
+ public static EM_FILTER_IMAGE_TYPE getFilterImageType(int type) {
+ for (EM_FILTER_IMAGE_TYPE imageType : EM_FILTER_IMAGE_TYPE.values()) {
+ if (imageType.ordinal() == type) {
+ return imageType;
+ }
+ }
+ return EM_FILTER_IMAGE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_FIREPROOF_CLOTHES_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_FIREPROOF_CLOTHES_STATE.java
new file mode 100644
index 0000000..44e5458
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_FIREPROOF_CLOTHES_STATE.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 251823
+* @description 是否穿着防火衣
+* @date 2022/11/01 19:47:04
+*/
+public enum EM_FIREPROOF_CLOTHES_STATE {
+/**
+未知
+*/
+EM_FIREPROOF_CLOTHES_STATE_UNKNOWN(0,"未知"),
+/**
+没有穿着防火衣
+*/
+EM_FIREPROOF_CLOTHES_STATE_NO(1,"没有穿着防火衣"),
+/**
+有穿着防火衣
+*/
+EM_FIREPROOF_CLOTHES_STATE_YES(2,"有穿着防火衣"),
+/**
+不存在指定颜色的防火衣
+*/
+EM_FIREPROOF_CLOTHES_STATE_NOEXIT(3,"不存在指定颜色的防火衣");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_FIREPROOF_CLOTHES_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_FIREPROOF_CLOTHES_STATE enumType : EM_FIREPROOF_CLOTHES_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_FIREPROOF_CLOTHES_STATE enumType : EM_FIREPROOF_CLOTHES_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_FIREPROOF_CLOTHES_STATE getEnum(int value) {
+ for (EM_FIREPROOF_CLOTHES_STATE e : EM_FIREPROOF_CLOTHES_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_FIREPROOF_CLOTHES_STATE.EM_FIREPROOF_CLOTHES_STATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_FIRE_EXTINGUISHER_CATEGORY_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_FIRE_EXTINGUISHER_CATEGORY_TYPE.java
new file mode 100644
index 0000000..6dc414a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_FIRE_EXTINGUISHER_CATEGORY_TYPE.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 目标物体子类型
+ * @date 2021/12/27
+ */
+public enum EM_FIRE_EXTINGUISHER_CATEGORY_TYPE {
+
+ // 未知
+ EM_FIRE_EXTINGUISHER_CATEGORY_TYPE_UNKNOWN(0, "未知"),
+ // 普通类型灭火器,8kg左右
+ EM_FIRE_EXTINGUISHER_CATEGORY_TYPE_EXTINGUISHER_GENERAL(1, "普通类型灭火器,8kg左右"),
+ // 35kg推车式灭火器
+ EM_FIRE_EXTINGUISHER_CATEGORY_TYPE_EXTINGUISHER_HANDPUSH(2, "35kg推车式灭火器"),
+ // 普通标识牌
+ EM_FIRE_EXTINGUISHER_CATEGORY_TYPE_SIGNBOARD_GENERAL(3, "普通标识牌"),
+ // 静电标示牌
+ EM_FIRE_EXTINGUISHER_CATEGORY_TYPE_SIGNBOARD_STATIC_ELETRICITY(4, "静电标示牌"),
+ // 加油口盖标示牌
+ EM_FIRE_EXTINGUISHER_CATEGORY_TYPE_SIGNBOARD_OILCAP(5, "加油口盖标示牌"),
+ // 路锥
+ EM_FIRE_EXTINGUISHER_CATEGORY_TYPE_ROADCONE(6, "路锥"),
+ // 盖子
+ EM_FIRE_EXTINGUISHER_CATEGORY_TYPE_COVERPLATE(7, "盖子"),
+ // 加油口盖标示牌打开
+ EM_FIRE_EXTINGUISHER_CATEGORY_TYPE_OILCAP_OPEN(8, "加油口盖标示牌打开"),
+ // 加油口盖标示牌关闭
+ EM_FIRE_EXTINGUISHER_CATEGORY_TYPE_OILCAP_CLOSE(9, "加油口盖标示牌关闭");
+
+ private int value;
+ private String note;
+
+ private EM_FIRE_EXTINGUISHER_CATEGORY_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_FIRE_EXTINGUISHER_CATEGORY_TYPE enumType : EM_FIRE_EXTINGUISHER_CATEGORY_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_FIRE_EXTINGUISHER_CATEGORY_TYPE enumType : EM_FIRE_EXTINGUISHER_CATEGORY_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_FIRE_LANE_MOVE_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_FIRE_LANE_MOVE_STATE.java
new file mode 100644
index 0000000..29dfc7e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_FIRE_LANE_MOVE_STATE.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 物体进入还是离开
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:49
+ */
+public class EM_FIRE_LANE_MOVE_STATE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_FIRE_LANE_MOVE_STATE_UNKNOWN = 0;
+ /**
+ * 进入
+ */
+ public static final int EM_FIRE_LANE_MOVE_STATE_ENTER = 1;
+ /**
+ * 离开
+ */
+ public static final int EM_FIRE_LANE_MOVE_STATE_LEAVE = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_FIRE_LANE_OILCAP_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_FIRE_LANE_OILCAP_STATE.java
new file mode 100644
index 0000000..34c1225
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_FIRE_LANE_OILCAP_STATE.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 加油口盖标示牌状态
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:50
+ */
+public class EM_FIRE_LANE_OILCAP_STATE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_FIRE_LANE_OILCAP_STATE_UNKNOWN = 0;
+ /**
+ * 打开
+ */
+ public static final int EM_FIRE_LANE_OILCAP_STATE_OPEN = 1;
+ /**
+ * 关闭
+ */
+ public static final int EM_FIRE_LANE_OILCAP_STATE_CLOSE = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_FLOATINGOBJECT_DETECTION_SENCE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_FLOATINGOBJECT_DETECTION_SENCE_TYPE.java
new file mode 100644
index 0000000..c99f750
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_FLOATINGOBJECT_DETECTION_SENCE_TYPE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 漂浮物检测场景
+* @date 2022/05/09 11:40:43
+*/
+public enum EM_FLOATINGOBJECT_DETECTION_SENCE_TYPE {
+/**
+未知
+*/
+EM_FLOATINGOBJECT_DETECTION_SENCE_TYPE_UNKNOWN(0,"未知"),
+/**
+普通漂浮物检测
+*/
+EM_FLOATINGOBJECT_DETECTION_SENCE_TYPE_NOMAL(1,"普通漂浮物检测"),
+/**
+泡沫检测
+*/
+EM_FLOATINGOBJECT_DETECTION_SENCE_TYPE_BUBBLE(2,"泡沫检测");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_FLOATINGOBJECT_DETECTION_SENCE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_FLOATINGOBJECT_DETECTION_SENCE_TYPE enumType : EM_FLOATINGOBJECT_DETECTION_SENCE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_FLOATINGOBJECT_DETECTION_SENCE_TYPE enumType : EM_FLOATINGOBJECT_DETECTION_SENCE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_FLOATINGOBJECT_DETECTION_SENCE_TYPE getEnum(int value) {
+ for (EM_FLOATINGOBJECT_DETECTION_SENCE_TYPE e : EM_FLOATINGOBJECT_DETECTION_SENCE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_FLOATINGOBJECT_DETECTION_SENCE_TYPE.EM_FLOATINGOBJECT_DETECTION_SENCE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_FOCUS_LIMIT_SELECT_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_FOCUS_LIMIT_SELECT_MODE.java
new file mode 100644
index 0000000..dc6c0d6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_FOCUS_LIMIT_SELECT_MODE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 聚焦极限对应枚举
+* @date 2022/11/01 11:16:54
+*/
+public enum EM_FOCUS_LIMIT_SELECT_MODE {
+/**
+ Manual 自动
+*/
+EM_FOCUS_LIMIT_MODE_MANUAL(0," Manual 自动"),
+/**
+ Auto 手动
+*/
+EM_FOCUS_LIMIT_MODE_AUTO(1," Auto 手动"),
+/**
+
+*/
+EM_FOCUS_LIMIT_MODE_INVALI(2,"无效");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_FOCUS_LIMIT_SELECT_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_FOCUS_LIMIT_SELECT_MODE enumType : EM_FOCUS_LIMIT_SELECT_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_FOCUS_LIMIT_SELECT_MODE enumType : EM_FOCUS_LIMIT_SELECT_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_FOCUS_LIMIT_SELECT_MODE getEnum(int value) {
+ for (EM_FOCUS_LIMIT_SELECT_MODE e : EM_FOCUS_LIMIT_SELECT_MODE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_FOCUS_LIMIT_SELECT_MODE.EM_FOCUS_LIMIT_MODE_MANUAL;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_FOLLOW_CAR_ALARM_IMAGE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_FOLLOW_CAR_ALARM_IMAGE_TYPE.java
new file mode 100644
index 0000000..04c1ef5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_FOLLOW_CAR_ALARM_IMAGE_TYPE.java
@@ -0,0 +1,51 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 跟随车辆报警图片类型
+ * @date 2021/01/13
+ */
+public enum EM_FOLLOW_CAR_ALARM_IMAGE_TYPE {
+ // 未知
+ EM_FOLLOW_CAR_ALARM_IMAGE_TYPE_UNKNOWN(-1, "未知"),
+
+ // 全景图
+ EM_FOLLOW_CAR_ALARM_IMAGE_TYPE_PANORAMA(0, "全景图"),
+
+ // 小图
+ EM_FOLLOW_CAR_ALARM_IMAGE_TYPE_SMALL_PICTURE(1, "小图");
+
+ private int value;
+ private String note;
+
+ private EM_FOLLOW_CAR_ALARM_IMAGE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_FOLLOW_CAR_ALARM_IMAGE_TYPE enumType : EM_FOLLOW_CAR_ALARM_IMAGE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_FOLLOW_CAR_ALARM_IMAGE_TYPE enumType : EM_FOLLOW_CAR_ALARM_IMAGE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_FORBID_PARKING_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_FORBID_PARKING_STATUS.java
new file mode 100644
index 0000000..f844c38
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_FORBID_PARKING_STATUS.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 禁停状态
+ *
+ * @author 47040
+ * @since Created in 2020/11/18 14:53
+ */
+public enum EM_FORBID_PARKING_STATUS {
+ /**
+ * 未知
+ */
+ EM_FORBID_PARKING_STATUS_UNKNOWN(0, "未知"),
+ /**
+ * 未禁止
+ */
+ EM_FORBID_PARKING_STATUS_NOT_FORBID(1, "未禁止"),
+ /**
+ * 禁止
+ */
+ EM_FORBID_PARKING_STATUS_FORBID(2, "禁止");
+
+ private int value;
+ private String note;
+
+ EM_FORBID_PARKING_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_FORBID_PARKING_STATUS enumType : EM_FORBID_PARKING_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_FORBID_PARKING_STATUS enumType : EM_FORBID_PARKING_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_FORBID_PARKING_STATUS getEnum(int value) {
+ for (EM_FORBID_PARKING_STATUS e : EM_FORBID_PARKING_STATUS.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_FORBID_PARKING_STATUS.EM_FORBID_PARKING_STATUS_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_FREQUENCY_ALARM_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_FREQUENCY_ALARM_TYPE.java
new file mode 100644
index 0000000..94c7faf
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_FREQUENCY_ALARM_TYPE.java
@@ -0,0 +1,21 @@
+package com.netsdk.lib.enumeration;
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 报警类型
+ * @date 2021/7/21 11:18
+ */
+public enum EM_FREQUENCY_ALARM_TYPE {
+ EM_FREQUENCY_ALARM_UNKNOWN (-1), // 未知
+ EM_FREQUENCY_ALARM_HIGH(0), // 高频报警
+ EM_FREQUENCY_ALARM_LOW(1); // 低频报警
+ private int id ;
+
+ private EM_FREQUENCY_ALARM_TYPE(int id) {
+ this.id = id;
+ }
+
+ public int getId() {
+ return id;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_GATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_GATE_TYPE.java
new file mode 100644
index 0000000..78496bf
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_GATE_TYPE.java
@@ -0,0 +1,58 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 闸机类型
+ * @date 2021/2/7
+ */
+public enum EM_GATE_TYPE {
+ /** 未知 */
+ EM_ASG_GATE_TYPE_UNKNOWN(-1, "未知"),
+ /** 摆闸1 */
+ EM_ASG_GATE_TYPE_SWING_GATE_ONE(0, "摆闸1"),
+ /** 摆闸2 */
+ EM_ASG_GATE_TYPE_SWING_GATE_TWO(1, "摆闸2"),
+ /** 摆闸3 */
+ EM_ASG_GATE_TYPE_SWING_GATE_THREE(2, "摆闸3"),
+ /** 翼闸1 */
+ EM_ASG_GATE_TYPE_WING_GATE_ONE(3, "翼闸1"),
+ /** 翼闸2 */
+ EM_ASG_GATE_TYPE_WING_GATE_TWO(4, "翼闸2"),
+ /** 三棍闸1 */
+ EM_ASG_GATE_TYPE_THREE_STICK_GATE_ONE(5, "三棍闸1"),
+ /** 三棍闸2 */
+ EM_ASG_GATE_TYPE_THREE_STICK_GATE_TWO(6, "三棍闸2");
+ private int type;
+ private String desc;
+
+ EM_GATE_TYPE(int type, String desc) {
+ this.type = type;
+ this.desc = desc;
+ }
+
+ public static EM_GATE_TYPE getGateType(int type) {
+ for (EM_GATE_TYPE gateType : EM_GATE_TYPE.values()) {
+ if (gateType.type == type) {
+ return gateType;
+ }
+ }
+ return EM_ASG_GATE_TYPE_UNKNOWN;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_GATHER_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_GATHER_TYPE.java
new file mode 100644
index 0000000..eddb2c7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_GATHER_TYPE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 采集类型
+ * @date 2022/12/30 10:55:59
+ */
+public enum EM_GATHER_TYPE {
+ /**
+ * 未知类型
+ */
+ EM_GATHER_TYPE_UNKNOWN(0, "未知类型"),
+ /**
+ * 人脸采集
+ */
+ EM_GATHER_TYPE_FACE(1, "人脸采集"),
+ /**
+ * 证件采集
+ */
+ EM_GATHER_TYPE_IDCARD(2, "证件采集");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_GATHER_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_GATHER_TYPE enumType : EM_GATHER_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_GATHER_TYPE enumType : EM_GATHER_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_GETUSERINFOBYCONDITION_USER_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_GETUSERINFOBYCONDITION_USER_STATUS.java
new file mode 100644
index 0000000..d1c7131
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_GETUSERINFOBYCONDITION_USER_STATUS.java
@@ -0,0 +1,60 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 用户状态
+ * @date 2023/03/16 09:04:48
+ */
+public enum EM_GETUSERINFOBYCONDITION_USER_STATUS {
+ /**
+ * 未知
+ */
+ EM_GETUSERINFOBYCONDITION_USER_STATUS_UNKNOWN(0, "未知"),
+ /**
+ * 不存在,未配置过用户信息
+ */
+ EM_GETUSERINFOBYCONDITION_USER_STATUS_NOPRESENT(1, "不存在,未配置过用户信息"),
+ /**
+ * 未激活,已经配置过用户信息,但是未使能
+ */
+ EM_GETUSERINFOBYCONDITION_USER_STATUS_INACTIVATED(2, "未激活,已经配置过用户信息,但是未使能"),
+ /**
+ * 已激活
+ */
+ EM_GETUSERINFOBYCONDITION_USER_STATUS_ACTIVATED(3, "已激活");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_GETUSERINFOBYCONDITION_USER_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_GETUSERINFOBYCONDITION_USER_STATUS enumType : EM_GETUSERINFOBYCONDITION_USER_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_GETUSERINFOBYCONDITION_USER_STATUS enumType : EM_GETUSERINFOBYCONDITION_USER_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_GETUSERINFOBYCONDITION_USER_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_GETUSERINFOBYCONDITION_USER_TYPE.java
new file mode 100644
index 0000000..76e00bd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_GETUSERINFOBYCONDITION_USER_TYPE.java
@@ -0,0 +1,68 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 码流类型
+ * @date 2023/03/16 09:04:49
+ */
+public enum EM_GETUSERINFOBYCONDITION_USER_TYPE {
+ /**
+ * 未知
+ */
+ EM_GETUSERINFOBYCONDITION_USER_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 键盘用户
+ */
+ EM_GETUSERINFOBYCONDITION_USER_TYPE_KEYPAD(1, "键盘用户"),
+ /**
+ * IC卡用户
+ */
+ EM_GETUSERINFOBYCONDITION_USER_TYPE_ICCARD(2, "IC卡用户"),
+ /**
+ * 遥控器用户
+ */
+ EM_GETUSERINFOBYCONDITION_USER_TYPE_REMOTECONTROL(3, "遥控器用户"),
+ /**
+ * 手机用户
+ */
+ EM_GETUSERINFOBYCONDITION_USER_TYPE_MOBILE(4, "手机用户"),
+ /**
+ * key用户
+ */
+ EM_GETUSERINFOBYCONDITION_USER_TYPE_KEY(5, "key用户");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_GETUSERINFOBYCONDITION_USER_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_GETUSERINFOBYCONDITION_USER_TYPE enumType : EM_GETUSERINFOBYCONDITION_USER_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_GETUSERINFOBYCONDITION_USER_TYPE enumType : EM_GETUSERINFOBYCONDITION_USER_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_GLASSES_RULE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_GLASSES_RULE_TYPE.java
new file mode 100644
index 0000000..ed50dfc
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_GLASSES_RULE_TYPE.java
@@ -0,0 +1,86 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 251823
+* @description 眼镜检测规则中报警类型
+* @date 2022/11/01 19:47:17
+*/
+public enum EM_GLASSES_RULE_TYPE {
+/**
+未知
+*/
+EM_GLASSES_RULE_TYPE_UNKNOWN(-1,"未知"),
+/**
+无眼镜
+*/
+EM_GLASSES_RULE_TYPE_NO_GLASSES(0,"无眼镜"),
+/**
+太阳镜
+*/
+EM_GLASSES_RULE_TYPE_SUN_GLASSES(1,"太阳镜"),
+/**
+黑框眼镜
+*/
+EM_GLASSES_RULE_TYPE_BLACK_RIMMED_GLASSES(2,"黑框眼镜"),
+/**
+半框眼镜
+*/
+EM_GLASSES_RULE_TYPE_HALF_RIMMED_GLASSES(3,"半框眼镜"),
+/**
+无框眼镜
+*/
+EM_GLASSES_RULE_TYPE_RIMLESS_GLASSES(4,"无框眼镜"),
+/**
+普通眼镜
+*/
+EM_GLASSES_RULE_TYPE_NORMAL_GLASSES(5,"普通眼镜"),
+/**
+工业护目镜
+*/
+EM_GLASSES_RULE_TYPE_INDUSTRIAL_SAFETY_GLASSES(6,"工业护目镜");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_GLASSES_RULE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_GLASSES_RULE_TYPE enumType : EM_GLASSES_RULE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_GLASSES_RULE_TYPE enumType : EM_GLASSES_RULE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_GLASSES_RULE_TYPE getEnum(int value) {
+ for (EM_GLASSES_RULE_TYPE e : EM_GLASSES_RULE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_GLASSES_RULE_TYPE.EM_GLASSES_RULE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_GLASS_STATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_GLASS_STATE_TYPE.java
new file mode 100644
index 0000000..b1cd13a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_GLASS_STATE_TYPE.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 戴眼镜状态
+* @date 2022/09/28 10:27:56
+*/
+public enum EM_GLASS_STATE_TYPE {
+/**
+未知
+*/
+EM_GLASS_STATE_TYPE_UNKNOWN(0,"未知"),
+/**
+未戴
+*/
+EM_GLASS_STATE_TYPE_NOT_WEARING(1,"未戴"),
+/**
+戴常规眼镜
+*/
+EM_GLASS_STATE_TYPE_CONVENTIONAL_GLASSES(2,"戴常规眼镜"),
+/**
+戴太阳眼镜
+*/
+EM_GLASS_STATE_TYPE_SUN_GLASSES(3,"戴太阳眼镜"),
+/**
+戴黑框眼镜
+*/
+EM_GLASS_STATE_TYPE_BLACK_GLASSES(4,"戴黑框眼镜");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_GLASS_STATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_GLASS_STATE_TYPE enumType : EM_GLASS_STATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_GLASS_STATE_TYPE enumType : EM_GLASS_STATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_GLASS_STATE_TYPE getEnum(int value) {
+ for (EM_GLASS_STATE_TYPE e : EM_GLASS_STATE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_GLASS_STATE_TYPE.EM_GLASS_STATE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_GLOBAL_LANES_LINE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_GLOBAL_LANES_LINE_TYPE.java
new file mode 100644
index 0000000..c066cdd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_GLOBAL_LANES_LINE_TYPE.java
@@ -0,0 +1,42 @@
+package com.netsdk.lib.enumeration;
+/**
+ * @description 车道线属性
+ * @author 119178
+ * @date 2021/3/16
+ */
+public enum EM_GLOBAL_LANES_LINE_TYPE {
+ /**
+ * 未知
+ */
+ EM_GLOBAL_LANES_LINE_TYPE_UNKNOWN(0),
+ /**
+ * 白实线
+ */
+ EM_GLOBAL_LANES_LINE_TYPE_WHITESOLID(1),
+ /**
+ * 白虚线
+ */
+ EM_GLOBAL_LANES_LINE_TYPE_WHITEDOTTED(2),
+ /**
+ * 黄线
+ */
+ EM_GLOBAL_LANES_LINE_TYPE_YELLOW(3),
+ /**
+ * 上实下虚
+ */
+ EM_GLOBAL_LANES_LINE_TYPE_UPSOLIDDOWNDOTTED(4),
+ /**
+ * 上虚下实
+ */
+ EM_GLOBAL_LANES_LINE_TYPE_UPDOTTEDDOWNSOLID(5);
+
+ private int id ;
+
+ private EM_GLOBAL_LANES_LINE_TYPE(int id) {
+ this.id = id;
+ }
+
+ public int getId() {
+ return id;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_GRANULARITY_STARTFIND_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_GRANULARITY_STARTFIND_TYPE.java
new file mode 100644
index 0000000..8bcb165
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_GRANULARITY_STARTFIND_TYPE.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 查询要求返回的统计信息粒度
+ * @date 2022/11/03 10:19:57
+ */
+public enum EM_GRANULARITY_STARTFIND_TYPE {
+ /**
+ * 未知
+ */
+ EM_GRANULARITY_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 按5分钟(时报表)
+ */
+ EM_GRANULARITY_TYPE_MINUTE(1, "按5分钟(时报表)"),
+ /**
+ * 按小时(日报表)
+ */
+ EM_GRANULARITY_TYPE_HOUR(2, "按小时(日报表)"),
+ /**
+ * 按天(月报表)
+ */
+ EM_GRANULARITY_TYPE_DAY(3, "按天(月报表)"),
+ /**
+ * 按月(年报表)
+ */
+ EM_GRANULARITY_TYPE_MONTH(4, "按月(年报表)");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_GRANULARITY_STARTFIND_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_GRANULARITY_STARTFIND_TYPE enumType : EM_GRANULARITY_STARTFIND_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_GRANULARITY_STARTFIND_TYPE enumType : EM_GRANULARITY_STARTFIND_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_GREENCNHEALTH_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_GREENCNHEALTH_STATUS.java
new file mode 100644
index 0000000..4d168ad
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_GREENCNHEALTH_STATUS.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 人员健康状态
+* @date 2022/03/08 11:25:17
+*/
+public enum EM_GREENCNHEALTH_STATUS {
+/**
+未知
+*/
+EM_GREENCNHEALTH_STATUS_UNKNOWN(0,"未知"),
+/**
+绿码
+*/
+EM_GREENCNHEALTH_STATUS_GREEN(1,"绿码"),
+/**
+黄码
+*/
+EM_GREENCNHEALTH_STATUS_YELLOW(2,"黄码"),
+/**
+红码
+*/
+EM_GREENCNHEALTH_STATUS_RED(3,"红码"),
+/**
+无效
+*/
+EM_GREENCNHEALTH_STATUS_INVALID(4,"无效");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_GREENCNHEALTH_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_GREENCNHEALTH_STATUS enumType : EM_GREENCNHEALTH_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_GREENCNHEALTH_STATUS enumType : EM_GREENCNHEALTH_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_GREENCNHEALTH_STATUS getEnum(int value) {
+ for (EM_GREENCNHEALTH_STATUS e : EM_GREENCNHEALTH_STATUS.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_GREENCNHEALTH_STATUS.EM_GREENCNHEALTH_STATUS_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_GROUP_COLOR_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_GROUP_COLOR_TYPE.java
new file mode 100644
index 0000000..d324113
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_GROUP_COLOR_TYPE.java
@@ -0,0 +1,90 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 分组物品颜色
+* @date 2022/12/01 16:27:09
+*/
+public enum EM_GROUP_COLOR_TYPE {
+/**
+未知
+*/
+EM_GROUP_COLOR_TYPE_UNKNOWN(-1,"未知"),
+/**
+枣红色,rgb(195,33,54)
+*/
+EM_GROUP_COLOR_TYPE_JUJUBE_RED(0,"枣红色,rgb(195,33,54)"),
+/**
+紫色,rgb(255,0,255)
+*/
+EM_GROUP_COLOR_TYPE_PURPLE(1,"紫色,rgb(255,0,255)"),
+/**
+灰色,rgb(192,192,192)
+*/
+EM_GROUP_COLOR_TYPE_GRAY(2,"灰色,rgb(192,192,192)"),
+/**
+高亮黄色,rgb(255,255, 0)
+*/
+EM_GROUP_COLOR_TYPE_HIGHLIGHT_YELLOW(3,"高亮黄色,rgb(255,255, 0)"),
+/**
+青色
+*/
+EM_GROUP_COLOR_TYPE_CYAN(4,"青色"),
+/**
+粉色
+*/
+EM_GROUP_COLOR_TYPE_PINK(5,"粉色"),
+/**
+黑色
+*/
+EM_GROUP_COLOR_TYPE_BLACK(6,"黑色"),
+/**
+棕色
+*/
+EM_GROUP_COLOR_TYPE_BROWN(7,"棕色");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_GROUP_COLOR_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_GROUP_COLOR_TYPE enumType : EM_GROUP_COLOR_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_GROUP_COLOR_TYPE enumType : EM_GROUP_COLOR_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_GROUP_COLOR_TYPE getEnum(int value) {
+ for (EM_GROUP_COLOR_TYPE e : EM_GROUP_COLOR_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_GROUP_COLOR_TYPE.EM_GROUP_COLOR_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_GROUP_GRADE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_GROUP_GRADE_TYPE.java
new file mode 100644
index 0000000..a378154
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_GROUP_GRADE_TYPE.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 分组安全等级
+* @date 2022/12/01 16:27:09
+*/
+public enum EM_GROUP_GRADE_TYPE {
+/**
+未知
+*/
+EM_GROUP_GRADE_TYPE_UNKNOWN(-1,"未知"),
+/**
+普通级别
+*/
+EM_GROUP_GRADE_TYPE_NORMAL(0,"普通级别"),
+/**
+警示级别
+*/
+EM_GROUP_GRADE_TYPE_WARN(1,"警示级别"),
+/**
+危险级别
+*/
+EM_GROUP_GRADE_TYPE_DANGER(2,"危险级别");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_GROUP_GRADE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_GROUP_GRADE_TYPE enumType : EM_GROUP_GRADE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_GROUP_GRADE_TYPE enumType : EM_GROUP_GRADE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_GROUP_GRADE_TYPE getEnum(int value) {
+ for (EM_GROUP_GRADE_TYPE e : EM_GROUP_GRADE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_GROUP_GRADE_TYPE.EM_GROUP_GRADE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_H264_PROFILE_RANK.java b/src/main/java/com/netsdk/lib/enumeration/EM_H264_PROFILE_RANK.java
new file mode 100644
index 0000000..e5777bf
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_H264_PROFILE_RANK.java
@@ -0,0 +1,69 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * H264 编码级别
+ *
+ * @author 47040
+ * @since Created at 2021/5/26 9:04
+ */
+public enum EM_H264_PROFILE_RANK {
+ /**
+ * 提供I/P帧,仅支持 progressive(逐行扫描)和 CAVLC
+ */
+ NET_PROFILE_BASELINE(1, "BASELINE"),
+ /**
+ * 提供I/P/B帧,支持 progressive 和 interlaced,提供 CAVLC 或 CABAC
+ */
+ NET_PROFILE_MAIN(2, "MAIN"),
+ /**
+ * 提供I/P/B/SP/SI帧,仅支持 progressive (逐行扫描)和 CAVLC
+ */
+ NET_PROFILE_EXTENDED(3, "EXTENDED"),
+ /**
+ * 即 FRExt,Main_Profile基础上新增:8x8 intra prediction(8x8 帧内预测), custom
+ * quaint(自定义量化), lossless video coding(无损视频编码), 更多的 yuv 格式
+ */
+ NET_PROFILE_HIGH(4, "HIGH");
+
+ private final int value;
+ private final String note;
+
+ EM_H264_PROFILE_RANK(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_H264_PROFILE_RANK enumType : EM_H264_PROFILE_RANK.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_H264_PROFILE_RANK enumType : EM_H264_PROFILE_RANK.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_H264_PROFILE_RANK getEnum(int value) {
+ for (EM_H264_PROFILE_RANK e : EM_H264_PROFILE_RANK.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_H264_PROFILE_RANK.NET_PROFILE_BASELINE;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_HAIR_STYLE.java b/src/main/java/com/netsdk/lib/enumeration/EM_HAIR_STYLE.java
new file mode 100644
index 0000000..de83333
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_HAIR_STYLE.java
@@ -0,0 +1,42 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 头发样式
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_HAIR_STYLE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_HAIR_UNKNOWN = 0;
+ /**
+ * 长发
+ */
+ public static final int EM_HAIR_LONG_HAIR = 1;
+ /**
+ * 短发
+ */
+ public static final int EM_HAIR_SHORT_HAIR = 2;
+ /**
+ * 马尾
+ */
+ public static final int EM_HAIR_PONYTAIL = 3;
+ /**
+ * 盘发
+ */
+ public static final int EM_HAIR_UPDO = 4;
+ /**
+ * 头部被遮挡
+ */
+ public static final int EM_HAIR_HEAD_BLOCKED = 5;
+ /**
+ * 无头发
+ */
+ public static final int EM_HAIR_NONE = 6;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_HAS_BABYCARRIAGE.java b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_BABYCARRIAGE.java
new file mode 100644
index 0000000..b3c735a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_BABYCARRIAGE.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 是否推婴儿车
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_HAS_BABYCARRIAGE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_HAS_BABYCARRIAGE_UNKNOWN = 0;
+ /**
+ * 无
+ */
+ public static final int EM_HAS_BABYCARRIAGE_NO = 1;
+ /**
+ * 有
+ */
+ public static final int EM_HAS_BABYCARRIAGE_YES = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_HAS_BADGE.java b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_BADGE.java
new file mode 100644
index 0000000..ff7a420
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_BADGE.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 是否佩戴工牌
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_HAS_BADGE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_HAS_BADGE_UNKNOWN = 0;
+ /**
+ * 无
+ */
+ public static final int EM_HAS_BADGE_NO = 1;
+ /**
+ * 有
+ */
+ public static final int EM_HAS_BADGE_YES = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_HAS_BAG.java b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_BAG.java
new file mode 100644
index 0000000..4d76687
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_BAG.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 是否戴包(包括背包或拎包)
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_HAS_BAG extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_HAS_BAG_UNKNOWN = 0;
+ /**
+ * 不带包
+ */
+ public static final int EM_HAS_BAG_NO = 1;
+ /**
+ * 带包
+ */
+ public static final int EM_HAS_BAG_YES = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_HAS_DOWNBODY.java b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_DOWNBODY.java
new file mode 100644
index 0000000..b032284
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_DOWNBODY.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 人体部位是否有下半身
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_HAS_DOWNBODY extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_HAS_DOWNBODY_UNKNOWN = -1;
+ /**
+ * 无
+ */
+ public static final int EM_HAS_DOWNBODY_NO = 0;
+ /**
+ * 有
+ */
+ public static final int EM_HAS_DOWNBODY_YES = 1;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_HAS_GLASS.java b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_GLASS.java
new file mode 100644
index 0000000..f4caaa2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_GLASS.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 是否带眼镜
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_HAS_GLASS extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_HAS_GLASS_UNKNOWN = 0;
+ /**
+ * 未戴
+ */
+ public static final int EM_HAS_GLASS_NO = 1;
+ /**
+ * 戴普通眼镜
+ */
+ public static final int EM_HAS_GLASS_NORMAL = 2;
+ /**
+ * 戴太阳眼镜
+ */
+ public static final int EM_HAS_GLASS_SUN = 3;
+ /**
+ * 戴黑框眼镜
+ */
+ public static final int EM_HAS_GLASS_BLACK = 4;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_HAS_HAT.java b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_HAT.java
new file mode 100644
index 0000000..ffd9052
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_HAT.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 是否戴帽子
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_HAS_HAT extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_HAS_HAT_UNKNOWN = 0;
+ /**
+ * 不戴帽子
+ */
+ public static final int EM_HAS_HAT_NO = 1;
+ /**
+ * 戴帽子
+ */
+ public static final int EM_HAS_HAT_YES = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_HAS_HEAD.java b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_HEAD.java
new file mode 100644
index 0000000..958c81f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_HEAD.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 人体部位是否有头
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_HAS_HEAD extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_HAS_HEAD_UNKNOWN = -1;
+ /**
+ * 无
+ */
+ public static final int EM_HAS_HEAD_NO = 0;
+ /**
+ * 有
+ */
+ public static final int EM_HAS_HEAD_YES = 1;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_HAS_HOLD.java b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_HOLD.java
new file mode 100644
index 0000000..a996e87
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_HOLD.java
@@ -0,0 +1,13 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description
+ * @date 2021/8/24 15:05
+ */
+public enum EM_HAS_HOLD {
+ EM_HAS_HOLD_UNKNOWN, // 未知
+ EM_HAS_HOLD_NO, // 无东西
+ EM_HAS_HOLD_YES, // 有东西
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_HAS_RAINCOAT.java b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_RAINCOAT.java
new file mode 100644
index 0000000..2d3a20e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_RAINCOAT.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 是否有雨披
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_HAS_RAINCOAT extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_HAS_RAINCOAT_UNKNOWN = 0;
+ /**
+ * 无
+ */
+ public static final int EM_HAS_RAINCOAT_NO = 1;
+ /**
+ * 有
+ */
+ public static final int EM_HAS_RAINCOAT_YES = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_HAS_UMBRELLA.java b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_UMBRELLA.java
new file mode 100644
index 0000000..9fee2cc
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_UMBRELLA.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 是否打伞
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_HAS_UMBRELLA extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_HAS_UMBRELLA_UNKNOWN = 0;
+ /**
+ * 未打伞
+ */
+ public static final int EM_HAS_UMBRELLA_NO = 1;
+ /**
+ * 打伞
+ */
+ public static final int EM_HAS_UMBRELLA_YES = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_HAS_VEST.java b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_VEST.java
new file mode 100644
index 0000000..6286474
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_HAS_VEST.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 是否有反光背心
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_HAS_VEST extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_HAS_VEST_UNKNOWN = 0;
+ /**
+ * 无
+ */
+ public static final int EM_HAS_VEST_NO = 1;
+ /**
+ * 有
+ */
+ public static final int EM_HAS_VEST_YES = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_HAT_STYLE.java b/src/main/java/com/netsdk/lib/enumeration/EM_HAT_STYLE.java
new file mode 100644
index 0000000..b7aa178
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_HAT_STYLE.java
@@ -0,0 +1,12 @@
+package com.netsdk.lib.enumeration;
+// 帽子款式
+public enum EM_HAT_STYLE {
+ EM_HAT_UNKNOWN, // 未知
+ EM_HAT_ORDINARY, // 普通帽子
+ EM_HAT_HELMET, // 头盔
+ EM_HAT_SAFETYHAT, // 安全帽
+ EM_HAT_EAVELESS, // 无檐帽
+ EM_HAT_PEAKEDCAP, // 鸭舌帽
+ EM_HAT_FISHERMANHAT, // 渔夫帽
+ EM_HAT_NONE, // 未戴帽
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_HEALTH_CODE_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_HEALTH_CODE_STATUS.java
new file mode 100644
index 0000000..b032d99
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_HEALTH_CODE_STATUS.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 健康码状态
+ */
+public enum EM_HEALTH_CODE_STATUS {
+ /**
+ * 未知
+ */
+ EM_HEALTH_CODE_STATUS_UNKNOWN0,
+ /**
+ * 红码
+ */
+ EM_HEALTH_CODE_STATUS_RED,
+ /**
+ * 绿码
+ */
+ EM_HEALTH_CODE_STATUS_GREEN,
+ /**
+ * 黄码
+ */
+ EM_HEALTH_CODE_STATUS_YELLOW,
+ /**
+ * 无效
+ */
+ EM_HEALTH_CODE_STATUS_INVALID,
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_HEATMAP_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_HEATMAP_TYPE.java
new file mode 100644
index 0000000..8f42b40
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_HEATMAP_TYPE.java
@@ -0,0 +1,63 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 热度图类型
+ * @date 2020/9/21
+ */
+public enum EM_HEATMAP_TYPE {
+ /**
+ * 未知
+ */
+ EM_HEATMAP_UNKNOWN(0,"未知"),
+ /**
+ * 平均滞留时间热度图
+ */
+ EM_HEATMAP_AVERAGESTAYTIME(1,"平均滞留时间热度图"),
+ /**
+ * 人数统计热度图
+ */
+ EM_HEATMAP_HUMANSTATISTICS(2,"人数统计热度图"),
+ /**
+ * 行人轨迹图
+ */
+ EM_HEATMAP_HUMANTRACK(3,"行人轨迹图");
+ /**
+ * 类型
+ */
+ private int type;
+ /**
+ * 解释
+ */
+ private String desc;
+ private EM_HEATMAP_TYPE(int type,String desc){
+ this.type=type;
+ this.desc=desc;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+
+ public static EM_HEATMAP_TYPE getEmHeatMap(int type) {
+ for (EM_HEATMAP_TYPE heatmap : EM_HEATMAP_TYPE.values()) {
+ if (heatmap.getType() == type) {
+ return heatmap;
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_HELMET_EVENT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_HELMET_EVENT_TYPE.java
new file mode 100644
index 0000000..60a308e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_HELMET_EVENT_TYPE.java
@@ -0,0 +1,63 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 触发事件的类型
+ * @since : Created in 2022/03/08 15:25
+ */
+
+public enum EM_HELMET_EVENT_TYPE {
+ /**
+ * 未知
+ */
+ EM_UNKNOWN_TYPE(0, "未知"),
+ /**
+ * 未佩戴安全帽
+ */
+ EM_NOT_WEAR_HELMET(1, "未佩戴安全帽");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_HELMET_EVENT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_HELMET_EVENT_TYPE enumType : EM_HELMET_EVENT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_HELMET_EVENT_TYPE enumType : EM_HELMET_EVENT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_HELMET_EVENT_TYPE getEnum(int value) {
+ for (EM_HELMET_EVENT_TYPE e : EM_HELMET_EVENT_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_HELMET_EVENT_TYPE.EM_UNKNOWN_TYPE;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_HUMAN_ANIMAL_ALARM_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_HUMAN_ANIMAL_ALARM_TYPE.java
new file mode 100644
index 0000000..371c10a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_HUMAN_ANIMAL_ALARM_TYPE.java
@@ -0,0 +1,65 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 人和动物检测事件报警类型
+ * @date 2022/12/19 11:22:21
+ */
+public enum EM_HUMAN_ANIMAL_ALARM_TYPE {
+ /**
+ * 未知
+ */
+ EM_HUMAN_ANIMAL_ALARM_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 从人数正常到人数异常
+ */
+ EM_HUMAN_ANIMAL_ALARM_TYPE_NORMAL_TO_ABNORMAL(1, "从人数正常到人数异常"),
+ /**
+ * 从人数异常到人数正常
+ */
+ EM_HUMAN_ANIMAL_ALARM_TYPE_ABNORMAL_TO_NORMAL(2, "从人数异常到人数正常");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_HUMAN_ANIMAL_ALARM_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_HUMAN_ANIMAL_ALARM_TYPE enumType : EM_HUMAN_ANIMAL_ALARM_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_HUMAN_ANIMAL_ALARM_TYPE enumType : EM_HUMAN_ANIMAL_ALARM_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_HUMAN_ANIMAL_ALARM_TYPE getEnum(int value) {
+ for (EM_HUMAN_ANIMAL_ALARM_TYPE e : EM_HUMAN_ANIMAL_ALARM_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_HUMAN_ANIMAL_ALARM_TYPE.EM_HUMAN_ANIMAL_ALARM_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_HUMAN_POSTURE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_HUMAN_POSTURE_TYPE.java
new file mode 100644
index 0000000..8a4eb26
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_HUMAN_POSTURE_TYPE.java
@@ -0,0 +1,22 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 关联的人体消息类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_HUMAN_POSTURE_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_HUMAN_POSTURE_UNKNOWN = 0;
+ /**
+ * 与最优人脸同画面的人体
+ */
+ public static final int EM_HUMAN_POSTURE_ALONG_WITH_FACE = 1;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_IDCARD_MSG_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_IDCARD_MSG_TYPE.java
new file mode 100644
index 0000000..6d84bfb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_IDCARD_MSG_TYPE.java
@@ -0,0 +1,19 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 证件消息类型
+ */
+public enum EM_IDCARD_MSG_TYPE {
+ /**
+ * 未知
+ */
+ EM_IDCARD_MSG_TYP_UNKNOWN,
+ /**
+ * 证件查询信息
+ */
+ EM_IDCARD_MSG_TYP_QUERY,
+ /**
+ * 证件权限下发
+ */
+ EM_IDCARD_MSG_TYPE_ISSUE_PERMISSION,
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_IMAGE_LIGHT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_IMAGE_LIGHT_TYPE.java
new file mode 100644
index 0000000..309e707
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_IMAGE_LIGHT_TYPE.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 图像成像光源类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_IMAGE_LIGHT_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_IMAGE_LIGHT_TYPE_UNKNOWN = 0;
+ /**
+ * 可见光成像
+ */
+ public static final int EM_IMAGE_LIGHT_TYPE_VISIBLE = 1;
+ /**
+ * 近红外成像(灰度图)
+ */
+ public static final int EM_IMAGE_LIGHT_TYPE_NEAR_INFRARED = 2;
+ /**
+ * 热红外成像(伪彩色)
+ */
+ public static final int EM_IMAGE_LIGHT_TYPE_THERMAL_INFRARED = 3;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_IMAGE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_IMAGE_TYPE.java
new file mode 100644
index 0000000..d8c455a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_IMAGE_TYPE.java
@@ -0,0 +1,51 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 图片类型
+ */
+public enum EM_IMAGE_TYPE {
+
+ // 未知
+ EM_IMAGE_UNKNOWN(-1, "未知"),
+
+ // 安检员图片
+ EM_IMAGE_INSPECTOR(0, "安检员图片"),
+
+ // 包裹图片
+ EM_IMAGE_PACKAGE(1, "包裹图片");
+
+ private int value;
+ private String note;
+
+ private EM_IMAGE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_IMAGE_TYPE enumType : EM_IMAGE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_IMAGE_TYPE enumType : EM_IMAGE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_IMAGE_TYPE_EX2.java b/src/main/java/com/netsdk/lib/enumeration/EM_IMAGE_TYPE_EX2.java
new file mode 100644
index 0000000..c49f648
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_IMAGE_TYPE_EX2.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 图片类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_IMAGE_TYPE_EX2 extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_IMAGE_TYPE_UNKNOWN = 0;
+ /**
+ * 全景广角度
+ */
+ public static final int EM_IMAGE_TYPE_SCENE_IMAGE = 1;
+ /**
+ * 大图
+ */
+ public static final int EM_IMAGE_TYPE_GLOBAL_SCENE = 2;
+ /**
+ * 大图(全景图)的缩略图
+ */
+ public static final int EM_IMAGE_TYPE_THUM_IMAGE = 3;
+ /**
+ * 人脸全景图
+ */
+ public static final int EM_IMAGE_TYPE_FACE_SCENE_IMAGE = 4;
+ /**
+ * 人脸图
+ */
+ public static final int EM_IMAGE_TYPE_FACE_IMAGE = 5;
+ /**
+ * 人体图
+ */
+ public static final int EM_IMAGE_TYPE_HUMAN_IMAGE = 6;
+ /**
+ * 与最优人脸同画面的人体图
+ */
+ public static final int EM_IMAGE_TYPE_ALONG_WITH_FACE_HUMAN_IMAGE = 7;
+ /**
+ * 与最优人脸同画面人体的全景图
+ */
+ public static final int EM_IMAGE_TYPE_ALONG_WITH_FACE_HUMAN_SCENE_IMAGE = 8;
+ /**
+ * 车位抠图
+ */
+ public static final int EM_IMAGE_TYPE_PARKING_IMAGE = 9;
+ /**
+ * 车身特写抠图
+ */
+ public static final int EM_IMAGE_TYPE_BINARIZED_PLATE = 10;
+ /**
+ * 格口抠图
+ */
+ public static final int EM_IMAGE_TYPE_DEPOSIT_IMAGE_INFO = 11;
+ /**
+ * 普通图,图片名称未定义情况使用
+ */
+ public static final int EM_IMAGE_TYPE_IMAGE_INFO = 12;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_INFRARED_FUNC_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_INFRARED_FUNC_MODE.java
new file mode 100644
index 0000000..d4d3066
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_INFRARED_FUNC_MODE.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 红外功能模式
+ */
+public enum EM_INFRARED_FUNC_MODE {
+
+ EM_INFRARED_FUNC_MODE_UNKNOWN(0, "未知"),
+ EM_INFRARED_FUNC_MODE_ON(1, "开启"),
+ EM_INFRARED_FUNC_MODE_OFF(2, "关闭"),
+ EM_INFRARED_FUNC_MODE_AUTO(3, "自动");
+
+ private final int value;
+ private final String note;
+
+ EM_INFRARED_FUNC_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_INFRARED_FUNC_MODE enumType : EM_INFRARED_FUNC_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_INFRARED_FUNC_MODE enumType : EM_INFRARED_FUNC_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_INFRARED_FUNC_MODE getEnum(int value) {
+ for (EM_INFRARED_FUNC_MODE e : EM_INFRARED_FUNC_MODE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_INFRARED_FUNC_MODE.EM_INFRARED_FUNC_MODE_UNKNOWN;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_INFRARED_LIGHT_LEVEL.java b/src/main/java/com/netsdk/lib/enumeration/EM_INFRARED_LIGHT_LEVEL.java
new file mode 100644
index 0000000..83df5fb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_INFRARED_LIGHT_LEVEL.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 红外亮度
+ */
+public enum EM_INFRARED_LIGHT_LEVEL {
+
+ EM_INFRARED_LIGHT_LEVEL_UNKNOWN(0, "未知"),
+ EM_INFRARED_LIGHT_LEVEL_HIGH(1, "高"),
+ EM_INFRARED_LIGHT_LEVEL_MEDIUM(2, "中"),
+ EM_INFRARED_LIGHT_LEVEL_LOW(3, "低");
+
+ private final int value;
+ private final String note;
+
+ EM_INFRARED_LIGHT_LEVEL(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_INFRARED_LIGHT_LEVEL enumType : EM_INFRARED_LIGHT_LEVEL.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_INFRARED_LIGHT_LEVEL enumType : EM_INFRARED_LIGHT_LEVEL.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_INFRARED_LIGHT_LEVEL getEnum(int value) {
+ for (EM_INFRARED_LIGHT_LEVEL e : EM_INFRARED_LIGHT_LEVEL.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_INFRARED_LIGHT_LEVEL.EM_INFRARED_LIGHT_LEVEL_UNKNOWN;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_INSIDE_OBJECT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_INSIDE_OBJECT_TYPE.java
new file mode 100644
index 0000000..cd4204f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_INSIDE_OBJECT_TYPE.java
@@ -0,0 +1,222 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 物品类型
+* @date 2022/12/01 16:27:10
+*/
+public enum EM_INSIDE_OBJECT_TYPE {
+/**
+算法未识别物品
+*/
+EM_INSIDE_OBJECT_UNKNOWN(0,"算法未识别物品"),
+/**
+刀具
+*/
+EM_INSIDE_OBJECT_KNIFE(1,"刀具"),
+/**
+瓶装液体
+*/
+EM_INSIDE_OBJECT_BOTTLELIQUID(2,"瓶装液体"),
+/**
+枪支
+*/
+EM_INSIDE_OBJECT_GUN(3,"枪支"),
+/**
+雨伞
+*/
+EM_INSIDE_OBJECT_UMBRELLA(4,"雨伞"),
+/**
+手机
+*/
+EM_INSIDE_OBJECT_PHONE(5,"手机"),
+/**
+笔记本
+*/
+EM_INSIDE_OBJECT_NOTEBOOK(6,"笔记本"),
+/**
+充电宝
+*/
+EM_INSIDE_OBJECT_POWERBANK(7,"充电宝"),
+/**
+鞋子
+*/
+EM_INSIDE_OBJECT_SHOES(8,"鞋子"),
+/**
+杠子
+*/
+EM_INSIDE_OBJECT_ROD(9,"杠子"),
+/**
+金属
+*/
+EM_INSIDE_OBJECT_METAL(10,"金属"),
+/**
+爆炸物
+*/
+EM_INSIDE_OBJECT_EXPLOSIVE(11,"爆炸物"),
+/**
+喷雾喷灌
+*/
+EM_INSIDE_OBJECT_CONTAINERSPRAY(12,"喷雾喷灌"),
+/**
+烟花爆竹
+*/
+EM_INSIDE_OBJECT_EXPLOSIVE_FIREWORKS(13,"烟花爆竹"),
+/**
+打火机
+*/
+EM_INSIDE_OBJECT_LIGHTER(14,"打火机"),
+/**
+警棍
+*/
+EM_INSIDE_OBJECT_STICK(15,"警棍"),
+/**
+指虎
+*/
+EM_INSIDE_OBJECT_BRASSKNUCKLE(16,"指虎"),
+/**
+手铐
+*/
+EM_INSIDE_OBJECT_HANDCUFFS(17,"手铐"),
+/**
+象牙
+*/
+EM_INSIDE_OBJECT_IVORY(18,"象牙"),
+/**
+书籍
+*/
+EM_INSIDE_OBJECT_BOOK(19,"书籍"),
+/**
+光盘
+*/
+EM_INSIDE_OBJECT_CD(20,"光盘"),
+/**
+锤子
+*/
+EM_INSIDE_OBJECT_HAMMERS(21,"锤子"),
+/**
+钳子
+*/
+EM_INSIDE_OBJECT_PLIERS(22,"钳子"),
+/**
+斧头
+*/
+EM_INSIDE_OBJECT_AXE(23,"斧头"),
+/**
+螺丝刀
+*/
+EM_INSIDE_OBJECT_SCREW_DRIVER(24,"螺丝刀"),
+/**
+扳手
+*/
+EM_INSIDE_OBJECT_WRENCH(25,"扳手"),
+/**
+电击棍
+*/
+EM_INSIDE_OBJECT_ELECTRIC_SHOCK_STICK(26,"电击棍"),
+/**
+保温杯
+*/
+EM_INSIDE_OBJECT_THERMOS(27,"保温杯"),
+/**
+玻璃杯
+*/
+EM_INSIDE_OBJECT_GLASS_BOTTLES(28,"玻璃杯"),
+/**
+塑料瓶
+*/
+EM_INSIDE_OBJECT_PLASTIC_BOTTLE(29,"塑料瓶"),
+/**
+打火机油
+*/
+EM_INSIDE_OBJECT_IGNITION_OIL(30,"打火机油"),
+/**
+指甲油
+*/
+EM_INSIDE_OBJECT_NAIL_POLISH(31,"指甲油"),
+/**
+工具
+*/
+EM_INSIDE_OBJECT_BLUNT_INSTRUMENT(32,"工具"),
+/**
+剪刀
+*/
+EM_INSIDE_OBJECT_SCISSORS(33,"剪刀"),
+/**
+电子产品
+*/
+EM_INSIDE_OBJECT_ELECTRONIC(34,"电子产品"),
+/**
+手枪
+*/
+EM_INSIDE_OBJECT_PISTOL(35,"手枪"),
+/**
+折叠刀
+*/
+EM_INSIDE_OBJECT_FOLDINGKNIFE(36,"折叠刀"),
+/**
+尖刀
+*/
+EM_INSIDE_OBJECT_SHARPKNIFE(37,"尖刀"),
+/**
+菜刀
+*/
+EM_INSIDE_OBJECT_KITCHENKNIFE(38,"菜刀"),
+/**
+美工刀
+*/
+EM_INSIDE_OBJECT_UTILITYKNIFE(39,"美工刀"),
+/**
+烟花
+*/
+EM_INSIDE_OBJECT_FIREWORKS(40,"烟花"),
+/**
+爆竹
+*/
+EM_INSIDE_OBJECT_FIRECRACKER(41,"爆竹");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_INSIDE_OBJECT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_INSIDE_OBJECT_TYPE enumType : EM_INSIDE_OBJECT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_INSIDE_OBJECT_TYPE enumType : EM_INSIDE_OBJECT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_INSIDE_OBJECT_TYPE getEnum(int value) {
+ for (EM_INSIDE_OBJECT_TYPE e : EM_INSIDE_OBJECT_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_INSIDE_OBJECT_TYPE.EM_INSIDE_OBJECT_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_INSTRUMENT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_INSTRUMENT_TYPE.java
new file mode 100644
index 0000000..44d60a9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_INSTRUMENT_TYPE.java
@@ -0,0 +1,98 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 仪表类型
+* @date 2022/06/28 19:24:08
+*/
+public enum EM_INSTRUMENT_TYPE {
+/**
+未知
+*/
+EM_INSTRUMENT_TYPE_UNKNOWN(0,"未知"),
+/**
+状态识别类型
+*/
+EM_INSTRUMENT_TYPE_STATE(1,"状态识别类型"),
+/**
+状态匹配类型
+*/
+EM_INSTRUMENT_TYPE_STATEMATCH(2,"状态匹配类型"),
+/**
+指针式表计类型
+*/
+EM_INSTRUMENT_TYPE_METER(3,"指针式表计类型"),
+/**
+数字识别类型
+*/
+EM_INSTRUMENT_TYPE_CHAR(4,"数字识别类型"),
+/**
+油表类型
+*/
+EM_INSTRUMENT_TYPE_OIL(5,"油表类型"),
+/**
+开关标识
+*/
+EM_INSTRUMENT_TYPE_SWIIDEN(6,"开关标识"),
+/**
+指示灯类型
+*/
+EM_INSTRUMENT_TYPE_LIGHT(7,"指示灯类型"),
+/**
+室内开关类型
+*/
+EM_INSTRUMENT_TYPE_SWITCH(8,"室内开关类型"),
+/**
+外观检测类型
+*/
+EM_INSTRUMENT_TYPE_APPEARANCE(9,"外观检测类型"),
+/**
+液位计
+*/
+EM_INSTRUMENT_TYPE_LEVELGAUGE(10,"液位计");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_INSTRUMENT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_INSTRUMENT_TYPE enumType : EM_INSTRUMENT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_INSTRUMENT_TYPE enumType : EM_INSTRUMENT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_INSTRUMENT_TYPE getEnum(int value) {
+ for (EM_INSTRUMENT_TYPE e : EM_INSTRUMENT_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_INSTRUMENT_TYPE.EM_INSTRUMENT_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_INSULATOR_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_INSULATOR_STATE.java
new file mode 100644
index 0000000..a42b838
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_INSULATOR_STATE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 绝缘子状态
+* @date 2022/06/28 19:44:56
+*/
+public enum EM_INSULATOR_STATE {
+/**
+未知
+*/
+EM_INSULATOR_STATE_UNKNOWN(0,"未知"),
+/**
+正常
+*/
+EM_INSULATOR_STATE_NORMAL(1,"正常"),
+/**
+破裂
+*/
+EM_INSULATOR_STATE_BROKEN(2,"破裂");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_INSULATOR_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_INSULATOR_STATE enumType : EM_INSULATOR_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_INSULATOR_STATE enumType : EM_INSULATOR_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_INSULATOR_STATE getEnum(int value) {
+ for (EM_INSULATOR_STATE e : EM_INSULATOR_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_INSULATOR_STATE.EM_INSULATOR_STATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_IPC_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_IPC_TYPE.java
new file mode 100644
index 0000000..e7effac
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_IPC_TYPE.java
@@ -0,0 +1,122 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * IPC类型
+ *
+ * @author : 47040
+ * @since : Created in 2020/12/23 9:46
+ */
+public enum EM_IPC_TYPE {
+
+ NET_IPC_PRIVATE(0, "私有"),
+ NET_IPC_AEBELL(1, "AEBELL"),
+ NET_IPC_PANASONIC(2, "PANASONIC"),
+ NET_IPC_SONY(3, "SONY"),
+ NET_IPC_DYNACOLOR(4, "Dynacolor"),
+ NET_IPC_TCWS(5, "TCWS"),
+ NET_IPC_SAMSUNG(6, "SAMSUNG"),
+ NET_IPC_YOKO(7, "YOKO"),
+ NET_IPC_AXIS(8, "AXIS"),
+ NET_IPC_SANYO(9, "SANYO"),
+ NET_IPC_BOSH(10, "Bosch"),
+ NET_IPC_PECLO(11, "Peclo"),
+ NET_IPC_PROVIDEO(12, "Provideo"),
+ NET_IPC_ACTI(13, "ACTi"),
+ NET_IPC_VIVOTEK(14, "Vivotek"),
+ NET_IPC_ARECONT(15, "Arecont"),
+ NET_IPC_PRIVATEEH(16, "PrivateEH"),
+ NET_IPC_IMATEK(17, "IMatek"),
+ NET_IPC_SHANY(18, "Shany"),
+ NET_IPC_VIDEOTREC(19, "VIDEOTREC"),
+ NET_IPC_URA(20, "Ura"),
+ NET_IPC_BITICINO(21, "Bticino"),
+ NET_IPC_ONVIF(22, "Onvif协议类型"),
+ NET_IPC_SHEPHERD(23, "SHEPHERD"),
+ NET_IPC_YAAN(24, "YAAN"),
+ NET_IPC_AIRPOINT(25, "Airpop"),
+ NET_IPC_TYCO(26, "TYCO"),
+ NET_IPC_XUNMEI(27, "XUNMEI"),
+ NET_IPC_HIKVISION(28, ""),
+ NET_IPC_LG(29, "LG"),
+ NET_IPC_AOQIMAN(30, "AOQIMAN"),
+ NET_IPC_BAOKANG(31, "BAOKANG"),
+ NET_IPC_WATCHNET(32, "Watchnet"),
+ NET_IPC_XVISION(33, "Xvision"),
+ NET_IPC_FUSITSU(34, "FUSITSU"),
+ NET_IPC_CANON(35, "Canon"),
+ NET_IPC_GE(36, "GE"),
+ NET_IPC_Basler(37, "Basler"),
+ NET_IPC_Patro(38, "Patro"),
+ NET_IPC_CPKNC(39, "CPPLUS K系列"),
+ NET_IPC_CPRNC(40, "CPPLUS R系列"),
+ NET_IPC_CPUNC(41, "CPPLUS U系列"),
+ NET_IPC_CPPLUS(42, "CPPLUS IPC"),
+ NET_IPC_XunmeiS(43, "XunmeiS,实际协议为Onvif"),
+ NET_IPC_GDDW(44, "GDDW"),
+ NET_IPC_PSIA(45, "PSIA"),
+ NET_IPC_GB2818(46, "GB2818"),
+ NET_IPC_GDYX(47, "GDYX"),
+ NET_IPC_OTHER(48, "由用户自定义"),
+ NET_IPC_CPUNR(49, "CPPLUS NVR"),
+ NET_IPC_CPUAR(50, "CPPLUS DVR"),
+ NET_IPC_AIRLIVE(51, "Airlive"),
+ NET_IPC_NPE(52, "NPE"),
+ NET_IPC_AXVIEW(53, "AXVIEW"),
+ NET_IPC_DFWL(54, "DFWL"),
+ NET_IPC_HYUNDAI(56, "HYUNDAI DVR"),
+ NET_IPC_APHD(57, "APHD"),
+ NET_IPC_WELLTRANS(58, "WELLTRANS"),
+ NET_IPC_CDJF(59, "CDJF"),
+ NET_IPC_JVC(60, "JVC"),
+ NET_IPC_INFINOVA(61, "INFINOVA"),
+ NET_IPC_ADT(62, "ADT"),
+ NET_IPC_SIVIDI(63, "SIVIDI"),
+ NET_IPC_CPUNP(64, "CPPLUS 球机"),
+ NET_IPC_HX(65, "HX"),
+ NET_IPC_TJGS(66, "TJGS"),
+ NET_IPC_MULTICAST(79, "组播"),
+ NET_IPC_RVI(84, "RVi"),
+ NET_IPC_HONEYWELL(95, "Honeywell");
+
+ private final int value;
+ private final String note;
+
+ private EM_IPC_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_IPC_TYPE enumType : EM_IPC_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_IPC_TYPE enumType : EM_IPC_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_IPC_TYPE getEnum(int value) {
+ for (EM_IPC_TYPE e : EM_IPC_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_IPC_TYPE.NET_IPC_PRIVATE;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_IS_CURRENT_VK.java b/src/main/java/com/netsdk/lib/enumeration/EM_IS_CURRENT_VK.java
new file mode 100644
index 0000000..2276528
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_IS_CURRENT_VK.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 是否当前vk
+ * @date 2022/11/03 09:43:17
+ */
+public enum EM_IS_CURRENT_VK {
+ /**
+ * 未知
+ */
+ EM_IS_CURRENT_VK_UNKNOWN(0, "未知"),
+ /**
+ * 当前
+ */
+ EM_IS_CURRENT_VK_CURRENT(1, "当前"),
+ /**
+ * 之前
+ */
+ EM_IS_CURRENT_VK_PRE(2, "之前");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_IS_CURRENT_VK(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_IS_CURRENT_VK enumType : EM_IS_CURRENT_VK.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_IS_CURRENT_VK enumType : EM_IS_CURRENT_VK.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_IS_ENCRYPT.java b/src/main/java/com/netsdk/lib/enumeration/EM_IS_ENCRYPT.java
new file mode 100644
index 0000000..d9279ba
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_IS_ENCRYPT.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 是否加密
+ * @date 2022/11/03 09:43:17
+ */
+public enum EM_IS_ENCRYPT {
+ /**
+ * 未知
+ */
+ EM_IS_ENCRYPT_UNKNOWN(0, "未知"),
+ /**
+ * 已加密
+ */
+ EM_IS_ENCRYPT_YES(1, "已加密"),
+ /**
+ * 未加密
+ */
+ EM_IS_ENCRYPT_NO(2, "未加密");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_IS_ENCRYPT(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_IS_ENCRYPT enumType : EM_IS_ENCRYPT.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_IS_ENCRYPT enumType : EM_IS_ENCRYPT.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_IS_ERRORDETECT.java b/src/main/java/com/netsdk/lib/enumeration/EM_IS_ERRORDETECT.java
new file mode 100644
index 0000000..679c7ad
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_IS_ERRORDETECT.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 是否虚检
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_IS_ERRORDETECT extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_IS_ERRORDETECT_UNKNOWN = -1;
+ /**
+ * 无
+ */
+ public static final int EM_IS_ERRORDETECT_NO = 0;
+ /**
+ * 有
+ */
+ public static final int EM_IS_ERRORDETECT_YES = 1;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_IS_RECORD.java b/src/main/java/com/netsdk/lib/enumeration/EM_IS_RECORD.java
new file mode 100644
index 0000000..7d0e30c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_IS_RECORD.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 录像使能
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/17 15:57
+ */
+public enum EM_IS_RECORD {
+ /**
+ * 未知
+ */
+ EM_IS_RECORD_UNKNOWN(0, "未知"),
+ /**
+ * 录像
+ */
+ EM_IS_RECORD_ON(1, "录像"),
+ /**
+ * 不录像
+ */
+ EM_IS_RECORD_OFF(2, "不录像");
+
+ private int value;
+ private String note;
+
+ EM_IS_RECORD(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_IS_RECORD enumType : EM_IS_RECORD.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_IS_RECORD enumType : EM_IS_RECORD.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_IS_RECORD getEnum(int value) {
+ for (EM_IS_RECORD e : EM_IS_RECORD.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_IS_RECORD.EM_IS_RECORD_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_LAMP_COLOR.java b/src/main/java/com/netsdk/lib/enumeration/EM_LAMP_COLOR.java
new file mode 100644
index 0000000..62ba7d7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_LAMP_COLOR.java
@@ -0,0 +1,53 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 灯组灯色
+ * @date 2021/09/01
+ */
+public enum EM_LAMP_COLOR {
+ // 未知
+ EM_LAMP_COLOR_UNKOWN(-1, "未知"),
+ // 无灯
+ EM_LAMP_COLOR_NO(0, "无灯"),
+ // 灭灯
+ EM_LAMP_COLOR_LIGHT_OFF(1, "灭灯"),
+ // 亮灯
+ EM_LAMP_COLOR_LIGHT_ON(2, "亮灯"),
+ // 闪烁
+ EM_LAMP_COLOR_LIGHT_FLASH(3, "闪烁");
+
+ private int value;
+ private String note;
+
+ private EM_LAMP_COLOR(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_LAMP_COLOR enumType : EM_LAMP_COLOR.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_LAMP_COLOR enumType : EM_LAMP_COLOR.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_LAMP_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_LAMP_TYPE.java
new file mode 100644
index 0000000..fd3aa21
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_LAMP_TYPE.java
@@ -0,0 +1,75 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 灯组类型
+ * @date 2021/09/01
+ */
+public enum EM_LAMP_TYPE {
+ // 未知
+ EM_LAMP_TYPE_UNKNOWN(0, "未知"),
+ // 直行方向指示信号灯
+ EM_LAMP_TYPE_STRAIGHT(1, "直行方向指示信号灯"),
+ // 左转方向指示信号灯
+ EM_LAMP_TYPE_LEFT(2, "左转方向指示信号灯"),
+ // 右转方向指示信号灯
+ EM_LAMP_TYPE_RIGHT(3, "右转方向指示信号灯"),
+ // 机动车信号灯
+ EM_LAMP_TYPE_MOTORVEHICLE(4, "机动车信号灯"),
+ // 左转非机动车信号灯
+ EM_LAMP_TYPE_LEFT_NOMOTOR(5, "左转非机动车信号灯"),
+ // 右转非机动车信号灯
+ EM_LAMP_TYPE_RIGHT_NOMOTOR(6, "右转非机动车信号灯"),
+ // 非机动车信号灯
+ EM_LAMP_TYPE_NOMOTOR(7, "非机动车信号灯"),
+ // 人行横道信号灯
+ EM_LAMP_TYPE_SIDEWALK(8, "人行横道信号灯"),
+ // 掉头信号灯
+ EM_LAMP_TYPE_TURNAROUND(9, "掉头信号灯"),
+ // 车道信号灯
+ EM_LAMP_TYPE_LANE(10, "车道信号灯"),
+ // 道口信号灯
+ EM_LAMP_TYPE_CROSSING(11, "道口信号灯"),
+ // 闪光警告信号灯
+ EM_LAMP_TYPE_FLASH_WARN(12, "闪光警告信号灯"),
+ // 有轨电车专用信号灯(直行)
+ EM_LAMP_TYPE_TRAM_DEDICATED_STRAIGHT(13, "有轨电车专用信号灯(直行)"),
+ // 有轨电车专用信号灯(左转)
+ EM_LAMP_TYPE_TRAM_DEDICATED_LEFT(14, "有轨电车专用信号灯(左转)"),
+ // 有轨电车专用信号灯(右转)
+ EM_LAMP_TYPE_TRAM_DEDICATED_RIGHT(15, "有轨电车专用信号灯(右转)");
+
+ private int value;
+ private String note;
+
+ private EM_LAMP_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_LAMP_TYPE enumType : EM_LAMP_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_LAMP_TYPE enumType : EM_LAMP_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_LANE_RUNING_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_LANE_RUNING_STATE.java
new file mode 100644
index 0000000..72bcda3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_LANE_RUNING_STATE.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 车道交通运行状态
+ * @date 2021/09/01
+ */
+public enum EM_LANE_RUNING_STATE {
+ // 未知
+ EM_LANE_RUNING_UNKNOWN(0, "未知"),
+ // 畅通
+ EM_LANE_RUNING_UNBLOCKED(1, "畅通"),
+ // 基本畅通
+ EM_LANE_RUNING_BASIC_UNBLOCKED(2, "基本畅通"),
+ // 轻度拥堵
+ EM_LANE_RUNING_LIGHT_CONGESTION(3, "轻度拥堵"),
+ // 中度拥堵
+ EM_LANE_RUNING_MIDDLE_CONGESTION(4, "中度拥堵"),
+ // 严重拥堵
+ EM_LANE_RUNING_SERIOUS_CONGESTION(5, "严重拥堵");
+
+ private int value;
+ private String note;
+
+ private EM_LANE_RUNING_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_LANE_RUNING_STATE enumType : EM_LANE_RUNING_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_LANE_RUNING_STATE enumType : EM_LANE_RUNING_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_LEAVEDETECTION_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_LEAVEDETECTION_STATE.java
new file mode 100644
index 0000000..528593b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_LEAVEDETECTION_STATE.java
@@ -0,0 +1,50 @@
+package com.netsdk.lib.enumeration;
+/**
+ * @author 251823
+ * @description 检测状态
+ * @date 2021/03/15
+ */
+public enum EM_LEAVEDETECTION_STATE {
+ // 未知
+ EM_LEAVEDETECTION_STATE_UNKNOWN(0, "未知"),
+ // 离岗
+ EM_LEAVEDETECTION_STATE_LEAVE(1, "离岗"),
+ // 在岗
+ EM_LEAVEDETECTION_STATE_ON_THE_JOB(2, "在岗");
+
+
+ private int value;
+ private String note;
+
+ private EM_LEAVEDETECTION_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_LEAVEDETECTION_STATE enumType : EM_LEAVEDETECTION_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_LEAVEDETECTION_STATE enumType : EM_LEAVEDETECTION_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_LEAVEDETECTION_TRIGGER_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_LEAVEDETECTION_TRIGGER_MODE.java
new file mode 100644
index 0000000..dc17086
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_LEAVEDETECTION_TRIGGER_MODE.java
@@ -0,0 +1,54 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 离岗的触发模式
+ * @date 2021/03/15
+ */
+public enum EM_LEAVEDETECTION_TRIGGER_MODE {
+ // 未知
+ EM_LEAVEDETECTION_TRIGGER_UNKNOEN(0, "未知"),
+ // 无人
+ EM_LEAVEDETECTION_TRIGGER_NOPERSON(1, "无人"),
+ // 离开
+ EM_LEAVEDETECTION_TRIGGER_LEAVE(2, "离开"),
+ // 静止(睡岗)
+ EM_LEAVEDETECTION_TRIGGER_STATIC(3, "静止(睡岗)"),
+ // 不在允许值岗人数范围内(值岗人数异常)
+ EM_LEAVEDETECTION_TRIGGER_OUTPERSONLIMIT(4, "不在允许值岗人数范围内(值岗人数异常)");
+
+ private int value;
+ private String note;
+
+ private EM_LEAVEDETECTION_TRIGGER_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_LEAVEDETECTION_TRIGGER_MODE enumType : EM_LEAVEDETECTION_TRIGGER_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_LEAVEDETECTION_TRIGGER_MODE enumType : EM_LEAVEDETECTION_TRIGGER_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_LED_BRIGHTNESS_LEVEL.java b/src/main/java/com/netsdk/lib/enumeration/EM_LED_BRIGHTNESS_LEVEL.java
new file mode 100644
index 0000000..50308a3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_LED_BRIGHTNESS_LEVEL.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description led灯亮度
+* @date 2022/08/31 14:44:16
+*/
+public enum EM_LED_BRIGHTNESS_LEVEL {
+/**
+未知
+*/
+EM_LED_BRIGHTNESS_UNKNOWN(-1,"未知"),
+/**
+关闭
+*/
+EM_LED_BRIGHTNESS_CLOSED(0,"关闭"),
+/**
+亮度最低
+*/
+EM_LED_BRIGHTNESS_LOW(1,"亮度最低"),
+/**
+亮度适中
+*/
+EM_LED_BRIGHTNESS_MEDIUM(2,"亮度适中"),
+/**
+亮度最高
+*/
+EM_LED_BRIGHTNESS_HIGH(3,"亮度最高");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_LED_BRIGHTNESS_LEVEL(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_LED_BRIGHTNESS_LEVEL enumType : EM_LED_BRIGHTNESS_LEVEL.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_LED_BRIGHTNESS_LEVEL enumType : EM_LED_BRIGHTNESS_LEVEL.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_LED_BRIGHTNESS_LEVEL getEnum(int value) {
+ for (EM_LED_BRIGHTNESS_LEVEL e : EM_LED_BRIGHTNESS_LEVEL.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_LED_BRIGHTNESS_LEVEL.EM_LED_BRIGHTNESS_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_LIFT_CALLER_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_LIFT_CALLER_TYPE.java
new file mode 100644
index 0000000..cd1e7e3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_LIFT_CALLER_TYPE.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 梯控方式触发者
+* @date 2022/10/19 14:01:07
+*/
+public enum EM_LIFT_CALLER_TYPE {
+/**
+未知
+*/
+EM_LIFT_CALLER_TYPE_UNKNOWN(0,"未知"),
+/**
+VTO 呼叫
+*/
+EM_LIFT_CALLER_TYPE_VTO(1,"VTO 呼叫"),
+/**
+平台呼叫
+*/
+EM_LIFT_CALLER_TYPE_PLATFORM(2,"平台呼叫"),
+/**
+本机鉴权呼叫
+*/
+EM_LIFT_CALLER_TYPE_LOCAL_AUTH(3,"本机鉴权呼叫"),
+/**
+门禁呼梯
+*/
+EM_LIFT_CALLER_TYPE_ACCESS_CONTROL(4,"门禁呼梯");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_LIFT_CALLER_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_LIFT_CALLER_TYPE enumType : EM_LIFT_CALLER_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_LIFT_CALLER_TYPE enumType : EM_LIFT_CALLER_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_LIFT_CALLER_TYPE getEnum(int value) {
+ for (EM_LIFT_CALLER_TYPE e : EM_LIFT_CALLER_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_LIFT_CALLER_TYPE.EM_LIFT_CALLER_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_LIGHTGROUP_FAULT_LEVEL.java b/src/main/java/com/netsdk/lib/enumeration/EM_LIGHTGROUP_FAULT_LEVEL.java
new file mode 100644
index 0000000..7f972c9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_LIGHTGROUP_FAULT_LEVEL.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 灯组故障等级
+ * @date 2021/09/28
+ */
+public enum EM_LIGHTGROUP_FAULT_LEVEL {
+ // 未知
+ EM_LIGHTGROUP_FAULT_UNKNOWN(0, "未知"),
+ // 忽略所有灯组故障
+ EM_LIGHTGROUP_FAULT_INGORE(1, "忽略所有灯组故障 "),
+ // 忽略车行灯黄灯、绿灯和人行灯故障
+ EM_LIGHTGROUP_FAULT_INGORE_YELLOWGREENPEDESTRIAN(2, "忽略车行灯黄灯、绿灯和人行灯故障 "),
+ // 忽略车行灯黄灯、红灯和人行灯故障
+ EM_LIGHTGROUP_FAULT_INGORE_YELLOWREDPEDESTRIAN(3, "忽略车行灯黄灯、红灯和人行灯故障"),
+ // 忽略车行灯黄灯和人行灯故障
+ EM_LIGHTGROUP_FAULT_INGORE_YELLOWPEDESTRIAN(4, "忽略车行灯黄灯和人行灯故障 "),
+ // 不忽略任何灯组故障
+ EM_LIGHTGROUP_FAULT_UNINGORE(5, "不忽略任何灯组故障");
+
+ private int value;
+ private String note;
+
+ private EM_LIGHTGROUP_FAULT_LEVEL(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_LIGHTGROUP_FAULT_LEVEL enumType : EM_LIGHTGROUP_FAULT_LEVEL.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_LIGHTGROUP_FAULT_LEVEL enumType : EM_LIGHTGROUP_FAULT_LEVEL.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_LINE_COLOR_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_LINE_COLOR_TYPE.java
new file mode 100644
index 0000000..8a1570a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_LINE_COLOR_TYPE.java
@@ -0,0 +1,44 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 轨迹线颜色类型
+ * @date 2020/8/24
+ */
+public enum EM_LINE_COLOR_TYPE {
+
+ EM_LINE_COLOR_TYPE_UNKNOWN(0, "未知"),
+ EM_LINE_COLOR_TYPE_RED(1, "红色"),
+ EM_LINE_COLOR_TYPE_YELLOW(2, "黄色"),
+ EM_LINE_COLOR_TYPE_BLUE(3, "蓝色"),
+ EM_LINE_COLOR_TYPE_GREEN(4, "绿色"),
+ EM_LINE_COLOR_TYPE_BLACK(5, "黑色"),
+ EM_LINE_COLOR_TYPE_WHITE(6, "白色");
+
+ private EM_LINE_COLOR_TYPE(int type, String color) {
+ this.type = type;
+ this.color = color;
+ }
+
+ private int type;
+ private String color;
+
+ public EM_LINE_COLOR_TYPE getColorType(int type) {
+ for (EM_LINE_COLOR_TYPE color : EM_LINE_COLOR_TYPE.values()
+ ) {
+ if (color.getType() == type) {
+ return color;
+ }
+ }
+ return null;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public String getColor() {
+ return color;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_MAIN_PAGE_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_MAIN_PAGE_STATE.java
new file mode 100644
index 0000000..d86792a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_MAIN_PAGE_STATE.java
@@ -0,0 +1,76 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 界面图片状态
+ *
+ * @author 47040
+ * @since Created in 2021/4/27 19:17
+ */
+public enum EM_MAIN_PAGE_STATE {
+ /**
+ * 未知
+ */
+ EM_MAIN_PAGE_STATE_UNKNOWN(0, "未知"),
+ /**
+ * 正常
+ */
+ EM_MAIN_PAGE_STATE_NORMAL(1, "正常"),
+ /**
+ * 待机
+ */
+ EM_MAIN_PAGE_STATE_STANDBY(2, "待机"),
+ /**
+ * 通道关闭
+ */
+ EM_MAIN_PAGE_STATE_CHANNELCLOSED(3, "通道关闭"),
+ /**
+ * 禁止通行
+ */
+ EM_MAIN_PAGE_STATE_FORBIDENTER(4, "禁止通行"),
+ /**
+ * 紧急疏散
+ */
+ EM_MAIN_PAGE_STATE_URGENTEVACUATE(5, "紧急疏散");
+
+ private final int value;
+ private final String note;
+
+ EM_MAIN_PAGE_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_MAIN_PAGE_STATE enumType : EM_MAIN_PAGE_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_MAIN_PAGE_STATE enumType : EM_MAIN_PAGE_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_MAIN_PAGE_STATE getEnum(int value) {
+ for (EM_MAIN_PAGE_STATE e : EM_MAIN_PAGE_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_MAIN_PAGE_STATE.EM_MAIN_PAGE_STATE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_MASK_DETECT_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_MASK_DETECT_MODE.java
new file mode 100644
index 0000000..3d2d989
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_MASK_DETECT_MODE.java
@@ -0,0 +1,33 @@
+package com.netsdk.lib.enumeration;
+
+
+
+/**
+ * 门禁测温口罩检测模式
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/09 17:05
+ */
+public enum EM_MASK_DETECT_MODE {
+
+ /**
+ * 未知
+ */
+ EM_MASK_DETECT_MODE_UNKNOWN,
+
+ /**
+ * 不检测口罩
+ */
+ EM_MASK_DETECT_MODE_NO_DETECTION,
+
+ /**
+ * 口罩提醒模式
+ */
+ EM_MASK_DETECT_MODE_REMIND,
+
+ /**
+ * 口罩拦截模式
+ */
+ EM_MASK_DETECT_MODE_INTERCEPT,
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_MASK_STATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_MASK_STATE_TYPE.java
new file mode 100644
index 0000000..af76090
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_MASK_STATE_TYPE.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 口罩状态
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_MASK_STATE_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_MASK_STATE_UNKNOWN = 0;
+ /**
+ * 未识别
+ */
+ public static final int EM_MASK_STATE_NODISTI = 1;
+ /**
+ * 没戴口罩
+ */
+ public static final int EM_MASK_STATE_NOMASK = 2;
+ /**
+ * 戴口罩
+ */
+ public static final int EM_MASK_STATE_WEAR = 3;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_MASK_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_MASK_TYPE.java
new file mode 100644
index 0000000..29063c1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_MASK_TYPE.java
@@ -0,0 +1,7 @@
+package com.netsdk.lib.enumeration;
+// 是否戴口罩
+public enum EM_MASK_TYPE {
+ EM_MASK_UNKNOWN, // 未知
+ EM_MASK_NO, // 无
+ EM_MASK_YES, // 戴
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_MIX_SNAP_SPEED_SOURCE.java b/src/main/java/com/netsdk/lib/enumeration/EM_MIX_SNAP_SPEED_SOURCE.java
new file mode 100644
index 0000000..7882d05
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_MIX_SNAP_SPEED_SOURCE.java
@@ -0,0 +1,25 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 视频抓拍速度来源
+ * @date 2021/2/22
+ */
+public enum EM_MIX_SNAP_SPEED_SOURCE {
+ /** 未知 */
+ EM_SNAP_SPEED_SOURCE_UNKNOWN,
+ /** 视频 */
+ EM_SNAP_SPEED_SOURCE_VIDEO,
+ /** 雷达 */
+ EM_SNAP_SPEED_SOURCE_RADAR;
+
+ public static EM_MIX_SNAP_SPEED_SOURCE getMixSnapSpeedSource(int source) {
+ for (EM_MIX_SNAP_SPEED_SOURCE speedSource : EM_MIX_SNAP_SPEED_SOURCE.values()) {
+ if (speedSource.ordinal() == source) {
+ return speedSource;
+ }
+ }
+ return EM_SNAP_SPEED_SOURCE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_MOBILE_ENFORCE_FILE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_MOBILE_ENFORCE_FILE_TYPE.java
new file mode 100644
index 0000000..9cbfe8d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_MOBILE_ENFORCE_FILE_TYPE.java
@@ -0,0 +1,60 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 文件后缀类型
+ *
+ * @author 47040
+ * @since Created at 2021/5/31 14:34
+ */
+public enum EM_MOBILE_ENFORCE_FILE_TYPE {
+
+ EM_MOBILE_ENFORCE_FILE_TYPE_UNKNOWN(0, "未知"),
+ EM_MOBILE_ENFORCE_FILE_TYPE_DAV(1, "dav"),
+ EM_MOBILE_ENFORCE_FILE_TYPE_MP4(2, "mp4"),
+ EM_MOBILE_ENFORCE_FILE_TYPE_AAC(3, "aac"),
+ EM_MOBILE_ENFORCE_FILE_TYPE_MP3(4, "mp3"),
+ EM_MOBILE_ENFORCE_FILE_TYPE_JPG(5, "jpg");
+
+ private final int value;
+ private final String note;
+
+ EM_MOBILE_ENFORCE_FILE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_MOBILE_ENFORCE_FILE_TYPE enumType : EM_MOBILE_ENFORCE_FILE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_MOBILE_ENFORCE_FILE_TYPE enumType : EM_MOBILE_ENFORCE_FILE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_MOBILE_ENFORCE_FILE_TYPE getEnum(int value) {
+ for (EM_MOBILE_ENFORCE_FILE_TYPE e : EM_MOBILE_ENFORCE_FILE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_MOBILE_ENFORCE_FILE_TYPE.EM_MOBILE_ENFORCE_FILE_TYPE_UNKNOWN;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_MOBILE_ENFORCE_FORMAT.java b/src/main/java/com/netsdk/lib/enumeration/EM_MOBILE_ENFORCE_FORMAT.java
new file mode 100644
index 0000000..c3cbfbf
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_MOBILE_ENFORCE_FORMAT.java
@@ -0,0 +1,58 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 文件的真实类型
+ *
+ * @author 47040
+ * @since Created at 2021/5/31 12:11
+ */
+public enum EM_MOBILE_ENFORCE_FORMAT {
+
+ EM_MOBILE_ENFORCE_FORMAT_UNKNOWN(0, "未知"),
+ EM_MOBILE_ENFORCE_FORMAT_VIDEO(1, "视频"),
+ EM_MOBILE_ENFORCE_FORMAT_AUDIO(2, "音频"),
+ EM_MOBILE_ENFORCE_FORMAT_IMAGE(3, "图片");
+
+ private final int value;
+ private final String note;
+
+ EM_MOBILE_ENFORCE_FORMAT(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_MOBILE_ENFORCE_FORMAT enumType : EM_MOBILE_ENFORCE_FORMAT.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_MOBILE_ENFORCE_FORMAT enumType : EM_MOBILE_ENFORCE_FORMAT.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_MOBILE_ENFORCE_FORMAT getEnum(int value) {
+ for (EM_MOBILE_ENFORCE_FORMAT e : EM_MOBILE_ENFORCE_FORMAT.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_MOBILE_ENFORCE_FORMAT.EM_MOBILE_ENFORCE_FORMAT_UNKNOWN;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_MOBILE_ENFORCE_UPLOAD_FLAG.java b/src/main/java/com/netsdk/lib/enumeration/EM_MOBILE_ENFORCE_UPLOAD_FLAG.java
new file mode 100644
index 0000000..19c60a8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_MOBILE_ENFORCE_UPLOAD_FLAG.java
@@ -0,0 +1,57 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 文件上传标志
+ *
+ * @author 47040
+ * @since Created at 2021/5/31 10:16
+ */
+public enum EM_MOBILE_ENFORCE_UPLOAD_FLAG {
+
+ EM_MOBILE_ENFORCE_UPLOAD_FLAG_UNKNWON(-1, "未知"),
+ EM_MOBILE_ENFORCE_UPLOAD_FLAG_NOTUPLOAD(0, "未上传"),
+ EM_MOBILE_ENFORCE_UPLOAD_FLAG_UPLOADED(1, "已上传"),
+ EM_MOBILE_ENFORCE_UPLOAD_FLAG_BACKEDUP(3, "已备份");
+
+ private final int value;
+ private final String note;
+
+ EM_MOBILE_ENFORCE_UPLOAD_FLAG(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_MOBILE_ENFORCE_UPLOAD_FLAG enumType : EM_MOBILE_ENFORCE_UPLOAD_FLAG.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_MOBILE_ENFORCE_UPLOAD_FLAG enumType : EM_MOBILE_ENFORCE_UPLOAD_FLAG.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_MOBILE_ENFORCE_UPLOAD_FLAG getEnum(int value) {
+ for (EM_MOBILE_ENFORCE_UPLOAD_FLAG e : EM_MOBILE_ENFORCE_UPLOAD_FLAG.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_MOBILE_ENFORCE_UPLOAD_FLAG.EM_MOBILE_ENFORCE_UPLOAD_FLAG_UNKNWON;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_MOSAIC_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_MOSAIC_TYPE.java
new file mode 100644
index 0000000..c045f2c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_MOSAIC_TYPE.java
@@ -0,0 +1,77 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 马赛克类型
+ * @date 2022/07/21 15:29:16
+ */
+public enum EM_MOSAIC_TYPE {
+ /**
+ * 无效的马赛克类型
+ */
+ EM_MOSAIC_TYPE_INVALID(0, "无效的马赛克类型"),
+ /**
+ * 不打马赛克
+ */
+ EM_MOSAIC_TYPE_NO(1, "不打马赛克"),
+ /**
+ * [8x8大小] 马赛克
+ */
+ EM_MOSAIC_TYPE_8(2, "[8x8大小] 马赛克"),
+ /**
+ * [16x16大小] 马赛克
+ */
+ EM_MOSAIC_TYPE_16(3, "[16x16大小] 马赛克"),
+ /**
+ * [24x24大小] 马赛克
+ */
+ EM_MOSAIC_TYPE_24(4, "[24x24大小] 马赛克"),
+ /**
+ * [32x32大小] 马赛克
+ */
+ EM_MOSAIC_TYPE_32(5, "[32x32大小] 马赛克");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_MOSAIC_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_MOSAIC_TYPE enumType : EM_MOSAIC_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_MOSAIC_TYPE enumType : EM_MOSAIC_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_MOSAIC_TYPE getEnum(int value) {
+ for (EM_MOSAIC_TYPE e : EM_MOSAIC_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_MOSAIC_TYPE.EM_MOSAIC_TYPE_INVALID;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_MOUTH_STATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_MOUTH_STATE_TYPE.java
new file mode 100644
index 0000000..0cf6edc
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_MOUTH_STATE_TYPE.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 嘴巴状态
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_MOUTH_STATE_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_MOUTH_STATE_UNKNOWN = 0;
+ /**
+ * 未识别
+ */
+ public static final int EM_MOUTH_STATE_NODISTI = 1;
+ /**
+ * 闭嘴
+ */
+ public static final int EM_MOUTH_STATE_CLOSE = 2;
+ /**
+ * 张嘴
+ */
+ public static final int EM_MOUTH_STATE_OPEN = 3;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_MSGROUP_OPERATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_MSGROUP_OPERATE_TYPE.java
new file mode 100644
index 0000000..b60a6be
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_MSGROUP_OPERATE_TYPE.java
@@ -0,0 +1,71 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 主动跟踪主操作命令, 接口 CLIENT_OperateMasterSlaveGroup
+ * @date 2022/09/14 13:50:01
+ */
+public enum EM_MSGROUP_OPERATE_TYPE {
+ /**
+ * 打开主从跟踪组, 对应 NET_IN_MSGROUP_OPEN_INFO 和 NET_OUT_MSGROUP_OPEN_INFO
+ */
+ EM_MSGROUP_OPERATE_OPEN(0, "打开主从跟踪组, 对应 NET_IN_MSGROUP_OPEN_INFO 和 NET_OUT_MSGROUP_OPEN_INFO"),
+ /**
+ * 联动主从跟踪组, 对应 NET_IN_MSGROUP_LOCATE_INFO 和 NET_OUT_MSGROUP_LOCATE_INTO
+ */
+ EM_MSGROUP_OPERATE_LOCATE(1, "联动主从跟踪组, 对应 NET_IN_MSGROUP_LOCATE_INFO 和 NET_OUT_MSGROUP_LOCATE_INTO"),
+ /**
+ * 手动选定目标跟踪, 对应 NET_IN_MSGROUP_TRACK_INFO 和 NET_OUT_MSGROUP_TRACK_INFO
+ */
+ EM_MSGROUP_OPERATE_TRACK(2, "手动选定目标跟踪, 对应 NET_IN_MSGROUP_TRACK_INFO 和 NET_OUT_MSGROUP_TRACK_INFO"),
+ /**
+ * 关闭主从式跟踪器实例, 对应 NET_IN_MSGROUP_CLOSE_INFO 和 NET_OUT_MSGROUP_CLOSE_INFO
+ */
+ EM_MSGROUP_OPERATE_CLOSE(3, "关闭主从式跟踪器实例, 对应 NET_IN_MSGROUP_CLOSE_INFO 和 NET_OUT_MSGROUP_CLOSE_INFO"),
+ /**
+ * 从主设备选择矩形框联动从设备, 对应 NET_IN_MSGROUP_RECTLOCATE_INFO 和NET_OUT_MSGROUP_RECTLOCATE_INFO
+ */
+ EM_MSGROUP_OPERATE_RECTLOCATE(4,
+ "从主设备选择矩形框联动从设备, 对应 NET_IN_MSGROUP_RECTLOCATE_INFO 和 NET_OUT_MSGROUP_RECTLOCATE_INFO"),
+ /**
+ * 将从机固定位置下的视频坐标转换为主机的视频坐标, 对应 对应 NET_IN_MSGROUP_SLAVE_POSITION_TO_MASTER_INFO 和
+ * NET_OUT_MSGROUP_SLAVE_POSITION_TO_MASTER_INFO
+ */
+ EM_MSGROUP_OPERATE_SLAVE_POSITION_TO_MASTER(5,
+ "将从机固定位置下的视频坐标转换为主机的视频坐标, 对应 对应 NET_IN_MSGROUP_SLAVE_POSITION_TO_MASTER_INFO 和 NET_OUT_MSGROUP_SLAVE_POSITION_TO_MASTER_INFO");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_MSGROUP_OPERATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_MSGROUP_OPERATE_TYPE enumType : EM_MSGROUP_OPERATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_MSGROUP_OPERATE_TYPE enumType : EM_MSGROUP_OPERATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_MSG_OBJ_PERSON_DIRECTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_MSG_OBJ_PERSON_DIRECTION.java
new file mode 100644
index 0000000..580a9ec
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_MSG_OBJ_PERSON_DIRECTION.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 入侵方向
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_MSG_OBJ_PERSON_DIRECTION extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知方向
+ */
+ public static final int EM_MSG_OBJ_PERSON_DIRECTION_UNKOWN = 0;
+ /**
+ * 从左向右
+ */
+ public static final int EM_MSG_OBJ_PERSON_DIRECTION_LEFT_TO_RIGHT = 1;
+ /**
+ * 从右向左
+ */
+ public static final int EM_MSG_OBJ_PERSON_DIRECTION_RIGHT_TO_LEFT = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_NAS_STATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_NAS_STATE_TYPE.java
new file mode 100644
index 0000000..69ebc62
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_NAS_STATE_TYPE.java
@@ -0,0 +1,78 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 滤光片类型
+* @date 2022/09/22 17:28:03
+*/
+public enum EM_NAS_STATE_TYPE {
+/**
+未知
+*/
+EM_NAS_STATE_TYPE_UNKNOWN(0,"未知"),
+/**
+正常
+*/
+EM_NAS_STATE_TYPE_ACTIVE(1,"正常"),
+/**
+LV异常
+*/
+EM_NAS_STATE_TYPE_LVFAILED(2,"LV异常"),
+/**
+非活跃
+*/
+EM_NAS_STATE_TYPE_INACTIVE(3,"非活跃"),
+/**
+LV所属的VG异常
+*/
+EM_NAS_STATE_TYPE_VGFAILED(4,"LV所属的VG异常"),
+/**
+服务未开启
+*/
+EM_NAS_STATE_TYPE_NOTSTARTED(5,"服务未开启");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_NAS_STATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_NAS_STATE_TYPE enumType : EM_NAS_STATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_NAS_STATE_TYPE enumType : EM_NAS_STATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_NAS_STATE_TYPE getEnum(int value) {
+ for (EM_NAS_STATE_TYPE e : EM_NAS_STATE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_NAS_STATE_TYPE.EM_NAS_STATE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_NEEDED_PIC_RETURN_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_NEEDED_PIC_RETURN_TYPE.java
new file mode 100644
index 0000000..072619f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_NEEDED_PIC_RETURN_TYPE.java
@@ -0,0 +1,41 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 查询结果返回图片的格式
+ * @date 2021/4/26
+ */
+public enum EM_NEEDED_PIC_RETURN_TYPE {
+ /** 未知类型 */
+ EM_NEEDED_PIC_TYPE_UNKOWN(0, "未知类型"),
+ /** 返回图片HTTP链接 */
+ EM_NEEDED_PIC_TYPE_HTTP_URL(1, "返回图片HTTP链接"),
+ /** 返回图片二进制数据 */
+ EM_NEEDED_PIC_TYPE_BINARY_DATA(2, "返回图片二进制数据"),
+ /** 返回二进制和HTTP链接 */
+ EM_NEEDED_PIC_TYPE_HTTP_AND_BINARY(3, "返回二进制和HTTP链接");
+ private int type;
+ private String desc;
+
+ EM_NEEDED_PIC_RETURN_TYPE(int type, String desc) {
+ this.type = type;
+ this.desc = desc;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_NET_CONSUMPTION_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_NET_CONSUMPTION_MODE.java
new file mode 100644
index 0000000..73b2f9a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_NET_CONSUMPTION_MODE.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 消费模式
+* @date 2022/03/07 10:54:03
+*/
+public enum EM_NET_CONSUMPTION_MODE {
+/**
+未知
+*/
+EM_NET_CONSUMPTION_MODE_UNKNOWN(-1,"未知"),
+/**
+定额消费
+*/
+EM_NET_CONSUMPTION_MODE_QUOTA(0,"定额消费"),
+/**
+非定额消费
+*/
+EM_NET_CONSUMPTION_MODE_NONQUOTA(1,"非定额消费"),
+/**
+充值
+*/
+EM_NET_CONSUMPTION_MODE_DEPOSIT(2,"充值");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_NET_CONSUMPTION_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_NET_CONSUMPTION_MODE enumType : EM_NET_CONSUMPTION_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_NET_CONSUMPTION_MODE enumType : EM_NET_CONSUMPTION_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_NET_CONSUMPTION_MODE getEnum(int value) {
+ for (EM_NET_CONSUMPTION_MODE e : EM_NET_CONSUMPTION_MODE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_NET_CONSUMPTION_MODE.EM_NET_CONSUMPTION_MODE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_NET_PLATE_COLOR_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_NET_PLATE_COLOR_TYPE.java
new file mode 100644
index 0000000..b750cb7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_NET_PLATE_COLOR_TYPE.java
@@ -0,0 +1,94 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 车牌颜色
+* @date 2022/05/30 14:16:15
+*/
+public enum EM_NET_PLATE_COLOR_TYPE {
+/**
+其他颜色
+*/
+NET_PLATE_COLOR_OTHER(0,"其他颜色"),
+/**
+蓝色 Blue
+*/
+NET_PLATE_COLOR_BLUE(1,"蓝色 Blue "),
+/**
+黄色 Yellow
+*/
+NET_PLATE_COLOR_YELLOW(2,"黄色 Yellow "),
+/**
+白色 White
+*/
+NET_PLATE_COLOR_WHITE(3,"白色 White "),
+/**
+黑色 Black
+*/
+NET_PLATE_COLOR_BLACK(4,"黑色 Black "),
+/**
+黄底黑字 YellowbottomBlackText
+*/
+NET_PLATE_COLOR_YELLOW_BOTTOM_BLACK_TEXT(5,"黄底黑字 YellowbottomBlackText "),
+/**
+蓝底白字 BluebottomWhiteText
+*/
+NET_PLATE_COLOR_BLUE_BOTTOM_WHITE_TEXT(6,"蓝底白字 BluebottomWhiteText "),
+/**
+黑底白字 BlackBottomWhiteText
+*/
+NET_PLATE_COLOR_BLACK_BOTTOM_WHITE_TEXT(7,"黑底白字 BlackBottomWhiteText "),
+/**
+渐变绿 ShadowGreen
+*/
+NET_PLATE_COLOR_SHADOW_GREEN(8,"渐变绿 ShadowGreen "),
+/**
+黄绿双拼 YellowGreen
+*/
+NET_PLATE_COLOR_YELLOW_GREEN(9,"黄绿双拼 YellowGreen ");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_NET_PLATE_COLOR_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_NET_PLATE_COLOR_TYPE enumType : EM_NET_PLATE_COLOR_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_NET_PLATE_COLOR_TYPE enumType : EM_NET_PLATE_COLOR_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_NET_PLATE_COLOR_TYPE getEnum(int value) {
+ for (EM_NET_PLATE_COLOR_TYPE e : EM_NET_PLATE_COLOR_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_NET_PLATE_COLOR_TYPE.NET_PLATE_COLOR_OTHER;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_NET_PLATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_NET_PLATE_TYPE.java
new file mode 100644
index 0000000..5db8ec7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_NET_PLATE_TYPE.java
@@ -0,0 +1,161 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 291189
+ * @description 车牌类型
+ * @date 2022/05/30 14:16:15
+ */
+public enum EM_NET_PLATE_TYPE {
+ /**
+
+ */
+ NET_PLATE_TYPE_UNKNOWN(0, ""),
+ /**
+ * Normal 蓝牌黑牌
+ */
+ NET_PLATE_TYPE_NORMAL(1, " Normal 蓝牌黑牌"),
+ /**
+ * Yellow 黄牌
+ */
+ NET_PLATE_TYPE_YELLOW(2, " Yellow 黄牌"),
+ /**
+ * DoubleYellow 双层黄尾牌
+ */
+ NET_PLATE_TYPE_DOUBLEYELLOW(3, " DoubleYellow 双层黄尾牌"),
+ /**
+ * Police 警牌
+ */
+ NET_PLATE_TYPE_POLICE(4, " Police 警牌"),
+ /**
+
+ */
+ NET_PLATE_TYPE_WJ(5, ""),
+ /**
+
+ */
+ NET_PLATE_TYPE_OUTERGUARD(6, ""),
+ /**
+
+ */
+ NET_PLATE_TYPE_DOUBLEOUTERGUARD(7, ""),
+ /**
+ * SAR 港澳特区号牌
+ */
+ NET_PLATE_TYPE_SAR(8, " SAR 港澳特区号牌"),
+ /**
+ * Trainning 教练车号牌
+ */
+ NET_PLATE_TYPE_TRAINNING(9, " Trainning 教练车号牌"),
+ /**
+ * Personal 个性号牌
+ */
+ NET_PLATE_TYPE_PERSONAL(10, " Personal 个性号牌"),
+ /**
+ * Agri 农用牌
+ */
+ NET_PLATE_TYPE_AGRI(11, " Agri 农用牌"),
+ /**
+ * Embassy 使馆号牌
+ */
+ NET_PLATE_TYPE_EMBASSY(12, " Embassy 使馆号牌"),
+ /**
+ * Moto 摩托车号牌
+ */
+ NET_PLATE_TYPE_MOTO(13, " Moto 摩托车号牌"),
+ /**
+ * Tractor 拖拉机号牌
+ */
+ NET_PLATE_TYPE_TRACTOR(14, " Tractor 拖拉机号牌"),
+ /**
+ * OfficialCar 公务车
+ */
+ NET_PLATE_TYPE_OFFICIALCAR(15, " OfficialCar 公务车"),
+ /**
+ * PersonalCar 私家车
+ */
+ NET_PLATE_TYPE_PERSONALCAR(16, " PersonalCar 私家车"),
+ /**
+
+ */
+ NET_PLATE_TYPE_WARCAR(17, ""),
+ /**
+ * Other 其他号牌
+ */
+ NET_PLATE_TYPE_OTHER(18, " Other 其他号牌"),
+ /**
+ * Civilaviation 民航号牌
+ */
+ NET_PLATE_TYPE_CIVILAVIATION(19, " Civilaviation 民航号牌"),
+ /**
+ * Black 黑牌
+ */
+ NET_PLATE_TYPE_BLACK(20, " Black 黑牌"),
+ /**
+ * PureNewEnergyMicroCar 纯电动新能源小车
+ */
+ NET_PLATE_TYPE_PURENEWENERGYMICROCAR(21, " PureNewEnergyMicroCar 纯电动新能源小车"),
+ /**
+ * MixedNewEnergyMicroCar 混合新能源小车
+ */
+ NET_PLATE_TYPE_MIXEDNEWENERGYMICROCAR(22, " MixedNewEnergyMicroCar 混合新能源小车"),
+ /**
+ * PureNewEnergyLargeCar 纯电动新能源大车
+ */
+ NET_PLATE_TYPE_PURENEWENERGYLARGECAR(23, " PureNewEnergyLargeCar 纯电动新能源大车"),
+ /**
+ * MixedNewEnergyLargeCar 混合新能源大车
+ */
+ NET_PLATE_TYPE_MIXEDNEWENERGYLARGECAR(24, " MixedNewEnergyLargeCar 混合新能源大车"),
+ /**
+ * Hongkong 香港号牌
+ */
+ NET_PLATE_TYPE_HONGKONG(25, " Hongkong 香港号牌"),
+ /**
+ * Makao 澳门号牌
+ */
+ NET_PLATE_TYPE_MAKAO(26, " Makao 澳门号牌");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_NET_PLATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_NET_PLATE_TYPE enumType : EM_NET_PLATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_NET_PLATE_TYPE enumType : EM_NET_PLATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_NET_PLATE_TYPE getEnum(int value) {
+ for (EM_NET_PLATE_TYPE e : EM_NET_PLATE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_NET_PLATE_TYPE.NET_PLATE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_NET_TRAFFIC_CAR_CONTROL_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_NET_TRAFFIC_CAR_CONTROL_TYPE.java
new file mode 100644
index 0000000..31766bd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_NET_TRAFFIC_CAR_CONTROL_TYPE.java
@@ -0,0 +1,58 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 布控类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_NET_TRAFFIC_CAR_CONTROL_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 其他
+ */
+ public static final int NET_CAR_CONTROL_OTHER = 0;
+ /**
+ * 过期未检 "OverdueNoCheck"
+ */
+ public static final int NET_CAR_CONTROL_OVERDUE_NO_CHECK = 1;
+ /**
+ * "BrigandageCar"
+ */
+ public static final int NET_CAR_CONTROL_BRIGANDAGE_CAR = 2;
+ /**
+ * 违章 "Breaking"
+ */
+ public static final int NET_CAR_CONTROL_BREAKING = 3;
+ /**
+ * "CausetroubleEscape"
+ */
+ public static final int NET_CAR_CONTROL_CAUSETROUBLE_ESCAPE = 4;
+ /**
+ * 停车欠费 "OverdueParking"
+ */
+ public static final int NET_CAR_CONTROL_CAUSETROUBLE_OVERDUEPARKING = 5;
+ /**
+ * 假牌车 "CounterfeitPlateCar"
+ */
+ public static final int NET_CAR_CONTROL_COUNTERFEI_PLATE_CAR = 6;
+ /**
+ * 套牌车 "FakePlateCar"
+ */
+ public static final int NET_CAR_CONTROL_FAKE_PLATE_CAR = 7;
+ /**
+ * 重点车辆 "FocalCar"
+ */
+ public static final int NET_CAR_CONTROL_FOCAL_CAR = 8;
+ /**
+ * 保障车辆 "GuaranteeCar"
+ */
+ public static final int NET_CAR_CONTROL_GUARANTEE_CAR = 9;
+ /**
+ * 关注车辆 "FollowCar"
+ */
+ public static final int NET_CAR_CONTROL_FOLLOW_CAR = 10;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_NET_VIFORMAT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_NET_VIFORMAT_TYPE.java
new file mode 100644
index 0000000..1c3486f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_NET_VIFORMAT_TYPE.java
@@ -0,0 +1,69 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 采集源分辨率
+ * @date 2022/07/22 13:41:06
+ */
+public enum EM_NET_VIFORMAT_TYPE {
+ /**
+ * 未知
+ */
+ EM_NET_VIFORMAT_TYPE_UNKNOWN(-1, "未知"),
+ /**
+ * 表示正常分辨率
+ */
+ EM_NET_VIFORMAT_TYPE_NORMAL(0, "表示正常分辨率"),
+ /**
+ * 表示不支持的分辨率
+ */
+ EM_NET_VIFORMAT_TYPE_UNSUPPORT(1, "表示不支持的分辨率"),
+ /**
+ * 表示未接采集源
+ */
+ EM_NET_VIFORMAT_TYPE_NOT_CONNECTED(2, "表示未接采集源");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_NET_VIFORMAT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_NET_VIFORMAT_TYPE enumType : EM_NET_VIFORMAT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_NET_VIFORMAT_TYPE enumType : EM_NET_VIFORMAT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+ public static EM_NET_VIFORMAT_TYPE getEnum(int value) {
+ for (EM_NET_VIFORMAT_TYPE e : EM_NET_VIFORMAT_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_NET_VIFORMAT_TYPE.EM_NET_VIFORMAT_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_NET_WIEGAND_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_NET_WIEGAND_MODE.java
new file mode 100644
index 0000000..8f9f9dc
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_NET_WIEGAND_MODE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 工作模式
+* @date 2022/03/08 09:56:02
+*/
+public enum EM_NET_WIEGAND_MODE {
+/**
+未知
+*/
+EM_NET_WIEGAND_TRANSFER_MODE_UNKNOWN(-1,"未知"),
+/**
+韦根输入
+*/
+EM_NET_WIEGAND_TRANSFER_MODE_INPUT(0,"韦根输入"),
+/**
+韦根输出
+*/
+EM_NET_WIEGAND_TRANSFER_MODE_OUTPUT(1,"韦根输出");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_NET_WIEGAND_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_NET_WIEGAND_MODE enumType : EM_NET_WIEGAND_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_NET_WIEGAND_MODE enumType : EM_NET_WIEGAND_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_NET_WIEGAND_MODE getEnum(int value) {
+ for (EM_NET_WIEGAND_MODE e : EM_NET_WIEGAND_MODE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_NET_WIEGAND_MODE.EM_NET_WIEGAND_TRANSFER_MODE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_NET_WIEGAND_OUT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_NET_WIEGAND_OUT_TYPE.java
new file mode 100644
index 0000000..cfb9d00
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_NET_WIEGAND_OUT_TYPE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 输出类型
+* @date 2022/03/08 09:56:03
+*/
+public enum EM_NET_WIEGAND_OUT_TYPE {
+/**
+未知
+*/
+EM_NET_WIEGAND_OUT_TYPE_UNKNOWN(-1,"未知"),
+/**
+输出ID
+*/
+EM_NET_WIEGAND_OUT_TYPE_ID(0,"输出ID"),
+/**
+输出卡号
+*/
+EM_NET_WIEGAND_OUT_TYPE_CARD_NO(1,"输出卡号");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_NET_WIEGAND_OUT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_NET_WIEGAND_OUT_TYPE enumType : EM_NET_WIEGAND_OUT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_NET_WIEGAND_OUT_TYPE enumType : EM_NET_WIEGAND_OUT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_NET_WIEGAND_OUT_TYPE getEnum(int value) {
+ for (EM_NET_WIEGAND_OUT_TYPE e : EM_NET_WIEGAND_OUT_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_NET_WIEGAND_OUT_TYPE.EM_NET_WIEGAND_OUT_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_NET_WIEGAND_TRANSFER_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_NET_WIEGAND_TRANSFER_MODE.java
new file mode 100644
index 0000000..489580a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_NET_WIEGAND_TRANSFER_MODE.java
@@ -0,0 +1,78 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 传输模式
+* @date 2022/03/08 09:56:03
+*/
+public enum EM_NET_WIEGAND_TRANSFER_MODE {
+/**
+未知
+*/
+EM_NET_WIEGAND_MODE_UNKNOWN(-1,"未知"),
+/**
+韦根34bit传输,4字节卡号,2Bit校验;
+*/
+EM_NET_WIEGAND_MODE_BIT_34(0,"韦根34bit传输,4字节卡号,2Bit校验;"),
+/**
+韦根66bit传输,8字节卡号,2Bit校验;
+*/
+EM_NET_WIEGAND_MODE_BIT_66(1,"韦根66bit传输,8字节卡号,2Bit校验;"),
+/**
+韦根26bit传输,3字节卡号,2Bit校验;
+*/
+EM_NET_WIEGAND_MODE_BIT_26(2,"韦根26bit传输,3字节卡号,2Bit校验;"),
+/**
+韦根32bit传输,4字节卡号,无校验位
+*/
+EM_NET_WIEGAND_MODE_BIT_32(3,"韦根32bit传输,4字节卡号,无校验位"),
+/**
+韦根42bit传输,5字节卡号,2Bit校验
+*/
+EM_NET_WIEGAND_MODE_BIT_42(4,"韦根42bit传输,5字节卡号,2Bit校验");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_NET_WIEGAND_TRANSFER_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_NET_WIEGAND_TRANSFER_MODE enumType : EM_NET_WIEGAND_TRANSFER_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_NET_WIEGAND_TRANSFER_MODE enumType : EM_NET_WIEGAND_TRANSFER_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_NET_WIEGAND_TRANSFER_MODE getEnum(int value) {
+ for (EM_NET_WIEGAND_TRANSFER_MODE e : EM_NET_WIEGAND_TRANSFER_MODE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_NET_WIEGAND_TRANSFER_MODE.EM_NET_WIEGAND_MODE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_NEW_CONFIG.java b/src/main/java/com/netsdk/lib/enumeration/EM_NEW_CONFIG.java
new file mode 100644
index 0000000..57221cd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_NEW_CONFIG.java
@@ -0,0 +1,406 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.structure.CFG_MOTION_INFO;
+import com.sun.jna.ptr.IntByReference;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 配置命令 对应接口{@link NetSDKLib#CLIENT_GetNewDevConfig(NetSDKLib.LLong, String, int,
+ * byte[], int, IntByReference, int)} {@link NetSDKLib#CLIENT_SetNewDevConfig(NetSDKLib.LLong,
+ * String, int, byte[], int, IntByReference, IntByReference, int)}
+ * @date 2020/11/9
+ */
+public enum EM_NEW_CONFIG {
+ /** 动态检测报警配置(对应 {@link CFG_MOTION_INFO}) */
+ CFG_CMD_MOTIONDETECT("MotionDetect"),
+ /** 视频编码物件配置(对应 {@link NetSDKLib.NET_CFG_VideoWidget} ) */
+ CFG_CMD_VIDEOWIDGET("VideoWidget"),
+ /** 视频分析全局配置(对应{@link NetSDKLib.CFG_ANALYSEGLOBAL_INFO}) */
+ CFG_CMD_ANALYSEGLOBAL("VideoAnalyseGlobal"),
+ /** 物体的检测模块配置(对应 {@link NetSDKLib.CFG_ANALYSEMODULES_INFO}) */
+ CFG_CMD_ANALYSEMODULE("VideoAnalyseModule"),
+ /** 视频分析规则配置(对应 {@link NetSDKLib.CFG_ANALYSERULES_INFO}) */
+ CFG_CMD_ANALYSERULE("VideoAnalyseRule"),
+ /** 视频输入前端选项(对应{@link NetSDKLib.CFG_VIDEO_IN_OPTIONS}) */
+ CFG_CMD_VIDEOINOPTIONS("VideoInOptions"),
+ /** 雨刷模式相关配置(对应{@link NetSDKLib.CFG_RAINBRUSHMODE_INFO}数组) */
+ CFG_CMD_RAINBRUSHMODE("RainBrushMode"),
+ /** 雨刷配置(对应{@link NetSDKLib.CFG_RAINBRUSH_INFO}) */
+ CFG_CMD_RAINBRUSH("RainBrush"),
+ /** 图像通道属性配置(对应{@link NetSDKLib.CFG_ENCODE_INFO}) */
+ CFG_CMD_ENCODE("Encode"),
+ /** 云台通道变倍配置(对应{@link NetSDKLib.CFG_VIDEO_IN_ZOOM}) */
+ CFG_CMD_VIDEO_IN_ZOOM("VideoInZoom"),
+ /** 远程设备信息(对应 {@link NetSDKLib.AV_CFG_RemoteDevice} 数组), 通道无关) */
+ CFG_CMD_REMOTEDEVICE("RemoteDevice"),
+ /** 视频分析资源配置(对应 {@link NetSDKLib.CFG_ANALYSESOURCE_INFO}) */
+ CFG_CMD_ANALYSESOURCE("VideoAnalyseSource"),
+ /** 智能交通全局配置({@link NetSDKLib.CFG_TRAFFICGLOBAL_INFO}) */
+ CFG_CMD_TRAFFICGLOBAL("TrafficGlobal"),
+ /** 录像模式(对应 {@link NetSDKLib.AV_CFG_RecordMode} ) */
+ CFG_CMD_RECORDMODE("RecordMode"),
+ /** 警灯配置(对应 {@link NetSDKLib.CFG_ALARMLAMP_INFO}) */
+ CFG_CMD_ALARMLAMP("AlarmLamp"),
+ /** 报警输出通道配置(对应 {@link NetSDKLib.CFG_ALARMOUT_INFO} ) */
+ CFG_CMD_ALARMOUT("AlarmOut"),
+ /** 智能交通抓拍(对应 {@link NetSDKLib.CFG_TRAFFICSNAPSHOT_INFO} ) */
+ CFG_CMD_INTELLECTIVETRAFFIC("TrafficSnapshot"),
+ /** 智能交通抓拍( {@link NetSDKLib.CFG_TRAFFICSNAPSHOT_NEW_INFO} ) */
+ CFG_CMD_TRAFFICSNAPSHOT_MULTI("TrafficSnapshotNew"),
+ /** 时间同步服务器(对应 {@link NetSDKLib.CFG_NTP_INFO} ) */
+ CFG_CMD_NTP("NTP"),
+ /** 外部输入报警配置(对应 CFG_ALARMIN_INFO) */
+ CFG_CMD_ALARMINPUT("Alarm"),
+ /** 网络协议配置(对应 {@link NetSDKLib.CFG_DVRIP_INFO}) */
+ CFG_CMD_DVRIP("DVRIP"),
+ /** 网络配置(对应 {@link NetSDKLib.CFG_NETWORK_INFO}) */
+ CFG_CMD_NETWORK("Network"),
+ /** 电视墙配置(对应 {@link NetSDKLib.AV_CFG_MonitorWall} 数组), 通道无关) */
+ CFG_CMD_MONITORWALL("MonitorWall"),
+ /** RTMP配置(对应 {@link NetSDKLib.CFG_RTMP_INFO}) */
+ CFG_CMD_RTMP("RTMP"),
+ /** 门禁事件配置(对应 {@link NetSDKLib.CFG_ACCESS_EVENT_INFO} 数组) */
+ CFG_CMD_ACCESS_EVENT("AccessControl"),
+ /** 门禁刷卡时间段(对应 {@link NetSDKLib.CFG_ACCESS_TIMESCHEDULE_INFO}) */
+ CFG_CMD_ACCESSTIMESCHEDULE("AccessTimeSchedule"),
+ /** 普通配置 (对应 {@link NetSDKLib.CFG_DEV_DISPOSITION_INFO}) */
+ CFG_CMD_DEV_GENERRAL("General"),
+ /** 视频诊断参数表({@link NetSDKLib.CFG_VIDEODIAGNOSIS_PROFILE}) */
+ CFG_CMD_VIDEODIAGNOSIS_PROFILE("VideoDiagnosisProfile"),
+ /** 视频诊断任务表({@link NetSDKLib.CFG_VIDEODIAGNOSIS_TASK}) */
+ CFG_CMD_VIDEODIAGNOSIS_TASK("VideoDiagnosisTask"),
+ /** 视频诊断任务表({@link NetSDKLib.CFG_VIDEODIAGNOSIS_TASK}) */
+ CFG_CMD_VIDEODIAGNOSIS_TASK_ONE("VideoDiagnosisTask.x"),
+ /** 视频诊断计划表({@link NetSDKLib.CFG_VIDEODIAGNOSIS_PROJECT}) */
+ CFG_CMD_VIDEODIAGNOSIS_PROJECT("VideoDiagnosisProject"),
+ /** 热成像摄像头属性配置({@link NetSDKLib.CFG_THERMOGRAPHY_INFO}) */
+ CFG_CMD_THERMO_GRAPHY("ThermographyOptions"),
+ /** 热成像测温规则配置(对应 {@link NetSDKLib.CFG_RADIOMETRY_RULE_INFO}) */
+ CFG_CMD_THERMOMETRY_RULE("ThermometryRule"),
+ /** 温度统计配置({@link NetSDKLib.CFG_TEMP_STATISTICS_INFO}) */
+ CFG_CMD_TEMP_STATISTICS("TemperatureStatistics"),
+ /** 热成像测温全局配置({@link NetSDKLib.CFG_THERMOMETRY_INFO}) */
+ CFG_CMD_THERMOMETRY("HeatImagingThermometry"),
+ /** 通道录像组状态(对应 {@link NetSDKLib.CFG_DEVRECORDGROUP_INFO}) */
+ CFG_CMD_DEVRECORDGROUP("DevRecordGroup"),
+ /** 存储组信息(对应 {@link NetSDKLib.AV_CFG_StorageGroup}数组), 通道无关) */
+ CFG_CMD_STORAGEGROUP("StorageGroup"),
+ /** 云台巡航路径配置(对应 {@link NetSDKLib.CFG_PTZTOUR_INFO}) */
+ CFG_CMD_PTZTOUR("PtzTour"),
+ /** 云台预置点配置(对应结构 {@link NetSDKLib.PTZ_PRESET_INFO}) */
+ CFG_CMD_PTZ_PRESET("PtzPreset"),
+ /** 输入通道配置(对应 {@link NetSDKLib.CFG_VIDEO_IN_INFO}) */
+ CFG_CMD_VIDEOIN("VideoIn"),
+ /** 通道名称(对应 {@link NetSDKLib.AV_CFG_ChannelName}) */
+ CFG_CMD_CHANNELTITLE("ChannelTitle"),
+ /** 设备通过Wifi模块扫描周围无线设备配置({@link NetSDKLib.CFG_WIFI_SEARCH_INFO}) */
+ CFG_CMD_WIFI_SEARCH("AroudWifiSearch"),
+ /** 定时录像配置(对应 {@link NetSDKLib.CFG_RECORD_INFO}) */
+ CFG_CMD_RECORD("Record"),
+ /** 检测采集设备配置({@link NetSDKLib.CFG_SCADA_DEV_INFO}) */
+ CFG_CMD_SCADA_DEV("SCADADev"),
+ /** 告警屏蔽规则( CFG_ALARM_SHIELD_RULE_INFO) */
+ CFG_CMD_ALARM_SHIELD_RULE("AlarmShieldRule"),
+ /** 刻录配置(对应 CFG_JUDICATURE_INFO) */
+ CFG_CMD_JUDICATURE("Judicature"),
+ /** 云台配置(对应 CFG_PTZ_INFO) */
+ CFG_CMD_PTZ("Ptz"),
+ /** 云台定时动作配置(对应 CFG_PTZ_AUTOMOVE_INFO)*/
+ CFG_CMD_PTZ_AUTO_MOVEMENT("PtzAutoMovement"),
+ /** 多人多开门方式组合配置(CFG_OPEN_DOOR_GROUP_INFO) */
+ CFG_CMD_OPEN_DOOR_GROUP("OpenDoorGroup"),
+ /** 车位指示灯本机配置(对应 CFG_PARKING_SPACE_LIGHT_GROUP_INFO_ALL) */
+ CFG_CMD_PARKING_SPACE_LIGHT_GROUP("ParkingSpaceLightGroup"),
+ /** 灯光设备配置 (对应结构体 CFG_LIGHT_INFO) */
+ CFG_CMD_LIGHT("Light"),
+ /** 灯光设置(CFG_LIGHTING_INFO) */
+ CFG_CMD_LIGHTING("Lighting"),
+ /** 合成通道配置(对应 {@link NetSDKLib.CFG_COMPOSE_CHANNEL}) */
+ CFG_CMD_COMPOSE_CHANNEL("ComposeChannel"),
+ /** 审讯画中画(对应 CFG_PICINPIC_INFO)改为数组方式,兼容以前单个配置,根据长度区分 */
+ CFG_CMD_PICINPIC("PicInPic"),
+ /** 空闲动作配置(CFG_IDLE_MOTION_INFO) */
+ CFG_CMD_IDLEMOTION_INFO("IdleMotion"),
+ /** 语音激励(对应 {@link com.netsdk.lib.structure.CFG_AUDIO_SPIRIT}) */
+ CFG_CMD_AUDIO_SPIRIT("AudioSpirit"),
+ /** 设备安装位置的GPS坐标信息(对应 {@link com.netsdk.lib.structure.CFG_DEVLOCATION_INFO}) */
+ CFG_CMD_DEVLOCATION("DevLocation"),
+ /** 设备参数标定配置(对应 {@link com.netsdk.lib.structure.CFG_LOCATION_CALIBRATE_INFO}) */
+ CFG_CMD_LOCATION_CALIBRATE("LocationCalibrate"),
+ /** 门禁基本配置(对应 {@link com.netsdk.lib.structure.CFG_ACCESS_GENERAL_INFO}) */
+ CFG_CMD_ACCESS_GENERAL("AccessControlGeneral"),
+ /** 无线网络连接设置(对应 CFG_WIRELESS_INFO) */
+ CFG_CMD_WIRELESS("Wireless"),
+ /** 报警服务器配置(对应 CFG_ALARMCENTER_INFO) */
+ CFG_CMD_ALARMSERVER("AlarmServer"),
+ /** 报警全局配置(对应 CFG_COMMGLOBAL_INFO) */
+ CFG_CMD_COMMGLOBAL("CommGlobal"),
+ /** 模拟量报警通道配置(对应 CFG_ANALOGALARM_INFO) */
+ CFG_CMD_ANALOGALARM("AnalogAlarm"),
+ /** 警号配置(对应 CFG_ALARMBELL_INFO) */
+ CFG_CMD_ALARMBELL("AlarmBell"),
+ /** 移动相关业务配置(对应 CFG_MOBILE_INFO) */
+ CFG_CMD_MOBILE("Mobile"),
+ /** // (对应 CFG_PHONEEVENTNOTIFY_INFO) */
+ CFG_CMD_PHONEEVENTNOTIFY("PhoneEventNotify"),
+ /** // 电话报警中心配置(CFG_PSTN_ALARM_CENTER_INFO) */
+ CFG_CMD_PSTN_ALARM_SERVER("PSTNAlarmServer"),
+ /** // 音频输出音量(CFG_AUDIO_OUTPUT_VOLUME) */
+ CFG_CMD_AUDIO_OUTPUT_VOLUME("AudioOutputVolume"),
+ /** // 音频输入音量(CFG_AUDIO_INPUT_VOLUME) */
+ CFG_CMD_AUDIO_INPUT_VOLUME("AudioInputVolume"),
+ /** // 指示灯控制配置 (CFG_LIGHT_GLOBAL) */
+ CFG_CMD_LIGHT_GLOBAL("LightGlobal"),
+ /** // 混合音频音量,用于庭审主机(CFG_AUDIO_MIX_VOLUME) */
+ CFG_CMD_AUDIO_MIX_VOLUME("AudioMixVolume"),
+ /** // 报警键盘配置(CFG_ALARMKEYBOARD_INFO) */
+ CFG_CMD_ALARMKEYBOARD("AlarmKeyboard"),
+ /** // 电源故障配置(CFG_POWERFAULT_INFO) */
+ CFG_CMD_POWERFAULT("PowerFault"),
+ /** // 机箱入侵报警(防拆报警)配置(CFG_CHASSISINTRUSION_INFO) */
+ CFG_CMD_CHASSISINTRUSION("ChassisIntrusion"),
+ /** // 扩展报警盒配置 (CFG_EXALARMBOX_INFO) */
+ CFG_CMD_EXALARMBOX("ExAlarmBox"),
+ /** // 扩展报警输出配置(CFG_EXALARMOUTPUT_INFO) */
+ CFG_CMD_EXALARMOUTPUT("ExAlarmOut"),
+ /** // 扩展报警输入配置(CFG_EXALARMINPUT_INFO) */
+ CFG_CMD_EXALARMINPUT("ExAlarm"),
+ /** // 紧急事件配置(CFG_URGENCY_INFO) */
+ CFG_CMD_URGENCY("Emergency"),
+ /** // 传感器采样(CFG_SENSORSAMPLING_INFO) */
+ CFG_CMD_SENSORSAMPLING("SensorSampling"),
+ CFG_CMD_STP("STP"), // 环网配置(CFG_STP_INFO)
+ /** // 报警子系统配置(CFG_ALARM_SUBSYSTEM_INFO) */
+ CFG_CMD_ALARM_SUBSYSTEM("AlarmSubSystem"),
+ /** // 电池电量低配置(CFG_BATTERY_LOW_POWER_INFO) */
+ CFG_CMD_BATTERY_LOW_POWER("BatteryLowPowerAlarm"),
+ /** // 抓图通道联动外设配置(CFG_SNAPLINKAGE_INFO) */
+ CFG_CMD_SNAPLIKAGE("SnapLinkage"),
+ /** // 音频输入配置(CFG_AUDIO_INPUT) */
+ CFG_CMD_AUDIOINPUT("AudioInput"),
+ CFG_CMD_EMAIL("Email"), // 邮件发送配置(CFG_EMAIL_INFO)
+ CFG_CMD_TRAFFIC_TRANSFER_OFFLINE(
+ "TrafficTransferOffline"), // 传输离线文件配置(TRAFFIC_TRANSFER_OFFLINE_INFO)
+ CFG_CMD_COMMSUBSCRIBE("CommSubscribe"), // 订阅串口数据配置(CFG_DEVCOMM_SUBSCRIBE)
+ CFG_CMD_PARKINGSPACE_LIGHT_STATE(
+ "ParkingSpaceLightState"), // 车位状态对应的车位指示灯(CFG_PARKINGSPACE_LIGHT_STATE)
+ CFG_CMD_AIRCONDITION("AirCondition"), // 空调设备配置(CFG_AIRCONDITION_INFO)
+ CFG_CMD_COMPRESS_PLAY("CompressPlay"), // 压缩回放配置(CFG_COMPRESS_PLAY_INFO)
+ CFG_CMD_BUILDING("Building"), // VTO楼层配置(CFG_BUILDING_INFO)
+ CFG_CMD_BUILDING_EXTERNAL("BuildingExternal"), // VTO楼层扩展配置(CFG_BUILDING_EXTERNAL_INFO)
+ CFG_CMD_DIALRULE("DialRule"), // 拨号规则(CFG_DIALRULE_INFO)
+ CFG_CMD_OIL_MASS_INFO("OilMassInfo"), // 车辆油箱配置(CFG_OIL_MASS_INFO)
+ CFG_CMD_FISHEYE_INFO("FishEye"), // 鱼眼详细信息配置(CFG_FISHEYE_DETAIL_INFO)
+ CFG_CMD_VTNOANSWER_FORWARD("VTNoAnswerForward"), // 平台下发呼叫无应答转移配置列表
+ // (CFG_VT_NOANSWER_FORWARD_INFO)
+ CFG_CMD_VTO_CALL("VTOCall"), // VTO呼叫配置(CFG_VTO_CALL_INFO)
+ CFG_CMD_MACCONFLICT("MacConflict"), // MAC冲突报警配置(CFG_MACCONFLICT_INFO)
+ CFG_CMD_MONITORWALL_COLL_TOUR("MonitorWallCollectionTour"), // 电视墙预案轮巡配置
+ // (CFG_MONITORWALL_COLLECTION_TOUR_INFO)
+ CFG_CMD_PSTN_BREAK_LINE("PSTNBreakLine"), // PSTN断线事件配置(CFG_PSTN_BREAK_LINE_INFO)
+ CFG_CMD_NET_COLLECTION("NetCollection"), // 网络采集设备配置(CFG_NET_COLLECTION_INFO)
+ CFG_CMD_ALARM_SLOT_BOND("AlarmSlotBond"), // 虚拟Slot节点与具体物理设备的对应关系
+ // (CFG_ALARM_SLOT_BOND_INFO)
+ CFG_CMD_TRAFFICSTROBE("TrafficStrobe"), // 道闸配置(CFG_TRAFFICSTROBE_INFO)
+ CFG_CMD_TRAFFICVOICE("TrafficVoiceBroadcast"), // 智能交通语音播报配置( CFG_TRAFFICVOICE_BROADCAST)
+ CFG_CMD_STANDING_TIME("StandingTime"), // 停车时间配置(CFG_STANDING_TIME_INFO)
+ CFG_CMD_ENCLOSURE_TIME_SCHEDULE("EnclosureTimeSchedule"), // 电子围栏报警时间段配置
+ // (CFG_ENCLOSURE_TIME_SCHEDULE_INFO)
+ CFG_CMD_ECKCONFIG("ECKConfig"), // 停车场出入口控制器配置(CFG_ECKCONFIG_INFO)
+ CFG_CMD_PARKING_CARD("ParkingCard"), // 停车场出入口刷卡报警事件配置(CFG_PARKING_CARD_INFO)
+ CFG_CMD_RCEMERGENCY_CALL("RCEmergencyCall"), // 紧急呼叫报警事件配置(CFG_RCEMERGENCY_CALL_INFO)
+ CFG_CMD_LANES_STATE_REPORT("LanesStateReport"), // 车道信息上报配置(CFG_LANES_STATE_REPORT)
+ CFG_CMD_OPEN_DOOR_ROUTE("OpenDoorRoute"), // 开门路线集合,或称防反潜路线配置(CFG_OPEN_DOOR_ROUTE_INFO)
+ CFG_CMD_BURNPLAN("BurnPlan"), // 刻录计划配置(对应 CFG_BURNPLAN_INFO)
+ CFG_CMD_VSP_GAYS("VSP_GAYS"), // 公安一所平台接入配置(CFG_VSP_GAYS_INFO)
+ CFG_CMD_AUDIODETECT("AudioDetect"), // 音频检测报警配置(CFG_AUDIO_DETECT_INFO数组)
+ CFG_CMD_GUIDESCREEN("GuideScreen"), // 诱导屏系统配置(CFG_GUIDESCREEN_INFO)
+ CFG_CMD_VTS_CALL_INFO("VTSCallInfo"), // VTS呼叫配置(CFG_VTS_CALL_INFO)
+ CFG_CMD_DEV_LIST("DevList"), // 设备列表配置(CFG_DEV_LIST_INFO)
+ CFG_CMD_CALIBRATE_MATRIX("CalibrateMatrix"), // 主从式跟踪器标定矩阵配置(CFG_CALIBRATE_MATRIX_INFO,
+ // 新配置对应CFG_CALIBRATE_MATRIX_EX_INFO)
+ CFG_CMD_DEFENCE_AREA_DELAY("DefenceAreaDelay"), // 防区延时配置(CFG_DEFENCE_AREA_DELAY_INFO)
+ CFG_CMD_FLAT_FIELD_CORRECTION(
+ "FlatFieldCorrection"), // 热成像平场聚焦校准配置(CFG_FLAT_FIELD_CORRECTION_INFO)
+ CFG_CMD_THERMO_FUSION("ThermographyFusion"), // 热成像视频融合配置(CFG_THERMO_FUSION_INFO)
+ CFG_CMD_LCE_STATE("LCEState"), // 热成像自研机芯中摄像头属性的局部对比度增强配置(CFG_LCE_STATE_INFO)
+ CFG_CMD_LIGHTINGSCHEDULE("LightingSchedule"), // 灯光计划配置(对应 CFG_LIGHTINGSCHEDULE_INFO)
+ CFG_CMD_EMERGENCY_RECORD_FOR_PULL("EmergencyRecordForPull"), //
+ // 紧急录像存储配置,用于客户端主动拉的方式。在客户端拉流存储异常之后,进行紧急录像存储(CFG_EMERGENCY_RECORD_FOR_PULL_INFO)
+ CFG_CMD_VIDEOIN_ANALYSERULE("VideoInAnalyseRule"), // 视频通道智能规则配置(CFG_VIDEOIN_ANALYSE_RULE_INFO)
+ CFG_CMD_ACCESS_WORK_MODE("AccessWorkMode"), // 门锁工作模式(对应 CFG_ACCESS_WORK_MODE_INFO 数组)
+ CFG_CMD_VIDEO_TALK_PHONE_GENERAL(
+ "VideoTalkPhoneGeneral"), // 视频对讲电话通用配置(CFG_VIDEO_TALK_PHONE_GENERAL)
+ CFG_CMD_TRAFFIC_SNAP_MOSAIC("TrafficSnapMosaic"), // 抓图合成配置(对应 CFG_TRAFFIC_SNAP_MOSAIC_INFO)
+ CFG_CMD_SCENE_SNAP_RULE("SceneSnapShotWithRule"), // 场景抓拍设置(对应 CFG_SCENE_SNAPSHOT_RULE_INFO)
+ CFG_CMD_VTO_INFO("VTOInfo"), // 门口机配置(对应 CFG_VTO_LIST)
+ CFG_CMD_TS_POINT("TSPoint"), // 触摸屏校准配置(对应 CFG_TSPOINT_INFO)
+ CFG_CMD_VTH_NUMBER_INFO("VTHNumberInfo"), // 室内机号码信息(对应 CFG_VTH_NUMBER_INFO)
+ CFG_CMD_GPS("GPS"), // GPS配置(对应 CFG_GPS_INFO_ALL)
+ CFG_CMD_VTO_BASIC_INFO("VTOBasicInfo"), // VTO基本信息 (对应 CFG_VTO_BASIC_INFO)
+ CFG_CMD_SHORTCUT_CALL("ShortcutCall"), // 快捷号配置 (对应 CFG_SHORTCUT_CALL_INFO)
+ CFG_CMD_GPS_LOCATION_VER("GPSLocationVersion"), // 记录集GPSLocation的版本号(对应 CFG_LOCATION_VER_INFO)
+ CFG_CMD_PARKING_SPACE_ACCESS_FILTER("ParkingSpaceAccessFilter"), // 设备可访问地址过滤配置(对应
+ // CFG_PARKING_SPACE_ACCESS_FILTER_INFO)
+ CFG_CMD_WORK_TIME("WorkTime"), // 工作时间配置(对应 CFG_WORK_TIME_INFO)
+ // CFG_PARKING_SPACE_LIGHT_GROUP_INFO_ALL)
+ CFG_CMD_CUSTOM_AUDIO("CustomAudio"), // 自定义音频配置(CFG_CUSTOM_AUDIO)
+ // CFG_WIFI_SEARCH_INFO)
+ CFG_CMD_G3G4AUTOCHANGE("G3G4AutoChange"), // 车载设备通信模块3G 4G自动切换(CFG_G3G4AUTOCHANGE)
+ CFG_CMD_CHECKCODE("CheckCode"), // 刷卡机校验码校验配置(对应 CFG_CHECKCODE_INFO)
+ CFG_CMD_VSP_SCYDKD("VSP_SCYDKD"), // 四川移动看店启迪平台接入配置(对应 CFG_VSP_SCYDKD_INFO)
+ CFG_CMD_VIDEOIN_DAYNIGHT("VideoInDayNight"), // 球机机芯日夜配置(对应 CFG_VIDEOIN_DAYNIGHT_INFO)
+ CFG_CMD_PTZ_POWERUP("PowerUp"), // 云台开机动作设置(对应 CFG_PTZ_POWERUP_INFO)
+ CFG_CMD_AUDIO_MIX_CHANNEL("AudioMixChannel"), // 配置定义每个纯音频通道的组成(对应
+ // CFG_AUDIO_MIX_CHANNEL_INFO_ALL)
+ CFG_CMD_AUDIO_TOUCH("AudioTouch"), // 变音,对音调进行变化(对应 CFG_AUDIO_TOUCH_INFO_ALL)
+ CFG_CMD_VIDEO_MOSAIC("VideoMosaic"), // 马赛克叠加配置(对应CFG_VIDEO_MOSAIC_INFO)
+ CFG_CMD_VTH_REMOTE_IPC_INFO("VTHRemoteIPCInfo"), // VTH中远程IPC配置(对应 CFG_VTH_REMOTE_IPC_INFO)
+ // ,该配置是全局的,不区分通道
+ CFG_CMD_UNFOCUSDETECT("UnFocusDetect"), // 虚焦检测配置(对应CFG_UNFOCUSDETECT_INFO)
+ CFG_CMD_MOVE_DETECT("MovedDetect"), // 场景变更检测配置(对应CFG_MOVE_DETECT_INFO)
+ CFG_CMD_FLOODLIGHT("Floodlight"), // 防护舱照明灯控制配置(对应
+ // CFG_FLOODLIGHT_CONTROLMODE_INFO)
+ CFG_CMD_AIRFAN("AirFan"), // 防护舱风扇控制配置(对应 CFG_AIRFAN_CONTROLMODE_INFO)
+ CFG_CMD_WLAN("WLan"), // WLAN配置(对应 CFG_NETAPP_WLAN)
+ CFG_CMD_SMART_ENCODE("SmartEncode"), // Smart H264编码方式(对应 CFG_SMART_ENCODE_INFO)
+ CFG_CMD_VEHICLE_HIGH_SPEED("HighSpeed"), // 车载高速报警配置(对应 CFG_VEHICLE_HIGHSPEED_INFO )
+ CFG_CMD_VEHICLE_LOW_SPEED("LowSpeed"), // 车载低速报警配置(对应 CFG_VEHICLE_LOWSPEED_INFO )
+ CFG_CMD_PSTN_PERSON_SERVER("PSTNPersonServer"), // 个人电话接机配置(对应
+ // CFG_PSTN_PERSON_SERVER_INFO_ALL )
+ CFG_CMD_ARM_LINK("ArmLink"), // 布撤防联动配置(对应 CFG_ARMLINK_INFO )
+ CFG_CMD_CABINLED_TIME_SCHEDULE(
+ "CabinLedTimeSchedule"), // 防护舱Led显示计划配置(对应 CFG_CABINLED_TIME_SCHEDULE)
+ CFG_CMD_PSTN_TESTPLAN("PSTNTestPlan"), // PSTN 测试计划配置(对应 CFG_PSTN_TESTPLAN_INFO)
+ CFG_CMD_DEFENCE_ARMMODE("DefenceArmMode"), // 单防区布撤防使能配置(对应 CFG_DEFENCE_ARMMODE_INFO)
+ CFG_CMD_SENSORMODE("SensorMode"), // 探测器安装工作模式配置(对应 CFG_SENSORMODE_INFO)
+ CFG_CMD_RADAR_SPEED_MEASURE("RadarSpeedMeasure"), // 雷达测速配置 智能楼宇专用(对应
+ // CFG_RADAR_SPEED_MEASURE_INFO)
+ CFG_CMD_VIDEOINDEFOG("VideoInDefog"), // 透雾设置配置(对应结构体 CFG_VIDEOINDEFOG_LIST)
+ CFG_CMD_AUDIO_OUT_EQUALIZER("AudioOutEqualizer"), // 音频输出均衡器配置(对应结构体CFG_AUDIO_OUTEQUALIZER_INFO)
+ CFG_CMD_AUDIO_OUT_SUPPRESSION("AudioOutSuppression"), // 音频抑制设置(对应结构体CFG_AUDIO_SUPPRESSION_INFO)
+ CFG_CMD_AUDIO_IN_CONTROL("AudioInControl"), // 音频输入控制(对应结构体CFG_AUDIO_INCONTROL_INFO)
+ CFG_CMD_LASER_DIST_MEASURE("LaserDistMeasure"), // 激光测距器配置(对应结构体 CFG_LASER_DIST_MEASURE_INFO)
+ CFG_CMD_OIL_4G_OVERFLOW("Oil4GFlow"), // 福山油田4G流量阈值及模式配置(对应结构体
+ // CFG_OIL_4G_OVERFLOW_INFO)
+ CFG_CMD_OIL_VIDEOWIDGET_4G_FLOW("VideoWidget4GFlow"), // 福山油田4G流量OSD叠加配置(对应结构体
+ // CFG_OIL_VIDEOWIDGET_4G_FLOW_INFO)
+ CFG_CMD_ATMOSPHERE_OSD("AtmosphereOSD"), // 气象信息叠加配置(对应结构体 CFG_CMD_ATMOSPHERE_OSD_INFO)
+ CFG_CMD_PARK_SPACE_OUT_LIGHT("ParkSpaceOutLight"), // 外接指示灯配置(对应结构体 CFG_PARK_SPACE_OUT_LIGHT_INFO)
+ CFD_CMD_VTO_CALL_INFO_EXTEND("VTOCallInfo"), // VTO呼叫配置扩展(对应结构体CFG_VTO_CALL_INFO_EXTEND)
+ CFG_CMD_ACCESS_TEXTDISPLAY("AccessControlTextDisplay"), // 门禁文字提示显示配置(对应结构体
+ // CFG_ACCESS_TEXTDISPLAY_INFO)
+ CFG_CMD_NETNVR_ENCRYPT("NvrEncrypt"), // 视频加密项目配置信息,涉及IPC和NVR(
+ // CFG_NETNVR_ENCRYPT_INFO )
+ CFG_CMD_CURTAIN("Curtain"), // 窗帘配置(对应结构体 CFG_CURTAIN_INFO)
+ CFG_CMD_FRESH_AIR("FreshAir"), // 新风配置(对应结构体 CFG_FRESH_AIR_INFO)
+ CFG_CMD_GROUND_HEAT("GroundHeat"), // 地暖配置(对应结构体 CFG_GROUND_HEAT_INFO)
+ CFG_CMD_SCENE_MODE("SceneMode"), // 情景模式(对应结构体 CFG_SCENE_MODE_INFO)
+ CFG_CMD_AIO_APP_CONFIG("AIOAppConfig"), // AIOAppConfig参数设置(对应结构体
+ // CFG_AIO_APP_CONFIG_INFO)
+ CFG_CMD_HTTPS("Https"), // Https服务配置(对应结构体 CFG_HTTPS_INFO)
+ CFG_CMD_NETAUTOADAPTORENCODE("NetAutoAdaptEncode"), // 网络自适应编码配置(对应结构体 CFG_NET_AUTO_ADAPT_ENCODE)
+ CFG_CMD_USERLOCKALARM("UserLockAlarm"), // 登陆锁定配置(对应结构体 CFG_USERLOCKALARM_INFO)
+ CFG_CMD_STROBOSCOPIC_LAMP("StroboscopicLamp"), // 频闪灯配置(对应结构体 CFG_STROBOSCOPIC_LAMP_INFO)
+ CFG_CMD_FREECOMBINATION("FreeCombination"), // 自由分割模式的窗口配置 CFG_FREECOMBINATION_INFO )
+ CFG_CMD_IOT_INFRARED_DETECT("IOT_InfraredDetect"), // 物联网红外检测配置(对应结构体CFG_IOT_INFRARED_DETECT_INFO)
+ CFG_CMD_IOT_RECORD_HANDLE("IOT_RecordHandle"), // 物联网录像联动配置(对应结构体CFG_IOT_RECORD_HANDLE_INFO)
+ CFG_CMD_IOT_SNAP_HANDLE("IOT_SnapHandle"), // 物联网抓图联动配置(对应结构体CFG_IOT_SNAP_HANDLE_INFO)
+ CFG_CMD_PLATFORM_MONITOR_IPC("PlatformMonitorIPC"), // 平台侧预览IPC配置 CFG_PLATFORMMONITORIPC_INFO )
+ CFG_CMD_CALLFORWARD("CallForward"), // 呼叫转移配置(对应结构体 CFG_CALLFORWARD_INFO)
+ CFD_CMD_DOORBELLSOUND("DoorBellSound"), // 门铃配置(对应结构体CFG_DOOR_BELLSOUND_INFO)
+ CFG_CMD_TELNET("Telnet"), // telnet配置(对应结构体CFG_TELNET_INFO)
+ CFG_CMD_OSDSYSABNORMAL("OSDSysAbnormal"), // 显示异常信息的叠加配置(对应结构体 CFG_OSD_SYSABNORMAL_INFO)
+ CFG_CMD_VIDEO_WIDGET2("VideoWidget2"), // 视频编码物件配置(对应结构体 CFG_VIDEO_WIDGET2_INFO)
+ CFG_CMD_VIDEOWIDGET_NUMBERSTAT("VideoWidgetNumberStat"), // 人数统计叠加OSD配置(对应结构体
+ // CFG_VIDEOWIDGET_NUMBERSTAT_INFO)
+ CFG_CMD_PRIVACY_MASKING("PrivacyMasking"), // 隐私遮挡设置(对应结构体 CFG_PRIVACY_MASKING_INFO)
+ CFG_CMD_DEVICE_INFO("DeviceInfo"), // 设备信息(对应结构体 CFG_DEVICE_INFO)
+ CFG_CMD_POLICEID_MAP_INFO("PoliceMap"), // 警员ID和设备通道映射关系信息(对应结构体 CFG_POLICEID_MAP_INFO)
+ CFG_CMD_GPS_NOT_ALIGNED("GpsNotAligned"), // GPS未定位配置(对应结构体 CFG_GPS_NOT_ALIGNED_INFO)
+ CFG_CMD_WIRELESS_NOT_CONNECTED("WireLessNotConnected"), // 网络未连接(包括wifi,3G/4G)配置(对应结构体
+ // CFG_WIRELESS_NOT_CONNECTED_INFO)
+ CFG_CMD_MCS_GENERAL_CAPACITY_LOW("MCSGeneralCapacityLow"), // 微云常规容量告警配置
+ // (对应结构体CFG_MCS_GENERAL_CAPACITY_LOW)
+ CFG_CMD_MCS_DATA_NODE_OFFLINE("MCSDataNodeOffline"), // 微云存储节点下线(对应结构体CFG_MCS_DATA_NODE_OFFLINE)
+ CFG_CMD_MCS_DISK_OFFLINE("MCSDiskOffline"), // 微云磁盘下线告警配置(对应结构体CFG_MCS_DISK_OFFLINE)
+ CFG_CMD_MCS_DISK_SLOW("MCSDiskSlow"), // 微云磁盘变慢告警配置(对应结构体CFG_MCS_DISK_SLOW)
+ CFG_CMD_MCS_DISK_BROKEN("MCSDiskBroken"), // 微云磁盘损坏告警配置(对应结构体CFG_MCS_DISK_BROKEN)
+ CFG_CMD_MCS_DISK_UNKNOW_ERROR(
+ "MCSDiskUnknowError"), // 微云磁盘未知错误告警配置(对应结构体CFG_MCS_DISK_UNKNOW_ERROR)
+ CFG_CMD_MCS_METADATA_SERVER_ABNORMAL("MCSMetadataServerAbnormal"), // 微云元数据服务器异常告警配置
+ // (对应结构体CFG_MCS_METADATA_SERVER_ABNORMAL)
+ CFG_CMD_MCS_CATALOG_SERVER_ABNORMAL("MCSCatalogServerAbnormal"), // 微云目录服务器异常告警配置
+ // (对应结构体CFG_MCS_CATALOG_SERVER_ABNORMAL)
+ CFG_CMD_MCS_GENERAL_CAPACITY_RESUME("MCSGeneralCapacityResume"), // 微云常规容量告警恢复告警配置
+ // (对应结构体CFG_MCS_GENERAL_CAPACITY_RESUME)
+ CFG_CMD_MCS_DATA_NODE_ONLINE("MCSDataNodeOnline"), // 微云存储节点上线告警配置
+ // (对应结构体CFG_MCS_DATA_NODE_ONLINE)
+ CFG_CMD_MCS_DISK_ONLINE("MCSDiskOnline"), // 微云磁盘上线告警配置(对应结构体CFG_MCS_DISK_ONLINE)
+ CFG_CMD_MCS_METADATA_SLAVE_ONLINE("MCSMetadataSlaveOnline"), // 微云元数据备机上线告警配置
+ // (对应结构体CFG_MCS_METADATA_SLAVE_ONLINE)
+ CFG_CMD_MCS_CATALOG_SERVER_ONLINE("MCSCatalogServerOnline"), // 微云目录服务器上线告警配置
+ // (对应结构体CFG_MCS_CATALOG_SERVER_ONLINE)
+ CFG_CMD_SECURITY_ALARMS_PRIVACY("SecurityAlarmsPrivacy"), // SecurityAlarms客户功能,隐私保护
+ // (对应结构体CFG_SECURITY_ALARMS_PRIVACY)
+ CFG_CMD_NO_FLY_TIME("NoFlyTime"), // 无人机禁飞时段配置 ( 对应结构体 CFG_NO_FLY_TIME_INFO )
+ CFG_CMD_PWD_RESET("PwdReset"), // 密码重置功能使能配置 ( 对应结构体 CFG_PWD_RESET_INFO )
+ CFG_CMD_NET_MONITOR_ABORT("NetMonitorAbort"), // 网络预览中断事件配置( 对应结构体
+ // CFG_NET_MONITOR_ABORT_INFO )
+ CFG_CMD_LOCAL_EXT_ALARM("LocalExtAlarm"), // 本地扩展报警配置 ( 对应结构体 CFG_LOCAL_EXT_ALARME_INFO )
+ CFG_CMD_ACCESSCONTROL_DELAYSTRATEGY("DelayStrategy"), // 门禁卡欠费与预欠费状态配置(对应结构体
+ // CFG_ACCESSCONTROL_DELAYSTRATEGY)
+ CFG_CMD_VIDEO_TALK_PHONE_BASIC("VideoTalkPhoneBasic"), // 视频对讲电话基础配置( 对应结构体
+ // CFG_VIDEO_TALK_PHONE_BASIC_INFO )
+ CFG_CMD_APP_EVENT_LANGUAGE("AppEventLanguage"), // 手机推送消息的翻译目标语言配置(对应结构体
+ // CFG_APP_EVENT_LANGUAGE_INFO )
+ CFG_CMD_LOGIN_FAILURE_ALARM("LoginFailureAlarm"), // 登陆失败报警配置(对应结构体 CFG_LOGIN_FAILURE_ALARM)
+ CFG_CMD_DROPBOXTOKEN("DropBoxToken"), // Dropbox Token 配置( 对应结构体
+ // CFG_DROPBOXTOKEN_INFO)
+ CFG_CMD_IDLINGTIME("IdlingTime"), // 怠速配置(对应结构体 CFG_IDLINGTIME_INFO)
+ CFG_CMD_CARDIVERSTATE("CarDiverState"), // 汽车行驶状态配置(对应结构体 CFG_CARDIVERSTATE_INFO)
+ CFG_CMD_VEHICLE("Vehicle"), // 车载配置(对应结构体 CFG_VEHICLE_INFO)
+ CFG_CMD_PTZDEVICE("PtzDevice"), // 模拟云台配置( 对应结构体 CFG_PTZDEVICE_INFO)
+ CFG_CMD_SMARTHOME_SCENELIST("SmartHomeSceneList"), // 美的地产智能家居场景列表
+ // (对应结构体CFG_SMARTHOME_SCENELIST_INFO)
+ CFG_CMD_LIGHTING_V2("Lighting_V2"), // 全彩相机补光灯灵敏度配置(对应结构体 CFG_LIGHTING_V2_INFO)
+ CFG_CMD_KBUSER_PASSWORD("KbuserPassword"), // 键盘操作员用户配置(对应结构体CFG_KBUSER_USERS_INFO)
+ CFG_CMD_ACCESS_OEM("AccessOEMSettings"), // 工行金库门禁信息配置,对应结构体CFG_ACCESS_OEM_INFO
+ CFG_CMD_FIRE_WARNING_EXT("FireWarningExt"), // 火警配置扩展(对应结构体CFG_FIREWARNING_EXT_INFO)
+ CFG_CMD_THERM_DENOISE("ThermDenoise"), // 热成像特有的机芯降噪,对应结构体CFG_THERM_DENOISE
+ CFG_CMD_CONSTANT_LAMP("ConstantLamp"), // 智能交通灯光配置,对应结构体CFG_CONSTANT_LAMP_INFO
+ CFG_CMD_TRAFFIC_IO("TrafficIO"), // 线圈IO配置,对应结构体CFG_TRAFFIC_IO
+ CFG_CMD_MONITOR_WALL_COLLECTION_MAP("MonitorWallCollectionMap"), // 电视墙预关联配置,
+ // 对应结构体CFG_MONITOR_WALL_COLLECTION_MAP_INFO,通道只支持传-1
+ CFG_CMD_VIDEO_INPUT_GROUP("VideoInputGroup"), // 视频输入组配置,对应结构体CFG_VIDEO_INPUT_GROUP_INFO
+ CFG_CMD_DOOR_NOT_CLOSE("DoorNotClosed"), // 门未关报警,对应结构体 CFG_DOOR_NOT_CLOSE_INFO
+ CFG_CMD_BREAK_IN("BreakIn"), // 闯入报警,对应结构体 CFG_BREAK_IN_INFO
+ CFG_CMD_ANTI_PASSBACK("AntiPassback"), // 反潜回报警,对应结构体 CFG_ANTI_PASSBACK_INFO
+ CFG_CMD_DURESS("Duress"), // 胁迫报警,对应结构体 CFG_DURESS_INFO
+ CFG_CMD_MALICIOUS_ACCESSCONTROL("MaliciousAccessControl"), // 非法超次报警报警,对应结构体
+ // CFG_DOOR_MALICIOUS_ACCESSCONTROL_INFO
+ CFG_CMD_REGULATOR_DETECT("RegulatorDetect"), // 标准黑体源异常报警,对应结构体
+ // CFG_REGULATOR_DETECT_INFO.
+ // 热成像通道有效
+
+ CFG_CMD_REMOTE_ANALYSEGLOBAL("RemoteVideoAnalyseGlobal"), // 远程视频分析全局配置(对应
+ // CFG_ANALYSEGLOBAL_INFO)
+ CFG_CMD_REMOTE_ANALYSEMODULE("RemoteVideoAnalyseModule"); // 远程物体的检测模块配置(对应
+ // CFG_ANALYSEMODULES_INFO)
+
+ private String value;
+
+ private EM_NEW_CONFIG(String value) {
+ this.value = value;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_NEW_QUERY_SYSTEM_INFO.java b/src/main/java/com/netsdk/lib/enumeration/EM_NEW_QUERY_SYSTEM_INFO.java
new file mode 100644
index 0000000..d1e19ba
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_NEW_QUERY_SYSTEM_INFO.java
@@ -0,0 +1,222 @@
+package com.netsdk.lib.enumeration;/**
+ * @author 47081
+ * @descriptio
+ * @date 2020/11/9
+ * @version 1.0
+ */
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.ptr.IntByReference;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 能力集命令枚举, 对应接口
+ * {@link com.netsdk.lib.NetSDKLib#CLIENT_QueryNewSystemInfo(NetSDKLib.LLong, String, int, byte[], int, IntByReference, int)}
+ * @date 2020/11/9
+ */
+public enum EM_NEW_QUERY_SYSTEM_INFO {
+ /**
+ * 视频分析能力集(对应 CFG_CAP_ANALYSE_INFO, pExtendInfo 对应 CFG_CAP_ANALYSE_REQ_EXTEND_INFO)
+ */
+ CFG_CAP_CMD_VIDEOANALYSE("devVideoAnalyse.getCaps"),
+ /**
+ * 视频分析能力集(对应CFG_CAP_ANALYSE_INFO_EX)
+ */
+ CFG_CAP_CMD_VIDEOANALYSE_EX("devVideoAnalyse.getCapsEx"),
+ /**
+ * 获取后端设备的的在线状态(对应CFG_REMOTE_DEVICE_STATUS)
+ */
+ CFG_NETAPP_REMOTEDEVICE("netApp.getRemoteDeviceStatus"),
+ /**
+ * 接入设备信息(对应 CFG_PRODUCT_DEFINITION_INFO)
+ */
+ CFG_CAP_CMD_PRODUCTDEFINITION("magicBox.getProductDefinition"),
+ /**
+ * 设备智能分析能力(对应CFG_CAP_DEVICE_ANALYSE_INFO)兼容老设备
+ */
+ CFG_DEVICE_CAP_CMD_VIDEOANALYSE("intelli.getVideoAnalyseDeviceChannels"),
+ /**
+ * 设备智能分析能力(对应CFG_CAP_DEVICE_ANALYSE_INFO)
+ */
+ CFG_DEVICE_CAP_NEW_CMD_VIDEOANALYSE("devVideoAnalyse.factory.getCollect"),
+ /**
+ * 获得CPU个数
+ */
+ CFG_CAP_CMD_CPU_COUNT("magicBox.getCPUCount"),
+ /**
+ * 获取CPU占用率
+ */
+ CFG_CAP_CMD_CPU_USAGE("magicBox.getCPUUsage"),
+ /**
+ * 获得内存容量
+ */
+ CFG_CAP_CMD_MEMORY_INFO("magicBox.getMemoryInfo"),
+ /**
+ * 获取设备类型(对应CFG_DEVICE_CLASS_INFO)
+ */
+ CFG_CAP_CMD_DEVICE_CLASS("magicBox.getDeviceClass"),
+ /**
+ * 获取设备状态信息 (对应CFG_CAP_TRAFFIC_DEVICE_STATUS)
+ */
+ CFG_CAP_CMD_DEVICE_STATE("trafficSnap.getDeviceStatus"),
+ /**
+ * 视频输入能力集(对应CFG_CAP_VIDEOINPUT_INFO)
+ */
+ CFG_CAP_CMD_VIDEOINPUT("devVideoInput.getCaps"),
+ /**
+ * 得到所有活动的用户信息(对应 CFG_ACTIVEALLUSER_INFO)
+ */
+ CFG_USERMANAGER_ACTIVEUSER("userManager.getActiveUserInfoAll"),
+ /**
+ * 获取视频统计摘要信息(对应CFG_VIDEOSATA_SUMMARY_INFO)
+ */
+ CFG_CAP_VIDEOSTAT_SUMMARY("videoStatServer.getSummary"),
+ /**
+ * 获取视频诊断服务能力(CFG_VIDEODIAGNOSIS_CAPS_INFO)
+ */
+ CFG_CAP_CMD_VIDEODIAGNOSIS_SERVER("videoDiagnosisServer.getCaps"),
+ /**
+ * 获取视频诊断通道数目(CFG_VIDEODIAGNOSIS_GETCOLLECT_INFO)
+ */
+ CFG_CMD_VIDEODIAGNOSIS_GETCOLLECT("videoDiagnosisServer.factory.getCollect"),
+ /**
+ * 获取视频诊断进行状态(CFG_VIDEODIAGNOSIS_STATE_INFO)
+ */
+ CFG_CMD_VIDEODIAGNOSIS_GETSTATE("videoDiagnosisServer.getState"),
+ /**
+ * 获取服务器上支持的服务列表(CFG_DEV_SERVICE_LIST)
+ */
+ CFG_CAP_CMD_SERVICE_LIST("system.listService"),
+ /**
+ * 获取服务器报警联动能力集(CFG_CAP_EVENTHANDLER_INFO)
+ */
+ CFG_CAP_CMD_EVENTHANDLER("capsManager.get&EventManagerEventHandler"),
+ /**
+ * 获取报警能力集(CFG_CAP_ALARM_INFO)
+ */
+ CFG_CAP_ALARM("alarm.getAlarmCaps"),
+ /**
+ * 获取音频分析能力集(CFG_CAP_AUDIO_ANALYSE_INFO)
+ */
+ CFG_CAP_CMD_AUDIO_ANALYSE("devAudioAnalyse.getCaps"),
+ /**
+ * 获取主从式跟踪器通道数目(对应结构体CFG_MASTERSLAVETRACKER_INFO)
+ */
+ CFG_CMD_MASTERSLAVE_GETCOLLECT("masterSlaveTracker.factory.getCollect"),
+ /**
+ * 获取主从式设备能力集(CFG_CAP_MASTERSLAVE_INFO)
+ */
+ CFG_CAP_CMD_MASTERSLAVE("capsManager.get&MasterSlaveTracker"),
+ /**
+ * 获取镜头聚焦状态信息 (对应CFG_CAP_FOCUS_STATUS)
+ */
+ CFG_CAP_CMD_FOCUS_STATE("devVideoInput.getFocusStatus"),
+ /**
+ * 获取网络应用能力集(对应CFG_CAP_NETAPP)
+ */
+ CFG_CAP_CMD_NETAPP("netApp.getCaps"),
+ /**
+ * 获取云台支持信息(CFG_CAP_PTZ_ENABLEINFO )
+ */
+ CFG_CAP_CMD_PTZ_ENABLE("ptz.factory.instance"),
+ /**
+ * 获取录像能力集(CFG_CAP_RECORD_INFO)
+ */
+ CFG_CAP_CMD_RECORD("recordManager.getCaps"),
+ /**
+ * 获取刻录管理能力集( CFG_CAP_BURN_MANAGER)
+ */
+ CFG_CAP_CMD_BURN_MANAGER("BurnManager.getCaps"),
+ /**
+ * 获取云台能力集
+ * 对应结构体{@link com.netsdk.lib.structure.CFG_PTZ_PROTOCOL_CAPS_INFO}
+ */
+ CFG_CAP_CMD_PTZ("ptz.getCurrentProtocolCaps"),
+ /**
+ * 获取编码能力集(CFG_ENCODECAP)
+ */
+ CFG_CMD_ENCODE_GETCAPS("encode.getCaps"),
+ /**
+ * 视频输入能力集扩展(对应CFG_CAP_VIDEOINPUT_INFO_EX)
+ */
+ CFG_CAP_CMD_VIDEOINPUT_EX("devVideoInput.getCapsEx"),
+ /**
+ * 获取设备智能分析模式(对应 CFG_ANALYSE_MODE)
+ */
+ CFG_CAP_CMD_ANALYSE_MODE("intelli.getCaps.AnalyseMode"),
+ /**
+ * 获取设备报警联动能力,老协议已废除,新开发请使用该字段(CFG_CAP_EVENTMANAGER_INFO)
+ */
+ CFG_CAP_CMD_EVENTMANAGER("eventManager.getCaps"),
+ /**
+ * 获取文件能力(CFG_CAP_FILEMANAGER)
+ */
+ CFG_CAP_CMD_FILEMANAGER("FileManager.getCaps"),
+ /**
+ * 获取日志服务能力(CFG_CAP_LOG)
+ */
+ CFG_CAP_CMD_LOG("log.getCaps"),
+ /**
+ * 扬声器播放能力(CFG_CAP_SPEAK)
+ */
+ CFG_CAP_CMD_SPEAK("speak.getCaps"),
+ /**
+ * 门禁能力(CFG_CAP_ACCESSCONTROL)
+ */
+ CFG_CAP_CMD_ACCESSCONTROLMANAGER("accessControlManager.getCaps"),
+ /**
+ * 获取扩展报警能力集, (对应结构体 CFG_CAP_EXALARM_INFO)
+ */
+ CFG_CAP_CMD_EXALARM("alarm.getExAlarmCaps"),
+ /**
+ * 获取扩展报警盒能力集, (对应结构体 CFG_CAP_EXALARMBOX_INFO)
+ */
+ CFG_CAP_CMD_EXALARMBOX("alarm.getExAlarmBoxCaps"),
+ /**
+ * 获取查询记录能力集, (对应结构体 CFG_CAP_RECORDFINDER_INFO)
+ */
+ CFG_CAP_CMD_RECORDFINDER("RecordFinder.getCaps"),
+ /**
+ * 模拟量报警输入通道能力(对应结构体 CFG_CAP_ANALOGALARM)
+ */
+ CFG_CAP_CMD_ANALOGALARM("AnalogAlarm.getCaps"),
+ /**
+ * 获取LowRateWPAN能力(对应的结构体 CFG_CAP_LOWRATEWPAN)
+ */
+ CFG_CAP_CMD_LOWRATEWPAN("LowRateWPAN.getCaps"),
+ /**
+ * 获取编码自适应编码能力(对应的结构体 CFG_CAP_ADAPT_ENCODE_INFO)
+ */
+ CFG_CAP_CMD_ADAPTENCODE("encode.getNAACaps"),
+ /**
+ * 获取该云台实际能够使用的协议,按介质区分 (对应结构体 CFG_CAP_PTZ_PROTOCOL)
+ */
+ CFG_CAP_CMD_PTZPROTOCAL("ptz.getProtocol"),
+ /**
+ * 查询是否支持视频裁剪能力 (对应结构体 CFG_CAP_MEDIA_CROP)
+ */
+ CFG_CAP_CMD_MEDIACROP("encode.getCropCaps"),
+ /**
+ * 获取OSD叠加能力(对应结构体CFG_CAP_OSDMANAGER_INFO)
+ */
+ CFG_CAP_CMD_OSDMANAGER("OSDManager.getCaps"),
+ /**
+ * 获取自定义标题能力集(对应结构体CFG_CAP_CUSTOM_OSD_INFO)
+ */
+ CFG_CAP_CMD_CUSTOM("OSDManager.getCustomCaps");
+
+ private EM_NEW_QUERY_SYSTEM_INFO(String value) {
+ this.value = value;
+ }
+
+ private String value;
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_NONMOTOR_OBJECT_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_NONMOTOR_OBJECT_STATUS.java
new file mode 100644
index 0000000..b97798f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_NONMOTOR_OBJECT_STATUS.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 事件/物体状态
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_NONMOTOR_OBJECT_STATUS extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未识别
+ */
+ public static final int EM_NONMOTOR_OBJECT_STATUS_UNKNOWN = 0;
+ /**
+ * 否
+ */
+ public static final int EM_NONMOTOR_OBJECT_STATUS_NO = 1;
+ /**
+ * 是
+ */
+ public static final int EM_NONMOTOR_OBJECT_STATUS_YES = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_NTP_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_NTP_STATUS.java
new file mode 100644
index 0000000..50466f4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_NTP_STATUS.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * NTP校时状态
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_NTP_STATUS extends NetSDKLib.SdkStructure {
+
+ /**
+ * NET_NTP_STATUS_UNKNOWN = 0 ,
+ */
+ public static final int NET_NTP_STATUS_UNKNOWN = 0;
+ /**
+ * NET_NTP_STATUS_DISABLE ,
+ */
+ public static final int NET_NTP_STATUS_DISABLE = 1;
+ /**
+ * NET_NTP_STATUS_SUCCESSFUL ,
+ */
+ public static final int NET_NTP_STATUS_SUCCESSFUL = 2;
+ /**
+ * NET_NTP_STATUS_FAILED ,
+ */
+ public static final int NET_NTP_STATUS_FAILED = 3;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_NUMBER_STAT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_NUMBER_STAT_TYPE.java
new file mode 100644
index 0000000..887e6b2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_NUMBER_STAT_TYPE.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 表示人数越上限类型
+ * @date 2022/07/04 10:11:30
+ */
+public enum EM_NUMBER_STAT_TYPE {
+ /**
+ * 未知
+ */
+ EM_NUMBERSTAT_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 进入
+ */
+ EM_NUMBERSTAT_TYPE_ENTEROVER(1, "进入"),
+ /**
+ * 退出
+ */
+ EM_NUMBERSTAT_TYPE_EXITOVER(2, "退出"),
+ /**
+ * 在里面
+ */
+ EM_NUMBERSTAT_TYPE_INSIDEOVER(3, "在里面"),
+ /**
+ * 经过
+ */
+ EM_NUMBERSTAT_TYPE_PASSOVER(4, "经过");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_NUMBER_STAT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_NUMBER_STAT_TYPE enumType : EM_NUMBER_STAT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_NUMBER_STAT_TYPE enumType : EM_NUMBER_STAT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_NUMBER_STAT_TYPE getEnum(int value) {
+ for (EM_NUMBER_STAT_TYPE e : EM_NUMBER_STAT_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_NUMBER_STAT_TYPE.EM_NUMBERSTAT_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_OBJECT_ABNORMAL_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_OBJECT_ABNORMAL_TYPE.java
new file mode 100644
index 0000000..f04f2f6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_OBJECT_ABNORMAL_TYPE.java
@@ -0,0 +1,53 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 异常行为
+ * @date 2022/12/19 11:30:59
+ */
+public enum EM_OBJECT_ABNORMAL_TYPE {
+ /**
+ * 未知
+ */
+ EM_OBJECT_ABNORMAL_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 逆向运动
+ */
+ EM_OBJECT_ABNORMAL_TYPE_RETROGRADE(1, "逆向运动");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_OBJECT_ABNORMAL_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_OBJECT_ABNORMAL_TYPE enumType : EM_OBJECT_ABNORMAL_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_OBJECT_ABNORMAL_TYPE enumType : EM_OBJECT_ABNORMAL_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_OBJECT_BASKET_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_OBJECT_BASKET_TYPE.java
new file mode 100644
index 0000000..b9f62ad
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_OBJECT_BASKET_TYPE.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 非机动车车篮
+* @origin autoTool
+* @date 2023/02/14 20:11:39
+*/
+public enum EM_OBJECT_BASKET_TYPE {
+/**
+未知
+*/
+EM_OBJECT_BASKET_UNKNOWN(0,"未知"),
+/**
+无
+*/
+EM_OBJECT_BASKET_NO(1,"无"),
+/**
+有
+*/
+EM_OBJECT_BASKET_YES(2,"有");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_OBJECT_BASKET_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_OBJECT_BASKET_TYPE enumType : EM_OBJECT_BASKET_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_OBJECT_BASKET_TYPE enumType : EM_OBJECT_BASKET_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_OBJECT_BASKET_TYPE getEnum(int value) {
+ for (EM_OBJECT_BASKET_TYPE e : EM_OBJECT_BASKET_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_OBJECT_BASKET_TYPE.EM_OBJECT_BASKET_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_OBJECT_COLOR_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_OBJECT_COLOR_TYPE.java
new file mode 100644
index 0000000..e822364
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_OBJECT_COLOR_TYPE.java
@@ -0,0 +1,134 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 颜色类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_OBJECT_COLOR_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_UNKNOWN = 0;
+ /**
+ * 白色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_WHITE = 1;
+ /**
+ * 橙色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_ORANGE = 2;
+ /**
+ * 粉色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_PINK = 3;
+ /**
+ * 黑色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_BLACK = 4;
+ /**
+ * 红色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_RED = 5;
+ /**
+ * 黄色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_YELLOW = 6;
+ /**
+ * 灰色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_GRAY = 7;
+ /**
+ * 蓝色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_BLUE = 8;
+ /**
+ * 绿色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_GREEN = 9;
+ /**
+ * 紫色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_PURPLE = 10;
+ /**
+ * 棕色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_BROWN = 11;
+ /**
+ * 银色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_SLIVER = 12;
+ /**
+ * 暗紫罗兰色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_DARKVIOLET = 13;
+ /**
+ * 栗色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_MAROON = 14;
+ /**
+ * 暗灰色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_DIMGRAY = 15;
+ /**
+ * 白烟色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_WHITESMOKE = 16;
+ /**
+ * 深橙色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_DARKORANGE = 17;
+ /**
+ * 浅玫瑰色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_MISTYROSE = 18;
+ /**
+ * 番茄红色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_TOMATO = 19;
+ /**
+ * 橄榄色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_OLIVE = 20;
+ /**
+ * 金色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_GOLD = 21;
+ /**
+ * 暗橄榄绿色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_DARKOLIVEGREEN = 22;
+ /**
+ * 黄绿色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_CHARTREUSE = 23;
+ /**
+ * 绿黄色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_GREENYELLOW = 24;
+ /**
+ * 森林绿色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_FORESTGREEN = 25;
+ /**
+ * 海洋绿色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_SEAGREEN = 26;
+ /**
+ * 深天蓝色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_DEEPSKYBLUE = 27;
+ /**
+ * 青色
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_CYAN = 28;
+ /**
+ * 无法识别
+ */
+ public static final int EM_OBJECT_COLOR_TYPE_OTHER = 29;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_OBJECT_NONMOTORANGLE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_OBJECT_NONMOTORANGLE_TYPE.java
new file mode 100644
index 0000000..36e5a55
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_OBJECT_NONMOTORANGLE_TYPE.java
@@ -0,0 +1,71 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 非机动车的角度
+* @origin autoTool
+* @date 2023/02/14 20:11:39
+*/
+public enum EM_OBJECT_NONMOTORANGLE_TYPE {
+/**
+未知
+*/
+EM_OBJECT_NONMOTORANGLE_TYPE_UNKNOWN(0,"未知"),
+/**
+正面
+*/
+EM_OBJECT_NONMOTORANGLE_TYPE_FRONT(1,"正面"),
+/**
+侧面
+*/
+EM_OBJECT_NONMOTORANGLE_TYPE_SIDE(2,"侧面"),
+/**
+后面
+*/
+EM_OBJECT_NONMOTORANGLE_TYPE_BEHIND(3,"后面");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_OBJECT_NONMOTORANGLE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_OBJECT_NONMOTORANGLE_TYPE enumType : EM_OBJECT_NONMOTORANGLE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_OBJECT_NONMOTORANGLE_TYPE enumType : EM_OBJECT_NONMOTORANGLE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_OBJECT_NONMOTORANGLE_TYPE getEnum(int value) {
+ for (EM_OBJECT_NONMOTORANGLE_TYPE e : EM_OBJECT_NONMOTORANGLE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_OBJECT_NONMOTORANGLE_TYPE.EM_OBJECT_NONMOTORANGLE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_OBJECT_STORAGEBOX_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_OBJECT_STORAGEBOX_TYPE.java
new file mode 100644
index 0000000..283eb1a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_OBJECT_STORAGEBOX_TYPE.java
@@ -0,0 +1,75 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 非机动车后备箱
+* @origin autoTool
+* @date 2023/02/14 20:11:39
+*/
+public enum EM_OBJECT_STORAGEBOX_TYPE {
+/**
+未知
+*/
+EM_OBJECT_STORAGEBOX_UNKNOWN(0,"未知"),
+/**
+无后备箱
+*/
+EM_OBJECT_STORAGEBOX_NO(1,"无后备箱"),
+/**
+自带箱
+*/
+EM_OBJECT_STORAGEBOX_OWNBOX(2,"自带箱"),
+/**
+自装箱
+*/
+EM_OBJECT_STORAGEBOX_SELFPACK(3,"自装箱"),
+/**
+自装箱和自带箱都有
+*/
+EM_OBJECT_STORAGEBOX_ALL(4,"自装箱和自带箱都有");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_OBJECT_STORAGEBOX_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_OBJECT_STORAGEBOX_TYPE enumType : EM_OBJECT_STORAGEBOX_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_OBJECT_STORAGEBOX_TYPE enumType : EM_OBJECT_STORAGEBOX_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_OBJECT_STORAGEBOX_TYPE getEnum(int value) {
+ for (EM_OBJECT_STORAGEBOX_TYPE e : EM_OBJECT_STORAGEBOX_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_OBJECT_STORAGEBOX_TYPE.EM_OBJECT_STORAGEBOX_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ONLINE_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_ONLINE_STATUS.java
new file mode 100644
index 0000000..31424a6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ONLINE_STATUS.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 在线状态
+* @date 2022/08/31 14:44:15
+*/
+public enum EM_ONLINE_STATUS {
+/**
+未知
+*/
+EM_ONLINE_UNKNOWN(0,"未知"),
+/**
+离线
+*/
+EM_ONLINE_OFF(1,"离线"),
+/**
+在线
+*/
+EM_ONLINE_ON(2,"在线");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_ONLINE_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_ONLINE_STATUS enumType : EM_ONLINE_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_ONLINE_STATUS enumType : EM_ONLINE_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_ONLINE_STATUS getEnum(int value) {
+ for (EM_ONLINE_STATUS e : EM_ONLINE_STATUS.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_ONLINE_STATUS.EM_ONLINE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_OPEN_STROBE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_OPEN_STROBE_TYPE.java
new file mode 100644
index 0000000..1e53690
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_OPEN_STROBE_TYPE.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 开闸类型
+ * @date 2021/2/22
+ */
+public enum EM_OPEN_STROBE_TYPE {
+ /**
+ * 未知
+ */
+ EM_OPEN_STROBE_TYPE_UNKNOWN,
+ /**
+ * 正常开闸(默认)
+ */
+ EM_OPEN_STROBE_TYPE_NORMAL,
+ /**
+ * 测试手动开闸(用于施工前期)
+ */
+ EM_OPEN_STROBE_TYPE_TEST,
+ /**
+ * 手动开闸
+ */
+ EM_OPEN_STROBE_TYPE_MANUAL;
+ public static EM_OPEN_STROBE_TYPE getOpenStrobeTyppe(int type){
+ for (EM_OPEN_STROBE_TYPE strobeType : EM_OPEN_STROBE_TYPE.values() ) {
+ if(strobeType.ordinal()==type){
+ return strobeType;
+ }
+ }
+ return EM_OPEN_STROBE_TYPE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_OPERATE_FACERECONGNITIONDB_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_OPERATE_FACERECONGNITIONDB_TYPE.java
new file mode 100644
index 0000000..46fa9bd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_OPERATE_FACERECONGNITIONDB_TYPE.java
@@ -0,0 +1,19 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 目标识别数据库操作
+ * @date 2021/4/26
+ */
+public enum EM_OPERATE_FACERECONGNITIONDB_TYPE {
+ NET_FACERECONGNITIONDB_UNKOWN,
+ /** 删除人员信息和人脸样本 */
+ NET_FACERECONGNITIONDB_ADD,
+ /** 添加人员信息和人脸样本,如果人员已经存在,图片数据和原来的数据合并 */
+ NET_FACERECONGNITIONDB_DELETE,
+ /** 修改人员信息和人脸样本,人员的UID标识必填 */
+ NET_FACERECONGNITIONDB_MODIFY,
+ /** 通过UID删除人员信息和人脸样本 */
+ NET_FACERECONGNITIONDB_DELETE_BY_UID;
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_OPERATE_USERINFO_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_OPERATE_USERINFO_TYPE.java
new file mode 100644
index 0000000..2d71e74
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_OPERATE_USERINFO_TYPE.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description CLIENT_OperateUserInfoNew接口参数 nOperateType 对应的值含义
+ * @date 2023/03/10 15:08:40
+ */
+public enum EM_OPERATE_USERINFO_TYPE {
+ /**
+ * 增加用户,opParam对应结构体 USER_INFO_NEW
+ */
+ EM_OPERATE_USERINFO_TYPE_ADD_USER(3, "增加用户"),
+ /**
+ * 删除用户,opParam对应结构体 USER_INFO_NEW
+ */
+ EM_OPERATE_USERINFO_TYPE_DEL_USER(4, "删除用户"),
+ /**
+ * 修改用户,opParam为修改后的用户信息 对应结构体 USER_INFO_NEW, subParam为原始用户信息 对应结构体
+ * USER_INFO_NEW
+ */
+ EM_OPERATE_USERINFO_TYPE_MODIFY_USER(5, "修改用户"),
+ /**
+ * 修改密码,opParam为修改后的密码 对应结构体 USER_INFO_NEW, subParam为原始密码 对应结构体 USER_INFO_NEW
+ */
+ EM_OPERATE_USERINFO_TYPE_MODIFY_PWD(6, "修改密码"),
+ /**
+ * 增加用户组,opParam对应结构体 USER_GROUP_INFO_EX2
+ */
+ EM_OPERATE_USERINFO_TYPE_ADD_GROUP(7, "增加用户组"),
+ /**
+ * 删除用户组,opParam对应结构体 USER_GROUP_INFO_EX2
+ */
+ EM_OPERATE_USERINFO_TYPE_DEL_GROUP(8, "删除用户组"),
+ /**
+ * 修改用户组,opParam为修改后的用户组信息 对应结构体 USER_GROUP_INFO_EX2,subParam为原始用户组信息 对应结构体
+ * USER_GROUP_INFO_EX2
+ */
+ EM_OPERATE_USERINFO_TYPE_MODIFY_GROUP(9, "修改用户组");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_OPERATE_USERINFO_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_OPERATE_USERINFO_TYPE enumType : EM_OPERATE_USERINFO_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_OPERATE_USERINFO_TYPE enumType : EM_OPERATE_USERINFO_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_OPERATION_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_OPERATION_MODE.java
new file mode 100644
index 0000000..21c47b4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_OPERATION_MODE.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 操作模式
+* @date 2022/08/31 14:44:16
+*/
+public enum EM_OPERATION_MODE {
+/**
+未知
+*/
+EM_OPERATION_UNKNOWN(-1,"未知"),
+/**
+紧急操作
+*/
+EM_OPERATION_PANIC(0,"紧急操作"),
+/**
+控制操作
+*/
+EM_OPERATION_CONTROL(1,"控制操作"),
+/**
+静音火灾报警操作
+*/
+EM_OPERATION_MUTE_FIRE_ALARM(2,"静音火灾报警操作");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_OPERATION_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_OPERATION_MODE enumType : EM_OPERATION_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_OPERATION_MODE enumType : EM_OPERATION_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_OPERATION_MODE getEnum(int value) {
+ for (EM_OPERATION_MODE e : EM_OPERATION_MODE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_OPERATION_MODE.EM_OPERATION_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_OUTPUT_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_OUTPUT_STATE.java
new file mode 100644
index 0000000..9a6f4f1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_OUTPUT_STATE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 输出状态
+* @date 2022/10/09 11:29:42
+*/
+public enum EM_OUTPUT_STATE {
+/**
+未知
+*/
+EM_OUTPUT_STATE_UNKNOWN(-1,"未知"),
+/**
+关闭
+*/
+EM_OUTPUT_STATE_CLOSE(0,"关闭"),
+/**
+打开
+*/
+EM_OUTPUT_STATE_OPEN(1,"打开");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_OUTPUT_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_OUTPUT_STATE enumType : EM_OUTPUT_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_OUTPUT_STATE enumType : EM_OUTPUT_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_OUTPUT_STATE getEnum(int value) {
+ for (EM_OUTPUT_STATE e : EM_OUTPUT_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_OUTPUT_STATE.EM_OUTPUT_STATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_OUTPUT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_OUTPUT_TYPE.java
new file mode 100644
index 0000000..5f44850
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_OUTPUT_TYPE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 输出通道类型
+ * @date 2023/03/15 16:46:55
+ */
+public enum EM_OUTPUT_TYPE {
+ /**
+ * 未知
+ */
+ EM_OUTPUT_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 警号
+ */
+ EM_OUTPUT_TYPE_SIREN(1, "警号"),
+ /**
+ * 输出通道
+ */
+ EM_OUTPUT_TYPE_ALARMOUT(2, "输出通道");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_OUTPUT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_OUTPUT_TYPE enumType : EM_OUTPUT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_OUTPUT_TYPE enumType : EM_OUTPUT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_OVERSEA_VEHICLE_CATEGORY_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_OVERSEA_VEHICLE_CATEGORY_TYPE.java
new file mode 100644
index 0000000..0b09bf4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_OVERSEA_VEHICLE_CATEGORY_TYPE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 海外车辆类型中的子类别,一个车辆只能是子类型的某一种。
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_OVERSEA_VEHICLE_CATEGORY_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_OVERSEA_VEHICLE_CATEGORY_UNKNOWN = 0;
+ /**
+ * 摩托车
+ */
+ public static final int EM_OVERSEA_VEHICLE_CATEGORY_MOTORCYCLE = 1;
+ /**
+ * 轻型货车
+ */
+ public static final int EM_OVERSEA_VEHICLE_CATEGORY_LIGHT_GOODS_VEHICLE = 2;
+ /**
+ * 公司用私家车
+ */
+ public static final int EM_OVERSEA_VEHICLE_CATEGORY_COMPANY_VEHICLE = 3;
+ /**
+ * 个人用私家车
+ */
+ public static final int EM_OVERSEA_VEHICLE_CATEGORY_PRIVATE_VEHICLE = 4;
+ /**
+ * TAXI或者快线车
+ */
+ public static final int EM_OVERSEA_VEHICLE_CATEGORY_TAXI = 5;
+ /**
+ * 拖车
+ */
+ public static final int EM_OVERSEA_VEHICLE_CATEGORY_TRAILER = 6;
+ /**
+ * 工程车
+ */
+ public static final int EM_OVERSEA_VEHICLE_CATEGORY_ENGINEERING_PLANT_VEHICLE = 7;
+ /**
+ * 超大货车
+ */
+ public static final int EM_OVERSEA_VEHICLE_CATEGORY_VERY_HEAVY_GOODS_VEHICLE = 8;
+ /**
+ * 大货车
+ */
+ public static final int EM_OVERSEA_VEHICLE_CATEGORY_HEAVY_GOODS_VEHICLE = 9;
+ /**
+ * 公共BUS
+ */
+ public static final int EM_OVERSEA_VEHICLE_CATEGORY_PUBLIC_BUS = 10;
+ /**
+ * 私营BUS
+ */
+ public static final int EM_OVERSEA_VEHICLE_CATEGORY_PRIVATE_BUS = 11;
+ /**
+ * 特殊车辆
+ */
+ public static final int EM_OVERSEA_VEHICLE_CATEGORY_SPECIAL_VEHICLE = 12;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PARKINGSPACE_DIRECTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_PARKINGSPACE_DIRECTION.java
new file mode 100644
index 0000000..7870030
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PARKINGSPACE_DIRECTION.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 停车方向
+ *
+ * @author 47040
+ * @since Created in 2020/11/18 14:48
+ */
+public enum EM_PARKINGSPACE_DIRECTION {
+ /**
+ * 未知
+ */
+ EM_PARKINGSPACE_DIRECTION_UNKNOWN(0, "未知"),
+ /**
+ * 逆向
+ */
+ EM_PARKINGSPACE_DIRECTION_REVERSE(1, "逆向"),
+ /**
+ * 正向
+ */
+ EM_PARKINGSPACE_DIRECTION_FORWARD(2, "正向");
+
+ private int value;
+ private String note;
+
+ EM_PARKINGSPACE_DIRECTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_PARKINGSPACE_DIRECTION enumType : EM_PARKINGSPACE_DIRECTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_PARKINGSPACE_DIRECTION enumType : EM_PARKINGSPACE_DIRECTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_PARKINGSPACE_DIRECTION getEnum(int value) {
+ for (EM_PARKINGSPACE_DIRECTION e : EM_PARKINGSPACE_DIRECTION.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_PARKINGSPACE_DIRECTION.EM_PARKINGSPACE_DIRECTION_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PARKINGSPACE_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_PARKINGSPACE_STATE.java
new file mode 100644
index 0000000..e707aac
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PARKINGSPACE_STATE.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 车位状态
+ *
+ * @author 47040
+ * @since Created in 2020/11/18 13:36
+ */
+public enum EM_PARKINGSPACE_STATE {
+ /**
+ * 未知
+ */
+ EM_PARKINGSPACE_STATE_UNKNOWN(-1, "未知"),
+ /**
+ * 车位无车
+ */
+ EM_PARKINGSPACE_STATE_NOPARKING(0, "车位无车"),
+ /**
+ * 车位有车
+ */
+ EM_PARKINGSPACE_STATE_PARKING(1, "车位有车");
+
+ private final int value;
+ private final String note;
+
+ EM_PARKINGSPACE_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_PARKINGSPACE_STATE enumType : EM_PARKINGSPACE_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_PARKINGSPACE_STATE enumType : EM_PARKINGSPACE_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_PARKINGSPACE_STATE getEnum(int value) {
+ for (EM_PARKINGSPACE_STATE e : EM_PARKINGSPACE_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_PARKINGSPACE_STATE.EM_PARKINGSPACE_STATE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PARKING_TRIGGER_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_PARKING_TRIGGER_TYPE.java
new file mode 100644
index 0000000..6d3bbb9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PARKING_TRIGGER_TYPE.java
@@ -0,0 +1,65 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 车位抓拍触发类型
+ *
+ * @author 47040
+ * @since Created in 2020/11/18 15:06
+ */
+public enum EM_PARKING_TRIGGER_TYPE {
+ /**
+ * 未知
+ */
+ EM_PARKING_TRIGGER_TYPE_UNKNOWN(-1, "未知"),
+ /**
+ * 非手动触发
+ */
+ EM_PARKING_TRIGGER_TYPE_NONMANUAL(0, "非手动触发"),
+ /**
+ * 手动触发
+ */
+ EM_PARKING_TRIGGER_TYPE_MANUAL(1, "手动触发");
+
+ private int value;
+ private String note;
+
+ EM_PARKING_TRIGGER_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_PARKING_TRIGGER_TYPE enumType : EM_PARKING_TRIGGER_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_PARKING_TRIGGER_TYPE enumType : EM_PARKING_TRIGGER_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_PARKING_TRIGGER_TYPE getEnum(int value) {
+ for (EM_PARKING_TRIGGER_TYPE e : EM_PARKING_TRIGGER_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_PARKING_TRIGGER_TYPE.EM_PARKING_TRIGGER_TYPE_UNKNOWN;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PARTITION_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_PARTITION_TYPE.java
new file mode 100644
index 0000000..28a0d52
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PARTITION_TYPE.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 分区类型
+ * @date 2021/01/21
+ */
+public enum EM_PARTITION_TYPE {
+ // 未知
+ EM_PARTITION_UNKNOWN(0, "未知"),
+
+ // 读写
+ EM_PARTITION_READ_WIRTE(1, "读写"),
+
+ // 只读
+ EM_PARTITION_READ_ONLY(2, "只读"),
+
+ // 一般的
+ EM_PARTITION_READ_GENERIC(3, "一般的");
+
+ private int value;
+ private String note;
+
+ private EM_PARTITION_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_PARTITION_TYPE enumType : EM_PARTITION_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_PARTITION_TYPE enumType : EM_PARTITION_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PASSERBY_DB_DUPLICATE_REMOVE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_PASSERBY_DB_DUPLICATE_REMOVE_TYPE.java
new file mode 100644
index 0000000..ae9daf2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PASSERBY_DB_DUPLICATE_REMOVE_TYPE.java
@@ -0,0 +1,43 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 路人库去重策略类型
+ * @date 2021/2/22
+ */
+public enum EM_PASSERBY_DB_DUPLICATE_REMOVE_TYPE {
+ /** 未知 */
+ EM_DUPLICATE_REMOVE_TYPE_UNKNOWN(-1, "未知"),
+ /** 无条件去重 */
+ EM_DUPLICATE_REMOVE_TYPE_ALL(0, "无条件去重"),
+ /** 按时间间隔去重 */
+ EM_DUPLICATE_REMOVE_TYPE_TIME(1, "按时间间隔去重"),
+ /** 按时间段间隔去重 */
+ EM_DUPLICATE_REMOVE_TYPE_TIME_SLOT(2, "按时间段间隔去重");
+ private int type;
+ private String desc;
+
+ EM_PASSERBY_DB_DUPLICATE_REMOVE_TYPE(int type, String desc) {
+ this.type = type;
+ this.desc = desc;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public static EM_PASSERBY_DB_DUPLICATE_REMOVE_TYPE getDuplicateRemoveType(int type) {
+ for (EM_PASSERBY_DB_DUPLICATE_REMOVE_TYPE removeType :
+ EM_PASSERBY_DB_DUPLICATE_REMOVE_TYPE.values()) {
+ if (removeType.type == type) {
+ return removeType;
+ }
+ }
+ return EM_DUPLICATE_REMOVE_TYPE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PASSERBY_DB_OVERWRITE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_PASSERBY_DB_OVERWRITE_TYPE.java
new file mode 100644
index 0000000..a6e5c92
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PASSERBY_DB_OVERWRITE_TYPE.java
@@ -0,0 +1,40 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 路人库满时覆盖策略
+ * @date 2021/2/22
+ */
+public enum EM_PASSERBY_DB_OVERWRITE_TYPE {
+ /** 未知 */
+ EM_OVERWRITE_TYPE_UNKNOWN(-1, "未知"),
+ /** 满停止 */
+ EM_OVERWRITE_TYPE_FULL_STOP(0, "满停止"),
+ /** 满覆盖 */
+ EM_OVERWRITE_TYPE_FULL_COVERAGE(1, "满覆盖");
+ private int type;
+ private String desc;
+
+ EM_PASSERBY_DB_OVERWRITE_TYPE(int type, String desc) {
+ this.type = type;
+ this.desc = desc;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public static EM_PASSERBY_DB_OVERWRITE_TYPE getOverwriteType(int type) {
+ for (EM_PASSERBY_DB_OVERWRITE_TYPE overwriteType : EM_PASSERBY_DB_OVERWRITE_TYPE.values()) {
+ if (overwriteType.type == type) {
+ return overwriteType;
+ }
+ }
+ return EM_OVERWRITE_TYPE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PASS_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_PASS_MODE.java
new file mode 100644
index 0000000..98df07c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PASS_MODE.java
@@ -0,0 +1,37 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 通行模式
+ * @date 2021/2/7
+ */
+public enum EM_PASS_MODE {
+ /** 未知 */
+ EM_PASS_MODE_UNKNOWN(-1, "未知"),
+ /** 进授权出授权 */
+ EM_PASS_MODE_IN_AUTHORIZATION_OUT_AUTHORIZATION(0, "进授权出授权"),
+ /** 进授权出自由 */
+ EM_PASS_MODE_IN_AUTHORIZATION_OUT_FREE(1, "进授权出自由"),
+ /** 进授权出禁止 */
+ EM_PASS_MODE_IN_AUTHORIZATION_OUT_FORBID(2, "进授权出禁止"),
+ /** 进自由出授权 */
+ EM_PASS_MODE_IN_FREE_OUT_AUTHORIZATION(3, "进自由出授权"),
+ /** 进自由出自由 */
+ EM_PASS_MODE_IN_FREE_OUT_FREE(4, "进自由出自由"),
+ /** 进自由出禁止 */
+ EM_PASS_MODE_IN_FREE_OUT_FORBID(5, "进自由出禁止"),
+ /** 进禁止出授权 */
+ EM_PASS_MODE_IN_FORBID_OUT_AUTHORIZATION(6, "进禁止出授权"),
+ /** 进禁止出自由 */
+ EM_PASS_MODE_IN_FORBID_OUT_FREE(7, "进禁止出自由"),
+ /** 进禁止出禁止 */
+ EM_PASS_MODE_IN_FORBID_OUT_FORBID(8, "进禁止出禁止");
+
+ private int mode;
+ private String desc;
+ EM_PASS_MODE(int mode, String desc) {
+ this.mode = mode;
+ this.desc = desc;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PERSON_FEATURE_ERRCODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_PERSON_FEATURE_ERRCODE.java
new file mode 100644
index 0000000..eb0aad4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PERSON_FEATURE_ERRCODE.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 建模失败原因
+ * @date 2021/4/22
+ */
+public enum EM_PERSON_FEATURE_ERRCODE {
+ /** 未知 */
+ EM_PERSON_FEATURE_ERRCODE_UNKNOWN(0, "未知"),
+ /** 图片格式问题 */
+ EM_PERSON_FEATURE_ERRCODE_PIC_FORMAT(1, "图片格式问题"),
+ /** 无人脸或不清晰 */
+ EM_PERSON_FEATURE_ERRCODE_NO_FACE(2, "无人脸或不清晰"),
+ /** 多个人脸 */
+ EM_PERSON_FEATURE_ERRCODE_MULTI_FACE(3, "多个人脸"),
+ /** 图片解码失败 */
+ EM_PERSON_FEATURE_ERRCODE_PIC_DECODE_FAIL(4, "图片解码失败"),
+ /** 不推荐入库 */
+ EM_PERSON_FEATURE_ERRCODE_NOT_RECOMMEND(5, "不推荐入库"),
+ /** 数据库操作失败 */
+ EM_PERSON_FEATURE_ERRCODE_FACEDB_FAIL(6, "数据库操作失败"),
+ /** 获取图片失败 */
+ EM_PERSON_FEATURE_ERRCODE_GET_PICTURE(7, "获取图片失败"),
+ /** 系统异常 */
+ EM_PERSON_FEATURE_ERRCODE_SYSTEM_ERROR(8, "系统异常");
+ private int errorCode;
+ private String reason;
+
+ EM_PERSON_FEATURE_ERRCODE(int errorCode, String reason) {
+ this.errorCode = errorCode;
+ this.reason = reason;
+ }
+
+ public int getErrorCode() {
+ return errorCode;
+ }
+
+ public void setErrorCode(int errorCode) {
+ this.errorCode = errorCode;
+ }
+
+ public String getReason() {
+ return reason;
+ }
+
+ public void setReason(String reason) {
+ this.reason = reason;
+ }
+
+ public static EM_PERSON_FEATURE_ERRCODE getError(int errorCode) {
+ for (EM_PERSON_FEATURE_ERRCODE personError : EM_PERSON_FEATURE_ERRCODE.values()) {
+ if (personError.errorCode == errorCode) {
+ return personError;
+ }
+ }
+ return EM_PERSON_FEATURE_ERRCODE_UNKNOWN;
+ }
+
+ public static String getErrorMessage(int errorCode) {
+ return getError(errorCode).getReason();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PIC_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_PIC_TYPE.java
new file mode 100644
index 0000000..44d3a40
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PIC_TYPE.java
@@ -0,0 +1,62 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 图片类型
+* @date 2022/06/28 19:24:08
+*/
+public enum EM_PIC_TYPE {
+/**
+未知
+*/
+EM_PIC_TYPE_UNKNOWN(-1,"未知"),
+/**
+算法处理后的图片
+*/
+EM_PIC_TYPE_ALGORITHMICALLY_PROCESSED(0,"算法处理后的图片");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_PIC_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_PIC_TYPE enumType : EM_PIC_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_PIC_TYPE enumType : EM_PIC_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_PIC_TYPE getEnum(int value) {
+ for (EM_PIC_TYPE e : EM_PIC_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_PIC_TYPE.EM_PIC_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PLATE_ATTRIBUTE.java b/src/main/java/com/netsdk/lib/enumeration/EM_PLATE_ATTRIBUTE.java
new file mode 100644
index 0000000..7498b4f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PLATE_ATTRIBUTE.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 260611
+* @description 车牌属性
+* @date 2023/01/10 19:44:59
+*/
+public enum EM_PLATE_ATTRIBUTE {
+/**
+未知
+*/
+EM_PLATE_ATTRIBUTE_UNKNOWN(0,"未知"),
+/**
+正常
+*/
+EM_PLATE_ATTRIBUTE_NORMAL(1,"正常"),
+/**
+无牌
+*/
+EM_PLATE_ATTRIBUTE_NO_PLATE(2,"无牌"),
+/**
+部分遮挡/污损
+*/
+EM_PLATE_ATTRIBUTE_PARTIAL_OCCLUSION(3,"部分遮挡/污损"),
+/**
+完全遮挡/污损
+*/
+EM_PLATE_ATTRIBUTE_FULL_OCCLUSION(4,"完全遮挡/污损");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_PLATE_ATTRIBUTE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_PLATE_ATTRIBUTE enumType : EM_PLATE_ATTRIBUTE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_PLATE_ATTRIBUTE enumType : EM_PLATE_ATTRIBUTE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_PLATE_ATTRIBUTE getEnum(int value) {
+ for (EM_PLATE_ATTRIBUTE e : EM_PLATE_ATTRIBUTE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_PLATE_ATTRIBUTE.EM_PLATE_ATTRIBUTE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PLATE_COLOR_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_PLATE_COLOR_TYPE.java
new file mode 100644
index 0000000..1f8b16c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PLATE_COLOR_TYPE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 车牌颜色
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_PLATE_COLOR_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知 "Unknown"
+ */
+ public static final int EM_PLATE_COLOR_UNKNOWN = 0;
+ /**
+ * 其他颜色 "Other"
+ */
+ public static final int EM_PLATE_COLOR_OTHER = 1;
+ /**
+ * 蓝色 "Blue"
+ */
+ public static final int EM_PLATE_COLOR_BLUE = 2;
+ /**
+ * 黄色 "Yellow"
+ */
+ public static final int EM_PLATE_COLOR_YELLOW = 3;
+ /**
+ * 白色 "White"
+ */
+ public static final int EM_PLATE_COLOR_WHITE = 4;
+ /**
+ * 黑色 "Black"
+ */
+ public static final int EM_PLATE_COLOR_BLACK = 5;
+ /**
+ * 红色 "Red"
+ */
+ public static final int EM_PLATE_COLOR_RED = 6;
+ /**
+ * 绿色 "Green"
+ */
+ public static final int EM_PLATE_COLOR_GREEN = 7;
+ /**
+ * 渐变绿 "ShadowGreen"
+ */
+ public static final int EM_PLATE_COLOR_SHADOW_GREEN = 8;
+ /**
+ * 黄绿双拼 "YellowGreen""
+ */
+ public static final int EM_PLATE_COLOR_YELLOW_GREEN = 9;
+ /**
+ * 黄底黑字 "YellowbottomBlackText"
+ */
+ public static final int EM_PLATE_COLOR_YELLOW_BOTTOM_BLACK_TEXT = 10;
+ /**
+ * 蓝底白字 "BluebottomWhiteText"
+ */
+ public static final int EM_PLATE_COLOR_BLUE_BOTTOM_WHITE_TEXT = 11;
+ /**
+ * 黑底白字 "BlackBottomWhiteText"
+ */
+ public static final int EM_PLATE_COLOR_BLACK_BOTTOM_WHITE_TEXT = 12;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PLATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_PLATE_TYPE.java
new file mode 100644
index 0000000..29179d3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PLATE_TYPE.java
@@ -0,0 +1,82 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 号牌类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_PLATE_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 其他车
+ */
+ public static final int EM_PLATE_OTHER = 0;
+ /**
+ * 大型汽车
+ */
+ public static final int EM_PLATE_BIG_CAR = 1;
+ /**
+ * 小型汽车
+ */
+ public static final int EM_PLATE_SMALL_CAR = 2;
+ /**
+ * 使馆汽车
+ */
+ public static final int EM_PLATE_EMBASSY_CAR = 3;
+ /**
+ * 领馆汽车
+ */
+ public static final int EM_PLATE_CONSULATE_CAR = 4;
+ /**
+ * 境外汽车
+ */
+ public static final int EM_PLATE_ABROAD_CAR = 5;
+ /**
+ * 外籍汽车
+ */
+ public static final int EM_PLATE_FOREIGN_CAR = 6;
+ /**
+ * 低速车
+ */
+ public static final int EM_PLATE_LOW_SPEED_CAR = 7;
+ /**
+ * 教练车
+ */
+ public static final int EM_PLATE_COACH_CAR = 8;
+ /**
+ * 摩托车
+ */
+ public static final int EM_PLATE_MOTORCYCLE = 9;
+ /**
+ * 新能源车
+ */
+ public static final int EM_PLATE_NEW_POWER_CAR = 10;
+ /**
+ * 警用车
+ */
+ public static final int EM_PLATE_POLICE_CAR = 11;
+ /**
+ * 港澳两地车
+ */
+ public static final int EM_PLATE_HONGKONG_MACAO_CAR = 12;
+ /**
+ *
+ */
+ public static final int EM_PLATE_WJPOLICE_CAR = 13;
+ /**
+ *
+ */
+ public static final int EM_PLATE_OUTERGUARD_CAR = 14;
+ /**
+ * 非机动车临时牌照
+ */
+ public static final int EM_PLATE_TEMPORARY_LICENSE_FOR_NON_MOTOR_VEHICLES = 15;
+ /**
+ * 非机动车牌正式牌照
+ */
+ public static final int EM_PLATE_OFFICIAL_LICENSE_PLATE_FOR_NON_MOTOR_VEHICLE = 16;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PLAYAUDIO_PRIORITY.java b/src/main/java/com/netsdk/lib/enumeration/EM_PLAYAUDIO_PRIORITY.java
new file mode 100644
index 0000000..09cb506
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PLAYAUDIO_PRIORITY.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 语音播报优先级
+ * @date 2021/2/20
+ */
+public enum EM_PLAYAUDIO_PRIORITY {
+ /**
+ * 未知
+ */
+ EM_PLAYAUDIO_PRIORITY_UNKNOWN,
+ /**
+ * 插入播放队列最前端,播放完该文件后播放原来的文件
+ */
+ EM_PLAYAUDIO_PRIORITY_FRONT,
+ /**
+ * 插入播放队列最后,等待其它文件播放完再播放该文件
+ */
+ EM_PLAYAUDIO_PRIORITY_BACK,
+ /**
+ * 优先级同 EM_PLAYAUDIO_PRIORITY_FRONT,但取消队列中正在播放文件
+ */
+ EM_PLAYAUDIO_PRIORITY_EMERGENCY;
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PLAY_WITH_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_PLAY_WITH_MODE.java
new file mode 100644
index 0000000..425a079
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PLAY_WITH_MODE.java
@@ -0,0 +1,59 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 文件所属的模式
+ * @date 2020/9/10
+ */
+public enum EM_PLAY_WITH_MODE {
+ /**
+ * 未知
+ */
+ EM_PLAY_WITH_MODE_UNKNOWN(0, "未知"),
+ /**
+ * 识别模式
+ */
+ EM_PLAY_WITH_MODE_RECOGNITION(1, "识别"),
+ /**
+ * 信息发布模式
+ */
+ EM_PLAY_WITH_MODE_INFORMATION_RELEASE(2, "信息发布"),
+ /**
+ * 主界面模式
+ */
+ EM_PLAY_WITH_MODE_MAIN_INTERFACE(3, "主界面");
+
+ private EM_PLAY_WITH_MODE(int mode, String desc) {
+ this.mode = mode;
+ this.desc = desc;
+ }
+
+ private int mode;
+ private String desc;
+
+ public int getMode() {
+ return mode;
+ }
+
+ public void setMode(int mode) {
+ this.mode = mode;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+
+ public static EM_PLAY_WITH_MODE getPlayMode(int mode) {
+ for (EM_PLAY_WITH_MODE playMode : EM_PLAY_WITH_MODE.values()) {
+ if (playMode.getMode() == mode) {
+ return playMode;
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_POWER_REGULATION_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_POWER_REGULATION_TYPE.java
new file mode 100644
index 0000000..bb0c756
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_POWER_REGULATION_TYPE.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 功率调节类型
+* @date 2022/08/31 14:44:15
+*/
+public enum EM_POWER_REGULATION_TYPE {
+/**
+未知
+*/
+EM_POWER_REGULATION_UNKNOWN(-1,"未知"),
+/**
+自动
+*/
+EM_POWER_REGULATION_AUTO(0,"自动"),
+/**
+低
+*/
+EM_POWER_REGULATION_LOW(1,"低"),
+/**
+中
+*/
+EM_POWER_REGULATION_MEDIUM(2,"中"),
+/**
+高
+*/
+EM_POWER_REGULATION_HIGH(3,"高");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_POWER_REGULATION_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_POWER_REGULATION_TYPE enumType : EM_POWER_REGULATION_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_POWER_REGULATION_TYPE enumType : EM_POWER_REGULATION_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_POWER_REGULATION_TYPE getEnum(int value) {
+ for (EM_POWER_REGULATION_TYPE e : EM_POWER_REGULATION_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_POWER_REGULATION_TYPE.EM_POWER_REGULATION_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PREALARM.java b/src/main/java/com/netsdk/lib/enumeration/EM_PREALARM.java
new file mode 100644
index 0000000..b952290
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PREALARM.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 是否为违规预警图片
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:00
+ */
+public class EM_PREALARM extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_PREALARM_UNKNOWN = -1;
+ /**
+ * 机动车违章事件
+ */
+ public static final int EM_PREALARM_VIOLATION_EVENT = 0;
+ /**
+ * 机动车违章预警事件
+ */
+ public static final int EM_PREALARM_VIOLATION_WARNING_EVENT = 1;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PRESSING_PLATE_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_PRESSING_PLATE_STATE.java
new file mode 100644
index 0000000..7658708
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PRESSING_PLATE_STATE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 压板状态
+* @date 2022/06/28 19:44:56
+*/
+public enum EM_PRESSING_PLATE_STATE {
+/**
+未知
+*/
+EM_PRESSING_PLATE_STATE_UNKNOWN(0,"未知"),
+/**
+断开
+*/
+EM_PRESSING_PLATE_STATE_DISCONNECT(1,"断开"),
+/**
+闭合
+*/
+EM_PRESSING_PLATE_STATE_CLOSE(2,"闭合");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_PRESSING_PLATE_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_PRESSING_PLATE_STATE enumType : EM_PRESSING_PLATE_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_PRESSING_PLATE_STATE enumType : EM_PRESSING_PLATE_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_PRESSING_PLATE_STATE getEnum(int value) {
+ for (EM_PRESSING_PLATE_STATE e : EM_PRESSING_PLATE_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_PRESSING_PLATE_STATE.EM_PRESSING_PLATE_STATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PRIVACY_MASKING_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_PRIVACY_MASKING_TYPE.java
new file mode 100644
index 0000000..912d82a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PRIVACY_MASKING_TYPE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 遮挡块形状
+ * @date 2022/07/21 13:40:56
+ */
+public enum EM_PRIVACY_MASKING_TYPE {
+ /**
+ * 未知类型
+ */
+ EM_MASKING_TYPE_UNKNOWN(0, "未知类型"),
+ /**
+ * 矩形
+ */
+ EM_MASKING_TYPE_RECT(1, "矩形"),
+ /**
+ * 多边形
+ */
+ EM_MASKING_TYPE_POLYGON(2, "多边形");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_PRIVACY_MASKING_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_PRIVACY_MASKING_TYPE enumType : EM_PRIVACY_MASKING_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_PRIVACY_MASKING_TYPE enumType : EM_PRIVACY_MASKING_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PRIVACY_MASKING_VERSION.java b/src/main/java/com/netsdk/lib/enumeration/EM_PRIVACY_MASKING_VERSION.java
new file mode 100644
index 0000000..c6ce5fd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PRIVACY_MASKING_VERSION.java
@@ -0,0 +1,61 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 隐私遮档版本号
+ * @date 2022/07/21 13:40:56
+ */
+public enum EM_PRIVACY_MASKING_VERSION {
+ /**
+ * 未知类型
+ */
+ EM_PRIVACY_MASKING_UNKNOWN(0, "未知类型"),
+ /**
+ * V1:第一版本隐私遮档算法(原始隐私遮档算法,使用配置)
+ */
+ EM_PRIVACY_MASKING_V1(1, "V1:第一版本隐私遮档算法(原始隐私遮档算法,使用配置)"),
+ /**
+ * V2:第二版本的隐私遮档算法(基于视场角的新算法,使用接口)
+ */
+ EM_PRIVACY_MASKING_V2(2, "V2:第二版本的隐私遮档算法(基于视场角的新算法,使用接口)"),
+ /**
+ * V3:球机和IPC协议统一的版本
+ */
+ EM_PRIVACY_MASKING_V3(3, "V3:球机和IPC协议统一的版本");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_PRIVACY_MASKING_VERSION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_PRIVACY_MASKING_VERSION enumType : EM_PRIVACY_MASKING_VERSION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_PRIVACY_MASKING_VERSION enumType : EM_PRIVACY_MASKING_VERSION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PRIVACY_MASK_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_PRIVACY_MASK_TYPE.java
new file mode 100644
index 0000000..aaabda6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PRIVACY_MASK_TYPE.java
@@ -0,0 +1,52 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 隐私保护的物体类型
+ * @date 2021/01/11
+ */
+public enum EM_PRIVACY_MASK_TYPE {
+ // 未知类型
+ EM_PRIVACY_MASK_UNKNOWN(0, "未知类型"),
+
+ // 人脸
+ EM_PRIVACY_MASK_HUMAN_FACE(1, "人脸"),
+
+ // 人体
+ EM_PRIVACY_MASK_HUMAN(2, "人体");
+
+ private int value;
+ private String note;
+
+ private EM_PRIVACY_MASK_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_PRIVACY_MASK_TYPE enumType : EM_PRIVACY_MASK_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_PRIVACY_MASK_TYPE enumType : EM_PRIVACY_MASK_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PROCESS_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_PROCESS_MODE.java
new file mode 100644
index 0000000..da70754
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PROCESS_MODE.java
@@ -0,0 +1,68 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 处理方式
+ * @date 2021/9/9
+ */
+public enum EM_PROCESS_MODE {
+/**未知*/
+EM_PROCESS_MODE_UNKNOWN(-1,"未知"),
+/**自弃*/
+EM_PROCESS_MODE_ABANDON_ONESELF(0,"自弃"),
+/**放行*/
+EM_PROCESS_MODE_RELEASE(1,"放行"),
+/**物品保管*/
+EM_PROCESS_MODE_STORAGE_OF_ARTICLES(2,"物品保管"),
+/**移交公安*/
+EM_PROCESS_MODE_TRANSFER_TO_SECURITY(3,"移交公安"),
+/**自行处理*/
+EM_PROCESS_MODE_DISCRETION(4,"自行处理"),
+/**误报*/
+EM_PROCESS_MODE_FALSE_ALARM(5,"误报");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_PROCESS_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_PROCESS_MODE enumType : EM_PROCESS_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_PROCESS_MODE enumType : EM_PROCESS_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_PROCESS_MODE getEnum(int value) {
+ for (EM_PROCESS_MODE e : EM_PROCESS_MODE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_PROCESS_MODE.EM_PROCESS_MODE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PROPERTIES_VALUE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_PROPERTIES_VALUE_TYPE.java
new file mode 100644
index 0000000..8ca6b39
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PROPERTIES_VALUE_TYPE.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 属性值类型
+ * @date 2022/04/20 11:28:15
+ */
+public enum EM_PROPERTIES_VALUE_TYPE {
+ /**
+ * 未知
+ */
+ EM_PROPERTIES_VALUE_UNKNOWN(0, "未知"),
+ /**
+ * int类型,1,100,1000
+ */
+ EM_PROPERTIES_VALUE_INT(1, "int类型,1,100,1000"),
+ /**
+ * bool类型,true,false
+ */
+ EM_PROPERTIES_VALUE_BOOL(2, "bool类型,true,false"),
+ /**
+ * string类型, 1 , 100 , 1000
+ */
+ EM_PROPERTIES_VALUE_STRING(3, "string类型, 1 , 100 , 1000 "),
+ /**
+ * int数组类型, [1,2,3]
+ */
+ EM_PROPERTIES_VALUE_INTARRAY(4, "int数组类型, [1,2,3] ");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_PROPERTIES_VALUE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_PROPERTIES_VALUE_TYPE enumType : EM_PROPERTIES_VALUE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_PROPERTIES_VALUE_TYPE enumType : EM_PROPERTIES_VALUE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_PROPERTIES_VALUE_TYPE getEnum(int value) {
+ for (EM_PROPERTIES_VALUE_TYPE e : EM_PROPERTIES_VALUE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_PROPERTIES_VALUE_TYPE.EM_PROPERTIES_VALUE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PTZ_MOVING_RESULT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_PTZ_MOVING_RESULT_TYPE.java
new file mode 100644
index 0000000..947be56
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PTZ_MOVING_RESULT_TYPE.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 运动移动检测结果类型
+* @date 2022/08/03 14:26:52
+*/
+public enum EM_PTZ_MOVING_RESULT_TYPE {
+/**
+未知
+*/
+EM_PTZ_MOVING_UNKNOWN(0,"未知"),
+/**
+检测正常
+*/
+EM_PTZ_MOVING_NORMAL(1,"检测正常"),
+/**
+不按指令运动
+*/
+EM_PTZ_MOVING_NOTOBEY(2,"不按指令运动"),
+/**
+不能运动
+*/
+EM_PTZ_MOVING_NOTMOVE(3,"不能运动"),
+/**
+未做检测
+*/
+EM_PTZ_MOVING_NOTDETECT(4,"未做检测");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_PTZ_MOVING_RESULT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_PTZ_MOVING_RESULT_TYPE enumType : EM_PTZ_MOVING_RESULT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_PTZ_MOVING_RESULT_TYPE enumType : EM_PTZ_MOVING_RESULT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_PTZ_MOVING_RESULT_TYPE getEnum(int value) {
+ for (EM_PTZ_MOVING_RESULT_TYPE e : EM_PTZ_MOVING_RESULT_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_PTZ_MOVING_RESULT_TYPE.EM_PTZ_MOVING_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_PTZ_UNSUPPORT_DIRECTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_PTZ_UNSUPPORT_DIRECTION.java
new file mode 100644
index 0000000..5d4010c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_PTZ_UNSUPPORT_DIRECTION.java
@@ -0,0 +1,71 @@
+package com.netsdk.lib.enumeration;
+/**
+ * @author 251823
+ * @description 云台不支持的转动方向
+ * @date 2021/02/05
+ */
+public enum EM_PTZ_UNSUPPORT_DIRECTION {
+
+ // 未知
+ EM_PTZ_UNSUPPORT_DIRECTION_UNKNOWN(0, "未知"),
+
+ // 上
+ EM_PTZ_UNSUPPORT_DIRECTION_UP(1, "上"),
+
+ // 下
+ EM_PTZ_UNSUPPORT_DIRECTION_DOWN(2, "下"),
+
+ // 左
+ EM_PTZ_UNSUPPORT_DIRECTION_LEFT(3, "左"),
+
+ // 右
+ EM_PTZ_UNSUPPORT_DIRECTION_RIGHT(4, "右"),
+
+ // 左上
+ EM_PTZ_UNSUPPORT_DIRECTION_LEFTUP(5, "左上"),
+
+ // 右上
+ EM_PTZ_UNSUPPORT_DIRECTION_RIGHTUP(6, "右上"),
+
+ // 左下
+ EM_PTZ_UNSUPPORT_DIRECTION_LEFTDOWN(7, "左下"),
+
+ // 右下
+ EM_PTZ_UNSUPPORT_DIRECTION_RIGHTDOWN(8, "右下");
+
+
+ private int value;
+ private String note;
+
+ private EM_PTZ_UNSUPPORT_DIRECTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_PTZ_UNSUPPORT_DIRECTION enumType : EM_PTZ_UNSUPPORT_DIRECTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_PTZ_UNSUPPORT_DIRECTION enumType : EM_PTZ_UNSUPPORT_DIRECTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_QRCODE_IS_EXPIRED.java b/src/main/java/com/netsdk/lib/enumeration/EM_QRCODE_IS_EXPIRED.java
new file mode 100644
index 0000000..3c8347d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_QRCODE_IS_EXPIRED.java
@@ -0,0 +1,25 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 二维码是否过期
+ * @date 2021/2/22
+ */
+public enum EM_QRCODE_IS_EXPIRED {
+ /** 未知 */
+ EM_QRCODE_EXPIRED_UNKNOWN,
+ /** 未过期 */
+ EM_QRCODE_NO_EXPIRED,
+ /** 过期 */
+ EM_QRCODE_EXPIRED;
+
+ public static EM_QRCODE_IS_EXPIRED getQrCodeExpired(int expired) {
+ for (EM_QRCODE_IS_EXPIRED qrcodeExpired : EM_QRCODE_IS_EXPIRED.values()) {
+ if (qrcodeExpired.ordinal() == expired) {
+ return qrcodeExpired;
+ }
+ }
+ return EM_QRCODE_EXPIRED_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_QRCODE_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_QRCODE_STATE.java
new file mode 100644
index 0000000..d6de15b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_QRCODE_STATE.java
@@ -0,0 +1,25 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 二维码状态
+ * @date 2021/2/22
+ */
+public enum EM_QRCODE_STATE {
+ /** 未知 */
+ EM_QRCODE_STATE_UNKNOWN,
+ /** 已批准 */
+ EM_QRCODE_STATE_CLEARED,
+ /** 未批准 */
+ EM_QRCODE_STATE_NOCLEARED;
+
+ public static EM_QRCODE_STATE getQrcodeState(int state) {
+ for (EM_QRCODE_STATE qrcodeState : EM_QRCODE_STATE.values()) {
+ if (qrcodeState.ordinal() == state) {
+ return qrcodeState;
+ }
+ }
+ return EM_QRCODE_STATE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_QUERY_TEMPERATURE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_QUERY_TEMPERATURE_TYPE.java
new file mode 100644
index 0000000..1f62dab
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_QUERY_TEMPERATURE_TYPE.java
@@ -0,0 +1,53 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 温度类型
+ * @date 2021/02/22
+ */
+public enum EM_QUERY_TEMPERATURE_TYPE {
+ // 未知
+ EM_QUERY_TEMPERATURE_TYPE_UNKNOWN(-1, "未知"),
+ // 全部
+ EM_QUERY_TEMPERATURE_TYPE_ALL(0, "全部"),
+ // 低
+ EM_QUERY_TEMPERATURE_TYPE_LOW(1, "低"),
+ // 正常
+ EM_QUERY_TEMPERATURE_TYPE_NORMAL(2, "正常"),
+ // 高
+ EM_QUERY_TEMPERATURE_TYPE_HIGH(3, "高");
+
+ private int value;
+ private String note;
+
+ private EM_QUERY_TEMPERATURE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_QUERY_TEMPERATURE_TYPE enumType : EM_QUERY_TEMPERATURE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_QUERY_TEMPERATURE_TYPE enumType : EM_QUERY_TEMPERATURE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_ALARM_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_ALARM_TYPE.java
new file mode 100644
index 0000000..2375e6e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_ALARM_TYPE.java
@@ -0,0 +1,50 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 雷达报警类型
+ * @date 2021/07/21
+ */
+public enum EM_RADAR_ALARM_TYPE {
+ // 未知
+ EM_RADAR_ALARM_TYPE_UNKNOWN(0, "未知"),
+ // 报警
+ EM_RADAR_ALARM_TYPE_ALARM(1, "报警"),
+ // 预警
+ EM_RADAR_ALARM_TYPE_WARNING(2, "预警");
+
+ private int value;
+ private String note;
+
+ private EM_RADAR_ALARM_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_RADAR_ALARM_TYPE enumType : EM_RADAR_ALARM_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_RADAR_ALARM_TYPE enumType : EM_RADAR_ALARM_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_DETECTION_VEHICLE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_DETECTION_VEHICLE_TYPE.java
new file mode 100644
index 0000000..95cf229
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_DETECTION_VEHICLE_TYPE.java
@@ -0,0 +1,94 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 雷达检测车型
+* @date 2022/06/07 09:46:01
+*/
+public enum EM_RADAR_DETECTION_VEHICLE_TYPE {
+/**
+未知
+*/
+EM_RADAR_DETECTION_VEHICLE_TYPE_UNKNOWN(0,"未知"),
+/**
+中小客车
+*/
+EM_RADAR_DETECTION_VEHICLE_TYPE_MID_PASSENGER_CAR(1,"中小客车"),
+/**
+大客车
+*/
+EM_RADAR_DETECTION_VEHICLE_TYPE_MOTOR_BUS(2,"大客车"),
+/**
+小货车
+*/
+EM_RADAR_DETECTION_VEHICLE_TYPE_MICRO_TRUCK(3,"小货车"),
+/**
+中型货车
+*/
+EM_RADAR_DETECTION_VEHICLE_TYPE_MID_TRUCK(4,"中型货车"),
+/**
+大型货车
+*/
+EM_RADAR_DETECTION_VEHICLE_TYPE_LARGE_TRUCK(5,"大型货车"),
+/**
+特大货车
+*/
+EM_RADAR_DETECTION_VEHICLE_TYPE_SUPER_TRUCK(6,"特大货车"),
+/**
+集装箱车
+*/
+EM_RADAR_DETECTION_VEHICLE_TYPE_CONTAINER_CAR(7,"集装箱车"),
+/**
+摩托车
+*/
+EM_RADAR_DETECTION_VEHICLE_TYPE_MOTORCYCLE(8,"摩托车"),
+/**
+拖拉机
+*/
+EM_RADAR_DETECTION_VEHICLE_TYPE_TRACTOR(9,"拖拉机");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_RADAR_DETECTION_VEHICLE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_RADAR_DETECTION_VEHICLE_TYPE enumType : EM_RADAR_DETECTION_VEHICLE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_RADAR_DETECTION_VEHICLE_TYPE enumType : EM_RADAR_DETECTION_VEHICLE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_RADAR_DETECTION_VEHICLE_TYPE getEnum(int value) {
+ for (EM_RADAR_DETECTION_VEHICLE_TYPE e : EM_RADAR_DETECTION_VEHICLE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_RADAR_DETECTION_VEHICLE_TYPE.EM_RADAR_DETECTION_VEHICLE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_DETECT_OBJECT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_DETECT_OBJECT_TYPE.java
new file mode 100644
index 0000000..d40bf2b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_DETECT_OBJECT_TYPE.java
@@ -0,0 +1,49 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 雷达检测对象类型
+ * @date 2021/07/21
+ */
+public enum EM_RADAR_DETECT_OBJECT_TYPE {
+ // 未知
+ EM_RADAR_DETECT_OBJECT_UNKNOWN(0, "未知"),
+ // 人
+ EM_RADAR_DETECT_OBJECT_HUMAN(1, "人"),
+ // 车
+ EM_RADAR_DETECT_OBJECT_VEHICLE(2, "车");
+
+ private int value;
+ private String note;
+
+ private EM_RADAR_DETECT_OBJECT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_RADAR_DETECT_OBJECT_TYPE enumType : EM_RADAR_DETECT_OBJECT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_RADAR_DETECT_OBJECT_TYPE enumType : EM_RADAR_DETECT_OBJECT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_GETCAPS_AREASUB_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_GETCAPS_AREASUB_TYPE.java
new file mode 100644
index 0000000..c4aa7b0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_GETCAPS_AREASUB_TYPE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 设备程序所在的雷达区域
+ * @date 2022/08/04 10:13:31
+ */
+public enum EM_RADAR_GETCAPS_AREASUB_TYPE {
+ /**
+ * 未知
+ */
+ EM_RADAR_GETCAPS_AREASUB_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 扇形
+ */
+ EM_RADAR_GETCAPS_AREASUB_TYPE_SECTOR(1, "扇形"),
+ /**
+ * 椭圆
+ */
+ EM_RADAR_GETCAPS_AREASUB_TYPE_ELLIPSE(2, "椭圆");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_RADAR_GETCAPS_AREASUB_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_RADAR_GETCAPS_AREASUB_TYPE enumType : EM_RADAR_GETCAPS_AREASUB_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_RADAR_GETCAPS_AREASUB_TYPE enumType : EM_RADAR_GETCAPS_AREASUB_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_RADAR_GETCAPS_AREASUB_TYPE getEnum(int value) {
+ for (EM_RADAR_GETCAPS_AREASUB_TYPE e : EM_RADAR_GETCAPS_AREASUB_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_RADAR_GETCAPS_AREASUB_TYPE.EM_RADAR_GETCAPS_AREASUB_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_GETCAPS_RADAR_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_GETCAPS_RADAR_TYPE.java
new file mode 100644
index 0000000..4480b87
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_GETCAPS_RADAR_TYPE.java
@@ -0,0 +1,78 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 雷达类型
+ * @date 2022/08/04 10:13:32
+ */
+public enum EM_RADAR_GETCAPS_RADAR_TYPE {
+ /**
+ * 未知
+ */
+ EM_RADAR_GETCAPS_RADAR_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 单IP雷达
+ */
+ EM_RADAR_GETCAPS_RADAR_TYPE1(1, "单IP雷达"),
+ /**
+ * 雷达控制盒
+ */
+ EM_RADAR_GETCAPS_RADAR_TYPE2(2, "雷达控制盒"),
+ /**
+ * 端站一体机
+ */
+ EM_RADAR_GETCAPS_RADAR_TYPE3(3, "端站一体机"),
+ /**
+ * 室内雷达
+ */
+ EM_RADAR_GETCAPS_RADAR_TYPE4(4, "室内雷达"),
+ /**
+ * 体征雷达
+ */
+ EM_RADAR_GETCAPS_RADAR_TYPE5(5, "体征雷达");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_RADAR_GETCAPS_RADAR_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_RADAR_GETCAPS_RADAR_TYPE enumType : EM_RADAR_GETCAPS_RADAR_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_RADAR_GETCAPS_RADAR_TYPE enumType : EM_RADAR_GETCAPS_RADAR_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_RADAR_GETCAPS_RADAR_TYPE getEnum(int value) {
+ for (EM_RADAR_GETCAPS_RADAR_TYPE e : EM_RADAR_GETCAPS_RADAR_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_RADAR_GETCAPS_RADAR_TYPE.EM_RADAR_GETCAPS_RADAR_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_OBJECTTYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_OBJECTTYPE.java
new file mode 100644
index 0000000..a21311d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_OBJECTTYPE.java
@@ -0,0 +1,32 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_RADAR_OBJECTTYPE {
+ EM_RADAR_OBJECTTYPE_UNKNOWN(0,"未识别目标"),
+ EM_RADAR_OBJECTTYPE_PERSON(1,"目标为人"),
+ EM_RADAR_OBJECTTYPE_VEHICLE(2,"目标为交通工具"),
+ EM_RADAR_OBJECTTYPE_TREE(3,"目标为树"),
+ EM_RADAR_OBJECTTYPE_BUILIDING(4,"目标为建筑物"),
+ EM_RADAR_OBJECTTYPE_SCREEN(5,"目标为屏幕");
+
+ private int value;
+ private String note;
+
+ private EM_RADAR_OBJECTTYPE(int value, String note) {
+ this.value = value;
+ this.note = note;
+ }
+ public int getValue() {
+ return value;
+ }
+ public void setValue(int value) {
+ this.value = value;
+ }
+ public String getNote() {
+ return note;
+ }
+ public void setNote(String note) {
+ this.note = note;
+ }
+
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_OPERATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_OPERATE_TYPE.java
new file mode 100644
index 0000000..7458e1f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_OPERATE_TYPE.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 雷达操作类型
+ * @date 2022/08/04 10:13:33
+ */
+public enum EM_RADAR_OPERATE_TYPE {
+ /**
+ * 雷达开始升级通知,入参:NET_IN_RADAR_STARTUPGRADE,出参:NET_OUT_RADAR_STARTUPGRADE
+ */
+ EM_RADAR_OPERATE_TYPE_STARTUPGRADE(0, "雷达开始升级通知,入参:NET_IN_RADAR_STARTUPGRADE,出参:NET_OUT_RADAR_STARTUPGRADE"),
+ /**
+ * 获取雷达能力,入参:NET_IN_RADAR_GETCAPS,出参:NET_OUT_RADAR_GETCAPS
+ */
+ EM_RADAR_OPERATE_TYPE_GETCAPS(1, "获取雷达能力,入参:NET_IN_RADAR_GETCAPS,出参:NET_OUT_RADAR_GETCAPS"),
+ /**
+ * 获取雷达状态,入参:NET_IN_RADAR_GETSTATUS,出参:NET_OUT_RADAR_GETSTATUS
+ */
+ EM_RADAR_OPERATE_TYPE_GETSTATUS(2, "获取雷达状态,入参:NET_IN_RADAR_GETSTATUS,出参:NET_OUT_RADAR_GETSTATUS"),
+ /**
+ * 计算图片对应的地图实际长度,入参:NET_IN_RADAR_CALCULATEREALSIZE,出参:NET_OUT_RADAR_CALCULATEREALSIZE
+ */
+ EM_RADAR_OPERATE_TYPE_CALCULATEREALSIZE(3, "计算图片对应的地图实际长度,入参:NET_IN_RADAR_CALCULATEREALSIZE,出参:NET_OUT_RADAR_CALCULATEREALSIZE"),
+ /**
+ * 雷球校准配置下发,入参:NET_IN_RADAR_SETCALIBRATION,出参:NET_OUT_RADAR_SETCALIBRATION
+ */
+ EM_RADAR_OPERATE_TYPE_SETCALIBRATION(4, "雷球校准配置下发,入参:NET_IN_RADAR_SETCALIBRATION,出参:NET_OUT_RADAR_SETCALIBRATION");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_RADAR_OPERATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_RADAR_OPERATE_TYPE enumType : EM_RADAR_OPERATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_RADAR_OPERATE_TYPE enumType : EM_RADAR_OPERATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_RADAR_OPERATE_TYPE getEnum(int value) {
+ for (EM_RADAR_OPERATE_TYPE e : EM_RADAR_OPERATE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_RADAR_OPERATE_TYPE.EM_RADAR_OPERATE_TYPE_STARTUPGRADE;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_POINTTYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_POINTTYPE.java
new file mode 100644
index 0000000..c494b38
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_POINTTYPE.java
@@ -0,0 +1,35 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_RADAR_POINTTYPE {
+ EM_RADAR_POINTTYPE_UNKNOWN(0,"未知"),
+ EM_RADAR_POINTTYPE_ALARMPOINT(1,"当前点是报警区的报警点"),
+ EM_RADAR_POINTTYPE_LINKMONITORPOINT(2,"当前点是正在被联动监控的点"),
+ EM_RADAR_POINTTYPE_DISAPPEARTRACKPOINT(3,"当前点是消失的轨迹点");
+
+ private int value;
+ private String note;
+
+ EM_RADAR_POINTTYPE(int givenValue, String note) {
+ // TODO Auto-generated constructor stub
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public void setValue(int value) {
+ this.value = value;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public void setNote(String note) {
+ this.note = note;
+ }
+
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_STATUS.java
new file mode 100644
index 0000000..ede51bc
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RADAR_STATUS.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 雷达状态
+ * @date 2022/08/04 10:13:32
+ */
+public enum EM_RADAR_STATUS {
+ /**
+ * 未知
+ */
+ EM_RADAR_STATUS_UNKNOWN(0, "未知"),
+ /**
+ * 正常
+ */
+ EM_RADAR_STATUS_NORMAL(1, "正常"),
+ /**
+ * 异常
+ */
+ EM_RADAR_STATUS_ABNORMAL(2, "异常");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_RADAR_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_RADAR_STATUS enumType : EM_RADAR_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_RADAR_STATUS enumType : EM_RADAR_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_RADAR_STATUS getEnum(int value) {
+ for (EM_RADAR_STATUS e : EM_RADAR_STATUS.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_RADAR_STATUS.EM_RADAR_STATUS_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RAID_ERROR.java b/src/main/java/com/netsdk/lib/enumeration/EM_RAID_ERROR.java
new file mode 100644
index 0000000..688f42a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RAID_ERROR.java
@@ -0,0 +1,42 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_RAID_ERROR {
+
+ EM_RAID_ERROR_UNKNOW(0, "未知"),
+ EM_RAID_ERROR_FAILED(1, "RAID错误"), // RAID错误
+ EM_RAID_ERROR_DEGRADED(2, "RAID降级"); // RAID降级
+
+ private int value;
+ private String note;
+
+ private EM_RAID_ERROR(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_RAID_ERROR enumType : EM_RAID_ERROR.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_RAID_ERROR enumType : EM_RAID_ERROR.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RAID_ERR_SUBDISK.java b/src/main/java/com/netsdk/lib/enumeration/EM_RAID_ERR_SUBDISK.java
new file mode 100644
index 0000000..f4fc157
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RAID_ERR_SUBDISK.java
@@ -0,0 +1,44 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_RAID_ERR_SUBDISK {
+
+ EM_RAID_ERR_SUBDISK_UNKNOWN(0, "未知"), // 未知
+ EM_RAID_ERR_SUBDISK_OFFLINE(1, "离线"), // 离线
+ EM_RAID_ERR_SUBDISK_FAULTY(2, "异常"), // 异常
+ EM_RAID_ERR_SUBDISK_WRITEERR(3, "写错误"); // 写错误
+
+
+ private int value;
+ private String note;
+
+ private EM_RAID_ERR_SUBDISK(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_RAID_ERR_SUBDISK enumType : EM_RAID_ERR_SUBDISK.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_RAID_ERR_SUBDISK enumType : EM_RAID_ERR_SUBDISK.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RAIN_SHED_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_RAIN_SHED_TYPE.java
new file mode 100644
index 0000000..59848b5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RAIN_SHED_TYPE.java
@@ -0,0 +1,79 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 雨棚(伞)类型
+* @origin autoTool
+* @date 2023/02/14 20:11:39
+*/
+public enum EM_RAIN_SHED_TYPE {
+/**
+无
+*/
+EM_RAIN_SHED_TYPE_NONE(-1,"无"),
+/**
+不撑伞
+*/
+EM_RAIN_SHED_TYPE_NO_UMBRELLA(0,"不撑伞"),
+/**
+人非手撑伞
+*/
+EM_RAIN_SHED_TYPE_NOT_PEOPLE_HOLD(1,"人非手撑伞"),
+/**
+未知
+*/
+EM_RAIN_SHED_TYPE_UNKOWN(2,"未知"),
+/**
+非机动车装载雨伞
+*/
+EM_RAIN_SHED_TYPE_NO_MOTOR_UMBRELLA(3,"非机动车装载雨伞"),
+/**
+非机动车装载雨棚
+*/
+EM_RAIN_SHED_TYPE_NO_MOTOR_CANOPY(4,"非机动车装载雨棚");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_RAIN_SHED_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_RAIN_SHED_TYPE enumType : EM_RAIN_SHED_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_RAIN_SHED_TYPE enumType : EM_RAIN_SHED_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_RAIN_SHED_TYPE getEnum(int value) {
+ for (EM_RAIN_SHED_TYPE e : EM_RAIN_SHED_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_RAIN_SHED_TYPE.EM_RAIN_SHED_TYPE_NONE;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_REAL_DATA_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_REAL_DATA_TYPE.java
new file mode 100644
index 0000000..b471bab
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_REAL_DATA_TYPE.java
@@ -0,0 +1,61 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description
+ * @date 2021/3/2
+ */
+public enum EM_REAL_DATA_TYPE {
+ EM_REAL_DATA_TYPE_PRIVATE(0, "私有码流"),
+ EM_REAL_DATA_TYPE_GBPS(1, "国标PS码流"),
+ EM_REAL_DATA_TYPE_TS(2, "TS码流"),
+ EM_REAL_DATA_TYPE_MP4(3, "MP4文件"),
+ EM_REAL_DATA_TYPE_H264(4, "裸H264码流"),
+ EM_REAL_DATA_TYPE_FLV_STREAM(5, "流式FLV");
+ private int type;
+ private String desc;
+
+ public int getType() {
+ return type;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ EM_REAL_DATA_TYPE(int type, String desc) {
+ this.type = type;
+ this.desc = desc;
+ }
+
+ /**
+ * 根据type返回码流类型,默认返回私有码流
+ *
+ * @param type 码流类型
+ * @return
+ */
+ public static EM_REAL_DATA_TYPE getRealDataType(int type) {
+ for (EM_REAL_DATA_TYPE dataType : EM_REAL_DATA_TYPE.values()) {
+ if (dataType.getType() == type) {
+ return dataType;
+ }
+ }
+ return EM_REAL_DATA_TYPE_PRIVATE;
+ }
+
+ /**
+ * 根据码流类型返回枚举,如私有、ps、ts、mp4、h264、flv
+ *
+ * @param streamType
+ * @return
+ */
+ public static EM_REAL_DATA_TYPE getRealDataType(String streamType) {
+ for (EM_REAL_DATA_TYPE dataType : EM_REAL_DATA_TYPE.values()) {
+ if (dataType.getDesc().toLowerCase().contains(streamType.toLowerCase().trim())) {
+ return dataType;
+ }
+ }
+ return EM_REAL_DATA_TYPE_PRIVATE;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_REASON_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_REASON_TYPE.java
new file mode 100644
index 0000000..30c1abd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_REASON_TYPE.java
@@ -0,0 +1,79 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 音频文件预上传错误原因
+ * @date 2020/6/10
+ */
+public enum EM_REASON_TYPE {
+ /**
+ * 未知原因
+ */
+ EM_REASON_TYPE_UNKNOWN(0, "未知原因"),
+ /**
+ * 文件个数超出
+ */
+ EM_REASON_TYPE_OVERNUMBER(1, "文件个数超出"),
+ /**
+ * 文件存储已满
+ */
+ EM_REASON_TYPE_FULLSTORAGE(2, "文件存储空间已满"),
+ /**
+ * 文件太大
+ */
+ EM_REASON_TYPE_TOOLARGE_FILE(3, "该文件太大"),
+ /**
+ * 无效的文件类型
+ */
+ EM_REASON_TYPE_INVALID_FILETYPE(4, "无效的文件类型"),
+ /**
+ * 没有上传权限
+ */
+ EM_REASON_TYPE_UNAUTH_UPLOAD(5, "没有上传权限"),
+ /**
+ * 文件命名异常
+ */
+ EM_REASON_TYPE_EXCEPTION_NAME(6, "文件命名异常"),
+ /**
+ * 文件名太长
+ */
+ EM_REASON_TYPE_TOOLONG_NAME(7, "文件名太长"),
+ /**
+ * 文件名已存在
+ */
+ EM_REASON_TYPE_EXIST_NAME(8, "文件名已存在");
+ private int type;
+ private String reason;
+
+ private EM_REASON_TYPE(int type, String reson) {
+ this.type = type;
+ this.reason = reson;
+ }
+
+ public String getReason() {
+ return reason;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public static String getReason(int type) {
+ for (EM_REASON_TYPE reason : EM_REASON_TYPE.values()) {
+ if (type == reason.getType()) {
+ return reason.getReason();
+ }
+ }
+ return null;
+ }
+
+ public static EM_REASON_TYPE getReasonType(int type) {
+ for (EM_REASON_TYPE reason : EM_REASON_TYPE.values()) {
+ if (type == reason.type) {
+ return reason;
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RECORD_BACKUP_FAIL_REASON.java b/src/main/java/com/netsdk/lib/enumeration/EM_RECORD_BACKUP_FAIL_REASON.java
new file mode 100644
index 0000000..3a3b800
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RECORD_BACKUP_FAIL_REASON.java
@@ -0,0 +1,99 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 失败的原因
+ * @date 2021/11/07
+ */
+public enum EM_RECORD_BACKUP_FAIL_REASON {
+ /**
+ 未知
+ */
+ EM_RECORD_BACKUP_FAIL_REASON_UNKNOW(0,"未知"),
+ /**
+ 登入失败
+ */
+ EM_RECORD_BACKUP_FAIL_REASON_LOGIN_FAIL(1,"登入失败"),
+ /**
+ 没有查询到录像
+ */
+ EM_RECORD_BACKUP_FAIL_REASON_NO_FILES(2,"没有查询到录像"),
+ /**
+ 下载过程中网络断开
+ */
+ EM_RECORD_BACKUP_FAIL_REASON_DOWNLOAD_NET_ERROR(3,"下载过程中网络断开"),
+ /**
+ 未知错误
+ */
+ EM_RECORD_BACKUP_FAIL_REASON_UNKNOW_ERROR(4,"未知错误"),
+ /**
+ 用户名无效
+ */
+ EM_RECORD_BACKUP_FAIL_REASON_USER_NAME_NOT_VALID(5,"用户名无效"),
+ /**
+ 密码错误
+ */
+ EM_RECORD_BACKUP_FAIL_REASON_PASSWORD_NOT_VALID(6,"密码错误"),
+ /**
+ 地址被屏蔽
+ */
+ EM_RECORD_BACKUP_FAIL_REASON_PEER_HAS_BEEN_BLOCKED(7,"地址被屏蔽"),
+ /**
+ 地址在禁止访问名单内
+ */
+ EM_RECORD_BACKUP_FAIL_REASON_PEER_IN_BLOCK_LIST(8,"地址在禁止访问名单内"),
+ /**
+ 超出最大连接数
+ */
+ EM_RECORD_BACKUP_FAIL_REASON_TOO_MANY_CONNECTIONS(9,"超出最大连接数"),
+ /**
+ 账号被锁定
+ */
+ EM_RECORD_BACKUP_FAIL_REASON_ACCOUNT_HAS_BEEN_BLOCKED(10,"账号被锁定"),
+ /**
+ 登入时网络连接失败
+ */
+ EM_RECORD_BACKUP_FAIL_REASON_LOGIN_CONNECT_FAILED(11,"登入时网络连接失败"),
+ /**
+ 登入用户名或者密码错误
+ */
+ EM_RECORD_BACKUP_FAIL_REASON_USER_OR_PWD_NOT_VALID(12,"登入用户名或者密码错误"),
+ /**
+ 登入超时
+ */
+ EM_RECORD_BACKUP_FAIL_REASON_LOGIN_CONNECT_TIMEOUT(13,"登入超时");
+
+ private int value;
+ private String note;
+
+ private EM_RECORD_BACKUP_FAIL_REASON(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_RECORD_BACKUP_FAIL_REASON enumType : EM_RECORD_BACKUP_FAIL_REASON.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_RECORD_BACKUP_FAIL_REASON enumType : EM_RECORD_BACKUP_FAIL_REASON.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RECORD_BACKUP_FIND_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_RECORD_BACKUP_FIND_TYPE.java
new file mode 100644
index 0000000..a534998
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RECORD_BACKUP_FIND_TYPE.java
@@ -0,0 +1,50 @@
+package com.netsdk.lib.enumeration;
+/**
+ * @author 251823
+ * @description 根据条件查询备份任务的查询方式
+ * @date 2022/01/14
+ */
+public enum EM_RECORD_BACKUP_FIND_TYPE {
+ // 未知
+ EM_RECORD_BACKUP_FIND_TYPE_UNKNOWN(0, "未知"),
+ // 按照任务号查询
+ EM_RECORD_BACKUP_FIND_TYPE_BY_TASKID(1, "按照任务号查询"),
+ // 按照通道和录制时间段查询
+ EM_RECORD_BACKUP_FIND_TYPE_BY_CHN_AND_TIME(2, "按照通道和录制时间段查询"),
+ // 按照主动注册的设备ID查
+ EM_RECORD_BACKUP_FIND_TYPE_BY_DEVICE_ID(3,"按照主动注册的设备ID查");
+
+ private int value;
+ private String note;
+
+ private EM_RECORD_BACKUP_FIND_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_RECORD_BACKUP_FIND_TYPE enumType : EM_RECORD_BACKUP_FIND_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_RECORD_BACKUP_FIND_TYPE enumType : EM_RECORD_BACKUP_FIND_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RECORD_SNAP_FLAG_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_RECORD_SNAP_FLAG_TYPE.java
new file mode 100644
index 0000000..1da9520
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RECORD_SNAP_FLAG_TYPE.java
@@ -0,0 +1,112 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 录像或抓图文件标志
+ * @date 2022/11/03 09:21:59
+ */
+public enum EM_RECORD_SNAP_FLAG_TYPE {
+ /**
+ * 未知
+ */
+ FLAG_TYPE_UNKNOW(-1, "未知"),
+ /**
+ * 定时文件
+ */
+ FLAG_TYPE_TIMING(0, "定时文件"),
+ /**
+ * 手动文件
+ */
+ FLAG_TYPE_MANUAL(1, "手动文件"),
+ /**
+ * 重要文件
+ */
+ FLAG_TYPE_MARKED(2, "重要文件"),
+ /**
+ * 事件文件
+ */
+ FLAG_TYPE_EVENT(3, "事件文件"),
+ /**
+ * 合成图片
+ */
+ FLAG_TYPE_MOSAIC(4, "合成图片"),
+ /**
+ * 抠图图片
+ */
+ FLAG_TYPE_CUTOUT(5, "抠图图片"),
+ /**
+ * 留言文件
+ */
+ FLAG_TYPE_LEAVE_WORD(6, "留言文件"),
+ /**
+ * 对讲本地方文件
+ */
+ FLAG_TYPE_TALKBACK_LOCAL_SIDE(7, "对讲本地方文件"),
+ /**
+ * 对讲远程方文件
+ */
+ FLAG_TYPE_TALKBACK_REMOTE_SIDE(8, "对讲远程方文件"),
+ /**
+ * 浓缩视频
+ */
+ FLAG_TYPE_SYNOPSIS_VIDEO(9, "浓缩视频"),
+ /**
+ * 原始视频
+ */
+ FLAG_TYPE_ORIGINAL_VIDEO(10, "原始视频"),
+ /**
+ * 已经预处理的原始视频
+ */
+ FLAG_TYPE_PRE_ORIGINAL_VIDEO(11, "已经预处理的原始视频"),
+ /**
+ * 禁止名单图片
+ */
+ FLAG_TYPE_BLACK_PLATE(12, "禁止名单图片"),
+ /**
+ * 原始图片
+ */
+ FLAG_TYPE_ORIGINAL_PIC(13, "原始图片"),
+ /**
+ * 卡号录像
+ */
+ FLAG_TYPE_CARD(14, "卡号录像"),
+ /**
+
+ */
+ FLAG_TYPE_MAX(128, "");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_RECORD_SNAP_FLAG_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_RECORD_SNAP_FLAG_TYPE enumType : EM_RECORD_SNAP_FLAG_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_RECORD_SNAP_FLAG_TYPE enumType : EM_RECORD_SNAP_FLAG_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RECORD_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_RECORD_TYPE.java
new file mode 100644
index 0000000..0065f7c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RECORD_TYPE.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 录像类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_RECORD_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_RECORD_TYPE_UNKNOWN = 0;
+ /**
+ * 普通录像
+ */
+ public static final int EM_RECORD_TYPE_COMMON = 1;
+ /**
+ * 报警录像
+ */
+ public static final int EM_RECORD_TYPE_ALARM2 = 2;
+ /**
+ * 动检录像
+ */
+ public static final int EM_RECORD_TYPE_MOTIONDETECT = 3;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RELAY_STATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_RELAY_STATE_TYPE.java
new file mode 100644
index 0000000..468b103
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RELAY_STATE_TYPE.java
@@ -0,0 +1,52 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 继电器状态
+ * @date 2020/12/14
+ */
+public enum EM_RELAY_STATE_TYPE {
+ // 未知
+ EM_RELAY_STATE_TYPE_UNKNOWN(-1, "未知"),
+ // 关
+ EM_RELAY_STATE_TYPE_CLOSE(0, "关"),
+ // 开
+ EM_RELAY_STATE_TYPE_OPEN(1, "开"),
+ // 不支持
+ EM_RELAY_STATE_TYPE_NO_SUPPORT(255, "不支持");
+
+ private int value;
+ private String note;
+
+ private EM_RELAY_STATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_RELAY_STATE_TYPE enumType : EM_RELAY_STATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_RELAY_STATE_TYPE enumType : EM_RELAY_STATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RELAY_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_RELAY_TYPE.java
new file mode 100644
index 0000000..15ebc66
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RELAY_TYPE.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 是否启用中继转发
+* @date 2022/08/31 14:44:16
+*/
+public enum EM_RELAY_TYPE {
+/**
+未知
+*/
+EM_RELAY_UNKNOWN(-1,"未知"),
+/**
+关闭
+*/
+EM_RELAY_CLOSED(0,"关闭"),
+/**
+手动
+*/
+EM_RELAY_MANUAL(1,"手动"),
+/**
+自动
+*/
+EM_RELAY_AUTO(2,"自动");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_RELAY_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_RELAY_TYPE enumType : EM_RELAY_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_RELAY_TYPE enumType : EM_RELAY_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_RELAY_TYPE getEnum(int value) {
+ for (EM_RELAY_TYPE e : EM_RELAY_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_RELAY_TYPE.EM_RELAY_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RESPIRATOR_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_RESPIRATOR_STATE.java
new file mode 100644
index 0000000..02df349
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RESPIRATOR_STATE.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 呼吸器状态
+* @date 2022/06/28 19:44:55
+*/
+public enum EM_RESPIRATOR_STATE {
+/**
+未知
+*/
+EM_RESPIRATOR_STATE_UNKNOWN(0,"未知"),
+/**
+正常
+*/
+EM_RESPIRATOR_STATE_NORMAL(1,"正常"),
+/**
+硅胶变色
+*/
+EM_RESPIRATOR_STATE_SILICA_GEL_COLOR_CHANGE(2,"硅胶变色"),
+/**
+硅胶桶破损
+*/
+EM_RESPIRATOR_STATE_SILICA_GEL_BARREL_BROKEN(3,"硅胶桶破损"),
+/**
+油位异常
+*/
+EM_RESPIRATOR_STATE_ABNORMAL_OIL_LEVEL(4,"油位异常");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_RESPIRATOR_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_RESPIRATOR_STATE enumType : EM_RESPIRATOR_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_RESPIRATOR_STATE enumType : EM_RESPIRATOR_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_RESPIRATOR_STATE getEnum(int value) {
+ for (EM_RESPIRATOR_STATE e : EM_RESPIRATOR_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_RESPIRATOR_STATE.EM_RESPIRATOR_STATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_RPC_NETAPP_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_RPC_NETAPP_TYPE.java
new file mode 100644
index 0000000..cfbebd3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_RPC_NETAPP_TYPE.java
@@ -0,0 +1,33 @@
+package com.netsdk.lib.enumeration;
+/**
+ * @author 251823
+ * @description 网络应用组件 操作类型
+ * @date 2021/09/01
+ */
+public enum EM_RPC_NETAPP_TYPE {
+ /**
+ *获得网络资源统计, pstuIn 对应 NET_IN_NETAPP_GET_NET_RESOURCE_STAT*,pstuOut对应 NET_OUT_NETAPP_GET_NET_RESOURCE_STAT*
+ */
+ EM_RPC_NETAPP_TYPE_GET_NET_RESOURCE_STAT(0),
+ /**
+ * 获取3G网络的信号强度, pstuIn 对应 NET_IN_NETAPP_GET_MOBILE_RSSI*, pstuOut 对应 NET_OUT_NETAPP_GET_MOBILE_RSSI*
+ */
+ EM_RPC_NETAPP_TYPE_GET_MOBILE_RSSI(1),
+ /**
+ * 获取所有移动网络接口, pstuIn 对应 NET_IN_NETAPP_GET_MOBILE_INTERFACE*,pstuOut对应 NET_OUT_NETAPP_GET_MOBILE_INTERFACE*
+ */
+ EM_PRC_NETAPP_TYPE_GET_MOBILE_INTERFACE(2),
+ /**
+ * 获取拨号信息, pstuIn 对应 NET_IN_NETAPP_GET_DIAL_INFO*,pstuOut对应 NET_OUT_NETAPP_GET_DIAL_INFO*
+ */
+ EM_PRC_NETAPP_TYPE_GET_DIAL_INFO(3);
+
+ private final int id;
+ private EM_RPC_NETAPP_TYPE(int id){
+ this.id=id;
+ }
+
+ public int getId() {
+ return id;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SAVE_COLLECTION_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SAVE_COLLECTION_TYPE.java
new file mode 100644
index 0000000..8557e8d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SAVE_COLLECTION_TYPE.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 预案类型
+* @origin autoTool
+* @date 2023/03/06 15:54:24
+*/
+public enum EM_SAVE_COLLECTION_TYPE {
+/**
+未知
+*/
+EM_SAVE_COLLECTION_UNKNOWN(0,"未知"),
+/**
+视频预案
+*/
+EM_SAVE_COLLECTION_VIDEO(1,"视频预案"),
+/**
+附加预案
+*/
+EM_SAVE_COLLECTION_ADDITIONAL(2,"附加预案");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_SAVE_COLLECTION_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_SAVE_COLLECTION_TYPE enumType : EM_SAVE_COLLECTION_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_SAVE_COLLECTION_TYPE enumType : EM_SAVE_COLLECTION_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_SAVE_COLLECTION_TYPE getEnum(int value) {
+ for (EM_SAVE_COLLECTION_TYPE e : EM_SAVE_COLLECTION_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SAVE_COLLECTION_TYPE.EM_SAVE_COLLECTION_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SCENE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SCENE_TYPE.java
new file mode 100644
index 0000000..091585a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SCENE_TYPE.java
@@ -0,0 +1,191 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 应用场景, 内容与EM_SCENE_CLASS_TYPE一致
+ * @date 2021/01/16
+ */
+public enum EM_SCENE_TYPE {
+
+ // 未知
+ EM_SCENE_UNKNOW(0, "未知"),
+ // 普通场景
+ EM_SCENE_NORMAL(1, "Normal"),
+ // 交通场景
+ EM_SCENE_TRAFFIC(2, "Traffic"),
+ // 交通巡视
+ EM_SCENE_TRAFFIC_PATROL(3, "TrafficPatrol"),
+ // 人脸检测/目标识别
+ EM_SCENE_FACEDETECTION(4, "FaceDetection"),
+ // ATM
+ EM_SCENE_ATM(5, "ATM"),
+ // 室内行为分析,和普通规则相同,对室内场景的算法优化版
+ EM_SCENE_INDOOR(6, "Indoor"),
+ // 目标识别
+ EM_SCENE_FACERECOGNITION(7, "FaceRecognition"),
+ //
+ EM_SCENE_PS(8, ""),
+ // 客流量统计
+ EM_SCENE_NUMBERSTAT(9, "NumberStat"),
+ // 热度图
+ EM_SCENE_HEAT_MAP(10, "HeatMap"),
+ // 视频诊断
+ EM_SCENE_VIDEODIAGNOSIS(11, "VideoDiagnosis"),
+ // 车辆特征检测分析
+ EM_SCENE_VEHICLEANALYSE(12, "VehicleAnalyse"),
+ // 自动录播
+ EM_SCENE_COURSERECORD(13, "CourseRecord"),
+ // 车载场景(车载行业用,不同于智能交通的Traffic)
+ EM_SCENE_VEHICLE(14, "Vehicle"),
+ // 起立检测
+ EM_SCENE_STANDUPDETECTION(15, "StandUpDetection"),
+ // 卡口
+ EM_SCENE_GATE(16, "Gate"),
+ // 多预置点人脸检测,配置一条规则但可以在不同预置点下生效
+ EM_SCENE_SDFACEDETECTION(17, "SDFaceDetect"),
+ // 球机热度图计划
+ EM_SCENE_HEAT_MAP_PLAN(18, "HeatMapPlan"),
+ // 球机客流量统计计划
+ EM_SCENE_NUMBERSTAT_PLAN(19, "NumberStatPlan"),
+ // 金融人脸检测,包括正常人脸、异常人脸、相邻人脸、头盔人脸等针对ATM场景特殊优化
+ EM_SCENE_ATMFD(20, "ATMFD"),
+ // 高速交通事件检测
+ EM_SCENE_HIGHWAY(21, "Highway"),
+ // 城市交通事件检测
+ EM_SCENE_CITY(22, "City"),
+ // 民用简易跟踪
+ EM_SCENE_LETRACK(23, "LeTrack"),
+ // 打靶相机
+ EM_SCENE_SCR(24, "SCR"),
+ // 立体视觉(双目)
+ EM_SCENE_STEREO_VISION(25, "StereoVision"),
+ // 人体检测
+ EM_SCENE_HUMANDETECT(26, "HumanDetect"),
+ // 人脸分析(同时支持人脸检测、目标识别、人脸属性等综合型业务)
+ EM_SCENE_FACEANALYSIS(27, "FaceAnalysis"),
+ // X光检测
+ EM_SCENE_XRAY_DETECTION(28, "XRayDetection"),
+ // 双目相机客流量统计
+ EM_SCENE_STEREO_NUMBER(29, "StereoNumber"),
+ // 人群分布图
+ EM_SCENE_CROWD_DISTRI_MAP(30, "CrowdDistriMap"),
+ // 目标检测(含人机非等物体)
+ EM_SCENE_OBJECTDETECT(31, "ObjectDetect"),
+ // IVSS人脸检测
+ EM_SCENE_FACEATTRIBUTE(32, "FaceAttribute"),
+ // IVSS目标识别
+ EM_SCENE_FACECOMPARE(33, "FaceCompare"),
+ // 立体行为分析(典型场景ATM舱)
+ EM_SCENE_STEREO_BEHAVIOR(34, "StereoBehavior"),
+ // 智慧城管
+ EM_SCENE_INTELLICITYMANAGER(35, "IntelliCityMgr"),
+ // 防护舱(ATM舱内)
+ EM_SCENE_PROTECTIVECABIN(36, "ProtectiveCabin"),
+ // 飞机行为检测
+ EM_SCENE_AIRPLANEDETECT(37, "AirplaneDetect"),
+ // 人群态势(人群分布图服务)
+ EM_SCENE_CROWDPOSTURE(38, "CrowdPosture"),
+ // 打电话检测
+ EM_SCENE_PHONECALLDETECT(39, "PhoneCallDetect"),
+ // 烟雾检测
+ EM_SCENE_SMOKEDETECTION(40, "SmokeDetection"),
+ // 船只检测
+ EM_SCENE_BOATDETECTION(41, "BoatDetection"),
+ // 吸烟检测
+ EM_SCENE_SMOKINGDETECT(42, "SmokingDetect"),
+ // 水利监测
+ EM_SCENE_WATERMONITOR(43, "WaterMonitor"),
+ // 生成图规则
+ EM_SCENE_GENERATEGRAPHDETECTION(44, "GenerateGraphDetection"),
+ // 交通停车
+ EM_SCENE_TRAFFIC_PARK(45, "TrafficPark"),
+ // 作业检测
+ EM_SCENE_OPERATEMONITOR(46, "OperateMonitor"),
+ // 智慧零售大类
+ EM_SCENE_INTELLI_RETAIL(47, "IntelliRetail"),
+ // 教育智慧课堂
+ EM_SCENE_CLASSROOM_ANALYSE(48, "ClassroomAnalyse"),
+ // 特征向量提取大类
+ EM_SCENE_FEATURE_ABSTRACT(49, "FeatureAbstract"),
+ // 人体检测
+ EM_SCENE_FACEBODY_DETECT(50, "FaceBodyDetect"),
+ // 人体识别
+ EM_SCENE_FACEBODY_ANALYSE(51, "FaceBodyAnalyse"),
+ // 车辆密度
+ EM_SCENE_VEHICLES_DISTRI(52, "VehiclesDistri"),
+ // 智慧养殖检测
+ EM_SCENE_INTELLI_BREED(53, "IntelliBreed"),
+ //
+ EM_SCENE_INTELLI_PS(54, ""),
+ // 电力检测
+ EM_SCENE_ELECTRIC_DETECT(55, "ElectricDetect"),
+ // 雷检检测
+ EM_SCENE_RADAR_DETECT(56, "RadarDetect"),
+ // 车位检测大类
+ EM_SCENE_PARKINGSPACE(57, "ParkingSpace"),
+ // 智慧金融
+ EM_SCENE_INTELLI_FINANCE(58, "IntelliFinance"),
+ // CrowdAbnormal
+ EM_SCENE_CROWD_ABNORMAL(59, "CrowdAbnormal"),
+ // 超温检测
+ EM_SCENE_ANATOMYTEMP_DETECT(60, "AnatomyTempDetect"),
+ // 天气监控
+ EM_SCENE_WEATHER_MONITOR(61, "WeatherMonitor"),
+ // 电梯门禁
+ EM_SCENE_ELEVATOR_ACCESS_CONTROL(62, "ElevatorAccessControl"),
+ // 违章建筑
+ EM_SCENE_BREAK_RULE_BUILDING(63, "BreakRuleBuilding"),
+ // 全景交通
+ EM_SCENE_PANORAMA_TRAFFIC(64, "PanoramaTraffic"),
+ // 人像检测
+ EM_SCENE_PORTRAIT_DETECT(65, "PortraitDetect"),
+ // 传送带阻塞
+ EM_SCENE_CONVEY_OR_BLOCK(66, "ConveyorBlock"),
+ // 厨房有害动物检测
+ EM_SCENE_KITCHEN_ANIMAL(67, "KitchenAnimal"),
+ // 万物检测
+ EM_SCENE_ALLSEEINGEYE(68, "AllSeeingEye"),
+ // 驾驶行为分析
+ EM_SCENE_DRIVE(69, "Drive"),
+ // 高级驾驶辅助系统
+ EM_SCENE_DRIVEASSISTANT(70, "DriveAssistant"),
+ // 车内驾驶舱监测
+ EM_SCENE_INCABINMONITOR(71, "InCabinMonitor"),
+ // 盲区检测
+ EM_SCENE_BLINDSPOTDETECTION(72, "BlindSpotDetection");
+
+ private int value;
+ private String note;
+
+ private EM_SCENE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SCENE_TYPE enumType : EM_SCENE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SCENE_TYPE enumType : EM_SCENE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SCREEN_TEXT_COLOR.java b/src/main/java/com/netsdk/lib/enumeration/EM_SCREEN_TEXT_COLOR.java
new file mode 100644
index 0000000..87aa291
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SCREEN_TEXT_COLOR.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 屏幕文本颜色
+ * @date 2022/11/28 16:20:21
+ */
+public enum EM_SCREEN_TEXT_COLOR {
+ /**
+ * 未知
+ */
+ EM_SCREEN_TEXT_COLOR_UNKNOWN(-1, "未知"),
+ /**
+ * 绿色
+ */
+ EM_SCREEN_TEXT_COLOR_GREEN(0, "绿色"),
+ /**
+ * 红色
+ */
+ EM_SCREEN_TEXT_COLOR_RED(1, "红色"),
+ /**
+ * 黄色
+ */
+ EM_SCREEN_TEXT_COLOR_YELLOW(2, "黄色"),
+ /**
+ * 白色
+ */
+ EM_SCREEN_TEXT_COLOR_WHITE(3, "白色");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_SCREEN_TEXT_COLOR(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SCREEN_TEXT_COLOR enumType : EM_SCREEN_TEXT_COLOR.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SCREEN_TEXT_COLOR enumType : EM_SCREEN_TEXT_COLOR.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SCREEN_TEXT_ROLL_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SCREEN_TEXT_ROLL_MODE.java
new file mode 100644
index 0000000..d1bddd6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SCREEN_TEXT_ROLL_MODE.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 屏幕文本滚动模式
+ * @date 2022/11/28 16:20:32
+ */
+public enum EM_SCREEN_TEXT_ROLL_MODE {
+ /**
+ * 未知
+ */
+ EM_SCREEN_TEXT_ROLL_MODE_UNKNOWN(-1, "未知"),
+ /**
+ * 不滚动
+ */
+ EM_SCREEN_TEXT_ROLL_MODE_NO(0, "不滚动"),
+ /**
+ * 左右滚动
+ */
+ EM_SCREEN_TEXT_ROLL_MODE_LEFT_RIGHT(1, "左右滚动"),
+ /**
+ * 上下翻页滚动
+ */
+ EM_SCREEN_TEXT_ROLL_MODE_UP_DOWN(2, "上下翻页滚动"),
+ /**
+ * 截取(超出部分直接截断显示)
+ */
+ EM_SCREEN_TEXT_ROLL_MODE_CUT_OUT(3, "截取(超出部分直接截断显示)");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_SCREEN_TEXT_ROLL_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SCREEN_TEXT_ROLL_MODE enumType : EM_SCREEN_TEXT_ROLL_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SCREEN_TEXT_ROLL_MODE enumType : EM_SCREEN_TEXT_ROLL_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SCREEN_TEXT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SCREEN_TEXT_TYPE.java
new file mode 100644
index 0000000..e231d82
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SCREEN_TEXT_TYPE.java
@@ -0,0 +1,65 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 屏幕文本类型
+ * @date 2022/11/28 16:20:10
+ */
+public enum EM_SCREEN_TEXT_TYPE {
+ /**
+ * 未知
+ */
+ EM_SCREEN_TEXT_TYPE_UNKNOWN(-1, "未知"),
+ /**
+ * 普通
+ */
+ EM_SCREEN_TEXT_TYPE_ORDINARY(0, "普通"),
+ /**
+ * 本地时间
+ */
+ EM_SCREEN_TEXT_TYPE_LOCAL_TIME(1, "本地时间"),
+ /**
+ * 二维码
+ */
+ EM_SCREEN_TEXT_TYPE_QR_CODE(2, "二维码"),
+ /**
+ * 资源文件
+ */
+ EM_SCREEN_TEXT_TYPE_RESOURCE(3, "资源文件");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_SCREEN_TEXT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SCREEN_TEXT_TYPE enumType : EM_SCREEN_TEXT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SCREEN_TEXT_TYPE enumType : EM_SCREEN_TEXT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SDK_LOG_QUERY_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SDK_LOG_QUERY_TYPE.java
new file mode 100644
index 0000000..02087ed
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SDK_LOG_QUERY_TYPE.java
@@ -0,0 +1,50 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 日志查询类型
+ *
+ * @author 47081
+ */
+public enum EM_SDK_LOG_QUERY_TYPE {
+ /**
+ * 所有日志
+ */
+ DHLOG_ALL,
+ /**
+ * 系统日志
+ */
+ DHLOG_SYSTEM,
+ /**
+ * 配置日志
+ */
+ DHLOG_CONFIG,
+ /**
+ * 存储相关
+ */
+ DHLOG_STORAGE,
+ /**
+ * 报警日志
+ */
+ DHLOG_ALARM,
+ /**
+ * 录象相关
+ */
+ DHLOG_RECORD,
+ /**
+ * 帐号相关
+ */
+ DHLOG_ACCOUNT,
+ /**
+ * 清除日志
+ */
+ DHLOG_CLEAR,
+ /**
+ * 回放相关
+ */
+ DHLOG_PLAYBACK,
+ /**
+ * 前端管理运行相关
+ */
+ DHLOG_MANAGER
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SD_ENCRYPT_FLAG.java b/src/main/java/com/netsdk/lib/enumeration/EM_SD_ENCRYPT_FLAG.java
new file mode 100644
index 0000000..c53b4f0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SD_ENCRYPT_FLAG.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description SD卡加密功能标识
+ * @date 2021/01/21
+ */
+public enum EM_SD_ENCRYPT_FLAG {
+ // 未知
+ EM_SD_ENCRYPT_UNKNOWN(-1, "未知"),
+
+ // 设备不支持SD卡加密功能
+ EM_SD_ENCRYPT_UNSUPPORT(0, "设备不支持SD卡加密功能"),
+
+ // 支持SD卡加密功能且获取数据成功
+ EM_SD_ENCRYPT_SUPPORT_AND_GETDATA_SUCCESS(1, "支持SD卡加密功能且获取数据成功"),
+
+ // 支持SD卡加密功能但获取数据失败
+ EM_SD_ENCRYPT_SUPPORT_AND_GETDATA_FAIL(2, "支持SD卡加密功能但获取数据失败");
+
+ private int value;
+ private String note;
+
+ private EM_SD_ENCRYPT_FLAG(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SD_ENCRYPT_FLAG enumType : EM_SD_ENCRYPT_FLAG.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SD_ENCRYPT_FLAG enumType : EM_SD_ENCRYPT_FLAG.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SD_LOCK_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SD_LOCK_STATE.java
new file mode 100644
index 0000000..101ce7d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SD_LOCK_STATE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description SD卡加锁状态
+ * @date 2021/01/21
+ */
+public enum EM_SD_LOCK_STATE {
+
+ // 未知
+ EM_SD_LOCK_STATE_UNKNOWN(-1, "未知"),
+
+ // 未进行过加锁的状态, 如出厂状态,或清除密码时状态
+ EM_SD_LOCK_STATE_NORMAL(0, "未进行过加锁的状态"),
+
+ // 加锁
+ EM_SD_LOCK_STATE_LOCKED(1, "加锁"),
+
+ // 未加锁(加锁后解锁)
+ EM_SD_LOCK_STATE_UNLOCKED(2, "未加锁");
+
+ private int value;
+ private String note;
+
+ private EM_SD_LOCK_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SD_LOCK_STATE enumType : EM_SD_LOCK_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SD_LOCK_STATE enumType : EM_SD_LOCK_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SECURITYGATE_ALARM_LEVEL.java b/src/main/java/com/netsdk/lib/enumeration/EM_SECURITYGATE_ALARM_LEVEL.java
new file mode 100644
index 0000000..eea0bdf
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SECURITYGATE_ALARM_LEVEL.java
@@ -0,0 +1,57 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 291189
+ * @since : Created in 2021/6/30 10:22
+ * 安全门人员报警级别
+ */
+public enum EM_SECURITYGATE_ALARM_LEVEL {
+ EM_SECURITYGATE_ALARM_LEVEL_UNKNOWN(0,"未知"), // 未知
+ EM_SECURITYGATE_ALARM_LEVEL_NON(1,"无报警"), // 无报警
+ EM_SECURITYGATE_ALARM_LEVEL_LOW(2,"低危报警级别"), // 低危报警级别
+ EM_SECURITYGATE_ALARM_LEVEL_MIDDLE(3,"中危报警级别"), // 中危报警级别
+ EM_SECURITYGATE_ALARM_LEVEL_HIGH(4,"高危报警级别"); // 高危报警级别
+
+ private final int value;
+ private final String note;
+
+ EM_SECURITYGATE_ALARM_LEVEL(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SECURITYGATE_ALARM_LEVEL enumType : EM_SECURITYGATE_ALARM_LEVEL.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SECURITYGATE_ALARM_LEVEL enumType : EM_SECURITYGATE_ALARM_LEVEL.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_SECURITYGATE_ALARM_LEVEL getEnum(int value) {
+ for (EM_SECURITYGATE_ALARM_LEVEL e : EM_SECURITYGATE_ALARM_LEVEL.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SECURITYGATE_ALARM_LEVEL.EM_SECURITYGATE_ALARM_LEVEL_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SECURITYGATE_ALARM_POSITION.java b/src/main/java/com/netsdk/lib/enumeration/EM_SECURITYGATE_ALARM_POSITION.java
new file mode 100644
index 0000000..6bf644b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SECURITYGATE_ALARM_POSITION.java
@@ -0,0 +1,69 @@
+package com.netsdk.lib.enumeration;
+/**
+ * @author : 291189
+ * @since : Created in 2021/6/30 10:28
+ * 报警位置
+ */
+public enum EM_SECURITYGATE_ALARM_POSITION {
+ EM_SECURITYGATE_ALARM_POSITION_UNKNWON(-1,"未知"), // 未知
+ EM_SECURITYGATE_ALARM_POSITION_LEFT_1(0,"左1"), // 左1
+ EM_SECURITYGATE_ALARM_POSITION_LEFT_2(1,"左2"), // 左2
+ EM_SECURITYGATE_ALARM_POSITION_LEFT_3(2,"左3"), // 左3
+ EM_SECURITYGATE_ALARM_POSITION_LEFT_4(3,"左4"), // 左4
+ EM_SECURITYGATE_ALARM_POSITION_LEFT_5(4,"左5"), // 左5
+ EM_SECURITYGATE_ALARM_POSITION_LEFT_6(5,"左6"), // 左6
+ EM_SECURITYGATE_ALARM_POSITION_MIDDLE_1(6,"中1"), // 中1
+ EM_SECURITYGATE_ALARM_POSITION_MIDDLE_2(7,"中2"), // 中2
+ EM_SECURITYGATE_ALARM_POSITION_MIDDLE_3(8,"中3"), // 中3
+ EM_SECURITYGATE_ALARM_POSITION_MIDDLE_4(9,"中4"), // 中4
+ EM_SECURITYGATE_ALARM_POSITION_MIDDLE_5(10,"中5"), // 中5
+ EM_SECURITYGATE_ALARM_POSITION_MIDDLE_6(11,"中6"), // 中6
+ EM_SECURITYGATE_ALARM_POSITION_RIGHT_1(12,"右1"), // 右1
+ EM_SECURITYGATE_ALARM_POSITION_RIGHT_2(13,"右2"), // 右2
+ EM_SECURITYGATE_ALARM_POSITION_RIGHT_3(14,"右3"), // 右3
+ EM_SECURITYGATE_ALARM_POSITION_RIGHT_4(15,"右4"), // 右4
+ EM_SECURITYGATE_ALARM_POSITION_RIGHT_5(16,"右5"), // 右5
+ EM_SECURITYGATE_ALARM_POSITION_RIGHT_6(17,"右6"); // 右6
+
+ private final int value;
+ private final String note;
+
+ EM_SECURITYGATE_ALARM_POSITION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SECURITYGATE_ALARM_POSITION enumType : EM_SECURITYGATE_ALARM_POSITION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SECURITYGATE_ALARM_POSITION enumType : EM_SECURITYGATE_ALARM_POSITION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_SECURITYGATE_ALARM_POSITION getEnum(int value) {
+ for (EM_SECURITYGATE_ALARM_POSITION e : EM_SECURITYGATE_ALARM_POSITION.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SECURITYGATE_ALARM_POSITION.EM_SECURITYGATE_ALARM_POSITION_UNKNWON;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SECURITYGATE_EXPRESSION_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SECURITYGATE_EXPRESSION_TYPE.java
new file mode 100644
index 0000000..3a97eda
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SECURITYGATE_EXPRESSION_TYPE.java
@@ -0,0 +1,65 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author : 291189
+ * @since : Created in 2021/6/30 11:01
+ * 人脸表情
+ */
+
+public enum EM_SECURITYGATE_EXPRESSION_TYPE {
+ EM_SECURITYGATE_EXPRESSION_UNKNOWN(-1,"未知"), // 未知
+ EM_SECURITYGATE_EXPRESSION_UNDEFINE(0,"未识别"), // 未识别
+ EM_SECURITYGATE_EXPRESSION_ANGER(1,"生气"), // 生气
+ EM_SECURITYGATE_EXPRESSION_SAD(2,"悲伤"), // 悲伤
+ EM_SECURITYGATE_EXPRESSION_DISGUST(3,"厌恶"), // 厌恶
+ EM_SECURITYGATE_EXPRESSION_FEAR(4,"恐惧"), // 恐惧
+ EM_SECURITYGATE_EXPRESSION_SURPRISED(5,"诧异"), // 诧异
+ EM_SECURITYGATE_EXPRESSION_CALM(6,"平静"), // 平静
+ EM_SECURITYGATE_EXPRESSION_SMILE(7,"微笑"), // 微笑
+ EM_SECURITYGATE_EXPRESSION_LAUGH(8,"大笑"), // 大笑
+ EM_SECURITYGATE_EXPRESSION_HAPPY(9,"高兴"), // 高兴
+ EM_SECURITYGATE_EXPRESSION_CONFUSE(10,"困惑"), // 困惑
+ EM_SECURITYGATE_EXPRESSION_SCREAM(11,"尖叫"); // 尖叫
+
+ private final int value;
+ private final String note;
+
+ EM_SECURITYGATE_EXPRESSION_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SECURITYGATE_EXPRESSION_TYPE enumType : EM_SECURITYGATE_EXPRESSION_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SECURITYGATE_EXPRESSION_TYPE enumType : EM_SECURITYGATE_EXPRESSION_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_SECURITYGATE_EXPRESSION_TYPE getEnum(int value) {
+ for (EM_SECURITYGATE_EXPRESSION_TYPE e : EM_SECURITYGATE_EXPRESSION_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SECURITYGATE_EXPRESSION_TYPE.EM_SECURITYGATE_EXPRESSION_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SECURITYGATE_GLASSES_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SECURITYGATE_GLASSES_TYPE.java
new file mode 100644
index 0000000..848440c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SECURITYGATE_GLASSES_TYPE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author : 291189
+ * @since : Created in 2021/6/30 11:11
+ * 安检门事件人员是否戴眼镜
+ */
+public enum EM_SECURITYGATE_GLASSES_TYPE {
+
+ EM_SECURITYGATE_GLASSES_UNKNOWN(-1,"未知"), // 未知
+ EM_SECURITYGATE_GLASSES_UNDEFINE(0,"未识别"), // 未识别
+ EM_SECURITYGATE_WITHOUT_GLASSES(1,"未戴眼镜"), // 未戴眼镜
+ EM_SECURITYGATE_WITH_GLASSES(2,"戴眼镜"); // 戴眼镜
+
+ private final int value;
+ private final String note;
+
+ EM_SECURITYGATE_GLASSES_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SECURITYGATE_GLASSES_TYPE enumType : EM_SECURITYGATE_GLASSES_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SECURITYGATE_GLASSES_TYPE enumType : EM_SECURITYGATE_GLASSES_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_SECURITYGATE_GLASSES_TYPE getEnum(int value) {
+ for (EM_SECURITYGATE_GLASSES_TYPE e : EM_SECURITYGATE_GLASSES_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SECURITYGATE_GLASSES_TYPE.EM_SECURITYGATE_GLASSES_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SECURITYGATE_PERSON_PASS_DIRECTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_SECURITYGATE_PERSON_PASS_DIRECTION.java
new file mode 100644
index 0000000..182f08e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SECURITYGATE_PERSON_PASS_DIRECTION.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author : 291189
+ * @since : Created in 2021/6/30 10:19
+ * 人员通过方向枚举
+ */
+public enum EM_SECURITYGATE_PERSON_PASS_DIRECTION {
+ // 未知
+ EM_SECURITYGATE_PERSON_PASS_DIRECTION_UNKNOWN (0,"未知"),
+ EM_SECURITYGATE_PERSON_PASS_DIRECTION_IN(1,"进入"), // 进入
+ EM_SECURITYGATE_PERSON_PASS_DIRECTION_OUT(2,"离开"); // 离开
+
+ private final int value;
+ private final String note;
+
+ EM_SECURITYGATE_PERSON_PASS_DIRECTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SECURITYGATE_PERSON_PASS_DIRECTION enumType : EM_SECURITYGATE_PERSON_PASS_DIRECTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SECURITYGATE_PERSON_PASS_DIRECTION enumType : EM_SECURITYGATE_PERSON_PASS_DIRECTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_SECURITYGATE_PERSON_PASS_DIRECTION getEnum(int value) {
+ for (EM_SECURITYGATE_PERSON_PASS_DIRECTION e : EM_SECURITYGATE_PERSON_PASS_DIRECTION.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SECURITYGATE_PERSON_PASS_DIRECTION.EM_SECURITYGATE_PERSON_PASS_DIRECTION_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SECURITYGATE_SEX_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SECURITYGATE_SEX_TYPE.java
new file mode 100644
index 0000000..3db6e6e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SECURITYGATE_SEX_TYPE.java
@@ -0,0 +1,53 @@
+package com.netsdk.lib.enumeration;
+/**
+ * @author : 291189
+ * @since : Created in 2021/6/30 10:51
+ * 安检门事件人员性别
+ */
+public enum EM_SECURITYGATE_SEX_TYPE {
+ EM_SECURITYGATE_SEX_MAN(0,"男"), // 男
+ EM_SECURITYGATE_SEX_WOMEN(1,"女"), // 女
+ EM_SECURITYGATE_SEX_UNKNOWN(2,"未知"); // 未知
+
+ private final int value;
+ private final String note;
+
+ EM_SECURITYGATE_SEX_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SECURITYGATE_SEX_TYPE enumType : EM_SECURITYGATE_SEX_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SECURITYGATE_SEX_TYPE enumType : EM_SECURITYGATE_SEX_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_SECURITYGATE_SEX_TYPE getEnum(int value) {
+ for (EM_SECURITYGATE_SEX_TYPE e : EM_SECURITYGATE_SEX_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SECURITYGATE_SEX_TYPE.EM_SECURITYGATE_SEX_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SEND_SEARCH_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SEND_SEARCH_TYPE.java
new file mode 100644
index 0000000..3aa0e97
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SEND_SEARCH_TYPE.java
@@ -0,0 +1,18 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_SEND_SEARCH_TYPE {
+ /**
+ * 组播和广播搜索
+ */
+ EM_SEND_SEARCH_TYPE_MULTICAST_AND_BROADCAST,
+
+ /**
+ * 组播搜索
+ */
+ EM_SEND_SEARCH_TYPE_MULTICAST,
+
+ /**
+ * 广播搜索
+ */
+ EM_SEND_SEARCH_TYPE_BROADCAST,
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SERVER_OPTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_SERVER_OPTION.java
new file mode 100644
index 0000000..b7daa94
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SERVER_OPTION.java
@@ -0,0 +1,94 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 单个平台接入启动选项
+ *
+ * @author 47040
+ * @version 1.0.0
+ * @since Created in 2021/3/9 8:42
+ */
+public enum EM_SERVER_OPTION {
+ /**
+ * 未知
+ */
+ EM_SERVER_OPTION_UNKNOWN(0, "未知"),
+ /**
+ * 平台接入不启动
+ */
+ EM_SERVER_OPTION_DISABLE(1, "平台接入不启动"),
+ /**
+ * 以28181接入方式开启
+ */
+ EM_SERVER_OPTION_GB28181(2, "以28181接入方式开启"),
+ /**
+ * 以35114接入方式开启
+ */
+ EM_SERVER_OPTION_GB35114(3, "以35114接入方式开启");
+
+ /**
+ * 枚举值
+ */
+ private final int value;
+ /**
+ * 枚举描述
+ */
+ private final String note;
+
+ EM_SERVER_OPTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ /**
+ * 依据枚举值返回描述
+ *
+ * @param givenValue 枚举值
+ * @return 对应描述
+ */
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SERVER_OPTION enumType : EM_SERVER_OPTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ /**
+ * 依据描述返回枚举值
+ *
+ * @param givenNote 枚举描述
+ * @return 对应枚举值
+ */
+ public static int getValueByNote(String givenNote) {
+ for (EM_SERVER_OPTION enumType : EM_SERVER_OPTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * 依据枚举值返回枚举类型
+ *
+ * @param value 枚举值
+ * @return 对应枚举类型
+ */
+ public static EM_SERVER_OPTION getEnum(int value) {
+ for (EM_SERVER_OPTION e : EM_SERVER_OPTION.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SERVER_OPTION.EM_SERVER_OPTION_UNKNOWN;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SEX_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SEX_TYPE.java
new file mode 100644
index 0000000..e3c1d59
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SEX_TYPE.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 性别
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_SEX_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_SEX_TYPE_UNKNOWN = 0;
+ /**
+ * 男性
+ */
+ public static final int EM_SEX_TYPE_MALE = 1;
+ /**
+ * 女性
+ */
+ public static final int EM_SEX_TYPE_FEMALE = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SHAPE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SHAPE_TYPE.java
new file mode 100644
index 0000000..8f7d28a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SHAPE_TYPE.java
@@ -0,0 +1,65 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 形状类型
+ * @date 2022/07/21 15:30:00
+ */
+public enum EM_SHAPE_TYPE {
+ /**
+ * 无效的类型
+ */
+ EM_SHAPE_TYPE_INVALID(0, "无效的类型"),
+ /**
+ * 矩形
+ */
+ EM_SHAPE_TYPE_RECT(1, "矩形"),
+ /**
+ * 多边形
+ */
+ EM_SHAPE_TYPE_POLYGON(2, "多边形");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_SHAPE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SHAPE_TYPE enumType : EM_SHAPE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SHAPE_TYPE enumType : EM_SHAPE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_SHAPE_TYPE getEnum(int value) {
+ for (EM_SHAPE_TYPE e : EM_SHAPE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SHAPE_TYPE.EM_SHAPE_TYPE_INVALID;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SHOES_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SHOES_TYPE.java
new file mode 100644
index 0000000..cbf576d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SHOES_TYPE.java
@@ -0,0 +1,9 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_SHOES_TYPE {
+ EM_SHOES_UNKNOWN, // 未知
+ EM_SHOES_LEATHER, // 皮鞋
+ EM_SHOES_BOOTS, // 靴子
+ EM_SHOES_CASUAL, // 休闲鞋
+ EM_SHOES_SANDALS, // 凉鞋
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SHOW_COLOR.java b/src/main/java/com/netsdk/lib/enumeration/EM_SHOW_COLOR.java
new file mode 100644
index 0000000..a5ee295
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SHOW_COLOR.java
@@ -0,0 +1,71 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 设备需要展示的颜色
+ */
+public enum EM_SHOW_COLOR {
+ /**
+ * 未知
+ */
+ EM_SHOW_COLOR_UNKNOWN(0, "未知"),
+ /**
+ * 蓝
+ */
+ EM_SHOW_COLOR_BLUE(1, "蓝"),
+ /**
+ * 黄
+ */
+ EM_SHOW_COLOR_YELLOW(2, "黄"),
+ /**
+ * 橙
+ */
+ EM_SHOW_COLOR_ORANGE(3, "橙"),
+ /**
+ * 红
+ */
+ EM_SHOW_COLOR_RED(4, "红");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_SHOW_COLOR(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SHOW_COLOR enumType : EM_SHOW_COLOR.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SHOW_COLOR enumType : EM_SHOW_COLOR.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_SHOW_COLOR getEnum(int value) {
+ for (EM_SHOW_COLOR e : EM_SHOW_COLOR.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SHOW_COLOR.EM_SHOW_COLOR_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SIGNLIGHT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SIGNLIGHT_TYPE.java
new file mode 100644
index 0000000..7743b99
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SIGNLIGHT_TYPE.java
@@ -0,0 +1,57 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 灯光类型
+ * @date 2020/11/19
+ */
+public enum EM_SIGNLIGHT_TYPE {
+ // 未知
+ EM_SIGNLIGHT_TYPE_UNKNOWN(0, "未知"),
+
+ // 自动,按照sensor自动切换
+ EM_SIGNLIGHT_TYPE_AUTO(1, "自动,按照sensor自动切换"),
+
+ // 定时模式
+ EM_SIGNLIGHT_TYPE_TIMING(2, "定时模式"),
+
+ // 常灭
+ EM_SIGNLIGHT_TYPE_OFF(3, "常灭"),
+
+ // 常亮模式
+ EM_SIGNLIGHT_TYPE_ON(4, "常亮模式");
+
+ private int value;
+ private String note;
+
+ private EM_SIGNLIGHT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SIGNLIGHT_TYPE enumType : EM_SIGNLIGHT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SIGNLIGHT_TYPE enumType : EM_SIGNLIGHT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SMARTHOME_SCENE_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SMARTHOME_SCENE_MODE.java
new file mode 100644
index 0000000..db599c8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SMARTHOME_SCENE_MODE.java
@@ -0,0 +1,60 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 智能家居情景模式
+ * @date 2023/03/15 20:39:47
+ */
+public enum EM_SMARTHOME_SCENE_MODE {
+ /**
+ * 未知
+ */
+ EM_SMARTHOME_SCENE_MODE_UNKNOWN(0, "未知"),
+ /**
+ * 在家
+ */
+ EM_SMARTHOME_SCENE_MODE_AT_HOME(1, "在家"),
+ /**
+ * 离开
+ */
+ EM_SMARTHOME_SCENE_MODE_LEAVE_HOME(2, "离开"),
+ /**
+ * 睡眠
+ */
+ EM_SMARTHOME_SCENE_MODE_IN_SLEEPING(3, "睡眠");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_SMARTHOME_SCENE_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SMARTHOME_SCENE_MODE enumType : EM_SMARTHOME_SCENE_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SMARTHOME_SCENE_MODE enumType : EM_SMARTHOME_SCENE_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SMART_KITCHEN_CLOTHES_COLOUR.java b/src/main/java/com/netsdk/lib/enumeration/EM_SMART_KITCHEN_CLOTHES_COLOUR.java
new file mode 100644
index 0000000..4a3caeb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SMART_KITCHEN_CLOTHES_COLOUR.java
@@ -0,0 +1,57 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 厨师服颜色
+ * @date 2021/7/26 15:24
+ */
+public enum EM_SMART_KITCHEN_CLOTHES_COLOUR {
+
+ EM_SMART_KITCHEN_CLOTHES_COLOUR_UNKNOWN(0,"未知"), // 未知
+ EM_SMART_KITCHEN_CLOTHES_COLOUR_RED(1,"红"), // 红
+ EM_SMART_KITCHEN_CLOTHES_COLOUR_BLACK(2,"黑"), // 黑
+ EM_SMART_KITCHEN_CLOTHES_COLOUR_WHITE(3,"白"); // 白
+
+ private final int value;
+ private final String note;
+
+ EM_SMART_KITCHEN_CLOTHES_COLOUR(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SMART_KITCHEN_CLOTHES_COLOUR enumType : EM_SMART_KITCHEN_CLOTHES_COLOUR.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SMART_KITCHEN_CLOTHES_COLOUR enumType : EM_SMART_KITCHEN_CLOTHES_COLOUR.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_SMART_KITCHEN_CLOTHES_COLOUR getEnum(int value) {
+ for (EM_SMART_KITCHEN_CLOTHES_COLOUR e : EM_SMART_KITCHEN_CLOTHES_COLOUR.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SMART_KITCHEN_CLOTHES_COLOUR.EM_SMART_KITCHEN_CLOTHES_COLOUR_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SMART_KITCHEN_CLOTHES_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SMART_KITCHEN_CLOTHES_STATE.java
new file mode 100644
index 0000000..5315caa
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SMART_KITCHEN_CLOTHES_STATE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 厨师装备状态
+ * @date 2021/7/26 14:24
+ */
+public enum EM_SMART_KITCHEN_CLOTHES_STATE {
+
+ EM_SMART_KITCHEN_CLOTHES_STATE_UNKNOWN(0,"未知"), // 未知
+ EM_SMART_KITCHEN_CLOTHES_STATE_LACK(1,"没有"), // 没有
+ EM_SMART_KITCHEN_CLOTHES_STATE_HAS(2,"有"); // 有
+ private final int value;
+ private final String note;
+
+ EM_SMART_KITCHEN_CLOTHES_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SMART_KITCHEN_CLOTHES_STATE enumType : EM_SMART_KITCHEN_CLOTHES_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SMART_KITCHEN_CLOTHES_STATE enumType : EM_SMART_KITCHEN_CLOTHES_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_SMART_KITCHEN_CLOTHES_STATE getEnum(int value) {
+ for (EM_SMART_KITCHEN_CLOTHES_STATE e : EM_SMART_KITCHEN_CLOTHES_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SMART_KITCHEN_CLOTHES_STATE.EM_SMART_KITCHEN_CLOTHES_STATE_UNKNOWN;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SMELLY_LEVEL.java b/src/main/java/com/netsdk/lib/enumeration/EM_SMELLY_LEVEL.java
new file mode 100644
index 0000000..152c433
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SMELLY_LEVEL.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 黑臭等级
+* @date 2022/08/22 16:51:44
+*/
+public enum EM_SMELLY_LEVEL {
+/**
+未知
+*/
+EM_SMELLY_LEVEL_UNKNOWN(0,"未知"),
+/**
+正常
+*/
+EM_SMELLY_LEVEL_NORMAL(1,"正常"),
+/**
+轻度污染
+*/
+EM_SMELLY_LEVEL_LIGHT(2,"轻度污染"),
+/**
+重度污染
+*/
+EM_SMELLY_LEVEL_HEAVY(3,"重度污染");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_SMELLY_LEVEL(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_SMELLY_LEVEL enumType : EM_SMELLY_LEVEL.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_SMELLY_LEVEL enumType : EM_SMELLY_LEVEL.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_SMELLY_LEVEL getEnum(int value) {
+ for (EM_SMELLY_LEVEL e : EM_SMELLY_LEVEL.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SMELLY_LEVEL.EM_SMELLY_LEVEL_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SMOKE_COLOR.java b/src/main/java/com/netsdk/lib/enumeration/EM_SMOKE_COLOR.java
new file mode 100644
index 0000000..ba328eb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SMOKE_COLOR.java
@@ -0,0 +1,58 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 烟雾颜色类型
+ * @date 2022/03/31
+ */
+public enum EM_SMOKE_COLOR {
+ // 未知
+ EM_SMOKE_COLOR_UNKNOWN(0, "未知"),
+
+ // White
+ EM_SMOKE_COLOR_WHITE(1, "White"),
+
+ // black
+ EM_SMOKE_COLOR_BLACK(2, "black"),
+
+ // red
+ EM_SMOKE_COLOR_RED(3, "red"),
+
+ // yellow
+ EM_SMOKE_COLOR_YELLOW(4, "yellow");
+
+ private int value;
+ private String note;
+
+ private EM_SMOKE_COLOR(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SMOKE_COLOR enumType : EM_SMOKE_COLOR.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SMOKE_COLOR enumType : EM_SMOKE_COLOR.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SNAPCATEGORY.java b/src/main/java/com/netsdk/lib/enumeration/EM_SNAPCATEGORY.java
new file mode 100644
index 0000000..d4173ff
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SNAPCATEGORY.java
@@ -0,0 +1,22 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 抓拍的类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_SNAPCATEGORY extends NetSDKLib.SdkStructure {
+
+ /**
+ * 机动车
+ */
+ public static final int EM_SNAPCATEGORY_MOTOR = 0;
+ /**
+ * 非机动车
+ */
+ public static final int EM_SNAPCATEGORY_NONMOTOR = 1;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SNAP_POLICY_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SNAP_POLICY_TYPE.java
new file mode 100644
index 0000000..ef6bfea
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SNAP_POLICY_TYPE.java
@@ -0,0 +1,58 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 抓拍策略取值
+ *
+ * @author 47040
+ * @since Created in 2021/4/25 19:52
+ */
+public enum EM_SNAP_POLICY_TYPE {
+
+ EM_SNAP_POLICY_TYPE_UNKNOWN(0, "未知"),
+ EM_SNAP_POLICY_TYPE_REALTIME(1, "实时"),
+ EM_SNAP_POLICY_TYPE_OPTIMAL(2, "优选"),
+ EM_SNAP_POLICY_TYPE_QUALITY(3, "质量"),
+ EM_SNAP_POLICY_TYPE_TRIPLINE(4, "拌线");
+
+ private final int value;
+ private final String note;
+
+ EM_SNAP_POLICY_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SNAP_POLICY_TYPE enumType : EM_SNAP_POLICY_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SNAP_POLICY_TYPE enumType : EM_SNAP_POLICY_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_SNAP_POLICY_TYPE getEnum(int value) {
+ for (EM_SNAP_POLICY_TYPE e : EM_SNAP_POLICY_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SNAP_POLICY_TYPE.EM_SNAP_POLICY_TYPE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SOLARCELL_SYSTEM_FAULT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SOLARCELL_SYSTEM_FAULT_TYPE.java
new file mode 100644
index 0000000..36b927f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SOLARCELL_SYSTEM_FAULT_TYPE.java
@@ -0,0 +1,103 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description \if ENGLISH_LANG
+ *
+ * \else
+ * 太阳能系统故障信息
+ * \endif
+ * @date 2020/8/11
+ */
+public enum EM_SOLARCELL_SYSTEM_FAULT_TYPE {
+
+ /**
+ * 未知
+ */
+ EM_SOLARCELL_SYSTEM_FAULT_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 电池过放
+ */
+ EM_SOLARCELL_SYSTEM_FAULT_TYPE_BATTERY_OVER_DISCHARGE(1, "电池过放"),
+ /**
+ * 电池施压
+ */
+ EM_SOLARCELL_SYSTEM_FAULT_TYPE_BATTERY_OVERPRESSURE(2, "电池施压"),
+ /**
+ * 欠压警告
+ */
+ EM_SOLARCELL_SYSTEM_FAULT_TYPE_UNDERVOLTAGE_WARNING(3, "欠压警告"),
+ /**
+ * 负载短路
+ */
+ EM_SOLARCELL_SYSTEM_FAULT_TYPE_LOAD_SHORT_CIRCUIT(4, "负载短路"),
+ /**
+ * 负载功率过大或负载过流
+ */
+ EM_SOLARCELL_SYSTEM_FAULT_TYPE_EXCESSIVE_LOAD_POWER_OR_LOAD_OVER_CURRENT(5, "负载功率过大或负载过流"),
+ /**
+ * 控制器温度过高
+ */
+ EM_SOLARCELL_SYSTEM_FAULT_TYPE_CONTROLLER_TEMPERATURE_IS_TOO_HIGH(6, "控制器温度过高"),
+ /**
+ * 外部环境温度过高
+ */
+ EM_SOLARCELL_SYSTEM_FAULT_TYPE_EXTERNAL_AMBIENT_TEMPERATURE_IS_TOO_HIGH(7, "外部环境温度过高"),
+ /**
+ * 光伏输入功率过大
+ */
+ EM_SOLARCELL_SYSTEM_FAULT_TYPE_EXCESSIVE_PHOTOVOLTAIC_INPUT_POWER(8, "光伏输入功率过大"),
+ /**
+ * 光伏输入短路
+ */
+ EM_SOLARCELL_SYSTEM_FAULT_TYPE_PHOTOVOLTAIC_INPUT_SHORT_CIRCUIT(9, "光伏输入短路"),
+ /**
+ * 光伏输入端超压
+ */
+ EM_SOLARCELL_SYSTEM_FAULT_TYPE_PHOTOVOLTAIC_INPUT_TERMINAL_OVERPRESSURE(10, "光伏输入端超压"),
+ /**
+ * 太阳板逆流
+ */
+ EM_SOLARCELL_SYSTEM_FAULT_TYPE_PHOTOVOLTAIC_SOLAR_PLATE_COUNTERCURRENT(11, "太阳板逆流"),
+ /**
+ * 太阳板工作点超压
+ */
+ EM_SOLARCELL_SYSTEM_FAULT_TYPE_OVERPRESSURE_AT_WORKING_POINT_OF_SOLAR_PANEL(12, "太阳板工作点超压"),
+ /**
+ * 太阳板反接
+ */
+ EM_SOLARCELL_SYSTEM_FAULT_TYPE_REVERSE_CONNECTION_OF_SOLAR_PANEL(13, "太阳板反接"),
+ /**
+ * Anti-reverse MOS short
+ */
+ EM_SOLARCELL_SYSTEM_FAULT_TYPE_ANTI_REVERSE_MOS_SHORT(14, "Anti-reverse MOS short"),
+ /**
+ * Circuit,charge MOS short circui
+ */
+ EM_SOLARCELL_SYSTEM_FAULT_TYPE_ANTI_CIRCUIT_CHARGE_MOS_SHORT_CIRCUI(15, "Circuit,charge MOS short circui");
+ private int type;
+ private String info;
+
+ private EM_SOLARCELL_SYSTEM_FAULT_TYPE(int type, String info) {
+ this.type = type;
+ this.info = info;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public String getInfo() {
+ return info;
+ }
+
+ public static EM_SOLARCELL_SYSTEM_FAULT_TYPE getSolarcellFaultType(int type) {
+ for (EM_SOLARCELL_SYSTEM_FAULT_TYPE faultType : EM_SOLARCELL_SYSTEM_FAULT_TYPE.values()) {
+ if (faultType.getType() == type) {
+ return faultType;
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SOURCE_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SOURCE_MODE.java
new file mode 100644
index 0000000..ee1e8f3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SOURCE_MODE.java
@@ -0,0 +1,45 @@
+package com.netsdk.lib.enumeration;
+/**
+ *
+ * @author 119178
+ *
+ */
+public enum EM_SOURCE_MODE {
+ EM_SOURCE_MODE_UNKNOWN(0,"未知"), // 未知
+ EM_SOURCE_MODE_SINGLE(1,"Single/单个备份模式"), // "Single",/*单个备份模式*/
+ EM_SOURCE_MODE_COMBIN(2,"Combin/合并备份模式"); // "Combin",/*合并备份模式*/
+
+ private int value;
+ private String note;
+
+ private EM_SOURCE_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFICSTROBE_STATUS enumType : EM_TRAFFICSTROBE_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFICSTROBE_STATUS enumType : EM_TRAFFICSTROBE_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SOURCE_VIDEO_LOCATION.java b/src/main/java/com/netsdk/lib/enumeration/EM_SOURCE_VIDEO_LOCATION.java
new file mode 100644
index 0000000..9068f31
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SOURCE_VIDEO_LOCATION.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 视频诊断录像保存位置
+ * @date 2021/2/22
+ */
+public enum EM_SOURCE_VIDEO_LOCATION {
+ /** 未知 */
+ EM_SOURCE_VIDEO_LOCATION_UNKNOWN,
+ /** 存于设备 */
+ EM_SOURCE_VIDEO_LOCATION_DEVICE,
+ /** 存于平台 */
+ EM_SOURCE_VIDEO_LOCATION_CENTER,
+ /** 存于第三方云 */
+ EM_SOURCE_VIDEO_LOCATION_THIRD;
+
+ public EM_SOURCE_VIDEO_LOCATION getVideoLocation(int location) {
+ for (EM_SOURCE_VIDEO_LOCATION videoLocation : EM_SOURCE_VIDEO_LOCATION.values()) {
+ if (videoLocation.ordinal() == location) {
+ return videoLocation;
+ }
+ }
+ return EM_SOURCE_VIDEO_LOCATION_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SPACE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SPACE_TYPE.java
new file mode 100644
index 0000000..e816919
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SPACE_TYPE.java
@@ -0,0 +1,81 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 车位类型
+ * @date 2022/05/11 13:27:51
+ */
+public enum EM_SPACE_TYPE {
+ /**
+ * 未知
+ */
+ EM_SPACE_TYPE_UNKNOWN(-1, "未知"),
+ /**
+ * 小车位
+ */
+ EM_SPACE_TYPE_CAR(0, "小车位"),
+ /**
+ * 大车位
+ */
+ EM_SPACE_TYPE_BIG_CAR(1, "大车位"),
+ /**
+ * 危化品车位
+ */
+ EM_SPACE_TYPE_HAZARDOUS_CHEMICALS(2, "危化品车位"),
+ /**
+ * 货车车位
+ */
+ EM_SPACE_TYPE_TRUCK(3, "货车车位"),
+ /**
+ * 小客车车位
+ */
+ EM_SPACE_TYPE_SMALL_TRUCK(4, "小客车车位"),
+ /**
+ * 大客车车位
+ */
+ EM_SPACE_TYPE_BUS(5, "大客车车位");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_SPACE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SPACE_TYPE enumType : EM_SPACE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SPACE_TYPE enumType : EM_SPACE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+ public static EM_SPACE_TYPE getEnum(int value) {
+ for (EM_SPACE_TYPE e : EM_SPACE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SPACE_TYPE.EM_SPACE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_STANDARD_VEHICLE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_STANDARD_VEHICLE_TYPE.java
new file mode 100644
index 0000000..3e7efdd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_STANDARD_VEHICLE_TYPE.java
@@ -0,0 +1,150 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 标准车辆类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_STANDARD_VEHICLE_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_STANDARD_VEHICLE_UNKNOWN = 0;
+ /**
+ * 机动车
+ */
+ public static final int EM_STANDARD_VEHICLE_MOTOR = 1;
+ /**
+ * 公交车
+ */
+ public static final int EM_STANDARD_VEHICLE_BUS = 2;
+ /**
+ * 无牌机动车
+ */
+ public static final int EM_STANDARD_VEHICLE_UNLICENSED_MOTOR = 3;
+ /**
+ * 大型汽车
+ */
+ public static final int EM_STANDARD_VEHICLE_LARGE_CAR = 4;
+ /**
+ * 小型汽车
+ */
+ public static final int EM_STANDARD_VEHICLE_MICRO_CAR = 5;
+ /**
+ * 使馆汽车
+ */
+ public static final int EM_STANDARD_VEHICLE_EMBASSY_CAR = 6;
+ /**
+ * 领馆汽车
+ */
+ public static final int EM_STANDARD_VEHICLE_MARGINAL_CAR = 7;
+ /**
+ * 境外汽车
+ */
+ public static final int EM_STANDARD_VEHICLE_AREAOUT_CAR = 8;
+ /**
+ * 外籍汽车
+ */
+ public static final int EM_STANDARD_VEHICLE_FOREIGN_CAR = 9;
+ /**
+ * 农用运输车
+ */
+ public static final int EM_STANDARD_VEHICLE_FARM_TRANS_CAR = 10;
+ /**
+ * 拖拉机
+ */
+ public static final int EM_STANDARD_VEHICLE_TRACTOR = 11;
+ /**
+ * 挂车
+ */
+ public static final int EM_STANDARD_VEHICLE_TRAILER = 12;
+ /**
+ * 教练汽车
+ */
+ public static final int EM_STANDARD_VEHICLE_COACH_CAR = 13;
+ /**
+ * 试验汽车
+ */
+ public static final int EM_STANDARD_VEHICLE_TRIAL_CAR = 14;
+ /**
+ * 临时入境汽车
+ */
+ public static final int EM_STANDARD_VEHICLE_TEMPORARYENTRY_CAR = 15;
+ /**
+ * 临时入境摩托
+ */
+ public static final int EM_STANDARD_VEHICLE_TEMPORARYENTRY_MOTORCYCLE = 16;
+ /**
+ * 临时行驶车
+ */
+ public static final int EM_STANDARD_VEHICLE_TEMPORARY_STEER_CAR = 17;
+ /**
+ * 大货车
+ */
+ public static final int EM_STANDARD_VEHICLE_LARGE_TRUCK = 18;
+ /**
+ * 中货车
+ */
+ public static final int EM_STANDARD_VEHICLE_MID_TRUCK = 19;
+ /**
+ * 小货车
+ */
+ public static final int EM_STANDARD_VEHICLE_MICRO_TRUCK = 20;
+ /**
+ * 面包车
+ */
+ public static final int EM_STANDARD_VEHICLE_MICROBUS = 21;
+ /**
+ * 轿车
+ */
+ public static final int EM_STANDARD_VEHICLE_SALOON_CAR = 22;
+ /**
+ * 小轿车
+ */
+ public static final int EM_STANDARD_VEHICLE_CARRIAGE = 23;
+ /**
+ * 微型轿车
+ */
+ public static final int EM_STANDARD_VEHICLE_MINI_CARRIAGE = 24;
+ /**
+ * SUV或者MPV
+ */
+ public static final int EM_STANDARD_VEHICLE_SUV_MPV = 25;
+ /**
+ * SUV
+ */
+ public static final int EM_STANDARD_VEHICLE_SUV = 26;
+ /**
+ * MPV
+ */
+ public static final int EM_STANDARD_VEHICLE_MPV = 27;
+ /**
+ * 客车
+ */
+ public static final int EM_STANDARD_VEHICLE_PASSENGER_CAR = 28;
+ /**
+ * 大客车
+ */
+ public static final int EM_STANDARD_VEHICLE_MOTOR_BUS = 29;
+ /**
+ * 中客车
+ */
+ public static final int EM_STANDARD_VEHICLE_MID_PASSENGER_CAR = 30;
+ /**
+ * 小客车
+ */
+ public static final int EM_STANDARD_VEHICLE_MINI_BUS = 31;
+ /**
+ * 皮卡车
+ */
+ public static final int EM_STANDARD_VEHICLE_PICKUP = 32;
+ /**
+ * 油罐车
+ */
+ public static final int EM_STANDARD_VEHICLE_OILTANK_TRUCK = 33;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_STARTFIND_DIRECTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_STARTFIND_DIRECTION.java
new file mode 100644
index 0000000..3124d65
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_STARTFIND_DIRECTION.java
@@ -0,0 +1,61 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 统计方向查询条件
+ * @date 2022/11/03 10:19:57
+ */
+public enum EM_STARTFIND_DIRECTION {
+ /**
+ * 未知
+ */
+ EM_STARTFIND_DIRECTION_UNKNOWN(0, "未知"),
+ /**
+ * 全部
+ */
+ EM_STARTFIND_DIRECTION_BOTH(1, "全部"),
+ /**
+ * 左到右
+ */
+ EM_STARTFIND_DIRECTION_LEFTTORIGHT(2, "左到右"),
+ /**
+ * 右到左
+ */
+ EM_STARTFIND_DIRECTION_RIGHTTOLEFT(3, "右到左");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_STARTFIND_DIRECTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_STARTFIND_DIRECTION enumType : EM_STARTFIND_DIRECTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_STARTFIND_DIRECTION enumType : EM_STARTFIND_DIRECTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_STARTUP_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_STARTUP_MODE.java
new file mode 100644
index 0000000..5b66260
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_STARTUP_MODE.java
@@ -0,0 +1,51 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 启动模式
+ * @date 2021/2/7
+ */
+public enum EM_STARTUP_MODE {
+ /** 未知 */
+ EM_STARTUP_MODE_UNKNOWN(-1, "未知"),
+ /** 正常启动模式 */
+ EM_STARTUP_MODE_NORMAL(0, "正常启动模式"),
+ /** 零位设置启动模式 */
+ EM_STARTUP_MODE_ZERO_SETTING(1, "零位设置启动模式"),
+ /** 老化测试启动模式 */
+ EM_STARTUP_MODE_AGING_TEST(2, "老化测试启动模式");
+
+ private int mode;
+ private String desc;
+
+ EM_STARTUP_MODE(int mode, String desc) {
+ this.mode = mode;
+ this.desc = desc;
+ }
+
+ public static EM_STARTUP_MODE getStartupMode(int mode) {
+ for (EM_STARTUP_MODE startMode : EM_STARTUP_MODE.values()) {
+ if (startMode.mode == mode) {
+ return startMode;
+ }
+ }
+ return EM_STARTUP_MODE_UNKNOWN;
+ }
+
+ public int getMode() {
+ return mode;
+ }
+
+ public void setMode(int mode) {
+ this.mode = mode;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_STATISTICS_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_STATISTICS_MODE.java
new file mode 100644
index 0000000..713c19f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_STATISTICS_MODE.java
@@ -0,0 +1,50 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @version 1.0
+ * @description 统计模式
+ * @date 2021/12/18
+ */
+public enum EM_STATISTICS_MODE {
+ // 未知
+ EM_STATISTICS_MODE_UNKNOWN(0, "未知"),
+ // 区域
+ EM_STATISTICS_MODE_AREA(1, "区域"),
+ // 车位
+ EM_STATISTICS_MODE_SPACE(2, "车位");
+
+ private int value;
+ private String note;
+
+ private EM_STATISTICS_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_STATISTICS_MODE enumType : EM_STATISTICS_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_STATISTICS_MODE enumType : EM_STATISTICS_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_STATUS.java
new file mode 100644
index 0000000..4a9c925
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_STATUS.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 设备状态
+ * @date 2021/09/01
+ */
+public enum EM_STATUS {
+
+ // 未知
+ EM_STATUS_UNKNOWN(-1, "未知"),
+ // 无效
+ EM_STATUS_INVALID(0, "无效"),
+ // 工作正常
+ EM_STATUS_NORMAL(1, "工作正常"),
+ // 故障状态
+ EM_STATUS_FAULT(2, "故障状态"),
+ // 其他
+ EM_STATUS_OTHER(3, "其他");
+
+ private int value;
+ private String note;
+
+ private EM_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_STATUS enumType : EM_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_STATUS enumType : EM_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_STAT_DIRECTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_STAT_DIRECTION.java
new file mode 100644
index 0000000..6fb8334
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_STAT_DIRECTION.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 统计方向查询条件
+* @date 2023/02/06 16:07:27
+*/
+public enum EM_STAT_DIRECTION {
+/**
+未知
+*/
+EM_STAT_DIRECTION_UNKNOWN(0,"未知"),
+/**
+左到右
+*/
+EM_STAT_DIRECTION_LEFTTORIGHT(1,"左到右"),
+/**
+右到左
+*/
+EM_STAT_DIRECTION_RIGHTTOLEFT(2,"右到左"),
+/**
+全部
+*/
+EM_STAT_DIRECTION_BOTH(3,"全部");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_STAT_DIRECTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_STAT_DIRECTION enumType : EM_STAT_DIRECTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_STAT_DIRECTION enumType : EM_STAT_DIRECTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_STAT_DIRECTION getEnum(int value) {
+ for (EM_STAT_DIRECTION e : EM_STAT_DIRECTION.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_STAT_DIRECTION.EM_STAT_DIRECTION_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_STAT_GRANULARITY.java b/src/main/java/com/netsdk/lib/enumeration/EM_STAT_GRANULARITY.java
new file mode 100644
index 0000000..b1482b3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_STAT_GRANULARITY.java
@@ -0,0 +1,52 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 粒度模式
+ * @date 2022/12/12 11:41:07
+ */
+public enum EM_STAT_GRANULARITY {
+ /**
+ * 未知
+ */
+ EM_STAT_GRANULARITY_UNKNOWN(0, "未知"),
+ /**
+ * 分钟粒度
+ */
+ EM_STAT_GRANULARITY_MINUTE(1, "分钟粒度");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_STAT_GRANULARITY(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_STAT_GRANULARITY enumType : EM_STAT_GRANULARITY.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_STAT_GRANULARITY enumType : EM_STAT_GRANULARITY.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_STEREO_ACTION_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_STEREO_ACTION_TYPE.java
new file mode 100644
index 0000000..83f80e9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_STEREO_ACTION_TYPE.java
@@ -0,0 +1,53 @@
+package com.netsdk.lib.enumeration;
+/**
+ * @author 251823
+ * @description 动作类型
+ * @date 2022/03/31
+ */
+public enum EM_STEREO_ACTION_TYPE {
+ // 未知
+ EM_STEREO_ACTION_TYPE_UNKNOWN(0, "未知"),
+
+ // 剧烈运动
+ EM_STEREO_ACTION_TYPE_DRASTIC_MOTION(1, "剧烈运动"),
+
+ // 单人打砸
+ EM_STEREO_ACTION_TYPE_SINGLE_FIGHT(2, "单人打砸"),
+
+ // 多人打架
+ EM_STEREO_ACTION_TYPE_MULTI_FIGHT(3, "多人打架");
+
+ private int value;
+ private String note;
+
+ private EM_STEREO_ACTION_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_STEREO_ACTION_TYPE enumType : EM_STEREO_ACTION_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_STEREO_ACTION_TYPE enumType : EM_STEREO_ACTION_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_STORAGE_DEVICE_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_STORAGE_DEVICE_STATUS.java
new file mode 100644
index 0000000..36414f8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_STORAGE_DEVICE_STATUS.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 存储设备状态
+ * @date 2021/01/21
+ */
+public enum EM_STORAGE_DEVICE_STATUS {
+ // 未知
+ EM_STORAGE_DEVICE_UNKNOWN(0, "未知"),
+
+ // 获取设备失败
+ EM_STORAGE_DEVICE_ERROR(1, "获取设备失败"),
+
+ // 正在读取设备
+ EM_STORAGE_DEVICE_INITIALIZING(2, "正在读取设备"),
+
+ // 获取设备成功
+ EM_STORAGE_DEVICE_SUCCESS(3, "获取设备成功");
+
+ private int value;
+ private String note;
+
+ private EM_STORAGE_DEVICE_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_STORAGE_DEVICE_STATUS enumType : EM_STORAGE_DEVICE_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_STORAGE_DEVICE_STATUS enumType : EM_STORAGE_DEVICE_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_STORAGE_DISK_POWERMODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_STORAGE_DISK_POWERMODE.java
new file mode 100644
index 0000000..4e43b3e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_STORAGE_DISK_POWERMODE.java
@@ -0,0 +1,9 @@
+package com.netsdk.lib.enumeration;
+
+public class EM_STORAGE_DISK_POWERMODE {
+ public static final int EM_STORAGE_DISK_POWERMODE_UNKNOWN = 0; // UNKnown状态(不是以下状态中的值)
+ public static final int EM_STORAGE_DISK_POWERMODE_NONE = 1; // 未知状态
+ public static final int EM_STORAGE_DISK_POWERMODE_ACTIVE = 2; // 活动状态
+ public static final int EM_STORAGE_DISK_POWERMODE_STANDBY = 3; // 休眠状态
+ public static final int EM_STORAGE_DISK_POWERMODE_IDLE = 4; // 空闲状态
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_STORAGE_DISK_PREDISKCHECK.java b/src/main/java/com/netsdk/lib/enumeration/EM_STORAGE_DISK_PREDISKCHECK.java
new file mode 100644
index 0000000..6406f5d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_STORAGE_DISK_PREDISKCHECK.java
@@ -0,0 +1,13 @@
+package com.netsdk.lib.enumeration;
+
+public class EM_STORAGE_DISK_PREDISKCHECK {
+ public static final int EM_STORAGE_DISK_PREDISKCHECK_UNKNOWN = 0; // UnKnown状态
+ public static final int EM_STORAGE_DISK_PREDISKCHECK_GOOD = 1; // 硬盘读速度到120以上, 运行良好
+ public static final int EM_STORAGE_DISK_PREDISKCHECK_WARN = 2; // cmd信息里有少量错误记录,smart信息有错误记录
+ public static final int EM_STORAGE_DISK_PREDISKCHECK_ERROR = 3; // cmd信息有错误记录,smart信息由错误记录.坏扇区有坏扇区记录
+ public static final int EM_STORAGE_DISK_PREDISKCHECK_WILLFAIL = 4; // 硬盘速度比较低64M以下.cmd信息有错误记录,smart信息由错误记录.坏扇区有坏扇区记录
+ public static final int EM_STORAGE_DISK_PREDISKCHECK_FAIL = 5; // 硬盘返回错误
+ public static final int EM_STORAGE_DISK_PREDISKCHECK_NONE = 6; // 未知状态
+ public static final int EM_STORAGE_DISK_PREDISKCHECK_BECHECK = 7; // 正在查询中状态
+ public static final int EM_STORAGE_DISK_PREDISKCHECK_CHECKFAIL = 8; // 查询失败状态
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_STORAGE_HEALTH_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_STORAGE_HEALTH_TYPE.java
new file mode 100644
index 0000000..9e26077
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_STORAGE_HEALTH_TYPE.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 健康状态标识
+ * @date 2021/01/21
+ */
+public enum EM_STORAGE_HEALTH_TYPE {
+ // 未知
+ EM_STORAGE_HEALTH_UNKNOWN(-1, "未知"),
+
+ // 设备不支持健康检测功能
+ EM_STORAGE_HEALTH_UNSUPPORT(0, "设备不支持健康检测功能"),
+
+ // 支持健康检测功能且获取数据成功
+ EM_STORAGE_HEALTH_SUPPORT_AND_SUCCESS(1, "支持健康检测功能且获取数据成功"),
+
+ // 支持健康检测功能但获取数据失败
+ EM_STORAGE_HEALTH_SUPPORT_AND_FAIL(2, "支持健康检测功能但获取数据失败");
+
+ private int value;
+ private String note;
+
+ private EM_STORAGE_HEALTH_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_STORAGE_HEALTH_TYPE enumType : EM_STORAGE_HEALTH_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_STORAGE_HEALTH_TYPE enumType : EM_STORAGE_HEALTH_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_STORAGE_PACKET_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_STORAGE_PACKET_TYPE.java
new file mode 100644
index 0000000..3d4313a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_STORAGE_PACKET_TYPE.java
@@ -0,0 +1,7 @@
+package com.netsdk.lib.enumeration;/**
+ * @author 47081
+ * @description
+ * @date 2021/2/20
+ * @version 1.0
+ */public enum EM_STORAGE_PACKET_TYPE {
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_STRABISMUS_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_STRABISMUS_TYPE.java
new file mode 100644
index 0000000..463f255
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_STRABISMUS_TYPE.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 斜视状态
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_STRABISMUS_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_STRABISMUS_UNKNOWN = 0;
+ /**
+ * 正常
+ */
+ public static final int EM_STRABISMUS_NORMAL = 1;
+ /**
+ * 斜视
+ */
+ public static final int EM_STRABISMUS_YES = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SUBCLASSID_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SUBCLASSID_TYPE.java
new file mode 100644
index 0000000..39efc85
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SUBCLASSID_TYPE.java
@@ -0,0 +1,54 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author : 47040
+ * @since : Created in 2020/12/28 16:07
+ */
+public enum EM_SUBCLASSID_TYPE {
+
+ EM_SUBCLASSID_UNKNOWN(0,"未知"),
+ EM_SUBCLASSID_ASSISTDEVICE(1,"辅助设备 (ITSE使用)");
+
+ private final int value;
+ private final String note;
+
+ EM_SUBCLASSID_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SUBCLASSID_TYPE enumType : EM_SUBCLASSID_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SUBCLASSID_TYPE enumType : EM_SUBCLASSID_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_SUBCLASSID_TYPE getEnum(int value) {
+ for (EM_SUBCLASSID_TYPE e : EM_SUBCLASSID_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SUBCLASSID_TYPE.EM_SUBCLASSID_UNKNOWN;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SUBLINK_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SUBLINK_MODE.java
new file mode 100644
index 0000000..e2d0ee7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SUBLINK_MODE.java
@@ -0,0 +1,53 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 子连接连接业务模式
+ * @date 2022/06/16 15:17:48
+ */
+public enum EM_SUBLINK_MODE {
+ /**
+ * 通用模式,默认值
+ */
+ EM_SUBLINK_MODE_NORMAL(0, "通用模式,默认值"),
+ /**
+ * 低功耗模式
+ */
+ EM_SUBLINK_MODE_LOWPOWER(1, "低功耗模式");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_SUBLINK_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SUBLINK_MODE enumType : EM_SUBLINK_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SUBLINK_MODE enumType : EM_SUBLINK_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SUBLINK_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SUBLINK_STATE.java
new file mode 100644
index 0000000..009262f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SUBLINK_STATE.java
@@ -0,0 +1,68 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+子连接状态
+*/
+public enum EM_SUBLINK_STATE {
+/**
+/< 未知
+*/
+EM_SUBLINK_STATE_UNKNWON(0,"/< 未知"),
+/**
+/< 已连接
+*/
+EM_SUBLINK_STATE_CONNECT(1,"/< 已连接"),
+/**
+/< 已断开
+*/
+EM_SUBLINK_STATE_DISCONNECT(2,"/< 已断开"),
+/**
+/< BSID校验失败, 子连接创建失败
+*/
+EM_SUBLINK_STATE_BSID_ERROR(3,"/< BSID校验失败, 子连接创建失败");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_SUBLINK_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_SUBLINK_STATE enumType : EM_SUBLINK_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_SUBLINK_STATE enumType : EM_SUBLINK_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_SUBLINK_STATE getEnum(int value) {
+ for (EM_SUBLINK_STATE e : EM_SUBLINK_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SUBLINK_STATE.EM_SUBLINK_STATE_UNKNWON;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SUBLINK_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SUBLINK_TYPE.java
new file mode 100644
index 0000000..c5f9525
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SUBLINK_TYPE.java
@@ -0,0 +1,59 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 子连接连接方式
+ */
+public enum EM_SUBLINK_TYPE {
+ /**
+ * 直连方式
+ */
+ EM_SUBLINK_TYPE_PASSIVE(0, "直连方式"),
+ /**
+ * 主动注册方式
+ */
+ EM_SUBLINK_TYPE_PORT(1, "主动注册方式");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_SUBLINK_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SUBLINK_TYPE enumType : EM_SUBLINK_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SUBLINK_TYPE enumType : EM_SUBLINK_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_SUBLINK_TYPE getEnum(int value) {
+ for (EM_SUBLINK_TYPE e : EM_SUBLINK_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SUBLINK_TYPE.EM_SUBLINK_TYPE_PASSIVE;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORTED_COLOR_LIST_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORTED_COLOR_LIST_TYPE.java
new file mode 100644
index 0000000..3d76d07
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORTED_COLOR_LIST_TYPE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 检测符合要求的厨师服颜色不报警(无此字段表示不检测厨师服颜色)
+ * @date 2021/01/11
+ */
+public enum EM_SUPPORTED_COLOR_LIST_TYPE {
+
+ // 未知
+ EM_SUPPORTED_COLOR_LIST_TYPE_UNKNOWN(0, "未知"),
+
+ // 黑色
+ EM_SUPPORTED_COLOR_LIST_TYPE_BLACK(1, "黑色"),
+
+ // 白色
+ EM_SUPPORTED_COLOR_LIST_TYPE_WHITE(2, "白色"),
+
+ // 红色
+ EM_SUPPORTED_COLOR_LIST_TYPE_RED(3, "红色");
+
+ private int value;
+ private String note;
+
+ private EM_SUPPORTED_COLOR_LIST_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SUPPORTED_COLOR_LIST_TYPE enumType : EM_SUPPORTED_COLOR_LIST_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SUPPORTED_COLOR_LIST_TYPE enumType : EM_SUPPORTED_COLOR_LIST_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORTFINGERPRINT.java b/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORTFINGERPRINT.java
new file mode 100644
index 0000000..6bebfed
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORTFINGERPRINT.java
@@ -0,0 +1,19 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 是否支持信息功能
+ */
+public enum EM_SUPPORTFINGERPRINT {
+ /**
+ * 未知
+ */
+ EM_SUPPORTFINGERPRINT_UNKNOWN,
+ /**
+ * 不支持信息功能
+ */
+ EM_SUPPORTFINGERPRINT_NONSUPPORT,
+ /**
+ * 支持信息功能
+ */
+ EM_SUPPORTFINGERPRINT_SUPPORT,
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORT_CLOSE_UP_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORT_CLOSE_UP_TYPE.java
new file mode 100644
index 0000000..c7203b0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORT_CLOSE_UP_TYPE.java
@@ -0,0 +1,54 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 可选择特写模式
+ * @date 2021/01/11
+ */
+public enum EM_SUPPORT_CLOSE_UP_TYPE {
+ // 未知
+ EM_SUPPORT_CLOSE_UP_TYPE_UNKNOWN(0, "未知"),
+
+ // 跟踪模式
+ EM_SUPPORT_CLOSE_UP_TYPE_TRACK_MODE(1, "跟踪模式"),
+
+ // 固定模式
+ EM_SUPPORT_CLOSE_UP_TYPE_FIXED_MODE(2, "固定模式"),
+
+ // 指定区域模式
+ EM_SUPPORT_CLOSE_UP_TYPE_DESIGNED_REGION_MODE(3, "指定区域模式");
+
+ private int value;
+ private String note;
+
+ private EM_SUPPORT_CLOSE_UP_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SUPPORT_CLOSE_UP_TYPE enumType : EM_SUPPORT_CLOSE_UP_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SUPPORT_CLOSE_UP_TYPE enumType : EM_SUPPORT_CLOSE_UP_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORT_FAST_CHECK_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORT_FAST_CHECK_TYPE.java
new file mode 100644
index 0000000..314a341
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORT_FAST_CHECK_TYPE.java
@@ -0,0 +1,23 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_SUPPORT_FAST_CHECK_TYPE {
+ /**
+ *未知
+ */
+ EM_SUPPORT_FAST_CHECK_UNKNOWN(-1),
+ /**
+ * 不支持
+ */
+ EM_SUPPORT_FAST_CHECK_NONSUPPORT(0),
+ /**
+ * 支持
+ */
+ EM_SUPPORT_FAST_CHECK_SUPPORT(1);
+ private int type;
+ EM_SUPPORT_FAST_CHECK_TYPE(int type) {
+ this.type=type;
+ }
+ public int getType(){
+ return type;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORT_FAST_IMPORT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORT_FAST_IMPORT_TYPE.java
new file mode 100644
index 0000000..fe9bef2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORT_FAST_IMPORT_TYPE.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_SUPPORT_FAST_IMPORT_TYPE {
+ /**
+ * 未知
+ */
+ EM_SUPPORT_FAST_IMPORT_UNKNOWN(-1),
+ /**
+ * 不支持
+ */
+ EM_SUPPORT_FAST_IMPORT_NONSUPPORT(0),
+ /**
+ * 支持
+ */
+ EM_SUPPORT_FAST_IMPORT_SUPPORT(1);
+ private int type;
+
+ EM_SUPPORT_FAST_IMPORT_TYPE(int type) {
+ this.type=type;
+ }
+ public int getType(){
+ return type;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORT_FOCUS_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORT_FOCUS_MODE.java
new file mode 100644
index 0000000..7ab06c7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORT_FOCUS_MODE.java
@@ -0,0 +1,43 @@
+package com.netsdk.lib.enumeration;/**
+ * @author 47081
+ * @descriptio
+ * @date 2020/11/9
+ * @version 1.0
+ */
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 支持的焦距模式对应枚举
+ * @date 2020/11/9
+ */
+public enum EM_SUPPORT_FOCUS_MODE {
+ ENUM_SUPPORT_FOCUS_CAR(1, "看清车模式"),
+ ENUM_SUPPORT_FOCUS_PLATE(2, "看清车牌模式"),
+ ENUM_SUPPORT_FOCUS_PEOPLE(3, "看清人模式"),
+ ENUM_SUPPORT_FOCUS_FACE(4, "看清人脸模式");
+
+ private EM_SUPPORT_FOCUS_MODE(int mode, String desc) {
+ this.mode = mode;
+ this.desc = desc;
+ }
+
+ private int mode;
+ private String desc;
+
+ public int getMode() {
+ return mode;
+ }
+
+ public void setMode(int mode) {
+ this.mode = mode;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORT_HELMET_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORT_HELMET_TYPE.java
new file mode 100644
index 0000000..4aceb92
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORT_HELMET_TYPE.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 支持安全帽功能
+* @origin autoTool
+* @date 2023/02/10 14:34:21
+*/
+public enum EM_SUPPORT_HELMET_TYPE {
+/**
+未知
+*/
+EM_SUPPORT_HELMET_TYPE_UNKNOWN(-1,"未知"),
+/**
+不支持
+*/
+EM_SUPPORT_HELMET_TYPE_NO_SUPPORT(0,"不支持"),
+/**
+支持
+*/
+EM_SUPPORT_HELMET_TYPE_SUPPORT(1,"支持");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_SUPPORT_HELMET_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_SUPPORT_HELMET_TYPE enumType : EM_SUPPORT_HELMET_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_SUPPORT_HELMET_TYPE enumType : EM_SUPPORT_HELMET_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_SUPPORT_HELMET_TYPE getEnum(int value) {
+ for (EM_SUPPORT_HELMET_TYPE e : EM_SUPPORT_HELMET_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SUPPORT_HELMET_TYPE.EM_SUPPORT_HELMET_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORT_LOCALDATA_STORE.java b/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORT_LOCALDATA_STORE.java
new file mode 100644
index 0000000..cac1e6f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_SUPPORT_LOCALDATA_STORE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 是否支持本地存储
+* @date 2022/08/22 10:11:26
+*/
+public enum EM_SUPPORT_LOCALDATA_STORE {
+/**
+未知
+*/
+EM_SUPPORT_LOCALDATA_STORE_UNKNOWN(-1,"未知"),
+/**
+不支持
+*/
+EM_SUPPORT_LOCALDATA_STORE_NO(0,"不支持"),
+/**
+支持
+*/
+EM_SUPPORT_LOCALDATA_STORE_YES(1,"支持");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_SUPPORT_LOCALDATA_STORE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_SUPPORT_LOCALDATA_STORE enumType : EM_SUPPORT_LOCALDATA_STORE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_SUPPORT_LOCALDATA_STORE enumType : EM_SUPPORT_LOCALDATA_STORE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_SUPPORT_LOCALDATA_STORE getEnum(int value) {
+ for (EM_SUPPORT_LOCALDATA_STORE e : EM_SUPPORT_LOCALDATA_STORE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_SUPPORT_LOCALDATA_STORE.EM_SUPPORT_LOCALDATA_STORE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TALK_AUDIO_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TALK_AUDIO_TYPE.java
new file mode 100644
index 0000000..d217ef9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TALK_AUDIO_TYPE.java
@@ -0,0 +1,21 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 音频编码压缩格式
+ * @author 47081
+ * @version 1.0
+ * @description
+ * @date 2020/6/9
+ */
+public enum EM_TALK_AUDIO_TYPE {
+
+ EM_TALK_AUDIO_PCM,
+ EM_TALK_AUDIO_ADPCM,
+ EM_TALK_AUDIO_G711A,
+ EM_TALK_AUDIO_G711Mu,
+ EM_TALK_AUDIO_G726,
+ EM_TALK_AUDIO_G729,
+ EM_TALK_AUDIO_MPEG2,
+ EM_TALK_AUDIO_AMR,
+ EM_TALK_AUDIO_AAC,
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TAMPERALTERSTATUS_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TAMPERALTERSTATUS_TYPE.java
new file mode 100644
index 0000000..a98a61e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TAMPERALTERSTATUS_TYPE.java
@@ -0,0 +1,40 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 设备锁状态
+ * @date 2021/2/22
+ */
+public enum EM_TAMPERALTERSTATUS_TYPE {
+ /** 未知 */
+ EM_TAMPERALTERSTATUS_UNKNOWN(-1, "未知"),
+ /** 关闭 */
+ EM_TAMPERALTERSTATUS_CLOSE(0, "关闭"),
+ /** 开启 */
+ EM_TAMPERALTERSTATUS_OPEN(1, "开启");
+ private int type;
+ private String desc;
+
+ EM_TAMPERALTERSTATUS_TYPE(int type, String desc) {
+ this.type = type;
+ this.desc = desc;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public static EM_TAMPERALTERSTATUS_TYPE getTamperaltersStatus(int type) {
+ for (EM_TAMPERALTERSTATUS_TYPE statusType : EM_TAMPERALTERSTATUS_TYPE.values()) {
+ if (statusType.type == type) {
+ return statusType;
+ }
+ }
+ return EM_TAMPERALTERSTATUS_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TANK_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_TANK_STATUS.java
new file mode 100644
index 0000000..dfed758
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TANK_STATUS.java
@@ -0,0 +1,60 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 贮柜当前状态
+ * @date 2022/10/28 11:34:32
+ */
+public enum EM_TANK_STATUS {
+ /**
+ * 未知
+ */
+ EM_TANK_STATUS_UNKNOWN(0, "未知"),
+ /**
+ * 出料
+ */
+ EM_TANK_STATUS_DISCHARGING(1, "出料"),
+ /**
+ * 进料
+ */
+ EM_TANK_STATUS_CHARGING(2, "进料"),
+ /**
+ * 空闲
+ */
+ EM_TANK_STATUS_IDLE(3, "空闲");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_TANK_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TANK_STATUS enumType : EM_TANK_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TANK_STATUS enumType : EM_TANK_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TEMPERATUREEX_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TEMPERATUREEX_TYPE.java
new file mode 100644
index 0000000..d517f68
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TEMPERATUREEX_TYPE.java
@@ -0,0 +1,80 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 温度类型
+ * @date 2022/05/12 16:32:08
+ */
+public enum EM_TEMPERATUREEX_TYPE {
+ /**
+ * 未知
+ */
+ EM_TEMPERATUREEX_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 全部
+ */
+ EM_TEMPERATUREEX_TYPE_ALL(1, "全部"),
+ /**
+ * 电源
+ */
+ EM_TEMPERATUREEX_TYPE_POWER(2, "电源"),
+ /**
+ * 机柜
+ */
+ EM_TEMPERATUREEX_TYPE_CABINET(3, "机柜"),
+ /**
+ * 环境
+ */
+ EM_TEMPERATUREEX_TYPE_GLOBAL(4, "环境"),
+ /**
+ * 主板
+ */
+ EM_TEMPERATUREEX_TYPE_MAINBOARD(5, "主板"),
+ /**
+ * 子卡
+ */
+ EM_TEMPERATUREEX_TYPE_CARD(6, "子卡"),
+ /**
+ * 背板
+ */
+ EM_TEMPERATUREEX_TYPE_BACKBOARD(7, "背板"),
+ /**
+ * 处理器
+ */
+ EM_TEMPERATUREEX_TYPE_CPU(8, "处理器");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_TEMPERATUREEX_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TEMPERATUREEX_TYPE enumType : EM_TEMPERATUREEX_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TEMPERATUREEX_TYPE enumType : EM_TEMPERATUREEX_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TEMPERATURE_UNIT.java b/src/main/java/com/netsdk/lib/enumeration/EM_TEMPERATURE_UNIT.java
new file mode 100644
index 0000000..775c77c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TEMPERATURE_UNIT.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 温度单位
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_TEMPERATURE_UNIT extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_TEMPERATURE_UNKNOWN = -1;
+ /**
+ * 摄氏度
+ */
+ public static final int EM_TEMPERATURE_CENTIGRADE = 0;
+ /**
+ * 华氏度
+ */
+ public static final int EM_TEMPERATURE_FAHRENHEIT = 1;
+ /**
+ * 开尔文
+ */
+ public static final int EM_TEMPERATURE_KELVIN = 2;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TEMPERATURE_UNIT_EX.java b/src/main/java/com/netsdk/lib/enumeration/EM_TEMPERATURE_UNIT_EX.java
new file mode 100644
index 0000000..991b9ea
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TEMPERATURE_UNIT_EX.java
@@ -0,0 +1,71 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 温度单位
+ *
+ * @author 47040
+ * @version 1.0.0
+ * @since Created in 2021/3/8 20:45
+ */
+public enum EM_TEMPERATURE_UNIT_EX {
+
+ /**
+ * 未知
+ */
+ EM_TEMPERATURE_EX_UNKNOWN(0, "未知"),
+ /**
+ * 摄氏度
+ */
+ EM_TEMPERATURE_EX_CENTIGRADE(1, "摄氏度"),
+ /**
+ * 华氏度
+ */
+ EM_TEMPERATURE_EX_FAHRENHEIT(2, "华氏度"),
+ /**
+ * 开尔文
+ */
+ EM_TEMPERATURE_EX_KELVIN(3, "开尔文");
+
+ private final int value;
+ private final String note;
+
+ EM_TEMPERATURE_UNIT_EX(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TEMPERATURE_UNIT_EX enumType : EM_TEMPERATURE_UNIT_EX.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TEMPERATURE_UNIT_EX enumType : EM_TEMPERATURE_UNIT_EX.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_TEMPERATURE_UNIT_EX getEnum(int value) {
+ for (EM_TEMPERATURE_UNIT_EX e : EM_TEMPERATURE_UNIT_EX.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_TEMPERATURE_UNIT_EX.EM_TEMPERATURE_EX_UNKNOWN;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TEMP_MEASURE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TEMP_MEASURE_TYPE.java
new file mode 100644
index 0000000..47b68cd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TEMP_MEASURE_TYPE.java
@@ -0,0 +1,38 @@
+package com.netsdk.lib.enumeration;
+
+
+
+/**
+ * 门禁测温类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/09 17:05
+ */
+public enum EM_TEMP_MEASURE_TYPE {
+
+ /**
+ * 未知
+ */
+ EM_TEMP_MEASURE_TYPE_UNKNOWN,
+
+ /**
+ * 单片机红外测温
+ */
+ EM_TEMP_MEASURE_TYPE_INFRARED,
+
+ /**
+ * 热成像测温
+ */
+ EM_TEMP_MEASURE_TYPE_THERMAL_IMAGE,
+
+ /**
+ * 高德测温模块测温
+ */
+ EM_TEMP_MEASURE_TYPE_GUIDE_MODULE,
+
+ /**
+ * 单点手腕测温
+ */
+ EM_TEMP_MEASURE_TYPE_WRIST,
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TEST_ITEMS.java b/src/main/java/com/netsdk/lib/enumeration/EM_TEST_ITEMS.java
new file mode 100644
index 0000000..5ffcfa0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TEST_ITEMS.java
@@ -0,0 +1,59 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description
+ * @date 2021/8/20 11:48
+ */
+public enum EM_TEST_ITEMS {
+ EM_TEST_ITEMS_UNKNOWN(-1,"未知"), // 未知
+ EM_TEST_ITEMS_OTHER(0,"其他项目"), // 其他项目
+ EM_TEST_ITEMS_HAND_TEST(1,"手部测试静电电阻"), // 手部测试静电电阻
+ EM_TEST_ITEMS_TWOFEET_TEST(2,"双脚测试静电电阻"), // 双脚测试静电电阻
+ EM_TEST_ITEMS_HANDTWOFEET_TEST(3,"手部和双脚测试静电电阻"), // 手部和双脚测试静电电阻
+ EM_TEST_ITEMS_NONE(4,"全部不测"); // 全部不测
+
+ private final int value;
+ private final String note;
+
+ EM_TEST_ITEMS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TEST_ITEMS enumType : EM_TEST_ITEMS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TEST_ITEMS enumType : EM_TEST_ITEMS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_TEST_ITEMS getEnum(int value) {
+ for (EM_TEST_ITEMS e : EM_TEST_ITEMS.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_TEST_ITEMS.EM_TEST_ITEMS_UNKNOWN;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_THERMAL_IMAGE_CALIBRATION_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_THERMAL_IMAGE_CALIBRATION_MODE.java
new file mode 100644
index 0000000..72f3582
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_THERMAL_IMAGE_CALIBRATION_MODE.java
@@ -0,0 +1,38 @@
+package com.netsdk.lib.enumeration;
+
+
+
+/**
+ * 热成像标定模式
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/09 17:05
+ */
+public enum EM_THERMAL_IMAGE_CALIBRATION_MODE {
+
+ /**
+ * 未知
+ */
+ EM_THERMAL_IMAGE_CALIBRATION_MODE_UNKNOWN,
+
+ /**
+ * 室内模式
+ */
+ EM_THERMAL_IMAGE_CALIBRATION_MODE_INDOOR,
+
+ /**
+ * 壁装模式
+ */
+ EM_THERMAL_IMAGE_CALIBRATION_MODE_WALL_MOUNTING,
+
+ /**
+ * 闸机模式
+ */
+ EM_THERMAL_IMAGE_CALIBRATION_MODE_GATE,
+
+ /**
+ * 高端落地式模式
+ */
+ EM_THERMAL_IMAGE_CALIBRATION_MODE_FLOOR,
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_ACTION_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_ACTION_TYPE.java
new file mode 100644
index 0000000..a33aeba
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_ACTION_TYPE.java
@@ -0,0 +1,62 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 场景触发执行动作类型
+ * @date 2022/04/20 11:28:14
+ */
+public enum EM_THINGS_ACTION_TYPE {
+ /**
+ * 未知
+ */
+ EM_THINGS_ACTION_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * action/device/setProperty 设置设备属性,对应结构体NET_THINGS_RULECONTENT_ACTION_SETPROPERTY
+ */
+ EM_THINGS_ACTION_TYPE_SETPROPERTY(1, " action/device/setProperty 设置设备属性,对应结构体NET_THINGS_RULECONTENT_ACTION_SETPROPERTY");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_THINGS_ACTION_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_THINGS_ACTION_TYPE enumType : EM_THINGS_ACTION_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_THINGS_ACTION_TYPE enumType : EM_THINGS_ACTION_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_THINGS_ACTION_TYPE getEnum(int value) {
+ for (EM_THINGS_ACTION_TYPE e : EM_THINGS_ACTION_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_THINGS_ACTION_TYPE.EM_THINGS_ACTION_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_CONDITION_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_CONDITION_TYPE.java
new file mode 100644
index 0000000..28e7b25
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_CONDITION_TYPE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 场景触发过滤条件类型
+ * @date 2022/04/20 11:28:14
+ */
+public enum EM_THINGS_CONDITION_TYPE {
+ /**
+ * 未知
+ */
+ EM_THINGS_CONDITION_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * condition/timeRange 比较当前时间是否在一个区间内,对应结构体
+ */
+ EM_THINGS_CONDITION_TYPE_TIMERANGE(1, " condition/timeRange 比较当前时间是否在一个区间内,对应结构体"),
+ /**
+ * condition/device/property 设备属性过滤,对应结构体
+ */
+ EM_THINGS_CONDITION_TYPE_PROPERTY(2, " condition/device/property 设备属性过滤,对应结构体");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_THINGS_CONDITION_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_THINGS_CONDITION_TYPE enumType : EM_THINGS_CONDITION_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_THINGS_CONDITION_TYPE enumType : EM_THINGS_CONDITION_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_THINGS_CONDITION_TYPE getEnum(int value) {
+ for (EM_THINGS_CONDITION_TYPE e : EM_THINGS_CONDITION_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_THINGS_CONDITION_TYPE.EM_THINGS_CONDITION_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_CONNECT_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_CONNECT_STATE.java
new file mode 100644
index 0000000..8e2eabf
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_CONNECT_STATE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 设备连接状态
+ * @date 2022/04/20 10:16:56
+ */
+public enum EM_THINGS_CONNECT_STATE {
+ /**
+ * 未知
+ */
+ EM_THINGS_CONNECT_STATE_UNKNOWN(-1, "未知"),
+ /**
+ * 连接断开
+ */
+ EM_THINGS_CONNECT_STATE_DISCONNECT(0, "连接断开"),
+ /**
+ * 已连接
+ */
+ EM_THINGS_CONNECT_STATE_CONNECT(1, "已连接");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_THINGS_CONNECT_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_THINGS_CONNECT_STATE enumType : EM_THINGS_CONNECT_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_THINGS_CONNECT_STATE enumType : EM_THINGS_CONNECT_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+ public static EM_THINGS_CONNECT_STATE getEnum(int value) {
+ for (EM_THINGS_CONNECT_STATE e : EM_THINGS_CONNECT_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_THINGS_CONNECT_STATE.EM_THINGS_CONNECT_STATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_CURRENTSTATUSGET_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_CURRENTSTATUSGET_STATUS.java
new file mode 100644
index 0000000..74c71c2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_CURRENTSTATUSGET_STATUS.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 报警状态
+ * @date 2022/04/20 10:50:24
+ */
+public enum EM_THINGS_CURRENTSTATUSGET_STATUS {
+ /**
+ * 未知
+ */
+ EM_THINGS_CURRENTSTATUSGET_STATUS_UNKNOWN(-1, "未知"),
+ /**
+ * 正常
+ */
+ EM_THINGS_CURRENTSTATUSGET_STATUS_NORMAL(0, "正常"),
+ /**
+ * 预警
+ */
+ EM_THINGS_CURRENTSTATUSGET_STATUS_EARLY(1, "预警"),
+ /**
+ * 报警
+ */
+ EM_THINGS_CURRENTSTATUSGET_STATUS_ALARM(2, "报警");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_THINGS_CURRENTSTATUSGET_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_THINGS_CURRENTSTATUSGET_STATUS enumType : EM_THINGS_CURRENTSTATUSGET_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_THINGS_CURRENTSTATUSGET_STATUS enumType : EM_THINGS_CURRENTSTATUSGET_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+ public static EM_THINGS_CURRENTSTATUSGET_STATUS getEnum(int value) {
+ for (EM_THINGS_CURRENTSTATUSGET_STATUS e : EM_THINGS_CURRENTSTATUSGET_STATUS.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_THINGS_CURRENTSTATUSGET_STATUS.EM_THINGS_CURRENTSTATUSGET_STATUS_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_RULECONTENT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_RULECONTENT_TYPE.java
new file mode 100644
index 0000000..cd967bc
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_RULECONTENT_TYPE.java
@@ -0,0 +1,62 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 场景规则类型
+ * @date 2022/04/20 10:50:21
+ */
+public enum EM_THINGS_RULECONTENT_TYPE {
+ /**
+ * 未知
+ */
+ EM_THINGS_RULECONTENT_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * IFTTT类型
+ */
+ EM_THINGS_RULECONTENT_TYPE_IFTTT(1, "IFTTT类型");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_THINGS_RULECONTENT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_THINGS_RULECONTENT_TYPE enumType : EM_THINGS_RULECONTENT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_THINGS_RULECONTENT_TYPE enumType : EM_THINGS_RULECONTENT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_THINGS_RULECONTENT_TYPE getEnum(int value) {
+ for (EM_THINGS_RULECONTENT_TYPE e : EM_THINGS_RULECONTENT_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_THINGS_RULECONTENT_TYPE.EM_THINGS_RULECONTENT_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_SERVICE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_SERVICE_TYPE.java
new file mode 100644
index 0000000..e6ffabc
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_SERVICE_TYPE.java
@@ -0,0 +1,118 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 物模型服务类型
+ * @date 2022/04/20 10:16:57
+ */
+public enum EM_THINGS_SERVICE_TYPE {
+ /**
+ * 阀门控制,入参:NET_IN_THINGS_SERVICE_VALVECONTROL,出参:NET_OUT_THINGS_SERVICE_VALVECONTROL
+ */
+ EM_THINGS_SERVICE_TYPE_VALVECONTROL(0, "阀门控制,入参:NET_IN_THINGS_SERVICE_VALVECONTROL,出参:NET_OUT_THINGS_SERVICE_VALVECONTROL"),
+ /**
+ * 电量清零,入参:NET_IN_THINGS_SERVICE_CHARGECLEAR,出参:NET_OUT_THINGS_SERVICE_CHARGECLEAR
+ */
+ EM_THINGS_SERVICE_TYPE_CHARGECLEAR(1, "电量清零,入参:NET_IN_THINGS_SERVICE_CHARGECLEAR,出参:NET_OUT_THINGS_SERVICE_CHARGECLEAR"),
+ /**
+ * 漏电自检,入参:NET_IN_THINGS_SERVICE_LEAKCURTPOST,出参:NET_OUT_THINGS_SERVICE_LEAKCURTPOST
+ */
+ EM_THINGS_SERVICE_TYPE_LEAKCURTPOST(2, "漏电自检,入参:NET_IN_THINGS_SERVICE_LEAKCURTPOST,出参:NET_OUT_THINGS_SERVICE_LEAKCURTPOST"),
+ /**
+ * 漏电自检异步,入参:NET_IN_THINGS_SERVICE_LEAKCURTPOSTASYNC,出参:NET_OUT_THINGS_SERVICE_LEAKCURTPOSTASYNC
+ */
+ EM_THINGS_SERVICE_TYPE_LEAKCURTPOSTASYNC(3, "漏电自检异步,入参:NET_IN_THINGS_SERVICE_LEAKCURTPOSTASYNC,出参:NET_OUT_THINGS_SERVICE_LEAKCURTPOSTASYNC"),
+ /**
+ * 空开红蓝灯闪烁(寻找空开),入参:NET_IN_THINGS_SERVICE_AIRSWITHFIND,出参:NET_OUT_THINGS_SERVICE_AIRSWITHFIND
+ */
+ EM_THINGS_SERVICE_TYPE_AIRSWITHFIND(4, "空开红蓝灯闪烁(寻找空开),入参:NET_IN_THINGS_SERVICE_AIRSWITHFIND,出参:NET_OUT_THINGS_SERVICE_AIRSWITHFIND"),
+ /**
+ * 空开恢复出厂设置,入参:NET_IN_THINGS_SERVICE_AIRSWITHRESET,出参:NET_OUT_THINGS_SERVICE_AIRSWITHRESET
+ */
+ EM_THINGS_SERVICE_TYPE_AIRSWITHRESET(5, "空开恢复出厂设置,入参:NET_IN_THINGS_SERVICE_AIRSWITHRESET,出参:NET_OUT_THINGS_SERVICE_AIRSWITHRESET"),
+ /**
+ * 添加联动规则,入参:NET_IN_THINGS_SERVICE_ADDRULE,出参:NET_OUT_THINGS_SERVICE_ADDRULE
+ */
+ EM_THINGS_SERVICE_TYPE_ADDRULE(6, "添加联动规则,入参:NET_IN_THINGS_SERVICE_ADDRULE,出参:NET_OUT_THINGS_SERVICE_ADDRULE"),
+ /**
+ * 删除联动规则,入参:NET_IN_THINGS_SERVICE_DELRULE,出参:NET_OUT_THINGS_SERVICE_DELRULE
+ */
+ EM_THINGS_SERVICE_TYPE_DELRULE(7, "删除联动规则,入参:NET_IN_THINGS_SERVICE_DELRULE,出参:NET_OUT_THINGS_SERVICE_DELRULE"),
+ /**
+ * 修改联动规则,入参:NET_IN_THINGS_SERVICE_MODRULE,出参:NET_OUT_THINGS_SERVICE_MODRULE
+ */
+ EM_THINGS_SERVICE_TYPE_MODRULE(8, "修改联动规则,入参:NET_IN_THINGS_SERVICE_MODRULE,出参:NET_OUT_THINGS_SERVICE_MODRULE"),
+ /**
+ * 查询联动规则,入参:NET_IN_THINGS_SERVICE_QUERULE,出参:NET_OUT_THINGS_SERVICE_QUERULE
+ */
+ EM_THINGS_SERVICE_TYPE_QUERULE(9, "查询联动规则,入参:NET_IN_THINGS_SERVICE_QUERULE,出参:NET_OUT_THINGS_SERVICE_QUERULE"),
+ /**
+ * 使能联动规则,入参:NET_IN_THINGS_SERVICE_ENABLE,出参:NET_OUT_THINGS_SERVICE_ENABLE
+ */
+ EM_THINGS_SERVICE_TYPE_ENABLERULE(10, "使能联动规则,入参:NET_IN_THINGS_SERVICE_ENABLE,出参:NET_OUT_THINGS_SERVICE_ENABLE"),
+ /**
+ * 添加设备,入参:NET_IN_THINGS_SERVICE_ADDDEVICE,出参:NET_OUT_THINGS_SERVICE_ADDDEVICE
+ */
+ EM_THINGS_SERVICE_TYPE_ADDDEVICE(11, "添加设备,入参:NET_IN_THINGS_SERVICE_ADDDEVICE,出参:NET_OUT_THINGS_SERVICE_ADDDEVICE"),
+ /**
+ * 删除子设备,入参:NET_IN_THINGS_SERVICE_DELDEVICE,出参:NET_OUT_THINGS_SERVICE_DELDEVICE
+ */
+ EM_THINGS_SERVICE_TYPE_DELDEVICE(12, "删除子设备,入参:NET_IN_THINGS_SERVICE_DELDEVICE,出参:NET_OUT_THINGS_SERVICE_DELDEVICE"),
+ /**
+ * 子设备替换,入参:NET_IN_THINGS_SERVICE_DEVREPLACE,出参:NET_OUT_THINGS_SERVICE_DEVREPLACE
+ */
+ EM_THINGS_SERVICE_TYPE_DEVREPLACE(13, "子设备替换,入参:NET_IN_THINGS_SERVICE_DEVREPLACE,出参:NET_OUT_THINGS_SERVICE_DEVREPLACE"),
+ /**
+ * 离线日志清除,入参:NET_IN_THINGS_SERVICE_OFFLINELOGCLEAN,出参:NET_OUT_THINGS_SERVICE_OFFLINELOGCLEAN
+ */
+ EM_THINGS_SERVICE_TYPE_OFFLINELOGCLEAN(14, "离线日志清除,入参:NET_IN_THINGS_SERVICE_OFFLINELOGCLEAN,出参:NET_OUT_THINGS_SERVICE_OFFLINELOGCLEAN"),
+ /**
+ * 获取所有空开当前报警状态,入参:NET_IN_THINGS_SERVICE_CURRENTSTATUSGET,出参:NET_OUT_THINGS_SERVICE_CURRENTSTATUSGET
+ */
+ EM_THINGS_SERVICE_TYPE_CURRENTSTATUSGET(15, "获取所有空开当前报警状态,入参:NET_IN_THINGS_SERVICE_CURRENTSTATUSGET,出参:NET_OUT_THINGS_SERVICE_CURRENTSTATUSGET");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_THINGS_SERVICE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_THINGS_SERVICE_TYPE enumType : EM_THINGS_SERVICE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_THINGS_SERVICE_TYPE enumType : EM_THINGS_SERVICE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_THINGS_SERVICE_TYPE getEnum(int value) {
+ for (EM_THINGS_SERVICE_TYPE e : EM_THINGS_SERVICE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_THINGS_SERVICE_TYPE.EM_THINGS_SERVICE_TYPE_VALVECONTROL;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_TRIGGER_TIMER_CORN_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_TRIGGER_TIMER_CORN_TYPE.java
new file mode 100644
index 0000000..65526eb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_TRIGGER_TIMER_CORN_TYPE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 定时触发类型内容表达式类型
+ * @date 2022/04/20 11:28:15
+ */
+public enum EM_THINGS_TRIGGER_TIMER_CORN_TYPE {
+ /**
+ * 未知
+ */
+ EM_THINGS_TRIGGER_TIMER_CORN_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * quartz_cron 表达式结构:$second $minute $hour $dayofmonth $month $dayofweek $year
+ */
+ EM_THINGS_TRIGGER_TIMER_CORN_TYPE_QUARTZCORN(1, " quartz_cron 表达式结构:$second $minute $hour $dayofmonth $month $dayofweek $year"),
+ /**
+ * linux 表达式结构:$minute $hour $day of month $month $dayofweek
+ */
+ EM_THINGS_TRIGGER_TIMER_CORN_TYPE_LINUX(2, " linux 表达式结构:$minute $hour $day of month $month $dayofweek");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_THINGS_TRIGGER_TIMER_CORN_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_THINGS_TRIGGER_TIMER_CORN_TYPE enumType : EM_THINGS_TRIGGER_TIMER_CORN_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_THINGS_TRIGGER_TIMER_CORN_TYPE enumType : EM_THINGS_TRIGGER_TIMER_CORN_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_THINGS_TRIGGER_TIMER_CORN_TYPE getEnum(int value) {
+ for (EM_THINGS_TRIGGER_TIMER_CORN_TYPE e : EM_THINGS_TRIGGER_TIMER_CORN_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_THINGS_TRIGGER_TIMER_CORN_TYPE.EM_THINGS_TRIGGER_TIMER_CORN_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_TRIGGER_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_TRIGGER_TYPE.java
new file mode 100644
index 0000000..51a4fdf
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_THINGS_TRIGGER_TYPE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 场景的触发类型
+ * @date 2022/04/20 11:28:13
+ */
+public enum EM_THINGS_TRIGGER_TYPE {
+ /**
+ * 未知
+ */
+ EM_THINGS_TRIGGER_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * trigger/timer 定时触发,对应结构体NET_THINGS_RULECONTENT_TRIGGER_TIMER
+ */
+ EM_THINGS_TRIGGER_TYPE_TRIGGER_TIMER(1, " trigger/timer 定时触发,对应结构体NET_THINGS_RULECONTENT_TRIGGER_TIMER"),
+ /**
+ * trigger/device/property 设备属性触发,对应结构体NET_THINGS_RULECONTENT_TRIGGER_PROPERTY
+ */
+ EM_THINGS_TRIGGER_TYPE_TRIGGER_PROPERTY(2, " trigger/device/property 设备属性触发,对应结构体NET_THINGS_RULECONTENT_TRIGGER_PROPERTY");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_THINGS_TRIGGER_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_THINGS_TRIGGER_TYPE enumType : EM_THINGS_TRIGGER_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_THINGS_TRIGGER_TYPE enumType : EM_THINGS_TRIGGER_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_THINGS_TRIGGER_TYPE getEnum(int value) {
+ for (EM_THINGS_TRIGGER_TYPE e : EM_THINGS_TRIGGER_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_THINGS_TRIGGER_TYPE.EM_THINGS_TRIGGER_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TITLE_TEXT_ALIGNTYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TITLE_TEXT_ALIGNTYPE.java
new file mode 100644
index 0000000..7ab3d6f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TITLE_TEXT_ALIGNTYPE.java
@@ -0,0 +1,85 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 标题文本对齐方式
+ * @date 2022/05/23 08:51:37
+ */
+public enum EM_TITLE_TEXT_ALIGNTYPE {
+ /**
+ * 无效的对齐方式
+ */
+ EM_TEXT_ALIGNTYPE_INVALID(0, "无效的对齐方式"),
+ /**
+ * 左对齐
+ */
+ EM_TEXT_ALIGNTYPE_LEFT(1, "左对齐"),
+ /**
+ * X坐标中对齐
+ */
+ EM_TEXT_ALIGNTYPE_XCENTER(2, "X坐标中对齐"),
+ /**
+ * Y坐标中对齐
+ */
+ EM_TEXT_ALIGNTYPE_YCENTER(3, "Y坐标中对齐"),
+ /**
+ * 居中
+ */
+ EM_TEXT_ALIGNTYPE_CENTER(4, "居中"),
+ /**
+ * 右对齐
+ */
+ EM_TEXT_ALIGNTYPE_RIGHT(5, "右对齐"),
+ /**
+ * 按照顶部对齐
+ */
+ EM_TEXT_ALIGNTYPE_TOP(6, "按照顶部对齐"),
+ /**
+ * 按照底部对齐
+ */
+ EM_TEXT_ALIGNTYPE_BOTTOM(7, "按照底部对齐"),
+ /**
+ * 按照左上角对齐
+ */
+ EM_TEXT_ALIGNTYPE_LEFTTOP(8, "按照左上角对齐"),
+ /**
+ * 换行对齐
+ */
+ EM_TEXT_ALIGNTYPE_CHANGELINE(9, "换行对齐");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_TITLE_TEXT_ALIGNTYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TITLE_TEXT_ALIGNTYPE enumType : EM_TITLE_TEXT_ALIGNTYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TITLE_TEXT_ALIGNTYPE enumType : EM_TITLE_TEXT_ALIGNTYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TOLLS_VEHICLE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TOLLS_VEHICLE_TYPE.java
new file mode 100644
index 0000000..1ab6506
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TOLLS_VEHICLE_TYPE.java
@@ -0,0 +1,122 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author 260611
+ * @description 收费公路车辆通行费车型分类
+ * @date 2022/07/20 16:46:40
+ */
+public enum EM_TOLLS_VEHICLE_TYPE {
+ /**
+ * 未知
+ */
+ EM_TOLLS_VEHICLE_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 一型客车
+ */
+ EM_TOLLS_VEHICLE_TYPE_PASSENGER_CAR1(1, "一型客车"),
+ /**
+ * 二型客车
+ */
+ EM_TOLLS_VEHICLE_TYPE_PASSENGER_CAR2(2, "二型客车"),
+ /**
+ * 三型客车
+ */
+ EM_TOLLS_VEHICLE_TYPE_PASSENGER_CAR3(3, "三型客车"),
+ /**
+ * 四型客车
+ */
+ EM_TOLLS_VEHICLE_TYPE_PASSENGER_CAR4(4, "四型客车"),
+ /**
+ * 一型货车
+ */
+ EM_TOLLS_VEHICLE_TYPE_TRUCK1(11, "一型货车"),
+ /**
+ * 二型货车
+ */
+ EM_TOLLS_VEHICLE_TYPE_TRUCK2(12, "二型货车"),
+ /**
+ * 三型货车
+ */
+ EM_TOLLS_VEHICLE_TYPE_TRUCK3(13, "三型货车"),
+ /**
+ * 四型货车
+ */
+ EM_TOLLS_VEHICLE_TYPE_TRUCK4(14, "四型货车"),
+ /**
+ * 五型货车
+ */
+ EM_TOLLS_VEHICLE_TYPE_TRUCK5(15, "五型货车"),
+ /**
+ * 六型货车
+ */
+ EM_TOLLS_VEHICLE_TYPE_TRUCK6(16, "六型货车"),
+ /**
+ * 一型专项作业车
+ */
+ EM_TOLLS_VEHICLE_TYPE_OPERATION_VEHICLE1(21, "一型专项作业车"),
+ /**
+ * 二型专项作业车
+ */
+ EM_TOLLS_VEHICLE_TYPE_OPERATION_VEHICLE2(22, "二型专项作业车"),
+ /**
+ * 三型专项作业车
+ */
+ EM_TOLLS_VEHICLE_TYPE_OPERATION_VEHICLE3(23, "三型专项作业车"),
+ /**
+ * 四型专项作业车
+ */
+ EM_TOLLS_VEHICLE_TYPE_OPERATION_VEHICLE4(24, "四型专项作业车"),
+ /**
+ * 五型专项作业车
+ */
+ EM_TOLLS_VEHICLE_TYPE_OPERATION_VEHICLE5(25, "五型专项作业车"),
+ /**
+ * 六型专项作业车
+ */
+ EM_TOLLS_VEHICLE_TYPE_OPERATION_VEHICLE6(26, "六型专项作业车");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_TOLLS_VEHICLE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TOLLS_VEHICLE_TYPE enumType : EM_TOLLS_VEHICLE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TOLLS_VEHICLE_TYPE enumType : EM_TOLLS_VEHICLE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_TOLLS_VEHICLE_TYPE getEnum(int value) {
+ for (EM_TOLLS_VEHICLE_TYPE e : EM_TOLLS_VEHICLE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_TOLLS_VEHICLE_TYPE.EM_TOLLS_VEHICLE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFICCAR_CAR_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFICCAR_CAR_TYPE.java
new file mode 100644
index 0000000..9fcc641
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFICCAR_CAR_TYPE.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 车辆类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_TRAFFICCAR_CAR_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_TRAFFICCAR_CAR_TYPE_UNKNOWN = 0;
+ /**
+ * 允许名单车辆
+ */
+ public static final int EM_TRAFFICCAR_CAR_TYPE_TRUST_CAR = 1;
+ /**
+ * 禁止名单车辆
+ */
+ public static final int EM_TRAFFICCAR_CAR_TYPE_SUSPICIOUS_CAR = 2;
+ /**
+ * 非允许名单且非禁止名单车辆
+ */
+ public static final int EM_TRAFFICCAR_CAR_TYPE_NORMAL_CAR = 3;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFICCAR_LANE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFICCAR_LANE_TYPE.java
new file mode 100644
index 0000000..4ab8de3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFICCAR_LANE_TYPE.java
@@ -0,0 +1,46 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 车道类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_TRAFFICCAR_LANE_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_TRAFFICCAR_LANE_TYPE_UNKNOWN = 0;
+ /**
+ * 普通车道
+ */
+ public static final int EM_TRAFFICCAR_LANE_TYPE_NORMAL = 1;
+ /**
+ * 非机动车车道
+ */
+ public static final int EM_TRAFFICCAR_LANE_TYPE_NONMOTOR = 2;
+ /**
+ * 小型车车道
+ */
+ public static final int EM_TRAFFICCAR_LANE_TYPE_LIGHT_DUTY = 3;
+ /**
+ * 公交车车道
+ */
+ public static final int EM_TRAFFICCAR_LANE_TYPE_BUS = 4;
+ /**
+ * 应急车道
+ */
+ public static final int EM_TRAFFICCAR_LANE_TYPE_EMERGENCY = 5;
+ /**
+ * 危险品车道
+ */
+ public static final int EM_TRAFFICCAR_LANE_TYPE_DANGEROUS = 6;
+ /**
+ * 潮汐车道
+ */
+ public static final int EM_TRAFFICCAR_LANE_TYPE_TIDAL = 7;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFICCAR_MOVE_DIRECTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFICCAR_MOVE_DIRECTION.java
new file mode 100644
index 0000000..3eee6e4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFICCAR_MOVE_DIRECTION.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 交通车辆行驶方向类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_TRAFFICCAR_MOVE_DIRECTION extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知的
+ */
+ public static final int EM_TRAFFICCAR_MOVE_DIRECTION_UNKNOWN = 0;
+ /**
+ * 直行
+ */
+ public static final int EM_TRAFFICCAR_MOVE_DIRECTION_STRAIGHT = 1;
+ /**
+ * 左转
+ */
+ public static final int EM_TRAFFICCAR_MOVE_DIRECTION_TURN_LEFT = 2;
+ /**
+ * 右转
+ */
+ public static final int EM_TRAFFICCAR_MOVE_DIRECTION_TURN_RIGHT = 3;
+ /**
+ * 掉头
+ */
+ public static final int EM_TRAFFICCAR_MOVE_DIRECTION_TURN_AROUND = 4;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFICSTROBE_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFICSTROBE_STATUS.java
new file mode 100644
index 0000000..5ed08c5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFICSTROBE_STATUS.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 道闸栏状态
+ * @date 2020/12/15
+ */
+public enum EM_TRAFFICSTROBE_STATUS {
+
+ // 未知
+ NET_TRAFFICSTROBE_STATUS_UNKNOWN(0, "未知"),
+ // 道闸栏关闭
+ NET_TRAFFICSTROBE_STATUS_CLOSE_COMPLETE(1, "道闸栏关闭"),
+ // 道闸栏打开
+ NET_TRAFFICSTROBE_STATUS_OPEN_COMPLETE(2, "道闸栏打开"),
+ // 道闸栏未完全关闭
+ NET_TRAFFICSTROBE_STATUS_NOT_CLOSE_COMPLETE(3, "道闸栏未完全关闭"),
+ // 道闸栏未完全打开
+ NET_TRAFFICSTROBE_STATUS_NOT_OPEN_COMPLETE(4, "道闸栏未完全打开"),
+ // 道闸停止
+ NET_TRAFFICSTROBE_STATUS_NOT_STROBE_STOP(5, "道闸停止");
+
+ private int value;
+ private String note;
+
+ private EM_TRAFFICSTROBE_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFICSTROBE_STATUS enumType : EM_TRAFFICSTROBE_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFICSTROBE_STATUS enumType : EM_TRAFFICSTROBE_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_EVENT.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_EVENT.java
new file mode 100644
index 0000000..15a1929
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_EVENT.java
@@ -0,0 +1,58 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 设备状态
+ * @date 2021/09/02
+ */
+public enum EM_TRAFFIC_EVENT {
+ // 未知
+ EM_TRAFFIC_EVENT_UNKNOWN(0, "未知"),
+ // 交通事故
+ EM_TRAFFIC_EVENT_ACCIDENT(1, "交通事故"),
+ // 道路障碍
+ EM_TRAFFIC_EVENT_ROAD_BARRIERS(2, "道路障碍"),
+ // 路面积水
+ EM_TRAFFIC_EVENT_ROAD_AREAWATER(3, "路面积水"),
+ // 路面湿滑
+ EM_TRAFFIC_EVENT_ROAD_SLIPPERY(4, "路面湿滑"),
+ // 路面结冰
+ EM_TRAFFIC_EVENT_ROAD_ICY(5, "路面结冰"),
+ // 道路施工
+ EM_TRAFFIC_EVENT_ROAD_CONSTRUCTION(6, "道路施工");
+
+ private int value;
+ private String note;
+
+ private EM_TRAFFIC_EVENT(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFIC_EVENT enumType : EM_TRAFFIC_EVENT.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFIC_EVENT enumType : EM_TRAFFIC_EVENT.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_FLOW_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_FLOW_STATUS.java
new file mode 100644
index 0000000..10d6b0e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_FLOW_STATUS.java
@@ -0,0 +1,65 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 流量状态
+ *
+ * @author : 47040
+ * @since : Created in 2020/12/17 11:42
+ */
+public enum EM_TRAFFIC_FLOW_STATUS {
+
+ /**
+ * 未知
+ */
+ EM_TRAFFIC_FLOW_STATUS_UNKNOWN(0, "未知"),
+ /**
+ * 交通拥堵
+ */
+ EM_TRAFFIC_FLOW_STATUS_CONGESTION(1, "交通拥堵"),
+ /**
+ * 交通畅通
+ */
+ EM_TRAFFIC_FLOW_STATUS_SMOOTH(2, "交通畅通");
+
+ private final int value;
+ private final String note;
+
+ EM_TRAFFIC_FLOW_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFIC_FLOW_STATUS enumType : EM_TRAFFIC_FLOW_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFIC_FLOW_STATUS enumType : EM_TRAFFIC_FLOW_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_TRAFFIC_FLOW_STATUS getEnum(int value) {
+ for (EM_TRAFFIC_FLOW_STATUS e : EM_TRAFFIC_FLOW_STATUS.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_TRAFFIC_FLOW_STATUS.EM_TRAFFIC_FLOW_STATUS_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_LIGHT_DETECT_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_LIGHT_DETECT_STATE.java
new file mode 100644
index 0000000..b023f0d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_LIGHT_DETECT_STATE.java
@@ -0,0 +1,50 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @version 1.0
+ * @description 红绿灯状态
+ * @date 2020/11/07
+ */
+public enum EM_TRAFFIC_LIGHT_DETECT_STATE {
+ // 未知
+ EM_TRAFFIC_DETECT_STATE_UNKNOWN(-1, "未知"),
+ // 红灯
+ EM_TRAFFIC_DETECT_STATE_RED(0, "红灯"),
+ // 绿灯
+ EM_TRAFFIC_DETECT_STATE_GREEN(1, "绿灯");
+
+ private int value;
+ private String note;
+
+ private EM_TRAFFIC_LIGHT_DETECT_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFIC_LIGHT_DETECT_STATE enumType : EM_TRAFFIC_LIGHT_DETECT_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFIC_LIGHT_DETECT_STATE enumType : EM_TRAFFIC_LIGHT_DETECT_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_DEVICE_WORK_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_DEVICE_WORK_STATE.java
new file mode 100644
index 0000000..06ae0a4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_DEVICE_WORK_STATE.java
@@ -0,0 +1,51 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 智能交通外接设备工作状态
+ * @date 2020/12/14
+ */
+public enum EM_TRAFFIC_SNAP_DEVICE_WORK_STATE {
+ // 未知
+ EM_TRAFFIC_SNAP_DEVICE_WORK_STATE_UNKNOWN(-1, "未知"),
+ // 故障
+ EM_TRAFFIC_SNAP_DEVICE_WORK_STATE_FAULT(0, "故障"),
+ // 正常
+ EM_TRAFFIC_SNAP_DEVICE_WORK_STATE_NORMAL(1, "正常"),
+ // 关闭
+ EM_TRAFFIC_SNAP_DEVICE_WORK_STATE_CLOSE(2, "关闭");
+
+ private int value;
+ private String note;
+
+ private EM_TRAFFIC_SNAP_DEVICE_WORK_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFIC_SNAP_DEVICE_WORK_STATE enumType : EM_TRAFFIC_SNAP_DEVICE_WORK_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFIC_SNAP_DEVICE_WORK_STATE enumType : EM_TRAFFIC_SNAP_DEVICE_WORK_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_GROUND_SENSE_IN_STATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_GROUND_SENSE_IN_STATE_TYPE.java
new file mode 100644
index 0000000..419539f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_GROUND_SENSE_IN_STATE_TYPE.java
@@ -0,0 +1,53 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 智能交通地感输入状态
+ * @date 2020/12/14
+ */
+public enum EM_TRAFFIC_SNAP_GROUND_SENSE_IN_STATE_TYPE {
+ // 未知
+ EM_TRAFFIC_SNAP_GROUND_SENSE_IN_STATE_TYPE_UNKNOWN(-1, "未知"),
+ // 无车
+ EM_TRAFFIC_SNAP_GROUND_SENSE_IN_STATE_TYPE_NO_CAR(0, "无车"),
+ // 有车
+ EM_TRAFFIC_SNAP_GROUND_SENSE_IN_STATE_TYPE_CAR(1, "有车"),
+ // 不支持
+ EM_TRAFFIC_SNAP_GROUND_SENSE_IN_STATE_TYPE_NO_SUPPORT(255, "不支持");
+
+ private int value;
+ private String note;
+
+ private EM_TRAFFIC_SNAP_GROUND_SENSE_IN_STATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFIC_SNAP_GROUND_SENSE_IN_STATE_TYPE enumType : EM_TRAFFIC_SNAP_GROUND_SENSE_IN_STATE_TYPE
+ .values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFIC_SNAP_GROUND_SENSE_IN_STATE_TYPE enumType : EM_TRAFFIC_SNAP_GROUND_SENSE_IN_STATE_TYPE
+ .values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_RADAR_COIL_MATCH_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_RADAR_COIL_MATCH_STATE.java
new file mode 100644
index 0000000..d534589
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_RADAR_COIL_MATCH_STATE.java
@@ -0,0 +1,51 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 智能交通雷达检测线圈匹配状态
+ * @date 2020/12/14
+ */
+public enum EM_TRAFFIC_SNAP_RADAR_COIL_MATCH_STATE {
+ // 未知
+ EM_TRAFFIC_SNAP_RADAR_COIL_MATCH_STATE_UNKNOWN(-1, "未知"),
+ // 不匹配
+ EM_TRAFFIC_SNAP_RADAR_COIL_MATCH_STATE_MISMATCH(0, "不匹配"),
+ // 匹配
+ EM_TRAFFIC_SNAP_RADAR_COIL_MATCH_STATE_MATCH(1, "匹配"),
+ // 不检测
+ EM_TRAFFIC_SNAP_RADAR_COIL_MATCH_STATE_NO_DETECT(2, "不检测");
+
+ private int value;
+ private String note;
+
+ private EM_TRAFFIC_SNAP_RADAR_COIL_MATCH_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFIC_SNAP_RADAR_COIL_MATCH_STATE enumType : EM_TRAFFIC_SNAP_RADAR_COIL_MATCH_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFIC_SNAP_RADAR_COIL_MATCH_STATE enumType : EM_TRAFFIC_SNAP_RADAR_COIL_MATCH_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_RADAR_DETECT_CAR_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_RADAR_DETECT_CAR_STATE.java
new file mode 100644
index 0000000..a6dbff5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_RADAR_DETECT_CAR_STATE.java
@@ -0,0 +1,50 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 智能交通雷达检测汽车状态
+ * @date 2020/12/14
+ */
+public enum EM_TRAFFIC_SNAP_RADAR_DETECT_CAR_STATE {
+ // 未知
+ EM_TRAFFIC_SNAP_RADAR_DETECT_CAR_STATE_UNKNOWN(-1, "未知"),
+ // 无车
+ EM_TRAFFIC_SNAP_RADAR_DETECT_CAR_STATE_NO_CAR(0, "无车"),
+ // 有车
+ EM_TRAFFIC_SNAP_RADAR_DETECT_CAR_STATE_CAR(1, "有车");
+
+ private int value;
+ private String note;
+
+ private EM_TRAFFIC_SNAP_RADAR_DETECT_CAR_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFIC_SNAP_RADAR_DETECT_CAR_STATE enumType : EM_TRAFFIC_SNAP_RADAR_DETECT_CAR_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFIC_SNAP_RADAR_DETECT_CAR_STATE enumType : EM_TRAFFIC_SNAP_RADAR_DETECT_CAR_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE.java
new file mode 100644
index 0000000..dc54fcb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE.java
@@ -0,0 +1,75 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 智能交通道闸上次开关闸原因
+ * @date 2020/12/14
+ */
+public enum EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE {
+ // 未知
+ EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE_UNKNOWN(0, "未知"),
+ // 遥感器开闸
+ EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE_CONTROL_SWITCH_ON(1, "遥感器开闸"),
+ // 遥感器关闸
+ EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE_CONTROL_SWITCH_OFF(2, "遥感器关闸"),
+ // 地感LOOP1自动触发开闸
+ EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE_LOOP_LOOP1_OPEN(3, "地感LOOP1自动触发开闸"),
+ // 地感LOOP1自动触发关闸
+ EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE_LOOP_LOOP1_CLOSE(4, "地感LOOP1自动触发关闸"),
+ // 地感LOOP2自动触发开闸
+ EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE_LOOP_LOOP2_OPEN(5, "地感LOOP2自动触发开闸"),
+ // 外部开关开闸
+ EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE_EXTERNAL_SWITCH_OPEN(6, "外部开关开闸"),
+ // 外部开关关闸
+ EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE_EXTERNAL_SWITCH_CLOSE(7, "外部开关关闸"),
+ // 内部开关开闸
+ EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE_INTERNAL_SWITCH_OPEN(8, "内部开关开闸"),
+ // 内部开关关闸
+ EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE_INTERNAL_SWITCH_CLOSE(9, "内部开关关闸"),
+ // 自动延时关闸
+ EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE_AUTOMATIC_DELAY_CLOSE(10, "自动延时关闸"),
+ // 遇阻反弹开闸
+ EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE_OBSTACLE_REBOUND_TO_OPEN(11, "遇阻反弹开闸"),
+ // 红外防砸开闸
+ EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE_INFRARED_ANTI_SMASHING_OPEN(12, "红外防砸开闸"),
+ // 红外防砸关闸
+ EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE_INFRARED_ANTI_SMASHING_CLOSE(13, "红外防砸关闸"),
+ // 压力波开闸
+ EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE_PRESSURE_WAVE_OPEN(14, "压力波开闸"),
+ // 压力波关闸
+ EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE_PRESSURE_WAVE_CLOSE(15, "压力波关闸");
+
+ private int value;
+ private String note;
+
+ private EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE enumType : EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE enumType : EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE.java
new file mode 100644
index 0000000..80b1b1d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE.java
@@ -0,0 +1,107 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 智能交通道闸故障代码
+ * @date 2020/12/14
+ */
+public enum EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE {
+ // 未知
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_UNKNOWN(0, "未知"),
+ // 编码器信号异常
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_ENCODER_SIGNAL_EXCEPTION(1, "编码器信号异常"),
+ // 电机运行超时
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_MOTOR_RUNNING_OVERTIME(2, "电机运行超时"),
+ // 电机堵转
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_MOTOR_STALLING(3, "电机堵转"),
+ // 红外线被物体挡住
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_INFRARED_IS_BLOCKED_BY_OBJECTS(4, "红外线被物体挡住"),
+ // 压力波被物体阻挡
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_THE_PRESSURE_WAVE_IS_BLOCKED_BY_AN_OBJECT(5, "压力波被物体阻挡"),
+ // 逆变单元保护
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_INVERTER_UNIT_PROTECTION(6, "逆变单元保护"),
+ // 加速过流
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_ACCELERATED_OVERCURRENT(7, "加速过流"),
+ // 减速过流
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_DECELERATION_OVER_CURRENT(8, "减速过流"),
+ // 恒速过流
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_CONSTANT_SPEED_OVERCURRENT(9, "恒速过流"),
+ // 加速过压
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_ACCELERATED_OVERVOLTAGE(10, "加速过压"),
+ // 减速过压
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_DECELERATION_OVERPRESSURE(11, "减速过压"),
+ // 恒速过压
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_CONSTANT_SPEED_OVERVOLTAGE(12, "恒速过压"),
+ // 制动电源异常
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_BRAKING_POWER_SUPPLY_EXCEPTION(13, "制动电源异常"),
+ // 欠压故障
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_UNDER_VOLTAGE(14, "欠压故障"),
+ // 变频器过载
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_FREQUENCY_CONVERTER_OVERLOAD(15, "变频器过载"),
+ // 电机过载
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_MOTOR_OVERLOAD(16, "电机过载"),
+ // 输入缺相
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_INPUT_PHASE_LOSS(17, "输入缺相"),
+ // 输出缺相
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_OUTPUT_PHASE_LOSS(18, "输出缺相"),
+ // 模块过热
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_MODULE_OVERHEAT(19, "模块过热"),
+ // 外部故障
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_EXTERNAL_FAULT(20, "外部故障"),
+ // 继电器异常
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_RELAY_EXCEPTION(21, "继电器异常"),
+ // 电流检测异常
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_CURRENT_DETECTION_EXCEPTION(22, "电流检测异常"),
+ // 电机调谐异常
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_MOTOR_TUNING_EXCEPTION(23, "电机调谐异常"),
+ // EEPROM 读写异常
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_EEPROM_READ_WRITE_EXCEPTION(24, "EEPROM 读写异常"),
+ // 变频器硬件故障
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_INVERTER_HARDWARE_FAILURE(25, "变频器硬件故障"),
+ // 电机对地短路
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_MOTOR_SHORT_CIRCUIT_TO_GROUND(26, "电机对地短路"),
+ // 运行超时
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_RUN_TIMEOUT(27, "运行超时"),
+ // 开闸运行时遇阻
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_THE_GATE_IS_BLOCKED(28, "开闸运行时遇阻"),
+ // 传感器故障
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_SENSOR(29, "传感器故障"),
+ // 限位故障
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_LIMIT(30, "限位故障"),
+ // 内部通讯故障
+ EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE_INTERNAL_COMMUNICATION_FAULT(31, "内部通讯故障");
+
+ private int value;
+ private String note;
+
+ private EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE enumType : EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE enumType : EM_TRAFFIC_SNAP_STROBE_FAULT_CODE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_STROBE_IN_STATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_STROBE_IN_STATE_TYPE.java
new file mode 100644
index 0000000..5620a00
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_STROBE_IN_STATE_TYPE.java
@@ -0,0 +1,51 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 智能交通道闸输入状态
+ * @date 2020/12/14
+ */
+public enum EM_TRAFFIC_SNAP_STROBE_IN_STATE_TYPE {
+ // 未知
+ EM_TRAFFIC_SNAP_STROBE_IN_STATE_TYPE_UNKNOWN(-1, "未知"),
+ // 断开
+ EM_TRAFFIC_SNAP_STROBE_IN_STATE_TYPE_TO_BREAK_OFF(0, "断开"),
+ // 闭合
+ EM_TRAFFIC_SNAP_STROBE_IN_STATE_TYPE_CLOSE(1, "闭合"),
+ // 不支持
+ EM_TRAFFIC_SNAP_STROBE_IN_STATE_TYPE_NO_SUPPORT(255, "不支持");
+
+ private int value;
+ private String note;
+
+ private EM_TRAFFIC_SNAP_STROBE_IN_STATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFIC_SNAP_STROBE_IN_STATE_TYPE enumType : EM_TRAFFIC_SNAP_STROBE_IN_STATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFIC_SNAP_STROBE_IN_STATE_TYPE enumType : EM_TRAFFIC_SNAP_STROBE_IN_STATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_STROBE_RAIL_STATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_STROBE_RAIL_STATE_TYPE.java
new file mode 100644
index 0000000..6177a0a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_STROBE_RAIL_STATE_TYPE.java
@@ -0,0 +1,52 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 智能交通栏杆状态
+ * @date 2020/12/14
+ */
+public enum EM_TRAFFIC_SNAP_STROBE_RAIL_STATE_TYPE {
+ // 未知
+ TRAFFIC_SNAP_STROBE_RAIL_STATE_TYPE_UNKNOWN(-1, "未知"),
+ // 正常
+ TRAFFIC_SNAP_STROBE_RAIL_STATE_TYPE_NORMAL(0, "正常"),
+ // 脱落
+ TRAFFIC_SNAP_STROBE_RAIL_STATE_TYPE_FALL_OFF(1, "脱落"),
+ // 不支持
+ EM_TRAFFIC_SNAP_STROBE_IN_STATE_TYPE_NO_SUPPORT(255, "不支持");
+
+ private int value;
+ private String note;
+
+ private EM_TRAFFIC_SNAP_STROBE_RAIL_STATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFIC_SNAP_STROBE_RAIL_STATE_TYPE enumType : EM_TRAFFIC_SNAP_STROBE_RAIL_STATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFIC_SNAP_STROBE_RAIL_STATE_TYPE enumType : EM_TRAFFIC_SNAP_STROBE_RAIL_STATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_STROBE_RUN_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_STROBE_RUN_STATE.java
new file mode 100644
index 0000000..bde84d6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRAFFIC_SNAP_STROBE_RUN_STATE.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 智能交通道闸运行状态
+ * @date 2020/12/14
+ */
+public enum EM_TRAFFIC_SNAP_STROBE_RUN_STATE {
+ // 未知
+ EM_TRAFFIC_SNAP_STROBE_RUN_STATE_UNKNOWN(-1, "未知"),
+ // 关
+ EM_TRAFFIC_SNAP_STROBE_RUN_STATE_CLOSE(0, "关"),
+ // 开
+ EM_TRAFFIC_SNAP_STROBE_RUN_STATE_OPEN(1, "开"),
+ // 正在开
+ EM_TRAFFIC_SNAP_STROBE_RUN_STATE_OPENING(2, "正在开"),
+ // 正在关
+ EM_TRAFFIC_SNAP_STROBE_RUN_STATE_CLOSING(3, "正在关"),
+ // 停
+ EM_TRAFFIC_SNAP_STROBE_RUN_STATE_STOP(4, "停");
+
+ private int value;
+ private String note;
+
+ private EM_TRAFFIC_SNAP_STROBE_RUN_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAFFIC_SNAP_STROBE_RUN_STATE enumType : EM_TRAFFIC_SNAP_STROBE_RUN_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAFFIC_SNAP_STROBE_RUN_STATE enumType : EM_TRAFFIC_SNAP_STROBE_RUN_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRANSMIT_PROXY_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRANSMIT_PROXY_MODE.java
new file mode 100644
index 0000000..842f54c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRANSMIT_PROXY_MODE.java
@@ -0,0 +1,60 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+子连接连接方式
+*/
+public enum EM_TRANSMIT_PROXY_MODE {
+/**
+/< 本地代理
+*/
+EM_TRANSMIT_PROXY_MODE_LOCAL(1,"/< 本地代理"),
+/**
+/< 级联代理
+*/
+EM_TRANSMIT_PROXY_MODE_CASCADE(2,"/< 级联代理");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_TRANSMIT_PROXY_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_TRANSMIT_PROXY_MODE enumType : EM_TRANSMIT_PROXY_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_TRANSMIT_PROXY_MODE enumType : EM_TRANSMIT_PROXY_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return 0;
+ }
+
+public static EM_TRANSMIT_PROXY_MODE getEnum(int value) {
+ for (EM_TRANSMIT_PROXY_MODE e : EM_TRANSMIT_PROXY_MODE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_TRANSMIT_PROXY_MODE.EM_TRANSMIT_PROXY_MODE_LOCAL;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRANSMIT_PROXY_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRANSMIT_PROXY_TYPE.java
new file mode 100644
index 0000000..41ad084
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRANSMIT_PROXY_TYPE.java
@@ -0,0 +1,60 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+子连接连接方式
+*/
+public enum EM_TRANSMIT_PROXY_TYPE {
+/**
+/< Web代理。由服务端自动获取web端口,客户端不需要关心
+*/
+EM_TRANSMIT_PROXY_TYPE_WEB(1,"/< Web代理。由服务端自动获取web端口,客户端不需要关心"),
+/**
+/< 通用端口代理。要求客户端知道服务的端口
+*/
+EM_TRANSMIT_PROXY_TYPE_GENERAL(2,"/< 通用端口代理。要求客户端知道服务的端口");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_TRANSMIT_PROXY_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_TRANSMIT_PROXY_TYPE enumType : EM_TRANSMIT_PROXY_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_TRANSMIT_PROXY_TYPE enumType : EM_TRANSMIT_PROXY_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return 0;
+ }
+
+public static EM_TRANSMIT_PROXY_TYPE getEnum(int value) {
+ for (EM_TRANSMIT_PROXY_TYPE e : EM_TRANSMIT_PROXY_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_TRANSMIT_PROXY_TYPE.EM_TRANSMIT_PROXY_TYPE_WEB;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRAVELCODE_COLOR_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRAVELCODE_COLOR_STATE.java
new file mode 100644
index 0000000..a8437c9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRAVELCODE_COLOR_STATE.java
@@ -0,0 +1,9 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_TRAVELCODE_COLOR_STATE {
+ EM_TRAVELCODE_COLOR_STATE_UNKNOWN, //未知
+ EM_TRAVELCODE_COLOR_STATE_RED, //红码
+ EM_TRAVELCODE_COLOR_STATE_GREEN, //绿码
+ EM_TRAVELCODE_COLOR_STATE_YELLOW, //黄码
+ EM_TRAVELCODE_COLOR_STATE_ORANGE, //橙码
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRAVEL_CODE_COLOR.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRAVEL_CODE_COLOR.java
new file mode 100644
index 0000000..73ce85b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRAVEL_CODE_COLOR.java
@@ -0,0 +1,57 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 行程码状态
+ * @date 2021/08/15
+ */
+public enum EM_TRAVEL_CODE_COLOR {
+ // 未知
+ EM_TRAVEL_CODE_COLOR_UNKNOWN(0, "未知"),
+
+ // 红
+ EM_TRAVEL_CODE_COLOR_RED(1, "红"),
+
+ // 绿
+ EM_TRAVEL_CODE_COLOR_GREEN(2, "绿"),
+
+ // 黄
+ EM_TRAVEL_CODE_COLOR_YELLOW(3, "黄"),
+ // 橙
+ EM_TRAVEL_CODE_COLOR_ORANGE(4, "橙");
+
+ private int value;
+ private String note;
+
+ private EM_TRAVEL_CODE_COLOR(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRAVEL_CODE_COLOR enumType : EM_TRAVEL_CODE_COLOR.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRAVEL_CODE_COLOR enumType : EM_TRAVEL_CODE_COLOR.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRFAFFIC_LIGHT_SOURCE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRFAFFIC_LIGHT_SOURCE.java
new file mode 100644
index 0000000..693efa9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRFAFFIC_LIGHT_SOURCE.java
@@ -0,0 +1,61 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 红绿灯触发源
+ *
+ * @author : 47040
+ * @since : Created in 2020/8/29 16:43
+ */
+public enum EM_TRFAFFIC_LIGHT_SOURCE {
+
+ /**
+ * 未知
+ */
+ EM_TRFAFFIC_LIGHT_SOURCE_UNKNOWN(0, "未知"),
+ /**
+ * 信号检测器
+ */
+ EM_TRFAFFIC_LIGHT_SOURCE_SIGNAL(1, "信号检测器"),
+ /**
+ * DSP(算法检测)
+ */
+ EM_TRFAFFIC_LIGHT_SOURCE_DSP(2, "DSP(算法检测)"),
+ /**
+ * 网络信号检测器
+ */
+ EM_TRFAFFIC_LIGHT_SOURCE_NET_SIGNAL(3, "网络信号检测器");
+
+ private int value;
+ private String note;
+
+ EM_TRFAFFIC_LIGHT_SOURCE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRFAFFIC_LIGHT_SOURCE enumType : EM_TRFAFFIC_LIGHT_SOURCE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRFAFFIC_LIGHT_SOURCE enumType : EM_TRFAFFIC_LIGHT_SOURCE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRFAFFIC_LIGHT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRFAFFIC_LIGHT_TYPE.java
new file mode 100644
index 0000000..68303b2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRFAFFIC_LIGHT_TYPE.java
@@ -0,0 +1,59 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 交通灯类型
+ * @author : 47040
+ * @since : Created in 2020/8/29 16:49
+ */
+public enum EM_TRFAFFIC_LIGHT_TYPE {
+ /**
+ * 未知
+ */
+ EM_TRFAFFIC_LIGHT_TYPE_UNKNOWN(0,"未知"),
+ /**
+ * 红灯
+ */
+ EM_TRFAFFIC_LIGHT_TYPE_RED(1,"红灯"),
+ /**
+ * 黄灯
+ */
+ EM_TRFAFFIC_LIGHT_TYPE_YELLOW(2,"黄灯"),
+ /**
+ * 绿灯
+ */
+ EM_TRFAFFIC_LIGHT_TYPE_GREEN(3,"绿灯");
+
+ private int value;
+ private String note;
+
+ EM_TRFAFFIC_LIGHT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRFAFFIC_LIGHT_TYPE enumType : EM_TRFAFFIC_LIGHT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRFAFFIC_LIGHT_TYPE enumType : EM_TRFAFFIC_LIGHT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRIGGER_OCCUR_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRIGGER_OCCUR_TYPE.java
new file mode 100644
index 0000000..b70b734
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRIGGER_OCCUR_TYPE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 触发时机类型
+* @date 2022/06/07 09:46:00
+*/
+public enum EM_TRIGGER_OCCUR_TYPE {
+/**
+未知
+*/
+EM_TRIGGER_OCCUR_TYPE_UNKNOWN(-1,"未知"),
+/**
+进入
+*/
+EM_TRIGGER_OCCUR_TYPE_ENTER(0,"进入"),
+/**
+离开
+*/
+EM_TRIGGER_OCCUR_TYPE_LEAVE(1,"离开");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_TRIGGER_OCCUR_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_TRIGGER_OCCUR_TYPE enumType : EM_TRIGGER_OCCUR_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_TRIGGER_OCCUR_TYPE enumType : EM_TRIGGER_OCCUR_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_TRIGGER_OCCUR_TYPE getEnum(int value) {
+ for (EM_TRIGGER_OCCUR_TYPE e : EM_TRIGGER_OCCUR_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_TRIGGER_OCCUR_TYPE.EM_TRIGGER_OCCUR_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TRIGGER_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TRIGGER_TYPE.java
new file mode 100644
index 0000000..d195b26
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TRIGGER_TYPE.java
@@ -0,0 +1,58 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author : 47040
+ * @since : Created in 2020/8/19 10:21
+ */
+public enum EM_TRIGGER_TYPE {
+ /**
+ * 未知类型
+ */
+ EM_TRIGGER_TYPE_UNKNOWN(-1,"未知类型"),
+ /**
+ * 车检器
+ */
+ EM_TRIGGER_TYPE_CAR_INSPECTION_DEV(0,"车检器"), // 车检器
+ /**
+ * 雷达
+ */
+ EM_TRIGGER_TYPE_DADAR(1,"雷达"),
+ /**
+ * 视频
+ */
+ EM_TRIGGER_TYPE_VIDEO(2,"视频");
+
+ private int value;
+ private String note;
+
+ private EM_TRIGGER_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_TRIGGER_TYPE enumType : EM_TRIGGER_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_TRIGGER_TYPE enumType : EM_TRIGGER_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote()) ) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_TROUSERS_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_TROUSERS_TYPE.java
new file mode 100644
index 0000000..1b3e624
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_TROUSERS_TYPE.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 裤子类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 19:35
+ */
+public class EM_TROUSERS_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_TROUSERS_TYPE_UNKNOWN = 0;
+ /**
+ * 长裤
+ */
+ public static final int EM_TROUSERS_TYPE_TROUSERS = 1;
+ /**
+ * 短裤
+ */
+ public static final int EM_TROUSERS_TYPE_SHORTS = 2;
+ /**
+ * 裙子
+ */
+ public static final int EM_TROUSERS_TYPE_SKIRT = 3;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_UNIFIED_COLOR_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_UNIFIED_COLOR_TYPE.java
new file mode 100644
index 0000000..e2eb0a7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_UNIFIED_COLOR_TYPE.java
@@ -0,0 +1,23 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description
+ * @date 2021/8/24 14:40
+ */
+public class EM_UNIFIED_COLOR_TYPE {
+ public static final int EM_UNIFIED_COLOR_TRANSPARENT = -1; // 透明
+ public static final int EM_UNIFIED_COLOR_UNKNOWN=0; // 未知
+ public static final int EM_UNIFIED_COLOR_WHITE=1; // 白色
+ public static final int EM_UNIFIED_COLOR_ORANGE=2; // 橙色
+ public static final int EM_UNIFIED_COLOR_PINK=3; // 粉色
+ public static final int EM_UNIFIED_COLOR_BLACK=4; // 黑色
+ public static final int EM_UNIFIED_COLOR_RED=5; // 红色
+ public static final int EM_UNIFIED_COLOR_YELLOW=6; // 黄色
+ public static final int EM_UNIFIED_COLOR_GRAY=7; // 灰色
+ public static final int EM_UNIFIED_COLOR_BLUE=8; // 蓝色
+ public static final int EM_UNIFIED_COLOR_GREEN=9; // 绿色
+ public static final int EM_UNIFIED_COLOR_PURPLE=10; // 紫色
+ public static final int EM_UNIFIED_COLOR_BROWN=11; // 棕色
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_UNIFORM_STYLE.java b/src/main/java/com/netsdk/lib/enumeration/EM_UNIFORM_STYLE.java
new file mode 100644
index 0000000..02e4bbe
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_UNIFORM_STYLE.java
@@ -0,0 +1,11 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 制服样式
+ * @author 29779
+ *
+ */
+public class EM_UNIFORM_STYLE {
+ public static final int EM_UNIFORM_STYLE_UNKNOWN = 0; // 未知
+ public static final int EM_UNIFORM_STYLE_POLICE = 1; // 警服
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_UPDATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_UPDATE_TYPE.java
new file mode 100644
index 0000000..54a47a1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_UPDATE_TYPE.java
@@ -0,0 +1,69 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 更新类型
+ * @date 2022/05/11 13:27:51
+ */
+public enum EM_UPDATE_TYPE {
+ /**
+ * 未知
+ */
+ EM_UPDATE_TYPE_UNKNOWN(-1, "未知"),
+ /**
+ * 删除区域或车位
+ */
+ EM_UPDATE_TYPE_DELETE(0, "删除区域或车位"),
+ /**
+ * 修改区域或车位
+ */
+ EM_UPDATE_TYPE_MODIFY(1, "修改区域或车位"),
+ /**
+ * 增加区域或车位
+ */
+ EM_UPDATE_TYPE_ADD(2, "增加区域或车位");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_UPDATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_UPDATE_TYPE enumType : EM_UPDATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_UPDATE_TYPE enumType : EM_UPDATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+ public static EM_UPDATE_TYPE getEnum(int value) {
+ for (EM_UPDATE_TYPE e : EM_UPDATE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_UPDATE_TYPE.EM_UPDATE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_UPLOAD_FLAG.java b/src/main/java/com/netsdk/lib/enumeration/EM_UPLOAD_FLAG.java
new file mode 100644
index 0000000..f668065
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_UPLOAD_FLAG.java
@@ -0,0 +1,25 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 上传标识
+ * @date 2021/2/22
+ */
+public enum EM_UPLOAD_FLAG {
+ /** 未知 */
+ EM_UPLOAD_FLAG_UNKNOWN,
+ /** 成功 */
+ EM_UPLOAD_FLAG_SUCCEED,
+ /** 失败 */
+ EM_UPLOAD_FLAG_FAILED;
+
+ public static EM_UPLOAD_FLAG getUploadFlag(int flag) {
+ for (EM_UPLOAD_FLAG upload : EM_UPLOAD_FLAG.values()) {
+ if (upload.ordinal() == flag) {
+ return upload;
+ }
+ }
+ return EM_UPLOAD_FLAG_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_UPPER_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_UPPER_TYPE.java
new file mode 100644
index 0000000..96c0087
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_UPPER_TYPE.java
@@ -0,0 +1,20 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 上衣类型
+ * @date 2021/8/24 15:15
+ */
+public enum EM_UPPER_TYPE {
+
+ EM_UPPER_UNKNOWN, // 未知
+ EM_UPPER_LONGCOAT, // 1-长款大衣
+ EM_UPPER_JACKETORJEANS, // 2-夹克及牛仔服
+ EM_UPPER_TSHIRT, // 3-T恤
+ EM_UPPER_SPORTSWEAR, // 4-运动服
+ EM_UPPER_DOWNJACKET, // 5-羽绒服
+ EM_UPPER_SHIRT, // 6-衬衫
+ EM_UPPER_DRESS, // 7-连衣裙
+ EM_UPPER_SUIT, // 8-西装
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_USER_PASS_DATA_COUNT_CLEAR_PERIOD.java b/src/main/java/com/netsdk/lib/enumeration/EM_USER_PASS_DATA_COUNT_CLEAR_PERIOD.java
new file mode 100644
index 0000000..a6eb3cb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_USER_PASS_DATA_COUNT_CLEAR_PERIOD.java
@@ -0,0 +1,58 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 定期人数清除周期
+ * @date 2022/5/27 9:54
+ */
+public enum EM_USER_PASS_DATA_COUNT_CLEAR_PERIOD {
+
+ EM_USER_PASS_DATA_COUNT_CLEAR_PERIOD_UNKNOWN(0,"未知"), // 未知
+ EM_USER_PASS_DATA_COUNT_CLEAR_PERIOD_HOUR(1,"按小时"), // 按小时
+ EM_USER_PASS_DATA_COUNT_CLEAR_PERIOD_DAILY(2,"按天"); // 按天, 按照每天00点清除
+
+
+
+ private int value;
+ private String note;
+
+ EM_USER_PASS_DATA_COUNT_CLEAR_PERIOD(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_USER_PASS_DATA_COUNT_CLEAR_PERIOD enumType : EM_USER_PASS_DATA_COUNT_CLEAR_PERIOD.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_USER_PASS_DATA_COUNT_CLEAR_PERIOD enumType : EM_USER_PASS_DATA_COUNT_CLEAR_PERIOD.values()) {
+ if (givenNote.equals(enumType.getNote()) ) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+ public static EM_USER_PASS_DATA_COUNT_CLEAR_PERIOD getEnum(int value) {
+ for (EM_USER_PASS_DATA_COUNT_CLEAR_PERIOD e : EM_USER_PASS_DATA_COUNT_CLEAR_PERIOD.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_USER_PASS_DATA_COUNT_CLEAR_PERIOD.EM_USER_PASS_DATA_COUNT_CLEAR_PERIOD_UNKNOWN;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_USER_PASS_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_USER_PASS_TYPE.java
new file mode 100644
index 0000000..a089bcd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_USER_PASS_TYPE.java
@@ -0,0 +1,54 @@
+package com.netsdk.lib.enumeration;
+/**
+ * @author : 291189
+ * @description : 进出方向
+ * @since : Created in 2022/05/26
+ */
+public enum EM_USER_PASS_TYPE {
+ EM_USER_PASS_TYPE_UNKNOWN(0,"未知"),
+ EM_USER_PASS_TYPE_ENTRY(1,"进门"), // 进门
+ EM_USER_PASS_TYPE_EXIT(2,"出门"); // 出门
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_USER_PASS_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_USER_PASS_TYPE enumType : EM_USER_PASS_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_USER_PASS_TYPE enumType : EM_USER_PASS_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_USER_PASS_TYPE getEnum(int value) {
+ for (EM_USER_PASS_TYPE e : EM_USER_PASS_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_USER_PASS_TYPE.EM_USER_PASS_TYPE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_USE_PROPERTY_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_USE_PROPERTY_TYPE.java
new file mode 100644
index 0000000..794cf8a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_USE_PROPERTY_TYPE.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 使用性质
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_USE_PROPERTY_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 非营运
+ */
+ public static final int EM_USE_PROPERTY_NONOPERATING = 0;
+ /**
+ * 公路客运,旅游客运
+ */
+ public static final int EM_USE_PROPERTY_HIGWAY = 1;
+ /**
+ * 公交客运
+ */
+ public static final int EM_USE_PROPERTY_BUS = 2;
+ /**
+ * 出租客运
+ */
+ public static final int EM_USE_PROPERTY_TAXI = 3;
+ /**
+ * 货运
+ */
+ public static final int EM_USE_PROPERTY_FREIGHT = 4;
+ /**
+ * 租赁
+ */
+ public static final int EM_USE_PROPERTY_LEASE = 5;
+ /**
+ * 警用,消防,救护,工程救险
+ */
+ public static final int EM_USE_PROPERTY_SECURITY = 6;
+ /**
+ * 教练
+ */
+ public static final int EM_USE_PROPERTY_COACH = 7;
+ /**
+ * 幼儿校车,小学生校车,其他校车
+ */
+ public static final int EM_USE_PROPERTY_SCHOOLBUS = 8;
+ /**
+ * 危化品运输
+ */
+ public static final int EM_USE_PROPERTY_FOR_DANGE_VEHICLE = 9;
+ /**
+ * 其他
+ */
+ public static final int EM_USE_PROPERTY_OTHER = 10;
+ /**
+ * 网约车
+ */
+ public static final int EM_USE_PROPERTY_ONLINE_CAR_HAILING = 11;
+ /**
+ * 非机动外卖车
+ */
+ public static final int EM_USE_PROPERTY_NON_MOTORIZED_TAKE_OUT_VEHICLE = 12;
+ /**
+ * 非机动快递车
+ */
+ public static final int EM_USE_PROPERTY_NON_MOTORIZED_EXPRESS_CAR = 13;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VAULT_DOORSTATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_VAULT_DOORSTATE.java
new file mode 100644
index 0000000..aef7e53
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VAULT_DOORSTATE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 门状态
+* @date 2022/08/10 11:46:30
+*/
+public enum EM_VAULT_DOORSTATE {
+/**
+未知
+*/
+EM_VAULT_DOORSTATE_UNKNOWN(0,"未知"),
+/**
+关门
+*/
+EM_VAULT_DOORSTATE_ISCLOSED(1,"关门"),
+/**
+开门
+*/
+EM_VAULT_DOORSTATE_ISOPENED(2,"开门");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_VAULT_DOORSTATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_VAULT_DOORSTATE enumType : EM_VAULT_DOORSTATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_VAULT_DOORSTATE enumType : EM_VAULT_DOORSTATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_VAULT_DOORSTATE getEnum(int value) {
+ for (EM_VAULT_DOORSTATE e : EM_VAULT_DOORSTATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_VAULT_DOORSTATE.EM_VAULT_DOORSTATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VAULT_LOCKSTATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_VAULT_LOCKSTATE.java
new file mode 100644
index 0000000..db113d8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VAULT_LOCKSTATE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 锁状态
+* @date 2022/08/10 11:46:30
+*/
+public enum EM_VAULT_LOCKSTATE {
+/**
+未知
+*/
+EM_VAULT_LOCKSTATE_UNKNOWN(0,"未知"),
+/**
+关锁
+*/
+EM_VAULT_LOCKSTATE_ISCLOSED(1,"关锁"),
+/**
+开锁
+*/
+EM_VAULT_LOCKSTATE_ISOPENED(2,"开锁");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_VAULT_LOCKSTATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_VAULT_LOCKSTATE enumType : EM_VAULT_LOCKSTATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_VAULT_LOCKSTATE enumType : EM_VAULT_LOCKSTATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_VAULT_LOCKSTATE getEnum(int value) {
+ for (EM_VAULT_LOCKSTATE e : EM_VAULT_LOCKSTATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_VAULT_LOCKSTATE.EM_VAULT_LOCKSTATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLEINOUT_CAR_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLEINOUT_CAR_TYPE.java
new file mode 100644
index 0000000..88ee64a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLEINOUT_CAR_TYPE.java
@@ -0,0 +1,81 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 车辆类型
+ *
+ * @author : 47040
+ * @since : Created in 2020/12/17 13:50
+ */
+public enum EM_VEHICLEINOUT_CAR_TYPE {
+ /**
+ * 未知类型
+ */
+ EM_VEHICLEINOUT_CAR_TYPE_UNKNOWN(0, "未知类型"),
+ /**
+ * 小型客车
+ */
+ EM_VEHICLEINOUT_CAR_TYPE_CAR(1, "小型客车"),
+ /**
+ * 面包车
+ */
+ EM_VEHICLEINOUT_CAR_TYPE_VAN(2, "面包车"),
+ /**
+ * 货车
+ */
+ EM_VEHICLEINOUT_CAR_TYPE_TRUCK(3, "货车"),
+ /**
+ * 公交车
+ */
+ EM_VEHICLEINOUT_CAR_TYPE_BUS(4, "公交车"),
+ /**
+ * 大货车
+ */
+ EM_VEHICLEINOUT_CAR_TYPE_LORRY(5, "大货车"),
+ /**
+ * 大车
+ */
+ EM_VEHICLEINOUT_CAR_TYPE_CART(6, "大车");
+
+ private final int value;
+ private final String note;
+
+ EM_VEHICLEINOUT_CAR_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_VEHICLEINOUT_CAR_TYPE enumType : EM_VEHICLEINOUT_CAR_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_VEHICLEINOUT_CAR_TYPE enumType : EM_VEHICLEINOUT_CAR_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_VEHICLEINOUT_CAR_TYPE getEnum(int value) {
+ for (EM_VEHICLEINOUT_CAR_TYPE e : EM_VEHICLEINOUT_CAR_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_VEHICLEINOUT_CAR_TYPE.EM_VEHICLEINOUT_CAR_TYPE_UNKNOWN;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_DRIVING_DIRECTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_DRIVING_DIRECTION.java
new file mode 100644
index 0000000..0c0f8e8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_DRIVING_DIRECTION.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 车辆行驶方向(相对车道方向)
+ * @since : Created in 2022/03/01 14:55
+ */
+
+public enum EM_VEHICLE_DRIVING_DIRECTION {
+ /**
+ * 未知
+ */
+ EM_VEHICLE_DRIVING_DIRECTION_UNKNOWN(0, "未知"),
+ /**
+ * 正向
+ */
+ EM_VEHICLE_DRIVING_DIRECTION_OBVERSE(1, "正向"),
+ /**
+ * 反向
+ */
+ EM_VEHICLE_DRIVING_DIRECTION_REVERSE(2, "反向");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_VEHICLE_DRIVING_DIRECTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_VEHICLE_DRIVING_DIRECTION enumType : EM_VEHICLE_DRIVING_DIRECTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_VEHICLE_DRIVING_DIRECTION enumType : EM_VEHICLE_DRIVING_DIRECTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_VEHICLE_DRIVING_DIRECTION getEnum(int value) {
+ for (EM_VEHICLE_DRIVING_DIRECTION e : EM_VEHICLE_DRIVING_DIRECTION.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_VEHICLE_DRIVING_DIRECTION.EM_VEHICLE_DRIVING_DIRECTION_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_HEAD_DIRECTION.java b/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_HEAD_DIRECTION.java
new file mode 100644
index 0000000..9dab707
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_HEAD_DIRECTION.java
@@ -0,0 +1,71 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 车头方向
+ * @since : Created in 2022/03/01 14:55
+ */
+
+public enum EM_VEHICLE_HEAD_DIRECTION {
+ /**
+ * 未知
+ */
+ EM_VEHICLE_HEAD_DIRECTION_UNKNOWN(0, "未知"),
+ /**
+ * 左
+ */
+ EM_VEHICLE_HEAD_DIRECTION_LEFT(1, "左"),
+ /**
+ * 中
+ */
+ EM_VEHICLE_HEAD_DIRECTION_MIDDLE(2, "中"),
+ /**
+ * 右
+ */
+ EM_VEHICLE_HEAD_DIRECTION_RIGHT(3, "右");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_VEHICLE_HEAD_DIRECTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_VEHICLE_HEAD_DIRECTION enumType : EM_VEHICLE_HEAD_DIRECTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_VEHICLE_HEAD_DIRECTION enumType : EM_VEHICLE_HEAD_DIRECTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_VEHICLE_HEAD_DIRECTION getEnum(int value) {
+ for (EM_VEHICLE_HEAD_DIRECTION e : EM_VEHICLE_HEAD_DIRECTION.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_VEHICLE_HEAD_DIRECTION.EM_VEHICLE_HEAD_DIRECTION_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_POSITION.java b/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_POSITION.java
new file mode 100644
index 0000000..16e1c61
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_POSITION.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 抓拍时车的位置
+ * @since : Created in 2022/03/01 14:55
+ */
+
+public enum EM_VEHICLE_POSITION {
+ /**
+ * 未知
+ */
+ EM_VEHICLE_POSITION_UNKNOWN(0, "未知"),
+ /**
+ * 头
+ */
+ EM_VEHICLE_POSITION_HEAD(1, "头"),
+ /**
+ * 尾
+ */
+ EM_VEHICLE_POSITION_TAIL(2, "尾");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_VEHICLE_POSITION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_VEHICLE_POSITION enumType : EM_VEHICLE_POSITION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_VEHICLE_POSITION enumType : EM_VEHICLE_POSITION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_VEHICLE_POSITION getEnum(int value) {
+ for (EM_VEHICLE_POSITION e : EM_VEHICLE_POSITION.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_VEHICLE_POSITION.EM_VEHICLE_POSITION_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_POSTURE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_POSTURE_TYPE.java
new file mode 100644
index 0000000..4f51c7c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_POSTURE_TYPE.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 车辆姿势
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:21
+ */
+public class EM_VEHICLE_POSTURE_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_VEHICLE_POSTURE_TYPE_UNKNOWN = 0;
+ /**
+ * 车头
+ */
+ public static final int EM_VEHICLE_POSTURE_TYPE_VEHICLE_HEAD = 1;
+ /**
+ * 车侧
+ */
+ public static final int EM_VEHICLE_POSTURE_TYPE_VEHICLE_SIDE = 2;
+ /**
+ * 车尾
+ */
+ public static final int EM_VEHICLE_POSTURE_TYPE_VEHICLE_TAIL = 3;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_REG_DB_OPERATOR_ERRCODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_REG_DB_OPERATOR_ERRCODE.java
new file mode 100644
index 0000000..cf3714e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_REG_DB_OPERATOR_ERRCODE.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_VEHICLE_REG_DB_OPERATOR_ERRCODE {
+ EM_VEHICLE_REG_DB_OPERATOR_ERRCODE_UNKNWON (0,"未知") , // 未知
+ EM_VEHICLE_REG_DB_OPERATOR_ERRCODE_SUCCESS(1,"成功"), // 成功
+ EM_VEHICLE_REG_DB_OPERATOR_ERRCODE_DB_ERROR(2,"数据库操作失败"), // 数据库操作失败
+ EM_VEHICLE_REG_DB_OPERATOR_ERRCODE_NOT_EXIST(3,"车牌不存在"), // 车牌库不存在
+ EM_VEHICLE_REG_DB_OPERATOR_ERRCODE_EXCEED_MAX_NUM(4,"超出车牌库数量限制"); // 超出车牌库数量限制
+
+ EM_VEHICLE_REG_DB_OPERATOR_ERRCODE(int state, String desc) {
+ this.state = state;
+ this.desc = desc;
+ }
+
+ private int state;
+ private String desc;
+
+ public int getState() {
+ return state;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public EM_VEHICLE_REG_DB_OPERATOR_ERRCODE getTaskState(int state) {
+ for (EM_VEHICLE_REG_DB_OPERATOR_ERRCODE taskState : EM_VEHICLE_REG_DB_OPERATOR_ERRCODE.values()) {
+ if (taskState.state == state) {
+ return taskState;
+ }
+ }
+ return EM_VEHICLE_REG_DB_OPERATOR_ERRCODE_UNKNWON;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_TYPE.java
new file mode 100644
index 0000000..e91d155
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_TYPE.java
@@ -0,0 +1,94 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 按功能划分的车辆类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 20:37
+ */
+public class EM_VEHICLE_TYPE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 未知
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_UNKNOWN = 0;
+ /**
+ * 危化品车辆
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_TANK_CAR = 1;
+ /**
+ * 槽罐车
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_SLOT_TANK_CAR = 2;
+ /**
+ * 渣土车
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_DREGS_CAR = 3;
+ /**
+ * 混凝土搅拌车
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_CONCRETE_MIXER_TRUCK = 4;
+ /**
+ * 出租车
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_TAXI = 5;
+ /**
+ * 警车
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_POLICE = 6;
+ /**
+ * 救护车
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_AMBULANCE = 7;
+ /**
+ * 普通车
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_GENERAL = 8;
+ /**
+ * 洒水车
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_WATERING_CAR = 9;
+ /**
+ * 消防车
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_FIRE_ENGINE = 10;
+ /**
+ * 工程车
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_MACHINESHOP_TRUCK = 11;
+ /**
+ * 粉粒物料车
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_POWER_LOT_VEHICLE = 12;
+ /**
+ * 吸污车
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_SUCTION_SEWAGE_TRUCK = 13;
+ /**
+ * 普通罐车
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_NORMAL_TANK_TRUCK = 14;
+ /**
+ * 校车
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_SCHOOL_BUS = 15;
+ /**
+ * 挖掘机
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_EXCAVATOR = 16;
+ /**
+ * 推土车
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_BULLDOZER = 17;
+ /**
+ * 吊车
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_CRANE = 18;
+ /**
+ * 泵车
+ */
+ public static final int EM_VEHICLE_TYPE_BY_FUNC_PUMP_TRUCK = 19;
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_TYPE_SPLIT.java b/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_TYPE_SPLIT.java
new file mode 100644
index 0000000..2c0401b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VEHICLE_TYPE_SPLIT.java
@@ -0,0 +1,52 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 车辆种类划分类型
+ * @date 2021/01/11
+ */
+public enum EM_VEHICLE_TYPE_SPLIT {
+ // 未知
+ EM_VEHICLE_TYPE_SPLIT_UNKNOWN(0, "未知"),
+
+ // 按功能划分
+ EM_VEHICLE_TYPE_SPLIT_FUNC(1, "按功能划分"),
+
+ // 按标准划分
+ EM_VEHICLE_TYPE_SPLIT_STANDARD(2, "按标准划分");
+
+ private int value;
+ private String note;
+
+ private EM_VEHICLE_TYPE_SPLIT(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_VEHICLE_TYPE_SPLIT enumType : EM_VEHICLE_TYPE_SPLIT.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_VEHICLE_TYPE_SPLIT enumType : EM_VEHICLE_TYPE_SPLIT.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VIDEODIAGNOSIS_TASK_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_VIDEODIAGNOSIS_TASK_STATE.java
new file mode 100644
index 0000000..a480ca4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VIDEODIAGNOSIS_TASK_STATE.java
@@ -0,0 +1,45 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 任务运行状态
+ * @date 2021/2/22
+ */
+public enum EM_VIDEODIAGNOSIS_TASK_STATE {
+ /** 未知 */
+ EM_VIDEODIAGNOSIS_TASK_STATE_UNKNOWN(-1, "未知"),
+ /** 未开始 */
+ EM_VIDEODIAGNOSIS_TASK_STATE_NOT_STARTED(0, "未开始"),
+ /** 运行中 */
+ EM_VIDEODIAGNOSIS_TASK_STATE_ONGOING(1, "运行中"),
+ /** 未完成 */
+ EM_VIDEODIAGNOSIS_TASK_STATE_INCOMPLETE(2, "未完成"),
+ /** 已完成 */
+ EM_VIDEODIAGNOSIS_TASK_STATE_COMPLETED(3, "已完成");
+
+ EM_VIDEODIAGNOSIS_TASK_STATE(int state, String desc) {
+ this.state = state;
+ this.desc = desc;
+ }
+
+ private int state;
+ private String desc;
+
+ public int getState() {
+ return state;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public EM_VIDEODIAGNOSIS_TASK_STATE getTaskState(int state) {
+ for (EM_VIDEODIAGNOSIS_TASK_STATE taskState : EM_VIDEODIAGNOSIS_TASK_STATE.values()) {
+ if (taskState.state == state) {
+ return taskState;
+ }
+ }
+ return EM_VIDEODIAGNOSIS_TASK_STATE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VIDEOINPUTS_SERVICE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_VIDEOINPUTS_SERVICE_TYPE.java
new file mode 100644
index 0000000..505447b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VIDEOINPUTS_SERVICE_TYPE.java
@@ -0,0 +1,62 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 服务类型
+ *
+ * @author : 47040
+ * @since : Created in 2020/8/13 10:22
+ */
+public enum EM_VIDEOINPUTS_SERVICE_TYPE {
+
+ /**
+ * 自动
+ */
+ EM_VIDEOINPUTS_SERVICE_TYPE_AUTO(0, "自动"),
+ /**
+ * TCP
+ */
+ EM_VIDEOINPUTS_SERVICE_TYPE_TCP(1, "TCP"),
+ /**
+ * UDP
+ */
+ EM_VIDEOINPUTS_SERVICE_TYPE_UDP(2, "UDP"),
+ /**
+ * 组播
+ */
+ EM_VIDEOINPUTS_SERVICE_TYPE_MULTICAST(3, "组播");
+
+ private int value;
+ private String note;
+
+ private EM_VIDEOINPUTS_SERVICE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_VIDEOINPUTS_SERVICE_TYPE enumType : EM_VIDEOINPUTS_SERVICE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_VIDEOINPUTS_SERVICE_TYPE enumType : EM_VIDEOINPUTS_SERVICE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VIDEO_ABNORMAL_DETECT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_VIDEO_ABNORMAL_DETECT_TYPE.java
new file mode 100644
index 0000000..76a6bf9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VIDEO_ABNORMAL_DETECT_TYPE.java
@@ -0,0 +1,134 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 屏保状态
+* @date 2022/03/29 13:59:54
+*/
+public enum EM_VIDEO_ABNORMAL_DETECT_TYPE {
+/**
+未知状态
+*/
+EM_VIDEO_ABNORMAL_DETECT_UNKNOWN(0,"未知状态"),
+/**
+视频丢失
+*/
+EM_VIDEO_ABNORMAL_DETECT_LOSS(1,"视频丢失"),
+/**
+视频遮挡
+*/
+EM_VIDEO_ABNORMAL_DETECT_COVER(2,"视频遮挡"),
+/**
+画面冻结
+*/
+EM_VIDEO_ABNORMAL_DETECT_FROZEN(3,"画面冻结"),
+/**
+过亮
+*/
+EM_VIDEO_ABNORMAL_DETECT_LIGHT(4,"过亮"),
+/**
+过暗
+*/
+EM_VIDEO_ABNORMAL_DETECT_DARK(5,"过暗"),
+/**
+场景变化
+*/
+EM_VIDEO_ABNORMAL_DETECT_SCENECHANGE(6,"场景变化"),
+/**
+条纹检测
+*/
+EM_VIDEO_ABNORMAL_DETECT_STRIATION(7,"条纹检测"),
+/**
+噪声检测
+*/
+EM_VIDEO_ABNORMAL_DETECT_NOISE(8,"噪声检测"),
+/**
+偏色检测
+*/
+EM_VIDEO_ABNORMAL_DETECT_UNBALANCE(9,"偏色检测"),
+/**
+视频模糊检测
+*/
+EM_VIDEO_ABNORMAL_DETECT_BLUR(10,"视频模糊检测"),
+/**
+对比度异常检测
+*/
+EM_VIDEO_ABNORMAL_DETECT_CONTRAST(11,"对比度异常检测"),
+/**
+视频运动
+*/
+EM_VIDEO_ABNORMAL_DETECT_MOTION(12,"视频运动"),
+/**
+视频闪烁
+*/
+EM_VIDEO_ABNORMAL_DETECT_FILCKERING(13,"视频闪烁"),
+/**
+视频颜色-13
+*/
+EM_VIDEO_ABNORMAL_DETECT_COLOR(14,"视频颜色-13"),
+/**
+虚焦检测
+*/
+EM_VIDEO_ABNORMAL_DETECT_UNFOCUS(15,"虚焦检测"),
+/**
+过曝检测
+*/
+EM_VIDEO_ABNORMAL_DETECT_OVEREXPOSURE(16,"过曝检测"),
+/**
+场景剧变
+*/
+EM_VIDEO_ABNORMAL_DETECT_DRAMATICCHANGE(17,"场景剧变"),
+/**
+黑白图像
+*/
+EM_VIDEO_ABNORMAL_DETECT_BLACKWHITE(18,"黑白图像"),
+/**
+雪花噪声
+*/
+EM_VIDEO_ABNORMAL_DETECT_SNOWNOISE(19,"雪花噪声");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_VIDEO_ABNORMAL_DETECT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_VIDEO_ABNORMAL_DETECT_TYPE enumType : EM_VIDEO_ABNORMAL_DETECT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_VIDEO_ABNORMAL_DETECT_TYPE enumType : EM_VIDEO_ABNORMAL_DETECT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_VIDEO_ABNORMAL_DETECT_TYPE getEnum(int value) {
+ for (EM_VIDEO_ABNORMAL_DETECT_TYPE e : EM_VIDEO_ABNORMAL_DETECT_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_VIDEO_ABNORMAL_DETECT_TYPE.EM_VIDEO_ABNORMAL_DETECT_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VIDEO_FILE_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_VIDEO_FILE_STATE.java
new file mode 100644
index 0000000..a8e4e01
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VIDEO_FILE_STATE.java
@@ -0,0 +1,25 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 录像文件的状态
+ * @date 2021/2/22
+ */
+public enum EM_VIDEO_FILE_STATE {
+ /** 未知 */
+ EM_VIDEO_FILE_STATE_UNKNOWN,
+ /** 正在写 */
+ EM_VIDEO_FILE_STATE_TEMPORARY,
+ /** 已写完并正常关闭文件句柄 */
+ EM_VIDEO_FILE_STATE_COMPLETE;
+
+ public static EM_VIDEO_FILE_STATE getVideoFileState(int status) {
+ for (EM_VIDEO_FILE_STATE fileState : EM_VIDEO_FILE_STATE.values()) {
+ if (fileState.ordinal() == status) {
+ return fileState;
+ }
+ }
+ return EM_VIDEO_FILE_STATE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VIDEO_STREAM.java b/src/main/java/com/netsdk/lib/enumeration/EM_VIDEO_STREAM.java
new file mode 100644
index 0000000..0a32ec8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VIDEO_STREAM.java
@@ -0,0 +1,59 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 视频码流
+ * @date 2021/11/07
+ */
+public enum EM_VIDEO_STREAM {
+ // 未知
+ EM_VIDEO_STREAM_UNKNOWN(0, "未知"),
+ // 主码流
+ EM_VIDEO_STREAM_MAIN(1, "主码流"),
+ // 辅码流1
+ EM_VIDEO_STREAM_EXTRA1(2, "辅码流1"),
+ // 辅码流2
+ EM_VIDEO_STREAM_EXTRA2(3, "辅码流2"),
+ // 辅码流3
+ EM_VIDEO_STREAM_EXTRA3(4, "辅码流3"),
+ // 自动选择合适码流
+ EM_VIDEO_STREAM_AUTO(5, "自动选择合适码流"),
+ // 预览裸数据码流
+ EM_VIDEO_STREAM_PREVIEW(6, "预览裸数据码流"),
+ // 无视频码流(纯音频流)
+ EM_VIDEO_STREAM_NO_VIDEO_JUST_AUDIO(7, "无视频码流(纯音频流)");
+
+ private int value;
+ private String note;
+
+ private EM_VIDEO_STREAM(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_VIDEO_STREAM enumType : EM_VIDEO_STREAM.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_VIDEO_STREAM enumType : EM_VIDEO_STREAM.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VIDEO_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_VIDEO_TYPE.java
new file mode 100644
index 0000000..77b8d6b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VIDEO_TYPE.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 录像的类型
+ * @date 2021/2/22
+ */
+public enum EM_VIDEO_TYPE {
+ /** 未知 */
+ EM_VIDEO_TYPE_UNKNOWN,
+ /** 全部 */
+ EM_VIDEO_TYPE_ALL,
+ /** 手动保存的录像 */
+ EM_VIDEO_TYPE_MANUAL,
+ /** 报警录像 */
+ EM_VIDEO_TYPE_ALARM;
+
+ public EM_VIDEO_TYPE getVideoType(int type) {
+ for (EM_VIDEO_TYPE videoType : EM_VIDEO_TYPE.values()) {
+ if (videoType.ordinal() == type) {
+ return videoType;
+ }
+ }
+ return EM_VIDEO_TYPE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VIRTUAL_COIL_OCCUPANCY_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_VIRTUAL_COIL_OCCUPANCY_STATUS.java
new file mode 100644
index 0000000..7ffd09f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VIRTUAL_COIL_OCCUPANCY_STATUS.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 虚拟线圈占用状态
+ *
+ * @author : 47040
+ * @since : Created in 2020/12/17 11:50
+ */
+public enum EM_VIRTUAL_COIL_OCCUPANCY_STATUS {
+ /**
+ * 未知
+ */
+ EM_VIRTUAL_COIL_OCCUPANCY_STATUS_UNKNOWN(-1,"未知"),
+ /**
+ * 未占用
+ */
+ EM_VIRTUAL_COIL_OCCUPANCY_STATUS_UNOCCUPY(0,"未占用"),
+ /**
+ * 占用
+ */
+ EM_VIRTUAL_COIL_OCCUPANCY_STATUS_OCCUPY(1,"占用");
+
+ private final int value;
+ private final String note;
+
+ EM_VIRTUAL_COIL_OCCUPANCY_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_VIRTUAL_COIL_OCCUPANCY_STATUS enumType : EM_VIRTUAL_COIL_OCCUPANCY_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_VIRTUAL_COIL_OCCUPANCY_STATUS enumType : EM_VIRTUAL_COIL_OCCUPANCY_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_VIRTUAL_COIL_OCCUPANCY_STATUS getEnum(int value) {
+ for (EM_VIRTUAL_COIL_OCCUPANCY_STATUS e : EM_VIRTUAL_COIL_OCCUPANCY_STATUS.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_VIRTUAL_COIL_OCCUPANCY_STATUS.EM_VIRTUAL_COIL_OCCUPANCY_STATUS_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VOLTAGE_STATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_VOLTAGE_STATE_TYPE.java
new file mode 100644
index 0000000..05ad74f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VOLTAGE_STATE_TYPE.java
@@ -0,0 +1,42 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_VOLTAGE_STATE_TYPE {
+ EM_VOLTAGE_STATE_UNKNOWN(1,"电压状态未知"), // 未知
+ EM_VOLTAGE_STATE_OVER (2, "电压过高"), // 过压
+ EM_VOLTAGE_STATE_NORMAL (3, "电压正常"), // 正常
+ EM_VOLTAGE_STATE_UNDER (4, "欠压"); // 欠压
+
+ private int value;
+ private String note;
+
+ private EM_VOLTAGE_STATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_VOLTAGE_STATE_TYPE enumType : EM_VOLTAGE_STATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_VOLTAGE_STATE_TYPE enumType : EM_VOLTAGE_STATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_VSP_GAVI_PLATFORM_CODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_VSP_GAVI_PLATFORM_CODE.java
new file mode 100644
index 0000000..cf151e0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_VSP_GAVI_PLATFORM_CODE.java
@@ -0,0 +1,52 @@
+package com.netsdk.lib.enumeration;
+
+public enum EM_VSP_GAVI_PLATFORM_CODE {
+ EM_VSP_GAVI_PLATFORM_CODE_UNKNOWN(-1,"未知"),
+ EM_VSP_GAVI_PLATFORM_CODE_DEFAULT(0,"默认,标准视图库接入平台"),
+ EM_VSP_GAVI_PLATFORM_CODE_DAHUA(1,"DH视图库"),
+ EM_VSP_GAVI_PLATFORM_CODE_HKTDA_CLOUDSTORAGE(2,"TDA+云存储"),
+ EM_VSP_GAVI_PLATFORM_CODE_UNIVIEW(3,"宇视"),
+ EM_VSP_GAVI_PLATFORM_CODE_HKTEST(4,"接口测试"),
+ EM_VSP_GAVI_PLATFORM_CODE_SHQPNETPOSE(5,"上海清浦东方网力"),
+ EM_VSP_GAVI_PLATFORM_CODE_HKTDA(6,"TDA"),
+ EM_VSP_GAVI_PLATFORM_CODE_HARZONE(7,"华尊"),
+ EM_VSP_GAVI_PLATFORM_CODE_NETPOSE(8,"东方网力"),
+ EM_VSP_GAVI_PLATFORM_CODE_TAOAN(9,"韬安"),
+ EM_VSP_GAVI_PLATFORM_CODE_RESERVED(10,"预留"),
+ EM_VSP_GAVI_PLATFORM_CODE_HKVIEWGATEWAY(11,"视图网关"),
+ EM_VSP_GAVI_PLATFORM_CODE_KODAK(12,"柯达");
+
+ private int value;
+ private String note;
+
+ private EM_VSP_GAVI_PLATFORM_CODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_SIGNLIGHT_TYPE enumType : EM_SIGNLIGHT_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_SIGNLIGHT_TYPE enumType : EM_SIGNLIGHT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_WATERDATA_STAT_SERVER_SUPPORT.java b/src/main/java/com/netsdk/lib/enumeration/EM_WATERDATA_STAT_SERVER_SUPPORT.java
new file mode 100644
index 0000000..7dceeca
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_WATERDATA_STAT_SERVER_SUPPORT.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 当前是否具备水质检测功能
+* @date 2022/08/22 10:11:26
+*/
+public enum EM_WATERDATA_STAT_SERVER_SUPPORT {
+/**
+未知
+*/
+EM_WATERDATA_STAT_SERVER_SUPPORT_UNKNOWN(-1,"未知"),
+/**
+不支持
+*/
+EM_WATERDATA_STAT_SERVER_SUPPORT_NO(0,"不支持"),
+/**
+支持
+*/
+EM_WATERDATA_STAT_SERVER_SUPPORT_YES(1,"支持");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_WATERDATA_STAT_SERVER_SUPPORT(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_WATERDATA_STAT_SERVER_SUPPORT enumType : EM_WATERDATA_STAT_SERVER_SUPPORT.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_WATERDATA_STAT_SERVER_SUPPORT enumType : EM_WATERDATA_STAT_SERVER_SUPPORT.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_WATERDATA_STAT_SERVER_SUPPORT getEnum(int value) {
+ for (EM_WATERDATA_STAT_SERVER_SUPPORT e : EM_WATERDATA_STAT_SERVER_SUPPORT.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_WATERDATA_STAT_SERVER_SUPPORT.EM_WATERDATA_STAT_SERVER_SUPPORT_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_WATER_DETECTION_ALARM_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_WATER_DETECTION_ALARM_TYPE.java
new file mode 100644
index 0000000..f2891d6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_WATER_DETECTION_ALARM_TYPE.java
@@ -0,0 +1,126 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 事件报警类型
+* @date 2022/08/22 16:50:06
+*/
+public enum EM_WATER_DETECTION_ALARM_TYPE {
+/**
+未知
+*/
+EM_WATER_DETECTION_ALARM_TYPE_UNKNOWN(0,"未知"),
+/**
+水质类别
+*/
+EM_WATER_DETECTION_ALARM_TYPE_QUALITY(1,"水质类别"),
+/**
+PH
+*/
+EM_WATER_DETECTION_ALARM_TYPE_PH(2,"PH"),
+/**
+浊度值
+*/
+EM_WATER_DETECTION_ALARM_TYPE_NTU(3,"浊度值"),
+/**
+氨氮值
+*/
+EM_WATER_DETECTION_ALARM_TYPE_NH3_N(4,"氨氮值"),
+/**
+总氮值
+*/
+EM_WATER_DETECTION_ALARM_TYPE_TN(5,"总氮值"),
+/**
+透明度值
+*/
+EM_WATER_DETECTION_ALARM_TYPE_SD(6,"透明度值"),
+/**
+化学需氧量
+*/
+EM_WATER_DETECTION_ALARM_TYPE_COD(7,"化学需氧量"),
+/**
+亚硝酸盐氮
+*/
+EM_WATER_DETECTION_ALARM_TYPE_NN(8,"亚硝酸盐氮"),
+/**
+溶解氧
+*/
+EM_WATER_DETECTION_ALARM_TYPE_DO(9,"溶解氧"),
+/**
+叶绿素a
+*/
+EM_WATER_DETECTION_ALARM_TYPE_CHL_A(10,"叶绿素a"),
+/**
+总磷
+*/
+EM_WATER_DETECTION_ALARM_TYPE_TP(11,"总磷"),
+/**
+高锰酸盐指数范围
+*/
+EM_WATER_DETECTION_ALARM_TYPE_CODMN(12,"高锰酸盐指数范围"),
+/**
+悬浮物
+*/
+EM_WATER_DETECTION_ALARM_TYPE_SS(13,"悬浮物"),
+/**
+五日生化需氧量
+*/
+EM_WATER_DETECTION_ALARM_TYPE_BOD_5(14,"五日生化需氧量"),
+/**
+硝酸盐
+*/
+EM_WATER_DETECTION_ALARM_TYPE_NO3_N(15,"硝酸盐"),
+/**
+富营养状况指数
+*/
+EM_WATER_DETECTION_ALARM_TYPE_TSI(16,"富营养状况指数"),
+/**
+黑臭等级
+*/
+EM_WATER_DETECTION_ALARM_TYPE_SMELLY_LEVEL(17,"黑臭等级");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_WATER_DETECTION_ALARM_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_WATER_DETECTION_ALARM_TYPE enumType : EM_WATER_DETECTION_ALARM_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_WATER_DETECTION_ALARM_TYPE enumType : EM_WATER_DETECTION_ALARM_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_WATER_DETECTION_ALARM_TYPE getEnum(int value) {
+ for (EM_WATER_DETECTION_ALARM_TYPE e : EM_WATER_DETECTION_ALARM_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_WATER_DETECTION_ALARM_TYPE.EM_WATER_DETECTION_ALARM_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_WATER_QUALITY.java b/src/main/java/com/netsdk/lib/enumeration/EM_WATER_QUALITY.java
new file mode 100644
index 0000000..253b00a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_WATER_QUALITY.java
@@ -0,0 +1,78 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 水质类别,越小越好
+* @date 2022/08/22 16:51:44
+*/
+public enum EM_WATER_QUALITY {
+/**
+未知
+*/
+EM_WATER_QUALITY_UNKNOWN(0,"未知"),
+/**
+1类
+*/
+EM_WATER_QUALITY_1(1,"1类"),
+/**
+2类
+*/
+EM_WATER_QUALITY_2(2,"2类"),
+/**
+3类
+*/
+EM_WATER_QUALITY_3(3,"3类"),
+/**
+4类
+*/
+EM_WATER_QUALITY_4(4,"4类"),
+/**
+5类
+*/
+EM_WATER_QUALITY_5(5,"5类");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_WATER_QUALITY(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_WATER_QUALITY enumType : EM_WATER_QUALITY.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_WATER_QUALITY enumType : EM_WATER_QUALITY.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_WATER_QUALITY getEnum(int value) {
+ for (EM_WATER_QUALITY e : EM_WATER_QUALITY.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_WATER_QUALITY.EM_WATER_QUALITY_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_WEARING_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_WEARING_STATE.java
new file mode 100644
index 0000000..25e3bb5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_WEARING_STATE.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 穿戴状态
+ * @since : Created in 2022/03/10 11:17
+ */
+
+public enum EM_WEARING_STATE {
+ /**
+ * 未知
+ */
+ EM_WEARING_STATE_UNKNOWN(0,"未知"),
+ /**
+ * 没有穿戴
+ */
+ EM_WEARING_STATE_NOTWEAR(1,"没有穿戴"),
+ /**
+ * 有穿戴
+ */
+ EM_WEARING_STATE_WEAR(2,"有穿戴");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_WEARING_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_WEARING_STATE enumType : EM_WEARING_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_WEARING_STATE enumType : EM_WEARING_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_WEARING_STATE getEnum(int value) {
+ for (EM_WEARING_STATE e : EM_WEARING_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_WEARING_STATE.EM_WEARING_STATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_WEB_TUNNEL_PROTOCOL.java b/src/main/java/com/netsdk/lib/enumeration/EM_WEB_TUNNEL_PROTOCOL.java
new file mode 100644
index 0000000..2669f2a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_WEB_TUNNEL_PROTOCOL.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 私有web代理协议类型
+* @date 2022/04/21 14:35:33
+*/
+public enum EM_WEB_TUNNEL_PROTOCOL {
+/**
+未知
+*/
+EM_WEB_TUNNEL_PROTOCOL_UNKNOWN(0,"未知"),
+/**
+HTTP
+*/
+EM_WEB_TUNNEL_PROTOCOL_HTTP(1,"HTTP"),
+/**
+THTPS
+*/
+EM_WEB_TUNNEL_PROTOCOL_HTTPS(2,"THTPS");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_WEB_TUNNEL_PROTOCOL(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_WEB_TUNNEL_PROTOCOL enumType : EM_WEB_TUNNEL_PROTOCOL.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_WEB_TUNNEL_PROTOCOL enumType : EM_WEB_TUNNEL_PROTOCOL.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_WEB_TUNNEL_PROTOCOL getEnum(int value) {
+ for (EM_WEB_TUNNEL_PROTOCOL e : EM_WEB_TUNNEL_PROTOCOL.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_WEB_TUNNEL_PROTOCOL.EM_WEB_TUNNEL_PROTOCOL_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_WIRELESS_DEVICE_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_WIRELESS_DEVICE_MODE.java
new file mode 100644
index 0000000..35405a9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_WIRELESS_DEVICE_MODE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 无线设备工作模式
+ * @date 2023/03/16 14:52:52
+ */
+public enum EM_WIRELESS_DEVICE_MODE {
+ /**
+ * 模式未识别
+ */
+ EM_WIRELESS_DEVICE_MODE_UNKNOWN(0, "模式未识别"),
+ /**
+ * Normal 普通模式
+ */
+ EM_WIRELESS_DEVICE_MODE_NORMAL(1, "Normal 普通模式"),
+ /**
+ * Polling 巡检模式 只有Type为RemoteControl时才能处于巡检模式
+ */
+ EM_WIRELESS_DEVICE_MODE_POLLING(2, "Polling 巡检模式");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_WIRELESS_DEVICE_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_WIRELESS_DEVICE_MODE enumType : EM_WIRELESS_DEVICE_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_WIRELESS_DEVICE_MODE enumType : EM_WIRELESS_DEVICE_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_WLAN_SCAN_AND_CONFIG_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_WLAN_SCAN_AND_CONFIG_TYPE.java
new file mode 100644
index 0000000..cdf66b5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_WLAN_SCAN_AND_CONFIG_TYPE.java
@@ -0,0 +1,25 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description wifi扫描及配置支持的版本类型
+ * @date 2021/2/22
+ */
+public enum EM_WLAN_SCAN_AND_CONFIG_TYPE {
+ /** 未知 */
+ EM_WLAN_SCAN_AND_CONFIG_UNKNOWN,
+ /** V2:二代协议 */
+ EM_WLAN_SCAN_AND_CONFIG_V2,
+ /** v3:三代协议 */
+ EM_WLAN_SCAN_AND_CONFIG_V3;
+
+ public EM_WLAN_SCAN_AND_CONFIG_TYPE getWlanScanAndConfigType(int type) {
+ for (EM_WLAN_SCAN_AND_CONFIG_TYPE configType : EM_WLAN_SCAN_AND_CONFIG_TYPE.values()) {
+ if (configType.ordinal() == type) {
+ return configType;
+ }
+ }
+ return EM_WLAN_SCAN_AND_CONFIG_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_WORKACTION_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_WORKACTION_STATE.java
new file mode 100644
index 0000000..1a1fc1a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_WORKACTION_STATE.java
@@ -0,0 +1,71 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 作业行为状态信息
+ * @since : Created in 2022/03/08 15:25
+ */
+
+public enum EM_WORKACTION_STATE {
+ /**
+ * 未知
+ */
+ EM_WORKACTION_STATE_UNKNOWN(0, "未知"),
+ /**
+ * 无人作业
+ */
+ EM_WORKACTION_STATE_NO_WORKER(1, "无人作业"),
+ /**
+ * 单人作业
+ */
+ EEM_WORKACTION_STATE_SINGLE_WORKER(2, "单人作业"),
+ /**
+ * 无红马甲作业
+ */
+ EM_WORKACTION_STATE_NORED_VEST(3, "无红马甲作业");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_WORKACTION_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_WORKACTION_STATE enumType : EM_WORKACTION_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_WORKACTION_STATE enumType : EM_WORKACTION_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_WORKACTION_STATE getEnum(int value) {
+ for (EM_WORKACTION_STATE e : EM_WORKACTION_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_WORKACTION_STATE.EM_WORKACTION_STATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_WORKCLOTHES_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_WORKCLOTHES_STATE.java
new file mode 100644
index 0000000..deae4e1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_WORKCLOTHES_STATE.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 工作服穿戴状态
+ * @since : Created in 2022/03/10 11:17
+ */
+
+public enum EM_WORKCLOTHES_STATE {
+ /**
+ * 未知
+ */
+ EM_WORKCLOTHES_STATE_UNKNOWN(0,"未知"),
+ /**
+ * 无工作服
+ */
+ EM_WORKCLOTHES_STATE_NOTWEAR(1,"无工作服"),
+ /**
+ * 有工作服
+ */
+ EM_WORKCLOTHES_STATE_WEAR(2,"有工作服");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_WORKCLOTHES_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_WORKCLOTHES_STATE enumType : EM_WORKCLOTHES_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_WORKCLOTHES_STATE enumType : EM_WORKCLOTHES_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_WORKCLOTHES_STATE getEnum(int value) {
+ for (EM_WORKCLOTHES_STATE e : EM_WORKCLOTHES_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_WORKCLOTHES_STATE.EM_WORKCLOTHES_STATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_WORKPANTS_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_WORKPANTS_STATE.java
new file mode 100644
index 0000000..7443437
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_WORKPANTS_STATE.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 工作裤穿戴状态
+ * @since : Created in 2022/03/10 11:17
+ */
+
+public enum EM_WORKPANTS_STATE {
+ /**
+ * 未知
+ */
+ EM_WORKPANTS_STATE_UNKNOWN(0,"未知"),
+ /**
+ * 没有
+ */
+ EM_WORKPANTS_STATE_NOTWEAR(1,"没有"),
+ /**
+ * 有
+ */
+ EM_WORKPANTS_STATE_WEAR(2,"有");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_WORKPANTS_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_WORKPANTS_STATE enumType : EM_WORKPANTS_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_WORKPANTS_STATE enumType : EM_WORKPANTS_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_WORKPANTS_STATE getEnum(int value) {
+ for (EM_WORKPANTS_STATE e : EM_WORKPANTS_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_WORKPANTS_STATE.EM_WORKPANTS_STATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_WORKSTATDETECTION_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_WORKSTATDETECTION_TYPE.java
new file mode 100644
index 0000000..9d08527
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_WORKSTATDETECTION_TYPE.java
@@ -0,0 +1,83 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 作业统计检测类型
+ * @since : Created in 2022/03/08 15:25
+ */
+
+public enum EM_WORKSTATDETECTION_TYPE {
+ /**
+ * 未知
+ */
+ EM_WORKSTATDETECTION_UNKNOWN(0, "未知"),
+ /**
+ * 脱岗检测
+ */
+ EM_WORKSTATDETECTION_NO_WORKER(1, "脱岗检测"),
+ /**
+ * 单人作业
+ */
+ EM_WORKSTATDETECTION_SINGLE_WORKER(2, "单人作业"),
+ /**
+ * 工作负责人脱岗检测
+ */
+ EM_WORKSTATDETECTION_NO_WORKER_LEADER(3, "工作负责人脱岗检测"),
+ /**
+ * 手部消毒检测
+ */
+ EM_WORKSTATDETECTION_HAND_DISINFECTION(4, "手部消毒检测"),
+ /**
+ * 蘸脚动作检测
+ */
+ EM_WORKSTATDETECTION_FOOT_DIP(5, "蘸脚动作检测"),
+ /**
+ * 换鞋动作检测
+ */
+ EM_WORKSTATDETECTION_SHOES_CHANGE(6, "换鞋动作检测");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_WORKSTATDETECTION_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_WORKSTATDETECTION_TYPE enumType : EM_WORKSTATDETECTION_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_WORKSTATDETECTION_TYPE enumType : EM_WORKSTATDETECTION_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_WORKSTATDETECTION_TYPE getEnum(int value) {
+ for (EM_WORKSTATDETECTION_TYPE e : EM_WORKSTATDETECTION_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_WORKSTATDETECTION_TYPE.EM_WORKSTATDETECTION_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_WORKSUIT_ABSTRACT_ERRCODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_WORKSUIT_ABSTRACT_ERRCODE.java
new file mode 100644
index 0000000..3377716
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_WORKSUIT_ABSTRACT_ERRCODE.java
@@ -0,0 +1,69 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 工装建模错误码
+ * @date 2022/10/09 11:22:52
+ */
+public enum EM_WORKSUIT_ABSTRACT_ERRCODE {
+ /**
+ * 未知
+ */
+ EM_WORKSUIT_ABSTRACT_ERRCODE_UNKNWON(0, "未知"),
+ /**
+ * 建模失败
+ */
+ EM_WORKSUIT_ABSTRACT_ERRCODE_FAILED(1, "建模失败"),
+ /**
+ * 系统异常(如Licence失效、建模分析器未启动导致的失败)
+ */
+ EM_WORKSUIT_ABSTRACT_ERRCODE_SYSERR(2, "系统异常(如Licence失效、建模分析器未启动导致的失败)"),
+ /**
+ * 数据库操作失败
+ */
+ EM_WORKSUIT_ABSTRACT_ERRCODE_DB_ERROR(3, "数据库操作失败"),
+ /**
+ * 工装数量超过限制
+ */
+ EM_WORKSUIT_ABSTRACT_ERRCODE_OVER_NUM(4, "工装数量超过限制"),
+ /**
+ * 剩余存储空间大小不足
+ */
+ EM_WORKSUIT_ABSTRACT_ERRCODE_NO_STORAGE(5, "剩余存储空间大小不足");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_WORKSUIT_ABSTRACT_ERRCODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_WORKSUIT_ABSTRACT_ERRCODE enumType : EM_WORKSUIT_ABSTRACT_ERRCODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_WORKSUIT_ABSTRACT_ERRCODE enumType : EM_WORKSUIT_ABSTRACT_ERRCODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_WORKSUIT_APPEND_ERRCODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_WORKSUIT_APPEND_ERRCODE.java
new file mode 100644
index 0000000..d44832e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_WORKSUIT_APPEND_ERRCODE.java
@@ -0,0 +1,81 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 工装合规导入返回的错误码信息
+ * @date 2022/10/08 19:50:19
+ */
+public enum EM_WORKSUIT_APPEND_ERRCODE {
+ /**
+ * 未知
+ */
+ EM_WORKSUIT_APPEND_ERRCODE_UNKNOWN(-1, "未知"),
+ /**
+ * 成功
+ */
+ EM_WORKSUIT_APPEND_ERRCODE_SUCCESS(0, "成功"),
+ /**
+ * 组ID不存在或为空
+ */
+ EM_WORKSUIT_APPEND_ERRCODE_INVALID_ID(1, "组ID不存在或为空"),
+ /**
+ * 数据库操作失败
+ */
+ EM_WORKSUIT_APPEND_ERRCODE_DB_ERROR(2, "数据库操作失败"),
+ /**
+ * 图片大小不对
+ */
+ EM_WORKSUIT_APPEND_ERRCODE_IMAGE_SIZE(3, "图片大小不对"),
+ /**
+ * 图片分辨率不对
+ */
+ EM_WORKSUIT_APPEND_ERRCODE_IMAGE_RESO(4, "图片分辨率不对"),
+ /**
+ * 图片文件写入失败
+ */
+ EM_WORKSUIT_APPEND_ERRCODE_IMAGE_WRITE(5, "图片文件写入失败");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_WORKSUIT_APPEND_ERRCODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_WORKSUIT_APPEND_ERRCODE enumType : EM_WORKSUIT_APPEND_ERRCODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_WORKSUIT_APPEND_ERRCODE enumType : EM_WORKSUIT_APPEND_ERRCODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+ public static EM_WORKSUIT_APPEND_ERRCODE getEnum(int value) {
+ for (EM_WORKSUIT_APPEND_ERRCODE e : EM_WORKSUIT_APPEND_ERRCODE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_WORKSUIT_APPEND_ERRCODE.EM_WORKSUIT_APPEND_ERRCODE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_WORKSUIT_GROUP_POLICY.java b/src/main/java/com/netsdk/lib/enumeration/EM_WORKSUIT_GROUP_POLICY.java
new file mode 100644
index 0000000..33631f9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_WORKSUIT_GROUP_POLICY.java
@@ -0,0 +1,57 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 工装合规组优先方案
+ * @date 2022/10/08 17:05:54
+ */
+public enum EM_WORKSUIT_GROUP_POLICY {
+ /**
+ * 未知
+ */
+ EM_WORKSUIT_GROUP_POLICY_UNKNWON(-1, "未知"),
+ /**
+ * 全身
+ */
+ EM_WORKSUIT_GROUP_POLICY_WHOLE_BODY(0, "全身"),
+ /**
+ * 上半身
+ */
+ EM_WORKSUIT_GROUP_POLICY_UPPER_BODY(1, "上半身");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_WORKSUIT_GROUP_POLICY(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_WORKSUIT_GROUP_POLICY enumType : EM_WORKSUIT_GROUP_POLICY.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_WORKSUIT_GROUP_POLICY enumType : EM_WORKSUIT_GROUP_POLICY.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_WORKSUIT_GROUP_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_WORKSUIT_GROUP_TYPE.java
new file mode 100644
index 0000000..ab99780
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_WORKSUIT_GROUP_TYPE.java
@@ -0,0 +1,53 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 工装合规组类型
+ * @date 2022/10/08 17:05:54
+ */
+public enum EM_WORKSUIT_GROUP_TYPE {
+ /**
+ * 未知
+ */
+ EM_WORKSUIT_GROUP_TYPE_UNKNWON(0, "未知"),
+ /**
+ * 注册库(布控名单)
+ */
+ EM_WORKSUIT_GROUP_TYPE_BLOCK(1, "注册库(布控名单)");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_WORKSUIT_GROUP_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_WORKSUIT_GROUP_TYPE enumType : EM_WORKSUIT_GROUP_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_WORKSUIT_GROUP_TYPE enumType : EM_WORKSUIT_GROUP_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_WORK_HELMET_STATE.java b/src/main/java/com/netsdk/lib/enumeration/EM_WORK_HELMET_STATE.java
new file mode 100644
index 0000000..32f613b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_WORK_HELMET_STATE.java
@@ -0,0 +1,71 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 安全帽佩戴状态
+ * @since : Created in 2022/03/10 11:17
+ */
+
+public enum EM_WORK_HELMET_STATE {
+ /**
+ * 未知
+ */
+ EM_HELMET_STATE_UNKNOWN(0,"未知"),
+ /**
+ * 不带安全帽
+ */
+ EM_HELMET_STATE_NOTWEAR(1,"不带安全帽"),
+ /**
+ * 有带安全帽
+ */
+ EM_HELMET_STATE_WEAR(2,"有带安全帽"),
+ /**
+ * 不存在指定颜色的安全帽
+ */
+ EM_HELMET_STATE_INCONFORMITY_COLOR(3,"不存在指定颜色的安全帽");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ EM_WORK_HELMET_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (EM_WORK_HELMET_STATE enumType : EM_WORK_HELMET_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (EM_WORK_HELMET_STATE enumType : EM_WORK_HELMET_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static EM_WORK_HELMET_STATE getEnum(int value) {
+ for (EM_WORK_HELMET_STATE e : EM_WORK_HELMET_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_WORK_HELMET_STATE.EM_HELMET_STATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_XRAY_IMAGE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/EM_XRAY_IMAGE_TYPE.java
new file mode 100644
index 0000000..9f77b4d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_XRAY_IMAGE_TYPE.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * X光机图片类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 09:19
+ */
+public enum EM_XRAY_IMAGE_TYPE {
+
+ EM_XRAY_IMAGE_TYPE_UNKNOWN(-1,"未知"),
+ EM_XRAY_IMAGE_TYPE_COLOR(0,"彩图"),
+ EM_XRAY_IMAGE_COLOR_TYPE_OVERLAY(1,"彩色叠加图");
+
+
+ private int value;
+ private String note;
+
+ private EM_XRAY_IMAGE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL.java b/src/main/java/com/netsdk/lib/enumeration/EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL.java
new file mode 100644
index 0000000..cadd8de
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL.java
@@ -0,0 +1,90 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description X光机物品检测配置等级
+* @date 2022/12/01 16:22:06
+*/
+public enum EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL {
+/**
+未知
+*/
+EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL_UNKNWON(-1,"未知"),
+/**
+高
+*/
+EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL_HIGH(0,"高"),
+/**
+中
+*/
+EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL_MID(1,"中"),
+/**
+普通
+*/
+EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL_NORMAL(2,"普通"),
+/**
+自定义1
+*/
+EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL_CUSTOM1(3,"自定义1"),
+/**
+自定义2
+*/
+EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL_CUSTOM2(4,"自定义2"),
+/**
+自定义3
+*/
+EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL_CUSTOM3(5,"自定义3"),
+/**
+自定义4
+*/
+EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL_CUSTOM4(6,"自定义4"),
+/**
+自定义5
+*/
+EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL_CUSTOM5(7,"自定义5");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL enumType : EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL enumType : EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL getEnum(int value) {
+ for (EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL e : EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL.EM_XRAY_OBJECT_DETECT_CONFIG_LEVEL_UNKNWON;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_XRAY_PACKAGE_MODE.java b/src/main/java/com/netsdk/lib/enumeration/EM_XRAY_PACKAGE_MODE.java
new file mode 100644
index 0000000..80a839e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_XRAY_PACKAGE_MODE.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+
+
+/**
+ * 包裹产生方式
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 09:19
+ */
+public enum EM_XRAY_PACKAGE_MODE {
+
+ EM_XRAY_PACKAGE_MODE_UNKNOWN(-1,"未知方式"),
+ EM_XRAY_PACKAGE_MODE_LOCAL(0,"本地判图结果"),
+ EM_XRAY_PACKAGE_MODE_CENTRAL(1,"集中判图模式中的本地预判结果");
+
+ private int value;
+ private String note;
+
+ private EM_XRAY_PACKAGE_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/EM_ZONE_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/EM_ZONE_STATUS.java
new file mode 100644
index 0000000..3aae5a9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/EM_ZONE_STATUS.java
@@ -0,0 +1,78 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 防区异常状态
+* @date 2022/10/09 11:29:42
+*/
+public enum EM_ZONE_STATUS {
+/**
+未知
+*/
+EM_ZONE_STATUS_UNKNOWN(0,"未知"),
+/**
+防区报警/打开
+*/
+EM_ZONE_STATUS_ALARM(1,"防区报警/打开"),
+/**
+防区防拆
+*/
+EM_ZONE_STATUS_TAMPER(2,"防区防拆"),
+/**
+防区防遮挡
+*/
+EM_ZONE_STATUS_MASK(3,"防区防遮挡"),
+/**
+防区短路
+*/
+EM_ZONE_STATUS_SHORT(4,"防区短路"),
+/**
+防区正常
+*/
+EM_ZONE_STATUS_NORMAL(5,"防区正常");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+EM_ZONE_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (EM_ZONE_STATUS enumType : EM_ZONE_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (EM_ZONE_STATUS enumType : EM_ZONE_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static EM_ZONE_STATUS getEnum(int value) {
+ for (EM_ZONE_STATUS e : EM_ZONE_STATUS.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return EM_ZONE_STATUS.EM_ZONE_STATUS_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/ENUMERROR.java b/src/main/java/com/netsdk/lib/enumeration/ENUMERROR.java
new file mode 100644
index 0000000..6dfcb0a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/ENUMERROR.java
@@ -0,0 +1,567 @@
+package com.netsdk.lib.enumeration;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description netSdk错误类型枚举
+ * @since 2020/7/28
+ */
+public enum ENUMERROR {
+ NET_UNDEFIND(-2, "没有定义"),
+ NET_NOERROR(0, "没有错误"),
+ NET_ERROR(-1, "未知错误"),
+ NET_SYSTEM_ERROR(1, "Windows系统出错"),
+ NET_NETWORK_ERROR(2, "网络错误,可能是因为网络超时"),
+ NET_DEV_VER_NOMATCH(3, "设备协议不匹配"),
+ NET_INVALID_HANDLE(4, "句柄无效"),
+ NET_OPEN_CHANNEL_ERROR(5, "打开通道失败"),
+ NET_CLOSE_CHANNEL_ERROR(6, "关闭通道失败"),
+ NET_ILLEGAL_PARAM(7, "用户参数不合法"),
+ NET_SDK_INIT_ERROR(8, "SDK初始化出错"),
+ NET_SDK_UNINIT_ERROR(9, "SDK清理出错"),
+ NET_RENDER_OPEN_ERROR(10, "申请render资源出错"),
+ NET_DEC_OPEN_ERROR(11, "打开解码库出错"),
+ NET_DEC_CLOSE_ERROR(12, "关闭解码库出错"),
+
+ NET_MULTIPLAY_NOCHANNEL(13, "多画面预览中检测到通道数为0"),
+ NET_TALK_INIT_ERROR(14, "录音库初始化失败"),
+ NET_TALK_NOT_INIT(15, "录音库未经初始化"),
+ NET_TALK_SENDDATA_ERROR(16, "发送音频数据出错"),
+ NET_REAL_ALREADY_SAVING(17, "实时数据已经处于保存状态"),
+ NET_NOT_SAVING(18, "未保存实时数据"),
+ NET_OPEN_FILE_ERROR(19, "打开文件出错"),
+ NET_PTZ_SET_TIMER_ERROR(20, "启动云台控制定时器失败"),
+ NET_RETURN_DATA_ERROR(21, "对返回数据的校验出错"),
+ NET_INSUFFICIENT_BUFFER(22, "没有足够的缓存"),
+ NET_NOT_SUPPORTED(23, "当前SDK未支持该功能"),
+ NET_NO_RECORD_FOUND(24, "查询不到录像"),
+ NET_NOT_AUTHORIZED(25, "无操作权限"),
+ NET_NOT_NOW(26, "暂时无法执行"),
+ NET_NO_TALK_CHANNEL(27, "未发现对讲通道"),
+ NET_NO_AUDIO(28, "未发现音频"),
+ NET_NO_INIT(29, "网络SDK未经初始化"),
+ NET_DOWNLOAD_END(30, "下载已结束"),
+ NET_EMPTY_LIST(31, "查询结果为空"),
+ NET_ERROR_GETCFG_SYSATTR(32, "获取系统属性配置失败"),
+ NET_ERROR_GETCFG_SERIAL(33, "获取序列号失败"),
+ NET_ERROR_GETCFG_GENERAL(34, "获取常规属性失败"),
+ NET_ERROR_GETCFG_DSPCAP(35, "获取DSP能力描述失败"),
+ NET_ERROR_GETCFG_NETCFG(36, "获取网络配置失败"),
+ NET_ERROR_GETCFG_CHANNAME(37, "获取通道名称失败"),
+ NET_ERROR_GETCFG_VIDEO(38, "获取视频属性失败"),
+ NET_ERROR_GETCFG_RECORD(39, "获取录象配置失败"),
+ NET_ERROR_GETCFG_PRONAME(40, "获取解码器协议名称失败"),
+ NET_ERROR_GETCFG_FUNCNAME(41, "获取232串口功能名称失败"),
+ NET_ERROR_GETCFG_485DECODER(42, "获取解码器属性失败"),
+ NET_ERROR_GETCFG_232COM(43, "获取232串口配置失败"),
+ NET_ERROR_GETCFG_ALARMIN(44, "获取外部报警输入配置失败"),
+ NET_ERROR_GETCFG_ALARMDET(45, "获取动态检测报警失败"),
+ NET_ERROR_GETCFG_SYSTIME(46, "获取设备时间失败"),
+ NET_ERROR_GETCFG_PREVIEW(47, "获取预览参数失败"),
+ NET_ERROR_GETCFG_AUTOMT(48, "获取自动维护配置失败"),
+ NET_ERROR_GETCFG_VIDEOMTRX(49, "获取视频矩阵配置失败"),
+ NET_ERROR_GETCFG_COVER(50, "获取区域遮挡配置失败"),
+ NET_ERROR_GETCFG_WATERMAKE(51, "获取图象水印配置失败"),
+ NET_ERROR_GETCFG_MULTICAST(52, "获取配置失败位置:组播端口按通道配置"),
+ NET_ERROR_SETCFG_GENERAL(55, "修改常规属性失败"),
+ NET_ERROR_SETCFG_NETCFG(56, "修改网络配置失败"),
+ NET_ERROR_SETCFG_CHANNAME(57, "修改通道名称失败"),
+ NET_ERROR_SETCFG_VIDEO(58, "修改视频属性失败"),
+ NET_ERROR_SETCFG_RECORD(59, "修改录象配置失败"),
+ NET_ERROR_SETCFG_485DECODER(60, "修改解码器属性失败"),
+ NET_ERROR_SETCFG_232COM(61, "修改232串口配置失败"),
+ NET_ERROR_SETCFG_ALARMIN(62, "修改外部输入报警配置失败"),
+ NET_ERROR_SETCFG_ALARMDET(63, "修改动态检测报警配置失败"),
+ NET_ERROR_SETCFG_SYSTIME(64, "修改设备时间失败"),
+ NET_ERROR_SETCFG_PREVIEW(65, "修改预览参数失败"),
+ NET_ERROR_SETCFG_AUTOMT(66, "修改自动维护配置失败"),
+ NET_ERROR_SETCFG_VIDEOMTRX(67, "修改视频矩阵配置失败"),
+ NET_ERROR_SETCFG_COVER(68, "修改区域遮挡配置失败"),
+ NET_ERROR_SETCFG_WATERMAKE(69, "修改图象水印配置失败"),
+ NET_ERROR_SETCFG_WLAN(70, "修改无线网络信息失败"),
+ NET_ERROR_SETCFG_WLANDEV(71, "选择无线网络设备失败"),
+ NET_ERROR_SETCFG_REGISTER(72, "修改主动注册参数配置失败"),
+ NET_ERROR_SETCFG_CAMERA(73, "修改摄像头属性配置失败"),
+ NET_ERROR_SETCFG_INFRARED(74, "修改红外报警配置失败"),
+ NET_ERROR_SETCFG_SOUNDALARM(75, "修改音频报警配置失败"),
+ NET_ERROR_SETCFG_STORAGE(76, "修改存储位置配置失败"),
+ NET_AUDIOENCODE_NOTINIT(77, "音频编码接口没有成功初始化"),
+ NET_DATA_TOOLONGH(78, "数据过长"),
+ NET_UNSUPPORTED(79, "设备不支持该操作"),
+ NET_DEVICE_BUSY(80, "设备资源不足"),
+ NET_SERVER_STARTED(81, "服务器已经启动"),
+ NET_SERVER_STOPPED(82, "服务器尚未成功启动"),
+ NET_LISTER_INCORRECT_SERIAL(83, "输入序列号有误"),
+ NET_QUERY_DISKINFO_FAILED(84, "获取硬盘信息失败"),
+ NET_ERROR_GETCFG_SESSION(85, "获取连接Session信息"),
+ NET_USER_FLASEPWD_TRYTIME(86, "输入密码错误超过限制次数"),
+ NET_LOGIN_ERROR_PASSWORD(100, "密码不正确"),
+ NET_LOGIN_ERROR_USER(101, "帐户不存在"),
+ NET_LOGIN_ERROR_TIMEOUT(102, "等待登录返回超时"),
+ NET_LOGIN_ERROR_RELOGGIN(103, "帐号已登录"),
+ NET_LOGIN_ERROR_LOCKED(104, "帐号已被锁定"),
+ NET_LOGIN_ERROR_BLACKLIST(105, "帐号已被列为禁止名单"),
+ NET_LOGIN_ERROR_BUSY(106, "资源不足,系统忙"),
+ NET_LOGIN_ERROR_CONNECT(107, "登录设备超时,请检查网络并重试"),
+ NET_LOGIN_ERROR_NETWORK(108, "网络连接失败"),
+ NET_LOGIN_ERROR_SUBCONNECT(109, "登录设备成功,但无法创建视频通道,请检查网络状况"),
+ NET_LOGIN_ERROR_MAXCONNECT(110, "超过最大连接数"),
+ NET_LOGIN_ERROR_PROTOCOL3_ONLY(111, "只支持3代协议"),
+ NET_LOGIN_ERROR_UKEY_LOST(112, "未插入U盾或U盾信息错误"),
+ NET_LOGIN_ERROR_NO_AUTHORIZED(113, "客户端IP地址没有登录权限"),
+ NET_LOGIN_ERROR_USER_OR_PASSOWRD(117, "账号或密码错误"),
+ NET_LOGIN_ERROR_DEVICE_NOT_INIT(118, "设备尚未初始化,不能登录,请先初始化设备"),
+ NET_RENDER_SOUND_ON_ERROR(120, "Render库打开音频出错"),
+ NET_RENDER_SOUND_OFF_ERROR(121, "Render库关闭音频出错"),
+ NET_RENDER_SET_VOLUME_ERROR(122, "Render库控制音量出错"),
+ NET_RENDER_ADJUST_ERROR(123, "Render库设置画面参数出错"),
+ NET_RENDER_PAUSE_ERROR(124, "Render库暂停播放出错"),
+ NET_RENDER_SNAP_ERROR(125, "Render库抓图出错"),
+ NET_RENDER_STEP_ERROR(126, "Render库步进出错"),
+ NET_RENDER_FRAMERATE_ERROR(127, "Render库设置帧率出错"),
+ NET_RENDER_DISPLAYREGION_ERROR(128, "Render库设置显示区域出错"),
+ NET_RENDER_GETOSDTIME_ERROR(129, "Render库获取当前播放时间出错"),
+ NET_GROUP_EXIST(140, "组名已存在"),
+ NET_GROUP_NOEXIST(141, "组名不存在"),
+ NET_GROUP_RIGHTOVER(142, "组的权限超出权限列表范围"),
+ NET_GROUP_HAVEUSER(143, "组下有用户,不能删除"),
+ NET_GROUP_RIGHTUSE(144, "组的某个权限被用户使用,不能删除"),
+ NET_GROUP_SAMENAME(145, "新组名同已有组名重复"),
+ NET_USER_EXIST(146, "用户已存在"),
+ NET_USER_NOEXIST(147, "用户不存在"),
+ NET_USER_RIGHTOVER(148, "用户权限超出组权限"),
+ NET_USER_PWD(149, "保留帐号,不容许修改密码"),
+ NET_USER_FLASEPWD(150, "密码不正确"),
+ NET_USER_NOMATCHING(151, "密码不匹配"),
+ NET_USER_INUSE(152, "账号正在使用中"),
+
+ NET_ERROR_GETCFG_ETHERNET(300, "获取网卡配置失败"),
+ NET_ERROR_GETCFG_WLAN(301, "获取无线网络信息失败"),
+ NET_ERROR_GETCFG_WLANDEV(302, "获取无线网络设备失败"),
+ NET_ERROR_GETCFG_REGISTER(303, "获取主动注册参数失败"),
+ NET_ERROR_GETCFG_CAMERA(304, "获取摄像头属性失败"),
+ NET_ERROR_GETCFG_INFRARED(305, "获取红外报警配置失败"),
+ NET_ERROR_GETCFG_SOUNDALARM(306, "获取音频报警配置失败"),
+ NET_ERROR_GETCFG_STORAGE(307, "获取存储位置配置失败"),
+ NET_ERROR_GETCFG_MAIL(308, "获取邮件配置失败"),
+ NET_CONFIG_DEVBUSY(309, "暂时无法设置"),
+ NET_CONFIG_DATAILLEGAL(310, "配置数据不合法"),
+ NET_ERROR_GETCFG_DST(311, "获取夏令时配置失败"),
+ NET_ERROR_SETCFG_DST(312, "设置夏令时配置失败"),
+ NET_ERROR_GETCFG_VIDEO_OSD(313, "获取视频OSD叠加配置失败"),
+ NET_ERROR_SETCFG_VIDEO_OSD(314, "设置视频OSD叠加配置失败"),
+ NET_ERROR_GETCFG_GPRSCDMA(315, "获取CDMA/GPRS网络配置失败"),
+ NET_ERROR_SETCFG_GPRSCDMA(316, "设置CDMA/GPRS网络配置失败"),
+ NET_ERROR_GETCFG_IPFILTER(317, "获取IP过滤配置失败"),
+ NET_ERROR_SETCFG_IPFILTER(318, "设置IP过滤配置失败"),
+ NET_ERROR_GETCFG_TALKENCODE(319, "获取语音对讲编码配置失败"),
+ NET_ERROR_SETCFG_TALKENCODE(320, "设置语音对讲编码配置失败"),
+ NET_ERROR_GETCFG_RECORDLEN(321, "获取录像打包长度配置失败"),
+ NET_ERROR_SETCFG_RECORDLEN(322, "设置录像打包长度配置失败"),
+ NET_DONT_SUPPORT_SUBAREA(323, "不支持网络硬盘分区"),
+ NET_ERROR_GET_AUTOREGSERVER(324, "获取设备上主动注册服务器信息失败"),
+ NET_ERROR_CONTROL_AUTOREGISTER(325, "主动注册重定向注册错误"),
+ NET_ERROR_DISCONNECT_AUTOREGISTER(326, "断开主动注册服务器错误"),
+ NET_ERROR_GETCFG_MMS(327, "获取mms配置失败"),
+ NET_ERROR_SETCFG_MMS(328, "设置mms配置失败"),
+ NET_ERROR_GETCFG_SMSACTIVATION(329, "获取短信激活无线连接配置失败"),
+ NET_ERROR_SETCFG_SMSACTIVATION(330, "设置短信激活无线连接配置失败"),
+ NET_ERROR_GETCFG_DIALINACTIVATION(331, "获取拨号激活无线连接配置失败"),
+ NET_ERROR_SETCFG_DIALINACTIVATION(332, "设置拨号激活无线连接配置失败"),
+ NET_ERROR_GETCFG_VIDEOOUT(333, "查询视频输出参数配置失败"),
+ NET_ERROR_SETCFG_VIDEOOUT(334, "设置视频输出参数配置失败"),
+ NET_ERROR_GETCFG_OSDENABLE(335, "获取osd叠加使能配置失败"),
+ NET_ERROR_SETCFG_OSDENABLE(336, "设置osd叠加使能配置失败"),
+ NET_ERROR_SETCFG_ENCODERINFO(337, "设置数字通道前端编码接入配置失败"),
+ NET_ERROR_GETCFG_TVADJUST(338, "获取TV调节配置失败"),
+ NET_ERROR_SETCFG_TVADJUST(339, "设置TV调节配置失败"),
+ NET_ERROR_CONNECT_FAILED(340, "请求建立连接失败"),
+ NET_ERROR_SETCFG_BURNFILE(341, "请求刻录文件上传失败"),
+ NET_ERROR_SNIFFER_GETCFG(342, "获取抓包配置信息失败"),
+ NET_ERROR_SNIFFER_SETCFG(343, "设置抓包配置信息失败"),
+ NET_ERROR_DOWNLOADRATE_GETCFG(344, "查询下载限制信息失败"),
+ NET_ERROR_DOWNLOADRATE_SETCFG(345, "设置下载限制信息失败"),
+ NET_ERROR_SEARCH_TRANSCOM(346, "查询串口参数失败"),
+ NET_ERROR_GETCFG_POINT(347, "获取预制点信息错误"),
+ NET_ERROR_SETCFG_POINT(348, "设置预制点信息错误"),
+ NET_SDK_LOGOUT_ERROR(349, "SDK没有正常登出设备"),
+ NET_ERROR_GET_VEHICLE_CFG(350, "获取车载配置失败"),
+ NET_ERROR_SET_VEHICLE_CFG(351, "设置车载配置失败"),
+ NET_ERROR_GET_ATM_OVERLAY_CFG(352, "获取atm叠加配置失败"),
+ NET_ERROR_SET_ATM_OVERLAY_CFG(353, "设置atm叠加配置失败"),
+ NET_ERROR_GET_ATM_OVERLAY_ABILITY(354, "获取atm叠加能力失败"),
+ NET_ERROR_GET_DECODER_TOUR_CFG(355, "获取解码器解码轮巡配置失败"),
+ NET_ERROR_SET_DECODER_TOUR_CFG(356, "设置解码器解码轮巡配置失败"),
+ NET_ERROR_CTRL_DECODER_TOUR(357, "控制解码器解码轮巡失败"),
+ NET_GROUP_OVERSUPPORTNUM(358, "超出设备支持最大用户组数目"),
+ NET_USER_OVERSUPPORTNUM(359, "超出设备支持最大用户数目"),
+ NET_ERROR_GET_SIP_CFG(368, "获取SIP配置失败"),
+ NET_ERROR_SET_SIP_CFG(369, "设置SIP配置失败"),
+ NET_ERROR_GET_SIP_ABILITY(370, "获取SIP能力失败"),
+ NET_ERROR_GET_WIFI_AP_CFG(371, "获取WIFI ap配置失败"),
+ NET_ERROR_SET_WIFI_AP_CFG(372, "设置WIFI ap配置失败"),
+ NET_ERROR_GET_DECODE_POLICY(373, "获取解码策略配置失败"),
+ NET_ERROR_SET_DECODE_POLICY(374, "设置解码策略配置失败"),
+ NET_ERROR_TALK_REJECT(375, "拒绝对讲"),
+ NET_ERROR_TALK_OPENED(376, "对讲被其他客户端打开"),
+ NET_ERROR_TALK_RESOURCE_CONFLICIT(377, "资源冲突"),
+ NET_ERROR_TALK_UNSUPPORTED_ENCODE(378, "不支持的语音编码格式"),
+ NET_ERROR_TALK_RIGHTLESS(379, "无权限"),
+ NET_ERROR_TALK_FAILED(380, "请求对讲失败"),
+ NET_ERROR_GET_MACHINE_CFG(381, "获取机器相关配置失败"),
+ NET_ERROR_SET_MACHINE_CFG(382, "设置机器相关配置失败"),
+ NET_ERROR_GET_DATA_FAILED(383, "设备无法获取当前请求数据"),
+ NET_ERROR_MAC_VALIDATE_FAILED(384, "MAC地址验证失败"),
+ NET_ERROR_GET_INSTANCE(385, "获取服务器实例失败"),
+ NET_ERROR_JSON_REQUEST(386, "生成的json字符串错误"),
+ NET_ERROR_JSON_RESPONSE(387, "响应的json字符串错误"),
+ NET_ERROR_VERSION_HIGHER(388, "协议版本低于当前使用的版本"),
+ NET_SPARE_NO_CAPACITY(389, "设备操作失败, 容量不足"),
+ NET_ERROR_SOURCE_IN_USE(390, "显示源被其他输出占用"),
+ NET_ERROR_REAVE(391, "高级用户抢占低级用户资源"),
+ NET_ERROR_NETFORBID(392, "禁止入网"),
+ NET_ERROR_GETCFG_MACFILTER(393, "获取MAC过滤配置失败"),
+ NET_ERROR_SETCFG_MACFILTER(394, "设置MAC过滤配置失败"),
+ NET_ERROR_GETCFG_IPMACFILTER(395, "获取IP/MAC过滤配置失败"),
+ NET_ERROR_SETCFG_IPMACFILTER(396, "设置IP/MAC过滤配置失败"),
+ NET_ERROR_OPERATION_OVERTIME(397, "当前操作超时"),
+ NET_ERROR_SENIOR_VALIDATE_FAILED(398, "高级校验失败"),
+ NET_ERROR_DEVICE_ID_NOT_EXIST(399, "设备ID不存在"),
+ NET_ERROR_UNSUPPORTED(400, "不支持当前操作"),
+ NET_ERROR_PROXY_DLLLOAD(401, "代理库加载失败"),
+ NET_ERROR_PROXY_ILLEGAL_PARAM(402, "代理用户参数不合法"),
+ NET_ERROR_PROXY_INVALID_HANDLE(403, "代理句柄无效"),
+ NET_ERROR_PROXY_LOGIN_DEVICE_ERROR(404, "代理登入前端设备失败"),
+ NET_ERROR_PROXY_START_SERVER_ERROR(405, "启动代理服务失败"),
+ NET_ERROR_SPEAK_FAILED(406, "请求喊话失败"),
+ NET_ERROR_NOT_SUPPORT_F6(407, "设备不支持此F6接口调用"),
+ NET_ERROR_CD_UNREADY(408, "光盘未就绪"),
+ NET_ERROR_DIR_NOT_EXIST(409, "目录不存在"),
+ NET_ERROR_UNSUPPORTED_SPLIT_MODE(410, "设备不支持的分割模式"),
+ NET_ERROR_OPEN_WND_PARAM(411, "开窗参数不合法"),
+ NET_ERROR_LIMITED_WND_COUNT(412, "开窗数量超过限制"),
+ NET_ERROR_UNMATCHED_REQUEST(413, "请求命令与当前模式不匹配"),
+
+ NET_RENDER_ENABLELARGEPICADJUSTMENT_ERROR(414, "Render库启用高清图像内部调整策略出错"),
+ NET_ERROR_UPGRADE_FAILED(415, "设备升级失败"),
+ NET_ERROR_NO_TARGET_DEVICE(416, "找不到目标设备"),
+ NET_ERROR_NO_VERIFY_DEVICE(417, "找不到验证设备"),
+ NET_ERROR_CASCADE_RIGHTLESS(418, "无级联权限"),
+ NET_ERROR_LOW_PRIORITY(419, "低优先级"),
+ NET_ERROR_REMOTE_REQUEST_TIMEOUT(420, "远程设备请求超时"),
+ NET_ERROR_LIMITED_INPUT_SOURCE(421, "输入源超出最大路数限制"),
+ NET_ERROR_SET_LOG_PRINT_INFO(422, "设置日志打印失败"),
+ NET_ERROR_PARAM_DWSIZE_ERROR(423, "入参的dwsize字段出错"),
+ NET_ERROR_LIMITED_MONITORWALL_COUNT(424, "电视墙数量超过上限"),
+ NET_ERROR_PART_PROCESS_FAILED(425, "部分过程执行失败"),
+ NET_ERROR_TARGET_NOT_SUPPORT(426, "该功能不支持转发"),
+ NET_ERROR_VISITE_FILE(510, "访问文件失败"),
+ NET_ERROR_DEVICE_STATUS_BUSY(511, "设备忙"),
+ NET_USER_PWD_NOT_AUTHORIZED(512, "修改密码无权限"),
+ NET_USER_PWD_NOT_STRONG(513, "密码强度不够"),
+ NET_ERROR_NO_SUCH_CONFIG(514, "没有对应的配置"),
+ NET_ERROR_AUDIO_RECORD_FAILED(515, "录音失败"),
+ NET_ERROR_SEND_DATA_FAILED(516, "数据发送失败"),
+ NET_ERROR_OBSOLESCENT_INTERFACE(517, "废弃接口"),
+ NET_ERROR_INSUFFICIENT_INTERAL_BUF(518, "内部缓冲不足"),
+ NET_ERROR_NEED_ENCRYPTION_PASSWORD(519, "修改设备ip时,需要校验密码"),
+ NET_ERROR_NOSUPPORT_RECORD(520, "设备不支持此记录集"),
+ NET_ERROR_SERIALIZE_ERROR(1010, "数据序列化错误"),
+ NET_ERROR_DESERIALIZE_ERROR(1011, "数据反序列化错误"),
+ NET_ERROR_LOWRATEWPAN_ID_EXISTED(1012, "该无线ID已存在"),
+ NET_ERROR_LOWRATEWPAN_ID_LIMIT(1013, "无线ID数量已超限"),
+ NET_ERROR_LOWRATEWPAN_ID_ABNORMAL(1014, "无线异常添加"),
+ NET_ERROR_ENCRYPT(1015, "加密数据失败"),
+ NET_ERROR_PWD_ILLEGAL(1016, "新密码不合规范"),
+ NET_ERROR_DEVICE_ALREADY_INIT(1017, "设备已经初始化"),
+ NET_ERROR_SECURITY_CODE(1018, "安全码错误"),
+ NET_ERROR_SECURITY_CODE_TIMEOUT(1019, "安全码超出有效期"),
+ NET_ERROR_GET_PWD_SPECI(1020, "获取密码规范失败"),
+ NET_ERROR_NO_AUTHORITY_OF_OPERATION(1021, "无权限进行该操作"),
+ NET_ERROR_DECRYPT(1022, "解密数据失败"),
+ NET_ERROR_2D_CODE(1023, "2D code校验失败"),
+ NET_ERROR_INVALID_REQUEST(1024, "非法的RPC请求"),
+ NET_ERROR_PWD_RESET_DISABLE(1025, "密码重置功能已关闭"),
+ NET_ERROR_PLAY_PRIVATE_DATA(1026, "显示私有数据,比如规则框等失败"),
+ NET_ERROR_ROBOT_OPERATE_FAILED(1027, "机器人操作失败"),
+ NET_ERROR_PHOTOSIZE_EXCEEDSLIMIT(1028, "图片大小超限"),
+ NET_ERROR_USERID_INVALID(1029, "用户ID不存在"),
+ NET_ERROR_EXTRACTFEATURE_FAILED(1030, "照片特征值提取失败"),
+ NET_ERROR_PHOTO_EXIST(1031, "照片已存在"),
+ NET_ERROR_PHOTO_OVERFLOW(1032, "照片数量超过上限"),
+ NET_ERROR_CHANNEL_ALREADY_OPENED(1033, "通道已经打开"),
+ NET_ERROR_CREATE_SOCKET(1034, "创建套接字失败"),
+ NET_ERROR_CHANNEL_NUM(1035, "通道号错误"),
+ NET_ERROR_PHOTO_FORMAT(1036, "图片格式错误"),
+ /**
+ * 内部错误(比如:相关硬件问题,获取公钥失败,内部接口调用失败,写文件失败等等)
+ */
+ NET_ERROR_DIGITAL_CERTIFICATE_INTERNAL_ERROR(1037, "内部错误"),
+ /**
+ * 获取设备ID失败
+ */
+ NET_ERROR_DIGITAL_CERTIFICATE_GET_ID_FAILED(1038, "获取设备ID失败"),
+ NET_ERROR_DIGITAL_CERTIFICATE_IMPORT_ILLEGAL(1039, "证书文件非法(格式不支持或者不是证书文件)"),
+ NET_ERROR_DIGITAL_CERTIFICATE_SN_ERROR(1040, "证书sn重复或错误或不规范"),
+ /**
+ * (本地设备证书与系统中的不匹配devid_cryptoID,或者对端的不符合规则(devid_crytoID))
+ */
+ NET_ERROR_DIGITAL_CERTIFICATE_COMMON_NAME_ILLEGAL(1041, "证书commonName非法"),
+ NET_ERROR_DIGITAL_CERTIFICATE_NO_ROOT_CERT(1042, "根证书未导入或不存在"),
+ NET_ERROR_DIGITAL_CERTIFICATE_CERT_REVOKED(1043, "证书被吊销"),
+ NET_ERROR_DIGITAL_CERTIFICATE_CERT_INVALID(1044, "证书不可用或未生效或已过期"),
+ NET_ERROR_DIGITAL_CERTIFICATE_CERT_ERROR_SIGN(1045, "证书签名不匹配"),
+ NET_ERROR_DIGITAL_CERTIFICATE_COUNTS_UPPER_LIMIT(1046, "超出证书导入上限"),
+ NET_ERROR_DIGITAL_CERTIFICATE_CERT_NO_EXIST(1047, "证书文件不存在(导出证书或者获取对应证书的公钥)"),
+ NET_ERROR_DEFULAT_SEARCH_PORT(1048, "默认搜索端口无法使用(5050,37810)"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_MULTI_APPEND_STOUP(1049, "批量添加人脸停止"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_MULTI_APPEND_ERROR(1050, "批量添加人脸失败"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_ID_EXCEED(1051, "组ID超过最大值"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_ID_NOT_IN_REGISTER_GROUP(1052, "组ID不存在或为空"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_PICTURE_NOT_FOUND(1053, "无图片数据"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_GENERATE_GROUP_ID_FAILED(1054, "生成组ID超出范围"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_SET_CONFIG_FAILED(1055, "设置配置失败"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_FILE_OPEN_FAILED(1056, "图片文件打开失败"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_FILE_READ_FAILED(1057, "图片文件读取失败"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_FILE_WRITE_FAILED(1058, "图片文件写入失败"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_PICTURE_DPI_ERROR(1059, "图片分辨率异常"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_PICTURE_PX_ERROR(1060, "图片像素异常"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_PICTURE_SIZE_ERROR(1061, "图片大小不对"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_DATA_BASE_ERROR(1062, "数据库操作失败"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_FACE_MAX_NUM(1063, "人员数量超过限制"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_BIRTH_DAY_FORMAT_ERROR(1064, "生日日期格式错误"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_UID_ERROR(1065, "人员UID不存在或为空"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_TOKEN_ERROR(1066, "令牌不存在或为空"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_BEGIN_NUM_OVER_RUN(1067, "查询起始数大于总数"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_ABSTRACT_NUM_ZERO(1068, "需手动建模人数为0"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_ABSTRACT_INIT_ERROR(1069, "建模分析器启动失败"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_AUTO_ABSTRACT_STATE(1070, "设备正在自动建模"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_ABSTRACT_STATE(1071, "设备正在手动建模"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_IM_EX_STATE(1072, "设备正在导入导出"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_PIC_WRITE_FAILED(1073, "图片写入失败"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_SPACE_EXCEED(1074, "超出人脸库空间大小限制"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_PIC_COUNT_EXCEED(1075, "超出人脸库图片数量限制"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_GROUP_NOT_FOUND(1076, "人脸库不存在"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_FIND_RECORDS_ERROR(1077, "查询原人脸库数据结果无效"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_DELETE_PERSON_ERROR(1078, "删除原人脸库数据失败"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_DELETE_GROUP_ERROR(1079, "删除人脸库失败"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_NAME_FORMAT_ERROR(1080, "命名格式错误"),
+ NET_ERROR_FACE_RECOGNITION_SERVER_FILEPATH_NOT_SET(1081, "图片保存路径未设置"),
+ NET_ERROR_DEVICE_PARSE_PROTOCOL(1079, "设备解析协议错误"),
+ NET_ERROR_DEVICE_INVALID_REQUEST(1080, "设备返回无效请求"),
+ NET_ERROR_DEVICE_INTERNAL_ERROR(1081, "设备内部错误"),
+ NET_ERROR_DEVICE_REQUEST_TIMEOUT(1082, "设备内部请求超时"),
+ NET_ERROR_DEVICE_KEEPALIVE_FAIL(1083, "设备保活失败"),
+ NET_ERROR_DEVICE_NETWORK_ERROR(1084, "设备网络错误"),
+ NET_ERROR_DEVICE_UNKNOWN_ERROR(1085, "设备内部未知错误"),
+ NET_ERROR_DEVICE_COM_INTERFACE_NOTFOUND(1086, "设备组件接口没有找到"),
+ NET_ERROR_DEVICE_COM_IMPLEMENT_NOTFOUND(1087, "设备组件实现没有找到"),
+ NET_ERROR_DEVICE_COM_NOTFOUND(1088, "设备接入组件没有找到"),
+ NET_ERROR_DEVICE_COM_INSTANCE_NOTEXIST(1089, "设备接入组件实例不存在"),
+ NET_ERROR_DEVICE_CREATE_COM_FAIL(1090, "设备组件工厂创建组件失败"),
+ NET_ERROR_DEVICE_GET_COM_FAIL(1091, "设备组件工厂获取组件实例失败"),
+ NET_ERROR_DEVICE_BAD_REQUEST(1092, "设备业务请求不被接受"),
+ NET_ERROR_DEVICE_REQUEST_IN_PROGRESS(1093, "设备已经在处理请求,不接受重复请求"),
+ NET_ERROR_DEVICE_LIMITED_RESOURCE(1094, "设备资源不足"),
+ NET_ERROR_DEVICE_BUSINESS_TIMEOUT(1095, "设备业务超时"),
+ NET_ERROR_DEVICE_TOO_MANY_REQUESTS(1096, "设备接收过多请求"),
+ NET_ERROR_DEVICE_NOT_ALREADY(1097, "设备未准备就绪,不接受业务请求"),
+ NET_ERROR_DEVICE_SEARCHRECORD_TIMEOUT(1098, "设备录像查询超时"),
+ NET_ERROR_DEVICE_SEARCHTIME_INVALID(1099, "设备录像查询时间无效"),
+ NET_ERROR_DEVICE_SSID_INVALID(1100, "设备校验SSID无效"),
+ NET_ERROR_DEVICE_CHANNEL_STREAMTYPE_ERROR(1101, "设备校验通道号或码流类型无效"),
+ NET_ERROR_DEVICE_STREAM_PACKINGFORMAT_UNSUPPORT(1102, "设备不支持该码流打包格式"),
+ NET_ERROR_DEVICE_AUDIO_ENCODINGFORMAT_UNSUPPORT(1103, "设备不支持该语音编码格式"),
+ NET_ERROR_SECURITY_ERROR_SUPPORT_GUI(1104, " 校验请求安全码失败,可使用本地GUI方式重置密码"),
+ NET_ERROR_SECURITY_ERROR_SUPPORT_MULT(1105, "校验请求安全码失败,可使用DH渠道APP、configtool工具重置密码"),
+ NET_ERROR_SECURITY_ERROR_SUPPORT_UNIQUE(1106, "校验请求安全码失败,可登陆Web页面重置密码"),
+ NET_ERROR_STREAMCONVERTOR_DEFECT(1107, "转码库缺失"),
+
+
+ NET_ERROR_SECURITY_GENERATE_SAFE_CODE(1108, "调用DH加密库产生安全码失败"),
+ NET_ERROR_SECURITY_GET_CONTACT(1109, "获取联系方式失败"),
+ NET_ERROR_SECURITY_GET_QRCODE(1110, "获取重置密码的二维码信息失败"),
+ NET_ERROR_SECURITY_CANNOT_RESET(1111, "设备未初始化,无法重置"),
+ NET_ERROR_SECURITY_NOT_SUPPORT_CONTACT_MODE(1112, "不支持设置该种联系方式,如只支持设置手机号,却请求设置邮箱"),
+ NET_ERROR_SECURITY_RESPONSE_TIMEOUT(1113, "对端响应超时"),
+ NET_ERROR_SECURITY_AUTHCODE_FORBIDDEN(1114, "尝试校验AuthCode次数过多,禁止校验"),
+ NET_ERROR_TRANCODE_LOGIN_REMOTE_DEV(1115, "(虚拟转码)登陆远程设备失败"),
+ NET_ERROR_TRANCODE_NOFREE_CHANNEL(1116, "(虚拟转码)没有可用的通道资源"),
+ NET_ERROR_VK_INFO_DECRYPT_FAILED(1117, "VK信息解密失败"),
+ NET_ERROR_VK_INFO_DESERIALIZE_FAILED(1118, "VK信息解析失败"),
+ NET_ERROR_GDPR_ABILITY_NOT_ENABLE(1119, "SDK GDPR功能未使能"),
+
+ /*门禁快速导入及复核错误码 start*/
+ NET_ERROR_FAST_CHECK_NO_AUTH(1120, "门禁快速复核:无权限"),
+ NET_ERROR_FAST_CHECK_NO_FILE(1121, "门禁快速复核:文件不存在"),
+ NET_ERROR_FAST_CHECK_FILE_FAIL(1122, "门禁快速复核:文件准备失败"),
+ NET_ERROR_FAST_CHECK_BUSY(1123, "门禁快速复核:系统忙"),
+ NET_ERROR_FAST_CHECK_NO_PASSWORD(1124, "门禁快速复核:未定义密码, 不允许导出"),
+ NET_ERROR_IMPORT_ACCESS_SEND_FAILD(1125, "门禁快速导入:发送门禁数据失败"),
+ NET_ERROR_IMPORT_ACCESS_BUSY(1126, "门禁快速导入:系统忙, 已经有导入任务"),
+ NET_ERROR_IMPORT_ACCESS_DATAERROR(1127, "门禁快速导入:数据包检验失败"),
+ NET_ERROR_IMPORT_ACCESS_DATAINVALID(1128, "门禁快速导入:数据包非法"),
+ NET_ERROR_IMPORT_ACCESS_SYNC_FALID(1129, "门禁快速导入:同步失败,数据库无法生成"),
+ NET_ERROR_IMPORT_ACCESS_DBFULL(1130, "门禁快速导入:数据库已满, 无法导入"),
+ NET_ERROR_IMPORT_ACCESS_SDFULL(1131, "门禁快速导入:存储空间已满, 无法导入"),
+ NET_ERROR_IMPORT_ACCESS_CIPHER_ERROR(1132, "门禁快速导入:导入压缩包密码不对"),
+ /*门禁快速导入及复核错误码 end*/
+
+ NET_ERROR_INVALID_PARAM(1133, "参数无效"),
+ NET_ERROR_INVALID_PASSWORD(1134, "密码无效"),
+ NET_ERROR_INVALID_FINGERPRINT(1135, "信息无效"),
+ NET_ERROR_INVALID_FACE(1136, "人脸无效"),
+ NET_ERROR_INVALID_CARD(1137, "卡无效"),
+ NET_ERROR_INVALID_USER(1138, "用户无效"),
+ NET_ERROR_GET_SUBSERVICE(1139, "能力集子服务获取失败"),
+ NET_ERROR_GET_METHOD(1140, "获取组件的方法集失败"),
+ NET_ERROR_GET_SUBCAPS(1141, "获取资源实体能力集失败"),
+ NET_ERROR_UPTO_INSERT_LIMIT(1142, "已达插入上限"),
+ NET_ERROR_UPTO_MAX_INSERT_RATE(1143, "已达最大插入速度"),
+ NET_ERROR_ERASE_FINGERPRINT(1144, "清除信息数据失败"),
+ NET_ERROR_ERASE_FACE(1145, "清除人脸数据失败"),
+ NET_ERROR_ERASE_CARD(1146, "清除卡数据失败"),
+ NET_ERROR_NO_RECORD(1147, "没有记录"),
+ NET_ERROR_NOMORE_RECORDS(1148, "查找到最后,没有更多记录"),
+ NET_ERROR_RECORD_ALREADY_EXISTS(1149, "下发卡或信息时,数据重复"),
+ NET_ERROR_EXCEED_MAX_FINGERPRINT_PERUSER(1150, "超过个人最大信息记录数"),
+ NET_ERROR_EXCEED_MAX_CARD_PERUSER(1151, "超过个人最大卡片记录数"),
+ NET_ERROR_EXCEED_ADMINISTRATOR_LIMIT(1152, "超过门禁管理员个数限制"),
+
+ NET_LOGIN_ERROR_DEVICE_NOT_SUPPORT_HIGHLEVEL_SECURITY_LOGIN(1153, "设备不支持高安全等级登录"),
+ NET_LOGIN_ERROR_DEVICE_ONLY_SUPPORT_HIGHLEVEL_SECURITY_LOGIN(1154, "设备只支持高安全等级登录"),
+
+ NET_ERROR_VIDEO_CHANNEL_OFFLINE(1155, "此视频通道处于离线,拉流失败"),
+ NET_ERROR_USERID_FORMAT_INCORRECT(1156, "用户编号不规范"),
+ NET_ERROR_CANNOT_FIND_CHANNEL_RELATE_TO_SN(1157, "找不到该SN对应的通道"),
+ NET_ERROR_TASK_QUEUE_OF_CHANNEL_IS_FULL(1158, "该通道的任务队列满"),
+ NET_ERROR_APPLY_USER_INFO_BLOCK_FAIL(1159, "申请不到新的用户信息(权限)块"),
+ NET_ERROR_EXCEED_MAX_PASSWD_PERUSER(1160, "用户密码数量超过限制"),
+ NET_ERROR_PARSE_PROTOCOL(1161, "设备内部异常引起协议解析错误"),
+ NET_ERROR_CARD_NUM_EXIST(1162, "卡号已存在"),
+ NET_ERROR_FINGERPRINT_EXIST(1163, "信息已存在"),
+
+ NET_ERROR_OPEN_PLAYGROUP_FAIL(1164, "打开播放组失败"),
+ NET_ERROR_ALREADY_IN_PLAYGROUP(1165, "已位于播放组中"),
+ NET_ERROR_QUERY_PLAYGROUP_TIME_FAIL(1166, "查询播放组时间失败"),
+ NET_ERROR_SET_PLAYGROUP_BASECHANNEL_FAIL(1167, "设置播放组基准通道失败"),
+ NET_ERROR_SET_PLAYGROUP_DIRECTION_FAIL(1168, "设置播放组方向失败"),
+ NET_ERROR_SET_PLAYGROUP_SPEED_FAIL(1169, "设置播放组速度失败"),
+ NET_ERROR_ADD_PLAYGROUP_FAIL(1170, "加入播放组失败"),
+
+ NET_ERROR_EXPORT_AOL_LOGFILE_NO_AUTH(1171, " 导出AOL日志:无权限"),
+ NET_ERROR_EXPORT_AOL_LOGFILE_NO_FILE(1172, "导出AOL日志:文件不存在"),
+ NET_ERROR_EXPORT_AOL_LOGFILE_FILE_FAIL(1173, "导出AOL日志:文件准备失败"),
+ NET_ERROR_EXPORT_AOL_LOGFILE_BUSY(1174, "导出AOL日志:系统忙"),
+
+ /**
+ * 设备上APP安装相关错误码
+ */
+ NET_ERROR_EMPTY_LICENSE(1175, "License为空"),
+ NET_ERROR_UNSUPPORTED_MODE(1176, "不支持该模式"),
+ NET_ERROR_URL_APP_NOT_MATCH(1177, "URL与APP不匹配"),
+ NET_ERROR_READ_INFO_FAILED(1178, "读取信息失败"),
+ NET_ERROR_WRITE_FAILED(1179, "写入失败"),
+ NET_ERROR_NO_SUCH_APP(1180, "未找到APP"),
+ NET_ERROR_VERIFIF_FAILED(1181, "校验失败"),
+ NET_ERROR_LICENSE_OUT_DATE(1182, "License已过期"),
+
+ NET_ERROR_UPGRADE_PROGRAM_TOO_OLD(1183, "升级程序版本过低"),
+ NET_ERROR_SECURE_TRANSMIT_BEEN_CUT(1184, "加密传输被裁剪"),
+ NET_ERROR_DEVICE_NOT_SUPPORT_SECURE_TRANSMIT(1185, "设备不支持安全传输"),
+
+ NET_ERROR_EXTRA_STREAM_LOGIN_FAIL_CAUSE_BY_MAIN_STREAM(1186, "主码流成功的情况下,辅码流登录失败"),
+ NET_ERROR_EXTRA_STREAM_CLOSED_BY_REMOTE_DEVICE(1187, "辅码流被前端关闭"),
+
+ /*人脸库导入导出错误码 start*/
+ NET_ERROR_IMPORT_FACEDB_SEND_FAILD(1188, "人脸库导入:发送人脸库数据失败"),
+ NET_ERROR_IMPORT_FACEDB_BUSY(1189, "人脸库导入:系统忙, 已经有导入任务"),
+ NET_ERROR_IMPORT_FACEDB_DATAERROR(1190, "人脸库导入:数据包检验失败"),
+ NET_ERROR_IMPORT_FACEDB_DATAINVALID(1191, "人脸库导入:数据包非法"),
+ NET_ERROR_IMPORT_FACEDB_UPGRADE_FAILD(1192, "人脸库导入:上传失败"),
+ NET_ERROR_IMPORT_FACEDB_NO_AUTHORITY(1193, "人脸库导入:用户无权限"),
+ NET_ERROR_IMPORT_FACEDB_ABNORMAL_FILE(1194, " 人脸库导入:文件格式异常"),
+ NET_ERROR_IMPORT_FACEDB_SYNC_FALID(1195, "人脸库导入:同步失败,数据库无法生成"),
+ NET_ERROR_IMPORT_FACEDB_DBFULL(1196, "人脸库导入:数据库已满, 无法导入"),
+ NET_ERROR_IMPORT_FACEDB_SDFULL(1197, "人脸库导入:存储空间已满, 无法导入"),
+ NET_ERROR_IMPORT_FACEDB_CIPHER_ERROR(1198, "人脸库导入:导入压缩包密码不对"),
+
+ NET_ERROR_EXPORT_FACEDB_NO_AUTH(1199, "人脸库导出:无权限"),
+ NET_ERROR_EXPORT_FACEDB_NO_FILE(1200, "人脸库导出:文件不存在"),
+ NET_ERROR_EXPORT_FACEDB_FILE_FAIL(1201, "人脸库导出:文件准备失败"),
+ NET_ERROR_EXPORT_FACEDB_BUSY(1202, "人脸库导出:系统忙"),
+ NET_ERROR_EXPORT_FACEDB_NO_PASSWORD(1203, "人脸库导出:未定义密码, 不允许导出"),
+ /*人脸库导入导出错误码 end*/
+
+ /* 人脸图片操作错误码 范围 _EC(1300) ~ _EC(1400) */
+ NET_ERROR_FACEMANAGER_NO_FACE_DETECTED(1300, "图片中检测到0个人脸目标"),
+ NET_ERROR_FACEMANAGER_MULTI_FACE_DETECTED(1301, "图片中检测到多个人脸,无法返回特征"),
+ NET_ERROR_FACEMANAGER_PICTURE_DECODING_ERROR(1302, "图片解码错误"),
+ NET_ERROR_FACEMANAGER_LOW_PICTURE_QUALITY(1303, "图片质量太低"),
+ /**
+ * 结果不推荐使用,比如:对外国人,特征提取成功,但算法支持不好,容易造成误识别
+ */
+ NET_ERROR_FACEMANAGER_NOT_RECOMMENDED(1304, "结果不推荐使用"),
+ NET_ERROR_FACEMANAGER_FACE_FEATURE_ALREADY_EXIST(1305, "人脸特征已存在"),
+ NET_ERROR_FACEMANAGER_FACE_ANGLE_OVER_THRESHOLDS(1307, "人脸角度超过配置阈值"),
+ NET_ERROR_FACEMANAGER_FACE_RADIO_EXCEEDS_RANGE(1308, "人脸占比超出范围,算法建议占比:不要超过2/3,不要小于1/3"),
+ NET_ERROR_FACEMANAGER_FACE_OVER_EXPOSED(1309, "人脸过爆"),
+ NET_ERROR_FACEMANAGER_FACE_UNDER_EXPOSED(1310, "人脸欠爆"),
+ NET_ERROR_FACEMANAGER_BRIGHTNESS_IMBALANCE(1311, "人脸亮度不均衡 ,用于判断阴阳脸"),
+ NET_ERROR_FACEMANAGER_FACE_LOWER_CONFIDENCE(1312, "人脸的置信度低"),
+ NET_ERROR_FACEMANAGER_FACE_LOW_ALIGN(1313, "人脸对齐分数低"),
+ NET_ERROR_FACEMANAGER_FRAGMENTARY_FACE_DETECTED(1314, "人脸存在遮挡、残缺不全"),
+ NET_ERROR_FACEMANAGER_PUPIL_DISTANCE_NOT_ENOUGH(1315, "人脸瞳距小于阈值"),
+ NET_ERROR_FACEMANAGER_FACE_DATA_DOWNLOAD_FAILED(1316, " 人脸数据下载失败");
+
+ private final int code;
+ private final String error;
+
+ private ENUMERROR(int code, String error) {
+ this.code = code;
+ this.error = error;
+ }
+
+ public int getCode() {
+ return code;
+ }
+
+ public String getError() {
+ return error;
+ }
+
+ public static ENUMERROR getENUMError() {
+ int code = NetSDKLib.NETSDK_INSTANCE.CLIENT_GetLastError() & 0x7fffffff;
+ for (ENUMERROR error : ENUMERROR.values()) {
+ if (error.getCode() == code) {
+ return error;
+ }
+ }
+ return NET_UNDEFIND;
+ }
+
+ /**
+ * 错误信息
+ */
+ public static String getErrorMessage() {
+ return getENUMError().getError();
+ }
+
+ /**
+ * 错误码
+ */
+ public static int getErrorCode() {
+ return getENUMError().getCode();
+ }
+
+ /**
+ * 错误码+错误信息
+ */
+ public static String getFullError() {
+ ENUMERROR error = getENUMError();
+ return error.getCode() + "," + error.getError();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/ENUM_IN_REGION_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/ENUM_IN_REGION_STATUS.java
new file mode 100644
index 0000000..6ed6026
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/ENUM_IN_REGION_STATUS.java
@@ -0,0 +1,51 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 区域内状态
+ * @date 2022/03/31
+ */
+public enum ENUM_IN_REGION_STATUS {
+ // 未知
+ ENUM_IN_REGION_STATUS_UNKNOWN(0, "未知"),
+
+ // 在区域内
+ ENUM_IN_REGION_STATUS_YES(1, "在区域内"),
+
+ // 不在区域内
+ ENUM_IN_REGION_STATUS_NO(2, "不在区域内");
+
+ private int value;
+ private String note;
+
+ private ENUM_IN_REGION_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (ENUM_IN_REGION_STATUS enumType : ENUM_IN_REGION_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (ENUM_IN_REGION_STATUS enumType : ENUM_IN_REGION_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/ENUM_MOTION_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/ENUM_MOTION_STATUS.java
new file mode 100644
index 0000000..831e2c1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/ENUM_MOTION_STATUS.java
@@ -0,0 +1,51 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 运动状态
+ * @date 2022/03/31
+ */
+public enum ENUM_MOTION_STATUS {
+ // 未知
+ ENUM_MOTION_STATUS_UNKNOWN(0, "未知"),
+
+ // 静止
+ ENUM_MOTION_STATUS_STATIC(1, "静止"),
+
+ // 运动
+ ENUM_MOTION_STATUS_MOVE(2, "运动");
+
+ private int value;
+ private String note;
+
+ private ENUM_MOTION_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (ENUM_MOTION_STATUS enumType : ENUM_MOTION_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (ENUM_MOTION_STATUS enumType : ENUM_MOTION_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/ENUM_RECORDBACKUP_FILE_PROGRESS_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/ENUM_RECORDBACKUP_FILE_PROGRESS_TYPE.java
new file mode 100644
index 0000000..e95cc3c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/ENUM_RECORDBACKUP_FILE_PROGRESS_TYPE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 最后传递成功的数据包类型
+ * @date 2021/11/07
+ */
+public enum ENUM_RECORDBACKUP_FILE_PROGRESS_TYPE {
+ // 未知
+ ENUM_RECORDBACKUP_FILE_PROGRESS_UNKNOWN(0, "未知"),
+
+ // 文件头包
+ ENUM_RECORDBACKUP_FILE_PROGRESS_HEADER_PACKAGE(1, "文件头包"),
+
+ // 索引包
+ ENUM_RECORDBACKUP_FILE_PROGRESS_INDEX_PACKAGE(2, "索引包"),
+ // 码流包
+ ENUM_RECORDBACKUP_FILE_PROGRESS_STREAM_PACKET(3, "码流包"),
+
+ // 文件尾空包
+ ENUM_RECORDBACKUP_FILE_PROGRESS_EMPTY_PACKET(4, "文件尾空包");
+
+ private int value;
+ private String note;
+
+ private ENUM_RECORDBACKUP_FILE_PROGRESS_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (ENUM_RECORDBACKUP_FILE_PROGRESS_TYPE enumType : ENUM_RECORDBACKUP_FILE_PROGRESS_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (ENUM_RECORDBACKUP_FILE_PROGRESS_TYPE enumType : ENUM_RECORDBACKUP_FILE_PROGRESS_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/ENUM_RECORDBACKUP_FILE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/ENUM_RECORDBACKUP_FILE_TYPE.java
new file mode 100644
index 0000000..eff0c3b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/ENUM_RECORDBACKUP_FILE_TYPE.java
@@ -0,0 +1,57 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 远程录像备份录像类型
+ *
+ * @author 47040
+ * @since Created at 2021/5/27 20:25
+ */
+public enum ENUM_RECORDBACKUP_FILE_TYPE {
+
+ ENUM_RECORDBACKUP_FILE_COMMON(0, "普通录像"),
+ ENUM_RECORDBACKUP_FILE_ALARM(1, "报警录像"),
+ ENUM_RECORDBACKUP_FILE_MOTIONDETECT(2, "动检录像");
+
+ private final int value;
+ private final String note;
+
+ ENUM_RECORDBACKUP_FILE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (ENUM_RECORDBACKUP_FILE_TYPE enumType : ENUM_RECORDBACKUP_FILE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (ENUM_RECORDBACKUP_FILE_TYPE enumType : ENUM_RECORDBACKUP_FILE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static ENUM_RECORDBACKUP_FILE_TYPE getEnum(int value) {
+ for (ENUM_RECORDBACKUP_FILE_TYPE e : ENUM_RECORDBACKUP_FILE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return ENUM_RECORDBACKUP_FILE_TYPE.ENUM_RECORDBACKUP_FILE_COMMON;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/ENUM_VAGEOBJECT_ACTION.java b/src/main/java/com/netsdk/lib/enumeration/ENUM_VAGEOBJECT_ACTION.java
new file mode 100644
index 0000000..f0cb9fd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/ENUM_VAGEOBJECT_ACTION.java
@@ -0,0 +1,61 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 物体动作支持类型
+ * @date 2021/10/09
+ */
+public enum ENUM_VAGEOBJECT_ACTION {
+ // 未知类型
+ ENUM_VAGEOBJECT_ACTION_UNKNOWN(0, "未知类型"),
+ // 第一次出现在检测区域中,或者跟踪时物理分离动作中尚未确认的新物体
+ ENUM_VAGEOBJECT_ACTION_APPEAR(1, "第一次出现在检测区域中,或者跟踪时物理分离动作中尚未确认的新物体"),
+ // 正在运动,物体被正常跟踪
+ ENUM_VAGEOBJECT_ACTION_MOVE(2, "正在运动,物体被正常跟踪"),
+ // 物体停止运动,这个物体不会在出现在下一帧物体列表中,物体开始移动后再恢复在列表中
+ ENUM_VAGEOBJECT_ACTION_STAY(3, "物体停止运动,这个物体不会在出现在下一帧物体列表中,物体开始移动后再恢复在列表中"),
+ // 物体从原来的区域移除,或者被遮盖,或者跟踪失败,移除的物体ID不会被自动删除,并且物体重现出现是有可能再次被使用
+ ENUM_VAGEOBJECT_ACTION_REMOVE(4, "物体从原来的区域移除,或者被遮盖,或者跟踪失败,移除的物体ID不会被自动删除,并且物体重现出现是有可能再次被使用"),
+ // 运动到跟踪区域之外,或者达到了算法跟踪物体的上限而被清除,消失的物体ID将不再出现
+ ENUM_VAGEOBJECT_ACTION_DISAPPEAR(5, "运动到跟踪区域之外,或者达到了算法跟踪物体的上限而被清除,消失的物体ID将不再出现"),
+ // 从其他物体中分离出来,可以用来检测物体遗留,关联ID表示从这个ID对应物体分离
+ ENUM_VAGEOBJECT_ACTION_SPLIT(6, "从其他物体中分离出来,可以用来检测物体遗留,关联ID表示从这个ID对应物体分离"),
+ // 合并到其他物体,可以用来检查物体保全,关联ID表示合并到这个ID对相应的物体
+ ENUM_VAGEOBJECT_ACTION_MERGE(7, "合并到其他物体,可以用来检查物体保全,关联ID表示合并到这个ID对相应的物体"),
+ // 如果算法无法确定分离动作中某个物体是原先同一个物体,应该创建先一个新的物体,证据充分后再重命名为旧的物体ID,关联ID表示暂时使用的新的ID
+ ENUM_VAGEOBJECT_ACTION_RENAME(8, "如果算法无法确定分离动作中某个物体是原先同一个物体,应该创建先一个新的物体,证据充分后再重命名为旧的物体ID,关联ID表示暂时使用的新的ID");
+
+ private int value;
+ private String note;
+
+ private ENUM_VAGEOBJECT_ACTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (ENUM_VAGEOBJECT_ACTION enumType : ENUM_VAGEOBJECT_ACTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (ENUM_VAGEOBJECT_ACTION enumType : ENUM_VAGEOBJECT_ACTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/GetDevCaps_Type.java b/src/main/java/com/netsdk/lib/enumeration/GetDevCaps_Type.java
new file mode 100644
index 0000000..7708fb9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/GetDevCaps_Type.java
@@ -0,0 +1,196 @@
+package com.netsdk.lib.enumeration;
+/**
+ * @author 47081
+ * @desc
+ * @version 1.0.0
+ * @date 2021/4/12
+ */
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.structure.NET_IN_VIDEOIN_DAYNIGHT_CAPS;
+import com.netsdk.lib.structure.NET_OUT_VIDEOIN_DAYNIGHT_CAPS;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 47081
+ * @description 设备能力类型,对应 {@link NetSDKLib#CLIENT_GetDevCaps(NetSDKLib.LLong, int, Pointer, Pointer,
+ * int)}的nType参数 {@see}注解为暂未实现的封装 {@link}注解对应已有实现封装
+ * @date 2021/4/12
+ * @version 1.0
+ */
+public enum GetDevCaps_Type {
+ /** 电源时序器能力,pInBuf对应{@see NET_IN_CAP_SEQPOWER}, pOutBuf对应{@see NET_OUT_CAP_SEQPOWER} */
+ NET_DEV_CAP_SEQPOWER(0x01, "电源时序器能力"),
+ /** pInBuf对应NET_IN_ENCODE_CFG_CAPS pOutBuf对应 NET_OUT_ENCODE_CFG_CAPS */
+ NET_ENCODE_CFG_CAPS(0x02, "设备编码配置对应能力"),
+ /** pInBuf=NET_IN_VIDEOIN_FISHEYE_CAPS, pOutBuf=NET_OUT_VIDEOIN_FISHEYE_CAPS* */
+ NET_VIDEOIN_FISHEYE_CAPS(0x03, "鱼眼能力"),
+ /** pInBuf=NET_IN_COMPOSITE_CAPS, pOutBuf=NET_OUT_COMPOSITE_CAPS */
+ NET_COMPOSITE_CAPS(0x04, "根据指定的窗口号预先获取融合后的能力集"),
+ /** pInBuf=NET_IN_VIDEO_DETECT_CAPS, pOutBuf=NET_OUT_VIDEO_DETECT_CAPS */
+ NET_VIDEO_DETECT_CAPS(0x05, "获取视频检测输入能力集"),
+ /**
+ * pInBuf对应{@link NetSDKLib.NET_IN_THERMO_GETCAPS}, pOutBuf对应{@link
+ * NetSDKLib.NET_OUT_THERMO_GETCAPS}
+ */
+ NET_THERMO_GRAPHY_CAPS(0x06, "热成像摄像头属性能力"),
+ /**
+ * pInBuf对应{@link NetSDKLib.NET_IN_RADIOMETRY_GETCAPS}, pOutBuf对应{@link
+ * NetSDKLib.NET_OUT_RADIOMETRY_GETCAPS}
+ */
+ NET_RADIOMETRY_CAPS(0x07, "热成像测温全局配置能力"),
+ /** pInBuf = NET_IN_POS_GETCAPS,pOutBuf = NET_OUT_POS_GETCAPS */
+ NET_POS_CAPS(0x08, "POS机能力"),
+ /** pInBuf = NET_IN_USER_MNG_GETCAPS, pOutBuf = NET_OUT_USER_MNG_GETCAPS */
+ NET_USER_MNG_CAPS(0x09, "用户管理能力"),
+ /** pInBuf=NET_IN_MEDIAMANAGER_GETCAPS,pOutBuf=NET_OUT_MEDIAMANAGER_GETCAPS */
+ NET_MEDIAMANAGER_CAPS(0x0a, "获取 VideoInput 的各个能力项"),
+ /** pInBuf=NET_IN_MEDIA_VIDEOMOSAIC_GETCAPS,pOutBuf=NET_OUT_MEDIA_VIDEOMOSAIC_GETCAPS */
+ NET_VIDEO_MOSAIC_CAPS(0x0b, "获取通道马赛克叠加能力"),
+ /** pInBuf=NET_IN_SNAP_CFG_CAPS, pOutBuf= NET_OUT_SNAP_CFG_CAPS */
+ NET_SNAP_CFG_CAPS(0x0c, "设备抓图配置对应能力"),
+ /** pInBUf = NET_IN_VIDEOIN_CAPS, pOutBuf = NET_OUT_VIDEOIN_CAPS */
+ NET_VIDEOIN_CAPS(0x0d, "设备视频输出能力"),
+ /** pInBuf = NET_IN_FACEBOARD_CAPS, pOutBuf = NET_OUT_FACEBOARD_CAPS */
+ NET_FACE_BOARD_CAPS(0x0e, "面板设备能力集"),
+ /** pInBuf = NET_IN_EXTERNALSENSOR_CAPS, pOutBuf =NET_OUT_EXTERNALSENSOR_CAPS */
+ NET_EXTERNALSENSOR_CAPS(0x0f, "外部传感器管理能力集"),
+ /** pInBuf = NET_IN_VIDEO_IMAGECONTROL_CAPS, pOutBuf =NET_OUT_VIDEO_IMAGECONTROL_CAPS* */
+ NET_VIDEO_IMAGECONTROL_CAPS(0x10, "图像旋转设置能力"),
+ /** pInBuf = NET_IN_VIDEOIN_EXPOSURE_CAPS, pOutBuf = NET_OUT_VIDEOIN_EXPOSURE_CAPS */
+ NET_VIDEOIN_EXPOSURE_CAPS(0x11, "曝光设置能力"),
+ /** pInBuf = NET_IN_VIDEOIN_DENOISE_CAPS, pOutBuf = NET_OUT_VIDEOIN_DENOISE_CAPS */
+ NET_VIDEOIN_DENOISE_CAPS(0x12, "降噪能力"),
+ /** pInBuf = NET_IN_VIDEOIN_BACKLIGHT_CAPS, pOutBuf = NET_OUT_VIDEOIN_BACKLIGHT_CAPS */
+ NET_VIDEOIN_BACKLIGHT_CAPS(0x13, "背光设置能力"),
+ /** pInBuf = NET_IN_VIDEOIN_WHITEBALANCE_CAPS, pOutBuf = NET_OUT_VIDEOIN_WHITEBALANCE_CAPS */
+ NET_VIDEOIN_WHITEBALANCE_CAPS(0x14, "白平衡设置能力"),
+ /**
+ * pInBuf = {@link NET_IN_VIDEOIN_DAYNIGHT_CAPS}, pOutBuf = {@link NET_OUT_VIDEOIN_DAYNIGHT_CAPS}
+ */
+ NET_VIDEOIN_DAYNIGHT_CAPS(0x15, "球机机芯日夜设置能力"),
+ /** pInBuf = NET_IN_VIDEOIN_ZOOM_CAPS, pOutBuf = NET_OUT_VIDEOIN_ZOOM_CAPS */
+ NET_VIDEOIN_ZOOM_CAPS(0x16, "变倍设置能力"),
+ /** pInBuf = NET_IN_VIDEOIN_FOCUS_CAPS, pOutBuf = NET_OUT_VIDEOIN_FOCUS_CAPS */
+ NET_VIDEOIN_FOCUS_CAPS(0x17, "聚焦设置能力"),
+ /** pInBuf = NET_IN_VIDEOIN_SHARPNESS_CAPS, pOutBuf = NET_OUT_VIDEOIN_SHARPNESS_CAPS */
+ NET_VIDEOIN_SHARPNESS_CAPS(0x18, "锐度设置能力"),
+ /** pInBuf = NET_IN_VIDEOIN_COLOR_CAPS, pOutBuf = NET_OUT_VIDEOIN_COLOR_CAPS */
+ NET_VIDEOIN_COLOR_CAPS(0x19, "图像设置能力"),
+ /** pInBuf = NET_IN_GET_MASTERSLAVEGROUP_CAPS, pOutBuf = // NET_OUT_GET_MASTERSLAVEGROUP_CAPS */
+ NET_GET_MASTERSLAVEGROUP_CAPS(0x1a, "获取跟踪业务能力"),
+ /**
+ * pInBuf = NET_IN_FACERECOGNITIONSERVER_CAPSBILITYQUERY, pOutBuf =
+ * NET_OUT_FACERECOGNITIONSERVER_CAPSBILITYQUERY *
+ */
+ NET_FACERECOGNITIONSE_CAPS(0x1b, "目标识别服务器能力查询"),
+ /** pInBuf = NET_IN_STORAGE_CAPS, pOutBuf = NET_OUT_STORAGE_CAPS */
+ NET_STORAGE_CAPS(0x1c, "获取存储能力集"),
+ /** pInBuf = NET_IN_VIDEOIN_RAWFRAME_CAPS, pOutBuf = // NET_OUT_VIDEOIN_RAWFRAME_CAPS */
+ NET_VIDEOIN_RAWFRAME_CAPS(0x1d, "获取视频输入扩展能力集"),
+ /** pInBuf = NET_IN_GET_COAXIAL_CONTROL_IO_CAPS, pOutBuf = NET_OUT_GET_COAXIAL_CONTROL_IO_CAPS */
+ NET_COAXIAL_CONTROL_IO_CAPS(0x1e, "获取同轴IO控制能力"),
+ /** pInBuf = NET_IN_GET_FACEINFO_CAPS, pOutBuf = NET_OUT_GET_FACEINFO_CAPS */
+ NET_FACEINFO_CAPS(0x1f, "获得人脸门禁控制器能力集"),
+ /** pInBuf = NET_IN_AC_CAPS, pOutBuf = NET_OUT_AC_CAPS */
+ NET_ACCESSCONTROL_CAPS(0x20, "获取门禁能力"),
+ /**
+ * pInBuf = NET_IN_GET_COAXIAL_CONTROL_IO_STATUS, pOutBuf = NET_OUT_GET_COAXIAL_CONTROL_IO_STATUS*
+ */
+ NET_COAXIAL_CONTROL_IO_STATUS(0x21, "获取同轴IO白光灯和喇叭状态"),
+ /** pInBuf =NET_IN_LIGHTINGCONTROL_CAPS,pOutBuf=NET_OUT_LIGHTINGCONTROL_CAPS */
+ NET_LIGHTINGCONTROL_CAPS(0x22, "获取补光灯能力(IPC/SD使用)"),
+ /** pInBuf =NET_IN_SUPPORT_GET_AUDIO_DECODE_CAPS,pOutBuf=NET_OUT_SUPPORT_GET_AUDIO_DECODE_CAPS* */
+ NET_SUPPORT_GET_AUDIO_DECODE_CAPS(0x23, "获取设备是否支持音频解码能力获取"),
+ /** pInBuf = NET_IN_UNIFIEDINFOCOLLECT_CAPS, pOutBuf = NET_OUT_UNIFIEDINFOCOLLECT_CAPS */
+ NET_UNIFIEDINFOCOLLECT_CAPS(0x24, "获取设备是否支持DMSS专用协议能力"),
+ /** pInBuf = NET_IN_EXALARMBOX_CAPS, pOutBuf = NET_OUT_EXALARMBOX_CAPS */
+ NET_EXALARMBOX_CAPS(0x25, "获取某个扩展报警盒的能力集"),
+ /** pInBuf = NET_IN_ALARMBOXMANAGER_CAPS, pOutBuf = NET_OUT_ALARMBOXMANAGER_CAPS */
+ NET_ALARMBOXMANAGER_CAPS(0x26, "获取报警盒子管理器能力集"),
+ /** pInBuf = NET_IN_GET_AUDIO_DETECT_CAPS, pOutBuf = NET_OUT_GET_AUDIO_DETECT_CAPS */
+ NET_GET_AUDIO_DETECT_CAPS(0x27, "获取音频输入能力集"),
+ /**
+ * pInBuf = NET_IN_SUPPORT_FACEDB_DOWNLOAD_CAPS, pOutBuf = NET_OUT_SUPPORT_FACEDB_DOWNLOAD_CAPS
+ */
+ NET_SUPPORT_FACEDB_DOWNLOAD(0x28, "获取是否支持远程人脸库下载"),
+ /** pInBuf = NET_IN_GET_LENS_FUNC_CAPS, pOutBuf = NET_OUT_GET_LENS_FUNC_CAPS */
+ NET_GET_LENS_FUNC_CAPS(0x29, "获取角度调节能力集"),
+ /** pInBuf = NET_IN_VIDEO_TALK_MANAGER_CAPS, pOutBuf = NET_OUT_VIDEO_TALK_MANAGER_CAPS */
+ NET_VIDEO_TALK_MANAGER_CAPS(0x2a, "获取可视对讲能力"),
+ /** pInBuf = NET_IN_VIDEO_IN_DEFOG_CAPS, pOutBuf = NET_OUT_VIDEO_IN_DEFOG_CAPS */
+ NET_VIDEO_IN_DEFOG_CAPS(0x30, "获取视频透雾能力集"),
+ /** pInBuf = NET_IN_DIAGNOSIS_CAPS, pOutBuf = NET_OUT_DIAGNOSIS_CAPS */
+ NET_DIAGNOSIS_CAPS(0x31, "获取故障诊断能力"),
+ /** pInBuf = NET_IN_LOWRATEWPAN_CAPS, pOutBuf = NET_OUT_LOWRATEWPAN_CAPS */
+ NET_LOWRATEWPAN_CAPS(0x32, "获取低功率WPAN能力集"),
+ /** pInBuf = NET_IN_GET_FILE_TRANSFER_CAPS, pOutBuf = NET_OUT_GET_FILE_TRANSFER_CAPS */
+ NET_GET_FILE_TRANSFER_CAPS(0x33, "获取远程文件下载能力集"),
+ /** pInBuf = NET_IN_AUDIO_OUTPUT_CAPS, pOutBuf = NET_OUT_AUDIO_OUTPUT_CAPS */
+ NET_AUDIO_OUTPUT_CAPS(0x34, "获取音频输出能力"),
+ /**
+ * pInBuf = NET_IN_REMOTE_FACE_RECOGNITION_CAPS, pOutBuf = NET_OUT_REMOTE_FACE_RECOGNITION_CAPS*
+ */
+ NET_REMOTE_FACE_RECOGNITION_CAPS(0x35, "获取远程目标识别服务器能力"),
+ /** pInBuf = NET_IN_REMOTE_COLLECT_DEVINFO_CAPS, pOutBuf = NET_OUT_REMOTE_COLLECT_DEVINFO_CAPS */
+ NET_REMOTE_COLLECT_DEVINFO_CAPS(0x36, "获取远程设备信息采集能力"),
+ /** pInBuf = NET_IN_MONITOR_WALL_CAPS_INFO, pOutBuf = NET_OUT_MONITOR_WALL_CAPS_INFO */
+ NET_MONITOR_WALL_CAPS(0x37, "获取电视墙管理器实例能力集"),
+ /** pInBuf = NET_IN_REMOTE_SPEAK_CAPS, pOutBuf = NET_OUT_REMOTE_SPEAK_CAPS */
+ NET_REMOTE_SPEAK_CAPS(0x38, "获取前端音频文件路径和能力集"),
+ /** pInBuf = NET_IN_WLAN_CAPS_INFO, pOutBuf = NET_OUT_WLAN_CAPS_INFO */
+ NET_WLAN_CAPS(0x39, "获取WLAN能力集"),
+ /** pInBuf = NET_IN_LOG_ONLINE_BACKUP_CAPS_INFO, pOutBuf = NET_OUT_LOG_ONLINE_BACKUP_CAPS_INFO */
+ NET_LOG_ONLINE_BACKUP_CAPS(0x3A, "获取日志在线备份能力集"),
+ /** pInBuf = NET_IN_RECEIPT_EVENT_CAPS_INFO, pOutBuf = NET_OUT_RECEIPT_EVENT_CAPS_INFO */
+ NET_RECEIPT_EVENT_CAPS(0x3B, "获取事件回执能力集"),
+ /**
+ * pInBuf = NET_IN_ANALYSE_TASK_MANAGER_CAPS_INFO, pOutBuf =
+ * NET_OUT_ANALYSE_TASK_MANAGER_CAPS_INFO
+ */
+ NET_ANALYSE_TASK_MANAGER_CAPS(0x3C, "获取智能任务分析能力集"),
+ /** pInBuf = NET_IN_PERIPHERAL_CHIP_CAPS, pOutBuf = NET_OUT_PERIPHERAL_CHIP_CAPS */
+ NET_PERIPHERAL_CHIP_CAPS(0x3D, "获取设备从片能力"),
+ /**
+ * pInBuf = NET_IN_CITIZEN_IDENTITY_MANAGER_CAPS, pOutBuf = NET_OUT_CITIZEN_IDENTITY_MANAGER_CAPS*
+ */
+ NET_CITIZEN_IDENTITY_MANAGER_CAPS(0x3E, "获取人证设备能力集"),
+ /** pInBuf = NET_IN_AROUD_4G_PROBE_SEARCH_CAPS, pOutBuf = NET_OUT_AROUD_4G_PROBE_SEARCH_CAPS */
+ NET_AROUD_4G_PROBE_SEARCH_CAPS(0x3F, "获取电子围栏手机采集能力"),
+ /** pInBuf = NET_IN_GET_ADVERTIMENT_CAPS, pOutBuf = NET_OUT_GET_ADVERTIMENT_CAPS */
+ NET_GET_ADVERTIMENT_CAPS(0x4A, "获取设备广告投放能力"),
+ /** pInBuf = NET_IN_LIGHTING_MIX_SOLUTION_CAPS, pOutBuf = NET_OUT_LIGHTING_MIX_SOLUTION_CAPS */
+ NET_VIDEOIN_LIGHTING_MIX_SOLUTION_CAPS(0x40, "混光灯补光方案能力");
+
+ GetDevCaps_Type(int type, String desc) {
+ this.type = type;
+ this.desc = desc;
+ }
+
+ private int type;
+ private String desc;
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+
+ public static GetDevCaps_Type getDevCapsType(int type) {
+ for (GetDevCaps_Type cap : GetDevCaps_Type.values()) {
+ if (cap.type == type) {
+ return cap;
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_ACCESS_ERRORCODE.java b/src/main/java/com/netsdk/lib/enumeration/NET_ACCESS_ERRORCODE.java
new file mode 100644
index 0000000..d5ddbbe
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_ACCESS_ERRORCODE.java
@@ -0,0 +1,50 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 门禁卡操作数据错误码
+ * @date 2021/2/8
+ */
+public enum NET_ACCESS_ERRORCODE {
+ /**
+ * 未知错误
+ */
+ NET_ACCESS_ERRORCODE_UNKNOWN(0,"未知错误"),
+ /**
+ * 不支持该数据类型
+ */
+ NET_ACCESS_ERRORCODE_NOTSUPPORT(1,"不支持该数据类型"),
+ /**
+ * 数据类型已存满
+ */
+ NET_ACCESS_ERRORCODE_FULLDATA(2,"数据类型已满"),
+ /**
+ * 不支持下发操作
+ */
+ NET_ACCESS_ERRORCODE_NOTSUPPORTISSUED(3,"不支持下发操作");
+ private int code;
+ private String desc;
+
+ NET_ACCESS_ERRORCODE(int code, String desc) {
+ this.code = code;
+ this.desc = desc;
+ }
+
+ public int getCode() {
+ return code;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+ public static NET_ACCESS_ERRORCODE getNetAccessErrorCode(int code){
+ for (NET_ACCESS_ERRORCODE errorCode :NET_ACCESS_ERRORCODE.values() ) {
+ if(errorCode.code==code){
+ return errorCode;
+ }
+ }
+ return NET_ACCESS_ERRORCODE_UNKNOWN;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_CODEID_ERROR_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_CODEID_ERROR_TYPE.java
new file mode 100644
index 0000000..0fbacec
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_CODEID_ERROR_TYPE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 对码错误类型
+ * @date 2023/03/16 16:26:31
+ */
+public enum NET_CODEID_ERROR_TYPE {
+ /**
+ * 对码正确
+ */
+ NET_CODEID_ERROR_TYPE_RIGHT(0, "对码正确"),
+ /**
+ * 已经存在
+ */
+ NET_CODEID_ERROR_TYPE_ALREADYEXIST(1, "已经存在"),
+ /**
+ * 其他错误
+ */
+ NET_CODEID_ERROR_TYPE_OTHER(2, "其他错误");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_CODEID_ERROR_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_CODEID_ERROR_TYPE enumType : NET_CODEID_ERROR_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_CODEID_ERROR_TYPE enumType : NET_CODEID_ERROR_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_COURSECOMPOSITE_MODE_OPERATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_COURSECOMPOSITE_MODE_OPERATE_TYPE.java
new file mode 100644
index 0000000..b935344
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_COURSECOMPOSITE_MODE_OPERATE_TYPE.java
@@ -0,0 +1,79 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.structure.*;
+
+/**
+ * {@link NetSDKLib#CLIENT_OperateCourseCompositeChannelMode}
+ * @author : 47040
+ * @since : Created in 2020/9/27 16:30
+ */
+public enum NET_COURSECOMPOSITE_MODE_OPERATE_TYPE {
+ /**
+ * 添加模式,对应结构体
+ * pInParam {@link NET_IN_COURSECOMPOSITE_CHANNEL_MODE_ADD}
+ * pOutParam {@link NET_OUT_COURSECOMPOSITE_CHANNEL_MODE_ADD}
+ */
+ NET_COURSECOMPOSITE_MODE_ADD(0, "添加模式"),
+ /**
+ * 删除模式,对应结构体
+ * pInParam {@link NET_IN_COURSECOMPOSITE_CHANNEL_MODE_DELETE}
+ * pOutParam {@link NET_OUT_COURSECOMPOSITE_CHANNEL_MODE_DELETE}
+ */
+ NET_COURSECOMPOSITE_MODE_DELETE(1, "删除模式"),
+ /**
+ * 修改模式,对应结构体
+ * pInParam {@link NET_IN_COURSECOMPOSITE_CHANNEL_MODE_MODIFY}
+ * pOutParam {@link NET_OUT_COURSECOMPOSITE_CHANNEL_MODE_MODIFY}
+ */
+ NET_COURSECOMPOSITE_MODE_MODIFY(2, "修改模式"),
+ /**
+ * 获取模式,对应结构体
+ * pInParam {@link NET_IN_COURSECOMPOSITE_CHANNEL_MODE_GET}
+ * pOutParam {@link NET_OUT_COURSECOMPOSITE_CHANNEL_MODE_GET}
+ */
+ NET_COURSECOMPOSITE_MODE_GET(3, "获取模式");
+
+
+ private int value;
+ private String note;
+
+ NET_COURSECOMPOSITE_MODE_OPERATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_COURSECOMPOSITE_MODE_OPERATE_TYPE enumType : NET_COURSECOMPOSITE_MODE_OPERATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_COURSECOMPOSITE_MODE_OPERATE_TYPE enumType : NET_COURSECOMPOSITE_MODE_OPERATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_COURSECOMPOSITE_MODE_OPERATE_TYPE getEnum(int value) {
+ for (NET_COURSECOMPOSITE_MODE_OPERATE_TYPE e : NET_COURSECOMPOSITE_MODE_OPERATE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_COURSECOMPOSITE_MODE_OPERATE_TYPE.NET_COURSECOMPOSITE_MODE_GET;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_2DCODE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_2DCODE_TYPE.java
new file mode 100644
index 0000000..1f43bbf
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_2DCODE_TYPE.java
@@ -0,0 +1,80 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 二维码类型
+ * @date 2020/9/10
+ */
+public enum NET_EM_2DCODE_TYPE {
+ /**
+ * TYCO客户的P2P功能
+ */
+ NET_EM_2DCODE_TYPE_OZVISION(0, "TYCO"),
+ /**
+ * 乐橙手机客户端
+ */
+ NET_EM_2DCODE_TYPE_LCWEBSITE(1, "乐橙"),
+ /**
+ * easy4ip手机客户端
+ */
+ NET_EM_2DCODE_TYPE_EASY4IP(2, "easy4ip"),
+ /**
+ * i/gDMSS手机客户端
+ */
+ NET_EM_2DCODE_TYPE_DMSS(3, "i/gDMSS"),
+ /**
+ * 可视对讲客户端
+ */
+ NET_EM_2DCODE_TYPE_VIDEOTALK(4, "可视对讲"),
+ /**
+ * app注册信息二维码
+ */
+ NET_EM_2DCODE_TYPE_APPREGISTER(5, "app注册信息"),
+ /**
+ * H500平台向美的平台获取授权
+ */
+ NET_EM_2DCODE_TYPE_DEVAUTH(6, "H500平台");
+
+ private NET_EM_2DCODE_TYPE(int type, String descrip) {
+ this.type = type;
+ this.descrip = descrip;
+ }
+
+ private int type;
+ private String descrip;
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public String getDescription(int type) {
+ for (NET_EM_2DCODE_TYPE code : NET_EM_2DCODE_TYPE.values()) {
+ if (code.getType() == type) {
+ return code.getDescrip();
+ }
+ }
+ return "";
+ }
+
+ public static NET_EM_2DCODE_TYPE getCode(int type) {
+ for (NET_EM_2DCODE_TYPE code : NET_EM_2DCODE_TYPE.values()) {
+ if (code.getType() == type) {
+ return code;
+ }
+ }
+ return null;
+ }
+
+ public String getDescrip() {
+ return descrip;
+ }
+
+ public void setDescrip(String descrip) {
+ this.descrip = descrip;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_ATTITUDE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_ATTITUDE_TYPE.java
new file mode 100644
index 0000000..cb48aa8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_ATTITUDE_TYPE.java
@@ -0,0 +1,130 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 姿态类型
+* @date 2023/02/06 15:24:00
+*/
+public enum NET_EM_ATTITUDE_TYPE {
+/**
+未知
+*/
+NET_EM_ATTITUDE_TYPE_UNKNOWN(0,"未知"),
+/**
+单手递接
+*/
+NET_EM_ATTITUDE_TYPE_ONE_HAND(1,"单手递接"),
+/**
+叉腰
+*/
+NET_EM_ATTITUDE_TYPE_AKIMBO(2,"叉腰"),
+/**
+双手抱头
+*/
+NET_EM_ATTITUDE_TYPE_HAND_SON_HEAD(3,"双手抱头"),
+/**
+双手抱胸
+*/
+NET_EM_ATTITUDE_TYPE_HAND_SON_CHEST(4,"双手抱胸"),
+/**
+撞墙
+*/
+NET_EM_ATTITUDE_TYPE_HIT_WALL(5,"撞墙"),
+/**
+弯腰
+*/
+NET_EM_ATTITUDE_TYPE_BEND(6,"弯腰"),
+/**
+坐状态
+*/
+NET_EM_ATTITUDE_TYPE_SITTING(7,"坐状态"),
+/**
+站状态
+*/
+NET_EM_ATTITUDE_TYPE_STANDING(8,"站状态"),
+/**
+坐下
+*/
+NET_EM_ATTITUDE_TYPE_SIT_DOWN(9,"坐下"),
+/**
+起立
+*/
+NET_EM_ATTITUDE_TYPE_STAND_UP(10,"起立"),
+/**
+趴桌子
+*/
+NET_EM_ATTITUDE_TYPE_ON_TABLE(11,"趴桌子"),
+/**
+回头
+*/
+NET_EM_ATTITUDE_TYPE_LOOK_BACK(12,"回头"),
+/**
+传递
+*/
+NET_EM_ATTITUDE_TYPE_DELIVERY(13,"传递"),
+/**
+东张西望
+*/
+NET_EM_ATTITUDE_TYPE_GAZE_AROUND(14,"东张西望"),
+/**
+手放桌下偷看
+*/
+NET_EM_ATTITUDE_TYPE_HAND_DOWN_PEEP(15,"手放桌下偷看"),
+/**
+捡东西
+*/
+NET_EM_ATTITUDE_TYPE_PICK_UP(16,"捡东西"),
+/**
+举手
+*/
+NET_EM_ATTITUDE_TYPE_HAND_UP(17,"举手"),
+/**
+书写
+*/
+NET_EM_ATTITUDE_TYPE_WRITE(18,"书写");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+NET_EM_ATTITUDE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (NET_EM_ATTITUDE_TYPE enumType : NET_EM_ATTITUDE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (NET_EM_ATTITUDE_TYPE enumType : NET_EM_ATTITUDE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static NET_EM_ATTITUDE_TYPE getEnum(int value) {
+ for (NET_EM_ATTITUDE_TYPE e : NET_EM_ATTITUDE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_ATTITUDE_TYPE.NET_EM_ATTITUDE_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_CFG_OPERATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_CFG_OPERATE_TYPE.java
new file mode 100644
index 0000000..d8da0af
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_CFG_OPERATE_TYPE.java
@@ -0,0 +1,426 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.structure.NET_CFG_VSP_GAYS_SERVER_INFO;
+import com.sun.jna.Pointer;
+import com.sun.jna.ptr.IntByReference;
+import com.netsdk.lib.structure.NET_CFG_HEALTH_CODE_INFO;
+
+/**
+ * 配置枚举值列表 对应接口: 获取配置 {@link NetSDKLib#CLIENT_GetConfig(NetSDKLib.LLong, int, int, Pointer, int,
+ * int, Pointer)} 下发配置 {@link NetSDKLib#CLIENT_SetConfig(NetSDKLib.LLong, int, int, Pointer, int,
+ * int, IntByReference, Pointer)}
+ */
+public class NET_EM_CFG_OPERATE_TYPE {
+
+ public static final int NET_EM_CFG_SNAP_MODE = 0; // 抓图模式配置,对应结构体 NET_SNAP_MODE
+ public static final int NET_EM_CFG_DEV_CAR_COACH = 1; // 铁路记录配置, 对应结构体 NET_DEV_CAR_COACH_INFO
+ public static final int NET_EM_CFG_YUEQING_SUPPLYLIGHTING =
+ 2; // 乐清外接灯光配置, 对应结构体 NET_YUEQING_SUPPLYLIGHTING_INFO
+ public static final int NET_EM_CFG_MEDIA_GLOBAL = 3; // 媒体组件全局配置, 对应结构体 NET_MEDIA_GLOBAL_INFO
+ public static final int NET_EM_CFG_PARKINGSPACELIGHT_STATE =
+ 5; // 车位状态对应的车位指示灯, 对应结构体 NET_PARKINGSPACELIGHT_STATE_INFO
+ public static final int NET_EM_CFG_COAXIAL_LIGHT =
+ 6; // 白光灯视频通道配置, 对应结构体 NET_CFG_COAXIAL_LIGHT_INFO
+ public static final int NET_EM_CFG_VIDEO_OUT = 7; // 视频输出配置, 对应结构体 NET_CFG_VIDEO_OUT_INFO
+
+ public static final int NET_EM_CFG_MEDIA_ENCRYPT =
+ 9; // 媒体数据加密配置,对应结构体 NET_MEDIA_ENCRYPT_INFO,与通道不相关,通道号需要填成-1
+ public static final int NET_EM_CFG_COUNTRY =
+ 10; // 国家/地区配置, 对应结构体 NET_CFG_COUNTRY_INFO,与通道不相关,通道号需要填成-1
+ public static final int NET_EM_CFG_VIDEOSTANDARD =
+ 11; // 视频制式配置, 对应结构体 NET_CFG_VIDEOSTANDARD_INFO,与通道不相关,通道号需要填成-1, 目前设备不支持配置SECAM制式
+ public static final int NET_EM_CFG_SERIAL_PUSH_LOG =
+ 12; // 串口服务器推送日志配置, 对应结构体 NET_CFG_SERIALPUSHLOG_INFO,与通道不相关需要填成-1
+ public static final int NET_EM_CFG_PRESET_SNAP_PICTURE_NUM =
+ 13; // 预置点抓拍图片数量配置,对应结构体 NET_CFG_PRESET_SNAP_PICTURE_NUM
+ public static final int NET_EM_CFG_DOWNLOAD_ENCRYPT =
+ 14; // 下载数据加密配置, 对应结构体 NET_DOWNLOAD_ENCRYPT_INFO,与通道不相关,通道号需要填成-1
+ public static final int NET_EM_CFG_LIFT_CONTROL_OPTION =
+ 15; // 梯控功能全局配置,对应结构体 NET_CFG_LIFTCONTROL_OPTION,与通道不相关,通道号需要填成-1
+ /**
+ * 健康码使能配置,对应结构体{@link NET_CFG_HEALTH_CODE_INFO}, 与通道不相关,通道号需要填成-1
+ */
+ public static final int NET_EM_CFG_HEALTH_CODE =
+ 16; // 健康码使能配置,对应结构体 NET_CFG_HEALTH_CODE_INFO, 与通道不相关,通道号需要填成-1
+ public static final int NET_EM_CFG_ACCESSCONTROL_MEASURE_TEMP =
+ 20; // 门禁测温配置, 对应结构体 NET_CFG_ACCESSCONTROL_MEASURE_TEMP_INFO, 与通道不相关,通道号需要填成-1
+
+ public static final int NET_EM_CFG_RTMP = 17; // RTMP 配置,对应结构体 NET_CFG_RTMP_INFO,与通道不相关,通道号需要填成
+ public static final int NET_EM_CFG_QR_CODE =
+ 26; // 配置二维码有效时间, 对应的结构体 NET_CFG_QR_CODE_INFO , 通道号需要填成-1
+
+ public static final int NET_EM_CFG_TRAFFIC_LAMP_CONFIG=45; // 时间间隔配置, 对应结构体 NET_CFG_TRAFFIC_LAMP_CONFIG_INFO, 与通道不相关,通道号需要填成-1
+ public static final int NET_EM_CFG_DISABLE_BEEP_LINKAGE=47; // 防蜂鸣联动项使能配置, 对应结构体 NET_CFG_DISABLE_BEEP_LINKAGE_INFO, 与通道不相关,通道号需要填成-1
+ public static final int NET_EM_CFG_AREA_ARM_MODE = 48; // Area布撤防配置, 对应结构体 NET_CFG_AREA_ARM_MODE_INFO, 与通道不相关,通道号需要填成-1
+
+ /*********OSD叠加相关配置*************************************************************************************************/
+ public static final int NET_EM_CFG_CHANNELTITLE =
+ 1000; // 叠加通道标题属性配置,对应结构体 NET_OSD_CHANNEL_TITLE,其中结构体中的emOsdBlendType为必填参数
+
+ public static final int NET_EM_CFG_TIMETITLE =
+ 1001; // 叠加时间标题属性配置,对应结构体 NET_OSD_TIME_TITLE,其中结构体中的emOsdBlendType为必填参数
+ public static final int NET_EM_CFG_CUSTOMTITLE =
+ 1002; // 叠加自定义标题属性配置,对应结构体 NET_OSD_CUSTOM_TITLE,其中结构体中的stuCustomTitle.emOsdBlendType为必填参数
+ public static final int NET_EM_CFG_CUSTOMTITLETEXTALIGN =
+ 1003; // 叠加自定义标题对齐方式属性配置,对应结构体 NET_OSD_CUSTOM_TITLE_TEXT_ALIGN
+ public static final int NET_EM_CFG_OSDCOMMINFO = 1004; // 叠加公共属性配置,对应结构体 NET_OSD_COMM_INFO
+ public static final int NET_EM_CFG_OSD_PTZZOOM = 1005; // 变倍叠加配置,对应结构体 NET_OSD_PTZZOOM_INFO
+ public static final int NET_EM_CFG_GPSTITLE = 1006; // 叠加GPS标题显示配置,对应结构体 NET_OSD_GPS_TITLE
+ public static final int NET_EM_CFG_OSD_NUMBERSTATPLAN =
+ 1007; // 人数统计计划叠加OSD配置, 支持NumberStatPlan算法大类时(球机)使用,对应结构体NET_OSD_NUMBER_STATPLAN
+ public static final int NET_EM_CFG_GPSSTARNUM_OSD =
+ 1008; // GPS搜星数OSD配置, 车载需求, 对应结构体 NET_CFG_GPSSTARNUM_OSD_INFO
+ public static final int NET_EM_CFG_PICTURETITLE = 1009; // 图片标题,对应结构体 NET_OSD_PICTURE_TITLE
+ public static final int NET_EM_CFG_OSD_FACEFLOWSTAT =
+ 1010; // 人脸数量统计OSD配置,对应结构体 NET_OSD_FACEFLOWSTAT_INFO
+
+ public static final int NET_EM_CFG_PTZ_PRESET = 1011; // 预置点信息叠加,对应结构体 NET_OSD_CFG_PTZ_PRESET
+ public static final int NET_EM_CFG_PTZ_PATTERN =
+ 1012; // 显示巡迹百分比叠加配置,对应结构体 NET_OSD_CFG_PTZ_PATTERN
+ public static final int NET_EM_CFG_PTZ_RS485_DETECT =
+ 1013; // 显示RS485检测结果的叠加配置,对应结构体 NET_OSD_CFG_PTZ_RS485_DETECT
+ public static final int NET_EM_CFG_PTZ_COORDINATES =
+ 1014; // 显示云台坐标的叠加配置,对应结构体 NET_OSD_CFG_PTZ_COORDINATES
+ public static final int NET_EM_CFG_PTZ_DIRECTION =
+ 1015; // 显示云台方向的叠加配置,对应结构体 NET_OSD_CFG_PTZ_DIRECTION
+ public static final int NET_EM_CFG_TEMPERATURE =
+ 1016; // 显示环境温度的叠加配置,对应结构体 NET_OSD_CFG_TEMPERATURE
+ public static final int NET_EM_CFG_COVERS = 1017; // 区域覆盖,对应结构体 NET_OSD_CFG_COVERS
+ public static final int NET_EM_CFG_USER_DEF_TITLE =
+ 1018; // 用户自定义OSD标题,对应结构体 NET_OSD_USER_DEF_TITLE DHOP专用
+ public static final int NET_EM_CFG_SNAP_OSD = 1019; // 抓拍OSD配置, 对应结构体 NET_CFG_SNAP_OSD
+
+ /*********encode 相关配置*************************************************************************************************/
+ public static final int NET_EM_CFG_ENCODE_VIDEO = 1100; // 编码视频格式属性配置,对应结构体 NET_ENCODE_VIDEO_INFO
+
+ public static final int NET_EM_CFG_ENCODE_VIDEO_PACK =
+ 1101; // 编码视频格式打包模式配置,对应结构体 NET_ENCODE_VIDEO_PACK_INFO
+ public static final int NET_EM_CFG_ENCODE_VIDEO_SVC =
+ 1102; // 编码视频格式SVC配置,对应结构体 NET_ENCODE_VIDEO_SVC_INFO
+ public static final int NET_EM_CFG_ENCODE_VIDEO_PROFILE =
+ 1103; // 编码视频格式profile配置,对应结构体 NET_ENCODE_VIDEO_PROFILE_INFO
+ public static final int NET_EM_CFG_ENCODE_AUDIO_COMPRESSION =
+ 1104; // 编码音频压缩格式配置,对应结构体 NET_ENCODE_AUDIO_COMPRESSION_INFO
+ public static final int NET_EM_CFG_ENCODE_AUDIO_INFO =
+ 1105; // 编码音频格式配置,对应结构体 NET_ENCODE_AUDIO_INFO
+ public static final int NET_EM_CFG_ENCODE_SNAP_INFO = 1106; // 编码抓图配置,对应结构体 NET_ENCODE_SNAP_INFO
+ public static final int NET_EM_CFG_ENCODE_SNAPTIME =
+ 1107; // 编码抓图时间相关配置,对应结构体 NET_ENCODE_SNAP_TIME_INFO
+ public static final int NET_EM_CFG_ENCODE_CHANNELTITLE =
+ 1108; // 通道名称配置,对应结构体 NET_ENCODE_CHANNELTITLE_INFO
+
+ /**********音频相关配置***************************************************************************************************/
+ public static final int NET_EM_CFG_AUDIOIN_SOURCE =
+ 1200; // 音频输入类型配置,对应结构体 NET_ENCODE_AUDIO_SOURCE_INFO
+
+ public static final int NET_EM_CFG_AUDIOIN_DENOISE =
+ 1201; // 音频降噪配置,对应结构体 NET_AUDIOIN_DENOISE_INFO
+ public static final int NET_EM_CFG_AUDIOIN_VOLUME =
+ 1202; // 音频输入音量配置,对应结构体 NET_AUDIOIN_VOLUME_INFO
+ public static final int NET_EM_CFG_AUDIOOUT_VOLUME =
+ 1203; // 音频输出音量配置,对应结构体 NET_AUDIOOUT_VOLUME_INFO
+ public static final int NET_EM_CFG_AUDIOOUT_MODE =
+ 1204;// 音频输出模式配置, 对应结构体 NET_AUDIOOUT_MODE_INFO
+ public static final int NET_EM_CFG_LOOPPLAYBACK_AUDIOALARM =
+ 1205;// 音频循环播放报警配置,对应结构体 NET_LOOPPLAYBACK_AUDIOALARM_INFO,与通道不相关,通道号需要填成-1
+ /**********videoin 相关配置***********************************************************************************************/
+ public static final int NET_EM_CFG_VIDEOIN_SWITCHMODE =
+ 1300; // 切换模式配置,对应结构体 NET_VIDEOIN_SWITCH_MODE_INFO
+
+ public static final int NET_EM_CFG_VIDEOIN_COLOR = 1301; // 视频输入颜色配置,对应结构体 NET_VIDEOIN_COLOR_INFO
+ public static final int NET_EM_CFG_VIDEOIN_IMAGE_OPT =
+ 1302; // 图像属性配置,对应结构体 NET_VIDEOIN_IMAGE_INFO
+ public static final int NET_EM_CFG_VIDEOIN_STABLE = 1303; // 图像防抖配置,对应结构体 NET_VIDEOIN_STABLE_INFO
+ public static final int NET_EM_CFG_VIDEOIN_IRISAUTO =
+ 1304; // 自动光圈配置,对应结构体 NET_VIDEOIN_IRISAUTO_INFO
+ public static final int NET_EM_CFG_VIDEOIN_IMAGEENHANCEMENT =
+ 1305; // 图像增强配置,对应结构体 NET_VIDEOIN_IMAGEENHANCEMENT_INFO
+ public static final int NET_EM_CFG_VIDEOIN_EXPOSURE_NORMAL =
+ 1306; // 曝光通用属性配置,对应结构体 NET_VIDEOIN_EXPOSURE_NORMAL_INFO
+ public static final int NET_EM_CFG_VIDEOIN_EXPOSURE_OTHER =
+ 1307; // 其他曝光属性配置,对应结构体 NET_VIDEOIN_EXPOSURE_OTHER_INFO
+ public static final int NET_EM_CFG_VIDEOIN_EXPOSURE_SHUTTER =
+ 1308; // 曝光快门配置,对应结构体 NET_VIDEOIN_EXPOSURE_SHUTTER_INFO
+ public static final int NET_EM_CFG_VIDEOIN_BACKLIGHT =
+ 1309; // 背光配置,对应结构体 NET_VIDEOIN_BACKLIGHT_INFO
+ public static final int NET_EM_CFG_VIDEOIN_INTENSITY =
+ 1310; // 场景自适应对比度强度配置,对应结构体 NET_VIDEOIN_INTENSITY_INFO
+ public static final int NET_EM_CFG_VIDEOIN_LIGHTING =
+ 1311; // 补光灯配置,对应结构体 NET_VIDEOIN_LIGHTING_INFO
+ public static final int NET_EM_CFG_VIDEOIN_DEFOG = 1312; // 透雾配置,对应结构体 NET_VIDEOIN_DEFOG_INFO
+ public static final int NET_EM_CFG_VIDEOIN_FOCUSMODE =
+ 1313; // 聚焦模式配置,对应结构体 NET_VIDEOIN_FOCUSMODE_INFO
+ public static final int NET_EM_CFG_VIDEOIN_FOCUSVALUE =
+ 1314; // 聚焦信息配置,对应结构体 NET_VIDEOIN_FOCUSVALUE_INFO
+ public static final int NET_EM_CFG_VIDEOIN_WHITEBALANCE =
+ 1315; // 白平衡配置,对应结构体 NET_VIDEOIN_WHITEBALANCE_INFO
+ public static final int NET_EM_CFG_VIDEOIN_DAYNIGHT =
+ 1316; // 日夜模式配置,对应结构体 NET_VIDEOIN_DAYNIGHT_INFO
+ public static final int NET_EM_CFG_VIDEOIN_DAYNIGHT_ICR =
+ 1317; // 日夜模式ICR切换类型配置,对应结构体 NET_VIDEOIN_DAYNIGHT_ICR_INFO
+ public static final int NET_EM_CFG_VIDEOIN_SHARPNESS =
+ 1318; // 锐度配置,对应结构体 NET_VIDEOIN_SHARPNESS_INFO
+ public static final int NET_EM_CFG_VIDEOIN_COMM_DENOISE =
+ 1319; // 通用降噪配置,对应结构体 NET_VIDEOIN_DENOISE_INFO
+ public static final int NET_EM_CFG_VIDEOIN_3D_DENOISE =
+ 1320; // 3D 降噪配置,对应结构体 NET_VIDEOIN_3D_DENOISE_INFO
+
+ /***********庭审相关配置*****************************************************************************************/
+ public static final int NET_EM_CFG_ENCODE_PLAN = 1400; // 刻录光盘编码计划, 对应结构体 NET_ENCODE_PLAN_INFO
+
+ public static final int NET_EM_CFG_COMPOSE_PLAN =
+ 1403; // 合成通道的预案分割配置, 对应结构体 NET_COMPOSE_PLAN_INFO
+ /**
+ * 合成通道配置, 对应结构体{@link com.netsdk.lib.structure.NET_COMPOSE_CHANNEL_INFO}
+ */
+ public static final int NET_EM_CFG_COMPOSE_CHANNEL =
+ 1401; // 合成通道配置, 对应结构体 NET_COMPOSE_CHANNEL_INFO
+ /**
+ * 刻录参数, 对应结构体 {@link com.netsdk.lib.structure.NET_BURN_PARAM_INFO}
+ */
+ public static final int NET_EM_CFG_BURN_PARAM = 1402; // 刻录参数, 对应结构体 NET_BURN_PARAM_INFO
+
+ /**********报警网关相关配置**************************************************************************************/
+ public static final int NET_EM_CFG_ALARM_SOUND = 1500; // 报警网关语音配置, 对应结构体 NET_ALARM_SOUND_INFO
+
+ public static final int NET_EM_CFG_FIRE_WARNINGMODE =
+ 1503; // 火灾预警模式, 对应结构体 NET_FIREWARNING_MODE_INFO
+ public static final int NET_EM_CFG_FIRE_WARNING =
+ 1504; // 火灾预警配置(与火灾预警模式配置配合使用), 对应的结构体 NET_FIRE_WARNING_INFO
+
+ /**********网络应用相关配置**************************************************************************************/
+ public static final int NET_EM_CFG_ACCESS_POINT =
+ 1600; // 用于WiFi服务端配置(热点功能), 对应结构体 NET_NETAPP_ACCESSPOINT
+
+ /**************安全基线需求**************************************************************************************/
+ public static final int NET_EM_CFG_NAS = 1700; // NAS 配置, 对应结构体 NET_NAS_INFO
+
+ public static final int NET_EM_CFG_PPPOE = 1701; // PPPOE 配置,对应结构体 NET_PPPOE_INFO
+ public static final int NET_EM_CFG_EMAIL = 1702; // Email 配置,对应结构体 NET_EAMIL_INFO
+ public static final int NET_EM_CFG_DDNS = 1703; // DDNS 配置,对应结构体 NET_DDNS_INFO
+
+ /**************SCADA配置需求**************************************************************************************/
+ public static final int NET_EM_CFG_SCADA_PROTOCOLS_MANAGER =
+ 1800; // 协议管理配置,对应结构体 NET_SCADA_PROTOCOLS_MANAGER
+
+ public static final int NET_EM_CFG_SCADA_DEVICEINFO_CFG =
+ 1801; // 设备信息配置,对应结构体 NET_SCADA_DEVICEINFO_CFG
+
+ /**************NetApp配置需求*************************************************************************************/
+ public static final int NET_EM_CFG_NETAPP_LINK_LAYER_VPN =
+ 1900; // 链路层VPN设置,对应结构体 NET_NETAPP_LINK_LAYER_VPN_CFG
+ public static final int NET_EM_CFG_NETAPP_COMMUNICATION_LIST = 1902;// 通讯录配置, 对应结构体 NET_NETAPP_COMMUNICATION_LIST_CFG, 与通道不相关,通道号需要填成-1
+
+ /**************中国铁塔平台接入***********************************************************************************/
+ public static final int NET_EM_CFG_VSP_CHINA_TOWER = 2000; // 安徽治超平台接入配置,对应结构体 NET_VSP_CHINA_TOWER
+ public static final int NET_EM_CFG_BSCCUSTOM = 3919; // 门禁配置汇总 对应结构体 NET_CFG_BSCCUSTOM 通道无关 通道号填-1
+
+ /**********智能相关配置*******************************************************************************************/
+ public static final int NET_EM_CFG_STEREO_CALIBRATE =
+ 2100; // 双目标定结果, 对应结构体NET_STEREO_CALIBRATE_INFO
+
+ public static final int NET_EM_CFG_STEREO_CALIBRATEMATRIX_MULTISENSOR =
+ 2101; // 多目相机标定配置CalibrateMatrix(MultiSensor), 对应的结构体 NET_MULTI_SENSOR_INFO
+ public static final int NET_EM_CFG_CROWDDISTRIMAP_CALIBRATE =
+ 2102; // 人群分布图标定配置, 对应的结构体 NET_CROWDDISTRIMAP_CALIBRATE_INFO
+ public static final int NET_EM_CFG_TRAFFIC_NOPASSING =
+ 2103; // 交通禁行配置, 对应的结构体 NET_TRAFFIC_NOPASSING_INFO
+ public static final int NET_EM_CFG_FIGHT_CALIBRATE =
+ 2104; // 打架标定配置, 对应的结构体 NET_FIGHT_CALIBRATE_INFO
+ public static final int NET_EM_CFG_FACE_RECOGNITION_ALARM =
+ 2105; // 目标识别联动报警通道配置, 对应结构体 NET_FACE_RECOGNITION_ALARM_INFO
+ public static final int NET_EM_CFG_STEREO_CALIBRATEMATRIX_MULTIMODE =
+ 2106; // 灵瞳相机的标定方式 CalibrateMatrix(MultiMode), 对应的结构体 NET_CALIBRATEMATRIX_MULTIMODE_INFO
+ public static final int NET_EM_CFG_AUTO_SNAP_SCHEDULE =
+ 2107; // 智能养殖定时抓图配置, 对应结构体 NET_CFG_AUTO_SNAP_SCHEDULE_INFO
+ public static final int NET_EM_CFG_PARKING_TIMEOUT_DETECT =
+ 2108; // 停车超时检测配置, 对应结构体 NET_CFG_PARKING_TIMEOUT_DETECT
+
+ /**********雷达配置***********************************************************************************************/
+ public static final int NET_EM_CFG_RADAR = 2200; // 雷达配置,对应结构体 DEV_RADAR_CONFIG
+ public static final int NET_EM_CFG_RADAR_RFIDCARD = 2201; // 雷达RFID卡片信息配置,与通道不相关,通道号需要填成-1,对应结构体 NET_CFG_RADAR_RFIDCARD_INFO
+
+
+ /**********视频对讲电话通用配置***********************************************************************************/
+ public static final int NET_EM_CFG_VTH_PASSWORD =
+ 2300; // 视频对讲电话通用配置,对应结构体 NET_CFG_VTH_PASSWORD_INFO
+
+ public static final int NET_EM_CFG_REGISTAR = 2301; // 注册服务器配置,对应结构体 NET_CFG_REGISTAR_INFO
+ public static final int NET_EM_CFG_SIP = 2302; // sip配置, 对应结构体 NET_CFG_SIPSERVER_INFO
+
+ /**********镜头前遮挡盖配置***************************************************************************************/
+ public static final int NET_EM_CFG_AELENSMASK = 2400; // 镜头前遮挡盖配置,对应结构体NET_CFG_AELENSMASK_INFO
+
+ public static final int NET_EM_CFG_ULTRASONIC = 2500; // 超声波配置,对应结构体NET_CFG_ULTRASONIC_INFO
+
+ /**********报警主机相关配置***************************************************************************************/
+ public static final int NET_EM_CFG_ARMSCHEDULE = 2600; // 报警计划配置,对应结构体 NET_CFG_ARMSCHEDULE_INFO
+
+ /**********录像抓图功能相关配置***********************************************************************************/
+ public static final int NET_EM_CFG_TIME_RECORDBACKUP_RESTORE =
+ 3163; // 录像定时自动备份配置, NET_CFG_TIME_RECORDBACKUP_RESTORE_INFO; 对应通道为-1
+
+ public static final int NET_EM_CFG_RECORDEXTRA =
+ 3610; // 录像辅码流录像配置, 对应结构体 NET_CFG_RECORDEXTRA_INFO
+
+ /**********视频诊断相关配置***************************************************************************************/
+ public static final int NET_EM_VIDEODIAGNOSIS_PROJECT =
+ 3700; // 视频诊断计划配置, 对应结构体NET_CFG_VIDEODIAGNOSIS_PROJECT_INFO
+
+ /***********车载相关配置******************************************************************************************/
+ public static final int NET_EM_CFG_POSITIONREPORTPOLICY =
+ 3800; // 车载GPS位置信息上报策略配置, 对应结构体 NET_CFG_POSITIONREPORTPOLICY_INFO
+
+ public static final int NET_EM_CFG_VEHICLE_WORKTIMESCHEDULE =
+ 3801; // 车载工作计划配置,对应结构体 NET_CFG_VEHICLE_WORKTIMESCHEDULE_INFO
+ public static final int NET_EM_CFG_VEHICLE_LOAD = 3802; // 荷载人数配置, 对应结构体 NET_CFG_VEHICLE_LOAD_INFO
+
+ /***********门禁相关配置******************************************************************************************/
+ public static final int NET_EM_CFG_ACCESSCTL_BLACKLIST =
+ 3900; // 门禁禁止名单报警配置,对应结构体 NET_CFG_ACCESSCTL_BLACKLIST
+
+ public static final int NET_EM_CFG_ACCESSCTL_BLACKLIST_LINK =
+ 3901; // 门禁禁止名单报警联动配置,对应结构体 NET_CFG_ALARM_MSG_HANDLE
+ /**
+ * 门禁节假日组配置, 对应结构体 {@link com.netsdk.lib.structure.NET_CFG_ACCESSCTL_SPECIALDAY_GROUP_INFO}
+ */
+ public static final int NET_EM_CFG_ACCESSCTL_SPECIALDAY_GROUP =
+ 3902; // 门禁节假日组配置, 对应结构体 NET_CFG_ACCESSCTL_SPECIALDAY_GROUP_INFO
+ /**
+ * 门禁节假日计划配置, 对应结构体 NET_CFG_ACCESSCTL_SPECIALDAYS_SCHEDULE_INFO
+ */
+ public static final int NET_EM_CFG_ACCESSCTL_SPECIALDAYS_SCHEDULE =
+ 3903; // 门禁节假日计划配置, 对应结构体 NET_CFG_ACCESSCTL_SPECIALDAYS_SCHEDULE_INFO
+ /**
+ * 在离线开门认证模式配置,对应结构体NET_CFG_ACCESSCTL_AUTH_MODE
+ */
+ public static final int NET_EM_CFG_ACCESSCTL_AUTH_MODE =
+ 3904; // 在离线开门认证模式配置,对应结构体NET_CFG_ACCESSCTL_AUTH_MODE
+
+ public static final int NET_EM_CFG_ACS_FACE_RECOGNITION_SCHEME =
+ 3905; // 门禁目标识别相关配置,对应结构体 NET_CFG_ACS_FACE_RECOGNITION_SCHEME
+ /**
+ * 广告禁用时段配置, 对应结构体 {@link com.netsdk.lib.structure.NET_CFG_FORBIDDEN_ADVERT_PLAY}, 通道无关,通道号填-1
+ */
+ public static final int NET_EM_CFG_FORBIDDEN_ADVERT_PLAY =
+ 3906; // 广告禁用时段配置, 对应结构体 NET_CFG_FORBIDDEN_ADVERT_PLAY, 通道无关,通道号填-1
+ /**
+ * 门禁设备当前模式配置, 对应结构体 {@link com.netsdk.lib.structure.NET_CFG_BGY_CUSTOMERCFG}, 通道无关,通道号填-1
+ */
+ public static final int NET_EM_CFG_BGY_CUSTOMERCFG =
+ 3907; // 门禁设备当前模式配置, 对应结构体 NET_CFG_BGY_CUSTOMERCFG, 通道无关,通道号填-1
+
+ public static final int NET_EM_CFG_ACCESSCTL_KEYBINDINGINFOCFG =
+ 3908; // 不同数字按钮对应的信息配置, 对应结构体 NET_CFG_ACCESSCTL_KEYBINDINGINFOCFG, 通道无关,通道号填-1
+ public static final int NET_EM_CFG_HOST_DEVICE =
+ 3909; // 主机、从机设置配置, 对应结构体 NET_CFG_HOST_DEVICE, 通道无关,通道号填-1
+ public static final int NET_EM_CFG_VTH_ALPA_CLOUD =
+ 3910; // 室内机Alpa客户云服务器配置, 对应结构体 NET_CFG_VTH_ALPA_CLOUD, 通道无关, 通道号填-1
+ public static final int NET_EM_CFG_VTH_FETCHINFO =
+ 3911; // 室内机广告信息配置,对应结构体 NET_CFG_VTH_FETCHINFO, 通道无关, 通道号填-1
+ public static final int NET_EM_CFG_VIDEOTALK_SIGNLIGHT =
+ 3917; // 签名灯,可视对讲使用配置,对应结构体 NET_CFG_VIDEOTALK_SIGNLIGHT 通道无关 通道号填-1
+ public static final int NET_EM_CFG_CONSUMPTION_STRATEGY = 3921;
+ // 消费相关策略, 对应结构体 NET_CFG_CONSUMPTION_STRATEGY_INFO, 通道无关 通道号填-1
+ public static final int NET_EM_CFG_WIEGAND = 3922;
+ // 韦根配置, 对应结构体 NET_CFG_WIEGAND_INFO, 通道无关 通道号填-1
+ public static final int NET_EM_CFG_CUSTOMER_DEV_SETTING = 3931;// 门禁提供客户的"系统设置"配置, 对应结构体 NET_CFG_CUSTOMER_DEV_SETTING_INFO 通道无关, 通道号填-1
+
+ public static final int NET_EM_CFG_USER_PASS_DATA_COUNT_CLEAR = 3934;
+ // 定期通行人数清除功能配置, 对应结构体 NET_EM_CFG_USER_PASS_DATA_COUNT_CLEAR_INFO 通道无关, 通道号填-1
+
+ /***********配置************************************************************************************************/
+ public static final int NET_EM_CFG_SERIALNOWHITETABLE =
+ 4000; // 前端序列号允许名单下发至NVR 配置, 对应结构体 NET_CFG_SERIALNOWHITETABLE_INFO
+
+ public static final int NET_EM_CFG_FILE_HOLD_DAYS =
+ 4010; // 录像保存天数配置, 对应结构体NET_CFG_FILE_HOLD_DAYS_INFO
+
+ public static final int NET_EM_CFG_CARD_MNG
+ = 4016; // 单片机兼容cpu卡和ic卡功能切换,对应结构体 NET_CFG_CARD_MNG_INFO
+ public static final int NET_EM_CFG_VSP_LXSJ = 4004; // 灵信视觉平台接入配置 对应结构体 NET_CFG_VSP_LXSJ_INFO,配置较大,建议内存new出来
+
+ public static final int NET_EM_CFG_FINANCIAL_CABINET_CONFIG = 4020; // 金融业务库配置 对应结构体 NET_CFG_FINANCIAL_CABINET_CONFIG_INFO
+
+
+ /***********雷球联动配置************************************************************************************************/
+ //在调用 CLIENT_SetConfig 时,restart字段无效
+ public static final int NET_EM_CFG_RADAR_DEVLIST = 6010; // 雷达设备列表配置, 对应结构体NET_CFG_RADAR_DEVLIST_INFO
+ public static final int NET_EM_CFG_RADAR_SCREEN_RULE = 6012; // 雷达屏幕显示规则配置, 对应结构体NET_CFG_RADAR_SCREEN_RULE_INFO
+ public static final int NET_EM_CFG_MINIRADAR_DECT_PARAM = 6016; // Mini雷达探测参数配置, 对应结构体 NET_CFG_MINIRADAR_DECT_PARAM_INFO
+ public static final int NET_EM_CFG_MINIRADAR_INDOOR_ALARM = 6017; // Mini雷达报警配置, 对应结构体 NET_CFG_MINIRADAR_INDOOR_ALARM_INFO
+ public static final int NET_EM_CFG_MINIRADAR_COMP_INFO = 6018; // Mini雷达角度补偿配置, 对应结构体 NET_CFG_MINIRADAR_COMP_INFO
+ public static final int NET_EM_CFG_MINIRADAR_INSTALL_INFO = 6019; // Mini雷达安装信息配置, 对应结构体 NET_CFG_MINIRADAR_INSTALL_INFO
+ public static final int NET_EM_CFG_MINIRADAR_REGION_DETECT = 6020; // Mini雷达探测区域配置, 对应结构体 NET_CFG_MINIRADAR_REGION_DETECT_INFO
+
+ /***********第三方配置************************************************************************************************/
+ public static final int NET_EM_CFG_VSP_PAAS = 9000; // 乐橙云注册配置修改, 对应结构体 NET_CFG_VSP_PAAS_INFO
+ /**
+ * 公安一所平台接入配置(国标服务端), 对应结构体 {@link NET_CFG_VSP_GAYS_SERVER_INFO} ,对应通道为-1
+ */
+ public static final int NET_EM_CFG_VSP_GAYS_SERVER = 9001;
+
+ public static final int NET_EM_CFG_VSP_CO_SIGN_SERVER =
+ 9002; // 协同签名服务器配置,对应结构体NET_CFG_VSP_CO_SIGN_SERVER_INFO,对应通道为-1
+ public static final int NET_EM_CFG_VSP_GAVI =
+ 9003; // 公安视频图像信息应用系统接入配置,对应结构体NET_CFG_VSP_GAVI_INFO,对应通道为-1
+
+ /***********道闸配置************************************************************************************************/
+ public static final int NET_EM_CFG_TRAFFICSTROBE = 9100; // 道闸配置, 对应结构体 NET_CFG_TRAFFICSTROBE_INFO
+
+ /***********布撤防配置************************************************************************************************/
+ public static final int NET_EM_CFG_DISABLE_LINKAGE =
+ 9300; // 一键撤防配置,对应结构体 NET_CFG_DISABLE_LINKAGE, 与通道不相关,通道号需要填成-1
+ public static final int NET_EM_CFG_DISABLE_LINKAGE_TIME_SECTION =
+ 9301; // 周期撤防联动项功能总开关, 对应结构体 NET_CFG_DISABLE_LINKAGE_TIME_SECTION, 与通道不相关,通道号需要填成-1
+ public static final int NET_EM_CFG_REMOTE_DISABLE_LINKAGE_TIME_SECTION_SYNC =
+ 9303; // 远程通道是否同步本地端"周期一键布撤防"配置, 对应结构体 NET_CFG_REMOTE_DISABLE_LINKAGE_TIME_SECTION_SYNC_INFO, 与通道不相关,接口通道号需要填成-1
+
+ /***********Traffic相关配置***************************************************************************************************/
+ public static final int NET_EM_CFG_TRAFFIC_LATTICE_SCREEN =
+ 10000; // 点阵屏显示信息配置, 对应结构体 NET_CFG_TRAFFIC_LATTICE_SCREEN_INFO
+
+ public static final int NET_EM_CFG_TRAFFIC_VOICE_BROADCAST =
+ 10001; // 智能交通语音播报配置, 对应结构体 NET_CFG_TRAFFIC_VOICE_BROADCAST_INFO
+ public static final int NET_EM_CFG_SCENE_SNAP_SHOT_WITH_RULE2 =
+ 10002; // 场景抓拍设置, 对应结构体 NET_CFG_SCENE_SNAP_SHOT_WITH_RULE2_INFO
+
+ /***********热成像相关配置******************************************************************************************/
+ public static final int NET_EM_CFG_HOT_COLD_SPOT_WARNING = 1505; // 热冷点报警配置, 对应的结构体 NET_HOT_COLD_SPOT_WARNING_INFO
+ public static final int NET_EM_CFG_SENSOR_MAINTAIN = 11100; // 热成像机芯维护配置,对应结构体 NET_CFG_SENSOR_MAINTAIN
+ public static final int NET_EM_CFG_TILT_LIMIT = 11101; // 激光测距俯仰角限制,对应结构体 NET_CFG_TILT_LIMIT
+ public static final int NET_EM_CFG_RADIO_REGULATOR = 11102; // 人体测温标准黑体配置, 对应结构体 NET_CFG_RADIO_REGULATOR,通道号不能为-1
+ public static final int NET_EM_CFG_HUMAN_THERM_CALIBRATE = 11103;// 人体测温标定信息, 对应结构体 NET_CFG_HUMAN_THERM_CALLBRATE_INFO ,通道号必须是-1
+ public static final int NET_EM_CFG_TELESCOPE_OPTIONS = 11104; // 望远镜配置,对应结构体 NET_CFG_TELESCOPE_OPTIONS_INFO
+ public static final int NET_EM_CFG_ENVIRONMENT_THERM_INFO = 11105; // 环境温度信息(热成像内部配置,只可读,不可设),通道号需要填热成像通道号 对应结构体 NET_CFG_ENVIRONMENT_THERM_INFO
+ public static final int NET_EM_CFG_THERMOMETRY_SHIELD = 11106; // 测温屏蔽区配置 对应结构体 NET_CFG_THERMOMETRY_SHIELD_INFO
+
+ /***********DHRS相关配置******************************************************************************************/
+ public static final int NET_EM_CFG_DHRS = 12700; // DH485串口点阵屏配置, 对应结构体 NET_CFG_DHRS
+
+ /***********录播默认配置******************************************************************************************/
+ public static final int NET_EM_CFG_COURSE_RECORD_DEFAULT_CONFIG =
+ 12100; // 录播默认配置, 对应结构体 NET_CFG_COURSE_RECORD_DEFAULT_CONFIG
+
+ public static final int NET_EM_CFG_COURSE_RECORD_UPLOAD =
+ 12101; // 录播设备支持录像文件上传配置, 对应结构体 NET_CFG_COURSE_RECORD_UPLOAD
+ /***********硬盘相关配置******************************************************************************************/
+ public static final int NET_EM_CFG_NAS_DIRECTORY = 12302; // 共享文件夹信息配置, 对应结构体 NET_CFG_NAS_DIRECTORY
+ /***********信号机相关配置******************************************************************************************/
+ public static final int NET_EM_CFG_RTSC_SCH_CROSSLIST = 14000; // 路口数据列表配置, 对应结构体NET_CFG_RTSC_SCH_CROSSLIST_INFO, 与通道无关, 通道号需填成-1
+ public static final int NET_EM_CFG_RTSC_SCH_CHANNELS = 14001; // 通道表, 对应结构体NET_CFG_RTSC_SCH_CHANNELS_INFO
+ public static final int NET_EM_CFG_RTSC_SCH_PLANS = 14002; // 周期方案表, 对应结构体NET_CFG_RTSC_SCH_PLANS_INFO, 与通道无关, 通道号需填成-1
+ public static final int NET_EM_CFG_RTSC_SCH_MANAGE = 14003; // 红绿灯调度计划列表, 对应结构体 NET_CFG_RTSC_SCH_MANAGE_INFO, 与通道无关, 通道号需填成-1
+ public static final int NET_EM_CFG_RTSC_SCH_VEHICLE_DETECTORLIST = 14004; // 检测器列表,对应结构体 NET_CFG_RTSC_SCH_VEHICLE_DETECTORLIST_INFO, 与通道无关, 通道号需填成-1
+ public static final int NET_EM_CFG_RTSC_SCH_PEDDETECTOR_LIST = 14005; // 行人检测器列表,对应结构体 NET_CFG_RTSC_SCH_PEDDETECTOR_LIST_INFO, 与通道无关, 通道号需填成-1
+ public static final int NET_EM_CFG_RTSC_SCH_PEDDESTRAIN_PRIORITY = 14006; // 行人优先智能化配置,对应结构体 NET_CFG_RTSC_SCH_PEDDESTRAIN_PRIORITY_INFO, 与通道无关, 通道号需填成-1
+ public static final int NET_EM_CFG_RTSC_SCH_OVERFLOW_CONTROL = 14007; // 溢出控制列表,对应结构体 NET_CFG_RTSC_SCH_OVERFLOW_CONTROL_INFO, 与通道无关, 通道号需填成-1
+ public static final int NET_EM_CFG_RTSC_SCH_NIGHTASK = 14008; // 夜间请求,对应结构体 NET_CFG_RTSC_SCH_NIGHTASK_INFO, 与通道无关, 通道号需填成-1
+ public static final int NET_EM_CFG_RTSC_SCH_OPTIMIZES = 14009; // 饱和度与单点自适应智能化配置,对应结构体 NET_CFG_RTSC_SCH_OPTIMIZES_INFO, 与通道无关, 通道号需填成-1
+ public static final int NET_EM_CFG_RTSC_SCH_VARLANELIST = 14010; // 可变车道列表,对应结构体 NET_CFG_RTSC_SCH_VARLANELIST_INFO, 与通道无关, 通道号需填成-1
+ public static final int NET_EM_CFG_RTSC_SCH_VARLANE_MANAGEMENT = 14011; // 可变车道调度计划列表,对应结构体 NET_CFG_RTSC_SCH_VARLANE_MANAGEMENT_INFO, 与通道无关, 通道号需填成-1
+ public static final int NET_EM_CFG_RTSC_TEMP_SCH = 14012; // 临时方案配置,对应结构体 NET_CFG_RTSC_TEMP_SCH_INFO, 与通道无关, 通道号需填成-1
+
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_ETH_STATE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_ETH_STATE.java
new file mode 100644
index 0000000..770af88
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_ETH_STATE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 有线网连接状态
+* @date 2022/08/31 14:35:19
+*/
+public enum NET_EM_ETH_STATE {
+/**
+未知
+*/
+NET_EM_ETH_UNKNOWN(0,"未知"),
+/**
+连接
+*/
+NET_EM_ETH_CONNECT(1,"连接"),
+/**
+未连接
+*/
+NET_EM_ETH_DISCONNECT(2,"未连接");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+NET_EM_ETH_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (NET_EM_ETH_STATE enumType : NET_EM_ETH_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (NET_EM_ETH_STATE enumType : NET_EM_ETH_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static NET_EM_ETH_STATE getEnum(int value) {
+ for (NET_EM_ETH_STATE e : NET_EM_ETH_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_ETH_STATE.NET_EM_ETH_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_FAILCODE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_FAILCODE.java
new file mode 100644
index 0000000..55d7ab2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_FAILCODE.java
@@ -0,0 +1,76 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 操作错误码
+ * @date 2021/3/31
+ */
+public enum NET_EM_FAILCODE {
+ NET_EM_FAILCODE_NOERROR(0, "没有错误"),
+ NET_EM_FAILCODE_UNKNOWN(1, "未知错误"),
+ NET_EM_FAILCODE_INVALID_PARAM(2, "参数错误"),
+ NET_EM_FAILCODE_INVALID_PASSWORD(3, "无效密码"),
+ NET_EM_FAILCODE_INVALID_FP(4, "无效信息数据"),
+ NET_EM_FAILCODE_INVALID_FACE(5, "无效人脸数据"),
+ NET_EM_FAILCODE_INVALID_CARD(6, "无效卡数据"),
+ NET_EM_FAILCODE_INVALID_USER(7, "无效人数据"),
+ NET_EM_FAILCODE_FAILED_GET_SUBSERVICE(8, "能力集子服务获取失败"),
+ NET_EM_FAILCODE_FAILED_GET_METHOD(9, "获取组件的方法集失败"),
+ NET_EM_FAILCODE_FAILED_GET_SUBCAPS(10, "获取资源实体能力集失败"),
+ NET_EM_FAILCODE_ERROR_INSERT_LIMIT(11, "已达插入上限"),
+ NET_EM_FAILCODE_ERROR_MAX_INSERT_RATE(12, "已达最大插入速度"),
+ NET_EM_FAILCODE_FAILED_ERASE_FP(13, "清除信息数据失败"),
+ NET_EM_FAILCODE_FAILED_ERASE_FACE(14, "清除人脸数据失败"),
+ NET_EM_FAILCODE_FAILED_ERASE_CARD(15, "清除卡数据失败"),
+ NET_EM_FAILCODE_NO_RECORD(16, "没有记录"),
+ NET_EM_FAILCODE_NOMORE_RECORD(17, "查找到最后,没有更多记录"),
+ NET_EM_FAILCODE_RECORD_ALREADY_EXISTS(18, "下发卡或信息时,数据重复"),
+ NET_EM_FAILCODE_MAX_FP_PERUSER(19, "超过个人最大信息记录数"),
+ NET_EM_FAILCODE_MAX_CARD_PERUSER(20, "超过个人最大卡片记录数"),
+ NET_EM_FAILCODE_EXCEED_MAX_PHOTOSIZE(21, "超出最大照片大小"),
+ NET_EM_FAILCODE_INVALID_USERID(22, "用户ID无效(未找到客户)"),
+ NET_EM_FAILCODE_EXTRACTFEATURE_FAIL(23, "提取人脸特征失败"),
+ NET_EM_FAILCODE_PHOTO_EXIST(24, "人脸照片已存在"),
+ NET_EM_FAILCODE_PHOTO_OVERFLOW(25, "超出最大人脸照片数"),
+ NET_EM_FAILCODE_INVALID_PHOTO_FORMAT(26, "照片格式无效"),
+ NET_EM_FAILCODE_EXCEED_ADMINISTRATOR_LIMIT(27, "超出管理员人数限制");
+ /** 错误码 */
+ private int failCode;
+ /** 对应错误信息 */
+ private String desc;
+
+ NET_EM_FAILCODE(int failCode, String desc) {
+ this.failCode = failCode;
+ this.desc = desc;
+ }
+
+ public static NET_EM_FAILCODE FailCode(int failCode) {
+ for (NET_EM_FAILCODE code : NET_EM_FAILCODE.values()) {
+ if (failCode == code.getFailCode()) {
+ return code;
+ }
+ }
+ return NET_EM_FAILCODE_UNKNOWN;
+ }
+
+ public static String FailCodeMessage(int failCode) {
+ return FailCode(failCode).getDesc();
+ }
+
+ public int getFailCode() {
+ return failCode;
+ }
+
+ public void setFailCode(int failCode) {
+ this.failCode = failCode;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_FLOW_ATTRIBUTE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_FLOW_ATTRIBUTE.java
new file mode 100644
index 0000000..8987637
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_FLOW_ATTRIBUTE.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 车道流量信息属性
+ * @since : Created in 2022/03/10 10:12
+ */
+
+public enum NET_EM_FLOW_ATTRIBUTE {
+ /**
+ *
+ */
+ EM_FLOW_ATTRIBUTE_UNKNOWN(0,""),
+ /**
+ * 流量监测
+ */
+ EM_FLOW_ATTRIBUTE_FLOW_DETECTION(1,"流量监测"),
+ /**
+ * 排队检测
+ */
+ EM_FLOW_ATTRIBUTE_QUEUE_DETECTION(2,"排队检测");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_EM_FLOW_ATTRIBUTE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EM_FLOW_ATTRIBUTE enumType : NET_EM_FLOW_ATTRIBUTE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EM_FLOW_ATTRIBUTE enumType : NET_EM_FLOW_ATTRIBUTE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_EM_FLOW_ATTRIBUTE getEnum(int value) {
+ for (NET_EM_FLOW_ATTRIBUTE e : NET_EM_FLOW_ATTRIBUTE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_FLOW_ATTRIBUTE.EM_FLOW_ATTRIBUTE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_FORMAT_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_FORMAT_TYPE.java
new file mode 100644
index 0000000..7906a95
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_FORMAT_TYPE.java
@@ -0,0 +1,63 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 码流类型
+ *
+ * @author 47040
+ * @since Created at 2021/5/26 22:09
+ */
+public enum NET_EM_FORMAT_TYPE {
+
+ EM_FORMAT_TYPE_UNKNOWN(0, "未知类型"),
+ /*主码流*/
+ EM_FORMAT_MAIN_NORMAL(1, "主码流普通编码"),
+ EM_FORMAT_MAIN_MOVEEXAMINE(2, "主码流动检编码"),
+ EM_FORMAT_MAIN_ALARM(3, "主码流报警编码"),
+
+ /*辅码流*/
+ EM_FORMAT_EXTRA1(4, "辅码流1"),
+ EM_FORMAT_EXTRA2(5, "辅码流2"),
+ EM_FORMAT_EXTRA3(6, "辅码流3");
+
+ private final int value;
+ private final String note;
+
+ NET_EM_FORMAT_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (TALK_CODING_TYPE enumType : TALK_CODING_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EM_FORMAT_TYPE enumType : NET_EM_FORMAT_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_EM_FORMAT_TYPE getEnum(int value) {
+ for (NET_EM_FORMAT_TYPE e : NET_EM_FORMAT_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_FORMAT_TYPE.EM_FORMAT_TYPE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_GET_ALARMREGION_INFO.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_GET_ALARMREGION_INFO.java
new file mode 100644
index 0000000..9e26532
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_GET_ALARMREGION_INFO.java
@@ -0,0 +1,33 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 获取的操作类型
+ * @date 2021/11/08
+ */
+public class NET_EM_GET_ALARMREGION_INFO {
+ public static final int NET_EM_GET_ALARMREGION_INFO_UNKNOWN = 0; // 未知
+ public static final int NET_EM_GET_ALARMREGION_INFO_ALARMCAPS = 1; // 获取防区能力,此时CLIENT_GetAlarmRegionInfo接口中的pstuInParam类型为NET_IN_GET_ALARMCAPS,
+ // pstuOutParam类型为NET_OUT_GET_ALARMCAPS
+ public static final int NET_EM_GET_ALARMREGION_INFO_ARMMODE = 2; // 获取布防状态,此时CLIENT_GetAlarmRegionInfo接口中的pstuInParam类型为NET_IN_GET_ALARMMODE,
+ // pstuOutParam类型为NET_OUT_GET_ALARMMODE
+ public static final int NET_EM_GET_ALARMREGION_INFO_BYPASSMODE = 3; // 获取旁路状态,此时CLIENT_GetAlarmRegionInfo接口中的pstuInParam类型为NET_IN_GET_BYPASSMODE,
+ // pstuOutParam类型为NET_OUT_GET_BYPASSMODE
+ public static final int NET_EM_GET_ALARMREGION_INFO_AREAZONES = 4; // 获取区域防区,此时CLIENT_GetAlarmRegionInfo接口中的pstuInParam类型为NET_IN_GET_AREAZONES,
+ // pstuOutParam类型为NET_OUT_GET_AREAZONES
+ public static final int NET_EM_GET_ALARMREGION_INFO_ALLINSLOTS = 5; // 获取所有的报警防区,此时CLIENT_GetAlarmRegionInfo接口中的pstuInParam类型为NET_IN_GET_ALLINSLOTS,
+ // pstuOutParam类型为NET_OUT_GET_ALLINSLOTS
+ public static final int NET_EM_GET_ALARMREGION_INFO_ALLOUTSLOTS = 6; // 获取所有的报警输出,此时CLIENT_GetAlarmRegionInfo接口中的pstuInParam类型为NET_IN_GET_ALLOUTSLOTS,
+ // pstuOutParam类型为NET_OUT_GET_ALLOUTSLOTS
+
+ public static final int NET_EM_GET_ALARMREGION_INFO_ZONECONNECTIONSSTATUS = 7; // 获取防区连接状态,此时CLIENT_GetAlarmRegionInfo接口中的pstuInParam类型为NET_IN_GET_CONNECTIONSTATUS,
+ // pstuOutParam类型为NET_OUT_GET_CONNECTIONSTATUS
+ public static final int NET_EM_GET_ALARMREGION_INFO_AREASTATUS = 8; // 获取区域状态,此时CLIENT_GetAlarmRegionInfo接口中的pstuInParam类型为NET_IN_GET_AREAS_STATUS,
+ // pstuOutParam类型为NET_OUT_GET_AREAS_STATUS
+ public static final int NET_EM_GET_ALARMREGION_INFO_OUTPUTSTATE = 9; // 获取输出状态,此时CLIENT_GetAlarmRegionInfo接口中的pstuInParam类型为NET_IN_GET_OUTPUT_STATE,
+ // pstuOutParam类型为NET_OUT_GET_OUTPUT_STATE
+ public static final int NET_EM_GET_ALARMREGION_INFO_ZONESTROUBLE = 10; // 获取防区故障信息,此时CLIENT_GetAlarmRegionInfo接口中的pstuInParam类型为NET_IN_GET_ZONES_TROUBLE,
+ // pstuOutParam类型为NET_OUT_GET_ZONES_TROUBLE
+ public static final int NET_EM_GET_ALARMREGION_INFO_CHANNELSSTATE = 11; // 获取通道状态,此时CLIENT_GetAlarmRegionInfo接口中的pstuInParam类型为NET_IN_GET_CHANNELS_STATE,
+ // pstuOutParam类型为NET_OUT_GET_CHANNELS_STATE
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_IMAGE_QUALITY.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_IMAGE_QUALITY.java
new file mode 100644
index 0000000..934598b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_IMAGE_QUALITY.java
@@ -0,0 +1,59 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 画质
+ *
+ * @author 47040
+ * @since Created at 2021/5/26 22:25
+ */
+public enum NET_EM_IMAGE_QUALITY {
+
+ EM_IMAGE_QUALITY_Q10(1, "图像质量10%"),
+ EM_IMAGE_QUALITY_Q30(2, "图像质量30%"),
+ EM_IMAGE_QUALITY_Q50(3, "图像质量50%"),
+ EM_IMAGE_QUALITY_Q60(4, "图像质量60%"),
+ EM_IMAGE_QUALITY_Q80(5, "图像质量80%"),
+ EM_IMAGE_QUALITY_Q100(6, "图像质量100%");
+
+ private final int value;
+ private final String note;
+
+ NET_EM_IMAGE_QUALITY(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EM_IMAGE_QUALITY enumType : NET_EM_IMAGE_QUALITY.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EM_IMAGE_QUALITY enumType : NET_EM_IMAGE_QUALITY.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_EM_IMAGE_QUALITY getEnum(int value) {
+ for (NET_EM_IMAGE_QUALITY e : NET_EM_IMAGE_QUALITY.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_IMAGE_QUALITY.EM_IMAGE_QUALITY_Q10;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_INTELLIPARKING_DATA_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_INTELLIPARKING_DATA_TYPE.java
new file mode 100644
index 0000000..093bb93
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_INTELLIPARKING_DATA_TYPE.java
@@ -0,0 +1,52 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 智能停车数据类型
+ * @date 2022/10/28 11:30:56
+ */
+public enum NET_EM_INTELLIPARKING_DATA_TYPE {
+ /**
+ * 数据是规划式停车场车位ID的使用情况,PlanArea字段有效
+ */
+ NET_EM_INTELLIPARKING_DATA_TYPE_PLANAREA(0, "数据是规划式停车场车位ID的使用情况,PlanArea字段有效"),
+ /**
+ * 数据是开放式停车场停车信息,OpenArea字段有效
+ */
+ NET_EM_INTELLIPARKING_DATA_TYPE_OPENAREA(1, "数据是开放式停车场停车信息,OpenArea字段有效");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_EM_INTELLIPARKING_DATA_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EM_INTELLIPARKING_DATA_TYPE enumType : NET_EM_INTELLIPARKING_DATA_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EM_INTELLIPARKING_DATA_TYPE enumType : NET_EM_INTELLIPARKING_DATA_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_LATTICE_SCREEN_BACKGROUND_MODE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LATTICE_SCREEN_BACKGROUND_MODE.java
new file mode 100644
index 0000000..dce01fd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LATTICE_SCREEN_BACKGROUND_MODE.java
@@ -0,0 +1,10 @@
+package com.netsdk.lib.enumeration;
+/** 逻辑屏背景风格模式 */
+public enum NET_EM_LATTICE_SCREEN_BACKGROUND_MODE {
+
+ NET_EM_LATTICE_SCREEN_BACKGROUND_MODE_UNKNOWN, // 未知
+ NET_EM_LATTICE_SCREEN_BACKGROUND_MODE_A, // 背景风格A
+ NET_EM_LATTICE_SCREEN_BACKGROUND_MODE_B, // 背景风格B
+ NET_EM_LATTICE_SCREEN_BACKGROUND_MODE_C, // 背景风格C
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_LATTICE_SCREEN_CONTROL_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LATTICE_SCREEN_CONTROL_TYPE.java
new file mode 100644
index 0000000..18f8117
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LATTICE_SCREEN_CONTROL_TYPE.java
@@ -0,0 +1,40 @@
+package com.netsdk.lib.enumeration;
+/** 逻辑屏控制方式 */
+public enum NET_EM_LATTICE_SCREEN_CONTROL_TYPE {
+ EM_LATTICE_SCREEN_CONTROL_TYPE_UNKNOWN (-1,"未知"), // 未知
+ EM_LATTICE_SCREEN_CONTROL_TYPE_CAMERA_CONTROL(0,"相机控制"), // 相机控制
+ EM_LATTICE_SCREEN_CONTROL_TYPE_PLATFORM_CONTROL(1,"平台控制"); // 平台控制
+ private int value;
+ private String note;
+
+ NET_EM_LATTICE_SCREEN_CONTROL_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EM_LATTICE_SCREEN_CONTROL_TYPE enumType : NET_EM_LATTICE_SCREEN_CONTROL_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EM_LATTICE_SCREEN_CONTROL_TYPE enumType : NET_EM_LATTICE_SCREEN_CONTROL_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_LATTICE_SCREEN_LOGO_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LATTICE_SCREEN_LOGO_TYPE.java
new file mode 100644
index 0000000..98e4579
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LATTICE_SCREEN_LOGO_TYPE.java
@@ -0,0 +1,8 @@
+package com.netsdk.lib.enumeration;
+
+public enum NET_EM_LATTICE_SCREEN_LOGO_TYPE {
+
+ NET_EM_LATTICE_SCREEN_LOGO_TYPE_UNKNOWN, // 未知
+ NET_EM_LATTICE_SCREEN_LOGO_TYPE_STENCIL, // 文字
+ NET_EM_LATTICE_SCREEN_LOGO_TYPE_PICTURE, // 图片
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_LATTICE_SCREEN_SHOW_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LATTICE_SCREEN_SHOW_TYPE.java
new file mode 100644
index 0000000..5b1489c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LATTICE_SCREEN_SHOW_TYPE.java
@@ -0,0 +1,44 @@
+package com.netsdk.lib.enumeration;
+/**
+ *逻辑屏显示方式
+ */
+public enum NET_EM_LATTICE_SCREEN_SHOW_TYPE {
+ EM_LATTICE_SCREEN_SHOW_TYPE_UNKNOWN (-1,"未知"), // 未知
+ EM_LATTICE_SCREEN_SHOW_TYPE_WORD_CONTROL(0,"字段控制显示"), // 字段控制显示
+ EM_LATTICE_SCREEN_SHOW_TYPE_TRUSTEESHIP_CONTROL(1,"托管显示"); // 托管显示(完全由平台自定义显示)
+
+ private int value;
+ private String note;
+
+ NET_EM_LATTICE_SCREEN_SHOW_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EM_LATTICE_SCREEN_SHOW_TYPE enumType : NET_EM_LATTICE_SCREEN_SHOW_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EM_LATTICE_SCREEN_SHOW_TYPE enumType : NET_EM_LATTICE_SCREEN_SHOW_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
+
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_LOGIC_CHANNEL.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LOGIC_CHANNEL.java
new file mode 100644
index 0000000..8e17e6b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LOGIC_CHANNEL.java
@@ -0,0 +1,109 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 逻辑通道号
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/18 9:44
+ */
+public enum NET_EM_LOGIC_CHANNEL {
+
+ /**
+ * 无效
+ */
+ NET_EM_LOGIC_CHANNEL_INVALID(-1, "无效"),
+ /**
+ * 视频组合通道号
+ */
+ NET_EM_LOGIC_CHANNEL_COMPOSITE(0, "视频组合通道号"),
+ /**
+ * PPT显示逻辑通道号
+ */
+ NET_EM_LOGIC_CHANNEL_PPT(1, "PPT显示逻辑通道号"),
+ /**
+ * 板书特写逻辑通道号
+ */
+ NET_EM_LOGIC_CHANNEL_BLACKBOARD(2, "板书特写逻辑通道号"),
+ /**
+ * 学生特写逻辑通道号
+ */
+ NET_EM_LOGIC_CHANNEL_STUDENTFEATURE(3, "学生特写逻辑通道号"),
+ /**
+ * 学生全景逻辑通道号
+ */
+ NET_EM_LOGIC_CHANNEL_STUDENTFULLVIEW(4, "学生全景逻辑通道号"),
+ /**
+ * 教师特写逻辑通道号
+ */
+ NET_EM_LOGIC_CHANNEL_TEACHERFEATURE(5, "教师特写逻辑通道号"),
+ /**
+ * 教师全景逻辑通道号
+ */
+ NET_EM_LOGIC_CHANNEL_TEACHERFULLVIEW(6, "教师全景逻辑通道号"),
+ /**
+ * 教师检测逻辑通道号
+ */
+ NET_EM_LOGIC_CHANNEL_TEACHERDETECT(7, "教师检测逻辑通道号"),
+ /**
+ * 板书检测逻辑通道号
+ */
+ NET_EM_LOGIC_CHANNEL_BLACKBOARDDETECT(8, "板书检测逻辑通道号"),
+ /**
+ * 板书特写1逻辑通道号
+ */
+ NET_EM_LOGIC_CHANNEL_BLACKBOARD1(9, "板书特写1逻辑通道号"),
+ /**
+ * 板书检测1逻辑通道号
+ */
+ NET_EM_LOGIC_CHANNEL_BLACKBOARDDETECT1(10, "板书检测1逻辑通道号"),
+ /**
+ * 展台显示逻辑通道号
+ */
+ NET_EM_LOGIC_CHANNEL_VISUALPRESENTER(11, "展台显示逻辑通道号"),
+ /**
+ * 视频监控逻辑通道号
+ */
+ NET_EM_LOGIC_CHANNEL_VIDEOSURVEILLANCE(12, "视频监控逻辑通道号"),
+ /**
+ * 互动会议逻辑通道号
+ */
+ NET_EM_LOGIC_CHANNEL_VIDEOCONFERENCE(13, "互动会议逻辑通道号"),
+ /**
+ * 互动演示逻辑通道
+ */
+ NET_EM_LOGIC_CHANNEL_VIDEO_PRESENTATION(14, "互动演示逻辑通道");
+
+ private int value;
+ private String note;
+
+ NET_EM_LOGIC_CHANNEL(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EM_LOGIC_CHANNEL enumType : NET_EM_LOGIC_CHANNEL.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EM_LOGIC_CHANNEL enumType : NET_EM_LOGIC_CHANNEL.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_AREATYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_AREATYPE.java
new file mode 100644
index 0000000..61716e3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_AREATYPE.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.enumeration;
+
+
+public enum NET_EM_LXSJ_AREATYPE {
+/**未知*/
+NET_EM_LXSJ_AREATYPE_UNKNOWN(-1,"未知"),
+/**0- 静态*/
+NET_EM_LXSJ_AREATYPE_STATIC_TYPE(0,"0- 静态"),
+/**1- 动态*/
+NET_EM_LXSJ_AREATYPE_DYNAMIC_TYPE(1,"1- 动态");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+NET_EM_LXSJ_AREATYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (NET_EM_LXSJ_AREATYPE enumType : NET_EM_LXSJ_AREATYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (NET_EM_LXSJ_AREATYPE enumType : NET_EM_LXSJ_AREATYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static NET_EM_LXSJ_AREATYPE getEnum(int value) {
+ for (NET_EM_LXSJ_AREATYPE e :NET_EM_LXSJ_AREATYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_LXSJ_AREATYPE.NET_EM_LXSJ_AREATYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_COLORTYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_COLORTYPE.java
new file mode 100644
index 0000000..3302015
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_COLORTYPE.java
@@ -0,0 +1,57 @@
+package com.netsdk.lib.enumeration;
+
+
+public enum NET_EM_LXSJ_COLORTYPE {
+/**未知*/
+NET_EM_LXSJ_COLORTYPE_UNKNOWN(-1,"未知"),
+/**单色*/
+NET_EM_LXSJ_COLORTYPE_SINGLE_COLOR(1,"单色"),
+/**双色*/
+NET_EM_LXSJ_COLORTYPE_DOUBLE_COLOR(2,"双色"),
+/**三色*/
+NET_EM_LXSJ_COLORTYPE_THREE_COLOR(3,"三色");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+NET_EM_LXSJ_COLORTYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (NET_EM_LXSJ_COLORTYPE enumType : NET_EM_LXSJ_COLORTYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (NET_EM_LXSJ_COLORTYPE enumType : NET_EM_LXSJ_COLORTYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static NET_EM_LXSJ_COLORTYPE getEnum(int value) {
+ for (NET_EM_LXSJ_COLORTYPE e : NET_EM_LXSJ_COLORTYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_LXSJ_COLORTYPE.NET_EM_LXSJ_COLORTYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_DISPLAYTYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_DISPLAYTYPE.java
new file mode 100644
index 0000000..e160ea2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_DISPLAYTYPE.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.enumeration;
+
+
+public enum NET_EM_LXSJ_DISPLAYTYPE {
+/**未知*/
+NET_EM_LXSJ_DISPLAYTYPE_UNKNOWN(-1,"未知"),
+/**0- 背景*/
+NET_EM_LXSJ_DISPLAYTYPE_BACK_TYPE(0,"0- 背景"),
+/**1- 前景*/
+NET_EM_LXSJ_DISPLAYTYPE_FRONT_TYPE(1,"1- 前景");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+NET_EM_LXSJ_DISPLAYTYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (NET_EM_LXSJ_DISPLAYTYPE enumType : NET_EM_LXSJ_DISPLAYTYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (NET_EM_LXSJ_DISPLAYTYPE enumType : NET_EM_LXSJ_DISPLAYTYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static NET_EM_LXSJ_DISPLAYTYPE getEnum(int value) {
+ for (NET_EM_LXSJ_DISPLAYTYPE e : NET_EM_LXSJ_DISPLAYTYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_LXSJ_DISPLAYTYPE.NET_EM_LXSJ_DISPLAYTYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_ELEM_NAMETYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_ELEM_NAMETYPE.java
new file mode 100644
index 0000000..4f95a95
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_ELEM_NAMETYPE.java
@@ -0,0 +1,63 @@
+package com.netsdk.lib.enumeration;
+
+
+public enum NET_EM_LXSJ_ELEM_NAMETYPE {
+/**未知*/
+NET_EM_LXSJ_ELEM_NAMETYPE_UNKNOWN(-1,"未知"),
+/**0-分隔符*/
+NET_EM_LXSJ_ELEM_NAMETYPE_SEPERATER(0,"0-分隔符"),
+/**1-换行符*/
+NET_EM_LXSJ_ELEM_NAMETYPE_NEWLINE(1,"1-换行符"),
+/**2-车牌*/
+NET_EM_LXSJ_ELEM_NAMETYPE_PLATE(2,"2-车牌"),
+/**3-违章信息*/
+NET_EM_LXSJ_ELEM_NAMETYPE_VIOLATIONINFO(3,"3-违章信息"),
+/**4-速度*/
+NET_EM_LXSJ_ELEM_NAMETYPE_SPEED(4,"4-速度"),
+/**5-自定义项*/
+NET_EM_LXSJ_ELEM_NAMETYPE_CUSTOM(5,"5-自定义项");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+NET_EM_LXSJ_ELEM_NAMETYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (NET_EM_LXSJ_ELEM_NAMETYPE enumType : NET_EM_LXSJ_ELEM_NAMETYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (NET_EM_LXSJ_ELEM_NAMETYPE enumType : NET_EM_LXSJ_ELEM_NAMETYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static NET_EM_LXSJ_ELEM_NAMETYPE getEnum(int value) {
+ for (NET_EM_LXSJ_ELEM_NAMETYPE e : NET_EM_LXSJ_ELEM_NAMETYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_LXSJ_ELEM_NAMETYPE.NET_EM_LXSJ_ELEM_NAMETYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_FONTCOLOR.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_FONTCOLOR.java
new file mode 100644
index 0000000..9416430
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_FONTCOLOR.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.enumeration;
+
+
+public enum NET_EM_LXSJ_FONTCOLOR {
+/**未知*/
+NET_EM_LXSJ_FONTCOLOR_UNKNOWN(-1,"未知"),
+/**0-红灯、绿灯、蓝灯都不亮*/
+NET_EM_LXSJ_FONTCOLOR_R0_G0_B0(0,"0-红灯、绿灯、蓝灯都不亮"),
+/**1-红灯亮、绿灯不亮、蓝灯不亮*/
+NET_EM_LXSJ_FONTCOLOR_R1_G0_B0(1,"1-红灯亮、绿灯不亮、蓝灯不亮"),
+/**2-红灯不亮、绿灯亮、蓝灯不亮*/
+NET_EM_LXSJ_FONTCOLOR_R0_G1_B0(2,"2-红灯不亮、绿灯亮、蓝灯不亮"),
+/**3-红灯亮、绿灯亮、蓝灯不亮*/
+NET_EM_LXSJ_FONTCOLOR_R1_G1_B0(3,"3-红灯亮、绿灯亮、蓝灯不亮"),
+/**4-红灯不亮、绿灯不亮、蓝灯亮*/
+NET_EM_LXSJ_FONTCOLOR_R0_G0_B1(4,"4-红灯不亮、绿灯不亮、蓝灯亮"),
+/**5-红灯亮、绿灯不亮、蓝灯亮*/
+NET_EM_LXSJ_FONTCOLOR_R1_G0_B1(5,"5-红灯亮、绿灯不亮、蓝灯亮"),
+/**6-红灯不亮、绿灯亮、蓝灯不亮*/
+NET_EM_LXSJ_FONTCOLOR_R0_G1_B1(6,"6-红灯不亮、绿灯亮、蓝灯不亮"),
+/**7-红灯、绿灯、蓝灯全亮*/
+NET_EM_LXSJ_FONTCOLOR_R1_G1_B(7,"7-红灯、绿灯、蓝灯全亮");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+NET_EM_LXSJ_FONTCOLOR(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (NET_EM_LXSJ_FONTCOLOR enumType : NET_EM_LXSJ_FONTCOLOR.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (NET_EM_LXSJ_FONTCOLOR enumType : NET_EM_LXSJ_FONTCOLOR.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static NET_EM_LXSJ_FONTCOLOR getEnum(int value) {
+ for (NET_EM_LXSJ_FONTCOLOR e : NET_EM_LXSJ_FONTCOLOR.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_LXSJ_FONTCOLOR.NET_EM_LXSJ_FONTCOLOR_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_FONTSIZE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_FONTSIZE.java
new file mode 100644
index 0000000..75b9bef
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_FONTSIZE.java
@@ -0,0 +1,57 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 文字大小(字高宽点数)
+ */
+public enum NET_EM_LXSJ_FONTSIZE {
+/**未知*/
+NET_EM_LXSJ_FONTSIZE_UNKNOWN(-1,"未知"),
+/**16点阵*/
+NET_EM_LXSJ_FONTSIZE_16(16,"16点阵"),
+/**32点阵*/
+NET_EM_LXSJ_FONTSIZE_32(32,"32点阵");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+NET_EM_LXSJ_FONTSIZE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (NET_EM_LXSJ_FONTSIZE enumType : NET_EM_LXSJ_FONTSIZE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (NET_EM_LXSJ_FONTSIZE enumType : NET_EM_LXSJ_FONTSIZE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static NET_EM_LXSJ_FONTSIZE getEnum(int value) {
+ for (NET_EM_LXSJ_FONTSIZE e : NET_EM_LXSJ_FONTSIZE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_LXSJ_FONTSIZE.NET_EM_LXSJ_FONTSIZE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_SHOWMODE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_SHOWMODE.java
new file mode 100644
index 0000000..f67264f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_SHOWMODE.java
@@ -0,0 +1,71 @@
+package com.netsdk.lib.enumeration;
+
+
+public enum NET_EM_LXSJ_SHOWMODE {
+/**未知*/
+NET_EM_LXSJ_SHOWMODE_UNKNOWN(-1,"未知"),
+/**立即显示*/
+NET_EM_LXSJ_SHOWMODE_IMMEDIATELY(1,"立即显示"),
+/**向左移动*/
+NET_EM_LXSJ_SHOWMODE_TO_LEFT(2,"向左移动"),
+/**向上移动*/
+NET_EM_LXSJ_SHOWMODE_TO_TOP(3,"向上移动"),
+/**向右移动*/
+NET_EM_LXSJ_SHOWMODE_TO_RIGHT(4,"向右移动"),
+/**向下移动*/
+NET_EM_LXSJ_SHOWMODE_TO_BOTTOM(5,"向下移动"),
+/**闪烁*/
+NET_EM_LXSJ_SHOWMODE_BLINK(6,"闪烁"),
+/**向上连移*/
+NET_EM_LXSJ_SHOWMODE_TO_TOP_CONTINUOUS(94,"向上连移"),
+/**向下连移*/
+NET_EM_LXSJ_SHOWMODE_TO_BOTTOM_CONTINUOUS(95,"向下连移"),
+/**向右连移*/
+NET_EM_LXSJ_SHOWMODE_TO_RIGHT_CONTINUOUS(96,"向右连移"),
+/**向左连移*/
+NET_EM_LXSJ_SHOWMODE_TO_LEFT_CONTINUOUS(97,"向左连移");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+NET_EM_LXSJ_SHOWMODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (NET_EM_LXSJ_SHOWMODE enumType : NET_EM_LXSJ_SHOWMODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (NET_EM_LXSJ_SHOWMODE enumType : NET_EM_LXSJ_SHOWMODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static NET_EM_LXSJ_SHOWMODE getEnum(int value) {
+ for (NET_EM_LXSJ_SHOWMODE e : NET_EM_LXSJ_SHOWMODE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_LXSJ_SHOWMODE.NET_EM_LXSJ_SHOWMODE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_TRANSMODE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_TRANSMODE.java
new file mode 100644
index 0000000..e0b60e7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_LXSJ_TRANSMODE.java
@@ -0,0 +1,54 @@
+package com.netsdk.lib.enumeration;
+
+public enum NET_EM_LXSJ_TRANSMODE {
+ /**未知*/
+ NET_EM_LXSJ_TRANSMODE_UNKNOWN(-1,"未知"),
+ /**TCP方式*/
+ NET_EM_LXSJ_TRANSMODE_TCP(0,"TCP方式"),
+ /**UDP方式*/
+ NET_EM_LXSJ_TRANSMODE_UD(1,"UDP方式");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_EM_LXSJ_TRANSMODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EM_LXSJ_TRANSMODE enumType : NET_EM_LXSJ_TRANSMODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EM_LXSJ_TRANSMODE enumType : NET_EM_LXSJ_TRANSMODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_EM_LXSJ_TRANSMODE getEnum(int value) {
+ for (NET_EM_LXSJ_TRANSMODE e : NET_EM_LXSJ_TRANSMODE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_LXSJ_TRANSMODE.NET_EM_LXSJ_TRANSMODE_UNKNOWN;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_MASK_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_MASK_TYPE.java
new file mode 100644
index 0000000..0a0b14f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_MASK_TYPE.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.enumeration;/**
+ * @author 47081
+ * @descriptio
+ * @date 2020/11/9
+ * @version 1.0
+ */
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 遮挡块形状类型
+ * @date 2020/11/9
+ */
+public enum NET_EM_MASK_TYPE {
+ /**
+ * 未知
+ */
+ NET_EM_MASK_UNKNOWN,
+ /**
+ * 矩形
+ */
+ NET_EM_MASK_RECT,
+ /**
+ * 多边形
+ */
+ NET_EM_MASK_POLYGON,
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_MOSAIC_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_MOSAIC_TYPE.java
new file mode 100644
index 0000000..38428ca
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_MOSAIC_TYPE.java
@@ -0,0 +1,54 @@
+package com.netsdk.lib.enumeration;/**
+ * @author 47081
+ * @descriptio
+ * @date 2020/11/9
+ * @version 1.0
+ */
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 马赛克类型
+ * @date 2020/11/9
+ */
+public enum NET_EM_MOSAIC_TYPE {
+ NET_EM_MOSAIC_UNKNOWN(0, "未知"),
+ NET_EM_MOSAIC_8(8, "[8x8大小] 马赛克"),
+ NET_EM_MOSAIC_16(16, "[16x16大小] 马赛克"),
+
+ NET_EM_MOSAIC_24(24, "[24x24大小] 马赛克"),
+ NET_EM_MOSAIC_32(32, "[32x32大小] 马赛克");
+
+ private NET_EM_MOSAIC_TYPE(int type, String desc) {
+ this.type = type;
+ this.desc = desc;
+ }
+
+ private int type;
+ private String desc;
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+
+ public static NET_EM_MOSAIC_TYPE getMosaicType(int type){
+ for (NET_EM_MOSAIC_TYPE mosaic:NET_EM_MOSAIC_TYPE.values()) {
+ if(type==mosaic.getType()){
+ return mosaic;
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_OFFLINE_CALL_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_OFFLINE_CALL_TYPE.java
new file mode 100644
index 0000000..59c0c1c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_OFFLINE_CALL_TYPE.java
@@ -0,0 +1,42 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 平台呼出类型
+ * @date 2021/2/22
+ */
+public enum NET_EM_OFFLINE_CALL_TYPE {
+ /** 未知 */
+ NET_EM_OFFLINE_CALL_UNKNOWN(-1, "未知"),
+ /** 在线呼出 */
+ NET_EM_OFFLINE_CALL_ONLINECALL(0, "在线呼出"),
+ /** 断线呼出 */
+ NET_EM_OFFLINE_CALL_OFFLINECALL(1, "断线呼出"),
+ /** 其他 */
+ NET_EM_OFFLINE_CALL_NONE(255, "其他");
+ private int type;
+ private String desc;
+
+ NET_EM_OFFLINE_CALL_TYPE(int type, String desc) {
+ this.type = type;
+ this.desc = desc;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public static NET_EM_OFFLINE_CALL_TYPE getOfflineCallType(int type) {
+ for (NET_EM_OFFLINE_CALL_TYPE offlineCall : NET_EM_OFFLINE_CALL_TYPE.values()) {
+ if (offlineCall.type == type) {
+ return offlineCall;
+ }
+ }
+ return NET_EM_OFFLINE_CALL_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_OVER_FLOW_STATE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_OVER_FLOW_STATE.java
new file mode 100644
index 0000000..efa5f42
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_OVER_FLOW_STATE.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 车辆排队长度溢出状态
+ * @since : Created in 2022/03/10 10:12
+ */
+
+public enum NET_EM_OVER_FLOW_STATE {
+ /**
+ * 状态未知
+ */
+ EM_OVER_FLOW_STATE_UNKNOWN(0,"状态未知"),
+ /**
+ * 未溢出
+ */
+ EM_OVER_FLOW_STATE_NOT_OVERFLOW(1,"未溢出"),
+ /**
+ * 溢出
+ */
+ EM_OVER_FLOW_STATE_OVERFLOW(2,"溢出");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_EM_OVER_FLOW_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EM_OVER_FLOW_STATE enumType : NET_EM_OVER_FLOW_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EM_OVER_FLOW_STATE enumType : NET_EM_OVER_FLOW_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_EM_OVER_FLOW_STATE getEnum(int value) {
+ for (NET_EM_OVER_FLOW_STATE e : NET_EM_OVER_FLOW_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_OVER_FLOW_STATE.EM_OVER_FLOW_STATE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_POWER_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_POWER_TYPE.java
new file mode 100644
index 0000000..303de9c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_POWER_TYPE.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 供电类型
+* @date 2022/09/01 15:11:24
+*/
+public enum NET_EM_POWER_TYPE {
+/**
+未知
+*/
+NET_EM_POWER_TYPE_UNKNOWN(-1,"未知"),
+/**
+电源适配器
+*/
+NET_EM_POWER_TYPE_POWERADAPTER(0,"电源适配器"),
+/**
+电池
+*/
+NET_EM_POWER_TYPE_BATTERY(1,"电池"),
+/**
+电池+电源适配器
+*/
+NET_EM_POWER_TYPE_BATTERY_AND_POWERADAPTER(2,"电池+电源适配器");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+NET_EM_POWER_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (NET_EM_POWER_TYPE enumType : NET_EM_POWER_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (NET_EM_POWER_TYPE enumType : NET_EM_POWER_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static NET_EM_POWER_TYPE getEnum(int value) {
+ for (NET_EM_POWER_TYPE e : NET_EM_POWER_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_POWER_TYPE.NET_EM_POWER_TYPE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_RADAR_RFIDCARD_ACTION.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_RADAR_RFIDCARD_ACTION.java
new file mode 100644
index 0000000..6463768
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_RADAR_RFIDCARD_ACTION.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 卡片行为
+ * @since : Created in 2022/02/11 15:37
+ */
+
+public enum NET_EM_RADAR_RFIDCARD_ACTION {
+ /**
+ * 未知
+ */
+ EM_RADAR_RFIDCARD_ACTION_UNKNOWN(0,"未知"),
+ /**
+ * 卡片离开
+ */
+ EM_RADAR_RFIDCARD_ACTION_LEAVE(1,"卡片离开"),
+ /**
+ * 卡片进入
+ */
+ EM_RADAR_RFIDCARD_ACTION_ENTER(2,"卡片进入");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_EM_RADAR_RFIDCARD_ACTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EM_RADAR_RFIDCARD_ACTION enumType : NET_EM_RADAR_RFIDCARD_ACTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EM_RADAR_RFIDCARD_ACTION enumType : NET_EM_RADAR_RFIDCARD_ACTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_EM_RADAR_RFIDCARD_ACTION getEnum(int value) {
+ for (NET_EM_RADAR_RFIDCARD_ACTION e : NET_EM_RADAR_RFIDCARD_ACTION.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_RADAR_RFIDCARD_ACTION.EM_RADAR_RFIDCARD_ACTION_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_RECORD_MODE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_RECORD_MODE.java
new file mode 100644
index 0000000..19870f9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_RECORD_MODE.java
@@ -0,0 +1,65 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 录像模式
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/28 15:39
+ */
+public enum NET_EM_RECORD_MODE {
+ /**
+ * 未知
+ */
+ NET_EM_RECORD_MODE_UNKNOWN(0, "未知"),
+ /**
+ * 课程录像模式
+ */
+ NET_EM_RECORD_MODE_COURSE(1, "课程录像模式"),
+ /**
+ * 普通模式
+ */
+ NET_EM_RECORD_MODE_NORMAL(2, "普通模式");
+
+ private int value;
+ private String note;
+
+ NET_EM_RECORD_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EM_RECORD_MODE enumType : NET_EM_RECORD_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EM_RECORD_MODE enumType : NET_EM_RECORD_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_EM_RECORD_MODE getEnum(int value) {
+ for (NET_EM_RECORD_MODE e : NET_EM_RECORD_MODE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_RECORD_MODE.NET_EM_RECORD_MODE_UNKNOWN;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_SCENEDETECTION_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_SCENEDETECTION_TYPE.java
new file mode 100644
index 0000000..ada9979
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_SCENEDETECTION_TYPE.java
@@ -0,0 +1,38 @@
+package com.netsdk.lib.enumeration;
+/**
+ * @description 烟雾/火焰检测场景
+ * @author 119178
+ * @date 2021/3/11
+ */
+public enum NET_EM_SCENEDETECTION_TYPE {
+ /**
+ * 未知
+ */
+ NET_EM_SCENEDETECTION_UNKNOWN (0),
+ /**
+ * 室内场景
+ */
+ NET_EM_SCENEDETECTION_INDOORSCENE (1),
+ /**
+ * 室内场景
+ */
+ NET_EM_SCENEDETECTION_OUTDOORSCENE(2),
+ /**
+ * 交通隧道场景
+ */
+ NET_EM_SCENEDETECTION_TUNNEL(3),
+ /**
+ * 森林场景
+ */
+ NET_EM_SCENEDETECTION_FOREST(4);
+
+ private int id;
+
+ private NET_EM_SCENEDETECTION_TYPE(int id) {
+ this.id = id;
+ }
+
+ public int getId() {
+ return id;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_SCENE_MODE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_SCENE_MODE.java
new file mode 100644
index 0000000..053cf0c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_SCENE_MODE.java
@@ -0,0 +1,81 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 布防的情景模式
+ * @date 2023/03/15 16:05:03
+ */
+public enum NET_EM_SCENE_MODE {
+ /**
+ * 未知模式
+ */
+ NET_EM_SCENE_MODE_UNKNOWN(0, "未知模式"),
+ /**
+ * 外出模式
+ */
+ NET_EM_SCENE_MODE_OUTDOOR(1, "外出模式"),
+ /**
+ * 在家模式
+ */
+ NET_EM_SCENE_MODE_INDOOR(2, "在家模式"),
+ /**
+ * 全局模式
+ */
+ NET_EM_SCENE_MODE_WHOLE(3, "全局模式"),
+ /**
+ * 立即模式
+ */
+ NET_EM_SCENE_MODE_RIGHTNOW(4, "立即模式"),
+ /**
+ * 自动模式
+ */
+ NET_EM_SCENE_MODE_AUTO(5, "自动模式"),
+ /**
+ * 强制模式
+ */
+ NET_EM_SCENE_MODE_FORCE(6, "强制模式"),
+ /**
+ * 自定义模式
+ */
+ NET_EM_SCENE_MODE_CUSTOM(7, "自定义模式"),
+ /**
+ * 就寝模式
+ */
+ NET_EM_SCENE_MODE_SLEEPING(8, "就寝模式");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_EM_SCENE_MODE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EM_SCENE_MODE enumType : NET_EM_SCENE_MODE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EM_SCENE_MODE enumType : NET_EM_SCENE_MODE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_SCREEN_SHOW_CONTENTS.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_SCREEN_SHOW_CONTENTS.java
new file mode 100644
index 0000000..f0c070d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_SCREEN_SHOW_CONTENTS.java
@@ -0,0 +1,112 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 逻辑屏显示内容
+ * @date 2022/05/10 10:39:28
+ */
+public enum NET_EM_SCREEN_SHOW_CONTENTS {
+ /**
+ * 未知
+ */
+ EM_TRAFFIC_LATTICE_SCREEN_UNKNOWN(0, "未知"),
+ /**
+ * 车牌
+ */
+ EM_TRAFFIC_LATTICE_SCREEN_PLATENUMBE(1, "车牌"),
+ /**
+ * 系统时间
+ */
+ EM_TRAFFIC_LATTICE_SCREEN_SYSTIME(2, "系统时间"),
+ /**
+ * 停车时长
+ */
+ EM_TRAFFIC_LATTICE_SCREEN_PARKTIME(3, "停车时长"),
+ /**
+ * 车主姓名
+ */
+ EM_TRAFFIC_LATTICE_SCREEN_MASTEROFCAR(4, "车主姓名"),
+ /**
+ * 用户类型
+ */
+ EM_TRAFFIC_LATTICE_SCREEN_USERTYPE(5, "用户类型"),
+ /**
+ * 到期天数
+ */
+ EM_TRAFFIC_LATTICE_SCREEN_REMAINDAY(6, "到期天数"),
+ /**
+ * 停车费
+ */
+ EM_TRAFFIC_LATTICE_SCREEN_PARKCHARGE(7, "停车费"),
+ /**
+ * 余位数
+ */
+ EM_TRAFFIC_LATTICE_SCREEN_REMAINSPACE(8, "余位数"),
+ /**
+ * 系统日期
+ */
+ EM_TRAFFIC_LATTICE_SCREEN_SYSDATE(9, "系统日期"),
+ /**
+ * 车辆通过指示灯(红圆绿圆组合指示灯)
+ */
+ EM_TRAFFIC_LATTICE_SCREEN_PASSICONCIRCLE(10, "车辆通过指示灯(红圆绿圆组合指示灯)"),
+ /**
+ * 车辆通过指示灯(红叉绿箭组合指示灯)
+ */
+ EM_TRAFFIC_LATTICE_SCREEN_PASSICONARROW(11, "车辆通过指示灯(红叉绿箭组合指示灯)"),
+ /**
+ * 入场时间
+ */
+ EM_TRAFFIC_LATTICE_SCREEN_INTIME(12, "入场时间"),
+ /**
+ * 出场时间
+ */
+ EM_TRAFFIC_LATTICE_SCREEN_OUTTIME(13, "出场时间"),
+ /**
+ * 备注信息
+ */
+ EM_TRAFFIC_LATTICE_SCREEN_REMARKS(14, "备注信息"),
+ /**
+ * 资源文件(视频或图片)
+ */
+ EM_TRAFFIC_LATTICE_SCREEN_RESOURCE(15, "资源文件(视频或图片)"),
+ /**
+ * 自定义信息
+ */
+ EM_TRAFFIC_LATTICE_SCREEN_CUSTOM(16, "自定义信息");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_EM_SCREEN_SHOW_CONTENTS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EM_SCREEN_SHOW_CONTENTS enumType : NET_EM_SCREEN_SHOW_CONTENTS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EM_SCREEN_SHOW_CONTENTS enumType : NET_EM_SCREEN_SHOW_CONTENTS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_SDK_LOCAL_CFG_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_SDK_LOCAL_CFG_TYPE.java
new file mode 100644
index 0000000..0ceeda0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_SDK_LOCAL_CFG_TYPE.java
@@ -0,0 +1,21 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.structure.NET_CONFIG_OPENSSL_INFO;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description CLIENT_SetSDKLocalCfg/CLIENT_GetSDKLocalCfg 接口配置本地参数类型
+ * @date 2021/3/2
+ */
+public enum NET_EM_SDK_LOCAL_CFG_TYPE {
+ /**
+ * openssl库信息配置,对应结构体
+ * {@link NET_CONFIG_OPENSSL_INFO}
+ */
+ NET_SDK_LOCAL_CFG_TYPE_OPENSSL,
+ /**
+ * StreamConvertor转码库信息配置,对应结构体 NET_CONFIG_STREAMCONVERTOR_INFO
+ */
+ NET_SDK_LOCAL_CFG_TYPE_STREAMCONVERTOR
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_SET_ALARMREGION_INFO.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_SET_ALARMREGION_INFO.java
new file mode 100644
index 0000000..9d00ed5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_SET_ALARMREGION_INFO.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 设置的操作类型
+ * @date 2023/03/15 15:58:57
+ */
+public enum NET_EM_SET_ALARMREGION_INFO {
+ /**
+ * 未知
+ */
+ NET_EM_SET_ALARMREGION_INFO_UNKNOWN(0, "未知"),
+ /**
+ * 设置布防模式, 此时CLIENT_SetAlarmRegionInfo接口中的pstuInParam类型为NET_IN_SET_ALARMMODE,
+ * pstuOutParam类型为NET_OUT_SET_ALARMMODE
+ */
+ NET_EM_SET_ALARMREGION_INFO_ARMMODE(1,
+ "设置布防模式, 此时CLIENT_SetAlarmRegionInfo接口中的pstuInParam类型为NET_IN_SET_ALARMMODE, pstuOutParam类型为NET_OUT_SET_ALARMMODE"),
+ /**
+ * 设置旁路模式, 此时CLIENT_SetAlarmRegionInfo接口中的pstuInParam类型为NET_IN_SET_BYPASSMODE,
+ * pstuOutParam类型为NET_OUT_SET_BYPASSMODE
+ */
+ NET_EM_SET_ALARMREGION_INFO_BYPASSMODE(2,
+ "设置旁路模式, 此时CLIENT_SetAlarmRegionInfo接口中的pstuInParam类型为NET_IN_SET_BYPASSMODE, pstuOutParam类型为NET_OUT_SET_BYPASSMODE"),
+ /**
+ * 设置输出状态, 此时CLIENT_SetAlarmRegionInfo接口中的pstuInParam类型为NET_IN_SET_OUTPUT_STATE,
+ * pstuOutParam类型为NET_OUT_SET_OUTPUT_STATE
+ */
+ NET_EM_SET_ALARMREGION_INFO_OUTPUTSTATE(3,
+ "设置输出状态, 此时CLIENT_SetAlarmRegionInfo接口中的pstuInParam类型为NET_IN_SET_OUTPUT_STATE, pstuOutParam类型为NET_OUT_SET_OUTPUT_STATE");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_EM_SET_ALARMREGION_INFO(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EM_SET_ALARMREGION_INFO enumType : NET_EM_SET_ALARMREGION_INFO.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EM_SET_ALARMREGION_INFO enumType : NET_EM_SET_ALARMREGION_INFO.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_EM_SET_ALARMREGION_INFO getEnum(int value) {
+ for (NET_EM_SET_ALARMREGION_INFO e : NET_EM_SET_ALARMREGION_INFO.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_SET_ALARMREGION_INFO.NET_EM_SET_ALARMREGION_INFO_UNKNOWN;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_SHAPE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_SHAPE_TYPE.java
new file mode 100644
index 0000000..704cb2b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_SHAPE_TYPE.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 景物形状
+ *
+ * @author : 47040
+ * @since : Created in 2020/10/26 16:01
+ */
+public enum NET_EM_SHAPE_TYPE {
+ /**
+ * 未知
+ */
+ NET_EM_SHAPE_TYPE_UNKNOWN(-1, "未知"),
+ /**
+ * 折线形
+ */
+ NET_EM_SHAPE_TYPE_MANSARD(0, "折线形"),
+ /**
+ * 扇形
+ */
+ NET_EM_SHAPE_TYPE_SECTOR(1, "扇形");
+
+ private int value;
+ private String note;
+
+ NET_EM_SHAPE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EM_SHAPE_TYPE enumType : NET_EM_SHAPE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EM_SHAPE_TYPE enumType : NET_EM_SHAPE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_EM_SHAPE_TYPE getEnum(int value) {
+ for (NET_EM_SHAPE_TYPE e : NET_EM_SHAPE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_SHAPE_TYPE.NET_EM_SHAPE_TYPE_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_SIM_STATE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_SIM_STATE.java
new file mode 100644
index 0000000..e08f2c9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_SIM_STATE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description sim卡状态
+* @date 2022/08/31 14:35:19
+*/
+public enum NET_EM_SIM_STATE {
+/**
+未知
+*/
+NET_EM_SIM_UNKNOWN(0,"未知"),
+/**
+在线
+*/
+NET_EM_SIM_ONLINE(1,"在线"),
+/**
+离线
+*/
+NET_EM_SIM_OFFLINE(2,"离线");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+NET_EM_SIM_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (NET_EM_SIM_STATE enumType : NET_EM_SIM_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (NET_EM_SIM_STATE enumType : NET_EM_SIM_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static NET_EM_SIM_STATE getEnum(int value) {
+ for (NET_EM_SIM_STATE e : NET_EM_SIM_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_SIM_STATE.NET_EM_SIM_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_STAFF_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_STAFF_TYPE.java
new file mode 100644
index 0000000..db5a89a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_STAFF_TYPE.java
@@ -0,0 +1,35 @@
+package com.netsdk.lib.enumeration;
+/**
+ * @description 标尺信息
+ * @author 119178
+ * @date 2021/3/16
+ */
+public enum NET_EM_STAFF_TYPE {
+ NET_EM_STAFF_TYPE_ERR(0),
+ /**
+ * "Horizontal" 水平线段
+ */
+ NET_EM_STAFF_TYPE_HORIZONTAL(1),
+ /**
+ * "Vertical" 垂直线段
+ */
+ NET_EM_STAFF_TYPE_VERTICAL(2),
+ /**
+ * "Any" 任意线段
+ */
+ NET_EM_STAFF_TYPE_ANY(3),
+ /**
+ * "Cross" 垂直面交线段
+ */
+ NET_EM_STAFF_TYPE_CROSS(4);
+
+ private int id ;
+
+ private NET_EM_STAFF_TYPE(int id) {
+ this.id = id;
+ }
+
+ public int getId() {
+ return id;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_TAMPER_STATE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_TAMPER_STATE.java
new file mode 100644
index 0000000..69cf418
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_TAMPER_STATE.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 主机防拆状态
+* @date 2022/09/01 15:11:24
+*/
+public enum NET_EM_TAMPER_STATE {
+/**
+未知
+*/
+NET_EM_TAMPER_UNKNOWN(-1,"未知"),
+/**
+未报警
+*/
+NET_EM_TAMPER_NOALARM(0,"未报警"),
+/**
+报警中
+*/
+NET_EM_TAMPER_ALARMING(1,"报警中");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+NET_EM_TAMPER_STATE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (NET_EM_TAMPER_STATE enumType : NET_EM_TAMPER_STATE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (NET_EM_TAMPER_STATE enumType : NET_EM_TAMPER_STATE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static NET_EM_TAMPER_STATE getEnum(int value) {
+ for (NET_EM_TAMPER_STATE e : NET_EM_TAMPER_STATE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_TAMPER_STATE.NET_EM_TAMPER_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_VIDEO_COMPRESSION.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_VIDEO_COMPRESSION.java
new file mode 100644
index 0000000..c9ec8c3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_VIDEO_COMPRESSION.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 视频压缩格式
+ *
+ * @author 47040
+ * @since Created at 2021/5/26 22:16
+ */
+public enum NET_EM_VIDEO_COMPRESSION {
+
+ EM_VIDEO_FORMAT_UNKNOWN(-1, "未知"),
+ EM_VIDEO_FORMAT_MPEG4(0, "MPEG4"),
+ EM_VIDEO_FORMAT_MS_MPEG4(1, "MS-MPEG4"),
+ EM_VIDEO_FORMAT_MPEG2(2, "MPEG2"),
+ EM_VIDEO_FORMAT_MPEG1(3, "MPEG1"),
+ EM_VIDEO_FORMAT_H263(4, "H.263"),
+ EM_VIDEO_FORMAT_MJPG(5, "MJPG"),
+ EM_VIDEO_FORMAT_FCC_MPEG4(6, "FCC-MPEG4"),
+ EM_VIDEO_FORMAT_H264(7, "H.264"),
+ EM_VIDEO_FORMAT_H265(8, "H.265"),
+ EM_VIDEO_FORMAT_SVAC(9, "SVAC");
+
+ private final int value;
+ private final String note;
+
+ NET_EM_VIDEO_COMPRESSION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EM_VIDEO_COMPRESSION enumType : NET_EM_VIDEO_COMPRESSION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EM_VIDEO_COMPRESSION enumType : NET_EM_VIDEO_COMPRESSION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_EM_VIDEO_COMPRESSION getEnum(int value) {
+ for (NET_EM_VIDEO_COMPRESSION e : NET_EM_VIDEO_COMPRESSION.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EM_VIDEO_COMPRESSION.EM_VIDEO_FORMAT_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_VS_DATA_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_VS_DATA_TYPE.java
new file mode 100644
index 0000000..b9aa342
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_VS_DATA_TYPE.java
@@ -0,0 +1,48 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 数据类型
+ * @date 2022/10/28 11:06:44
+ */
+public enum NET_EM_VS_DATA_TYPE {
+ /**
+ * 数据是当前人数的横坐标
+ */
+ NET_EM_VS_DATA_TYPE_X(0, "数据是当前人数的横坐标");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_EM_VS_DATA_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EM_VS_DATA_TYPE enumType : NET_EM_VS_DATA_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EM_VS_DATA_TYPE enumType : NET_EM_VS_DATA_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EM_VS_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EM_VS_TYPE.java
new file mode 100644
index 0000000..5e777a3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EM_VS_TYPE.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 业务类型
+ * @date 2022/10/28 10:46:07
+ */
+public enum NET_EM_VS_TYPE {
+ /**
+ * 活跃度分析实时数据,对应 NET_VIDEOSTAT_SUMMARY_STEREO
+ */
+ NET_EM_VS_TYPE_ACTIVITY_ANALYSE(0, "活跃度分析实时数据,对应 NET_VIDEOSTAT_SUMMARY_STEREO"),
+ /**
+ * 人群分布图报表实时数据,对应 NET_VIDEOSTAT_CROWD_DISTRI_MAP
+ */
+ NET_EM_VS_TYPE_CROWD_DISTRI_MAP(1, "人群分布图报表实时数据,对应 NET_VIDEOSTAT_CROWD_DISTRI_MAP"),
+ /**
+ * 智能停车实时数据,对应 NET_VIDEOSTAT_SUMMARY_INTELLIPARKING
+ */
+ NET_EM_VS_TYPE_INTELLIG_PARKING(3, "智能停车实时数据,对应 NET_VIDEOSTAT_SUMMARY_INTELLIPARKING"),
+ /**
+ * 抬头检测周期上报数据, 对应 NET_VIDEOSTAT_SUMMARY_HEAD_LIFT_DETECTION
+ */
+ NET_EM_VS_TYPE_HEAD_LIFT_DETECTION(4, "抬头检测周期上报数据, 对应 NET_VIDEOSTAT_SUMMARY_HEAD_LIFT_DETECTION"),
+ /**
+ * 贮柜储量检测实时上报数据, 对应 NET_VIDEOSTAT_SUMMARY_TANK_CAPACITY_DETECTION
+ */
+ NET_EM_VS_TYPE_TANK_CAPACITY_DETECTION(5, "贮柜储量检测实时上报数据, 对应 NET_VIDEOSTAT_SUMMARY_TANK_CAPACITY_DETECTION");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_EM_VS_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EM_VS_TYPE enumType : NET_EM_VS_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EM_VS_TYPE enumType : NET_EM_VS_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_ENUM_INPUT_CHANNEL_MEDIA.java b/src/main/java/com/netsdk/lib/enumeration/NET_ENUM_INPUT_CHANNEL_MEDIA.java
new file mode 100644
index 0000000..a332b9f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_ENUM_INPUT_CHANNEL_MEDIA.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 输入媒体介质
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/28 16:05
+ */
+public enum NET_ENUM_INPUT_CHANNEL_MEDIA {
+ /**
+ * 未知
+ */
+ NET_ENUM_INPUT_MEDIA_UNKNOWN(0, "未知"),
+ /**
+ * VGA
+ */
+ NET_ENUM_INPUT_MEDIA_VGA(1, "VGA"),
+ /**
+ * HDMI
+ */
+ NET_ENUM_INPUT_MEDIA_HDMI(2, "HDMI");
+
+ private int value;
+ private String note;
+
+ NET_ENUM_INPUT_CHANNEL_MEDIA(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_ENUM_INPUT_CHANNEL_MEDIA enumType : NET_ENUM_INPUT_CHANNEL_MEDIA.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_ENUM_INPUT_CHANNEL_MEDIA enumType : NET_ENUM_INPUT_CHANNEL_MEDIA.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_ENUM_INPUT_CHANNEL_MEDIA getEnum(int value) {
+ for (NET_ENUM_INPUT_CHANNEL_MEDIA e : NET_ENUM_INPUT_CHANNEL_MEDIA.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_ENUM_INPUT_CHANNEL_MEDIA.NET_ENUM_INPUT_MEDIA_UNKNOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EVENT_DEVICE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EVENT_DEVICE_TYPE.java
new file mode 100644
index 0000000..083f82f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EVENT_DEVICE_TYPE.java
@@ -0,0 +1,48 @@
+package com.netsdk.lib.enumeration;
+
+public enum NET_EVENT_DEVICE_TYPE {
+ NET_EVENT_DEVICE_TYPE_UNKOWN (0,"未知"),
+ NET_EVENT_DEVICE_TYPE_CARD(1,"卡片");
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_EVENT_DEVICE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EVENT_DEVICE_TYPE enumType : NET_EVENT_DEVICE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EVENT_DEVICE_TYPE enumType : NET_EVENT_DEVICE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_EVENT_DEVICE_TYPE getEnum(int value) {
+ for (NET_EVENT_DEVICE_TYPE e : NET_EVENT_DEVICE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EVENT_DEVICE_TYPE.NET_EVENT_DEVICE_TYPE_UNKOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EVENT_OPERATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EVENT_OPERATE_TYPE.java
new file mode 100644
index 0000000..d775f44
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EVENT_OPERATE_TYPE.java
@@ -0,0 +1,57 @@
+package com.netsdk.lib.enumeration;
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 操作类型枚举
+ * @date 2022/7/19
+ */
+public enum NET_EVENT_OPERATE_TYPE {
+ NET_EVENT_OPERATE_TYPE_UNKOWN (0, "未知"),
+ NET_EVENT_OPERATE_TYPE_ADD(1,"增加"),
+ NET_EVENT_OPERATE_TYPE_DELETE(2,"删除"),
+ NET_EVENT_OPERATE_TYPE_MODIFY(3,"修改");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_EVENT_OPERATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EVENT_OPERATE_TYPE enumType : NET_EVENT_OPERATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EVENT_OPERATE_TYPE enumType : NET_EVENT_OPERATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_EVENT_OPERATE_TYPE getEnum(int value) {
+ for (NET_EVENT_OPERATE_TYPE e : NET_EVENT_OPERATE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EVENT_OPERATE_TYPE.NET_EVENT_OPERATE_TYPE_UNKOWN;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_EVENT_USER_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_EVENT_USER_TYPE.java
new file mode 100644
index 0000000..3bf6bee
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_EVENT_USER_TYPE.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.enumeration;
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 用户类型枚举
+ * @date 2022/7/19
+ */
+public enum NET_EVENT_USER_TYPE {
+
+ NET_EVENT_USER_TYPE_UNKOWN (0, "未知"),
+ NET_EVENT_USER_TYPE_KEYPAD(1,"键盘");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_EVENT_USER_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_EVENT_USER_TYPE enumType : NET_EVENT_USER_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_EVENT_USER_TYPE enumType : NET_EVENT_USER_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_EVENT_USER_TYPE getEnum(int value) {
+ for (NET_EVENT_USER_TYPE e : NET_EVENT_USER_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_EVENT_USER_TYPE.NET_EVENT_USER_TYPE_UNKOWN;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_FLOWSTAT_DIRECTION.java b/src/main/java/com/netsdk/lib/enumeration/NET_FLOWSTAT_DIRECTION.java
new file mode 100644
index 0000000..15024dc
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_FLOWSTAT_DIRECTION.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 车辆行驶方向
+ * @since : Created in 2022/03/10 10:12
+ */
+
+public enum NET_FLOWSTAT_DIRECTION {
+ /**
+ * 兼容之前
+ */
+ DRIVING_DIR_UNKNOW(0,"兼容之前"),
+ /**
+ * 上行,即车辆离设备部署点越来越近
+ */
+ DRIVING_DIR_APPROACH(1,"上行,即车辆离设备部署点越来越近"),
+ /**
+ * 下行,即车辆离设备部署点越来越远
+ */
+ DRIVING_DIR_LEAVE(2,"下行,即车辆离设备部署点越来越远");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_FLOWSTAT_DIRECTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_FLOWSTAT_DIRECTION enumType : NET_FLOWSTAT_DIRECTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_FLOWSTAT_DIRECTION enumType : NET_FLOWSTAT_DIRECTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_FLOWSTAT_DIRECTION getEnum(int value) {
+ for (NET_FLOWSTAT_DIRECTION e : NET_FLOWSTAT_DIRECTION.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_FLOWSTAT_DIRECTION.DRIVING_DIR_UNKNOW;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_MONITORWALL_OPERATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_MONITORWALL_OPERATE_TYPE.java
new file mode 100644
index 0000000..e844fb3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_MONITORWALL_OPERATE_TYPE.java
@@ -0,0 +1,115 @@
+package com.netsdk.lib.enumeration;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.structure.*;
+
+/**
+ * 电视墙操作类型
+ * 对应接口 {@link NetSDKLib#CLIENT_OperateMonitorWall}
+ *
+ * @author : 47040
+ * @since : Created in 2020/10/19 9:11
+ */
+public enum NET_MONITORWALL_OPERATE_TYPE {
+
+ /**
+ * 添加电视墙, 对应 NET_IN_MONITORWALL_ADD 和 NET_OUT_MONITORWALL_ADD
+ */
+ NET_MONITORWALL_OPERATE_ADD(0, "添加电视墙"),
+ /**
+ * 预案轮巡控制, 对应 NET_IN_CTRL_COLLECTIONTOUR 和 NET_OUT_CTRL_COLLECTIONTOUR
+ */
+ NET_MONITORWALL_OPERATE_CTRL_TOUR(1, "预案轮巡控制"),
+ /**
+ * 获取矩阵当前状态, 对应 NET_IN_MONITORWALL_GET_STATUS 和 NET_OUT_MONITORWALL_GET_STATUS
+ */
+ NET_MONITORWALL_OPERATE_GET_STATUS(2, "获取矩阵当前状态"),
+ /**
+ * 设置预案时间表, 对应
+ * {@link NET_IN_MONITORWALL_SET_COLL_SCHD} 和 {@link NET_OUT_MONITORWALL_SET_COLL_SCHD}
+ */
+ NET_MONITORWALL_OPERATE_SET_COLL_SCHD(3, "设置预案时间表"),
+ /**
+ * 获取预案时间表, 对应
+ * {@link NET_IN_MONITORWALL_GET_COLL_SCHD} 和 {@link NET_OUT_MONITORWALL_GET_COLL_SCHD}
+ */
+ NET_MONITORWALL_OPERATE_GET_COLL_SCHD(4, "获取预案时间表"),
+ /**
+ * 删除电视墙, 对应 NET_IN_MONITORWALL_REMOVE 和 NET_OUT_MONITORWALL_REMOVE
+ */
+ NET_MONITORWALL_OPERATE_REMOVE(5, "删除电视墙"),
+ /**
+ * 设置使能, 对应
+ * {@link NET_IN_MONITORWALL_SET_ENABLE} 和 {@link NET_OUT_MONITORWALL_SET_ENABLE}
+ */
+ NET_MONITORWALL_OPERATE_SET_ENABLE(6, "设置使能"),
+ /**
+ * 获取使能, 对应
+ * {@link NET_IN_MONITORWALL_GET_ENABLE} 和 {@link NET_OUT_MONITORWALL_GET_ENABLE}
+ */
+ NET_MONITORWALL_OPERATE_GET_ENABLE(7, "获取使能"),
+ /**
+ * 电视墙是否存在, 对应 NET_IN_MONITORWALL_NAME_EXIST 和 NET_OUT_MONITORWALL_NAME_EXIST
+ */
+ NET_MONITORWALL_OPERATE_NAME_EXIST(8, "电视墙是否存在"),
+ /**
+ * 修改电视墙名称, 对应 NET_IN_MONITORWALL_RENAME 和 NET_OUT_MONITORWALL_RENAME
+ */
+ NET_MONITORWALL_OPERATE_RENAME(9, "修改电视墙名称"),
+ /**
+ * 更新已上墙的视频源URL, 对应 NET_IN_MONITORWALL_UPDATE_SOURCE_URL 和 NET_OUT_MONITORWALL_UPDATE_SOURCE_URL
+ */
+ NET_MONITORWALL_OPERATE_UPDATE_SOURCE_URL(10, "更新已上墙的视频源URL"),
+ /**
+ * 获取电视墙锁定状态, 对应 NET_IN_MONITORWALL_GET_LOCK_STATUS 和 NET_OUT_MONITORWALL_GET_LOCK_STATUS
+ */
+ NET_MONITORWALL_OPERATE_GET_LOCK_STATUS(11, "获取电视墙锁定状态"),
+ /**
+ * 锁定电视墙(自由开窗的窗口不能再移动,防止用户误操作), 对应 NET_IN_MONITORWALL_LOCK 和 NET_OUT_MONITORWAL L_LOCK
+ */
+ NET_MONITORWALL_OPERATE_LOCK(12, "锁定电视墙");
+
+ private int value;
+ private String note;
+
+ NET_MONITORWALL_OPERATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_MONITORWALL_OPERATE_TYPE enumType : NET_MONITORWALL_OPERATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_MONITORWALL_OPERATE_TYPE enumType : NET_MONITORWALL_OPERATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_MONITORWALL_OPERATE_TYPE getEnum(int value) {
+ for (NET_MONITORWALL_OPERATE_TYPE e : NET_MONITORWALL_OPERATE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_MONITORWALL_OPERATE_TYPE.NET_MONITORWALL_OPERATE_GET_STATUS;
+ }
+}
+
+
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_NOTIFY_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_NOTIFY_TYPE.java
new file mode 100644
index 0000000..182196f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_NOTIFY_TYPE.java
@@ -0,0 +1,60 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description 通知类型
+ * @date 2023/03/15 21:15:00
+ */
+public enum NET_NOTIFY_TYPE {
+ /**
+ * 未知
+ */
+ NET_NOTIFY_TYPE_UNKNOWN(0, "未知"),
+ /**
+ * 短信
+ */
+ NET_NOTIFY_TYPE_SMS(1, "短信"),
+ /**
+ * 电话
+ */
+ NET_NOTIFY_TYPE_CALL(2, "电话"),
+ /**
+ * 短信&电话
+ */
+ NET_NOTIFY_TYPE_ALL(3, "短信&电话");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_NOTIFY_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_NOTIFY_TYPE enumType : NET_NOTIFY_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_NOTIFY_TYPE enumType : NET_NOTIFY_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_RADIOMETRY_ALARMCONTION.java b/src/main/java/com/netsdk/lib/enumeration/NET_RADIOMETRY_ALARMCONTION.java
new file mode 100644
index 0000000..8b808a7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_RADIOMETRY_ALARMCONTION.java
@@ -0,0 +1,60 @@
+package com.netsdk.lib.enumeration;
+/**
+* @author 251823
+* @description 热成像测温点报警条件
+* @date 2022/06/07 14:08:52
+*/
+public enum NET_RADIOMETRY_ALARMCONTION {
+
+ /**
+ * 未知
+ */
+ NET_RADIOMETRY_ALARMCONTION_UNKNOWN(0, "未知"),
+ /**
+ * 小于
+ */
+ NET_RADIOMETRY_ALARMCONTION_BELOW(1, "小于"),
+ /**
+ * 等于
+ */
+ NET_RADIOMETRY_ALARMCONTION_MATCH(2, "等于"),
+ /**
+ * 大于
+ */
+ NET_RADIOMETRY_ALARMCONTION_ABOVE(3, "大于");
+
+ private int value;
+ private String note;
+
+ NET_RADIOMETRY_ALARMCONTION(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_RADIOMETRY_ALARMCONTION enumType : NET_RADIOMETRY_ALARMCONTION.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_RADIOMETRY_ALARMCONTION enumType : NET_RADIOMETRY_ALARMCONTION.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_RADIOMETRY_RESULT.java b/src/main/java/com/netsdk/lib/enumeration/NET_RADIOMETRY_RESULT.java
new file mode 100644
index 0000000..b1769cf
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_RADIOMETRY_RESULT.java
@@ -0,0 +1,83 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 热成像测温点报警结果值类型
+ */
+public enum NET_RADIOMETRY_RESULT {
+
+ /**
+ * 未知
+ */
+ NET_RADIOMETRY_RESULT_UNKNOWN(0, "未知"),
+ /**
+ * 具体值
+ */
+ NET_RADIOMETRY_RESULT_VAL(1, "具体值"),
+ /**
+ * 最大
+ */
+ NET_RADIOMETRY_RESULT_MAX(2, "最大"),
+ /**
+ * 最小
+ */
+ NET_RADIOMETRY_RESULT_MIN(3, "最小"),
+ /**
+ * 平均
+ */
+ NET_RADIOMETRY_RESULT_AVR(4, "平均"),
+ /**
+ * 标准
+ */
+ NET_RADIOMETRY_RESULT_STD(5, "标准"),
+ /**
+ * 中间
+ */
+ NET_RADIOMETRY_RESULT_MID(6, "中间"),
+ /**
+ * ISO
+ */
+ NET_RADIOMETRY_RESULT_ISO(7, "ISO"),
+ /**
+ * 温差
+ */
+ NET_RADIOMETRY_RESULT_DIFF(8, "温差"),
+ /**
+ * 斜率
+ */
+ NET_RADIOMETRY_RESULT_SLOPE(9, "斜率");
+
+ private int value;
+ private String note;
+
+ NET_RADIOMETRY_RESULT(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_RADIOMETRY_RESULT enumType : NET_RADIOMETRY_RESULT.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_RADIOMETRY_RESULT enumType : NET_RADIOMETRY_RESULT.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_SENSE_METHOD.java b/src/main/java/com/netsdk/lib/enumeration/NET_SENSE_METHOD.java
new file mode 100644
index 0000000..5af1b40
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_SENSE_METHOD.java
@@ -0,0 +1,274 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 传感器感应方式枚举类型
+* @date 2022/08/31 14:44:16
+*/
+public enum NET_SENSE_METHOD {
+/**
+未知类型
+*/
+NET_SENSE_UNKNOWN(-1,"未知类型"),
+/**
+门磁
+*/
+NET_SENSE_DOOR(0,"门磁"),
+/**
+被动红外
+*/
+NET_SENSE_PASSIVEINFRA(1,"被动红外"),
+/**
+气感
+*/
+NET_SENSE_GAS(2,"气感"),
+/**
+烟感
+*/
+NET_SENSE_SMOKING(3,"烟感"),
+/**
+水感
+*/
+NET_SENSE_WATER(4,"水感"),
+/**
+主动红外
+*/
+NET_SENSE_ACTIVEFRA(5,"主动红外"),
+/**
+玻璃破碎
+*/
+NET_SENSE_GLASS(6,"玻璃破碎"),
+/**
+紧急开关
+*/
+NET_SENSE_EMERGENCYSWITCH(7,"紧急开关"),
+/**
+震动
+*/
+NET_SENSE_SHOCK(8,"震动"),
+/**
+双鉴(红外+微波)
+*/
+NET_SENSE_DOUBLEMETHOD(9,"双鉴(红外+微波)"),
+/**
+三技术
+*/
+NET_SENSE_THREEMETHOD(10,"三技术"),
+/**
+温度
+*/
+NET_SENSE_TEMP(11,"温度"),
+/**
+湿度
+*/
+NET_SENSE_HUMIDITY(12,"湿度"),
+/**
+风速
+*/
+NET_SENSE_WIND(13,"风速"),
+/**
+呼叫按钮
+*/
+NET_SENSE_CALLBUTTON(14,"呼叫按钮"),
+/**
+气体压力
+*/
+NET_SENSE_GASPRESSURE(15,"气体压力"),
+/**
+燃气浓度
+*/
+NET_SENSE_GASCONCENTRATION(16,"燃气浓度"),
+/**
+气体流量
+*/
+NET_SENSE_GASFLOW(17,"气体流量"),
+/**
+其他
+*/
+NET_SENSE_OTHER(18,"其他"),
+/**
+油量检测,汽油、柴油等车辆用油检测
+*/
+NET_SENSE_OIL(19,"油量检测,汽油、柴油等车辆用油检测"),
+/**
+里程数检测
+*/
+NET_SENSE_MILEAGE(20,"里程数检测"),
+/**
+紧急按钮
+*/
+NET_SENSE_URGENCYBUTTON(21,"紧急按钮"),
+/**
+盗窃
+*/
+NET_SENSE_STEAL(22,"盗窃"),
+/**
+周界
+*/
+NET_SENSE_PERIMETER(23,"周界"),
+/**
+防拆
+*/
+NET_SENSE_PREVENTREMOVE(24,"防拆"),
+/**
+门铃
+*/
+NET_SENSE_DOORBELL(25,"门铃"),
+/**
+交流电压传感器
+*/
+NET_SENSE_ALTERVOLT(26,"交流电压传感器"),
+/**
+直流电压传感器
+*/
+NET_SENSE_DIRECTVOLT(27,"直流电压传感器"),
+/**
+交流电流传感器
+*/
+NET_SENSE_ALTERCUR(28,"交流电流传感器"),
+/**
+直流电流传感器
+*/
+NET_SENSE_DIRECTCUR(29,"直流电流传感器"),
+/**
+高新兴通用模拟量 4~20mA或0~5V
+*/
+NET_SENSE_RSUGENERAL(30,"高新兴通用模拟量 4~20mA或0~5V"),
+/**
+高新兴门禁感应
+*/
+NET_SENSE_RSUDOOR(31,"高新兴门禁感应"),
+/**
+高新兴断电感应
+*/
+NET_SENSE_RSUPOWEROFF(32,"高新兴断电感应"),
+/**
+1500温度传感器
+*/
+NET_SENSE_TEMP1500(33,"1500温度传感器"),
+/**
+DS18B20温度传感器
+*/
+NET_SENSE_TEMPDS18B20(34,"DS18B20温度传感器"),
+/**
+1500湿度传感器
+*/
+NET_SENSE_HUMIDITY1500(35,"1500湿度传感器"),
+/**
+红外报警
+*/
+NET_SENSE_INFRARED(36,"红外报警"),
+/**
+火警
+*/
+NET_SENSE_FIREALARM(37,"火警"),
+/**
+CO2浓度检测,典型值:0~5000ppm
+*/
+NET_SENSE_CO2(38,"CO2浓度检测,典型值:0~5000ppm"),
+/**
+噪音检测,典型值:30~130dB
+*/
+NET_SNESE_SOUND(39,"噪音检测,典型值:30~130dB"),
+/**
+PM2.5检测,典型值:0~1000ug/m3
+*/
+NET_SENSE_PM25(40,"PM2.5检测,典型值:0~1000ug/m3"),
+/**
+SF6浓度检测,典型值:0~3000ppm
+*/
+NET_SENSE_SF6(41,"SF6浓度检测,典型值:0~3000ppm"),
+/**
+臭氧浓度检测,典型值:0~100ppm
+*/
+NET_SENSE_O3(42,"臭氧浓度检测,典型值:0~100ppm"),
+/**
+环境光照检测,典型值:0~20000Lux
+*/
+NET_SENSE_AMBIENTLIGHT(43,"环境光照检测,典型值:0~20000Lux"),
+/**
+签入按钮
+*/
+NET_SENSE_SIGNINBUTTON(44,"签入按钮"),
+/**
+液位
+*/
+NET_SENSE_LIQUIDLEVEL(45,"液位"),
+/**
+测距
+*/
+NET_SENSE_DISTANCE(46,"测距"),
+/**
+水流量
+*/
+NET_SENSE_WATERFLOW(47,"水流量"),
+/**
+按键传感器
+*/
+NET_SENSE_KEYPRESSS(48,"按键传感器"),
+/**
+SM7820B温湿度传感器
+*/
+NET_SENSE_TEMP_AND_HUMI_SM7820B(49,"SM7820B温湿度传感器"),
+/**
+DSU666单相电子式电能表D
+*/
+NET_SENSE_WATT_HUR_DDSU666(50,"DSU666单相电子式电能表D"),
+/**
+幕帘传感器
+*/
+NET_SENSE_CURTAIN_SENSOR(51,"幕帘传感器"),
+/**
+机壳防拆
+*/
+NET_SENSE_CASEPREVENTREMOVE(52,"机壳防拆"),
+/**
+枚举类型总数
+*/
+NET_SENSE_NU(53,"枚举类型总数");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+NET_SENSE_METHOD(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (NET_SENSE_METHOD enumType : NET_SENSE_METHOD.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (NET_SENSE_METHOD enumType : NET_SENSE_METHOD.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -2;
+ }
+
+public static NET_SENSE_METHOD getEnum(int value) {
+ for (NET_SENSE_METHOD e : NET_SENSE_METHOD.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_SENSE_METHOD.NET_SENSE_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_SPLIT_OPERATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_SPLIT_OPERATE_TYPE.java
new file mode 100644
index 0000000..f1e118e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_SPLIT_OPERATE_TYPE.java
@@ -0,0 +1,169 @@
+package com.netsdk.lib.enumeration;
+
+
+import com.netsdk.lib.structure.NET_IN_SPLIT_SET_HIGHLIGHT;
+import com.netsdk.lib.structure.NET_OUT_SPLIT_SET_HIGHLIGHT;
+
+/**
+ * @author 260611
+ * @description 视频分割操作类型
+ * @date 2022/06/22 09:56:21
+ */
+public enum NET_SPLIT_OPERATE_TYPE {
+ /**
+ * 设置背景图片, 对应 NET_IN_SPLIT_SET_BACKGROUND 和 NET_OUT_SPLIT_SET_BACKBROUND
+ */
+ NET_SPLIT_OPERATE_SET_BACKGROUND(0, "设置背景图片, 对应 NET_IN_SPLIT_SET_BACKGROUND 和 NET_OUT_SPLIT_SET_BACKBROUND"),
+ /**
+ * 获取背景图片, 对应 NET_IN_SPLIT_GET_BACKGROUND 和 NET_OUT_SPLIT_GET_BACKGROUND
+ */
+ NET_SPLIT_OPERATE_GET_BACKGROUND(1, "获取背景图片, 对应 NET_IN_SPLIT_GET_BACKGROUND 和 NET_OUT_SPLIT_GET_BACKGROUND"),
+ /**
+ * 设置预拉流源, 对应 NET_IN_SPLIT_SET_PREPULLSRC 和 NET_OUT_SPLIT_SET_PREPULLSRC
+ */
+ NET_SPLIT_OPERATE_SET_PREPULLSRC(2, "设置预拉流源, 对应 NET_IN_SPLIT_SET_PREPULLSRC 和 NET_OUT_SPLIT_SET_PREPULLSRC"),
+ /**
+ * 设置源边框高亮使能开关, 对应 {@link NET_IN_SPLIT_SET_HIGHLIGHT} 和 {@link NET_OUT_SPLIT_SET_HIGHLIGHT}
+ */
+ NET_SPLIT_OPERATE_SET_HIGHLIGHT(3, "设置源边框高亮使能开关, 对应 NET_IN_SPLIT_SET_HIGHLIGHT 和 NET_OUT_SPLIT_SET_HIGHLIGHT"),
+ /**
+ * 调整窗口Z序, 对应 NET_IN_SPLIT_SET_ZORDER 和 NET_OUT_SPLIT_SET_ZORDER
+ */
+ NET_SPLIT_OPERATE_SET_ZORDER(4, "调整窗口Z序, 对应 NET_IN_SPLIT_SET_ZORDER 和 NET_OUT_SPLIT_SET_ZORDER"),
+ /**
+ * 窗口轮巡控制, 对应 NET_IN_SPLIT_SET_TOUR 和 NET_OUT_SPLIT_SET_TOUR
+ */
+ NET_SPLIT_OPERATE_SET_TOUR(5, "窗口轮巡控制, 对应 NET_IN_SPLIT_SET_TOUR 和 NET_OUT_SPLIT_SET_TOUR"),
+ /**
+ * 获取窗口轮巡状态, 对应 NET_IN_SPLIT_GET_TOUR_STATUS 和 NET_OUT_SPLIT_GET_TOUR_STATUS
+ */
+ NET_SPLIT_OPERATE_GET_TOUR_STATUS(6, "获取窗口轮巡状态, 对应 NET_IN_SPLIT_GET_TOUR_STATUS 和 NET_OUT_SPLIT_GET_TOUR_STATUS"),
+ /**
+ * 获取屏内窗口信息, 对应 NET_IN_SPLIT_GET_SCENE 和 NET_OUT_SPLIT_GET_SCENE
+ */
+ NET_SPLIT_OPERATE_GET_SCENE(7, "获取屏内窗口信息, 对应 NET_IN_SPLIT_GET_SCENE 和 NET_OUT_SPLIT_GET_SCENE"),
+ /**
+ * 批量开窗, 对应 NET_IN_SPLIT_OPEN_WINDOWS 和 NET_OUT_SPLIT_OPEN_WINDOWS
+ */
+ NET_SPLIT_OPERATE_OPEN_WINDOWS(8, "批量开窗, 对应 NET_IN_SPLIT_OPEN_WINDOWS 和 NET_OUT_SPLIT_OPEN_WINDOWS"),
+ /**
+ * 设置工作模式, 对应 NET_IN_SPLIT_SET_WORK_MODE 和 NET_OUT_SPLIT_SET_WORK_MODE
+ */
+ NET_SPLIT_OPERATE_SET_WORK_MODE(9, "设置工作模式, 对应 NET_IN_SPLIT_SET_WORK_MODE 和 NET_OUT_SPLIT_SET_WORK_MODE"),
+ /**
+ * 获取播放器实例,对应 NET_IN_SPLIT_GET_PLAYER 和 NET_OUT_SPLIT_GET_PLAYER
+ */
+ NET_SPLIT_OPERATE_GET_PLAYER(10, "获取播放器实例,对应 NET_IN_SPLIT_GET_PLAYER 和 NET_OUT_SPLIT_GET_PLAYER"),
+ /**
+ * 设置窗口工作模式,对应 NET_IN_WM_SET_WORK_MODE 和 NET_OUT_WM_SET_WORK_MODE
+ */
+ NET_WM_OPERATE_SET_WORK_MODE(11, "设置窗口工作模式,对应 NET_IN_WM_SET_WORK_MODE 和 NET_OUT_WM_SET_WORK_MODE"),
+ /**
+ * 获取窗口工作模式,对应 NET_IN_WM_GET_WORK_MODE 和 NET_OUT_WM_GET_WORK_MODE
+ */
+ NET_WM_OPERATE_GET_WORK_MODE(12, "获取窗口工作模式,对应 NET_IN_WM_GET_WORK_MODE 和 NET_OUT_WM_GET_WORK_MODE"),
+ /**
+ * 批量关窗, 对应 NET_IN_SPLIT_CLOSE_WINDOWS 和 NET_OUT_SPLIT_CLOSE_WINDOWS
+ */
+ NET_SPLIT_OPERATE_CLOSE_WINDOWS(13, "批量关窗, 对应 NET_IN_SPLIT_CLOSE_WINDOWS 和 NET_OUT_SPLIT_CLOSE_WINDOWS"),
+ /**
+ * 设置输出屏的鱼眼矫正规则 , 对应NET_IN_WM_SET_FISH_EYE_PARAM 和 NET_OUT_WM_SET_FISH_EYE_PARAM
+ */
+ NET_WM_OPERATE_SET_FISH_EYE_PARAM(14, "设置输出屏的鱼眼矫正规则 , 对应NET_IN_WM_SET_FISH_EYE_PARAM 和 NET_OUT_WM_SET_FISH_EYE_PARAM"),
+ /**
+ * 设置窗口走廊模式,对应NET_IN_WM_SET_CORRIDOR_MODE和NET_OUT_WM_SET_CORRIDOR_MODE
+ */
+ NET_WM_OPERATE_SET_CORRIDOR_MODE(15, "设置窗口走廊模式,对应NET_IN_WM_SET_CORRIDOR_MODE和NET_OUT_WM_SET_CORRIDOR_MODE"),
+ /**
+ * 获取窗口走廊模式,对应NET_IN_WM_GET_CORRIDOR_MODE和NET_OUT_WM_GET_CORRIDOR_MODE
+ */
+ NET_WM_OPERATE_GET_CORRIDOR_MODE(16, "获取窗口走廊模式,对应NET_IN_WM_GET_CORRIDOR_MODE和NET_OUT_WM_GET_CORRIDOR_MODE"),
+ /**
+ * 设置显示音量柱使能模式,对应NET_IN_WM_SET_VOLUME_COLUMN和NET_OUT_WM_SET_VOLUME_COLUMN
+ */
+ NET_WM_OPERATE_SET_VOLUME_COLUMN(17, "设置显示音量柱使能模式,对应NET_IN_WM_SET_VOLUME_COLUMN和NET_OUT_WM_SET_VOLUME_COLUMN"),
+ /**
+ * 获取显示音量柱使能模式,对应NET_IN_WM_GET_VOLUME_COLUMN和NET_OUT_WM_GET_VOLUME_COLUMN
+ */
+ NET_WM_OPERATE_GET_VOLUME_COLUMN(18, "获取显示音量柱使能模式,对应NET_IN_WM_GET_VOLUME_COLUMN和NET_OUT_WM_GET_VOLUME_COLUMN"),
+ /**
+ * 设置窗口背景图片,对应NET_IN_WM_SET_BACKGROUND和NET_OUT_WM_SET_BACKGROUND
+ */
+ NET_WM_OPERATE_SET_BACKGROUND(19, "设置窗口背景图片,对应NET_IN_WM_SET_BACKGROUND和NET_OUT_WM_SET_BACKGROUND"),
+ /**
+ * 获取窗口背景图片,对应NET_IN_WM_GET_BACKGROUND和NET_OUT_WM_GET_BACKGROUND
+ */
+ NET_WM_OPERATE_GET_BACKGROUND(20, "获取窗口背景图片,对应NET_IN_WM_GET_BACKGROUND和NET_OUT_WM_GET_BACKGROUND"),
+ /**
+ * 设置图像画面旋转模式,对应NET_IN_WM_SET_ROTATE_MODE和NET_OUT_WM_SET_ROTATE_MODE
+ */
+ NET_WM_OPERATE_SET_ROTATE_MODE(21, "设置图像画面旋转模式,对应NET_IN_WM_SET_ROTATE_MODE和NET_OUT_WM_SET_ROTATE_MODE"),
+ /**
+ * 设置视频源显示区域的模式,对应NET_IN_WM_SET_MEETING_MODE和NET_OUT_WM_SET_MEETING_MODE
+ */
+ NET_WM_OPERATE_SET_MEETING_MODE(22, "设置视频源显示区域的模式,对应NET_IN_WM_SET_MEETING_MODE和NET_OUT_WM_SET_MEETING_MODE"),
+ /**
+ * 设置锁定窗口当前位置,对应NET_IN_WM_SET_LOCK_POSITION和NET_OUT_WM_SET_LOCK_POSITION
+ */
+ NET_WM_OPERATE_SET_LOCK_POSITION(23, "设置锁定窗口当前位置,对应NET_IN_WM_SET_LOCK_POSITION和NET_OUT_WM_SET_LOCK_POSITION"),
+ /**
+ * 修改预案控制ID,对应NET_IN_WM_SET_COLLECTION_CTRL_ID和NET_OUT_WM_SET_COLLECTION_CTRL_ID
+ */
+ NET_WM_OPERATE_SET_COLLECTION_CTRL_ID(24, "修改预案控制ID,对应NET_IN_WM_SET_COLLECTION_CTRL_ID和NET_OUT_WM_SET_COLLECTION_CTRL_ID"),
+ /**
+ * 设置信号源属性,对应NET_IN_SPLIT_SET_SOURCE_ATTRIBUTE和NET_OUT_SPLIT_SET_SOURCE_ATTRIBUTE
+ */
+ NET_SPLIT_OPERATES_SET_SOURCE_ATTRIBUTE(25, "设置信号源属性,对应NET_IN_SPLIT_SET_SOURCE_ATTRIBUTE和NET_OUT_SPLIT_SET_SOURCE_ATTRIBUTE"),
+ /**
+ * 设置窗口粘附状态,对应NET_IN_SPLIT_SET_DOCK_CONTROL和NET_OUT_SPLIT_SET_DOCK_CONTROL
+ */
+ NET_SPLIT_OPERATES_SET_DOCK_CONTROL(26, "设置窗口粘附状态,对应NET_IN_SPLIT_SET_DOCK_CONTROL和NET_OUT_SPLIT_SET_DOCK_CONTROL"),
+ /**
+ * 设置窗口分割模式,对应NET_IN_WM_SET_MODE和NET_OUT_WM_SET_MODE
+ */
+ NET_WM_OPERATE_SET_MODE(27, "设置窗口分割模式,对应NET_IN_WM_SET_MODE和NET_OUT_WM_SET_MODE");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_SPLIT_OPERATE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_SPLIT_OPERATE_TYPE enumType : NET_SPLIT_OPERATE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_SPLIT_OPERATE_TYPE enumType : NET_SPLIT_OPERATE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_SPLIT_OPERATE_TYPE getEnum(int value) {
+ for (NET_SPLIT_OPERATE_TYPE e : NET_SPLIT_OPERATE_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_SPLIT_OPERATE_TYPE.NET_SPLIT_OPERATE_SET_BACKGROUND;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_TRAFFIC_JAM_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/NET_TRAFFIC_JAM_STATUS.java
new file mode 100644
index 0000000..1475593
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_TRAFFIC_JAM_STATUS.java
@@ -0,0 +1,71 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 道路拥挤状况
+ * @since : Created in 2022/03/10 10:12
+ */
+
+public enum NET_TRAFFIC_JAM_STATUS {
+ /**
+ * 未知
+ */
+ JAM_STATUS_UNKNOW(0,"未知"),
+ /**
+ * 通畅
+ */
+ JAM_STATUS_CLEAR(1,"通畅"),
+ /**
+ * 拥堵
+ */
+ JAM_STATUS_JAMMED(2,"拥堵"),
+ /**
+ * 拥堵
+ */
+ JAM_STATUS_SLOWED(3,"拥堵");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_TRAFFIC_JAM_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_TRAFFIC_JAM_STATUS enumType : NET_TRAFFIC_JAM_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_TRAFFIC_JAM_STATUS enumType : NET_TRAFFIC_JAM_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_TRAFFIC_JAM_STATUS getEnum(int value) {
+ for (NET_TRAFFIC_JAM_STATUS e : NET_TRAFFIC_JAM_STATUS.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_TRAFFIC_JAM_STATUS.JAM_STATUS_UNKNOW;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_TRAFFIC_LIGHT_STATUS.java b/src/main/java/com/netsdk/lib/enumeration/NET_TRAFFIC_LIGHT_STATUS.java
new file mode 100644
index 0000000..69e328e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_TRAFFIC_LIGHT_STATUS.java
@@ -0,0 +1,61 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 信号灯指示状态
+ *
+ * @author : 47040
+ * @since : Created in 2020/8/29 17:02
+ */
+public enum NET_TRAFFIC_LIGHT_STATUS {
+
+ /**
+ * 未知
+ */
+ LIGHT_STATUS_UNKNOWN(0, "未知"),
+ /**
+ * 红灯
+ */
+ LIGHT_STATUS_RED(1, "红灯"),
+ /**
+ * 绿灯
+ */
+ LIGHT_STATUS_GREEN(2, "绿灯"),
+ /**
+ * 黄灯
+ */
+ LIGHT_STATUS_YELLOW(3, "黄灯");
+
+ private int value;
+ private String note;
+
+ NET_TRAFFIC_LIGHT_STATUS(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_TRAFFIC_LIGHT_STATUS enumType : NET_TRAFFIC_LIGHT_STATUS.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_TRAFFIC_LIGHT_STATUS enumType : NET_TRAFFIC_LIGHT_STATUS.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_TRAFFIC_ROAD_RANK.java b/src/main/java/com/netsdk/lib/enumeration/NET_TRAFFIC_ROAD_RANK.java
new file mode 100644
index 0000000..0460e11
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_TRAFFIC_ROAD_RANK.java
@@ -0,0 +1,75 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+ * @author : 260611
+ * @description : 道路等级
+ * @since : Created in 2022/03/10 10:12
+ */
+
+public enum NET_TRAFFIC_ROAD_RANK {
+ /**
+ *
+ */
+ ROAD_RANK_UNKNOWN(0,""),
+ /**
+ * 快速路
+ */
+ ROAD_RANK_RAPID(1,"快速路"),
+ /**
+ * 主干路
+ */
+ ROAD_RANK_TRUNK(2,"主干路"),
+ /**
+ * 次干路
+ */
+ ROAD_RANK_SUBTRUNK(3,"次干路"),
+ /**
+ * 支路
+ */
+ ROAD_RANK_BRANCH(4,"支路");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_TRAFFIC_ROAD_RANK(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_TRAFFIC_ROAD_RANK enumType : NET_TRAFFIC_ROAD_RANK.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_TRAFFIC_ROAD_RANK enumType : NET_TRAFFIC_ROAD_RANK.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static NET_TRAFFIC_ROAD_RANK getEnum(int value) {
+ for (NET_TRAFFIC_ROAD_RANK e : NET_TRAFFIC_ROAD_RANK.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_TRAFFIC_ROAD_RANK.ROAD_RANK_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_VOLUME_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_VOLUME_TYPE.java
new file mode 100644
index 0000000..bf4550b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_VOLUME_TYPE.java
@@ -0,0 +1,18 @@
+package com.netsdk.lib.enumeration;
+/**
+ * @author 251823
+ * @description 卷类型枚举
+ * @date 2022/05/30
+ */
+public class NET_VOLUME_TYPE {
+ public static final int VOLUME_TYPE_ALL = 0; //所有卷
+ public static final int VOLUME_TYPE_PHYSICAL = 1; //物理卷
+ public static final int VOLUME_TYPE_RAID = 2; //Raid卷
+ public static final int VOLUME_TYPE_VOLUME_GROUP = 3; //VG虚拟卷组
+ public static final int VOLUME_TYPE_ISCSI = 4; //iSCSI卷
+ public static final int VOLUME_TYPE_INVIDUAL_PHY = 5; //独立物理卷(这个物理盘,没有加入到, RAID,虚拟卷组等等组中)
+ public static final int VOLUME_TYPE_GLOBAL_SPARE = 6; //全局热备卷
+ public static final int VOLUME_TYPE_NAS = 7; //NAS盘(包括FTP, SAMBA, NFS)
+ public static final int VOLUME_TYPE_INVIDUAL_RAID = 8; //独立RAID卷(指没有加入到,虚拟卷组等组中)
+ public static final int VOLUME_TYPE_MAX = 9;
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_WIRELESSDEV_LOWPOWER_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_WIRELESSDEV_LOWPOWER_TYPE.java
new file mode 100644
index 0000000..3d859fc
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_WIRELESSDEV_LOWPOWER_TYPE.java
@@ -0,0 +1,82 @@
+package com.netsdk.lib.enumeration;
+
+
+/**
+* @author 291189
+* @description 无线设备类型
+* @date 2022/07/19 10:21:10
+*/
+public enum NET_WIRELESSDEV_LOWPOWER_TYPE {
+/**
+未知设备
+*/
+NET_WIRELESSDEV_UNKNOWN(0,"未知设备"),
+/**
+无线遥控器
+*/
+NET_WIRELESSDEV_CONTROL(1,"无线遥控器"),
+/**
+无线防区
+*/
+NET_WIRELESSDEV_DEFENCE(2,"无线防区"),
+/**
+无线键盘
+*/
+NET_WIRELESSDEV_KEYBOARD(3,"无线键盘"),
+/**
+无线门磁 此字段协议上已废弃
+*/
+NET_WIRELESSDEV_MAGNETOMER(4,"无线门磁 此字段协议上已废弃"),
+/**
+无线警号
+*/
+NET_WIRELESSDEV_ALARMBELL(5,"无线警号"),
+/**
+智能锁
+*/
+NET_WIRELESSDEV_SMARTLOCK(6,"智能锁");
+
+private int value;
+
+private String note;
+
+public String getNote() {
+ return note;
+ }
+
+public int getValue() {
+ return value;
+ }
+
+NET_WIRELESSDEV_LOWPOWER_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+public static String getNoteByValue(int givenValue) {
+ for (NET_WIRELESSDEV_LOWPOWER_TYPE enumType : NET_WIRELESSDEV_LOWPOWER_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+public static int getValueByNote(String givenNote) {
+ for (NET_WIRELESSDEV_LOWPOWER_TYPE enumType : NET_WIRELESSDEV_LOWPOWER_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+public static NET_WIRELESSDEV_LOWPOWER_TYPE getEnum(int value) {
+ for (NET_WIRELESSDEV_LOWPOWER_TYPE e : NET_WIRELESSDEV_LOWPOWER_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return NET_WIRELESSDEV_LOWPOWER_TYPE.NET_WIRELESSDEV_UNKNOWN;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/NET_WIRELESS_DEVICE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/NET_WIRELESS_DEVICE_TYPE.java
new file mode 100644
index 0000000..c3a9f7c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/NET_WIRELESS_DEVICE_TYPE.java
@@ -0,0 +1,80 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * @author 251823
+ * @description Low Rate Wireless Personal Area Network 低速无线私域网 begin 无线设备类型
+ * @date 2023/03/16 14:52:52
+ */
+public enum NET_WIRELESS_DEVICE_TYPE {
+ /**
+
+ */
+ NET_WIRELESS_DEVICE_TYPE_UNKNOWN(0, ""),
+ /**
+ * 无线键盘
+ */
+ NET_WIRELESS_DEVICE_TYPE_KEYBOARD(1, "无线键盘"),
+ /**
+ * 无线防区
+ */
+ NET_WIRELESS_DEVICE_TYPE_DEFENCE(2, "无线防区"),
+ /**
+ * 无线遥控
+ */
+ NET_WIRELESS_DEVICE_TYPE_REMOTECONTROL(3, "无线遥控"),
+ /**
+ * 无线门磁
+ */
+ NET_WIRELESS_DEVICE_TYPE_MAGNETOMER(4, "无线门磁"),
+ /**
+ * 无线警号
+ */
+ NET_WIRELESS_DEVICE_TYPE_ALARMBELL(5, "无线警号"),
+ /**
+ * 无线插座
+ */
+ NET_WIRELESS_DEVICE_TYPE_SWITCHER(6, "无线插座"),
+ /**
+ * 无线智能锁
+ */
+ NET_WIRELESS_DEVICE_TYPE_SMARTLOCK(7, "无线智能锁"),
+ /**
+ * 无线中继器
+ */
+ NET_WIRELESS_DEVICE_TYPE_REPEATER(8, "无线中继器");
+
+ private int value;
+
+ private String note;
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ NET_WIRELESS_DEVICE_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (NET_WIRELESS_DEVICE_TYPE enumType : NET_WIRELESS_DEVICE_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (NET_WIRELESS_DEVICE_TYPE enumType : NET_WIRELESS_DEVICE_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/enumeration/REC_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/REC_TYPE.java
new file mode 100644
index 0000000..ea8e6c4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/REC_TYPE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 录象类型(定时、动态检测、报警)
+ *
+ * @author 47040
+ * @since Created at 2021/5/25 23:00
+ */
+public enum REC_TYPE {
+ NET_REC_TYPE_TIM(0, "定时"),
+ NET_REC_TYPE_MTD(1, "动态"),
+ NET_REC_TYPE_ALM(2, "报警"),
+ NET_REC_TYPE_NUM(3, "数量");
+
+ private final int value;
+ private final String note;
+
+ REC_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (REC_TYPE enumType : REC_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (REC_TYPE enumType : REC_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static REC_TYPE getEnum(int value) {
+ for (REC_TYPE e : REC_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return REC_TYPE.NET_REC_TYPE_TIM;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/SNAP_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/SNAP_TYPE.java
new file mode 100644
index 0000000..6060e8d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/SNAP_TYPE.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 抓图类型
+ *
+ * @author 47040
+ * @since Created at 2021/5/25 23:07
+ */
+public enum SNAP_TYPE {
+
+ SNAP_TYP_TIMING(0, "定时"),
+ SNAP_TYP_ALARM(1, "报警"),
+ SNAP_TYP_NUM(2, "数量");
+
+ private final int value;
+ private final String note;
+
+ SNAP_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (SNAP_TYPE enumType : SNAP_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (SNAP_TYPE enumType : SNAP_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static SNAP_TYPE getEnum(int value) {
+ for (SNAP_TYPE e : SNAP_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return SNAP_TYPE.SNAP_TYP_TIMING;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/STREAM_RATE_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/STREAM_RATE_TYPE.java
new file mode 100644
index 0000000..2cf12b3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/STREAM_RATE_TYPE.java
@@ -0,0 +1,63 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 码流支持类型
+ *
+ * @author 47040
+ * @since Created at 2021/5/26 19:42
+ */
+public enum STREAM_RATE_TYPE {
+ RATE_10(10),
+ RATE_20(20),
+ RATE_32(32),
+ RATE_48(48),
+ RATE_64(64),
+ RATE_80(80),
+ RATE_96(96),
+ RATE_128(128),
+ RATE_160(160),
+ RATE_192(192),
+ RATE_224(224),
+ RATE_256(256),
+ RATE_320(320),
+ RATE_384(384),
+ RATE_448(448),
+ RATE_512(512),
+ RATE_640(640),
+ RATE_768(768),
+ RATE_896(896),
+ RATE_1024(1024),
+ RATE_1280(1280),
+ RATE_1536(1536),
+ RATE_1792(1792),
+ RATE_2048(2048),
+ RATE_3072(3072),
+ RATE_4096(4096),
+ RATE_6144(6144),
+ RATE_8192(8192),
+ RATE_10240(10240),
+ RATE_12288(12288),
+ RATE_14336(14336),
+ RATE_16384(16384),
+ RATE_18422(18432),
+ RATE_20480(20480),
+ RATE_22528(22528);
+
+ private final int rate;
+
+ STREAM_RATE_TYPE(int rate) {
+ this.rate = rate;
+ }
+
+ public int getRate() {
+ return rate;
+ }
+
+ public static STREAM_RATE_TYPE getEnum(int value) {
+ for (STREAM_RATE_TYPE e : STREAM_RATE_TYPE.values()) {
+ if (e.getRate() == value)
+ return e;
+ }
+ return STREAM_RATE_TYPE.RATE_512;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/enumeration/TALK_CODING_TYPE.java b/src/main/java/com/netsdk/lib/enumeration/TALK_CODING_TYPE.java
new file mode 100644
index 0000000..8a9bbf9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/enumeration/TALK_CODING_TYPE.java
@@ -0,0 +1,69 @@
+package com.netsdk.lib.enumeration;
+
+/**
+ * 语音编码类型
+ *
+ * @author 47040
+ * @since Created at 2021/5/26 10:25
+ */
+public enum TALK_CODING_TYPE {
+
+ NET_TALK_DEFAULT(0, "无头PCM"),
+ NET_TALK_PCM(1, "带头PCM"),
+ NET_TALK_G711a(2, "G711a"),
+ NET_TALK_AMR(3, "AMR"),
+ NET_TALK_G711u(4, "G711u"),
+ NET_TALK_G726(5, "G726"),
+ NET_TALK_G723_53(6, "G723_53"),
+ NET_TALK_G723_63(7, "G723_63"),
+ NET_TALK_AAC(8, "AAC"),
+ NET_TALK_OGG(9, "OGG"),
+ NET_TALK_G729(10, "G729"),
+ NET_TALK_MPEG2(11, "MPEG2"),
+ NET_TALK_MPEG2_Layer2(12, "MPEG2-Layer2"),
+ NET_TALK_G722_1(13, "G.722.1"),
+ NET_TALK_ADPCM(21, "ADPCM"),
+ NET_TALK_MP3(22, "MP3");
+
+ private final int value;
+ private final String note;
+
+ TALK_CODING_TYPE(int givenValue, String note) {
+ this.value = givenValue;
+ this.note = note;
+ }
+
+ public String getNote() {
+ return note;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static String getNoteByValue(int givenValue) {
+ for (TALK_CODING_TYPE enumType : TALK_CODING_TYPE.values()) {
+ if (givenValue == enumType.getValue()) {
+ return enumType.getNote();
+ }
+ }
+ return null;
+ }
+
+ public static int getValueByNote(String givenNote) {
+ for (TALK_CODING_TYPE enumType : TALK_CODING_TYPE.values()) {
+ if (givenNote.equals(enumType.getNote())) {
+ return enumType.getValue();
+ }
+ }
+ return -1;
+ }
+
+ public static TALK_CODING_TYPE getEnum(int value) {
+ for (TALK_CODING_TYPE e : TALK_CODING_TYPE.values()) {
+ if (e.getValue() == value)
+ return e;
+ }
+ return TALK_CODING_TYPE.NET_TALK_DEFAULT;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_AREAALARM_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_AREAALARM_INFO.java
new file mode 100644
index 0000000..448dba4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_AREAALARM_INFO.java
@@ -0,0 +1,47 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 区域报警事件(对应事件 DH_ALARM_AREAALARM)
+* @date 2022/07/19 19:31:27
+*/
+public class ALARM_AREAALARM_INFO extends NetSDKLib.SdkStructure {
+/**
+区域号
+*/
+public int nAreaIndex;
+/**
+事件ID
+*/
+public int nEventID;
+/**
+事件发生的时间
+*/
+public NET_TIME_EX UTC=new NET_TIME_EX();
+/**
+名称
+*/
+public byte[] szName=new byte[128];
+/**
+防区类型 {@link com.netsdk.lib.enumeration.EM_DEFENCE_AREA_TYPE}
+*/
+public int emDefenceAreaType;
+/**
+触发的通道号
+*/
+public int nIndex;
+/**
+触发类型 {@link com.netsdk.lib.enumeration.EM_AREAALARM_TRIGGER_TYPE}
+*/
+public int emTrigerType;
+/**
+保留扩展字节
+*/
+public byte[] byReserved=new byte[1024];
+
+public ALARM_AREAALARM_INFO(){
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_AREAARM_MODECHANGE_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_AREAARM_MODECHANGE_INFO.java
new file mode 100644
index 0000000..a7d2e2a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_AREAARM_MODECHANGE_INFO.java
@@ -0,0 +1,48 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @description 区域防区模式改变事件(对应事件 DH_ALARM_AREAARM_MODECHANGE)
+ * @date 2022/07/19 10:09:08
+ */
+public class ALARM_AREAARM_MODECHANGE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 区域编号
+ */
+ public int nAreaIndex;
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX UTC = new NET_TIME_EX();
+ /**
+ * 操作方式 {@link com.netsdk.lib.enumeration.EM_AREAARM_TRIGGERMODE}
+ */
+ public int emTriggerMode;
+ /**
+ * 操作用户,仅emTriggerMode = EM_AREAARM_USER_USER时有效
+ * {@link com.netsdk.lib.enumeration.EM_AREAARM_USER}
+ */
+ public int emUser;
+ /**
+ * ID号,emTriggerMode = EM_AREAARM_TRIGGERMODE_KEYPAD 表示键盘地址;emTriggerMode
+ * =EM_AREAARM_TRIGGERMODE_REMOTECONTROL时表示遥控器编号
+ */
+ public int nID;
+ /**
+ * 布撤防状态 {@link com.netsdk.lib.enumeration.EM_ARM_STATE}
+ */
+ public int emArmState;
+ /**
+ * 保留扩展字节
+ */
+ public byte[] byReserved = new byte[1024];
+
+ public ALARM_AREAARM_MODECHANGE_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_AUDIO_ANOMALY.java b/src/main/java/com/netsdk/lib/structure/ALARM_AUDIO_ANOMALY.java
new file mode 100644
index 0000000..629ab87
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_AUDIO_ANOMALY.java
@@ -0,0 +1,39 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @description 报警事件类型DH_ALARM_AUDIO_ANOMALY(音频异常事件)对应的数据描述信息
+ * @date 2022/06/20 17:39:31
+ */
+public class ALARM_AUDIO_ANOMALY extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwStructSize;
+ /**
+ * 事件动作, 0:Start, 1:Stop
+ */
+ public int dwAction;
+ /**
+ * 音频通道号
+ */
+ public int dwChannelID;
+ /**
+ * 声音强度
+ */
+ public int nDecibel;
+ /**
+ * 声音频率
+ */
+ public int nFrequency;
+ /**
+ * 事件公共扩展字段结构体
+ */
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND();
+
+ public ALARM_AUDIO_ANOMALY() {
+ this.dwStructSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_CITIZEN_PICTURE_COMPARE_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_CITIZEN_PICTURE_COMPARE_INFO.java
new file mode 100644
index 0000000..fb742b0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_CITIZEN_PICTURE_COMPARE_INFO.java
@@ -0,0 +1,123 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.EM_CITIZENIDCARD_SEX_TYPE;
+
+import static com.netsdk.lib.NetSDKLib.*;
+
+/**
+ * 普通报警事件 -> 人证比对事件
+ *
+ * @author : 47040
+ * @since : Created in 2020/8/27 10:58
+ */
+public class ALARM_CITIZEN_PICTURE_COMPARE_INFO extends NetSDKLib.SdkStructure {
+
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX stuTime;
+ /**
+ * 人证比对结果,相似度大于等于阈值认为比对成功,1 表示成功,0 表示失败
+ */
+ public int bCompareResult;
+ /**
+ * 两张图片的相似度,单位百分比,范围[1,100]
+ */
+ public byte nSimilarity;
+ /**
+ * 检测阈值,范围[1,100]
+ */
+ public byte nThreshold;
+ /**
+ * 字节对齐
+ */
+ public byte[] byReserved1 = new byte[2];
+ /**
+ * 性别 {@link EM_CITIZENIDCARD_SEX_TYPE}
+ */
+ public int emSex;
+ /**
+ * 民族(参照DEV_EVENT_ALARM_CITIZENIDCARD_INFO的 nECType 定义)
+ */
+ public int nECType;
+ /**
+ * 居民姓名
+ */
+ public byte[] szCitizen = new byte[NET_COMMON_STRING_64];
+ /**
+ * 住址
+ */
+ public byte[] szAddress = new byte[NET_COMMON_STRING_256];
+ /**
+ * 证件号
+ */
+ public byte[] szNumber = new byte[NET_COMMON_STRING_64];
+ /**
+ * 签发机关
+ */
+ public byte[] szAuthority = new byte[NET_COMMON_STRING_256];
+ /**
+ * 出生日期(年月日)
+ */
+ public NET_TIME stuBirth;
+ /**
+ * 有效期限起始日期(年月日)
+ */
+ public NET_TIME stuValidityStart;
+ /**
+ * 该值为 1, 表示长期有效,此时 stuValidityEnd 值无意义
+ * 该值为 0, 此时 截止日期 查看 stuValidityEnd 的值
+ */
+ public int bLongTimeValidFlag;
+ /**
+ * 有效期限结束日期(年月日) bLongTimeValidFlag 为 0 时有效
+ */
+ public NET_TIME stuValidityEnd;
+ /**
+ * IC卡号
+ */
+ public byte[] szCardNo = new byte[NET_COMMON_STRING_32];
+ /**
+ * 手机号(比对时先输入手机号)
+ */
+ public byte[] szCellPhone = new byte[NET_COMMON_STRING_32];
+ /**
+ * 事件类型:0:人证比对结果 1:人证人脸采集
+ */
+ public int nEventType;
+ /**
+ * 人证人脸采集时人员ID
+ */
+ public byte[] szUserID = new byte[32];
+ /**
+ * 人脸序号
+ */
+ public int nFaceIndex;
+ /**
+ * 口罩状态 {@link EM_MASK_STATE_TYPE}
+ */
+ public int emMask;
+ /**
+ * 人脸质量评分
+ */
+ public int nScore;
+
+ /**
+ * 物理证件号(证件序列号)
+ */
+ public byte[] szIDPhysicalNumber = new byte[20];
+
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[956];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_COLDSPOT_WARNING_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_COLDSPOT_WARNING_INFO.java
new file mode 100644
index 0000000..2816893
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_COLDSPOT_WARNING_INFO.java
@@ -0,0 +1,45 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * className:ALARM_COLDSPOT_WARNING_INFO
+ * description:
+ * author:251589
+ * createTime:2021/5/12 20:53
+ *
+ * @version v1.0
+ */
+
+public class ALARM_COLDSPOT_WARNING_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 0:开始 1:停止
+ */
+ public int nAction;
+
+ /**
+ * 视频通道号
+ */
+ public int nChannelID;
+
+ /**
+ * 冷点的坐标,坐标值 0~8192
+ */
+ public NetSDKLib.NET_POINT stuCoordinate;
+
+ /**
+ * 冷点温度值
+ */
+ public float fColdSpotValue;
+
+ /**
+ * 温度单位(当前配置的温度单位),见 NET_TEMPERATURE_UNIT
+ */
+ public int nTemperatureUnit;
+
+ /**
+ * 事件公共扩展字段结构体
+ */
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND();
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_ENCLOSURE_INFO_EX.java b/src/main/java/com/netsdk/lib/structure/ALARM_ENCLOSURE_INFO_EX.java
new file mode 100644
index 0000000..9412202
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_ENCLOSURE_INFO_EX.java
@@ -0,0 +1,94 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 电子围栏报警拓展结构体
+ * @date 2022/12/06 19:32:32
+ */
+public class ALARM_ENCLOSURE_INFO_EX extends NetSDKLib.SdkStructure {
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 1:开始 2:停止
+ */
+ public int nAction;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX stuUTC = new NET_TIME_EX();
+ /**
+ * 围栏报警类型 {@link com.netsdk.lib.enumeration.EM_ENCLOSURE_TYPE_EX}
+ */
+ public int emType;
+ /**
+ * 返回详细类型个数
+ */
+ public int nActionNum;
+ /**
+ * 详细类型,参考枚举{@link com.netsdk.lib.enumeration.EM_ENCLOSURE_ALARM_TYPE_EX}
+ */
+ public int[] emAction = new int[16];
+ /**
+ * 司机编号
+ */
+ public int nDriverNo;
+ /**
+ * 围栏编号
+ */
+ public int nEnclosureID;
+ /**
+ * 经度(单位是百万分之度,范围0-360度)如东经120.178274度表示为300178274
+ */
+ public int dwLongitude;
+ /**
+ * 纬度(单位是百万分之度,范围0-180度)如北纬30.183382度表示为120183382
+ */
+ public int dwLatidude;
+ /**
+ * 限制车速
+ */
+ public int nLimitSpeed;
+ /**
+ * 当前速度
+ */
+ public int nSpeed;
+ /**
+ * 设备ID
+ */
+ public byte[] szDeviceID = new byte[32];
+ /**
+ * 出发围栏编号
+ */
+ public int nStartEnclosureID;
+ /**
+ * 目的围栏编号
+ */
+ public int nEndEnclosureID;
+ /**
+ * 出发时间,本地时间
+ */
+ public NET_TIME_EX stuStartTime = new NET_TIME_EX();
+ /**
+ * 出发时间,本地时间
+ */
+ public NET_TIME_EX stuEndTime = new NET_TIME_EX();
+ /**
+ * 本趟行驶行驶里程数,单位0.1Km
+ */
+ public int nMileage;
+ /**
+ * 趟数
+ */
+ public int nTriggerCount;
+ /**
+ * 保留
+ */
+ public byte[] szReserved = new byte[1024];
+
+ public ALARM_ENCLOSURE_INFO_EX() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_FIRE_DETECTION_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_FIRE_DETECTION_INFO.java
new file mode 100644
index 0000000..02b462c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_FIRE_DETECTION_INFO.java
@@ -0,0 +1,37 @@
+package com.netsdk.lib.structure;
+/**
+ * @author 251823
+ * @description 火警事件 (DH_ALARM_FIRE_DETECTION)
+ * @date 2020/12/21
+ */
+
+import com.netsdk.lib.NetSDKLib;
+
+public class ALARM_FIRE_DETECTION_INFO extends NetSDKLib.SdkStructure{
+
+ /**
+ * 通道号
+ * */
+ public int nChannelID;
+
+ /**
+ * 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束
+ * */
+ public int nAction;
+
+ /**
+ * 事件发生的时间
+ * */
+ public NetSDKLib.NET_TIME_EX UTC;
+
+ /**
+ * 事件公共扩展字段结构体
+ */
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND();
+
+ /**
+ * 保留字节
+ * */
+ public byte[] byReserved = new byte[1024];
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_HEATIMG_TEMPER_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_HEATIMG_TEMPER_INFO.java
new file mode 100644
index 0000000..74bd736
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_HEATIMG_TEMPER_INFO.java
@@ -0,0 +1,75 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.NET_RADIOMETRY_ALARMCONTION;
+import com.netsdk.lib.enumeration.NET_RADIOMETRY_RESULT;
+
+/**
+ * 热成像测温点温度异常报警事件(对应结构体 {@link NetSDKLib#NET_ALARM_HEATIMG_TEMPER})
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/12 16:46
+ */
+public class ALARM_HEATIMG_TEMPER_INFO extends NetSDKLib.SdkStructure {
+
+ /**
+ * 温度异常点名称 从测温规则配置项中选择
+ */
+ public byte[] szName = new byte[64];
+ /**
+ * 报警项编号
+ */
+ public int nAlarmId;
+ /**
+ * 报警结果值 fTemperatureValue 的类型,见枚举 {@link NET_RADIOMETRY_RESULT}
+ */
+ public int nResult;
+ /**
+ * 报警条件,见枚举 {@link NET_RADIOMETRY_ALARMCONTION}
+ */
+ public int nAlarmContion;
+ /**
+ * 报警温度值
+ */
+ public float fTemperatureValue;
+ /**
+ * 温度单位(当前配置的温度单位),见 {@link NetSDKLib.NET_TEMPERATURE_UNIT}
+ */
+ public int nTemperatureUnit;
+ /**
+ * 报警点的坐标 相对坐标体系,取值均为 0~8191
+ */
+ public NetSDKLib.NET_POINT stCoordinate;
+ /**
+ * 预置点
+ */
+ public int nPresetID;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 0:开始 1:停止 -1:无意义
+ */
+ public int nAction;
+ /**
+ * 报警坐标, 其类型可以是点,线或多边形。替换 stCoordinate字段
+ */
+ public NetSDKLib.NET_POLY_POINTS stuAlarmCoordinates;
+ /**
+ * 报警最高的温度值
+ */
+ public double dTemperatureMaxValue;
+ /**
+ * 报警最低的温度值
+ */
+ public double dTemperatureMinValue;
+ /**
+ * 事件公共扩展字段结构体
+ */
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND();
+ /**
+ * 保留字节
+ */
+ public byte[] reserved = new byte[140];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_HOTSPOT_WARNING_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_HOTSPOT_WARNING_INFO.java
new file mode 100644
index 0000000..9f836d8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_HOTSPOT_WARNING_INFO.java
@@ -0,0 +1,46 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * className:ALARM_HOTSPOT_WARNING_INFO
+ * description:
+ * author:251589
+ * createTime:2021/5/12 20:52
+ *
+ * @version v1.0
+ */
+
+public class ALARM_HOTSPOT_WARNING_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 0:开始 1:停止
+ */
+ public int nAction;
+
+ /**
+ * 视频通道号
+ */
+ public int nChannelID;
+
+ /**
+ * 热点的坐标,坐标值 0~8192
+ */
+ public NetSDKLib.NET_POINT stuCoordinate;
+
+ /**
+ * 热点温度值
+ */
+ public float fHotSpotValue;
+
+ /**
+ * 温度单位(当前配置的温度单位),见 NET_TEMPERATURE_UNIT
+ */
+ public int nTemperatureUnit;
+
+ /**
+ * 事件公共扩展字段结构体
+ */
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND();
+
+}
+
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_KEYPAD_LOCK_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_KEYPAD_LOCK_INFO.java
new file mode 100644
index 0000000..a34adbd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_KEYPAD_LOCK_INFO.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 事件类型DH_ALARM_KEYPAD_LOCK (键盘锁定事件)对应的数据块描述信息
+ * @date 2023/03/09 20:13:06
+ */
+public class ALARM_KEYPAD_LOCK_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 事件动作,1表示持续性事件开始,2表示持续性事件结束;
+ */
+ public int nAction;
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX stuTime = new NET_TIME_EX();
+ /**
+ * 事件公共扩展字段结构体
+ */
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND();
+ /**
+ * 保留字节
+ */
+ public byte[] szReserved = new byte[1024];
+
+ public ALARM_KEYPAD_LOCK_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_MAN_NUM_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_MAN_NUM_INFO.java
new file mode 100644
index 0000000..08cf637
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_MAN_NUM_INFO.java
@@ -0,0 +1,71 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.MAN_NUM_LIST_INFO;
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+/**
+ * @description 立体视觉区域内人数统计报警
+ * @author 119178
+ * @date 2021/3/18
+ */
+public class ALARM_MAN_NUM_INFO extends SdkStructure{
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 事件动作,1表示持续性事件开始,2表示持续性事件结束;
+ */
+ public int nAction;
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * 时间戳(单位是毫秒)
+ */
+ public double dbPTS;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX stuTime;
+ /**
+ * 区域人员列表数量
+ */
+ public int nManListCount;
+ /**
+ * 区域内人员列表
+ */
+ public MAN_NUM_LIST_INFO[] stuManList =(MAN_NUM_LIST_INFO[]) new MAN_NUM_LIST_INFO().toArray(64);
+ /**
+ * 事件名称
+ */
+ public byte [] szName=new byte[128];
+ /**
+ * 变化前人数(项目)
+ */
+ public int nPrevNumber;
+ /**
+ * 当前人数(项目)
+ */
+ public int nCurrentNumber;
+ /**
+ * 规则名称
+ */
+ public byte [] szRuleName=new byte[128];
+ /**
+ * 实际触发报警的人数
+ */
+ public int nAlertNum;
+ /**
+ * 报警类型. 0:未知, 1:从人数正常到人数异常, 2:从人数异常到人数正常
+ */
+ public int nAlarmType;
+ /**
+ * 事件公共扩展字段结构体
+ */
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND();
+ /**
+ * 保留字节
+ */
+ public byte [] byReserved= new byte[752];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_NO_DISK_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_NO_DISK_INFO.java
new file mode 100644
index 0000000..40924f4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_NO_DISK_INFO.java
@@ -0,0 +1,29 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 无硬盘报警
+ * @date 2020/9/9
+ */
+public class ALARM_NO_DISK_INFO extends NetSDKLib.SdkStructure {
+ public int dwSize;
+ /**
+ * 时间
+ */
+ public NET_TIME stuTime;
+ /**
+ * 事件动作, 0:Start, 1:Stop
+ */
+ public int dwAction;
+ /**
+ * 事件公共扩展字段结构体
+ */
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND();
+
+ public ALARM_NO_DISK_INFO() {
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_RADAR_REGIONDETECTION_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_RADAR_REGIONDETECTION_INFO.java
new file mode 100644
index 0000000..c59625e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_RADAR_REGIONDETECTION_INFO.java
@@ -0,0 +1,132 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 雷达区域检测事件(对应 DH_ALARM_RADAR_REGIONDETECTION)
+* @date 2022/09/01 20:26:50
+*/
+public class ALARM_RADAR_REGIONDETECTION_INFO extends NetSDKLib.SdkStructure {
+/**
+事件动作1:Start 2:Stop
+*/
+public int nAction;
+/**
+事件发生的时间
+*/
+public NET_TIME_EX stuTime=new NET_TIME_EX();
+/**
+通道号
+*/
+public int nChannelID;
+/**
+检测到的对象个数
+*/
+public int nObjectNum;
+/**
+雷达检测对象列表
+*/
+public NET_RADAR_DETECT_OBJECT[] stuObjects=new NET_RADAR_DETECT_OBJECT[100];
+/**
+事件名称
+*/
+public byte[] szName=new byte[128];
+/**
+事件触发的预置点号
+*/
+public int nPresetID;
+/**
+检测区域顶点数
+*/
+public int nDetectRegionNum;
+/**
+检测区域,[0,8191]
+*/
+public NetSDKLib.NET_POINT[] stuDetectRegion=new NetSDKLib.NET_POINT[20];
+/**
+报警类型 {@link com.netsdk.lib.enumeration.EM_RADAR_ALARM_TYPE}
+*/
+public int emAlarmType;
+/**
+经度,扩大1000000倍,小数点后6位有效,不足6位用0补齐,例如120125400代表120.1254
+*/
+public int nLongitude;
+/**
+纬度,扩大1000000倍,小数点后6位有效,不足6位用0补齐,例如120125400代表120.1254
+*/
+public int nLatitude;
+/**
+智能事件规则编号,用于表示哪个规则触发的事件。
+*/
+public int nRuleID;
+/**
+RFID卡片数量
+*/
+public int nCardNum;
+/**
+RFID卡片信息
+*/
+public NET_RADAR_REGIONDETECTION_RFIDCARD_INFO[] stuCardInfo=new NET_RADAR_REGIONDETECTION_RFIDCARD_INFO[256];
+/**
+报警等级,0 表示未知, 1表示预警警告,2表示报警
+*/
+public int nAlarmLevel;
+/**
+报警标志位,bit0表示是否超速,bit1表示是否AIS匹配 第2bit位表示是否禁行 第3bit位表示是否逆行
+*/
+public int nAlarmFlag;
+/**
+报警输入通道号
+*/
+public int nAlarmChannel;
+/**
+事件编号,用来唯一标志一个事件
+*/
+public int nEventID;
+/**
+触发事件目标的速度,用整型传输,扩大100倍 单位m/s
+*/
+public int nSpeed;
+/**
+触发事件目标的id,范围[0,63]
+*/
+public int nTrackID;
+/**
+触发事件目标的类型的掩码: 0x00未识别目标 0x01目标为人 0x02目标为交通工具 0x03目标为树 0x04目标为建筑物 0x05目标为屏幕 0x06目标为动物 0x07目标为大船 0x08目标为中船 0x09目标为小船
+*/
+public int nObjectType;
+/**
+车道/航道方向 -1:未知 0:无效 1:上行 2:下行
+*/
+public int nUpDownGoing;
+/**
+事件公共扩展字段结构体
+*/
+public NET_EVENT_INFO_EXTEND stuEventInfoEx=new NET_EVENT_INFO_EXTEND();
+/**
+当前触发事件目标的像素极坐标值--距离,扩大100倍的结果,单位米
+*/
+public int nDistance;
+/**
+当前触发事件目标的极坐标值--角度,扩大100倍的结果,单位度
+*/
+public int nAngle;
+/**
+预留字节
+*/
+public byte[] byReserved=new byte[992];
+
+public ALARM_RADAR_REGIONDETECTION_INFO(){
+ for(int i=0;i
+ * \else
+ * 事件类型 {@link SDK_ALARM_Ex_TYPE#SDK_ALARM_SOLARCELL_SYSTEM_INFO}(太阳能系统信息上报)
+ * \endif
+ * @date 2020/8/11
+ */
+public class ALARM_SOLARCELL_SYSTEM_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 0:脉冲
+ */
+ public int nAction;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX UTC;
+ /**
+ * 时间戳(单位是毫秒)
+ */
+ public double PTS;
+ /**
+ * 蓄电池信息
+ */
+ public SOLARCELL_BATTERY_INFO stuBatteryInfo;
+ /**
+ * 太阳能板信息
+ */
+ public SOLARCELL_PANEL_INFO stuSolarPanel;
+ /**
+ * 历史数据信息
+ */
+ public SOLARCELL_SYSTEM_HISTORY_INFO stuHistoryInfo;
+ /**
+ * 系统故障,枚举值参考{@link EM_SOLARCELL_SYSTEM_FAULT_TYPE#getType()}
+ */
+ public int[] emSystemFault = new int[32];
+ /**
+ * 系统故障个数
+ */
+ public int nSystemFault;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[1020];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_STORAGE_IPC_FAILURE_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_STORAGE_IPC_FAILURE_INFO.java
new file mode 100644
index 0000000..4593c48
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_STORAGE_IPC_FAILURE_INFO.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * IPC的存储介质故障事件(SD卡异常) 报警
+ * {@link NetSDKLib#NET_ALARM_STORAGE_IPC_FAILURE}
+ *
+ * @author 47040
+ * @version 1.0.0
+ * @since Created in 2021/3/12 10:44
+ */
+public class ALARM_STORAGE_IPC_FAILURE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 0:开始 1:停止
+ */
+ public int nAction;
+ /**
+ * 发生报警的通道号
+ */
+ public int nChannelID;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[1024];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFICSTROBESTATE_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFICSTROBESTATE_INFO.java
new file mode 100644
index 0000000..493cecb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFICSTROBESTATE_INFO.java
@@ -0,0 +1,42 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 道闸栏状态事件(对应结构体 ALARM_TRAFFICSTROBESTATE_INFO)
+ * @date 2020/12/15
+ */
+public class ALARM_TRAFFICSTROBESTATE_INFO extends NetSDKLib.SdkStructure {
+
+ /**
+ * 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束
+ */
+ public byte bEventAction;
+
+ /**
+ * 事件发生时间
+ */
+ public NET_TIME stuTime;
+
+ /**
+ * 视频通道号
+ */
+ public int nChannelID;
+
+ /**
+ * 道闸栏状态{ @link EM_TRAFFICSTROBE_STATUS}
+ */
+ public int emStatus;
+
+ /**
+ * 道闸开关闸原因{ @link EM_TRAFFIC_SNAP_STROBE_ACTION_REASON_TYPE}
+ */
+ public int emStrobeActionReason;
+
+ /**
+ * 预留字段
+ */
+ public byte[] byReserved = new byte[1020];
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_FLOW_JUNTION_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_FLOW_JUNTION_INFO.java
new file mode 100644
index 0000000..31db7d2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_FLOW_JUNTION_INFO.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
+
+/**
+ * @author : 260611
+ * @description : 交通路口过车事件 (对应 DH_ALARM_TRAFFIC_FLOW_JUNTION)
+ * @since : Created in 2022/03/10 10:12
+ */
+
+public class ALARM_TRAFFIC_FLOW_JUNTION_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 事件动作 0:脉冲
+ */
+ public int nAction;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 事件名称
+ */
+ public byte[] szName = new byte[128];
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX stuUTC = new NET_TIME_EX();
+ /**
+ * 事件时间毫秒数
+ */
+ public int nUTCMS;
+ /**
+ * 表示抓拍序号 1表示抓拍正常结束 0表示抓拍异常结束
+ */
+ public int nSequence;
+ /**
+ * 区域路口过车信息
+ */
+ public TRAFFIC_FLOW_JUNTION_INFO stuFlowJunction = new TRAFFIC_FLOW_JUNTION_INFO();
+ /**
+ * 保留字节
+ */
+ public byte[] szReserverd = new byte[1024];
+
+ @Override
+ public String toString() {
+ try {
+ return "ALARM_TRAFFIC_FLOW_JUNTION_INFO{" +
+ "nAction=" + nAction +
+ ", nChannel=" + nChannel +
+ ", szName UTF-8=" + new String(szName,"UTF-8").trim() +
+ ", szName GBK=" + new String(szName,"GBK").trim() +
+ ", stuUTC=" + stuUTC +
+ ", nUTCMS=" + nUTCMS +
+ ", nSequence=" + nSequence +
+ ", stuFlowJunction=" + stuFlowJunction.toString() +
+ '}';
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_FLOW_QUEUE_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_FLOW_QUEUE_INFO.java
new file mode 100644
index 0000000..a0d0f79
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_FLOW_QUEUE_INFO.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
+
+/**
+ * @author : 260611
+ * @description : 交通路口排队事件 (对应 DH_ALARM_TRAFFIC_FLOW_QUEUE)
+ * @since : Created in 2022/03/10 10:12
+ */
+
+public class ALARM_TRAFFIC_FLOW_QUEUE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 事件动作 0:脉冲
+ */
+ public int nAction;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 事件名称
+ */
+ public byte[] szName = new byte[128];
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX stuUTC = new NET_TIME_EX();
+ /**
+ * 事件时间毫秒数
+ */
+ public int nUTCMS;
+ /**
+ * 表示抓拍序号 1表示抓拍正常结束 0表示抓拍异常结束
+ */
+ public int nSequence;
+ /**
+ * 区域路口排队信息
+ */
+ public TRAFFIC_FLOW_QUEUE_INFO stuFlowQueueInfo = new TRAFFIC_FLOW_QUEUE_INFO();
+ /**
+ * 保留字节
+ */
+ public byte[] szReserverd = new byte[1024];
+
+ @Override
+ public String toString() {
+ try {
+ return "ALARM_TRAFFIC_FLOW_QUEUE_INFO{" +
+ "nAction=" + nAction +
+ ", nChannel=" + nChannel +
+ ", szName UTF-8=" + new String(szName,"UTF-8").trim() +
+ ", szName GBK=" + new String(szName,"GBK").trim() +
+ ", stuUTC=" + stuUTC +
+ ", nUTCMS=" + nUTCMS +
+ ", nSequence=" + nSequence +
+ ", stuFlowQueueInfo=" + stuFlowQueueInfo.toString() +
+ '}';
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_FLOW_STAT_EX_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_FLOW_STAT_EX_INFO.java
new file mode 100644
index 0000000..8f915c4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_FLOW_STAT_EX_INFO.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
+
+/**
+ * @author : 260611
+ * @description : 交通路口车道统计拓展事件 (对应 DH_ALARM_TRAFFIC_FLOW_STAT_EX)
+ * @since : Created in 2022/03/10 10:12
+ */
+
+public class ALARM_TRAFFIC_FLOW_STAT_EX_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 事件动作 0:脉冲
+ */
+ public int nAction;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 事件名称
+ */
+ public byte[] szName = new byte[128];
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX stuUTC = new NET_TIME_EX();
+ /**
+ * 事件时间毫秒数
+ */
+ public int nUTCMS;
+ /**
+ * 表示抓拍序号 1表示抓拍正常结束 0表示抓拍异常结束
+ */
+ public int nSequence;
+ /**
+ * 路口车道统计信息
+ */
+ public TRAFFIC_FLOW_STAT_EX_INFO stuFlowStatEx = new TRAFFIC_FLOW_STAT_EX_INFO();
+ /**
+ * 保留字节
+ */
+ public byte[] szReserverd = new byte[1024];
+
+ @Override
+ public String toString() {
+ try {
+ return "ALARM_TRAFFIC_FLOW_STAT_EX_INFO{" +
+ "nAction=" + nAction +
+ ", nChannel=" + nChannel +
+ ", szName UTF-8=" + new String(szName,"UTF-8").trim() +
+ ", szName GBK=" + new String(szName,"GBK").trim() +
+ ", stuUTC=" + stuUTC.toStringTime() +
+ ", nUTCMS=" + nUTCMS +
+ ", nSequence=" + nSequence +
+ ", stuFlowStatEx=" + stuFlowStatEx.toString() +
+ '}';
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_FLOW_STAT_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_FLOW_STAT_INFO.java
new file mode 100644
index 0000000..0fa50ce
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_FLOW_STAT_INFO.java
@@ -0,0 +1,96 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
+
+/**
+ * @author : 260611
+ * @description : 交通路口车道统计事件 (对应 DH_ALARM_TRAFFIC_FLOW_STAT)
+ * @since : Created in 2022/03/10 10:12
+ */
+
+public class ALARM_TRAFFIC_FLOW_STAT_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 事件动作 0:脉冲
+ */
+ public int nAction;
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 事件名称
+ */
+ public byte[] szName = new byte[128];
+ /**
+ * 时间戳(单位是毫秒)
+ */
+ public int PTS;
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX stuUTC = new NET_TIME_EX();
+ /**
+ * 序号
+ */
+ public int nSequence;
+ /**
+ * 流量状态数量
+ */
+ public int nStateNum;
+ /**
+ * 流量状态, 每个车道对应数组中一个元素
+ */
+ public NET_TRAFFIC_FLOW_STATE[] stuStates = (NET_TRAFFIC_FLOW_STATE[]) new NET_TRAFFIC_FLOW_STATE().toArray(8);
+ /**
+ * 静止车辆数,当前时刻检测范围内车速小于某个阀值的车辆数,单位:辆
+ */
+ public int nStopVehiclenum;
+ /**
+ * 车辆总数,当前时刻检测范围内检测到的所有车道内的车辆总数,单位:辆
+ */
+ public int nDetectionAreaVehicleNum;
+ /**
+ * 保留字节
+ */
+ public byte[] szReserverd = new byte[1024];
+
+ @Override
+ public String toString() {
+ String stuStatesStr = "";
+ if(stuStates.length > 0){
+ stuStatesStr += "stuStates[0] = ";
+ stuStatesStr += stuStates[0].toString();
+ }
+ for(int i = 1; i < stuStates.length; i ++){
+ stuStatesStr += ",stuStates[" + i + "] = ";
+ stuStatesStr += stuStates[i].toString();
+ }
+ try {
+ return "ALARM_TRAFFIC_FLOW_STAT_INFO{" +
+ "nAction=" + nAction +
+ ", nChannelID=" + nChannelID +
+ ", szName UTF-8=" + new String(szName,"UTF-8").trim() +
+ ", szName GBK=" + new String(szName,"GBK").trim() +
+ ", PTS=" + PTS +
+ ", nEventID=" + nEventID +
+ ", stuUTC=" + stuUTC.toStringTime() +
+ ", nSequence=" + nSequence +
+ ", nStateNum=" + nStateNum +
+ ", stuStates=" + stuStatesStr +
+ ", nStopVehiclenum=" + nStopVehiclenum +
+ ", nDetectionAreaVehicleNum=" + nDetectionAreaVehicleNum +
+ '}';
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_FLOW_VEHICLE_STOP_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_FLOW_VEHICLE_STOP_INFO.java
new file mode 100644
index 0000000..d9ae34e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_FLOW_VEHICLE_STOP_INFO.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
+
+/**
+ * @author : 260611
+ * @description : 交通路口停车事件 (对应 DH_ALARM_TRAFFIC_FLOW_VEHICLE_STOP)
+ * @since : Created in 2022/03/10 10:12
+ */
+
+public class ALARM_TRAFFIC_FLOW_VEHICLE_STOP_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 事件动作 0:脉冲
+ */
+ public int nAction;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 事件名称
+ */
+ public byte[] szName = new byte[128];
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX stuUTC = new NET_TIME_EX();
+ /**
+ * 事件时间毫秒数
+ */
+ public int nUTCMS;
+ /**
+ * 表示抓拍序号 1表示抓拍正常结束 0表示抓拍异常结束
+ */
+ public int nSequence;
+ /**
+ * 区域路口停车信息
+ */
+ public TRAFFIC_FLOW_VEHICLE_STOP_INFO stuFlowVehicleStop = new TRAFFIC_FLOW_VEHICLE_STOP_INFO();
+ /**
+ * 保留字节
+ */
+ public byte[] szReserverd = new byte[1024];
+
+ @Override
+ public String toString() {
+ try {
+ return "ALARM_TRAFFIC_FLOW_VEHICLE_STOP_INFO{" +
+ "nAction=" + nAction +
+ ", nChannel=" + nChannel +
+ ", szName UTF-8=" + new String(szName,"UTF-8").trim() +
+ ", szName GBK=" + new String(szName,"GBK").trim() +
+ ", stuUTC=" + stuUTC.toStringTime() +
+ ", nUTCMS=" + nUTCMS +
+ ", nSequence=" + nSequence +
+ ", stuFlowVehicleStop=" + stuFlowVehicleStop.toString() +
+ '}';
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_LIGHT_STATE_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_LIGHT_STATE_INFO.java
new file mode 100644
index 0000000..8d73ef6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_LIGHT_STATE_INFO.java
@@ -0,0 +1,81 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.EM_TRFAFFIC_LIGHT_SOURCE;
+
+/**
+ * (交通灯事件)对应的数据块描述信息
+ *
+ * @author : 47040
+ * @since : Created in 2020/8/29 16:41
+ */
+public class ALARM_TRAFFIC_LIGHT_STATE_INFO extends NetSDKLib.SdkStructure {
+
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 0:脉冲 1:开始 2:停止
+ */
+ public int nAction;
+ /**
+ * 事件名称
+ */
+ public byte[] szName = new byte[128];
+ /**
+ * 时间戳(单位是毫秒)
+ */
+ public double PTS;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX UTC;
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * 视频分析的数据源地址
+ */
+ public int nSource;
+ /**
+ * 帧序号
+ */
+ public int nFrameSequence;
+ /**
+ * 红绿灯触发源 枚举{@link EM_TRFAFFIC_LIGHT_SOURCE}
+ */
+ public int emLightSource;
+ /**
+ * stuLightPeriods元素个数
+ */
+ public int nLightPeriodsNum;
+ /**
+ * 每个元素表示一种灯亮的持续时间,时间单位毫秒
+ */
+ public NET_LIGHTPERIODS_INFO[] stuLightPeriods = new NET_LIGHTPERIODS_INFO[4];
+ /**
+ * 交通灯状态,数组下标为车道号,实际只用到了第一个元素
+ */
+ public NET_TRAFFIC_LIGHT_STATE[] stuLightStates = new NET_TRAFFIC_LIGHT_STATE[8];
+ /**
+ * stuLightStates元素个数
+ */
+ public int nLightStateNum;
+ /**
+ * 预留字段
+ */
+ public byte[] byReserved = new byte[1020];
+
+ public ALARM_TRAFFIC_LIGHT_STATE_INFO() {
+ for (int i = 0; i < stuLightPeriods.length; i++) {
+ stuLightPeriods[i] = new NET_LIGHTPERIODS_INFO();
+ }
+
+ for (int j = 0; j < stuLightStates.length; j++) {
+ stuLightStates[j] = new NET_TRAFFIC_LIGHT_STATE();
+ }
+
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_VEHICLE_POSITION.java b/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_VEHICLE_POSITION.java
new file mode 100644
index 0000000..7ca1d7c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_TRAFFIC_VEHICLE_POSITION.java
@@ -0,0 +1,71 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+import static com.netsdk.lib.NetSDKLib.NET_COMMON_STRING_128;
+
+/**
+ * @author : 260611
+ * @description : 车辆位置报警事件{@link NetSDKLib#NET_ALARM_TRAFFIC_VEHICLE_POSITION}
+ * @since : Created in 2022/03/01 14:55
+ */
+
+public class ALARM_TRAFFIC_VEHICLE_POSITION extends NetSDKLib.SdkStructure {
+ /**
+ * 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ */
+ public int nAction;
+ /**
+ * 事件名称
+ */
+ public byte[] szEventName = new byte[NET_COMMON_STRING_128];
+ /**
+ * 物体ID
+ */
+ public int nObjectID;
+ /**
+ * 车牌号
+ */
+ public byte[] szPlateNumber = new byte[NET_COMMON_STRING_128];
+ /**
+ * 识别车牌与卡口抓拍线的相对距离(0为基准,表示视频抓拍卡口位置时的车牌距离;正数表示越过抓拍线;负数表示未越过抓拍线)
+ */
+ public int nPosition;
+ /**
+ * 开闸状态,具体请见 EM_OPEN_STROBE_STATE
+ */
+ public byte byOpenStrobeState;
+ /**
+ * 车牌置信度,范围[0, 255]
+ */
+ public int nPlateConfidence;
+ /**
+ * 车牌颜色
+ */
+ public byte[] szPlateColor = new byte[32];
+ /**
+ * 车牌类型
+ */
+ public byte[] szPlateType = new byte[32];
+ /**
+ * 车身置信度,范围[0, 255]
+ */
+ public int nVehicleConfidence;
+ /**
+ * 车头朝向,用于抓拍时,判断当前车头是否正对着相机, EM_VEHICLE_HEAD_DIRECTION
+ */
+ public int emVehicleHeadDirection;
+ /**
+ * 抓拍车的位置, EM_VEHICLE_POSITION
+ */
+ public int emVehiclePosition;
+ /**
+ * 车辆行驶方向(相对车道方向), EM_VEHICLE_DRIVING_DIRECTION
+ */
+ public int emDrivingDirection;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[427];
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_VEHICLE_INOUT_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_VEHICLE_INOUT_INFO.java
new file mode 100644
index 0000000..84a1a3d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_VEHICLE_INOUT_INFO.java
@@ -0,0 +1,65 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+ * 事件类型 车辆进出车道报警
+ * {@link NetSDKLib#NET_ALARM_VEHICLE_INOUT}
+ *
+ * @author 47040
+ * @since Created in 2020/12/17 11:17
+ */
+public class ALARM_VEHICLE_INOUT_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 事件动作,0表示脉冲事件
+ */
+ public int nAction;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 事件名称
+ */
+ public byte[] szName = new byte[128];
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX UTC;
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * 物体列表 长度由nObjectNum决定 指向 {@link NET_VEHICLE_OBJECT}
+ */
+ public Pointer pstObjets;
+ /**
+ * 物体有效个数
+ */
+ public int nObjectNum;
+ /**
+ * 统计有效个数
+ */
+ public int nStatNum;
+ /**
+ * 各个车道实时交通流量统计信息, 最大支持8车道
+ */
+ public NET_TRAFFIC_FLOW_STAT[] stuStats = new NET_TRAFFIC_FLOW_STAT[8];
+
+ /**
+ * 雷达安装角度(雷达坐标系Y轴与正北方向的逆时针夹角)单位:度 (0 ~ 360)
+ */
+ public double dbRadarInstallAngle;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserverd = new byte[1016];
+
+ public ALARM_VEHICLE_INOUT_INFO() {
+ for (int i = 0; i < stuStats.length; i++) {
+ stuStats[i] = new NET_TRAFFIC_FLOW_STAT();
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_WIRELESSDEV_LOWPOWER_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_WIRELESSDEV_LOWPOWER_INFO.java
new file mode 100644
index 0000000..e599ee4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_WIRELESSDEV_LOWPOWER_INFO.java
@@ -0,0 +1,50 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @description 无线设备低电量报警事件结构体
+ * @date 2022/07/19 10:21:10
+ */
+public class ALARM_WIRELESSDEV_LOWPOWER_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 是否为低电量true低电量,false 电量正常,unknown未知 {@link NetSDKLib.NET_THREE_STATUS_BOOL}
+ */
+ public int emResult;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME stuTime = new NET_TIME();
+ /**
+ * 无线设备ID 此字段协议上已废弃
+ */
+ public int nId;
+ /**
+ * 无线设备类型 {@link com.netsdk.lib.enumeration.NET_WIRELESSDEV_LOWPOWER_TYPE}
+ */
+ public int emType;
+ /**
+ * 无线配件序列号
+ */
+ public byte[] szSN = new byte[32];
+ /**
+ * 电量百分比
+ */
+ public float fPercent;
+ /**
+ * 通道号或探测器地址
+ */
+ public int nIndex;
+ /**
+ * 事件公共扩展字段结构体
+ */
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND();
+ /**
+ * 预留
+ */
+ public byte[] reserved = new byte[984];
+
+ public ALARM_WIRELESSDEV_LOWPOWER_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_WIRELESSDEV_POWERLESS_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_WIRELESSDEV_POWERLESS_INFO.java
new file mode 100644
index 0000000..7c45a4f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_WIRELESSDEV_POWERLESS_INFO.java
@@ -0,0 +1,50 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 探测器主电丢失事件(对应DH_ALARM_WIRELESSDEV_POWERLESS)
+ * @date 2023/03/09 20:12:33
+ */
+public class ALARM_WIRELESSDEV_POWERLESS_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 0:脉冲 1:开始 2:停止
+ */
+ public int nAction;
+ /**
+ * 探测器地址
+ */
+ public int nIndex;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX stuLoacalTime = new NET_TIME_EX();
+ /**
+ * 探测器类型
+ */
+ public byte[] szModel = new byte[32];
+ /**
+ * 探测器名称
+ */
+ public byte[] szName = new byte[32];
+ /**
+ * 探测器序列号
+ */
+ public byte[] szSN = new byte[32];
+ /**
+ * 探测器所属区域名称
+ */
+ public byte[] szAreaName = new byte[32];
+ /**
+ * 事件公共扩展字段结构体
+ */
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND();
+ /**
+ * 保留字节
+ */
+ public byte[] szReserverd = new byte[128];
+
+ public ALARM_WIRELESSDEV_POWERLESS_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/ALARM_WORKSUIT_FEATURE_ABSTRACT_INFO.java b/src/main/java/com/netsdk/lib/structure/ALARM_WORKSUIT_FEATURE_ABSTRACT_INFO.java
new file mode 100644
index 0000000..aaa4954
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ALARM_WORKSUIT_FEATURE_ABSTRACT_INFO.java
@@ -0,0 +1,46 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 事件类型DH_ALARM_WORKSUIT_FEATURE_ABSTRACT
+ * (工装特征向量建模结果上报事件)对应的数据块描述信息
+ * @date 2022/10/09 11:22:52
+ */
+public class ALARM_WORKSUIT_FEATURE_ABSTRACT_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 事件动作,0表示脉冲事件
+ */
+ public int nAction;
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * 时间戳(单位是毫秒)
+ */
+ public double dbPTS;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX stuTime = new NET_TIME_EX();
+ /**
+ * 工装建模结果个数
+ */
+ public int nAbstractInfoNum;
+ /**
+ * 工装建模结果信息
+ */
+ public NET_WORKSUIT_ABSTRACT_INFO[] stuAbstractInfo = new NET_WORKSUIT_ABSTRACT_INFO[20];
+ /**
+ * 预留字段
+ */
+ public byte[] szReserved = new byte[1024];
+
+ public ALARM_WORKSUIT_FEATURE_ABSTRACT_INFO() {
+ for (int i = 0; i < stuAbstractInfo.length; i++) {
+ stuAbstractInfo[i] = new NET_WORKSUIT_ABSTRACT_INFO();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/ANATOMY_TEMP_DETECT_PERSON_FILTER.java b/src/main/java/com/netsdk/lib/structure/ANATOMY_TEMP_DETECT_PERSON_FILTER.java
new file mode 100644
index 0000000..6537cf1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ANATOMY_TEMP_DETECT_PERSON_FILTER.java
@@ -0,0 +1,20 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 人员过滤信息
+ * @date 2021/02/22
+ */
+public class ANATOMY_TEMP_DETECT_PERSON_FILTER extends NetSDKLib.SdkStructure{
+ /**
+ * 姓名
+ */
+ public byte[] szName = new byte[64];
+
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[1024];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/ARM_FAILED_DETAIL.java b/src/main/java/com/netsdk/lib/structure/ARM_FAILED_DETAIL.java
new file mode 100644
index 0000000..5d325c1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ARM_FAILED_DETAIL.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 布防失败细节
+ * @date 2023/03/15 16:25:59
+ */
+public class ARM_FAILED_DETAIL extends NetSDKLib.SdkStructure {
+ /**
+ * 布防失败的区域号
+ */
+ public int nArea;
+ /**
+ * 报警源输入返回个数
+ */
+ public int nAlarmSourceRet;
+ /**
+ * 区域下包含的有源输入的防区
+ */
+ public int[] arrAlarmSource = new int[72];
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[1024];
+
+ public ARM_FAILED_DETAIL() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/ARM_FAILED_DETAIL_EX.java b/src/main/java/com/netsdk/lib/structure/ARM_FAILED_DETAIL_EX.java
new file mode 100644
index 0000000..c0e9a5f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ARM_FAILED_DETAIL_EX.java
@@ -0,0 +1,37 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 布防失败细节扩展字段
+ * @date 2023/03/15 16:29:32
+ */
+public class ARM_FAILED_DETAIL_EX extends NetSDKLib.SdkStructure {
+ /**
+ * 布防失败的区域号
+ */
+ public int nArea;
+ /**
+ * 报警源输入返回个数
+ */
+ public int nAlarmSourceRetEx;
+ /**
+ * 区域下包含的有源输入的防区
+ */
+ public int[] arrAlarmSourceEx = new int[256];
+ /**
+ * 异常防区信息个数
+ */
+ public int nZoneAbnormalNum;
+ /**
+ * 异常防区信息,最大有1024个
+ */
+ public NET_ZONE_ABNORMAL_INFO[] stuZoneAbnormal = new NET_ZONE_ABNORMAL_INFO[1024];
+
+ public ARM_FAILED_DETAIL_EX() {
+ for (int i = 0; i < stuZoneAbnormal.length; i++) {
+ stuZoneAbnormal[i] = new NET_ZONE_ABNORMAL_INFO();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/AV_CFG_MONITOR_WALL_OUT_MODE_INFO.java b/src/main/java/com/netsdk/lib/structure/AV_CFG_MONITOR_WALL_OUT_MODE_INFO.java
new file mode 100644
index 0000000..1e9e7eb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/AV_CFG_MONITOR_WALL_OUT_MODE_INFO.java
@@ -0,0 +1,18 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 电视墙输出模式信息
+ * @date 2021/2/22
+ */
+public class AV_CFG_MONITOR_WALL_OUT_MODE_INFO extends NetSDKLib.SdkStructure {
+ /** 水平分辨率 */
+ public int nWidth;
+ /** 垂直分辨率 */
+ public int nHeight;
+ /** 保留字节 */
+ public byte[] byReserved = new byte[256];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/Auxs.java b/src/main/java/com/netsdk/lib/structure/Auxs.java
new file mode 100644
index 0000000..67edb41
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/Auxs.java
@@ -0,0 +1,20 @@
+package com.netsdk.lib.structure;/**
+ * @author 47081
+ * @descriptio
+ * @date 2020/11/9
+ * @version 1.0
+ */
+
+import com.netsdk.lib.NetSDKLib;
+
+import static com.netsdk.lib.constant.SDKStructureFieldLenth.CFG_COMMON_STRING_32;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description
+ * @date 2020/11/9
+ */
+public class Auxs extends NetSDKLib.SdkStructure {
+ public byte[] auxs=new byte[CFG_COMMON_STRING_32];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/BODY_TRAIT.java b/src/main/java/com/netsdk/lib/structure/BODY_TRAIT.java
new file mode 100644
index 0000000..e46bb7d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/BODY_TRAIT.java
@@ -0,0 +1,92 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+import java.util.Arrays;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description
+ * @date 2021/8/24 14:35
+ */
+public class BODY_TRAIT extends NetSDKLib.SdkStructure {
+ /** EM_SEX_TYPE */
+ public int emSex; // 性别
+ /** EM_AGE_GROUP_TYPE */
+ public int emAgeGroup; // 年龄组
+ /** EM_COAT_TYPE */
+ public int emCoatType; // 上衣类型
+ /** EM_TROUSERS_TYPE */
+ public int emTrousersType; // 裤子类型
+ /**EM_ANGLE_TYPE */
+ public int emAngle; // 人体角度
+ /** EM_CLOTHES_PATTERN */
+ public int emUpperPattern; // 上衣模式
+ /**EM_UNIFIED_COLOR_TYPE */
+ public int emTrousersColor; // 裤子颜色
+ /** EM_HAS_UMBRELLA */
+ public int emUmbrella; // 打伞
+ /** EM_UNIFIED_COLOR_TYPE */
+ public int emUmbrellaColor; // 雨伞颜色
+ /** EM_HAS_HOLD */
+ public int emHold; // 胸前抱东西
+ /** EM_CLOTHES_PATTERN*/
+ public int emTrousersPattern; // 裤子模式
+ /** EM_HAT_STYLE */
+ public int emHatType; // 帽子款式
+ /** EM_UNIFIED_COLOR_TYPE */
+ public int emHatColor; // 帽子颜色
+ /** EM_UPPER_TYPE */
+ public int emUpperType; // 上衣类型
+ /** EM_UNIFIED_COLOR_TYPE */
+ public int emCoatColor; // 上衣颜色
+ /**EM_HAIR_STYLE */
+ public int emHairStyle; // 发型
+ /** EM_UNIFIED_COLOR_TYPE */
+ public int emHairColor; // 头发颜色
+ /** EM_SHOES_TYPE */
+ public int emShoesType; // 鞋子款式
+ /** EM_UNIFIED_COLOR_TYPE*/
+ public int emShoesColor; // 鞋子颜色
+ /** EM_BAG_TYPE */
+ public int emBagType; // 箱包款式
+ /** EM_UNIFIED_COLOR_TYPE */
+ public int emBagColor; // 箱包颜色
+ /** EM_MASK_TYPE */
+ public int emMaskType; // 口罩
+ /** EM_UNIFIED_COLOR_TYPE */
+ public int emMaskColor; // 口罩颜色
+ public NET_TIME_EX stuSnapTime=new NET_TIME_EX(); // 抓图时间
+ public byte[] szReserved=new byte[1024]; // 预留字段
+
+ @Override
+ public String toString() {
+ return "BODY_TRAIT{" +
+ "emSex=" + emSex +
+ ", emAgeGroup=" + emAgeGroup +
+ ", emCoatType=" + emCoatType +
+ ", emTrousersType=" + emTrousersType +
+ ", emAngle=" + emAngle +
+ ", emUpperPattern=" + emUpperPattern +
+ ", emTrousersColor=" + emTrousersColor +
+ ", emUmbrella=" + emUmbrella +
+ ", emUmbrellaColor=" + emUmbrellaColor +
+ ", emHold=" + emHold +
+ ", emTrousersPattern=" + emTrousersPattern +
+ ", emHatType=" + emHatType +
+ ", emHatColor=" + emHatColor +
+ ", emUpperType=" + emUpperType +
+ ", emCoatColor=" + emCoatColor +
+ ", emHairStyle=" + emHairStyle +
+ ", emHairColor=" + emHairColor +
+ ", emShoesType=" + emShoesType +
+ ", emShoesColor=" + emShoesColor +
+ ", emBagType=" + emBagType +
+ ", emBagColor=" + emBagColor +
+ ", emMaskType=" + emMaskType +
+ ", emMaskColor=" + emMaskColor +
+ ", stuSnapTime=" + stuSnapTime +
+ '}';
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/BYTE_32.java b/src/main/java/com/netsdk/lib/structure/BYTE_32.java
new file mode 100644
index 0000000..9de51f5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/BYTE_32.java
@@ -0,0 +1,13 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description
+ * @date 2022/8/31 20:35
+ */
+public class BYTE_32 extends NetSDKLib.SdkStructure {
+ public byte[] SN_32=new byte[32];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/BYTE_40.java b/src/main/java/com/netsdk/lib/structure/BYTE_40.java
new file mode 100644
index 0000000..5d764da
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/BYTE_40.java
@@ -0,0 +1,13 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @version 1.0
+ * @description
+ * @date 2023/03/15 20:35
+ */
+public class BYTE_40 extends NetSDKLib.SdkStructure {
+ public byte[] STR_40 = new byte[40];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/BYTE_64.java b/src/main/java/com/netsdk/lib/structure/BYTE_64.java
new file mode 100644
index 0000000..486e4de
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/BYTE_64.java
@@ -0,0 +1,14 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description
+ * @date 2022/12/22 10:05
+ */
+public class BYTE_64 extends NetSDKLib.SdkStructure{
+
+ public byte[] SN_64=new byte[64];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/Byte64Arr.java b/src/main/java/com/netsdk/lib/structure/Byte64Arr.java
new file mode 100644
index 0000000..74c4278
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/Byte64Arr.java
@@ -0,0 +1,13 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description
+ * @date 2022/7/4 19:28
+ */
+public class Byte64Arr extends NetSDKLib.SdkStructure{
+ public byte[] arr=new byte[64];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/ByteSize16.java b/src/main/java/com/netsdk/lib/structure/ByteSize16.java
new file mode 100644
index 0000000..4f84804
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/ByteSize16.java
@@ -0,0 +1,13 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description
+ * @date 2022/8/10 14:14
+ */
+public class ByteSize16 extends NetSDKLib.SdkStructure{
+ public byte[] byte16=new byte[16];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CAR_INFO.java b/src/main/java/com/netsdk/lib/structure/CAR_INFO.java
new file mode 100644
index 0000000..9f24325
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CAR_INFO.java
@@ -0,0 +1,50 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 车辆运行状态信息
+ * @date 2021/09/01
+ */
+public class CAR_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 机动车电子标识序列号
+ */
+ public byte[] szCarId = new byte[128];
+
+ /**
+ * 车牌号码
+ */
+ public byte[] szPlateNumber = new byte[128];
+
+ /**
+ * 车辆类型,参考NetSDKLib.EM_CAR_TYPE
+ */
+ public int emCarType;
+
+ /**
+ * 速度单位为米每秒(m/s)
+ */
+ public int nSpeed;
+
+ /**
+ * 加速度单位为米每平方秒(m/s2)
+ */
+ public int nAcceleration;
+
+ /**
+ * 车头方向角以地理正北方向为起点的顺时针旋转角度,单位为度(°)
+ */
+ public int nHeadDirAngle;
+
+ /**
+ * 车辆故障报警自动驾驶汽车测试期间主动上报的故障信息,按位表示:Bit0:故障报警灯开启Bit1~Bit7:保留
+ */
+ public int nAlarm;
+
+ /**
+ * 预留字节
+ */
+ public byte[] byReserved = new byte[256];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_ABLOCK_DOOR_INFO.java b/src/main/java/com/netsdk/lib/structure/CFG_ABLOCK_DOOR_INFO.java
new file mode 100644
index 0000000..90e29eb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_ABLOCK_DOOR_INFO.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+import java.util.Arrays;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 门禁的AB互锁的组
+ * @date 2021/2/7
+ */
+public class CFG_ABLOCK_DOOR_INFO extends NetSDKLib.SdkStructure {
+ /** 最大的门禁的互锁门通道数 */
+ public static final int CFG_MAX_ABLOCK_DOORS_NUM = 8;
+ /** 有效互锁门的个数 */
+ public int nDoor;
+ /** 互锁的门的通道号 */
+ public int[] anDoor = new int[CFG_MAX_ABLOCK_DOORS_NUM];
+
+ @Override
+ public String toString() {
+ return "CFG_ABLOCK_DOOR_INFO{" +
+ "nDoor=" + nDoor +
+ ", anDoor=" + Arrays.toString(anDoor) +
+ '}';
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_ABLOCK_INFO.java b/src/main/java/com/netsdk/lib/structure/CFG_ABLOCK_INFO.java
new file mode 100644
index 0000000..6cca26e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_ABLOCK_INFO.java
@@ -0,0 +1,37 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 门禁的AB互锁功能, 多个门通道,只有其他B通道都关闭,唯一的A通道才打开
+ * @date 2021/2/7
+ */
+public class CFG_ABLOCK_INFO extends NetSDKLib.SdkStructure {
+ /** 最大的互锁组数 */
+ public static final int CFG_MAX_ABLOCK_GROUP_NUM = 8;
+ /** 使能 */
+ public boolean bEnable;
+ /** 有效互锁组数 */
+ public int nDoors;
+ /** 互锁组信息 */
+ public CFG_ABLOCK_DOOR_INFO[] stuDoors =
+ (CFG_ABLOCK_DOOR_INFO[]) new CFG_ABLOCK_DOOR_INFO().toArray(CFG_MAX_ABLOCK_GROUP_NUM);
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0; i < nDoors; i++) {
+ builder.append(stuDoors[i].toString()).append("\n");
+ }
+ return "CFG_ABLOCK_INFO{"
+ + "bEnable="
+ + bEnable
+ + ", nDoors="
+ + nDoors
+ + ", stuDoors="
+ + builder.toString()
+ + '}';
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_ACCESS_CONTROL_ASG.java b/src/main/java/com/netsdk/lib/structure/CFG_ACCESS_CONTROL_ASG.java
new file mode 100644
index 0000000..79ff079
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_ACCESS_CONTROL_ASG.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.*;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 门通道控制闸机参数
+ * @date 2021/2/7
+ */
+public class CFG_ACCESS_CONTROL_ASG extends NetSDKLib.SdkStructure {
+ /** 通行模式,{@link com.netsdk.lib.enumeration.EM_PASS_MODE} */
+ public int emPassMode;
+ /** 开门速度档位, 范围:0-7,对应1-8档 */
+ public int nOpenDoorSpeed;
+ /** 通行超时时间, 范围:2-60,单位:秒 */
+ public int nPassTimeOut;
+ /** 延时关门时间, 范围:0-60,单位:秒 */
+ public int nCloseDelayTime;
+ /** 闸机安全等级, 范围:0-4,对应1-5级 */
+ public int nSecurityLevel;
+ /** 二次开启功能开关;False:关闭,True:开启 */
+ public boolean bSecondOpenEnable;
+ /** 记忆功能开关;False:关闭,True:开启 */
+ public boolean bMemoryModeEnable;
+ /** 闸机防冲撞模式,参考枚举{@link EM_COLLISION_MODE} */
+ public int emCollisionMode;
+ /** 设备音量等级共8档, 范围:0-7, 0级表示静音 */
+ public int nVolumeLevel;
+ /** 闸机断电以后门摆动放向,{@link com.netsdk.lib.enumeration.EM_DIRECTION_AFTER_POWER_OFF} */
+ public int emDirectionAfterPowerOff;
+ /** 工作模式,{@link EM_ASG_WORK_MODE} */
+ public int emWorkMode; // 工作模式
+ /** 启动模式,{@link EM_STARTUP_MODE} */
+ public int emStartUpMode;
+ /** 主机侧门翼零位微调角度,进门方向右手边为主机侧门翼 */
+ public int nMasterWingAngleAdjust;
+ /** 从机侧门翼零位微调角度,进门方向左手边为从机侧门翼 */
+ public int nSlaveWingAngleAdjust;
+ /** 闸机类型,{@link EM_GATE_TYPE} */
+ public int emGateType;
+ /** 通道宽度,{@link EM_CHANNEL_WIDTH} */
+ public int emChannelWidth;
+ /** bSecondOpenEnable作用时间段,AccessTimeSchedule 配置索引 */
+ public int nSecondOpenTimeSection;
+ /** bMemoryModeEnable作用时间段,AccessTimeSchedule 配置索引 */
+ public int nMemoryModeTimeSection;
+ /** emWorkMode作用时间段,AccessTimeSchedule 配置索引 */
+ public int nWorkModeTimeSection;
+ /** 是否清理通行人数 */
+ public boolean bClearPassNum;
+ /** 保留字节 */
+ public byte[] byReserved = new byte[112];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_ACCESS_GENERAL_INFO.java b/src/main/java/com/netsdk/lib/structure/CFG_ACCESS_GENERAL_INFO.java
new file mode 100644
index 0000000..193e6f8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_ACCESS_GENERAL_INFO.java
@@ -0,0 +1,106 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+import java.util.Arrays;
+
+import static com.netsdk.lib.constant.SDKStructureFieldLenth.MAX_ADDRESS_LEN;
+import static com.netsdk.lib.constant.SDKStructureFieldLenth.MAX_PASSWORD_LEN;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 门禁基本配置
+ * @date 2021/2/7
+ */
+public class CFG_ACCESS_GENERAL_INFO extends NetSDKLib.SdkStructure {
+ /** 开门音频文件路径 */
+ public byte[] szOpenDoorAudioPath = new byte[MAX_ADDRESS_LEN];
+ /** 关门音频文件路径 */
+ public byte[] szCloseDoorAudioPath = new byte[MAX_ADDRESS_LEN];
+ /** 有人音频文件路径 */
+ public byte[] szInUsedAuidoPath = new byte[MAX_ADDRESS_LEN];
+ /** 暂停使用音频文件路径 */
+ public byte[] szPauseUsedAudioPath = new byte[MAX_ADDRESS_LEN];
+ /** 门未关音频文件路径 */
+ public byte[] szNotClosedAudioPath = new byte[MAX_ADDRESS_LEN];
+ /** 等待提示音频文件路径 */
+ public byte[] szWaitingAudioPath = new byte[MAX_ADDRESS_LEN];
+ /** 开锁命令响应间隔时间,单位秒,取值10、15(默认值)、20 */
+ public int nUnlockReloadTime;
+ /** 开锁输出保持时间,单位秒,取值1、2(默认)、3、4、5、6、9、15。 */
+ public int nUnlockHoldTime;
+
+ // 能力,bool对应java中byte
+ public byte abProjectPassword;
+ public byte abAccessProperty;
+ public byte abABLockInfo;
+ public byte byReserved;
+
+ /** 工程密码 */
+ public byte[] szProjectPassword = new byte[MAX_PASSWORD_LEN];
+ /** 门禁通道单双向配置,对应枚举{@link com.netsdk.lib.enumeration.CFG_ACCESS_PROPERTY_TYPE} */
+ public int emAccessProperty;
+ /** AB互锁信息 */
+ public CFG_ABLOCK_INFO stuABLockInfo;
+ /** 胁迫密码 */
+ public byte[] szDuressPassword = new byte[MAX_PASSWORD_LEN];
+ /** 胁迫使能 */
+ public boolean bDuressEnable;
+ /** 是否启用个性化密码 */
+ public boolean bCustomPasswordEnable;
+ /** 公共密码 */
+ public byte[] szCommonPassword = new byte[MAX_PASSWORD_LEN];
+ /** 梯控高峰时间段, 值为CFG_ACCESS_TIMESCHEDULE_INFO配置的数组下标 */
+ public int nPeakTimeSection;
+ /** 是否为梯控高峰期, TRUE:高峰期, FALSE:平峰期 */
+ public boolean bPeakState;
+ /** 远程校验超时时间,单位:秒, 默认值:5秒,范围[1-15] */
+ public int nRemoteAuthTimeOut;
+ /** 楼层权限信息,每一个bit对应一个楼层,bit值1表示公共层,0表示权限楼层 */
+ public byte[] arrFloorPermission = new byte[64];
+ /** arrFloorPermission 数组个数 */
+ public int nFloorPermission;
+ /** 门通道控制闸机参数 */
+ public CFG_ACCESS_CONTROL_ASG stuAccessControlASG;
+ /** 门禁开门提示音 */
+ public CFG_ACCESS_VOICE stuAccessVoice;
+ /**
+ * 门磁类型,参考{ @link EM_ACCESS_SENSOR_TYPE }
+ */
+ public int emSensorType;
+ /** 保留字节 */
+ public byte[] szReserved= new byte[1024];
+
+ @Override
+ public String toString() {
+ return "CFG_ACCESS_GENERAL_INFO{" +
+ "szOpenDoorAudioPath=" + Arrays.toString(szOpenDoorAudioPath) +
+ ", szCloseDoorAudioPath=" + Arrays.toString(szCloseDoorAudioPath) +
+ ", szInUsedAuidoPath=" + Arrays.toString(szInUsedAuidoPath) +
+ ", szPauseUsedAudioPath=" + Arrays.toString(szPauseUsedAudioPath) +
+ ", szNotClosedAudioPath=" + Arrays.toString(szNotClosedAudioPath) +
+ ", szWaitingAudioPath=" + Arrays.toString(szWaitingAudioPath) +
+ ", nUnlockReloadTime=" + nUnlockReloadTime +
+ ", nUnlockHoldTime=" + nUnlockHoldTime +
+ ", abProjectPassword=" + abProjectPassword +
+ ", abAccessProperty=" + abAccessProperty +
+ ", abABLockInfo=" + abABLockInfo +
+ ", byReserved=" + byReserved +
+ ", szProjectPassword=" + Arrays.toString(szProjectPassword) +
+ ", emAccessProperty=" + emAccessProperty +
+ ", stuABLockInfo=" + stuABLockInfo +
+ ", szDuressPassword=" + Arrays.toString(szDuressPassword) +
+ ", bDuressEnable=" + bDuressEnable +
+ ", bCustomPasswordEnable=" + bCustomPasswordEnable +
+ ", szCommonPassword=" + Arrays.toString(szCommonPassword) +
+ ", nPeakTimeSection=" + nPeakTimeSection +
+ ", bPeakState=" + bPeakState +
+ ", nRemoteAuthTimeOut=" + nRemoteAuthTimeOut +
+ ", arrFloorPermission=" + Arrays.toString(arrFloorPermission) +
+ ", nFloorPermission=" + nFloorPermission +
+ ", stuAccessControlASG=" + stuAccessControlASG +
+ ", stuAccessVoice=" + stuAccessVoice +
+ '}';
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_ACCESS_VOICE.java b/src/main/java/com/netsdk/lib/structure/CFG_ACCESS_VOICE.java
new file mode 100644
index 0000000..292838a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_ACCESS_VOICE.java
@@ -0,0 +1,20 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.CFG_EM_VOICE_ID;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 门禁开门提示声
+ * @date 2021/2/7
+ */
+public class CFG_ACCESS_VOICE extends NetSDKLib.SdkStructure {
+ /** 当前播放语音ID,{@link CFG_EM_VOICE_ID} */
+ public int emCurrentVoiceID;
+
+ public CFG_ACCESS_VOICE_INFO[] arrayVoiceInfo =
+ (CFG_ACCESS_VOICE_INFO[]) new CFG_ACCESS_VOICE_INFO().toArray(16); // 语音列表
+ public int nVoiceCount; // arrayVoiceInfo 个数
+ public byte[] byReserved = new byte[1024]; // 预留字段
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_ACCESS_VOICE_INFO.java b/src/main/java/com/netsdk/lib/structure/CFG_ACCESS_VOICE_INFO.java
new file mode 100644
index 0000000..9b0b186
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_ACCESS_VOICE_INFO.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.CFG_EM_ASG_VOICE_DIRECTION;
+import com.netsdk.lib.enumeration.CFG_EM_VOICE_ID;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 门禁开门语音信息
+ * @date 2021/2/7
+ */
+public class CFG_ACCESS_VOICE_INFO extends NetSDKLib.SdkStructure {
+ /** 语音ID,{@link CFG_EM_VOICE_ID} */
+ public int emVoiceID;
+ /** 语音内容 */
+ public byte[] szVoiceContent = new byte[128];
+ /** 语音文件路径及名称 */
+ public byte[] szFileName = new byte[128];
+ /** 闸机进出语音方向,{@link CFG_EM_ASG_VOICE_DIRECTION} */
+ public int emAsgVoiceDirection;
+ /** 预留字段 */
+ public byte[] byReserved = new byte[1020];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_ACTIVITY_ANALYSE_CAPS.java b/src/main/java/com/netsdk/lib/structure/CFG_ACTIVITY_ANALYSE_CAPS.java
new file mode 100644
index 0000000..6699ed0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_ACTIVITY_ANALYSE_CAPS.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 活跃度统计规则
+ * @date 2021/01/11
+ */
+public class CFG_ACTIVITY_ANALYSE_CAPS extends NetSDKLib.SdkStructure{
+
+ /**
+ * 是否支持本地数据存储
+ */
+ public int bSupportLocalDataStore;
+
+ /**
+ * 该规则支持的最大规则数
+ */
+ public int nMaxRules;
+
+ /**
+ * 预留字段
+ */
+ public byte[] byReserved = new byte[256];
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_ALARM_SUBSYSTEM_INFO.java b/src/main/java/com/netsdk/lib/structure/CFG_ALARM_SUBSYSTEM_INFO.java
new file mode 100644
index 0000000..7b76a7e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_ALARM_SUBSYSTEM_INFO.java
@@ -0,0 +1,62 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 报警子系统配置 ==>CFG_CMD_ALARM_SUBSYSTEM
+ * @date 2023/03/15 19:18:13
+ */
+public class CFG_ALARM_SUBSYSTEM_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 名称
+ */
+ public byte[] szName = new byte[128];
+ /**
+ * 本地防区数目
+ */
+ public int nZoneNum;
+ /**
+ * 本地防区号
+ */
+ public int[] anZone = new int[256];
+ /**
+ * 扩展防区数目
+ */
+ public int nExZoneNum;
+ /**
+ * 扩展防区号
+ */
+ public int[] anExZone = new int[256];
+ /**
+ * 延时撤防时间(进入延时), 单位为秒
+ */
+ public int nDisableDelay;
+ /**
+ * 延时布防时间(退出延时), 单位为秒
+ */
+ public int nEnableDelay;
+ /**
+ * 是否为公共子系统
+ */
+ public int bIsPublic;
+ /**
+ * 公共所属的子系统数目
+ */
+ public int nPublicSubSystem;
+ /**
+ * 公共所属的关联子系统
+ */
+ public int[] anPublicSubSystem = new int[256];
+ /**
+ * 报警联动
+ */
+ public CFG_ALARM_SUBSYSTEM_MSG_HANDLE stuEventHandler = new CFG_ALARM_SUBSYSTEM_MSG_HANDLE();
+ /**
+ * 是否启用子系统
+ */
+ public int bEnable;
+
+ public CFG_ALARM_SUBSYSTEM_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_ALARM_SUBSYSTEM_MSG_HANDLE.java b/src/main/java/com/netsdk/lib/structure/CFG_ALARM_SUBSYSTEM_MSG_HANDLE.java
new file mode 100644
index 0000000..aa7ec96
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_ALARM_SUBSYSTEM_MSG_HANDLE.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 报警联动
+ * @date 2023/03/15 19:18:13
+ */
+public class CFG_ALARM_SUBSYSTEM_MSG_HANDLE extends NetSDKLib.SdkStructure {
+ /**
+ * 报警输出使能
+ */
+ public int bAlarmOutEnable;
+ /**
+ * 警号输出使能
+ */
+ public int bAlarmBellEnable;
+ /**
+ * 报警输出通道号个数
+ */
+ public int nAlarmOutChannelNum;
+ /**
+ * 报警输出通道号列表
+ */
+ public int[] nAlarmOutChannels = new int[256];
+
+ public CFG_ALARM_SUBSYSTEM_MSG_HANDLE() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_ANATOMYTEMP_DETECT_SCENE_CAPS.java b/src/main/java/com/netsdk/lib/structure/CFG_ANATOMYTEMP_DETECT_SCENE_CAPS.java
new file mode 100644
index 0000000..592c07e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_ANATOMYTEMP_DETECT_SCENE_CAPS.java
@@ -0,0 +1,32 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 人体测温检测场景能力
+ * @date 2021/01/11
+ */
+public class CFG_ANATOMYTEMP_DETECT_SCENE_CAPS extends NetSDKLib.SdkStructure{
+
+ /**
+ * 人体测温智能支持类型 ,参考{ @link CFG_EM_FACEDETECT_TYPE }
+ */
+ public int[] emFaceDetectTypes = new int[32];
+
+ /**
+ * 人体测温智能支持类型的个数
+ */
+ public int nFaceDetectTypesNum;
+
+ /**
+ * 可见光的能力配置
+ */
+ public CFG_ANATOMYTEMP_VISUAL_CAPS stuVisual;
+
+ /**
+ * 预留
+ */
+ public byte[] byReserved = new byte[1024];
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_ANATOMYTEMP_VISUAL_CAPS.java b/src/main/java/com/netsdk/lib/structure/CFG_ANATOMYTEMP_VISUAL_CAPS.java
new file mode 100644
index 0000000..73d931e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_ANATOMYTEMP_VISUAL_CAPS.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 人体测温的可见光的能力
+ * @date 2021/01/11
+ */
+public class CFG_ANATOMYTEMP_VISUAL_CAPS extends NetSDKLib.SdkStructure{
+ /**
+ * 是否支持人脸左右角度过滤
+ */
+ public int bSupportFaceRight;
+
+ /**
+ * 是否支持人脸上下角度过滤
+ */
+ public int bSupportFaceUp;
+
+ /**
+ * 是否支持人脸左右歪头角度过滤
+ */
+ public int bSupportFaceRoll;
+
+ /**
+ * 预留
+ */
+ public byte[] byReserved = new byte[64];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_AREA_MODE_INFO.java b/src/main/java/com/netsdk/lib/structure/CFG_AREA_MODE_INFO.java
new file mode 100644
index 0000000..72d8032
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_AREA_MODE_INFO.java
@@ -0,0 +1,41 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 区域信息
+ * @date 2022/07/22 14:43:48
+ */
+public class CFG_AREA_MODE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 区域名称
+ */
+ public byte[] szName = new byte[32];
+ /**
+ * 该区域的总车位个数
+ */
+ public int nCount;
+ /**
+ * 区域坐标个数
+ */
+ public int nAreaCount;
+ /**
+ * 区域坐标
+ */
+ public NetSDKLib.CFG_POLYGON[] stuArea = new NetSDKLib.CFG_POLYGON[20];
+ /**
+ * 车位类型: 0:未知, 1:小车车位, 2:大车车位, 3:危化品车位, 4:货车车位, 5:小客车车位, 6:大客车车位
+ */
+ public int nSpaceType;
+ /**
+ * 保留字节
+ */
+ public byte[] szReserved = new byte[60];
+
+ public CFG_AREA_MODE_INFO() {
+ for (int i = 0; i < stuArea.length; i++) {
+ stuArea[i] = new NetSDKLib.CFG_POLYGON();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_AUDIO_SPIRIT.java b/src/main/java/com/netsdk/lib/structure/CFG_AUDIO_SPIRIT.java
new file mode 100644
index 0000000..9f92b6f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_AUDIO_SPIRIT.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 语音激励
+ * @date 2020/11/9
+ */
+public class CFG_AUDIO_SPIRIT extends NetSDKLib.SdkStructure {
+ /** 使能 */
+ public boolean bEnable;
+ /** 激励音量阈值, 0~100 */
+ public int nAudioLimit; //
+ /** 激励延时时间, 单位: 秒 */
+ public int nDelayTime; //
+ /**
+ * 语音激励音频通道属性,由用户申请内存,大小为sizeof(CFG_AUDIO_SPIRIT_CHANNEL)*nChannelCount 对应结构体数组{@link
+ * CFG_AUDIO_SPIRIT_CHANNEL}
+ */
+ public Pointer pstuChannels; //
+ /** 音频通道数 */
+ public int nChannelCount; //
+ /** 激励联动项 */
+ public CFG_AUDIO_SPIRIT_LINKAGE stuLinkage; //
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_AUDIO_SPIRIT_CHANNEL.java b/src/main/java/com/netsdk/lib/structure/CFG_AUDIO_SPIRIT_CHANNEL.java
new file mode 100644
index 0000000..82feab1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_AUDIO_SPIRIT_CHANNEL.java
@@ -0,0 +1,33 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 语音激励音频通道配置
+ * @date 2020/11/9
+ */
+public class CFG_AUDIO_SPIRIT_CHANNEL extends NetSDKLib.SdkStructure {
+ /**
+ * 语音激励联动视频通道号
+ */
+ public int nChannel;
+ /**
+ * 语音激励优先级, 1~10
+ */
+ public int nPriority;
+ /**
+ * 对应的视频摄像机的预置点, 与云台一致0~255
+ */
+ public int nPreset;
+
+ @Override
+ public String toString() {
+ return "CFG_AUDIO_SPIRIT_CHANNEL{" +
+ "nChannel=" + nChannel +
+ ", nPriority=" + nPriority +
+ ", nPreset=" + nPreset +
+ '}';
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_AUDIO_SPIRIT_LINKAGE.java b/src/main/java/com/netsdk/lib/structure/CFG_AUDIO_SPIRIT_LINKAGE.java
new file mode 100644
index 0000000..4c5155b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_AUDIO_SPIRIT_LINKAGE.java
@@ -0,0 +1,18 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+import static com.netsdk.lib.constant.SDKStructureFieldLenth.CFG_MAX_LOWER_MATRIX_OUTPUT;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 语音激励联动项
+ * @date 2020/11/9
+ */
+public class CFG_AUDIO_SPIRIT_LINKAGE extends NetSDKLib.SdkStructure {
+ /** 矩阵输出口数量 */
+ public int nOutputNum;
+ /** 同步大画面输出到(多个)矩阵输出口 */
+ public int[] nOutputChanel = new int[CFG_MAX_LOWER_MATRIX_OUTPUT];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_AUTO_HOMING.java b/src/main/java/com/netsdk/lib/structure/CFG_AUTO_HOMING.java
new file mode 100644
index 0000000..e0f4926
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_AUTO_HOMING.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @创建人 291189
+ * @创建时间 2021/5/28
+ * @描述
+ */
+public class CFG_AUTO_HOMING extends NetSDKLib.SdkStructure {
+
+
+ /**
+ * 自动归位开关
+ */
+
+ public int bEnable;
+
+ /**
+ * 空闲时间,表示空闲的时间,单位为秒
+ */
+ public int nTime;
+
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_CALIBRATE_INFO.java b/src/main/java/com/netsdk/lib/structure/CFG_CALIBRATE_INFO.java
new file mode 100644
index 0000000..e7eac2b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_CALIBRATE_INFO.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 标定基本信息
+ * @date 2021/02/02
+ */
+public class CFG_CALIBRATE_INFO extends NetSDKLib.SdkStructure{
+
+ /**
+ * 标定信息单元二维数组
+ */
+ public CFG_CALIBRATE_UNIT_INFO_ARR[] stuCalibrateUnitInfo = new CFG_CALIBRATE_UNIT_INFO_ARR[5];
+
+ /**
+ * 标定数量
+ */
+ public int nInfoNum;
+
+ public CFG_CALIBRATE_INFO() {
+ for (int i = 0; i < stuCalibrateUnitInfo.length; i++) {
+ stuCalibrateUnitInfo[i] = new CFG_CALIBRATE_UNIT_INFO_ARR();
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_CALIBRATE_UNIT_INFO.java b/src/main/java/com/netsdk/lib/structure/CFG_CALIBRATE_UNIT_INFO.java
new file mode 100644
index 0000000..2f0942c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_CALIBRATE_UNIT_INFO.java
@@ -0,0 +1,42 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 标定信息单元
+ * @date 2021/02/02
+ */
+public class CFG_CALIBRATE_UNIT_INFO extends NetSDKLib.SdkStructure{
+
+ /**
+ * 分辨率高
+ */
+ public int nHeight;
+
+ /**
+ * 分辨率宽
+ */
+ public int nWidth;
+
+ /**
+ * 云台位置(P/T/Z 归一化)
+ */
+ public float[] nPosition =new float[3];
+
+ /**
+ * 标定点坐标
+ */
+ public int[] nLocation =new int[2];
+
+ /**
+ * 横向视场角(单位:0.01度)
+ */
+ public int nHFOV;
+
+ /**
+ * 纵向视场角(单位:0.01度)
+ */
+ public int nVFOV;
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_CALIBRATE_UNIT_INFO_ARR.java b/src/main/java/com/netsdk/lib/structure/CFG_CALIBRATE_UNIT_INFO_ARR.java
new file mode 100644
index 0000000..9293a27
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_CALIBRATE_UNIT_INFO_ARR.java
@@ -0,0 +1,23 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 标定信息单元数组
+ * @date 2021/02/02
+ */
+public class CFG_CALIBRATE_UNIT_INFO_ARR extends NetSDKLib.SdkStructure{
+
+ /**
+ * 标定信息单元
+ */
+ public CFG_CALIBRATE_UNIT_INFO[] unitArr = new CFG_CALIBRATE_UNIT_INFO[2];
+
+ public CFG_CALIBRATE_UNIT_INFO_ARR() {
+ for (int i = 0; i < unitArr.length; i++) {
+ unitArr[i] = new CFG_CALIBRATE_UNIT_INFO();
+ }
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_CAMERA_OCCLUSION.java b/src/main/java/com/netsdk/lib/structure/CFG_CAMERA_OCCLUSION.java
new file mode 100644
index 0000000..80bfbcd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_CAMERA_OCCLUSION.java
@@ -0,0 +1,43 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 相机遮挡报警配置
+ * @date 2023/03/31 11:19:02
+ */
+public class CFG_CAMERA_OCCLUSION extends NetSDKLib.SdkStructure {
+ /**
+ * 使能
+ */
+ public int bEnable;
+ /**
+ * 语音播报使能
+ */
+ public int bVoiceBroadcastEnable;
+ /**
+ * 相机遮挡持续时间, 取值范围:0-10,默认值为2
+ */
+ public int nCameraOcclusionTime;
+ /**
+ * 时间间隔, 取值范围:0-65536,默认值为60
+ */
+ public int nAlarmInterval;
+ /**
+ * 报警触发速度, 取值范围:0-200,默认值为30
+ */
+ public int nAlarmSpeed;
+ /**
+ * 报警上报速度, 取值范围:0-200,默认值为30
+ */
+ public int nAlarmReportSpeed;
+ /**
+ * 保留
+ */
+ public byte[] byReserved = new byte[1024];
+
+ public CFG_CAMERA_OCCLUSION() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_CAP_ANALYSE_INFO.java b/src/main/java/com/netsdk/lib/structure/CFG_CAP_ANALYSE_INFO.java
new file mode 100644
index 0000000..bfda78e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_CAP_ANALYSE_INFO.java
@@ -0,0 +1,192 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 视频分析能力集 对应能力集命令 CFG_CAP_CMD_VIDEOANALYSE
+ * @date 2021/01/08
+ */
+public class CFG_CAP_ANALYSE_INFO extends NetSDKLib.SdkStructure{
+
+ /**
+ * 支持的场景个数
+ */
+ public int nSupportedSceneNum;
+
+ /**
+ * 支持的场景列表
+ */
+ public MaxNameByteArrInfo[] szSceneName = (MaxNameByteArrInfo[])new MaxNameByteArrInfo().toArray(NetSDKLib.MAX_SCENE_LIST_SIZE);
+
+
+ /**
+ * 每通道支持最大分析模块数
+ */
+ public int nMaxMoudles;
+
+ /**
+ * 支持的检测物体类型个数
+ */
+ public int nSupportedObjectTypeNum;
+
+ /**
+ * 支持的检测物体类型列表
+ */
+ public MaxNameByteArrInfo[] szObjectTypeName = (MaxNameByteArrInfo[])new MaxNameByteArrInfo().toArray(NetSDKLib.MAX_OBJECT_LIST_SIZE);
+
+ /**
+ * 每通道支持最大规则条数
+ */
+ public int nMaxRules;
+
+ /**
+ * 支持的事件类型规则个数
+ */
+ public int nSupportedRulesNum;
+
+ /**
+ * 支持的事件类型规则列表,事件类型,详见dhnetsdk.h中"智能分析事件类型"
+ */
+ public int[] dwRulesType = new int[NetSDKLib.MAX_RULE_LIST_SIZE];
+
+ /**
+ * 支持的最大标尺个数
+ */
+ public int nMaxStaffs;
+
+ /**
+ * 折线最大顶点数
+ */
+ public int nMaxPointOfLine;
+
+ /**
+ * 区域最大顶点数
+ */
+ public int nMaxPointOfRegion;
+
+ /**
+ * 最大内部选项个数
+ */
+ public int nMaxInternalOptions;
+
+ /**
+ * 是否支持复杂尺寸过滤器复杂尺寸过滤器使用独立的面积过滤和宽高比过滤参数
+ */
+ public byte bComplexSizeFilter;
+
+ /**
+ * 是否支持特定的物体过滤器
+ */
+ public byte bSpecifiedObjectFilter;
+
+ /**
+ * 支持模块中的最大排除区域个数
+ */
+ public int nMaxExcludeRegionNum;
+
+ /**
+ * 支持的模块中的最大校准框个数
+ */
+ public int nMaxCalibrateBoxNum;
+
+ /**
+ * 模块中至少需要设置的校准框个数
+ */
+ public int nMinCalibrateBoxNum;
+
+ /**
+ * 模块中支持的最大特殊区域检测个数
+ */
+ public int nMaxSepcialDetectRegions;
+
+ /**
+ * 支持的每天的时间段个数
+ */
+ public int nSupportedTimeSectionNum;
+
+ /**
+ * 支持的特殊检测区属性个数
+ */
+ public int nSpecialDetectPropertyNum;
+
+ /**
+ * 支持的特殊检测区属性
+ */
+ public int[] nSupportedSpecialDetectPropertys = new int[NetSDKLib.EM_SEPCIALREGION_PROPERTY_TYPE.EM_SEPCIALREGION_PROPERTY_TYPE_NUM];
+
+ /**
+ * 支持的视频通道类型选择 第0位为1表示支持数字类型,第1位为1表示支持模拟类型,第2为1表示支持混合(数字和模拟)
+ */
+ public int nSupportedVideoChannelType;
+
+ /**
+ * 是否支持多场景切换
+ */
+ public byte bSupportMultiSceneSwitch;
+
+ /**
+ * 支持的场景能力集
+ */
+ public CFG_VACAP_SUPPORTEDSCENES stSupportScenes;
+
+ /**
+ * 支持的场景组合项个数
+ */
+ public int nSupportedComp;
+
+ /**
+ * 支持的场景组合项列表
+ */
+ public CFG_SUPPORTED_COMP[] stuSupportedComp = (CFG_SUPPORTED_COMP[])new CFG_SUPPORTED_COMP().toArray(NetSDKLib.MAX_SUPPORTED_COMP_SIZE);
+
+ /**
+ * 0 Module/Rule配置均要设置(默认,智能服务器), 1 仅Rule配置要设置(IPC/xVR)
+ */
+ public byte byFilterMask;
+
+ /**
+ * 摄像头安装角度显示方式,{ @link EM_DISPLAY_CAMERA_ANGLE_TYPE }
+ */
+ public int emDisCameraAngleType;
+
+ /**
+ * 实际返回客流量统计场景PD个数
+ */
+ public int nMaxNumberStatMultNum;
+
+ /**
+ * 实际返回客流量统计场景PD个数
+ */
+ public CFG_NUMBERSTAT_MULT_INFO[] stuNumberStatMult = (CFG_NUMBERSTAT_MULT_INFO[])new CFG_NUMBERSTAT_MULT_INFO().toArray(NetSDKLib.MAX_NUMBER_STAT_MAULT_NUM);
+
+ /**
+ * 全能力集,表示视频通道能力 full可以认为是不变的
+ */
+ public VA_CAPS_INFO stuFullCaps;
+
+ /**
+ * 动态能力集,表示当前视频通道能力
+ */
+ public VA_DYNAMIC_CAPS_INFO stuDynamicCaps;
+
+ public CFG_CAP_ANALYSE_INFO() {
+
+ for (int i = 0; i < szSceneName.length; i++) {
+ szSceneName[i] = new MaxNameByteArrInfo();
+ }
+
+ for (int i = 0; i < szObjectTypeName.length; i++) {
+ szObjectTypeName[i] = new MaxNameByteArrInfo();
+ }
+
+ for (int i = 0; i < stuSupportedComp.length; i++) {
+ stuSupportedComp[i] = new CFG_SUPPORTED_COMP();
+ }
+
+ for (int i = 0; i < stuNumberStatMult.length; i++) {
+ stuNumberStatMult[i] = new CFG_NUMBERSTAT_MULT_INFO();
+ }
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_CAP_ANALYSE_INFO_OPT.java b/src/main/java/com/netsdk/lib/structure/CFG_CAP_ANALYSE_INFO_OPT.java
new file mode 100644
index 0000000..ce9c255
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_CAP_ANALYSE_INFO_OPT.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+/**
+ * @author 251823
+ * @description 视频分析能力集 简化结构体,用于查询IPC是否有目标识别能力
+ * @date 2021/01/12
+ */
+public class CFG_CAP_ANALYSE_INFO_OPT extends NetSDKLib.SdkStructure{
+
+ /**
+ * 支持的场景个数
+ */
+ public int nSupportedSceneNum;
+
+ /**
+ * 支持的场景列表
+ */
+ public MaxNameByteArrInfo[] szSceneName = (MaxNameByteArrInfo[])new MaxNameByteArrInfo().toArray(NetSDKLib.MAX_SCENE_LIST_SIZE);
+
+ public CFG_CAP_ANALYSE_INFO_OPT() {
+ for (int i = 0; i < szSceneName.length; i++) {
+ szSceneName[i] = new MaxNameByteArrInfo();
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_CAP_ANALYSE_REQ_EXTEND_INFO.java b/src/main/java/com/netsdk/lib/structure/CFG_CAP_ANALYSE_REQ_EXTEND_INFO.java
new file mode 100644
index 0000000..459f1ab
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_CAP_ANALYSE_REQ_EXTEND_INFO.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 获取能力的请求数据扩展
+ * @date 2021/01/11
+ */
+public class CFG_CAP_ANALYSE_REQ_EXTEND_INFO extends NetSDKLib.SdkStructure{
+
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ /**
+ * 智能分析实例类型,参考{ @link CFG_EM_INSTANCE_SUBCLASS_TYPE}
+ */
+ public int emSubClassID;
+
+ public CFG_CAP_ANALYSE_REQ_EXTEND_INFO() {
+ this.dwSize = this.size();
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_CAP_CELIBRATE_AREA.java b/src/main/java/com/netsdk/lib/structure/CFG_CAP_CELIBRATE_AREA.java
new file mode 100644
index 0000000..ad15e88
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_CAP_CELIBRATE_AREA.java
@@ -0,0 +1,37 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 标定区域能力信息
+ * @date 2021/01/11
+ */
+public class CFG_CAP_CELIBRATE_AREA extends NetSDKLib.SdkStructure{
+
+ /**
+ * 标定区域类型,参考{ @link EM_CALIBRATEAREA_TYPE}
+ */
+ public int emType;
+
+ /**
+ * 支持的水平标尺最大个数
+ */
+ public byte byMaxHorizontalStaffNum;
+
+ /**
+ * 支持的水平标尺最小个数
+ */
+ public byte byMinHorizontalStaffNum;
+
+ /**
+ * 支持的垂直标尺最大个数
+ */
+ public byte byMaxVerticalStaffNum;
+
+ /**
+ * 支持的垂直标尺最小个数
+ */
+ public byte byMinVerticalStaffNum;
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_CAP_SCENE.java b/src/main/java/com/netsdk/lib/structure/CFG_CAP_SCENE.java
new file mode 100644
index 0000000..50be779
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_CAP_SCENE.java
@@ -0,0 +1,268 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+/**
+ * @author 251823
+ * @description 场景能力
+ * @date 2021/01/11
+ */
+public class CFG_CAP_SCENE extends NetSDKLib.SdkStructure{
+
+ /**
+ * 场景名称
+ */
+ public byte[] szSceneName = new byte[NetSDKLib.MAX_PATH];
+
+ /**
+ * 当前规则类型支持的检测物体类型个数
+ */
+ public int nSupportedObjectTypeNum;
+
+ /**
+ * 当前规则类型支持的检测物体类型列表
+ */
+ public MaxNameByteArrInfo[] szObjectTypeName = (MaxNameByteArrInfo[])new MaxNameByteArrInfo().toArray(NetSDKLib.MAX_OBJECT_LIST_SIZE);
+
+ /**
+ * 支持的规则个数
+ */
+ public int nSupportRules;
+
+ /**
+ * 支持的规则列表
+ */
+ public SCENE_SUPPORT_RULE[] stSpportRules = (SCENE_SUPPORT_RULE[])new SCENE_SUPPORT_RULE().toArray(NetSDKLib.MAX_RULE_LIST_SIZE);
+
+ /**
+ * 是否支持扰动强度设置
+ */
+ public byte bDisturbance;
+
+ /**
+ * 是否支持去扰动处理
+ */
+ public byte bAntiDisturbance;
+
+ /**
+ * 是否支持逆光处理
+ */
+ public byte bBacklight;
+
+ /**
+ * 是否支持阴影处理
+ */
+ public byte bShadow;
+
+ /**
+ * 是否支持检测精度
+ */
+ public byte bAccuracy;
+
+ /**
+ * 是否支持检测步长
+ */
+ public byte bMovingStep;
+
+ /**
+ * 是否支持检测缩放
+ */
+ public byte bScalingFactor;
+
+ /**
+ * 是否支持Y分量判定阈值
+ */
+ public byte bThresholdY;
+
+ /**
+ * 是否支持UV分量判定阈值
+ */
+ public byte bThresholdUV;
+
+ /**
+ * 是否支持边缘检测判定阈值
+ */
+ public byte bThresholdEdge;
+
+ /**
+ * 是否支持检测平衡
+ */
+ public byte bDetectBalance;
+
+ /**
+ * 是否支持算法序号
+ */
+ public byte bAlgorithmIndex;
+
+ /**
+ * 是否支持高光处理,即Backgroud参数
+ */
+ public byte bHighlight;
+
+ /**
+ * 是否支持物体抓图
+ */
+ public byte bSnapshot;
+
+ /**
+ * 是否支持检测区域配置
+ */
+ public byte bDetectRegion;
+
+ /**
+ * 是否支持排除区域配置
+ */
+ public byte bExcludeRegion;
+
+ /**
+ * 是否支持轮廓辅助跟踪
+ */
+ public byte bContourAssistantTrack;
+
+ /**
+ * 是否摄像头位置参数
+ */
+ public byte bCameraAspect;
+
+ /**
+ * 是否支持抖动参数
+ */
+ public byte bJitter;
+
+ /**
+ * 是否支持去抖动处理参数
+ */
+ public byte bDejitter;
+
+ /**
+ * 最大标定区域个数
+ */
+ public int nMaxCalibrateAreaNum;
+
+ /**
+ * 标定区域能力信息个数
+ */
+ public int nCalibrateAreaNum;
+
+ /**
+ * 标定区域能力信息
+ */
+ public CFG_CAP_CELIBRATE_AREA[] stCalibrateAreaCap = (CFG_CAP_CELIBRATE_AREA[])new CFG_CAP_CELIBRATE_AREA().toArray(NetSDKLib.MAX_CALIBRATEAREA_TYPE_NUM);
+
+ /**
+ * 是否支持像素计量方式
+ */
+ public byte bPixel;
+
+ /**
+ * 是否支持实际长度计量方式
+ */
+ public byte bMetric;
+
+ /**
+ * 是否支持远端近端标定后的像素计量方式
+ */
+ public byte bCalibratedPixel;
+
+ /**
+ * 当前场景下支持的子场景类型
+ */
+ public MaxSceneSupTypeByteArrInfo[] szSubType = (MaxSceneSupTypeByteArrInfo[])new MaxSceneSupTypeByteArrInfo().toArray(NetSDKLib.MAX_SCENE_SUBTYPE_NUM);
+
+ /**
+ * 子场景类型个数
+ */
+ public int nSubTypeNum;
+
+ /**
+ * 每个大类支持的最大规则条数
+ */
+ public int nMaxRules;
+
+ /**
+ * 是否支持重建背景,默认不支持(false)
+ */
+ public int bSupportedSetModule;
+
+ /**
+ * 是否支持打架标定配置,默认FALSE
+ */
+ public int bSupportFightCalibrate;
+
+ /**
+ * 车辆种类划分类型个数
+ */
+ public int nVehicleTypeSplitNum;
+
+ /**
+ * 车辆种类划分类型 { @link EM_VEHICLE_TYPE_SPLIT }
+ */
+ public int[] emVehicleTypeSplit = new int[16];
+
+ /**
+ * 是否支持隐私保护, false-不支持(默认);true-支持
+ */
+ public int bPrivacyMaskSupport;
+
+ /**
+ * 隐私保护的物体类型的数量
+ */
+ public int nPrivacyMaskCount;
+
+ /**
+ * 隐私保护的物体类型 { @link EM_PRIVACY_MASK_TYPE }
+ */
+ public int[] emPrivacyMaskTypes = new int[32];
+
+ /**
+ * 大类业务方案别名
+ */
+ public byte[] szClassAlias = new byte[16];
+
+ /**
+ * 人群分布图的标定线段相关能力
+ */
+ public CROWD_CALIBRATION stuCalibration;
+
+ /**
+ * 人体测温场景能力
+ */
+ public CFG_ANATOMYTEMP_DETECT_SCENE_CAPS stuAnatomyTempDetect;
+
+ /**
+ * 立体行为分析场景能力
+ */
+ public CFG_STEREO_BEHAVIOR_SCENE_CAPS stuStereoBehaviorCaps;
+
+ /**
+ * 姿态行为分析场景能力个数
+ */
+ public int nGenealAttitudeCaps;
+
+ /**
+ * 姿态行为分析场景能力
+ */
+ public CFG_GENEAL_ATTITUDE_CAPS[] stuGenealAttitudeCaps = (CFG_GENEAL_ATTITUDE_CAPS[])new CFG_GENEAL_ATTITUDE_CAPS().toArray(128);
+
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[1024];
+
+
+ public CFG_CAP_SCENE() {
+ for (int i = 0; i < szObjectTypeName.length; i++) {
+ szObjectTypeName[i] = new MaxNameByteArrInfo();
+ }
+ for (int i = 0; i < stSpportRules.length; i++) {
+ stSpportRules[i] = new SCENE_SUPPORT_RULE();
+ }
+ for (int i = 0; i < stCalibrateAreaCap.length; i++) {
+ stCalibrateAreaCap[i] = new CFG_CAP_CELIBRATE_AREA();
+ }
+
+ for (int i = 0; i < szSubType.length; i++) {
+ szSubType[i] = new MaxSceneSupTypeByteArrInfo();
+ }
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_CHANNEL_TIME_SECTION.java b/src/main/java/com/netsdk/lib/structure/CFG_CHANNEL_TIME_SECTION.java
new file mode 100644
index 0000000..f9a0abb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_CHANNEL_TIME_SECTION.java
@@ -0,0 +1,21 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 网络存储服务器配置
+ * @date 2022/09/08 19:33:10
+ */
+public class CFG_CHANNEL_TIME_SECTION extends NetSDKLib.SdkStructure {
+ /**
+ * 存储时间段
+ */
+ public NetSDKLib.CFG_TIME_SECTION[] stuTimeSection = new NetSDKLib.CFG_TIME_SECTION[7 * 2];
+
+ public CFG_CHANNEL_TIME_SECTION() {
+ for (int i = 0; i < stuTimeSection.length; i++) {
+ stuTimeSection[i] = new NetSDKLib.CFG_TIME_SECTION();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_CHASSISINTRUSION_INFO.java b/src/main/java/com/netsdk/lib/structure/CFG_CHASSISINTRUSION_INFO.java
new file mode 100644
index 0000000..48141a3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_CHASSISINTRUSION_INFO.java
@@ -0,0 +1,22 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 机箱入侵报警(防拆报警)配置
+ * @date 2023/03/15 21:57:49
+ */
+public class CFG_CHASSISINTRUSION_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 使能开关
+ */
+ public int bEnable;
+ /**
+ * 报警联动
+ */
+ public NetSDKLib.CFG_ALARM_MSG_HANDLE stuEventHandler = new NetSDKLib.CFG_ALARM_MSG_HANDLE();
+
+ public CFG_CHASSISINTRUSION_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_CROSSLINE_INFO.java b/src/main/java/com/netsdk/lib/structure/CFG_CROSSLINE_INFO.java
new file mode 100644
index 0000000..129d5ad
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_CROSSLINE_INFO.java
@@ -0,0 +1,141 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 事件类型 EVENT_IVS_CROSSLINEDETECTION (警戒线事件)对应的规则配置
+ * @date 2021/07/06
+ */
+public class CFG_CROSSLINE_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 规则名称,不同规则不能重名
+ */
+ public byte[] szRuleName = new byte[NetSDKLib.MAX_NAME_LEN];
+
+ /**
+ * 规则使能
+ */
+ public byte bRuleEnable;
+
+ /**
+ * 触发跟踪使能,仅对绊线,入侵规则有效
+ */
+ public byte bTrackEnable;
+
+ /**
+ * 保留字段
+ */
+ public byte[] bReserved = new byte[2];
+
+ /**
+ * 相应物体类型个数
+ */
+ public int nObjectTypeNum;
+
+ /**
+ * 相应物体类型列表
+ */
+ public MaxNameByteArrInfo[] szObjectTypes = (MaxNameByteArrInfo[])new MaxNameByteArrInfo().toArray(NetSDKLib.MAX_OBJECT_LIST_SIZE);
+
+ /**
+ * 检测方向:0:由左至右;1:由右至左;2:两者都可以
+ */
+ public int nDirection;
+
+ /**
+ * 警戒线顶点数
+ */
+ public int nDetectLinePoint;
+
+ /**
+ * 警戒线
+ */
+ public NetSDKLib.CFG_POLYLINE[] stuDetectLine = (NetSDKLib.CFG_POLYLINE[]) new NetSDKLib.CFG_POLYLINE().toArray(NetSDKLib.MAX_POLYLINE_NUM);
+ /**
+ * 报警联动
+ */
+ public NetSDKLib.CFG_ALARM_MSG_HANDLE stuEventHandler;
+
+ /**
+ * 事件响应时间段
+ */
+ public NetSDKLib.TIME_SECTION_WEEK_DAY_10[] stuTimeSectionWeekDay =
+ (NetSDKLib.TIME_SECTION_WEEK_DAY_10[])new NetSDKLib.TIME_SECTION_WEEK_DAY_10().toArray(NetSDKLib.WEEK_DAY_NUM);
+ /**
+ * stuTimeSection字段是否禁用,默认FALSE:不禁用,TRUE:禁用,用户控制
+ */
+ public boolean bDisableTimeSection;
+
+ /**
+ * 云台预置点编号 0~65535
+ */
+ public int nPtzPresetId;
+
+ /**
+ * 规则特定的尺寸过滤器是否有效
+ */
+ public boolean bSizeFileter;
+
+ /**
+ * 规则特定的尺寸过滤器
+ */
+ public NetSDKLib.CFG_SIZEFILTER_INFO stuSizeFileter;
+
+ /**
+ * 触发报警位置数
+ */
+ public int nTriggerPosition;
+
+ /**
+ * 触发报警位置,0-目标外接框中心, 1-目标外接框左端中心, 2-目标外接框顶端中心, 3-目标外接框右端中心, 4-目标外接框底端中心
+ */
+ public byte[] bTriggerPosition = new byte[8];
+
+ /**
+ * 跟踪持续时间,0秒:一直跟踪,1~300秒:跟踪持续时间
+ */
+ public int nTrackDuration;
+
+ /**
+ * 检测的车辆子类型个数
+ */
+ public int nVehicleSubTypeNum;
+
+ /**
+ * 检测的车辆子类型列表
+ */
+ public int[] emVehicleSubType = new int[128];
+
+ /**
+ * 是否开启目标属性识别,默认false
+ */
+ public boolean bFeatureEnable;
+
+ /**
+ * 前端视频分析联动
+ */
+ public NetSDKLib.CFG_ALARM_MSG_HANDLE stuRemoteEventHandler;
+
+ /**
+ * 前端视频分析联动响应时间段
+ */
+ public NetSDKLib.TIME_SECTION_WEEK_DAY_10[] stuRemoteTimeSection =
+ (NetSDKLib.TIME_SECTION_WEEK_DAY_10[])new NetSDKLib.TIME_SECTION_WEEK_DAY_10().toArray(NetSDKLib.WEEK_DAY_NUM);
+
+ /**
+ * stuRemoteTimeSection字段是否禁用, 默认FALSE:不禁用, TRUE:禁用, 用户控制
+ */
+ public boolean bDisableRemoteTimeSection;
+
+ /**
+ * 物体过滤器是否有效, 即stuObjectFilter 是否有效
+ */
+ public boolean bObjectFilter;
+
+ /**
+ * 物体过滤器信息
+ */
+ public NET_CFG_OBJECT_FILTER_INFO stuObjectFilter;
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_CROSSREGION_INFO.java b/src/main/java/com/netsdk/lib/structure/CFG_CROSSREGION_INFO.java
new file mode 100644
index 0000000..79edac5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_CROSSREGION_INFO.java
@@ -0,0 +1,173 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 事件类型EVENT_IVS_CROSSREGIONDETECTION(警戒区事件)对应的规则配置
+ * @date 2021/07/06
+ */
+public class CFG_CROSSREGION_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 规则名称,不同规则不能重名
+ */
+ public byte[] szRuleName = new byte[NetSDKLib.MAX_NAME_LEN];
+
+ /**
+ * 规则使能
+ */
+ public byte bRuleEnable;
+
+ /**
+ * 触发跟踪使能,仅对绊线,入侵规则有效
+ */
+ public byte bTrackEnable;
+
+ /**
+ * 保留字段
+ */
+ public byte[] bReserved = new byte[2];
+
+ /**
+ * 相应物体类型个数
+ */
+ public int nObjectTypeNum;
+
+ /**
+ * 相应物体类型列表
+ */
+ public MaxNameByteArrInfo[] szObjectTypes = (MaxNameByteArrInfo[])new MaxNameByteArrInfo().toArray(NetSDKLib.MAX_OBJECT_LIST_SIZE);
+
+ /**
+ * 检测方向:0:Enter;1:Leave;2:Both
+ */
+ public int nDirection;
+
+ /**
+ * 警戒区顶点数
+ */
+ public int nDetectRegionPoint;
+
+ /**
+ * 警戒区
+ */
+ public NetSDKLib.CFG_POLYGON[] stuDetectRegion = (NetSDKLib.CFG_POLYGON[]) new NetSDKLib.CFG_POLYGON().toArray(NetSDKLib.MAX_POLYGON_NUM);
+ /**
+ * 报警联动
+ */
+ public NetSDKLib.CFG_ALARM_MSG_HANDLE stuEventHandler;
+
+ /**
+ * 事件响应时间段
+ */
+ public NetSDKLib.TIME_SECTION_WEEK_DAY_10[] stuTimeSectionWeekDay =
+ (NetSDKLib.TIME_SECTION_WEEK_DAY_10[])new NetSDKLib.TIME_SECTION_WEEK_DAY_10().toArray(NetSDKLib.WEEK_DAY_NUM);
+ /**
+ * stuTimeSection字段是否禁用,默认FALSE:不禁用,TRUE:禁用,用户控制
+ */
+ public boolean bDisableTimeSection;
+
+ /**
+ * 云台预置点编号 0~65535
+ */
+ public int nPtzPresetId;
+
+ /**
+ * 规则特定的尺寸过滤器是否有效
+ */
+ public boolean bSizeFileter;
+
+ /**
+ * 规则特定的尺寸过滤器
+ */
+ public NetSDKLib.CFG_SIZEFILTER_INFO stuSizeFileter;
+
+ /**
+ * 检测动作数
+ */
+ public int nActionType;
+
+ /**
+ * 检测动作列表,0-出现 1-消失 2-在区域内 3-穿越区域
+ */
+ public byte[] bActionType = new byte[4];
+
+ /**
+ * 最小目标个数(当bActionType中包含"2-在区域内"时有效)
+ */
+ public int nMinTargets;
+
+ /**
+ * 最大目标个数(当bActionType中包含"2-在区域内"时有效)
+ */
+ public int nMaxTargets;
+
+ /**
+ * 最短持续时间, 单位秒(当bActionType中包含"2-在区域内"时有效)
+ */
+ public int nMinDuration;
+
+ /**
+ * 报告时间间隔, 单位秒(当bActionType中包含"2-在区域内"时有效)
+ */
+ public int nReportInterval;
+
+ /**
+ * 跟踪持续时间,0秒:一直跟踪,1~300秒:跟踪持续时间
+ */
+ public int nTrackDuration;
+
+ /**
+ * 检测的车辆子类型个数
+ */
+ public int nVehicleSubTypeNum;
+
+ /**
+ * 检测的车辆子类型列表
+ */
+ public int[] emVehicleSubType = new int[128];
+
+ /**
+ * 是否开启目标属性识别,默认false
+ */
+ public boolean bFeatureEnable;
+
+ /**
+ * 前端视频分析联动
+ */
+ public NetSDKLib.CFG_ALARM_MSG_HANDLE stuRemoteEventHandler;
+
+ /**
+ * 前端视频分析联动响应时间段
+ */
+ public NetSDKLib.TIME_SECTION_WEEK_DAY_10[] stuRemoteTimeSection =
+ (NetSDKLib.TIME_SECTION_WEEK_DAY_10[])new NetSDKLib.TIME_SECTION_WEEK_DAY_10().toArray(NetSDKLib.WEEK_DAY_NUM);
+ /**
+ * stuRemoteTimeSection字段是否禁用, 默认FALSE:不禁用, TRUE:禁用, 用户控制
+ */
+ public boolean bDisableRemoteTimeSection;
+
+ /**
+ * 物体过滤器是否有效, 即stuObjectFilter 是否有效
+ */
+ public boolean bObjectFilter;
+
+ /**
+ * 物体过滤器信息
+ */
+ public NET_CFG_OBJECT_FILTER_INFO stuObjectFilter;
+
+ /**
+ * 灵敏度,值越小灵敏度越低。取值1-10
+ */
+ public int nSensitivity;
+
+ /**
+ * 报警类型, EM_CFG_CROSSREGION_ALARMTYPE
+ */
+ public int emAlarmType;
+
+
+
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_DETAIL_DRIVEASSISTANT_INFO.java b/src/main/java/com/netsdk/lib/structure/CFG_DETAIL_DRIVEASSISTANT_INFO.java
new file mode 100644
index 0000000..b6dfafb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_DETAIL_DRIVEASSISTANT_INFO.java
@@ -0,0 +1,22 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 驾驶辅助场景配置
+ * @date 2021/2/22
+ */
+public class CFG_DETAIL_DRIVEASSISTANT_INFO extends NetSDKLib.SdkStructure {
+ /** 是否有效 */
+ public boolean bValid;
+ /** 车宽 0-5000mm 单位mm */
+ public int nVehicleWidth;
+ /** 相机高度 0-5000mm 单位mm */
+ public int nCamHeight;
+ /** 车头到相机的距离 0-5000mm 单位mm */
+ public int nCamToCarHead;
+ /** 保留 */
+ public byte[] byReserved = new byte[56];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/CFG_DETECT_REGION.java b/src/main/java/com/netsdk/lib/structure/CFG_DETECT_REGION.java
new file mode 100644
index 0000000..a8c0b2d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/CFG_DETECT_REGION.java
@@ -0,0 +1,41 @@
+package com.netsdk.lib.structure;
+/**
+ * @author 47081
+ * @desc
+ * @version 1.0.0
+ * @date 2021/4/9
+ */
+import com.netsdk.lib.NetSDKLib;
+
+import static com.netsdk.lib.NetSDKLib.CFG_COMMON_STRING_64;
+import static com.netsdk.lib.constant.SDKStructureFieldLenth.MAX_MOTION_COL;
+import static com.netsdk.lib.constant.SDKStructureFieldLenth.MAX_MOTION_ROW;
+
+/**
+ * @author 47081
+ * @description
+ * @date 2021/4/9
+ * @version 1.0
+ */
+public class CFG_DETECT_REGION extends NetSDKLib.SdkStructure {
+ /** 区域ID */
+ public int nRegionID;
+ /** 动态窗口名称 */
+ public byte[] szRegionName = new byte[CFG_COMMON_STRING_64];
+ /** 面积阀值,取值[0, 100] */
+ public int nThreshold;
+ /** 灵敏度1~6 */
+ public int nSenseLevel;
+ /** 动态检测区域的行数 */
+ public int nMotionRow;
+ /** 动态检测区域的列数 */
+ public int nMotionCol;
+ /** 检测区域,最多32*32块区域 */
+ public BYTE_32[] byRegion=new BYTE_32[MAX_MOTION_ROW];
+
+ public CFG_DETECT_REGION(){
+ for(int i=0;i 0,禁止名单数据记录
+ */
+ public int nTrafficBlackListID;
+ /**
+ * 车身颜色RGBA
+ */
+ public NET_COLOR_RGBA stuRGBA = new NET_COLOR_RGBA();
+ /**
+ * 抓拍时间
+ */
+ public NET_TIME stSnapTime = new NET_TIME();
+ /**
+ * 记录编号
+ */
+ public int nRecNo;
+ /**
+ * 自定义车位号(停车场用)
+ */
+ public byte[] szCustomParkNo = new byte[33];
+
+ public byte[] byReserved1 = new byte[3];
+ /**
+ * 车板位号
+ */
+ public int nDeckNo;
+ /**
+ * 空闲车板数量
+ */
+ public int nFreeDeckCount;
+ /**
+ * 占用车板数量
+ */
+ public int nFullDeckCount;
+ /**
+ * 总共车板数量
+ */
+ public int nTotalDeckCount;
+ /**
+ * 违章名称
+ */
+ public byte[] szViolationName = new byte[64];
+ /**
+ * 车重(单位 Kg)
+ */
+ public int nWeight;
+ /**
+ * 自定义车道方向,byDirection为9时有效
+ */
+ public byte[] szCustomRoadwayDirection = new byte[32];
+ /**
+ * 物理车道号,取值0到5
+ */
+ public byte byPhysicalLane;
+
+ public byte[] byReserved2 = new byte[3];
+ /**
+ * 车辆行驶方向 {@link com.netsdk.lib.enumeration.EM_TRAFFICCAR_MOVE_DIRECTION}
+ */
+ public int emMovingDirection;
+ /**
+ * 对应电子车牌标签信息中的过车时间(ThroughTime)
+ */
+ public NET_TIME stuEleTagInfoUTC = new NET_TIME();
+ /**
+ * 车窗包围盒,0~8191
+ */
+ public NET_RECT stuCarWindowBoundingBox = new NET_RECT();
+ /**
+ * 允许名单信息
+ */
+ public NetSDKLib.NET_TRAFFICCAR_WHITE_LIST stuWhiteList = new NetSDKLib.NET_TRAFFICCAR_WHITE_LIST();
+ /**
+ * 车辆类型 {@link com.netsdk.lib.enumeration.EM_TRAFFICCAR_CAR_TYPE}
+ */
+ public int emCarType;
+ /**
+ * 车道类型 {@link com.netsdk.lib.enumeration.EM_TRAFFICCAR_LANE_TYPE}
+ */
+ public int emLaneType;
+ /**
+ * 车系年款翻译后文本内容
+ */
+ public byte[] szVehicleBrandYearText = new byte[64];
+ /**
+ * 车辆子类型
+ */
+ public byte[] szCategory = new byte[32];
+ /**
+ * 禁止名单信息
+ */
+ public NetSDKLib.NET_TRAFFICCAR_BLACK_LIST stuBlackList = new NetSDKLib.NET_TRAFFICCAR_BLACK_LIST();
+ /**
+ * 车流量方向 {@link NetSDKLib.EM_VEHICLE_DIRECTION}
+ */
+ public int emFlowDirection;
+ /**
+ * 收费公路车辆通行费车型分类 {@link com.netsdk.lib.enumeration.EM_TOLLS_VEHICLE_TYPE}
+ */
+ public int emTollsVehicleType;
+ /**
+ * 轴型代码,参考轴型国标 0代表其他
+ */
+ public int nAxleType;
+ /**
+ * 车轴数量
+ */
+ public int nAxleCount;
+ /**
+ * 车轮数量
+ */
+ public int nWheelNum;
+ /**
+ * 车身抠图
+ */
+ public NET_TRAFFICCAR_ORIGINAL_VEHICLE stuOriginalVehicle = new NET_TRAFFICCAR_ORIGINAL_VEHICLE();
+ /**
+ * 按功能划分的车辆类型 {@link NetSDKLib.EM_VEHICLE_TYPE_BY_FUNC}
+ */
+ public int emVehicleTypeByFunc;
+ /**
+ * 车辆子品牌
+ */
+ public short nSunBrand;
+ /**
+ * 车辆年款
+ */
+ public short nBrandYear;
+ /**
+ * 保留字节,留待扩展.
+ */
+ public byte[] bReserved = new byte[140];
+
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/DEV_EVENT_TRAFFIC_VEHICLE_CLEANLINESS_INFO.java b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_TRAFFIC_VEHICLE_CLEANLINESS_INFO.java
new file mode 100644
index 0000000..3061c5c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_TRAFFIC_VEHICLE_CLEANLINESS_INFO.java
@@ -0,0 +1,69 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author : 260611
+ * @description : 事件类型 EVENT_IVS_TRAFFIC_VEHICLE_CLEANLINESS (交通车辆清洁度检测事件检测)对应的数据块描述信息
+ * @since : Created in 2022/01/18 14:34
+ */
+
+public class DEV_EVENT_TRAFFIC_VEHICLE_CLEANLINESS_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ */
+ public int nAction;
+ /**
+ * 事件名称
+ */
+ public byte[] szName = new byte[128];
+ /**
+ * 时间戳(单位:毫秒)
+ */
+ public double PTS;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX UTC = new NET_TIME_EX();
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * 智能事件规则编号
+ */
+ public int nRuleId;
+ /**
+ * 事件对应文件信息
+ */
+ public NetSDKLib.NET_EVENT_FILE_INFO stuFileInfo = new NetSDKLib.NET_EVENT_FILE_INFO();
+ /**
+ * 检测到的车牌信息
+ */
+ public NetSDKLib.NET_MSG_OBJECT stuObject = new NetSDKLib.NET_MSG_OBJECT();
+ /**
+ * 检测到的车辆信息
+ */
+ public NetSDKLib.NET_MSG_OBJECT stuVehicle = new NetSDKLib.NET_MSG_OBJECT();
+ /**
+ * 触发类型
+ */
+ public int emTriggerType;
+ /**
+ * 公共信息
+ */
+ public NetSDKLib.EVENT_COMM_INFO stuCommInfo = new NetSDKLib.EVENT_COMM_INFO();
+ /**
+ * 清洁度阀值
+ */
+ public int nCleanValue;
+ /**
+ * 保留字节
+ */
+ public byte[] bReserved = new byte[1024];
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/DEV_EVENT_TRAFFIC_VEHICLE_IN_EMERGENCY_LANE_INFO.java b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_TRAFFIC_VEHICLE_IN_EMERGENCY_LANE_INFO.java
new file mode 100644
index 0000000..dd2c2d9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_TRAFFIC_VEHICLE_IN_EMERGENCY_LANE_INFO.java
@@ -0,0 +1,83 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 事件类型 EVENT_IVS_TRAFFIC_VEHICLE_IN_EMERGENCY_LANE (占用应急车道事件)对应的数据块描述信息
+ * @date 2022/11/29 15:05:17
+ */
+public class DEV_EVENT_TRAFFIC_VEHICLE_IN_EMERGENCY_LANE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 0:脉冲事件
+ */
+ public int nAction;
+ /**
+ * 事件名称
+ */
+ public byte[] szName = new byte[128];
+ /**
+ * 时间戳(单位是毫秒)
+ */
+ public int PTS;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX UTC = new NET_TIME_EX();
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * 对应车道号
+ */
+ public int nLane;
+ /**
+ * 检测到的物体
+ */
+ public NetSDKLib.DH_MSG_OBJECT stuObject = new NetSDKLib.DH_MSG_OBJECT();
+ /**
+ * 字节对齐
+ */
+ public byte[] byReserved1 = new byte[4];
+ /**
+ * 车身信息
+ */
+ public NetSDKLib.DH_MSG_OBJECT stuVehicle = new NetSDKLib.DH_MSG_OBJECT();
+ /**
+ * 交通车辆信息
+ */
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stuTrafficCar = new DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO();
+ /**
+ * 字节对齐
+ */
+ public byte[] byReserved2 = new byte[4];
+ /**
+ * 非机动车对象
+ */
+ public NetSDKLib.VA_OBJECT_NONMOTOR stuNonMotor = new NetSDKLib.VA_OBJECT_NONMOTOR();
+ /**
+ * 表示抓拍序号,如3,2,1,1表示抓拍结束,0表示异常结束
+ */
+ public int nSequence;
+ /**
+ * 事件对应文件信息
+ */
+ public NetSDKLib.NET_EVENT_FILE_INFO stuFileInfo = new NetSDKLib.NET_EVENT_FILE_INFO();
+ /**
+ * 公共信息
+ */
+ public NetSDKLib.EVENT_COMM_INFO stuCommInfo = new NetSDKLib.EVENT_COMM_INFO();
+ /**
+ * 预留字段
+ */
+ public byte[] byReserved = new byte[1024];
+
+ public DEV_EVENT_TRAFFIC_VEHICLE_IN_EMERGENCY_LANE_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/DEV_EVENT_TRAFFIC_VISIBILITY_INFO.java b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_TRAFFIC_VISIBILITY_INFO.java
new file mode 100644
index 0000000..b7cf1d0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_TRAFFIC_VISIBILITY_INFO.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 事件类型 EVENT_IVS_TRAFFIC_VISIBILITY (交通能见度事件检测)对应的数据块描述信息
+ * @date 2022/07/29 11:20:58
+ */
+public class DEV_EVENT_TRAFFIC_VISIBILITY_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ */
+ public int nAction;
+ /**
+ * 事件名称
+ */
+ public byte[] szName = new byte[128];
+ /**
+ * 时间戳(单位:毫秒)
+ */
+ public double PTS;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX UTC = new NET_TIME_EX();
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * 智能事件规则编号
+ */
+ public int nRuleId;
+ /**
+ * 事件对应文件信息
+ */
+ public NetSDKLib.NET_EVENT_FILE_INFO stuFileInfo = new NetSDKLib.NET_EVENT_FILE_INFO();
+ /**
+ * 检测到的车牌信息
+ */
+ public NetSDKLib.NET_MSG_OBJECT stuObject = new NetSDKLib.NET_MSG_OBJECT();
+ /**
+ * 触发类型 {@link com.netsdk.lib.enumeration.EM_TRIGGER_TYPE}
+ */
+ public int emTriggerType;
+ /**
+ * 公共信息
+ */
+ public NetSDKLib.EVENT_COMM_INFO stuCommInfo = new NetSDKLib.EVENT_COMM_INFO();
+ /**
+ * 能见程度(表示距离范围)单位:米
+ */
+ public int nVisibility;
+ /**
+ * 保留字节
+ */
+ public byte[] bReserved = new byte[1020];
+
+ public DEV_EVENT_TRAFFIC_VISIBILITY_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/DEV_EVENT_TRUCKNOTCLEAN_FOR_PRMA_INFO.java b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_TRUCKNOTCLEAN_FOR_PRMA_INFO.java
new file mode 100644
index 0000000..23ce6fe
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_TRUCKNOTCLEAN_FOR_PRMA_INFO.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 事件类型 EVENT_IVS_TRUCKNOTCLEAN_FOR_PRMA 工程车未清洗 对应的数据块描述信息
+* @date 2022/12/20 14:23:14
+*/
+public class DEV_EVENT_TRUCKNOTCLEAN_FOR_PRMA_INFO extends NetSDKLib.SdkStructure {
+/**
+通道号
+*/
+public int nChannelID;
+/**
+0-脉冲 1-开始 2-结束
+*/
+public int nAction;
+/**
+事件名称
+*/
+public byte[] szName=new byte[128];
+/**
+时间戳(单位:毫秒)
+*/
+public double PTS;
+/**
+事件发生的时间
+*/
+public NET_TIME_EX UTC=new NET_TIME_EX();
+/**
+事件ID
+*/
+public int nEventID;
+/**
+事件对应文件信息
+*/
+public NetSDKLib.NET_EVENT_FILE_INFO stuFileInfo=new NetSDKLib.NET_EVENT_FILE_INFO();
+/**
+智能事件所属大类 {@link com.netsdk.lib.enumeration.EM_CLASS_TYPE}
+*/
+public int emClass;
+/**
+帧序号
+*/
+public int nSequence;
+/**
+检测到的车牌信息
+*/
+public NetSDKLib.NET_MSG_OBJECT stuObject=new NetSDKLib.NET_MSG_OBJECT();
+/**
+stuSceneImage 是否有效
+*/
+public int bSceneImage;
+/**
+全景广角图
+*/
+public NetSDKLib.SCENE_IMAGE_INFO_EX stuSceneImage=new NetSDKLib.SCENE_IMAGE_INFO_EX();
+/**
+保留字节
+*/
+public byte[] bReserved=new byte[1024];
+
+public DEV_EVENT_TRUCKNOTCLEAN_FOR_PRMA_INFO(){
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/DEV_EVENT_TUMBLE_DETECTION_INFO.java b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_TUMBLE_DETECTION_INFO.java
new file mode 100644
index 0000000..6cd1fa4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_TUMBLE_DETECTION_INFO.java
@@ -0,0 +1,125 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+import java.util.Arrays;
+
+/**
+ * @description: (倒地报警事件)对应数据块描述信息
+ * @author: 251589
+ * @time: 2020/11/25 19:16
+ */
+public class DEV_EVENT_TUMBLE_DETECTION_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+
+ /**
+ * #define DH_EVENT_NAME_LEN 128 事件名称
+ */
+ public byte[] szName = new byte[128];
+
+ /**
+ * 事件动作,1表示持续性事件开始,2表示持续性事件结束;
+ */
+ public int nAction;
+
+ /**
+ * 时间戳(单位是毫秒)
+ */
+ public double PTS;
+
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX UTC;
+
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * UTC时间对应的毫秒数
+ */
+ public int UTCMS;
+
+ /**
+ * 智能事件所属大类
+ */
+ public int emClassType;
+
+ /**
+ * 目标ID
+ */
+ public int nObjectID;
+
+ /**
+ * 物体类型,支持以下:"Unknown", "Human", "Vehicle", "Fire", "Smoke", "Plate",
+ * "HumanFace", "Container", "Animal", "TrafficLight", "PastePaper",
+ * "HumanHead", "BulletHole", "Entity" #define DH_COMMON_STRING_16 16 //
+ * 通用字符串长度16
+ */
+ public byte[] szObjectType = new byte[16];
+
+ /**
+ * 物体包围盒
+ */
+ public NetSDKLib.NET_RECT stuBoundingBox;
+
+ /**
+ * 智能物体全局唯一物体标识 有效数据位21位,包含’\0’ 前2位%d%d:01-视频片段, 02-图片, 03-文件, 99-其他
+ * 中间14位YYYYMMDDhhmmss:年月日时分秒 后5位%u%u%u%u%u:物体ID,如00001
+ */
+ public byte[] szSerialUUID = new byte[22];
+
+ /**
+ * 全景广角图
+ */
+ public NetSDKLib.SCENE_IMAGE_INFO stuSceneImage;
+
+ /**
+ * 图片信息数组,结构体NET_IMAGE_INFO_EX2数组指针
+ */
+ public Pointer pstuImageInfo;
+
+ /**
+ * 图片信息个数
+ */
+ public int nImageInfoNum;
+
+ /**
+ * 事件公共扩展字段结构体
+ */
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND();
+ /**
+ * 检测区个数
+ */
+ public int nDetectRegionNum;
+ /**
+ * 检测区
+ */
+ public NET_POINT_EX[] stuDetectRegion = new NET_POINT_EX[20];
+
+ /**
+ * 保留字节
+ */
+ public byte[] bReserved = new byte[834];
+
+ public DEV_EVENT_TUMBLE_DETECTION_INFO() {
+ for (int i = 0; i < stuDetectRegion.length; i++) {
+ stuDetectRegion[i] = new NET_POINT_EX();
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "(倒地报警事件)对应数据块描述信息 DEV_EVENT_TUMBLE_DETECTION_INFO{" + "通道号 =" + nChannelID + ", 事件名称 ="
+ + Arrays.toString(szName) + ", 事件动作 =" + nAction + ", 时间戳(毫秒) =" + PTS + ", 事件发生的时间 =" + UTC
+ + ", 事件ID =" + nEventID + ", UTC时间对应的毫秒数 =" + UTCMS + ", 智能事件所属大类 =" + emClassType + ", 目标ID ="
+ + nObjectID + ", 物体类型 =" + Arrays.toString(szObjectType) + ", 物体包围盒 =" + stuBoundingBox + ", 保留字节 ="
+ + Arrays.toString(bReserved) + '}';
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/DEV_EVENT_VEHICLE_DISTANCE_NEAR_INFO.java b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_VEHICLE_DISTANCE_NEAR_INFO.java
new file mode 100644
index 0000000..9574a23
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_VEHICLE_DISTANCE_NEAR_INFO.java
@@ -0,0 +1,57 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 事件类型 EVENT_IVS_VEHICLE_DISTANCE_NEAR (安全驾驶车距过近报警事件) 对应的数据块描述信息
+ * @date 2021/09/27
+ */
+public class DEV_EVENT_VEHICLE_DISTANCE_NEAR_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 事件动作, 0表示脉冲事件, 1表示持续性事件开始, 2表示持续性事件结束;
+ */
+ public int nAction;
+
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX UTC;
+
+ /**
+ * GPS信息
+ */
+ public NetSDKLib.NET_GPS_STATUS_INFO stuGPSStatusInfo;
+
+ /**
+ * 司机ID
+ */
+ public byte[] szDriverID = new byte[32];
+
+ /**
+ * 违章关联视频FTP上传路径
+ */
+ public byte[] szVideoPath = new byte[256];
+
+ /**
+ * 违章关联的多个视频信息个数
+ */
+ public int nRelatingVideoInfoNum;
+
+ /**
+ * 违章关联的多个视频信息数组,最多支持16个视频
+ */
+ public NET_RELATING_VIDEO_INFO[] stuRelatingVideoInfo = new NET_RELATING_VIDEO_INFO[16];
+
+ /**
+ * 预留字节
+ */
+ public byte[] bReserved = new byte[736];
+
+ public DEV_EVENT_VEHICLE_DISTANCE_NEAR_INFO() {
+ for (int i = 0; i < stuRelatingVideoInfo.length; i++) {
+ stuRelatingVideoInfo[i] = new NET_RELATING_VIDEO_INFO();
+ }
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/DEV_EVENT_VIDEO_NORMAL_DETECTION_INFO.java b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_VIDEO_NORMAL_DETECTION_INFO.java
new file mode 100644
index 0000000..af25e69
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_VIDEO_NORMAL_DETECTION_INFO.java
@@ -0,0 +1,40 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 视频正常事件,在视频诊断检测周期结束时,将未报错的诊断项上报正常事件
+* @date 2022/03/29 13:59:54
+*/
+public class DEV_EVENT_VIDEO_NORMAL_DETECTION_INFO extends NetSDKLib.SdkStructure {
+/**
+通道号
+*/
+public int nChannelID;
+/**
+0:脉冲
+*/
+public int nAction;
+/**
+事件编号,用来唯一标志一个事件
+*/
+public int nEventID;
+/**
+事件发生的时间,单位秒
+*/
+public NET_TIME_EX UTC=new NET_TIME_EX();
+/**
+时间戳(单位是毫秒)
+*/
+public double dbPTS;
+/**
+视频检测类型 {@link com.netsdk.lib.enumeration.EM_VIDEO_ABNORMAL_DETECT_TYPE}
+*/
+public int emDetectType;
+/**
+保留字节
+*/
+public byte[] bReserved=new byte[260];
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/DEV_EVENT_WATERCOLOR_DETECTION_INFO.java b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_WATERCOLOR_DETECTION_INFO.java
new file mode 100644
index 0000000..cfe1dee
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_WATERCOLOR_DETECTION_INFO.java
@@ -0,0 +1,82 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+事件类型 EVENT_IVS_WATERCOLOR_DETECTION (水体颜色事件) 对应的数据描述信息
+*/
+public class DEV_EVENT_WATERCOLOR_DETECTION_INFO extends NetSDKLib.SdkStructure {
+/**
+通道号
+*/
+public int nChannelID;
+/**
+事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+*/
+public int nAction;
+/**
+智能事件所属大类 EM_CLASS_TYPE
+*/
+public int emClassType;
+/**
+事件名称
+*/
+public byte[] szName=new byte[128];
+/**
+事件组ID
+*/
+public int nGroupID;
+/**
+一个事件组内应有的抓拍张数
+*/
+public int nCountInGroup;
+/**
+一个事件组内的抓拍序号
+*/
+public int nIndexInGroup;
+/**
+事件ID编号
+*/
+public int nEventID;
+/**
+时间戳(单位是毫秒)
+*/
+public double PTS;
+/**
+事件发生的时间(单位是秒)
+*/
+public int UTC;
+/**
+事件时间(单位是毫秒)
+*/
+public int UTCMS;
+/**
+实际检测到区域个数
+*/
+public int nDetectRegionNum;
+/**
+检测区域
+*/
+public NetSDKLib.DH_POINT[] stuDetectRegion=(NetSDKLib.DH_POINT[])new NetSDKLib.DH_POINT().toArray(20);
+/**
+事件触发的预置点号,从1开始, 没有该字段,表示预置点未知
+*/
+public int nPresetID;
+/**
+污水颜色
+*/
+public int emWaterColor;
+/**
+原始图
+*/
+public NetSDKLib.NET_INTELLIGENCE_IMAGE_INFO stuOriginalImage=new NetSDKLib.NET_INTELLIGENCE_IMAGE_INFO();
+/**
+球机变到最小倍下的抓图
+*/
+public NetSDKLib.NET_INTELLIGENCE_IMAGE_INFO stuSceneImage=new NetSDKLib.NET_INTELLIGENCE_IMAGE_INFO();
+/**
+保留字节
+*/
+public byte[] byReserved=new byte[1024];
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/DEV_EVENT_WORKSTATDETECTION_INFO.java b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_WORKSTATDETECTION_INFO.java
new file mode 100644
index 0000000..f8dc2e7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_WORKSTATDETECTION_INFO.java
@@ -0,0 +1,85 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.EM_WORKACTION_STATE;
+import com.netsdk.lib.enumeration.EM_WORKSTATDETECTION_TYPE;
+import com.sun.jna.Pointer;
+
+/**
+ * @author : 260611
+ * @description : 事件类型EVENT_IVS_WORKSTATDETECTION(作业统计事件)对应的数据块描述信息
+ * @since : Created in 2022/03/08 15:25
+ */
+
+public class DEV_EVENT_WORKSTATDETECTION_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 0:脉冲 1:开始 2:停止
+ */
+ public int nAction;
+ /**
+ * 事件名称
+ */
+ public byte[] szName = new byte[128];
+ /**
+ * 时间戳(单位是毫秒)
+ */
+ public double PTS;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX UTC = new NET_TIME_EX();
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * 智能事件所属大类,{@link NetSDKLib.EM_CLASS_TYPE}
+ */
+ public int emClassType;
+ /**
+ * 智能事件规则编号,用于标示哪个规则触发的事件
+ */
+ public int nRuleID;
+ /**
+ * 物体ID
+ */
+ public int nObjectID;
+ /**
+ * 作业行为状态个数
+ */
+ public int nWorkActionNum;
+ /**
+ * 作业行为状态信息,{@link EM_WORKACTION_STATE}
+ */
+ public int[] emWorkAction = new int[32];
+ /**
+ * 全景大图信息
+ */
+ public NetSDKLib.SCENE_IMAGE_INFO stuSceneImage = new NetSDKLib.SCENE_IMAGE_INFO();
+ /**
+ * 报警规则类型,{@link EM_WORKSTATDETECTION_TYPE}
+ */
+ public int emRuleType;
+ /**
+ * 物体信息数据 ,参考结构体NET_MSG_OBJECT_EX2
+ */
+ public Pointer pstObjectInfo;
+ /**
+ * 物体信息数
+ */
+ public int nObjectNum;
+ /**
+ * 预留字节
+ */
+ public byte[] byReserved;
+
+ public DEV_EVENT_WORKSTATDETECTION_INFO() {
+ int size = new PointerSize().size();
+ byReserved = new byte[1016 - size];// 保留字节
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/DEV_EVENT_XRAY_DETECTION_INFO.java b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_XRAY_DETECTION_INFO.java
new file mode 100644
index 0000000..56b60e4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_XRAY_DETECTION_INFO.java
@@ -0,0 +1,135 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+import static com.netsdk.lib.NetSDKLib.MAX_INSIDEOBJECT_NUM;
+
+
+/**
+ * X光机关联图片类型
+ *
+ * @author : 260611
+ * @since : Created in 2021/10/19 14:46
+ */
+public class DEV_EVENT_XRAY_DETECTION_INFO extends NetSDKLib.SdkStructure {
+
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 事件名称
+ */
+ public byte szName[] = new byte[128];
+
+ /**
+ * 保留字节对齐
+ */
+ public byte Reserved[] = new byte[4];
+
+ /**
+ * 时间戳(单位是毫秒)
+ */
+ public double PTS;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX UTC = new NET_TIME_EX();
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * 所属大类
+ */
+ public int emClassType;
+
+ /**
+ * 包裹信息
+ */
+ public NET_PACKAGE_INFO stuPacketInfo = new NET_PACKAGE_INFO();
+
+ /**
+ * 保留字节对齐
+ */
+ public byte Reserved1[] = new byte[4];
+
+ /**
+ * 主视角包裹内物品个数
+ */
+ public int nObjectNum;
+ /**
+ * 主视角包裹内物品信息
+ */
+ public NET_INSIDE_OBJECT stuInsideObj[] = (NET_INSIDE_OBJECT[])new NET_INSIDE_OBJECT().toArray(MAX_INSIDEOBJECT_NUM);
+
+ /**
+ * 从视角包裹内物品个数
+ */
+ public int nSlaveViewObjectNum;
+ /**
+ * 从视角包裹内物品信息
+ */
+ public NET_INSIDE_OBJECT stuSlaveViewInsideObj[] = (NET_INSIDE_OBJECT[])new NET_INSIDE_OBJECT().toArray(MAX_INSIDEOBJECT_NUM);
+
+ /**
+ * 图片数量
+ */
+ public int nImageCount;
+ /**
+ * 图片信息
+ */
+ public NET_XRAY_IMAGE_INFO stuImageInfo[] = (NET_XRAY_IMAGE_INFO[])new NET_XRAY_IMAGE_INFO().toArray(8);
+
+ /**
+ * 客户自定义信息个数
+ */
+ public int nViewCustomInfoNum;
+ /**
+ * 客户自定义信息, X光机专用
+ */
+ public NetSDKLib.NET_XRAY_CUSTOM_INFO stuViewCustomInfo[] =(NetSDKLib.NET_XRAY_CUSTOM_INFO[])new NetSDKLib.NET_XRAY_CUSTOM_INFO().toArray(4);
+
+ /**
+ * 包裹标识, 用来唯一标识一个包裹
+ */
+ public byte szPackageTag[] = new byte[32];
+
+ /**
+ * 包裹产生方式
+ */
+ public int emPackageMode;
+
+ /**
+ * 关联图片数量
+ */
+ public int nRelatedImageNum;
+ /**
+ * 关联图片
+ */
+ public NET_XRAY_RELATED_IMAGE_INFO stuRelatedImageInfo[] = (NET_XRAY_RELATED_IMAGE_INFO[])new NET_XRAY_RELATED_IMAGE_INFO().toArray(8);
+
+ /**
+ * 与包裹关联的单号的个数
+ */
+ public int nBarCodeCount;
+ /**
+ * 与包裹关联的单号的内容
+ */
+ public NET_BAR_CODE_INFO stuBarCodeInfo[] =new NET_BAR_CODE_INFO[32];
+ /**
+ * 事件公共扩展字段结构体
+ */
+ public NET_EVENT_INFO_EXTEND stuEventInfoEx = new NET_EVENT_INFO_EXTEND();
+
+ /**
+ * 保留字节,留待扩展
+ */
+ public byte byReserved[] = new byte[372];
+ public DEV_EVENT_XRAY_DETECTION_INFO() {
+ for (int i = 0; i < stuBarCodeInfo.length; i++) {
+ stuBarCodeInfo[i] = new NET_BAR_CODE_INFO();
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/DEV_EVENT_XRAY_UNPACKING_CHECK_INFO.java b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_XRAY_UNPACKING_CHECK_INFO.java
new file mode 100644
index 0000000..5f8ea3c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/DEV_EVENT_XRAY_UNPACKING_CHECK_INFO.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 事件类型 EVENT_IVS_XRAY_UNPACKING_CHECK (X光开包检查事件)对应的数据块描述信息
+ * @date 2021/9/9
+ */
+
+public class DEV_EVENT_XRAY_UNPACKING_CHECK_INFO extends NetSDKLib.SdkStructure {
+ /** 通道号*/
+ public int nChannelID;
+ /** 事件动作,0表示脉冲事件*/
+ public int nAction;
+ /** 事件名称*/
+ public byte[] szName=new byte[NetSDKLib.NET_EVENT_NAME_LEN];
+ /** 智能事件所属大类*/
+ public byte[] szClass=new byte[16];
+ /** 相对事件时间戳(单位是毫秒)*/
+ public double PTS;
+ /** 开包检查信息*/
+ public UNPACKING_CHECK_INFO stuCheckInfo=new UNPACKING_CHECK_INFO();
+ /** 事件ID*/
+ public int nEventID;
+ /** 预留字节*/
+ public byte[] szReserved=new byte[1024];
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/DEV_RADAR_CONFIG.java b/src/main/java/com/netsdk/lib/structure/DEV_RADAR_CONFIG.java
new file mode 100644
index 0000000..b16bc97
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/DEV_RADAR_CONFIG.java
@@ -0,0 +1,29 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * className:DEV_RADAR_CONFIG
+ * description:
+ * author:251589
+ * createTime:2020/12/29 10:54
+ *
+ * @version v1.0
+ */
+public class DEV_RADAR_CONFIG extends NetSDKLib.SdkStructure {
+ public int dwSize; // 结构体大小
+ public boolean bEnable; // 是否开启功能
+ public int nPort; // 串口端口号
+ public NET_COMM_PROP stuCommAttr; // 串口属性
+ public int nAddress; // 设备地址,如果串口上挂了多个串口设备,通过地址区分
+ public int nPreSpeedWait; // 速度先来情况下等待时间,速度来时尚未抓拍 范围 (1 -- 5000ms)
+ public int nDelaySpeedWait; // 速度后来情况下等待时间,抓拍时还没有来速度 范围 (1 -- 5000ms)
+ public boolean bDahuaRadarEnable; // DH雷达配置是否可用
+ public DEV_DAHUA_RADAR_CONFIG stuDhRadarConfig; // DH雷达参数配置
+ public boolean bSTJ77D5RadarEnable; // 森思泰克77Ghz网络雷达配置是否可用
+ public NET_STJ77D5_RADAR_CONFIG stuSTJ77D5RadarConfig; // 森思泰克77Ghz网络雷达配置
+
+ public DEV_RADAR_CONFIG(){
+ this.dwSize = size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/DEV_SCADA_DATA_INFO.java b/src/main/java/com/netsdk/lib/structure/DEV_SCADA_DATA_INFO.java
new file mode 100644
index 0000000..650a527
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/DEV_SCADA_DATA_INFO.java
@@ -0,0 +1,51 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 遥测数据信息
+ * @date 2022/12/13 10:24:15
+ */
+public class DEV_SCADA_DATA_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 点位ID
+ */
+ public byte[] szID = new byte[32];
+ /**
+ * 遥测数据采集时间,utc
+ */
+ public NET_TIME_EX stuTime = new NET_TIME_EX();
+ /**
+ * 点位状态,0:无告警,1:一级告警, -1为未收到报警状态
+ */
+ public int nStatus;
+ /**
+ * 点位类型,YC:遥测
+ */
+ public byte[] szType = new byte[8];
+ /**
+ * 遥测数据单位,如m/s,℃
+ */
+ public byte[] szUnit = new byte[8];
+ /**
+ * 遥调值
+ */
+ public float fSetupVal;
+ /**
+ * 点位遥测值
+ */
+ public float fMeasuredVal;
+ /**
+ * 电力104点号,当启用电力104协议时存在
+ */
+ public byte[] szAddress = new byte[16];
+ /**
+ * 保留字节
+ */
+ public byte[] szResvered = new byte[256];
+
+ public DEV_SCADA_DATA_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/DHDEVTIME.java b/src/main/java/com/netsdk/lib/structure/DHDEVTIME.java
new file mode 100644
index 0000000..5246adb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/DHDEVTIME.java
@@ -0,0 +1,90 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 日志信息里的时间定义
+ * @author 47081
+ */
+public class DHDEVTIME extends NetSDKLib.SdkStructure {
+ /**
+ * 秒 1-60
+ *//*
+ public int second;
+ *//**
+ * 分 1-60
+ *//*
+ public int minute;
+ *//**
+ * 时 1-24
+ *//*
+ public int hour;
+ *//**
+ * 日 1-31
+ *//*
+ public int day;
+ *//**
+ * 月 1-12
+ *//*
+ public int month;
+ *//**
+ * 年 2000-2063
+ *//*
+ public int year;*/
+ public int date;
+
+
+/**
+ *second:6; // 秒 1-60
+ *minute:6; // 分 1-60
+ *hour:5; // 时 1-24
+ *day:5; // 日 1-31
+ *month:4; // 月 1-12
+ *year:6; // 年 2000-2063
+ *
+ */
+public int getSecond(){
+ return getAnd(date,0,6);
+}
+public int getMinute(){
+ return getAnd(date,6,6+6);
+}
+public int getHour(){return getAnd(date,6+6,6+6+5);}
+public int getDay(){return getAnd(date,6+6+5,6+6+5+5);}
+public int getMonth(){return getAnd(date,6+6+5+5,6+6+5+5+4);}
+public int getYear(){return 2000+getAnd(date,6+6+5+5+4,6+6+5+5+4+6);}
+
+ /**
+ * c层处理后的原始年份信息
+ * @return
+ */
+ public int getOriginalYear(){return getAnd(date,6+6+5+5+4,6+6+5+5+4+6);};
+public String getDate(){
+ return getYear()+"-"+getMonth()+"-"+getDay()+" "+getHour()+":"+getMinute()+":"+getSecond();
+}
+
+ /**
+ * 按位与
+ * @param date 原始数据
+ * @param start 需要偏移的位数
+ * @param end 与的位数
+ * @return
+ */
+ private int getAnd(int date,int start,int end){
+ return date>>start&getOr(start,end);
+ }
+
+ /**
+ * 按位与的位数
+ * @param start 开始与的位数
+ * @param end 结束与的位数
+ * @return
+ */
+ private int getOr(int start,int end){
+ int result=0;
+ for (int i = 0; i < end-start; i++) {
+ result|=(1<0.5严重冲突
+ */
+ public float fConflictLevel;
+ /**
+ * 置信度
+ */
+ public float fConfidence;
+ /**
+ * 预留字节
+ */
+ public byte[] szReserved = new byte[1020];
+
+ public NET_DEV_EVENT_COLLISION_CONFLICT_INFO() {
+ for (int i = 0; i < stuObjects.length; i++) {
+ stuObjects[i] = new NET_VEHICLE_FUSED_OBJECT();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_DEV_EVENT_CROSSLINE_STAT_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_DEV_EVENT_CROSSLINE_STAT_INFO.java
new file mode 100644
index 0000000..0149a84
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_DEV_EVENT_CROSSLINE_STAT_INFO.java
@@ -0,0 +1,82 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 事件类型 EVENT_IVS_CROSSLINE_STAT (绊线计数事件)对应的数据块描述信息( 注意该事件暂时不支持单独使用,仅配合“开放智能事件(EVENT_IVS_OPEN_INTELLI)”使用)
+* @date 2023/02/06 16:07:27
+*/
+public class NET_DEV_EVENT_CROSSLINE_STAT_INFO extends NetSDKLib.SdkStructure {
+/**
+通道号
+*/
+public int nChannelID;
+/**
+0:脉冲,1:开始, 2:停止
+*/
+public int nAction;
+/**
+扩展协议字段
+*/
+public NET_EVENT_INFO_EXTEND stuEventInfoEx=new NET_EVENT_INFO_EXTEND();
+/**
+事件发生的时间
+*/
+public NET_TIME_EX stuUTC=new NET_TIME_EX();
+/**
+事件ID
+*/
+public int nEventID;
+/**
+事件名称
+*/
+public byte[] szName=new byte[128];
+/**
+智能事件所属大类
+*/
+public byte[] szClass=new byte[16];
+/**
+相对事件时间戳,(单位是毫秒)
+*/
+public double dbPTS;
+/**
+事件时间毫秒数
+*/
+public int nUTCMS;
+/**
+智能事件规则编号
+*/
+public int nRuleID;
+/**
+区域ID
+*/
+public int nAreaID;
+/**
+绊线方向 {@link com.netsdk.lib.enumeration.EM_STAT_DIRECTION}
+*/
+public int emDirection;
+/**
+目标绊线总数
+*/
+public int nNumber;
+/**
+详细计数信息个数
+*/
+public int nStatDetailNum;
+/**
+详细计数信息
+*/
+public NET_STAT_DETAIL[] stuStatDetail=new NET_STAT_DETAIL[16];
+/**
+预留字节
+*/
+public byte[] szReserved=new byte[1024];
+
+public NET_DEV_EVENT_CROSSLINE_STAT_INFO(){
+ for(int i=0;i时,bImportantRecID<<8 +bHint ,组成图片定位索引 )
+ */
+ public byte bHint;
+ /**
+ * 0-主码流录像 1-辅码1流录像 2-辅码流2 3-辅码流3录像
+ */
+ public byte bRecType;
+ /**
+ * 加密录像密码,密码长度不小于8
+ */
+ public byte[] szEncryptPasswd=new byte[64];
+ /**
+ * VK信息回调
+ */
+ public NetSDKLib.fVKInfoCallBack pVKInfoCallBack;
+ /**
+ * VK信息回调用户信息
+ */
+ public Pointer dwVKInfoUser;
+
+ public NET_IN_DOWNLOAD_BYFILE_SELFADAPT() {
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_DOWNLOAD_MULTI_FILE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_DOWNLOAD_MULTI_FILE.java
new file mode 100644
index 0000000..1a0d885
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_DOWNLOAD_MULTI_FILE.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.EM_DOWNLOAD_FILE_TYPE;
+import com.netsdk.lib.enumeration.EM_SUBCLASSID_TYPE;
+import com.sun.jna.Pointer;
+
+/**
+ * 批量下载文件 入参
+ * 接口 {@link NetSDKLib#CLIENT_DownLoadMultiFile}
+ * 出参 {@link NET_OUT_DOWNLOAD_MULTI_FILE}
+ *
+ * @author : 47040
+ * @since : Created in 2020/12/28 15:19
+ */
+public class NET_IN_DOWNLOAD_MULTI_FILE extends NetSDKLib.SdkStructure {
+
+ public int dwSize;
+ /**
+ * 待下载文件数,emDownloadType为EM_DOWNLOAD_BY_FILENAME有效
+ */
+ public int nFileCount;
+ /**
+ * {@link NET_DOWNLOADFILE_INFO} 待下载文件信息,emDownloadType为 EM_DOWNLOAD_BY_FILENAME 时有效
+ * emDownloadType为EM_DOWNLOAD_BY_FILENAME有效
+ * 由用户申请内存,大小为 sizeof(NET_DOWNLOADFILE_INFO)*nFileCount
+ */
+ public Pointer pFileInfos;
+ /**
+ * 进度回调函数
+ */
+ public NetSDKLib.fMultiFileDownLoadPosCB cbPosCallBack;
+ /**
+ * 用户数据
+ */
+ public Pointer dwUserData;
+ /**
+ * {@link EM_DOWNLOAD_FILE_TYPE} 下载方式
+ */
+ public int emDownloadType;
+ /**
+ * 按查询条件下载: 下载条件数,emDownloadType为EM_DOWNLOAD_BY_CONDITION有效
+ */
+ public int nConditionCount;
+ /**
+ * {@link NET_DOWNLOAD_CONDITION_INFO}
+ * 下载条件,emDownloadType为EM_DOWNLOAD_BY_CONDITION有效
+ * 由用户申请内存,大小为sizeof(NET_DOWNLOAD_CONDITION_INFO)*nConditionCount
+ */
+ public Pointer pConditionInfos;
+ /**
+ * 从设备类型{@link EM_SUBCLASSID_TYPE}
+ */
+ public int emSubClass;
+ /**
+ * {@link NET_DOWNLOADFILE_OPTIONS_INFO}
+ * 待下载文件信息, 下载选项; emDownloadType为EM_DOWNLOAD_BY_FILENAME有效
+ */
+ public Pointer pFileOptions;
+
+ public NET_IN_DOWNLOAD_MULTI_FILE(){
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_DOWNLOAD_PIECE_FILE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_DOWNLOAD_PIECE_FILE.java
new file mode 100644
index 0000000..666d536
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_DOWNLOAD_PIECE_FILE.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+
+public class NET_IN_DOWNLOAD_PIECE_FILE extends SdkStructure{
+
+ public int dwSize;
+ /**
+ * 需要下载的文件名,支持全路径
+ */
+ public byte[] szFileName= new byte[260];
+ /**
+ * 下载偏移,单位字节
+ * 如果文件总长度为50KB,每次请求下载数据量为32KB,那么第一次请求时,nOffSet为0,第二次请求nOffSet为32KB
+ */
+ public int nOffSet;
+ /**
+ * 请求下载数据量,单位字节,建议为32KB,最大不超过4MB
+ */
+ public int nNeedLength;
+ public NET_IN_DOWNLOAD_PIECE_FILE() {
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_DO_FIND_DETAIL_CLUSTER.java b/src/main/java/com/netsdk/lib/structure/NET_IN_DO_FIND_DETAIL_CLUSTER.java
new file mode 100644
index 0000000..7144ab7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_DO_FIND_DETAIL_CLUSTER.java
@@ -0,0 +1,31 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 接口 CLIENT_DoFindDetailNumberStatCluster 的输入参数
+ * @date 2022/10/09 14:08:11
+ */
+public class NET_IN_DO_FIND_DETAIL_CLUSTER extends NetSDKLib.SdkStructure {
+ /**
+ * 此结构体大小,必须赋值
+ */
+ public int dwSize;
+ /**
+ * start接口返回的token, token保存的数量有限, 未stop的会在连接销毁时或队列满时被释放, 再用同一token访问会导致失败
+ */
+ public int nToken;
+ /**
+ * 查询记录的开始偏移
+ */
+ public int nStartIndex;
+ /**
+ * 查询的记录数,单次不超过1024
+ */
+ public int nCount;
+
+ public NET_IN_DO_FIND_DETAIL_CLUSTER() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_DO_FIND_VEHICLE_REG_DB.java b/src/main/java/com/netsdk/lib/structure/NET_IN_DO_FIND_VEHICLE_REG_DB.java
new file mode 100644
index 0000000..79a78fe
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_DO_FIND_VEHICLE_REG_DB.java
@@ -0,0 +1,18 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description CLIENT_DoFindVehicleRegisterDB 接口输入参数
+ * @date 2022/10/22 10:50
+ */
+public class NET_IN_DO_FIND_VEHICLE_REG_DB extends NetSDKLib.SdkStructure{
+ public int dwSize; // 结构体大小
+ public NET_FIND_VEHICLE_CONDITION stuCondition=new NET_FIND_VEHICLE_CONDITION(); // 查询条件
+
+ public NET_IN_DO_FIND_VEHICLE_REG_DB(){
+ dwSize=this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_DO_FIND_WATERDATA_STAT_SERVER_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_DO_FIND_WATERDATA_STAT_SERVER_INFO.java
new file mode 100644
index 0000000..8e95346
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_DO_FIND_WATERDATA_STAT_SERVER_INFO.java
@@ -0,0 +1,32 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_DoFindWaterDataStatServer 输入参数
+* @date 2022/08/22 17:27:08
+*/
+public class NET_IN_DO_FIND_WATERDATA_STAT_SERVER_INFO extends NetSDKLib.SdkStructure {
+/**
+此结构体大小,必须赋值
+*/
+public int dwSize;
+/**
+查询令牌
+*/
+public int nToken;
+/**
+查询起始序号, 表示从beginNumber条记录开始,取count条记录返回
+*/
+public int nBeginNumber;
+/**
+每次查询的流量统计条数
+*/
+public int nCount;
+
+public NET_IN_DO_FIND_WATERDATA_STAT_SERVER_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_ENCODE_CFG_CAPS.java b/src/main/java/com/netsdk/lib/structure/NET_IN_ENCODE_CFG_CAPS.java
new file mode 100644
index 0000000..c0ee60c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_ENCODE_CFG_CAPS.java
@@ -0,0 +1,40 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.GetDevCaps_Type;
+import com.sun.jna.Pointer;
+
+/**
+ * 获取设备编码配置对应能力输入参数
+ * 能力集枚举 {@link GetDevCaps_Type#NET_ENCODE_CFG_CAPS}
+ * 能力集接口 {@link NetSDKLib#CLIENT_GetDevCaps}
+ *
+ * @author 47040
+ * @since Created at 2021/5/25 20:48
+ */
+public class NET_IN_ENCODE_CFG_CAPS extends NetSDKLib.SdkStructure {
+
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannelId;
+ /**
+ * 码流类型,0:主码流;1:辅码流1;2:辅码流2;3:辅码流3;4:抓图码流
+ */
+ public int nStreamType;
+ /**
+ * 此参数可以不填,不论指定什么类型,设备都返回主、辅、抓图码流的能力
+ * Encode配置,通过调用 dhconfigsdk.dll中接口 CLIENT_PacketData封装得到
+ * 对应的封装命令为 CFG_CMD_ENCODE
+ */
+ public Pointer pchEncodeJson;
+
+ public NET_IN_ENCODE_CFG_CAPS() {
+ dwSize = this.size();
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_FACE_RECOGNITION_DETECT_MULTI_FACE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_FACE_RECOGNITION_DETECT_MULTI_FACE_INFO.java
new file mode 100644
index 0000000..ca118df
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_FACE_RECOGNITION_DETECT_MULTI_FACE_INFO.java
@@ -0,0 +1,63 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 260611
+ * @description CLIENT_FaceRecognitionDetectMultiFace 接口输入参数
+ * @date 2022/11/21 17:53:13
+ */
+public class NET_IN_FACE_RECOGNITION_DETECT_MULTI_FACE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 此结构体的大小
+ */
+ public int dwSize;
+ /**
+ * 大图张数
+ */
+ public int nBigPicNum;
+ /**
+ * 大图信息(推荐使用stuBigPicInfoEx)
+ */
+ public NET_DETECT_BIG_PIC_INFO[] stuBigPicInfo = new NET_DETECT_BIG_PIC_INFO[50];
+ /**
+ * 缓冲地址
+ */
+ public Pointer pBuffer;
+ /**
+ * 缓冲数据长度
+ */
+ public int nBufferLen;
+ /**
+ * 目标类型 {@link com.netsdk.lib.NetSDKLib.EM_OBJECT_TYPE}
+ */
+ public int emDetectObjType;
+ /**
+ * stuBigPicInfoEx是否有效
+ */
+ public int bBigPicInfoExEnable;
+ /**
+ * 大图张数
+ */
+ public int nBigPicNumEx;
+ /**
+ * 大图信息(扩展)
+ */
+ public NET_DETECT_BIG_PIC_INFO_EX[] stuBigPicInfoEx = new NET_DETECT_BIG_PIC_INFO_EX[50];
+ /**
+ * 查询令牌,没有则为0
+ */
+ public int nToken;
+
+ public NET_IN_FACE_RECOGNITION_DETECT_MULTI_FACE_INFO() {
+ for (int i = 0; i < stuBigPicInfo.length; i++) {
+ stuBigPicInfo[i] = new NET_DETECT_BIG_PIC_INFO();
+ }
+ for (int i = 0; i < stuBigPicInfoEx.length; i++) {
+ stuBigPicInfoEx[i] = new NET_DETECT_BIG_PIC_INFO_EX();
+ }
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_FIND_GROUP_FROM_VEHICLE_REG_DB.java b/src/main/java/com/netsdk/lib/structure/NET_IN_FIND_GROUP_FROM_VEHICLE_REG_DB.java
new file mode 100644
index 0000000..3d114c5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_FIND_GROUP_FROM_VEHICLE_REG_DB.java
@@ -0,0 +1,17 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description CLIENT_FindGroupFormVehicleRegisterDB 接口输入参数
+ * @date 2022/10/21 17:35
+ */
+public class NET_IN_FIND_GROUP_FROM_VEHICLE_REG_DB extends NetSDKLib.SdkStructure{
+ public int dwSize; // 结构体大小
+ public byte[] szGroupID= new byte[64]; // 组ID,为空表示查找全部车辆组信息
+ public NET_IN_FIND_GROUP_FROM_VEHICLE_REG_DB(){
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_FIND_REC_BAK_RST_TASK.java b/src/main/java/com/netsdk/lib/structure/NET_IN_FIND_REC_BAK_RST_TASK.java
new file mode 100644
index 0000000..b9741f1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_FIND_REC_BAK_RST_TASK.java
@@ -0,0 +1,48 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+/**
+ * @author 251823
+ * @version 1.0
+ * @description CLIENT_FindRecordBackupRestoreTaskInfos接口输入参数
+ * @date 2022/01/14
+ */
+public class NET_IN_FIND_REC_BAK_RST_TASK extends NetSDKLib.SdkStructure{
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 根据条件查询备份任务的查询方式,{ @link EM_RECORD_BACKUP_FIND_TYPE}
+ */
+ public int emFindType;
+
+ /**
+ * 任务ID,emFindType为 EM_RECORD_BACKUP_FIND_TYPE_BY_TASKID 时有效,否则无效
+ */
+ public int dwTaskID;
+
+ /**
+ * 设备端本地通道号,emFindType为 EM_RECORD_BACKUP_FIND_TYPE_BY_CHN_AND_TIME 时有效,否则无效
+ */
+ public int nLocalChannelID;
+
+ /**
+ * 备份录像的开始时间,emFindType为 EM_RECORD_BACKUP_FIND_TYPE_BY_CHN_AND_TIME 时有效,否则无效
+ */
+ public NetSDKLib.NET_TIME stuStartTime;
+
+ /**
+ * 备份录像的结束时间,emFindType为 EM_RECORD_BACKUP_FIND_TYPE_BY_CHN_AND_TIME 时有效,否则无效
+ */
+ public NetSDKLib.NET_TIME stuEndTime;
+ /**
+ *主动注册的设备ID, emFindType为EM_RECORD_BACKUP_FIND_TYPE_BY_DEVICE_ID时必选有效,否则无效
+ */
+ public byte[] szDeviceID=new byte[128];
+
+ public NET_IN_FIND_REC_BAK_RST_TASK(){
+ this.dwSize = this.size();
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_FIND_WORKSUIT_COMPARE_GROUP.java b/src/main/java/com/netsdk/lib/structure/NET_IN_FIND_WORKSUIT_COMPARE_GROUP.java
new file mode 100644
index 0000000..a989449
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_FIND_WORKSUIT_COMPARE_GROUP.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_FindWorkSuitCompareGroup 接口输入参数
+ * @date 2022/10/10 13:40:26
+ */
+public class NET_IN_FIND_WORKSUIT_COMPARE_GROUP extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 字节对齐
+ */
+ public byte[] szReserved = new byte[4];
+ /**
+ * 合规库组ID, 不填组ID表示查找全部组信息
+ */
+ public byte[] szGroupID = new byte[64];
+
+ public NET_IN_FIND_WORKSUIT_COMPARE_GROUP() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GETFACEEIGEN_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GETFACEEIGEN_INFO.java
new file mode 100644
index 0000000..b8bb8b1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GETFACEEIGEN_INFO.java
@@ -0,0 +1,23 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Memory;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 251589
+ * @version V1.0
+ * @Description:
+ * @date 2020/12/9 19:54
+ */
+
+public class NET_IN_GETFACEEIGEN_INFO extends NetSDKLib.SdkStructure{
+ public int dwSize;
+ public int nPhotoDataLen; // 人脸照片数据大小
+ public Pointer pszPhotoData=new Memory(200*1024); // 人脸照片数据, 由用户申请释放, 每张照片最大为200K
+ public NET_IN_GETFACEEIGEN_INFO() {
+ this.dwSize = this.size();
+ }
+
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GETSUMMARY_CROWDDISTRI_MAP_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GETSUMMARY_CROWDDISTRI_MAP_INFO.java
new file mode 100644
index 0000000..caa01bc
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GETSUMMARY_CROWDDISTRI_MAP_INFO.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_GetSummaryCrowdDistriMap 接口输入参数
+ * @date 2022/01/07
+ */
+public class NET_IN_GETSUMMARY_CROWDDISTRI_MAP_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+
+ public NET_IN_GETSUMMARY_CROWDDISTRI_MAP_INFO(){
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_ALARMMODE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_ALARMMODE.java
new file mode 100644
index 0000000..c6ecbf9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_ALARMMODE.java
@@ -0,0 +1,20 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 获取布防模式 输入参数。此时CLIENT_GetAlarmRegionInfo的emType参数为NET_EM_GET_ALARMREGION_INFO_ARMMODE
+ * @date 2021/11/08
+ */
+public class NET_IN_GET_ALARMMODE extends NetSDKLib.SdkStructure{
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ public NET_IN_GET_ALARMMODE(){
+ this.dwSize = this.size();
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CABINET_STATE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CABINET_STATE_INFO.java
new file mode 100644
index 0000000..d387bd6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CABINET_STATE_INFO.java
@@ -0,0 +1,20 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_GetFinancialCabinetState 的输入参数
+* @date 2022/08/10 13:37:59
+*/
+public class NET_IN_GET_CABINET_STATE_INFO extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+
+public NET_IN_GET_CABINET_STATE_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CAMERA_CFG.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CAMERA_CFG.java
new file mode 100644
index 0000000..fa4a1ee
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CAMERA_CFG.java
@@ -0,0 +1,23 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+/**
+ * @author 251823
+ * @version 1.0
+ * @description {@link NetSDKLib#CLIENT_GetCameraCfg}的入参
+ * @date 2020/11/06
+ */
+public class NET_IN_GET_CAMERA_CFG extends NetSDKLib.SdkStructure{
+
+
+ // 结构体大小
+ public int dwSize;
+
+ // 相机编号
+ public int nCameraNo;
+
+ public NET_IN_GET_CAMERA_CFG() {
+ this.dwSize = this.size();
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CAMERA_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CAMERA_INFO.java
new file mode 100644
index 0000000..d70c4da
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CAMERA_INFO.java
@@ -0,0 +1,25 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+
+/**
+ * @author 251823
+ * @version 1.0
+ * @description {@link NetSDKLib#CLIENT_GetCameraInfo}的入参
+ * @date 2020/11/09
+ */
+public class NET_IN_GET_CAMERA_INFO extends NetSDKLib.SdkStructure {
+
+ // 结构体大小
+ public int dwSize;
+
+
+ // 相机编号
+ public int nCameraNo;
+
+ public NET_IN_GET_CAMERA_INFO() {
+ this.dwSize = this.size();
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CHANNELS_STATE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CHANNELS_STATE.java
new file mode 100644
index 0000000..dab0051
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CHANNELS_STATE.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 获取通道状态 输入参数。此时CLIENT_GetAlarmRegionInfo的emType参数为NET_EM_GET_ALARMREGION_INFO_CHANNELSSTATE
+* @date 2022/10/09 11:22:21
+*/
+public class NET_IN_GET_CHANNELS_STATE extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+获取通道状态查询条件
+*/
+public NET_CHANNELS_STATE_CONDITION stuCondition=new NET_CHANNELS_STATE_CONDITION();
+
+public NET_IN_GET_CHANNELS_STATE(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CHANNEL_CFG.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CHANNEL_CFG.java
new file mode 100644
index 0000000..81d5195
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CHANNEL_CFG.java
@@ -0,0 +1,23 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @version 1.0
+ * @description {@link NetSDKLib#CLIENT_GetChannelCfg}的入参
+ * @date 2020/11/09
+ */
+public class NET_IN_GET_CHANNEL_CFG extends NetSDKLib.SdkStructure {
+
+ // 结构体大小
+ public int dwSize;
+
+ // 检测通道
+ public int nChannelNo;
+
+
+ public NET_IN_GET_CHANNEL_CFG() {
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CHANNEL_STATE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CHANNEL_STATE.java
new file mode 100644
index 0000000..7cc8fc2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CHANNEL_STATE.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @description CLIENT_GetChannelState 入参
+ * @date 2022/07/04 11:16:31
+ */
+public class NET_IN_GET_CHANNEL_STATE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 视频通道数组个数
+ */
+ public int nChannelNum;
+ /**
+ * 视频通道数组,当该字段不存在或为空时代表获取所有通道
+ */
+ public int[] nChannel = new int[256];
+
+ public NET_IN_GET_CHANNEL_STATE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CLUSTER_STATE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CLUSTER_STATE_INFO.java
new file mode 100644
index 0000000..a9237c8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CLUSTER_STATE_INFO.java
@@ -0,0 +1,23 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 接口 CLIENT_GetClusterState 的输入参数
+ * @date 2022/10/09 14:24:24
+ */
+public class NET_IN_GET_CLUSTER_STATE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 此结构体大小,必须赋值
+ */
+ public int dwSize;
+ /**
+ * 非必选, 当包含该字段时查对应日期的聚档状态, 否则返回最近一次的状态
+ */
+ public int nClusterDate;
+
+ public NET_IN_GET_CLUSTER_STATE_INFO() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_COURSE_LOGIC_CHANNEL.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_COURSE_LOGIC_CHANNEL.java
new file mode 100644
index 0000000..d5aff53
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_COURSE_LOGIC_CHANNEL.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+import static com.netsdk.lib.NetSDKLib.MAX_PREVIEW_CHANNEL_NUM;
+
+/**
+ * 获取录播主机逻辑通道号入参,对应接口 {@link NetSDKLib#CLIENT_GetLogicChannel}
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/28 14:57
+ */
+public class NET_IN_GET_COURSE_LOGIC_CHANNEL extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道数量
+ */
+ public int nChannelNum;
+ /**
+ * 通道号
+ */
+ public int[] nChannel = new int[MAX_PREVIEW_CHANNEL_NUM];
+
+ public NET_IN_GET_COURSE_LOGIC_CHANNEL(){
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_COURSE_RECORD_MODE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_COURSE_RECORD_MODE.java
new file mode 100644
index 0000000..b9e0128
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_COURSE_RECORD_MODE.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 获取录像模式入参,对应接口{@link NetSDKLib#CLIENT_GetCourseRecordMode}
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/28 15:48
+ */
+public class NET_IN_GET_COURSE_RECORD_MODE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 教室id号
+ */
+ public int nClassRoomID;
+
+ public NET_IN_GET_COURSE_RECORD_MODE() {
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CUSTOMINFO_CAPS.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CUSTOMINFO_CAPS.java
new file mode 100644
index 0000000..853f298
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_CUSTOMINFO_CAPS.java
@@ -0,0 +1,20 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_GetCustomInfoCaps 输入参数
+* @date 2022/05/11 20:23:41
+*/
+public class NET_IN_GET_CUSTOMINFO_CAPS extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+
+public NET_IN_GET_CUSTOMINFO_CAPS(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DEFAULT_REAL_CHANNEL.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DEFAULT_REAL_CHANNEL.java
new file mode 100644
index 0000000..f07e001
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DEFAULT_REAL_CHANNEL.java
@@ -0,0 +1,33 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+import static com.netsdk.lib.NetSDKLib.MAX_PREVIEW_CHANNEL_NUM;
+
+/**
+ * 获取默认真实通道号入参,对应接口 {@link NetSDKLib#CLIENT_GetDefaultRealChannel}
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/28 10:06
+ */
+public class NET_IN_GET_DEFAULT_REAL_CHANNEL extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 需要获取的通道数
+ */
+ public int nChannelCount;
+ /**
+ * 逻辑通道信息,下标为将要获取的真实通道数
+ */
+ public NET_LOGIC_CHANNEL_INFO[] stuChannelInfo = new NET_LOGIC_CHANNEL_INFO[MAX_PREVIEW_CHANNEL_NUM];
+
+ public NET_IN_GET_DEFAULT_REAL_CHANNEL() {
+ dwSize = this.size();
+ for (int i = 0; i < stuChannelInfo.length; i++) {
+ stuChannelInfo[i] = new NET_LOGIC_CHANNEL_INFO();
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DEVICESERIALNO_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DEVICESERIALNO_INFO.java
new file mode 100644
index 0000000..97829db
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DEVICESERIALNO_INFO.java
@@ -0,0 +1,19 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_GetDeviceSerialNo 入参
+ * @date 2023/03/15 20:18:02
+ */
+public class NET_IN_GET_DEVICESERIALNO_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ public NET_IN_GET_DEVICESERIALNO_INFO() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DEVICETYPE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DEVICETYPE_INFO.java
new file mode 100644
index 0000000..fc03f90
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DEVICETYPE_INFO.java
@@ -0,0 +1,19 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_GetDeviceType 入参
+ * @date 2023/03/15 20:18:25
+ */
+public class NET_IN_GET_DEVICETYPE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ public NET_IN_GET_DEVICETYPE_INFO() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DEVICE_AII_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DEVICE_AII_INFO.java
new file mode 100644
index 0000000..d2d363f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DEVICE_AII_INFO.java
@@ -0,0 +1,20 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_GetDeviceAllInfo 输入结构体
+ * @date 2021/01/20
+ */
+public class NET_IN_GET_DEVICE_AII_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 赋值为结构体大小
+ */
+ public int dwSize;
+
+ public NET_IN_GET_DEVICE_AII_INFO(){
+ this.dwSize=size();
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DEVICE_ETH_BAND_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DEVICE_ETH_BAND_INFO.java
new file mode 100644
index 0000000..8177ed3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DEVICE_ETH_BAND_INFO.java
@@ -0,0 +1,19 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_GetDeviceEthBandInfo 接口入参
+ * @date 2022/05/30 14:45:46
+ */
+public class NET_IN_GET_DEVICE_ETH_BAND_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ public NET_IN_GET_DEVICE_ETH_BAND_INFO() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DEV_STORAGE_SMART_VALUE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DEV_STORAGE_SMART_VALUE.java
new file mode 100644
index 0000000..d6e9257
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DEV_STORAGE_SMART_VALUE.java
@@ -0,0 +1,23 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_GetDevStorageSmartValue 接口入参
+ * @date 2022/05/30 14:42:47
+ */
+public class NET_IN_GET_DEV_STORAGE_SMART_VALUE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 存储设备名称
+ */
+ public byte[] szName = new byte[64];
+
+ public NET_IN_GET_DEV_STORAGE_SMART_VALUE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DYNAMIC_LOCK_RANDOM_PUBLICKEY_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DYNAMIC_LOCK_RANDOM_PUBLICKEY_INFO.java
new file mode 100644
index 0000000..03096a5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_DYNAMIC_LOCK_RANDOM_PUBLICKEY_INFO.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_GetDynamicLockRandomPublicKey 接口入参
+* @date 2022/06/23 10:08:09
+*/
+public class NET_IN_GET_DYNAMIC_LOCK_RANDOM_PUBLICKEY_INFO extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+密码锁ID
+*/
+public byte[] szID=new byte[32];
+/**
+中心公钥
+*/
+public byte[] szCenterPublicKey=new byte[512];
+
+public NET_IN_GET_DYNAMIC_LOCK_RANDOM_PUBLICKEY_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_ELEVATOR_WORK_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_ELEVATOR_WORK_INFO.java
new file mode 100644
index 0000000..377d361
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_ELEVATOR_WORK_INFO.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_GetElevatorWorkInfo 接口入参
+ * @date 2022/08/11 19:21:09
+ */
+public class NET_IN_GET_ELEVATOR_WORK_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 视频通道号
+ */
+ public int nChannel;
+ /**
+ * 保留字节
+ */
+ public byte[] szReserved = new byte[256];
+
+ public NET_IN_GET_ELEVATOR_WORK_INFO() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_FILE_INFO_BY_PATH_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_FILE_INFO_BY_PATH_INFO.java
new file mode 100644
index 0000000..1d12d70
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_FILE_INFO_BY_PATH_INFO.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_FileManagerGetExFileInfoByPath接口入参
+* @date 2022/09/22 19:10:12
+*/
+public class NET_IN_GET_FILE_INFO_BY_PATH_INFO extends NetSDKLib.SdkStructure {
+/**
+此结构体大小,必须赋值
+*/
+public int dwSize;
+/**
+文件路径
+*/
+public byte[] szPath=new byte[256];
+
+public NET_IN_GET_FILE_INFO_BY_PATH_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_FINANCIAL_CABIN_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_FINANCIAL_CABIN_INFO.java
new file mode 100644
index 0000000..6528ff1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_FINANCIAL_CABIN_INFO.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_GetFinancialCabinInfo 输入参数
+* @date 2022/08/01 14:13:04
+*/
+public class NET_IN_GET_FINANCIAL_CABIN_INFO extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+舱位下标索引个数
+*/
+public int nIndexNum;
+/**
+舱位下标索引数组
+*/
+public int[] nIndex=new int[64];
+
+public NET_IN_GET_FINANCIAL_CABIN_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_GLOBAL_PARAMETER.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_GLOBAL_PARAMETER.java
new file mode 100644
index 0000000..9a3eca0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_GLOBAL_PARAMETER.java
@@ -0,0 +1,19 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_GetRtscGlobalParam 接口输入参数
+ * @date 2021/09/28
+ */
+public class NET_IN_GET_GLOBAL_PARAMETER extends NetSDKLib.SdkStructure{
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ public NET_IN_GET_GLOBAL_PARAMETER(){
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_HEATMAPS_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_HEATMAPS_INFO.java
new file mode 100644
index 0000000..d1c3b47
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_HEATMAPS_INFO.java
@@ -0,0 +1,25 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251589
+ * @version 1.0
+ * @description {@link NetSDKLib#CLIENT_GetHeatMapsDirectly}的输入参数
+ * @date 2020/11/10
+ **/
+
+
+public class NET_IN_GET_HEATMAPS_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * DWORD dwSize;
+ * int nChannel;
+ */
+ public int dwSize;
+ public int nChannel; // 通道号, 通道号要与订阅时一致, -1除外
+
+ public NET_IN_GET_HEATMAPS_INFO() {
+ this.dwSize = this.size();
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_INPUT_CHANNEL_MEDIA.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_INPUT_CHANNEL_MEDIA.java
new file mode 100644
index 0000000..4e2221e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_INPUT_CHANNEL_MEDIA.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+import static com.netsdk.lib.NetSDKLib.MAX_PREVIEW_CHANNEL_NUM;
+
+/**
+ * 获取录播主机通道输入媒体介质入参 ,对应接口{@link NetSDKLib#CLIENT_GetInputChannelMedia}
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/28 16:00
+ */
+public class NET_IN_GET_INPUT_CHANNEL_MEDIA extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道数量
+ */
+ public int nChannelNum;
+ /**
+ * 通道号
+ */
+ public int[] nChannel = new int[MAX_PREVIEW_CHANNEL_NUM];
+
+ public NET_IN_GET_INPUT_CHANNEL_MEDIA() {
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_POPULATION_STATISTICS.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_POPULATION_STATISTICS.java
new file mode 100644
index 0000000..0dee5f2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_POPULATION_STATISTICS.java
@@ -0,0 +1,15 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+/**
+ * @author : 291189
+ * @since : Created in 2021/7/5 10:06
+ * CLIENT_GetPopulationStatistics 接口输入参数
+ */
+public class NET_IN_GET_POPULATION_STATISTICS extends NetSDKLib.SdkStructure{
+ public int dwSize; // 结构体大小
+
+ public NET_IN_GET_POPULATION_STATISTICS() {
+ this.dwSize=this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_PRIVACY_MASKING.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_PRIVACY_MASKING.java
new file mode 100644
index 0000000..a5416d7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_PRIVACY_MASKING.java
@@ -0,0 +1,31 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_GetPrivacyMasking 输入参数
+ * @date 2022/07/21 16:58:24
+ */
+public class NET_IN_GET_PRIVACY_MASKING extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 本次从第几个遮档块开始获取
+ */
+ public int nOffset;
+ /**
+ * 本次获取多少个遮档块信息,最大不超过24
+ */
+ public int nLimit;
+
+ public NET_IN_GET_PRIVACY_MASKING() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_PRIVACY_MASKING_ENABLE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_PRIVACY_MASKING_ENABLE.java
new file mode 100644
index 0000000..8ac7994
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_PRIVACY_MASKING_ENABLE.java
@@ -0,0 +1,23 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_GetPrivacyMaskingEnable 输入参数
+ * @date 2022/07/21 17:15:29
+ */
+public class NET_IN_GET_PRIVACY_MASKING_ENABLE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+
+ public NET_IN_GET_PRIVACY_MASKING_ENABLE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_PTZ_WASH_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_PTZ_WASH_INFO.java
new file mode 100644
index 0000000..5fdf5cd
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_PTZ_WASH_INFO.java
@@ -0,0 +1,25 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author : 260611
+ * @description : 获取标定后的冲洗信息, 入参
+ * @since : Created in 2021/11/29 10:47
+ */
+
+public class NET_IN_GET_PTZ_WASH_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道ID
+ */
+ public int nChannelID;
+
+ public NET_IN_GET_PTZ_WASH_INFO() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_REAL_PREVIEW_CHANNEL.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_REAL_PREVIEW_CHANNEL.java
new file mode 100644
index 0000000..4606341
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_REAL_PREVIEW_CHANNEL.java
@@ -0,0 +1,33 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+import static com.netsdk.lib.NetSDKLib.MAX_PREVIEW_CHANNEL_NUM;
+
+/**
+ * 获取真实预览通道号 入参 {@link NetSDKLib#CLIENT_GetRealPreviewChannel}
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/18 9:38
+ */
+public class NET_IN_GET_REAL_PREVIEW_CHANNEL extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 需要获取的通道数
+ */
+ public int nChannelCount;
+ /**
+ * 逻辑通道信息,下标为将要获取的真实通道数
+ */
+ public NET_LOGIC_CHANNEL_INFO[] stuChannelInfo = new NET_LOGIC_CHANNEL_INFO[MAX_PREVIEW_CHANNEL_NUM];
+
+ public NET_IN_GET_REAL_PREVIEW_CHANNEL() {
+ dwSize = this.size();
+ for (int i = 0; i < stuChannelInfo.length; i++) {
+ stuChannelInfo[i] = new NET_LOGIC_CHANNEL_INFO();
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_RECORD_STATE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_RECORD_STATE.java
new file mode 100644
index 0000000..343dfd9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_RECORD_STATE.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 获取录像状态 入参 {@link NetSDKLib#CLIENT_GetRecordState}
+ *
+ * @author : 47040
+ * @since : Created in 2020/10/13 20:26
+ */
+public class NET_IN_GET_RECORD_STATE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+
+ public NET_IN_GET_RECORD_STATE() {
+ this.dwSize = size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_RUNNING_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_RUNNING_INFO.java
new file mode 100644
index 0000000..94f4869
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_RUNNING_INFO.java
@@ -0,0 +1,25 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_GetRtscRunningInfo 接口输入参数
+ * @date 2021/09/28
+ */
+public class NET_IN_GET_RUNNING_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ /**
+ * 查询类型,按位表示: bit0:运行状态 bit1:控制方式 bit2:车道功能状态 bit3:车道/匝道控制状态信息 bit4:当前信号方案色步信息 bit5: 下一个周期信号方案色步信息
+ */
+ public int nType;
+
+ public NET_IN_GET_RUNNING_INFO(){
+ this.dwSize = this.size();
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_RUNNING_MODE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_RUNNING_MODE.java
new file mode 100644
index 0000000..52e7ae6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_RUNNING_MODE.java
@@ -0,0 +1,19 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_GetRtscRunningMode 接口输入参数
+ * @date 2021/09/28
+ */
+public class NET_IN_GET_RUNNING_MODE extends NetSDKLib.SdkStructure{
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ public NET_IN_GET_RUNNING_MODE(){
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_SMOKE_DATA.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_SMOKE_DATA.java
new file mode 100644
index 0000000..9ebee1b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_SMOKE_DATA.java
@@ -0,0 +1,23 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_GetSmokeData 入参
+ * @date 2022/10/17 13:45:09
+ */
+public class NET_IN_GET_SMOKE_DATA extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+
+ public NET_IN_GET_SMOKE_DATA() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_TEMPERATUREEX.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_TEMPERATUREEX.java
new file mode 100644
index 0000000..aac9883
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_TEMPERATUREEX.java
@@ -0,0 +1,23 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_FaceBoard_GetTemperatureEx的入参
+ * @date 2022/05/12 16:28:47
+ */
+public class NET_IN_GET_TEMPERATUREEX extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 温度类型 {@link com.netsdk.lib.enumeration.EM_TEMPERATUREEX_TYPE}
+ */
+ public int emTemperatureType;
+
+ public NET_IN_GET_TEMPERATUREEX() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_VAULTDOOR_STATE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_VAULTDOOR_STATE_INFO.java
new file mode 100644
index 0000000..9c62c7e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_VAULTDOOR_STATE_INFO.java
@@ -0,0 +1,20 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_GetVaultDoorState 的输入参数
+* @date 2022/08/10 11:38:37
+*/
+public class NET_IN_GET_VAULTDOOR_STATE_INFO extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+
+public NET_IN_GET_VAULTDOOR_STATE_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_VIDEOSTAT_HEATMAP.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_VIDEOSTAT_HEATMAP.java
new file mode 100644
index 0000000..eae57c9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_VIDEOSTAT_HEATMAP.java
@@ -0,0 +1,35 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 获取热度图数据接口入参,
+ * @date 2020/9/21
+ */
+public class NET_IN_GET_VIDEOSTAT_HEATMAP extends NetSDKLib.SdkStructure {
+ /**
+ * 此结构体大小
+ */
+ public int dwSize;
+ /**
+ * 计划(预置点,仅球机有效,范围1~MaxNumberStatPlan)
+ */
+ public int nPlanID;
+ /**
+ * 开始时间
+ */
+ public NET_TIME stuStartTime;
+ /**
+ * 结束时间
+ */
+ public NET_TIME stuEndTime;
+ /**
+ * Ai热度图类型,枚举值类型{@link com.netsdk.lib.enumeration.EM_HEATMAP_TYPE}
+ */
+ public int emHeatMapType;
+ public NET_IN_GET_VIDEOSTAT_HEATMAP(){
+ this.dwSize=size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GET_XRAY_MULTILEVEL_DETECT_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_XRAY_MULTILEVEL_DETECT_INFO.java
new file mode 100644
index 0000000..7f0b7bf
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GET_XRAY_MULTILEVEL_DETECT_INFO.java
@@ -0,0 +1,20 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 接口 CLIENT_GetXRayMultiLevelDetectCFG 的输入参数
+* @date 2022/12/01 16:20:33
+*/
+public class NET_IN_GET_XRAY_MULTILEVEL_DETECT_INFO extends NetSDKLib.SdkStructure {
+/**
+此结构体大小,必须赋值
+*/
+public int dwSize;
+
+public NET_IN_GET_XRAY_MULTILEVEL_DETECT_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_GOTO_PRIVACY_MASKING.java b/src/main/java/com/netsdk/lib/structure/NET_IN_GOTO_PRIVACY_MASKING.java
new file mode 100644
index 0000000..99512b6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_GOTO_PRIVACY_MASKING.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_GotoPrivacyMasking 输入参数
+ * @date 2022/07/21 17:19:47
+ */
+public class NET_IN_GOTO_PRIVACY_MASKING extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 遮档块编号,从0开始
+ */
+ public int nIndex;
+
+ public NET_IN_GOTO_PRIVACY_MASKING() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_IVSEVENT_FIND_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_IVSEVENT_FIND_INFO.java
new file mode 100644
index 0000000..6db7e62
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_IVSEVENT_FIND_INFO.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_IVSEventFind接口入参
+* @date 2022/11/02 13:47:07
+*/
+public class NET_IN_IVSEVENT_FIND_INFO extends NetSDKLib.SdkStructure {
+/**
+此结构体大小,必须赋值
+*/
+public int dwSize;
+/**
+报警诊断类型
+0:全部
+1:未处理
+2:正确
+3:错误
+4:重复正确报警
+5:重复错误报警
+*/
+public int nVaild;
+/**
+查询开始时间
+*/
+public NET_TIME stStartTime=new NET_TIME();
+/**
+查询结束时间
+*/
+public NET_TIME stEndTime=new NET_TIME();
+/**
+通道号列表
+*/
+public int[] nChannelList=new int[128];
+/**
+nChannelList中有效通道号个数,填0表示查询所有通道号
+*/
+public int dwChannelCnt;
+/**
+dwEventCodeList中有效的事件类型个数
+*/
+public int dwEventCodeCnt;
+/**
+智能事件类型列表,参考 EVENT_IVS_ALL 这个宏下面的智能事件宏定义
+注意,并非所有的事件都能查询,需要根据所用的IVS设备支持的情况,填写对应的智能事件类型
+*/
+public int[] dwEventCodeList=new int[128];
+
+public NET_IN_IVSEVENT_FIND_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_IVSEVENT_NEXTFIND_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_IVSEVENT_NEXTFIND_INFO.java
new file mode 100644
index 0000000..b8c0539
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_IVSEVENT_NEXTFIND_INFO.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_IVSEventNextFind接口入参
+* @date 2022/11/02 13:50:37
+*/
+public class NET_IN_IVSEVENT_NEXTFIND_INFO extends NetSDKLib.SdkStructure {
+/**
+此结构体大小,必须赋值
+*/
+public int dwSize;
+/**
+查询起点偏移
+*/
+public int nStartIndex;
+/**
+单次查询返回数量
+*/
+public int nLimit;
+
+public NET_IN_IVSEVENT_NEXTFIND_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MAKE_TOKEN.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MAKE_TOKEN.java
new file mode 100644
index 0000000..b43ade9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MAKE_TOKEN.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 获取token入参
+* @date 2022/10/12 11:10:34
+*/
+public class NET_IN_MAKE_TOKEN extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+客户端唯一标示符
+*/
+public byte[] szUUID=new byte[128];
+/**
+Token保活时间, 范围60~86400
+*/
+public int nKeepLiveTime;
+
+public NET_IN_MAKE_TOKEN(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MANUAL_TEST.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MANUAL_TEST.java
new file mode 100644
index 0000000..ea5e490
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MANUAL_TEST.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_ManualTest 接口输入参数
+ * @date 2023/03/16 08:53:00
+ */
+public class NET_IN_MANUAL_TEST extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 测试ID,每次下发的测试ID不一样
+ */
+ public int dwTestID;
+ /**
+ * 测试的通道号,可以对应某一个要测试的SIA服务器
+ */
+ public int nChannel;
+
+ public NET_IN_MANUAL_TEST() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MINI_RADAR_ALARMPOINTINFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MINI_RADAR_ALARMPOINTINFO.java
new file mode 100644
index 0000000..d0aa9a7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MINI_RADAR_ALARMPOINTINFO.java
@@ -0,0 +1,29 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 260611
+ * @description 订阅mini雷达的报警点信息入参(对应接口 CLIENT_AttachMiniRadarAlarmPointInfo)
+ * @date 2022/08/04 16:59:36
+ */
+public class NET_IN_MINI_RADAR_ALARMPOINTINFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 雷达报警点信息回调
+ */
+ public NetSDKLib.fMiniRadarAlarmPointInfoCallBack cbAlarmPointInfo;
+ /**
+ * 用户数据
+ */
+ public Pointer dwUser;
+
+ public NET_IN_MINI_RADAR_ALARMPOINTINFO() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MODIFY_ALARM_USER.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MODIFY_ALARM_USER.java
new file mode 100644
index 0000000..234d85f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MODIFY_ALARM_USER.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_ModifyAlarmUser 接口输入参数
+ * @date 2023/03/16 10:58:09
+ */
+public class NET_IN_MODIFY_ALARM_USER extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 用户ID,用户唯一标识
+ */
+ public byte[] szUserID = new byte[64];
+ /**
+ * 修改的用户信息
+ */
+ public NET_ALARM_USER stuAlarmUser = new NET_ALARM_USER();
+
+ public NET_IN_MODIFY_ALARM_USER() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MODIFY_ALARM_USER_PASSWORD.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MODIFY_ALARM_USER_PASSWORD.java
new file mode 100644
index 0000000..0376408
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MODIFY_ALARM_USER_PASSWORD.java
@@ -0,0 +1,31 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_ModifyAlarmUserPassword 接口输入参数
+ * @date 2023/03/16 11:01:47
+ */
+public class NET_IN_MODIFY_ALARM_USER_PASSWORD extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 用户ID,用户唯一标识
+ */
+ public byte[] szUserID = new byte[64];
+ /**
+ * 旧密码
+ */
+ public byte[] szOldPassword = new byte[64];
+ /**
+ * 新密码
+ */
+ public byte[] szNewPassword = new byte[64];
+
+ public NET_IN_MODIFY_ALARM_USER_PASSWORD() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MODIFY_COURSE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MODIFY_COURSE.java
new file mode 100644
index 0000000..d808d4b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MODIFY_COURSE.java
@@ -0,0 +1,36 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 修改课程记录 入参指针 {@link NetSDKLib#CLIENT_ModifyCourse}
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/17 16:37
+ */
+public class NET_IN_MODIFY_COURSE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 课程数量
+ */
+ public int nCourseNum;
+ /**
+ * 课程信息
+ */
+ public NET_COURSE[] stuCourseInfo = new NET_COURSE[64];
+ /**
+ * 课程ID
+ */
+ public int[] nId = new int[64];
+
+ public NET_IN_MODIFY_COURSE() {
+ dwSize = this.size();
+ for (int i = 0; i < stuCourseInfo.length; i++) {
+ stuCourseInfo[i] = new NET_COURSE();
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MODIFY_GROUP_FOR_VEHICLE_REG_DB.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MODIFY_GROUP_FOR_VEHICLE_REG_DB.java
new file mode 100644
index 0000000..11e5ba0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MODIFY_GROUP_FOR_VEHICLE_REG_DB.java
@@ -0,0 +1,19 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description CLIENT_ModifyGroupForVehicleRegisterDB 接口输入参数
+ * @date 2022/10/21 17:30
+ */
+public class NET_IN_MODIFY_GROUP_FOR_VEHICLE_REG_DB extends NetSDKLib.SdkStructure{
+ public int dwSize; // 结构体大小
+ public NET_VEHICLE_GROUP_INFO stuGroupInfo=new NET_VEHICLE_GROUP_INFO(); // 车辆组信息
+
+ public NET_IN_MODIFY_GROUP_FOR_VEHICLE_REG_DB(){
+ dwSize = this.size();
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MODIFY_PARKINGRECORD_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MODIFY_PARKINGRECORD_INFO.java
new file mode 100644
index 0000000..7f955e1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MODIFY_PARKINGRECORD_INFO.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 修改停车记录信息 入参
+ * 接口 {@link NetSDKLib#CLIENT_ModifyParkingRecord}
+ * 出参 {@link NET_OUT_MODIFY_PARKINGRECORD_INFO}
+ *
+ * @author 47040
+ * @since Created in 2020/11/18 14:04
+ */
+public class NET_IN_MODIFY_PARKINGRECORD_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 老的记录
+ */
+ public NET_PARKINGRECORD_INFO stuOld;
+ /**
+ * 新的记录
+ */
+ public NET_PARKINGRECORD_INFO stuNew;
+
+ public NET_IN_MODIFY_PARKINGRECORD_INFO() {
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MODIFY_VEHICLE_FOR_VEHICLE_REG_DB.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MODIFY_VEHICLE_FOR_VEHICLE_REG_DB.java
new file mode 100644
index 0000000..937818f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MODIFY_VEHICLE_FOR_VEHICLE_REG_DB.java
@@ -0,0 +1,17 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description CLIENT_ModifyVehicleForVehicleRegisterDB 接口输入参数
+ * @date 2022/10/22 10:24
+ */
+public class NET_IN_MODIFY_VEHICLE_FOR_VEHICLE_REG_DB extends NetSDKLib.SdkStructure{
+ public int dwSize; // 结构体大小
+ public NetSDKLib.NET_VEHICLE_INFO stuVehicleInfo=new NetSDKLib.NET_VEHICLE_INFO(); // 车辆信息
+ public NET_IN_MODIFY_VEHICLE_FOR_VEHICLE_REG_DB(){
+ dwSize=this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MONITORWALL_GET_COLL_SCHD.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MONITORWALL_GET_COLL_SCHD.java
new file mode 100644
index 0000000..977048a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MONITORWALL_GET_COLL_SCHD.java
@@ -0,0 +1,41 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+import static com.netsdk.lib.constant.SDKStructureFieldLenth.NET_MAX_COLLECTION_NUM;
+
+/**
+ * 获取预案时间表 入参 {@link NetSDKLib#CLIENT_OperateMonitorWall}
+ *
+ * @author : 47040
+ * @since : Created in 2020/10/19 9:24
+ */
+public class NET_IN_MONITORWALL_GET_COLL_SCHD extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * TRUE-查询所有预案, 不需要指定预案名称. FALSE-查询名称所对应的预案
+ */
+ public int bAllCollections;
+ /**
+ * 预案数, bAllCollections为FALSE时有效
+ */
+ public int nCollectionNum;
+ /**
+ * 预案名称
+ */
+ public NET_MONITORWALL_COLLECTION_NAME[] szCollections = new NET_MONITORWALL_COLLECTION_NAME[NET_MAX_COLLECTION_NUM];
+ /**
+ * 电视墙ID
+ */
+ public int nMonitorWallID;
+
+ public NET_IN_MONITORWALL_GET_COLL_SCHD() {
+ dwSize = this.size();
+ for (int i = 0; i < szCollections.length; i++) {
+ szCollections[i] = new NET_MONITORWALL_COLLECTION_NAME();
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MONITORWALL_GET_ENABLE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MONITORWALL_GET_ENABLE.java
new file mode 100644
index 0000000..05ea2ce
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MONITORWALL_GET_ENABLE.java
@@ -0,0 +1,37 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.NET_MONITORWALL_OPERATE_TYPE;
+
+import static com.netsdk.lib.NetSDKLib.NET_MAX_MONITORWALL_NUM;
+
+/**
+ * 电视墙获取使能 入参
+ * 对应出参 {@link NET_OUT_MONITORWALL_GET_ENABLE}
+ * 对应枚举 {@link NET_MONITORWALL_OPERATE_TYPE#NET_MONITORWALL_OPERATE_GET_ENABLE}
+ * 对应接口 {@link NetSDKLib#CLIENT_OperateMonitorWall}
+ *
+ * @author : 47040
+ * @since : Created in 2020/10/19 11:04
+ */
+public class NET_IN_MONITORWALL_GET_ENABLE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 要查询的电视墙数量, -1表示查询所有电视墙
+ */
+ public int nMonitorWallNum;
+ /**
+ * 电视墙名称, nMonitorWallNum > 0 时有效
+ */
+ public NET_MONITORWALL_NAME[] szNames = new NET_MONITORWALL_NAME[NET_MAX_MONITORWALL_NUM];
+
+ public NET_IN_MONITORWALL_GET_ENABLE() {
+ dwSize = this.size();
+ for (int i = 0; i < szNames.length; i++) {
+ szNames[i] = new NET_MONITORWALL_NAME();
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MONITORWALL_SET_COLL_SCHD.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MONITORWALL_SET_COLL_SCHD.java
new file mode 100644
index 0000000..3f01c19
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MONITORWALL_SET_COLL_SCHD.java
@@ -0,0 +1,37 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+import static com.netsdk.lib.constant.SDKStructureFieldLenth.NET_MAX_COLLECTION_NUM;
+
+/**
+ * 设置预案时间表 入参 {@link NetSDKLib#CLIENT_OperateMonitorWall}
+ *
+ * @author : 47040
+ * @since : Created in 2020/10/19 10:34
+ */
+public class NET_IN_MONITORWALL_SET_COLL_SCHD extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 预案数
+ */
+ public int nCollectionNum;
+ /**
+ * 预案时间表
+ */
+ public MONITORWALL_COLLECTION_SCHEDULE[] stuCollShedule = new MONITORWALL_COLLECTION_SCHEDULE[NET_MAX_COLLECTION_NUM];
+ /**
+ * 电视墙ID
+ */
+ public int nMonitorWallID;
+
+ public NET_IN_MONITORWALL_SET_COLL_SCHD() {
+ dwSize = this.size();
+ for (int i = 0; i < stuCollShedule.length; i++) {
+ stuCollShedule[i] = new MONITORWALL_COLLECTION_SCHEDULE();
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MONITORWALL_SET_ENABLE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MONITORWALL_SET_ENABLE.java
new file mode 100644
index 0000000..e3718c3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MONITORWALL_SET_ENABLE.java
@@ -0,0 +1,37 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.NET_MONITORWALL_OPERATE_TYPE;
+
+import static com.netsdk.lib.NetSDKLib.NET_MAX_MONITORWALL_NUM;
+
+/**
+ * 电视墙设置使能 入参
+ * 对应出参 {@link NET_OUT_MONITORWALL_SET_ENABLE}
+ * 对应枚举 {@link NET_MONITORWALL_OPERATE_TYPE#NET_MONITORWALL_OPERATE_SET_ENABLE}
+ * 对应接口 {@link NetSDKLib#CLIENT_OperateMonitorWall}
+ *
+ * @author : 47040
+ * @since : Created in 2020/10/19 11:25
+ */
+public class NET_IN_MONITORWALL_SET_ENABLE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 要设置的电视墙数量
+ */
+ public int nMonitorWallNum;
+ /**
+ * 电视墙使能
+ */
+ public NET_MONITORWALL_ENABLE_INFO[] stuEnable = new NET_MONITORWALL_ENABLE_INFO[NET_MAX_MONITORWALL_NUM];
+
+ public NET_IN_MONITORWALL_SET_ENABLE() {
+ dwSize = this.size();
+ for (int i = 0; i < stuEnable.length; i++) {
+ stuEnable[i] = new NET_MONITORWALL_ENABLE_INFO();
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MOVE_DIRECTLY_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MOVE_DIRECTLY_INFO.java
new file mode 100644
index 0000000..aa54bac
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MOVE_DIRECTLY_INFO.java
@@ -0,0 +1,29 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 云台三维定位, 对应NET_EXTPTZ_MOVE_DIRECTLY枚举
+* @origin autoTool
+* @date 2023/03/07 16:38:49
+*/
+public class NET_IN_MOVE_DIRECTLY_INFO extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+屏幕坐标
+*/
+public NetSDKLib.PTZ_SPEED_UNIT stuScreen=new NetSDKLib.PTZ_SPEED_UNIT();
+/**
+云台运行速度
+*/
+public NetSDKLib.PTZ_SPEED_UNIT stuSpeed=new NetSDKLib.PTZ_SPEED_UNIT();
+
+public NET_IN_MOVE_DIRECTLY_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MSGROUP_CLOSE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MSGROUP_CLOSE_INFO.java
new file mode 100644
index 0000000..eadb885
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MSGROUP_CLOSE_INFO.java
@@ -0,0 +1,23 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 关闭主从式跟踪器实例入参
+ * @date 2022/09/14 14:04:15
+ */
+public class NET_IN_MSGROUP_CLOSE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 主从跟踪组句柄
+ */
+ public int dwToken;
+
+ public NET_IN_MSGROUP_CLOSE_INFO() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MSGROUP_LOCATE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MSGROUP_LOCATE_INFO.java
new file mode 100644
index 0000000..a5d469d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MSGROUP_LOCATE_INFO.java
@@ -0,0 +1,31 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 联动主从跟踪组入参
+ * @date 2022/09/14 13:55:52
+ */
+public class NET_IN_MSGROUP_LOCATE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 主从跟踪组句柄
+ */
+ public int dwToken;
+ /**
+ * 主机坐标
+ */
+ public NetSDKLib.DH_POINT stuPoint = new NetSDKLib.DH_POINT();
+ /**
+ * 鱼眼圆心坐标与半径, 依次为[横坐标, 纵坐标, 半径]
+ */
+ public short[] snMasterInfo = new short[3];
+
+ public NET_IN_MSGROUP_LOCATE_INFO() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MSGROUP_OPEN_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MSGROUP_OPEN_INFO.java
new file mode 100644
index 0000000..8826c57
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MSGROUP_OPEN_INFO.java
@@ -0,0 +1,35 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 打开主从跟踪组入参
+ * @date 2022/09/14 13:52:40
+ */
+public class NET_IN_MSGROUP_OPEN_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大
+ */
+ public int dwSize;
+ /**
+ * 设备组号
+ */
+ public int nGroupID;
+ /**
+ * 从机序号
+ */
+ public int nSlaveID;
+ /**
+ * 对应主从组的主机序号, 例如三枪一球,则该字段取值0、1和2
+ */
+ public int nMasterID;
+ /**
+ * 本地通道号,对应本地视频通道号,从0开始。(老设备及前端设备不支持多通道,设置为0)
+ */
+ public int nChannel;
+
+ public NET_IN_MSGROUP_OPEN_INFO() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MSGROUP_RECTLOCATE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MSGROUP_RECTLOCATE_INFO.java
new file mode 100644
index 0000000..30b7018
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MSGROUP_RECTLOCATE_INFO.java
@@ -0,0 +1,31 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 主动跟踪主操作命令 EM_MSGROUP_OPERATE_RECTLOCATE 入参
+ * @date 2022/09/14 14:06:45
+ */
+public class NET_IN_MSGROUP_RECTLOCATE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 主从跟踪组句柄, 从 EM_MSGROUP_OPERATE_OPEN 操作获取
+ */
+ public int dwToken;
+ /**
+ * 选定的矩形框坐标
+ */
+ public NetSDKLib.NET_RECT stuRect = new NetSDKLib.NET_RECT();
+ /**
+ * 框选的方向, 0-从左上到右下, 表示放大; 1-从右下到左上,表示缩小
+ */
+ public int nRectDirection;
+
+ public NET_IN_MSGROUP_RECTLOCATE_INFO() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MSGROUP_SLAVE_POSITION_TO_MASTER_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MSGROUP_SLAVE_POSITION_TO_MASTER_INFO.java
new file mode 100644
index 0000000..2d9dce7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MSGROUP_SLAVE_POSITION_TO_MASTER_INFO.java
@@ -0,0 +1,31 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description EM_MSGROUP_OPERATE_SLAVE_POSITION_TO_MASTER 入参
+ * @date 2022/09/14 14:09:08
+ */
+public class NET_IN_MSGROUP_SLAVE_POSITION_TO_MASTER_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 主从跟踪组句柄, 从 EM_MSGROUP_OPERATE_OPEN 操作获取
+ */
+ public int dwToken;
+ /**
+ * 从机PTZ位置,PT为真实值扩大10倍表示,Z为真实倍率扩大10倍表示
+ */
+ public int[] nPTZ = new int[3];
+ /**
+ * 物体在从机视频上的位置, 8192坐标系
+ */
+ public NetSDKLib.NET_RECT stuRect = new NetSDKLib.NET_RECT();
+
+ public NET_IN_MSGROUP_SLAVE_POSITION_TO_MASTER_INFO() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MSGROUP_TRACK_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MSGROUP_TRACK_INFO.java
new file mode 100644
index 0000000..64b9bc6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MSGROUP_TRACK_INFO.java
@@ -0,0 +1,31 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 手动选定目标跟踪入参
+ * @date 2022/09/14 14:01:47
+ */
+public class NET_IN_MSGROUP_TRACK_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 主从跟踪组句柄
+ */
+ public int dwToken;
+ /**
+ * 算法方案类型
+ */
+ public byte[] szClass = new byte[16];
+ /**
+ * 算法目标ID
+ */
+ public int dwObjectID;
+
+ public NET_IN_MSGROUP_TRACK_INFO() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MULTIFACE_DETECT_STATE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MULTIFACE_DETECT_STATE.java
new file mode 100644
index 0000000..0eb7493
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MULTIFACE_DETECT_STATE.java
@@ -0,0 +1,45 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 260611
+ * @description CLIENT_AttachDetectMultiFaceState 接口输入参数
+ * @date 2022/11/21 17:53:13
+ */
+public class NET_IN_MULTIFACE_DETECT_STATE extends NetSDKLib.SdkStructure {
+ /**
+ * 此结构体大小
+ */
+ public int dwSize;
+ /**
+ * 用于字节对齐
+ */
+ public byte[] bReserved = new byte[4];
+ /**
+ * 回调函数
+ */
+ public NetSDKLib.fMultiFaceDetectState cbMultiFaceDetectState;
+ /**
+ * 用户数据
+ */
+ public Pointer dwUser;
+ /**
+ * 回调函数扩展(推荐使用)
+ */
+ public NetSDKLib.fMultiFaceDetectStateEx cbMultiFaceDetectStateEx;
+ /**
+ * 查询令牌
+ */
+ public int[] nTokens = new int[10];
+ /**
+ * 查询令牌个数, 若为0,则默认订阅token为0的检测, 若为-1表示订阅全部token
+ */
+ public int nTokensNum;
+
+ public NET_IN_MULTIFACE_DETECT_STATE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MULTI_APPEND_TO_VEHICLE_REG_DB.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MULTI_APPEND_TO_VEHICLE_REG_DB.java
new file mode 100644
index 0000000..ebcc560
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MULTI_APPEND_TO_VEHICLE_REG_DB.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description CLIENT_MultiAppendToVehicleRegisterDB 接口输入参数
+ * @date 2021/8/17 14:49
+ */
+public class NET_IN_MULTI_APPEND_TO_VEHICLE_REG_DB extends NetSDKLib.SdkStructure {
+
+ public int dwSize; // 结构体大小
+ public int nVehicleNum; // 车辆个数
+ //public NetSDKLib.NET_VEHICLE_INFO[] stuVehicleInfo= (NetSDKLib.NET_VEHICLE_INFO[])new NetSDKLib.NET_VEHICLE_INFO().toArray(1000);// 车辆信息
+ public Pointer stuVehicleInfo; //sizeof(NET_VEHICLE_INFO)*nVehicleNum
+ public int bReplace; // 遇到相同记录是否覆盖, TRUE覆盖, FALSE跳过
+
+ public NET_IN_MULTI_APPEND_TO_VEHICLE_REG_DB(){
+ this.dwSize=this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_MULTI_APPEND_TO_WORKSUIT_GROUP.java b/src/main/java/com/netsdk/lib/structure/NET_IN_MULTI_APPEND_TO_WORKSUIT_GROUP.java
new file mode 100644
index 0000000..7358469
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_MULTI_APPEND_TO_WORKSUIT_GROUP.java
@@ -0,0 +1,44 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 251823
+ * @description CLIENT_MultiAppendToWorkSuitCompareGroup 接口输入参数
+ * @date 2022/10/08 19:49:53
+ */
+public class NET_IN_MULTI_APPEND_TO_WORKSUIT_GROUP extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 工装合规样本个数, 由用户指定大小
+ */
+ public int nWorkSuitSampleNum;
+ /**
+ * 工装合规样本信息, 内存由用户申请, 申请大小为nWorkSuitSampleNum * sizeof(NET_WORKSUIT_SAMPLE_INFO)
+ */
+ public Pointer pstWorkSuitSampleInfo;
+ /**
+ * 工装合规导入标识信息
+ */
+ public NET_WORKSUIT_APPEND_IDENTI_INFO stuAppendIdentiInfo = new NET_WORKSUIT_APPEND_IDENTI_INFO();
+ /**
+ * 工装合规导入图片缓冲区, 用于存放需要导入的图片数据, 内存由用户申请
+ */
+ public Pointer pszImageBuffer;
+ /**
+ * 图片缓冲区大小
+ */
+ public int nImageBufLen;
+ /**
+ * 字节对齐
+ */
+ public byte[] szReserved = new byte[4];
+
+ public NET_IN_MULTI_APPEND_TO_WORKSUIT_GROUP() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_NAS_DIRECTORY_GET_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_NAS_DIRECTORY_GET_INFO.java
new file mode 100644
index 0000000..9de03e6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_NAS_DIRECTORY_GET_INFO.java
@@ -0,0 +1,25 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_NASDirectoryGetInfo接口入参
+* @date 2022/09/22 17:26:59
+*/
+public class NET_IN_NAS_DIRECTORY_GET_INFO extends NetSDKLib.SdkStructure {
+/**
+此结构体大小,必须赋值
+*/
+public int dwSize;
+
+/**
+ * 共享文件夹名称, 用于创建设备组件实例, 必须填写
+*/
+public byte[] szName=new byte[128];
+
+public NET_IN_NAS_DIRECTORY_GET_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_NETAPP_GET_MOBILE_INTERFACE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_NETAPP_GET_MOBILE_INTERFACE.java
new file mode 100644
index 0000000..faf518d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_NETAPP_GET_MOBILE_INTERFACE.java
@@ -0,0 +1,19 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description EM_PRC_NETAPP_TYPE_GET_MOBILE_INTERFACE 入参
+ * @date 2021/9/17
+ */
+public class NET_IN_NETAPP_GET_MOBILE_INTERFACE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ public NET_IN_NETAPP_GET_MOBILE_INTERFACE() {
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_PACKAGE_STATISTICS_BYGRADE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_PACKAGE_STATISTICS_BYGRADE.java
new file mode 100644
index 0000000..2e53341
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_PACKAGE_STATISTICS_BYGRADE.java
@@ -0,0 +1,23 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 通过危险物等级统计的包裹信息
+ * @date 2021/7/1
+ */
+public class NET_IN_PACKAGE_STATISTICS_BYGRADE extends NetSDKLib.SdkStructure{
+
+
+ /**
+ * 危险物等级,参考枚举{@link com.netsdk.lib.NetSDKLib.EM_DANGER_GRADE_TYPE }
+ */
+ public int emGrade; // 危险物等级
+ public int nCount; // 危险物数量
+ public byte[] byReserved=new byte[64]; // 预留字段
+
+
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_PACKAGE_STATISTICS_BYTYPE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_PACKAGE_STATISTICS_BYTYPE.java
new file mode 100644
index 0000000..8904fac
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_PACKAGE_STATISTICS_BYTYPE.java
@@ -0,0 +1,19 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 按危险类型统计的信息
+ * @date 2021/7/1
+ */
+public class NET_IN_PACKAGE_STATISTICS_BYTYPE extends NetSDKLib.SdkStructure{
+
+ /**
+ * 危险物等级,参考枚举{@link com.netsdk.lib.NetSDKLib.EM_INSIDE_OBJECT_TYPE }
+ */
+ public int emType; // 危险物类型
+ public int nCount; // 危险物数量
+ public byte[] byReserved=new byte[64]; // 预留字段
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_PERSON_INFO_INPUT_RESULT.java b/src/main/java/com/netsdk/lib/structure/NET_IN_PERSON_INFO_INPUT_RESULT.java
new file mode 100644
index 0000000..4503059
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_PERSON_INFO_INPUT_RESULT.java
@@ -0,0 +1,42 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * CLIENT_SetPersonInfoInputResult 输入参数
+ */
+public class NET_IN_PERSON_INFO_INPUT_RESULT extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道ID
+ */
+ public int nChannelID;
+ /**
+ * 0 : 成功 1 : 人员信息不在人员库中
+ */
+ public int nResult;
+ /**
+ * 字节对齐
+ */
+ public byte[] byReserved = new byte[4];
+ /**
+ * 证件号码
+ */
+ public byte[] szCitizenID = new byte[64];
+ /**
+ * 设备展示颜色 com.netsdk.lib.enumeration.EM_SHOW_COLOR
+ */
+ public int emColor;
+ /**
+ * 0:实时采集的数据 1:离线采集的数据
+ */
+ public int nDataType;
+
+ public NET_IN_PERSON_INFO_INPUT_RESULT() {
+ this.dwSize = this.size();
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_PRE_UPLOAD_REMOTE_FILE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_PRE_UPLOAD_REMOTE_FILE.java
new file mode 100644
index 0000000..c66a2fc
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_PRE_UPLOAD_REMOTE_FILE.java
@@ -0,0 +1,29 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ *
+ * @author 47081
+ * @version 1.0
+ * @description CLIENT_PreUploadRemoteFile 接口输入参数(设置文件长度)
+ * @date 2020/6/10
+ */
+public class NET_IN_PRE_UPLOAD_REMOTE_FILE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 源文件路径
+ */
+ public String pszFileSrc;
+ /**
+ * 保存在设备端的文件路径
+ */
+ public String pszFileDst;
+
+ public NET_IN_PRE_UPLOAD_REMOTE_FILE() {
+ this.dwSize=this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_PTZBASE_GET_CENTER_GPS.java b/src/main/java/com/netsdk/lib/structure/NET_IN_PTZBASE_GET_CENTER_GPS.java
new file mode 100644
index 0000000..ed805ab
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_PTZBASE_GET_CENTER_GPS.java
@@ -0,0 +1,32 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_QueryDevInfo NET_QUERY_PTZBASE_GET_CENTER_GPS 类型接口输入参数
+* @date 2022/05/18 10:44:10
+*/
+public class NET_IN_PTZBASE_GET_CENTER_GPS extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+通道号从0开始
+*/
+public int nChannel;
+/**
+计算GPS信息标志位,为TRUE时使用dPosition中的位置信息来进行计算,为FALSE时使用当前云台PT位置信息计算GPS
+*/
+public int bPosEnable;
+/**
+云台方向信息,第一个元素为水平角度,第二个元素为垂直角度
+*/
+public double[] dPosition=new double[2];
+
+public NET_IN_PTZBASE_GET_CENTER_GPS(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_PTZBASE_GET_HFOV_VALUE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_PTZBASE_GET_HFOV_VALUE.java
new file mode 100644
index 0000000..9eb6cd9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_PTZBASE_GET_HFOV_VALUE.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_QueryDevInfo NET_QUERY_PTZBASE_GET_HFOV_VALUE 类型接口输入参数
+* @date 2022/05/18 10:21:59
+*/
+public class NET_IN_PTZBASE_GET_HFOV_VALUE extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+通道号从0开始
+*/
+public int nChannel;
+/**
+镜头变倍值,归一化到0~1
+*/
+public float fZoom;
+
+public NET_IN_PTZBASE_GET_HFOV_VALUE(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_PTZBASE_GET_VFOV_VALUE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_PTZBASE_GET_VFOV_VALUE.java
new file mode 100644
index 0000000..e52ec4b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_PTZBASE_GET_VFOV_VALUE.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_QueryDevInfo NET_QUERY_PTZBASE_GET_VFOV_VALUE 类型接口输入参数
+* @date 2022/05/18 10:38:04
+*/
+public class NET_IN_PTZBASE_GET_VFOV_VALUE extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+通道号从0开始
+*/
+public int nChannel;
+/**
+镜头变倍值,归一化到0~1
+*/
+public float fZoom;
+
+public NET_IN_PTZBASE_GET_VFOV_VALUE(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_PTZBASE_MOVEABSOLUTELY_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_PTZBASE_MOVEABSOLUTELY_INFO.java
new file mode 100644
index 0000000..bdee1b4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_PTZBASE_MOVEABSOLUTELY_INFO.java
@@ -0,0 +1,38 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @description:
+ * @author: 251589
+ * @time: 2020/11/17 19:41
+ */
+public class NET_IN_PTZBASE_MOVEABSOLUTELY_INFO extends NetSDKLib.SdkStructure {
+
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ /**
+ * 1 表示显示倍率; 2 保留,内部用; 3 表示映射倍率值; 如为 0 则默认映射倍率值
+ */
+ public int nZoomFlag;
+
+ /**
+ * 云台绝对移动位置云台绝对定位参数,扩大10倍
+ * 云台水平坐标(0~3600)
+ * 云台垂直坐标(-1800~1800)
+ * 倍率值,范围:nZoomFlag为1时(0~最大显示倍率*10),nZoomFlag为3时(0~16384)
+ */
+ public NetSDKLib.NET_PTZSPACE_UNNORMALIZED stuPosition;
+
+ /**
+ * 字节对齐
+ */
+ public byte[] byReserved = new byte[512];
+
+ public NET_IN_PTZBASE_MOVEABSOLUTELY_INFO() {
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_PTZBASE_SET_FOCUS_MAP_VALUE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_PTZBASE_SET_FOCUS_MAP_VALUE_INFO.java
new file mode 100644
index 0000000..c7ae59a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_PTZBASE_SET_FOCUS_MAP_VALUE_INFO.java
@@ -0,0 +1,29 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 设置当前位置聚焦值
+ * 对应接口 {@link NetSDKLib#CLIENT_DHPTZControlEx2}
+ * 对应枚举 {@link NetSDKLib.NET_EXTPTZ_ControlType#NET_EXTPTZ_BASE_SET_FOCUS_MAP_VALUE}
+ *
+ * @author : 47040
+ * @since : Created in 2021/3/26 17:04
+ */
+public class NET_IN_PTZBASE_SET_FOCUS_MAP_VALUE_INFO extends NetSDKLib.SdkStructure {
+
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ /**
+ * 聚焦映射值, 取值范围 [0, 28672]
+ */
+ public int nfocusMapValue;
+
+ public NET_IN_PTZBASE_SET_FOCUS_MAP_VALUE_INFO() {
+ this.dwSize = this.size();
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_PTZ_CURRENT_FOV_VALUE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_PTZ_CURRENT_FOV_VALUE.java
new file mode 100644
index 0000000..ba2b598
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_PTZ_CURRENT_FOV_VALUE.java
@@ -0,0 +1,23 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_QueryDevInfo NET_QUERY_PTZ_CURRENT_FOV_VALUE 类型接口输入参数
+ * @date 2022/09/22 15:28:44
+ */
+public class NET_IN_PTZ_CURRENT_FOV_VALUE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+
+ public NET_IN_PTZ_CURRENT_FOV_VALUE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_PTZ_STATUS_PROC.java b/src/main/java/com/netsdk/lib/structure/NET_IN_PTZ_STATUS_PROC.java
new file mode 100644
index 0000000..d20949f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_PTZ_STATUS_PROC.java
@@ -0,0 +1,35 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.fPTZStatusProcCallBack;
+
+/**
+ * @author 251823
+ * @description 订阅云台元数据接口输入参数
+ * @date 2021/02/26
+ */
+public class NET_IN_PTZ_STATUS_PROC extends NetSDKLib.SdkStructure{
+ /**
+ * dwSize;
+ */
+ public int dwSize;
+ /**
+ * 云台通道
+ */
+ public int nChannel;
+
+ /**
+ * 状态回调函数
+ */
+ public fPTZStatusProcCallBack cbPTZStatusProc;
+
+ /**
+ * 用户数据
+ */
+ public long dwUser;
+
+ public NET_IN_PTZ_STATUS_PROC(){
+ this.dwSize = this.size();
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_PUSH_ANALYSE_PICTURE_FILE_BYRULE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_PUSH_ANALYSE_PICTURE_FILE_BYRULE.java
new file mode 100644
index 0000000..213ec5c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_PUSH_ANALYSE_PICTURE_FILE_BYRULE.java
@@ -0,0 +1,42 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+* @author 291189
+* @description CLIENT_PushAnalysePictureFileByRule 接口输入参数
+* @date 2022/06/28 19:02:02
+*/
+public class NET_IN_PUSH_ANALYSE_PICTURE_FILE_BYRULE extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+任务ID
+*/
+public int nTaskID;
+/**
+推送图片信息,文件列表支持url路径和二进制数据两种方式,但是每次只能选择一种方式,即URL和Offset/Length应该是两者有且只有一个
+用户自定义空间 NET_PUSH_PICTURE_BYRULE_INFO
+*/
+public Pointer pstuPushPicByRuleInfos;
+/**
+ 推送图片数量,用户定义
+*/
+public int nPicNum;
+/**
+数据缓冲区长度, 单位:字节
+*/
+public int nBinBufLen;
+/**
+数据缓冲区, 由用户申请和释放,选择nOffset/nLength方式,需要传送图片数据
+*/
+public Pointer pBinBuf;
+
+public NET_IN_PUSH_ANALYSE_PICTURE_FILE_BYRULE(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_QUERY_COURSE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_QUERY_COURSE.java
new file mode 100644
index 0000000..4f83761
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_QUERY_COURSE.java
@@ -0,0 +1,32 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 查询课程 入参 {@link NetSDKLib#CLIENT_QueryCourse}
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/17 21:08
+ */
+public class NET_IN_QUERY_COURSE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 查询句柄号
+ */
+ public int nFindID;
+ /**
+ * 开始查询偏移
+ */
+ public int nOffset;
+ /**
+ * 需要查询的个数
+ */
+ public int nCount;
+
+ public NET_IN_QUERY_COURSE() {
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_QUERY_COURSEMEDIA_FILE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_QUERY_COURSEMEDIA_FILE.java
new file mode 100644
index 0000000..bb6b87b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_QUERY_COURSEMEDIA_FILE.java
@@ -0,0 +1,32 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 查询课程视频信息入参 {@link NetSDKLib#CLIENT_DoQueryCourseMediaFile}
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/28 16:40
+ */
+public class NET_IN_QUERY_COURSEMEDIA_FILE extends NetSDKLib.SdkStructure {
+ /**
+ * 该结构体大小
+ */
+ public int dwSize;
+ /**
+ * 查询ID号
+ */
+ public int nfindID;
+ /**
+ * 开始查询偏移
+ */
+ public int nOffset;
+ /**
+ * 需要查询的个数
+ */
+ public int nCount;
+
+ public NET_IN_QUERY_COURSEMEDIA_FILE() {
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_QUERY_COURSEMEDIA_FILECLOSE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_QUERY_COURSEMEDIA_FILECLOSE.java
new file mode 100644
index 0000000..eb9b0d4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_QUERY_COURSEMEDIA_FILECLOSE.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 关闭课程视频查询入参 {@link NetSDKLib#CLIENT_CloseQueryCourseMediaFile}
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/28 19:03
+ */
+public class NET_IN_QUERY_COURSEMEDIA_FILECLOSE extends NetSDKLib.SdkStructure {
+ /**
+ * dwSize
+ */
+ public int dwSize;
+ /**
+ * 查询ID号
+ */
+ public int nFindID;
+
+ public NET_IN_QUERY_COURSEMEDIA_FILECLOSE() {
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_QUERY_COURSEMEDIA_FILEOPEN.java b/src/main/java/com/netsdk/lib/structure/NET_IN_QUERY_COURSEMEDIA_FILEOPEN.java
new file mode 100644
index 0000000..392e3ce
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_QUERY_COURSEMEDIA_FILEOPEN.java
@@ -0,0 +1,45 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.EM_COURSE_LOCK_TYPE;
+import com.netsdk.lib.enumeration.EM_COURSE_RECORD_TYPE;
+
+import static com.netsdk.lib.NetSDKLib.NET_COMMON_STRING_128;
+
+/**
+ * 开始查询课程视频信息入参 {@link NetSDKLib#CLIENT_OpenQueryCourseMediaFile}
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/28 16:24
+ */
+public class NET_IN_QUERY_COURSEMEDIA_FILEOPEN extends NetSDKLib.SdkStructure {
+
+ /**
+ * 该结构体大小
+ */
+ public int dwSize;
+ /**
+ * 查询开始时间
+ */
+ public NET_TIME stuStartTime;
+ /**
+ * 查询结束时间
+ */
+ public NET_TIME stuEndTime;
+ /**
+ * 查询关键字
+ */
+ public byte[] szKeyWord = new byte[NET_COMMON_STRING_128];
+ /**
+ * 查询课程锁定类型 {@link EM_COURSE_LOCK_TYPE}
+ */
+ public int emCourseLockType;
+ /**
+ * 查询课程录像类型 {@link EM_COURSE_RECORD_TYPE}
+ */
+ public int emCourseRecordType;
+
+ public NET_IN_QUERY_COURSEMEDIA_FILEOPEN() {
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_QUERY_COURSE_CLOSE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_QUERY_COURSE_CLOSE.java
new file mode 100644
index 0000000..7602e3d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_QUERY_COURSE_CLOSE.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 结束查询课程 入参 {@link NetSDKLib#CLIENT_QueryCourseClose}
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/17 21:27
+ */
+public class NET_IN_QUERY_COURSE_CLOSE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 课程数量
+ */
+ public int nFindID;
+
+ public NET_IN_QUERY_COURSE_CLOSE() {
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_QUERY_COURSE_OPEN.java b/src/main/java/com/netsdk/lib/structure/NET_IN_QUERY_COURSE_OPEN.java
new file mode 100644
index 0000000..8c0020b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_QUERY_COURSE_OPEN.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 开始查询课程 入参 {@link NetSDKLib#CLIENT_QueryCourseOpen}
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/17 20:47
+ */
+public class NET_IN_QUERY_COURSE_OPEN extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 查询开始时间
+ */
+ public NET_TIME stuStartTime;
+ /**
+ * 查询结束时间
+ */
+ public NET_TIME stuEndTime;
+
+ public NET_IN_QUERY_COURSE_OPEN() {
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_ALARMPOINTINFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_ALARMPOINTINFO.java
new file mode 100644
index 0000000..3018cd3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_ALARMPOINTINFO.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.fRadarAlarmPointInfoCallBack;
+import com.sun.jna.Pointer;
+
+/**
+ * 订阅雷达的报警点信息入参(对应接口 CLIENT_AttachRadarAlarmPointInfo)
+ *
+ * @author : 119178
+ * @since : Created in 2021/2/03 13:56
+ */
+public class NET_IN_RADAR_ALARMPOINTINFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 雷达报警点信息回调
+ */
+ public fRadarAlarmPointInfoCallBack cbAlarmPointInfo;
+ /**
+ * 用户数据
+ */
+ public Pointer dwUser;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+
+ public NET_IN_RADAR_ALARMPOINTINFO() {
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_CALCULATEREALSIZE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_CALCULATEREALSIZE.java
new file mode 100644
index 0000000..1a0704f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_CALCULATEREALSIZE.java
@@ -0,0 +1,32 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 计算图片对应的地图实际长度入参(对应 EM_RADAR_OPERATE_TYPE_CALCULATEREALSIZE)
+ * @date 2022/08/04 10:13:32
+ */
+public class NET_IN_RADAR_CALCULATEREALSIZE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 图片中线段的像素坐标
+ */
+ public NET_RADAR_PIXELLINE stuPixelLine = new NET_RADAR_PIXELLINE();
+ /**
+ * 图片中线段代表的实际长度,单位米
+ */
+ public double dDistance;
+
+ public NET_IN_RADAR_CALCULATEREALSIZE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_GETCAPS.java b/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_GETCAPS.java
new file mode 100644
index 0000000..5a36853
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_GETCAPS.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 获取雷达能力入参(对应 EM_RADAR_OPERATE_TYPE_GETCAPS)
+ * @date 2022/08/04 10:13:31
+ */
+public class NET_IN_RADAR_GETCAPS extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 雷达ip
+ */
+ public byte[] szRadarIP = new byte[32];
+
+ public NET_IN_RADAR_GETCAPS() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_GETSTATUS.java b/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_GETSTATUS.java
new file mode 100644
index 0000000..5e3fb36
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_GETSTATUS.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 获取雷达状态入参(对应 EM_RADAR_OPERATE_TYPE_GETSTATUS)
+ * @date 2022/08/04 10:13:32
+ */
+public class NET_IN_RADAR_GETSTATUS extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+
+ public NET_IN_RADAR_GETSTATUS() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_GET_RFID_MODE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_GET_RFID_MODE.java
new file mode 100644
index 0000000..c92f22a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_GET_RFID_MODE.java
@@ -0,0 +1,21 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author : 260611
+ * @description : CLIENT_GetRadarRFIDMode接口入参
+ * @since : Created in 2022/02/11 10:22
+ */
+
+public class NET_IN_RADAR_GET_RFID_MODE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ public NET_IN_RADAR_GET_RFID_MODE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_MANUAL_TRACK.java b/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_MANUAL_TRACK.java
new file mode 100644
index 0000000..99aacd5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_MANUAL_TRACK.java
@@ -0,0 +1,36 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description CLIENT_RadarManualTrack接口入参
+ * @date 2021/10/21 20:03
+ */
+public class NET_IN_RADAR_MANUAL_TRACK extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /** 需要跟踪的球机 */
+ public byte[] szSDIP = new byte[32];
+ /** 需要跟踪目标的轨迹号 */
+ public int nTrackID;
+ /** 跟踪时间,单位为s */
+ public int nTime;
+ /** 跟踪动作, 0:停止手动跟踪, 1:开始手动跟踪 */
+ public int nAction;
+ /** 经纬度坐标,用整型传输,扩大1000000倍,小数点后6位有效,数组0表示经度,数组1表示纬度 */
+ public int[] arrCoordinate = new int[2];
+ /** 手动跟踪的原因, bit0表示超速 bit1表示是否AIS匹配 bit2表示是否禁行 bit3表示是否逆行 (bit位置1表示需要手动跟踪,全0表示普通跟踪命令) */
+ public int nAlarmType;
+ /** 航速:要跟踪目标的速度,单位km/h 扩大10000 倍下发(精度0.0001) */
+ public int nSpeed;
+ /** 航向:正北方向为0° 顺时针为正 0-360°,扩大100倍下发 */
+ public int nAzimuth;
+
+ public NET_IN_RADAR_MANUAL_TRACK() {
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_SETCALIBRATION.java b/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_SETCALIBRATION.java
new file mode 100644
index 0000000..413f9e4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_SETCALIBRATION.java
@@ -0,0 +1,32 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 雷球校准配置入参(对应 EM_RADAR_OPERATE_TYPE_SETCALIBRATION)
+ * @date 2022/08/04 10:13:32
+ */
+public class NET_IN_RADAR_SETCALIBRATION extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[4];
+ /**
+ * 图片中校准点的像素坐标
+ */
+ public NET_RADAR_PIXELPOINT stuPixelPoint = new NET_RADAR_PIXELPOINT();
+ /**
+ * 球机的安装高度,单位米
+ */
+ public double dInstallHeigt;
+
+ public NET_IN_RADAR_SETCALIBRATION() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_SET_RFID_MODE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_SET_RFID_MODE.java
new file mode 100644
index 0000000..dd1e342
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_SET_RFID_MODE.java
@@ -0,0 +1,25 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author : 260611
+ * @description : CLIENT_SetRadarRFIDMode接口入参
+ * @since : Created in 2022/02/11 10:22
+ */
+
+public class NET_IN_RADAR_SET_RFID_MODE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * RFID规则模式,0:设备单独工作时使用,全部为有效卡;1:平台接入时使用,区分RFID卡片有效性
+ */
+ public int nMode;
+
+ public NET_IN_RADAR_SET_RFID_MODE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_STARTUPGRADE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_STARTUPGRADE.java
new file mode 100644
index 0000000..6da2c09
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_RADAR_STARTUPGRADE.java
@@ -0,0 +1,20 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 雷达开始升级通知入参(对应 EM_RADAR_OPERATE_TYPE_STARTUPGRADE)
+ * @date 2022/08/04 10:13:31
+ */
+public class NET_IN_RADAR_STARTUPGRADE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ public NET_IN_RADAR_STARTUPGRADE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_REMOTE_SLEEP.java b/src/main/java/com/netsdk/lib/structure/NET_IN_REMOTE_SLEEP.java
new file mode 100644
index 0000000..a4bb38f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_REMOTE_SLEEP.java
@@ -0,0 +1,16 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description CLIENT_RemoteSleep 输入接口参数
+ * @date 2022/3/24 13:59
+ */
+public class NET_IN_REMOTE_SLEEP extends NetSDKLib.SdkStructure{
+ public int dwSize; // 结构体大小
+ public NET_IN_REMOTE_SLEEP(){
+ this.dwSize=this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SCADA_GET_ATTRIBUTE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SCADA_GET_ATTRIBUTE_INFO.java
new file mode 100644
index 0000000..c2144a8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SCADA_GET_ATTRIBUTE_INFO.java
@@ -0,0 +1,19 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+public class NET_IN_SCADA_GET_ATTRIBUTE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ /**
+ * 获取条件
+ */
+ public NET_GET_CONDITION_INFO stuCondition;
+
+ public NET_IN_SCADA_GET_ATTRIBUTE_INFO(){
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SCENICSPOT_GETCAPS_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SCENICSPOT_GETCAPS_INFO.java
new file mode 100644
index 0000000..7d305f7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SCENICSPOT_GETCAPS_INFO.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 获取景物点支持的能力
+ * 出参(CLIENT_ScenicSpotGetCaps 输入参数)
+ * 接口 {@link NetSDKLib#CLIENT_ScenicSpotGetCaps}
+ *
+ * @author : 47040
+ * @since : Created in 2020/10/26 16:29
+ */
+public class NET_IN_SCENICSPOT_GETCAPS_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+
+ public NET_IN_SCENICSPOT_GETCAPS_INFO() {
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SCENICSPOT_GETPOINTINFOS_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SCENICSPOT_GETPOINTINFOS_INFO.java
new file mode 100644
index 0000000..8718241
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SCENICSPOT_GETPOINTINFOS_INFO.java
@@ -0,0 +1,35 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 分页获取 信息标注信息列表 入参
+ * 出参 {@link NET_OUT_SCENICSPOT_GETPOINTINFOS_INFO}
+ * 接口 {@link NetSDKLib#CLIENT_ScenicSpotGetPointInfos}
+ *
+ * @author : 47040
+ * @since : Created in 2020/10/26 15:41
+ */
+public class NET_IN_SCENICSPOT_GETPOINTINFOS_INFO extends NetSDKLib.SdkStructure {
+
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 从第几位开始获取(最大 255)
+ */
+ public int nOffset;
+ /**
+ * 获取几个信息点结构(从 0 开始)
+ */
+ public int nLimit;
+
+ public NET_IN_SCENICSPOT_GETPOINTINFOS_INFO() {
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SCENICSPOT_SETPOINTINFO_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SCENICSPOT_SETPOINTINFO_INFO.java
new file mode 100644
index 0000000..50e0b21
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SCENICSPOT_SETPOINTINFO_INFO.java
@@ -0,0 +1,84 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.NET_EM_SHAPE_TYPE;
+
+import static com.netsdk.lib.NetSDKLib.MAX_COMMON_STRING_64;
+import static com.netsdk.lib.NetSDKLib.NET_MAX_POLYGON_NUM;
+
+/**
+ * 设置景物点,原编号的景物点将会被覆盖 入参 出参 {@link NET_OUT_SCENICSPOT_SETPOINTINFO_INFO} 接口
+ * {@link NetSDKLib#CLIENT_ScenicSpotSetPointInfo}
+ *
+ * @author : 47040
+ * @since : Created in 2020/10/26 16:14
+ */
+public class NET_IN_SCENICSPOT_SETPOINTINFO_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 信息点编号
+ */
+ public int nIndex;
+ /**
+ * 信息点是否生效
+ */
+ public byte bEnable;
+ /**
+ * 该信息点是否有子标题
+ */
+ public byte bTitleAttribute;
+ /**
+ * 云台方向与放大倍数 (绝对坐标)
+ */
+ public POSTION stuPosition;
+ /**
+ * 景物点位置
+ */
+ public POINTCOORDINATE stuPoint;
+ /**
+ * 一级标题名称
+ */
+ public byte[] szTitleName = new byte[MAX_COMMON_STRING_64];
+ /**
+ * 一级标题名称类型
+ */
+ public byte byTitleType;
+ /**
+ * 预留字节
+ */
+ public byte[] byReserved = new byte[3];
+ /**
+ * 景物形状 {@link NET_EM_SHAPE_TYPE}
+ */
+ public int emShapeType;
+ /**
+ * 景物的轮廓,每个点依次表示轮廓顶点坐标
+ */
+ public NetSDKLib.DH_POINT[] stuPolygon = new NetSDKLib.DH_POINT[NET_MAX_POLYGON_NUM];
+ /**
+ * 景物轮廓点的个数,最大不超过 {@link NetSDKLib#NET_MAX_POLYGON_NUM}
+ */
+ public int nPolygonPointNum;
+ /**
+ * 通道个数
+ */
+ public int nChannelNum;
+ /**
+ * 支持标签同步标签的通道
+ */
+ public short[] nSyncToChannels = new short[16];
+
+ public NET_IN_SCENICSPOT_SETPOINTINFO_INFO() {
+ dwSize = this.size();
+ for (int i = 0; i < stuPolygon.length; i++) {
+ stuPolygon[i] = new NetSDKLib.DH_POINT();
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SCENICSPOT_TURNTOPOINT_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SCENICSPOT_TURNTOPOINT_INFO.java
new file mode 100644
index 0000000..2e8e92f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SCENICSPOT_TURNTOPOINT_INFO.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 以景物标注点为中心,进行三维定位的输 入参
+ * 出参 {@link NET_OUT_SCENICSPOT_TURNTOPOINT_INFO}
+ * 接口 {@link NetSDKLib#CLIENT_ScenicSpotTurnToPoint}
+ *
+ * @author : 47040
+ * @since : Created in 2020/10/26 17:28
+ */
+public class NET_IN_SCENICSPOT_TURNTOPOINT_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 景物点编号
+ */
+ public int nIndex;
+
+ public NET_IN_SCENICSPOT_TURNTOPOINT_INFO() {
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SECURITYGATE_ATTACH_ALARM_STATISTICS.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SECURITYGATE_ATTACH_ALARM_STATISTICS.java
new file mode 100644
index 0000000..5200891
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SECURITYGATE_ATTACH_ALARM_STATISTICS.java
@@ -0,0 +1,25 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.callback.securityCheck.fSecurityGateAttachAlarmStatistics;
+import com.sun.jna.Pointer;
+
+/**
+ * @author : 291189
+ * @since : Created in 2021/6/29 10:21
+ */
+public class NET_IN_SECURITYGATE_ATTACH_ALARM_STATISTICS extends NetSDKLib.SdkStructure{
+
+ public int dwSize; // 赋值为结构体大小
+
+ public byte[] szUUID=new byte[36]; // UUID
+
+ public fSecurityGateAttachAlarmStatistics cbNotify; // 回调函数
+
+ public Pointer dwUser; // 用户信息
+
+ public NET_IN_SECURITYGATE_ATTACH_ALARM_STATISTICS() {
+ this.dwSize = this.size();
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_2DCODE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_2DCODE.java
new file mode 100644
index 0000000..c7388d4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_2DCODE.java
@@ -0,0 +1,31 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.constant.SDKStructureFieldLenth;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description {@link NetSDKLib#CLIENT_Set2DCode(NetSDKLib.LLong, Pointer, Pointer, int)}的入参
+ * @date 2020/9/10
+ */
+public class NET_IN_SET_2DCODE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 二维码类型,
+ * 对应枚举类型{@link com.netsdk.lib.enumeration.NET_EM_2DCODE_TYPE}
+ */
+ public int em2DCodeType;
+ /**
+ * 二维码信息
+ */
+ public byte[] sz2DCode = new byte[SDKStructureFieldLenth.SDK_COMMON_STRING_512];
+
+ public NET_IN_SET_2DCODE() {
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_ALARMMODE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_ALARMMODE.java
new file mode 100644
index 0000000..c6299ad
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_ALARMMODE.java
@@ -0,0 +1,48 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 设置布防模式
+ * 输入参数。此时CLIENT_SetAlarmRegionInfo的emType参数为NET_EM_SET_ALARMREGION_INFO_ARMMODE
+ * @date 2023/03/15 16:05:04
+ */
+public class NET_IN_SET_ALARMMODE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 布撤防类型 {@link com.netsdk.lib.enumeration.EM_ARM_TYPE}
+ */
+ public int emArmType;
+ /**
+ * 密码
+ */
+ public byte[] szPwd = new byte[256];
+ /**
+ * 区域的个数
+ */
+ public int nAreaNum;
+ /**
+ * 区域号
+ */
+ public int[] arrAreas = new int[8];
+ /**
+ * 执行布撤防时的附加信息
+ */
+ public NET_DETAIL_INFO stuDetail = new NET_DETAIL_INFO();
+ /**
+ * 区域的扩展个数
+ */
+ public int nAreaNumEx;
+ /**
+ * 区域号扩展 个数超过8个使用这个字段
+ */
+ public int[] arrAreasEx = new int[64];
+
+ public NET_IN_SET_ALARMMODE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_BACKUP_MODE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_BACKUP_MODE.java
new file mode 100644
index 0000000..5b3b0ea
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_BACKUP_MODE.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_SetRtscBackupMode 接口输入参数
+ * @date 2021/09/28
+ */
+public class NET_IN_SET_BACKUP_MODE extends NetSDKLib.SdkStructure{
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ /**
+ * 红绿灯/可变车道方案:150-152代表红绿灯 153-155代表可变车道方案。参考枚举{ @link EM_CTRL_SCHEME }
+ */
+ public int emCtrlScheme;
+
+ public NET_IN_SET_BACKUP_MODE(){
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_BLIND_REAL_CHANNEL.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_BLIND_REAL_CHANNEL.java
new file mode 100644
index 0000000..ac7dff6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_BLIND_REAL_CHANNEL.java
@@ -0,0 +1,37 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+import static com.netsdk.lib.NetSDKLib.MAX_PREVIEW_CHANNEL_NUM;
+
+/**
+ * 设置逻辑通道号和真实通道号的绑定关系入参 ,对应接口 {@link NetSDKLib#CLIENT_SetBlindRealChannel}
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/28 15:08
+ */
+public class NET_IN_SET_BLIND_REAL_CHANNEL extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道数量
+ */
+ public int nChannelNum;
+ /**
+ * 通道号
+ */
+ public int[] nChannel = new int[MAX_PREVIEW_CHANNEL_NUM];
+ /**
+ * 逻辑通道信息,下标为将要设置的真实通道数
+ */
+ public NET_LOGIC_CHANNEL_INFO[] stuChannelInfo = new NET_LOGIC_CHANNEL_INFO[MAX_PREVIEW_CHANNEL_NUM];
+
+ public NET_IN_SET_BLIND_REAL_CHANNEL() {
+ dwSize = this.size();
+ for (int i = 0; i < stuChannelInfo.length; i++) {
+ stuChannelInfo[i] = new NET_LOGIC_CHANNEL_INFO();
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_BYPASSMODE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_BYPASSMODE.java
new file mode 100644
index 0000000..73d2c4a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_BYPASSMODE.java
@@ -0,0 +1,44 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 设置旁路状态
+ * 输入参数。此时CLIENT_SetAlarmRegionInfo的emType参数为NET_EM_SET_ALARMREGION_INFO_BYPASSMODE
+ * @date 2023/03/15 16:33:42
+ */
+public class NET_IN_SET_BYPASSMODE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 密码
+ */
+ public byte[] szPwd = new byte[256];
+ /**
+ * 旁路模式 {@link com.netsdk.lib.enumeration.EM_BYPASSMODE_TYPE}
+ */
+ public int emType;
+ /**
+ * 防区个数
+ */
+ public int nZoneNum;
+ /**
+ * 防区号
+ */
+ public int[] arrZones = new int[72];
+ /**
+ * 防区个数扩展
+ */
+ public int nZoneNumEx;
+ /**
+ * 防区号扩展,超过72时使用此字段
+ */
+ public int[] arrZonesEx = new int[256];
+
+ public NET_IN_SET_BYPASSMODE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_CAMERA_CFG.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_CAMERA_CFG.java
new file mode 100644
index 0000000..a067f03
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_CAMERA_CFG.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @version 1.0
+ * @description {@link NetSDKLib#CLIENT_SetCameraCfg}的入参
+ * @date 2020/11/06
+ */
+public class NET_IN_SET_CAMERA_CFG extends NetSDKLib.SdkStructure{
+
+ // 结构体大小
+ public int dwSize;
+
+ // 相机编号
+ public int nCameraNo;
+
+ // 相机的信息
+ public NET_CAMERA_CFG_INFO stuCameraInfo;
+
+ public NET_IN_SET_CAMERA_CFG() {
+ this.dwSize = this.size();
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_CHANNEL_CFG.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_CHANNEL_CFG.java
new file mode 100644
index 0000000..a5824f5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_CHANNEL_CFG.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @version 1.0
+ * @description {@link NetSDKLib#CLIENT_SetChannelCfg}的入参
+ * @date 2020/11/06
+ */
+public class NET_IN_SET_CHANNEL_CFG extends NetSDKLib.SdkStructure {
+
+ /** 结构体大小 */
+ public int dwSize;
+ /** 检测通道 */
+ public int nChannelNo;
+
+ /** 通道信息 */
+ public NET_CHANNEL_CFG_INFO stuChannelInfo;
+
+ public NET_IN_SET_CHANNEL_CFG() {
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_CONSUME_RESULT.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_CONSUME_RESULT.java
new file mode 100644
index 0000000..ec0cd18
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_CONSUME_RESULT.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_SetConsumeResult 输入结构体
+* @date 2022/03/07 17:36:06
+*/
+public class NET_IN_SET_CONSUME_RESULT extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+通道号
+*/
+public int nChannelID;
+/**
+用户ID
+*/
+public byte[] szUserID=new byte[32];
+/**
+消费后余额,如果消费失败则是消费前余额,单位分。
+*/
+public int nRemainAmount;
+/**
+消费成功与否
+*/
+public int bConsumeResult;
+/**
+错误码
+*/
+public int nErrorCode;
+/**
+平台固定消费金额,单位(分)
+*/
+public int nConsumptionAmount;
+/**
+是否是超额消费
+*/
+public int bExcessConsumption;
+/**
+剩余消费次数,-1表示不限制消费次数,0以上(包括0)表示剩余消费次数
+*/
+public int nRemainingTimes;
+/**
+消费流水号
+*/
+public byte[] szTransactionSerialNumber=new byte[128];
+
+public NET_IN_SET_CONSUME_RESULT(){
+this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_COURSE_RECORD_MODE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_COURSE_RECORD_MODE.java
new file mode 100644
index 0000000..b0f8a76
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_COURSE_RECORD_MODE.java
@@ -0,0 +1,29 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.NET_EM_RECORD_MODE;
+
+/**
+ * 设置录像模式入参,对应接口{link NetSDKLib#CLIENT_SetCourseRecordMode}
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/28 15:38
+ */
+public class NET_IN_SET_COURSE_RECORD_MODE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 录像模式 {@link NET_EM_RECORD_MODE}
+ */
+ public int emRecordMode;
+ /**
+ * 教室id号
+ */
+ public int nClassRoomID;
+
+ public NET_IN_SET_COURSE_RECORD_MODE() {
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_COURSE_RECORD_STATE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_COURSE_RECORD_STATE.java
new file mode 100644
index 0000000..c7de420
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_COURSE_RECORD_STATE.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 开启/关闭指定通道录像入参 {@link NetSDKLib#CLIENT_SetCourseRecordState}
+ *
+ * @author : 47040
+ * @since : Created in 2020/9/28 16:13
+ */
+public class NET_IN_SET_COURSE_RECORD_STATE extends NetSDKLib.SdkStructure {
+ /**
+ * 该结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 0:开启, 1:关闭
+ */
+ public int nAction;
+
+ public NET_IN_SET_COURSE_RECORD_STATE() {
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_DYNAMIC_LOCK_COMMUNICATIONKEY_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_DYNAMIC_LOCK_COMMUNICATIONKEY_INFO.java
new file mode 100644
index 0000000..6a2c9a2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_DYNAMIC_LOCK_COMMUNICATIONKEY_INFO.java
@@ -0,0 +1,40 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_SetDynamicLockCommunicationKey 接口入参
+* @date 2022/06/23 10:15:55
+*/
+public class NET_IN_SET_DYNAMIC_LOCK_COMMUNICATIONKEY_INFO extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+密码锁ID
+*/
+public byte[] szID=new byte[32];
+/**
+通讯密钥
+*/
+public byte[] szCommuKey=new byte[512];
+/**
+通讯密钥校验数据
+*/
+public byte[] szKeyVerify=new byte[512];
+/**
+原通讯密钥校验数据
+*/
+public byte[] szOldKeyVerify=new byte[512];
+/**
+加密主机私钥签名
+*/
+public byte[] szPrivateSigniture=new byte[512];
+
+public NET_IN_SET_DYNAMIC_LOCK_COMMUNICATIONKEY_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_DYNAMIC_LOCK_OPENKEY_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_DYNAMIC_LOCK_OPENKEY_INFO.java
new file mode 100644
index 0000000..7c645b1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_DYNAMIC_LOCK_OPENKEY_INFO.java
@@ -0,0 +1,36 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_SetDynamicLockOpenKey 接口入参
+* @date 2022/06/23 10:20:45
+*/
+public class NET_IN_SET_DYNAMIC_LOCK_OPENKEY_INFO extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+密码锁ID
+*/
+public byte[] szID=new byte[32];
+/**
+开锁密钥
+*/
+public byte[] szOpenKey=new byte[512];
+/**
+开锁密钥校验
+*/
+public byte[] szKeyVerify=new byte[512];
+/**
+开锁密钥版本
+*/
+public byte[] szKeyVersion=new byte[512];
+
+public NET_IN_SET_DYNAMIC_LOCK_OPENKEY_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_DYNAMIC_LOCK_OPEN_CODE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_DYNAMIC_LOCK_OPEN_CODE_INFO.java
new file mode 100644
index 0000000..6987f25
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_DYNAMIC_LOCK_OPEN_CODE_INFO.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_SetDynamicLockOpenCode 接口入参
+* @date 2022/06/23 10:28:36
+*/
+public class NET_IN_SET_DYNAMIC_LOCK_OPEN_CODE_INFO extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+密码锁ID
+*/
+public byte[] szID=new byte[32];
+/**
+开锁密钥
+*/
+public byte[] szOpenCode=new byte[512];
+
+public NET_IN_SET_DYNAMIC_LOCK_OPEN_CODE_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_DYNAMIC_LOCK_TEMP_USERID_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_DYNAMIC_LOCK_TEMP_USERID_INFO.java
new file mode 100644
index 0000000..0f7d1f2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_DYNAMIC_LOCK_TEMP_USERID_INFO.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_SetDynamicLockTempUserID 接口入参
+* @date 2022/06/23 10:24:57
+*/
+public class NET_IN_SET_DYNAMIC_LOCK_TEMP_USERID_INFO extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+密码锁ID
+*/
+public byte[] szID=new byte[32];
+/**
+ 临时身份码
+ */
+public byte[] szTmpUserID=new byte[512];
+
+public NET_IN_SET_DYNAMIC_LOCK_TEMP_USERID_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_EXAM_RECORDING_PLANS.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_EXAM_RECORDING_PLANS.java
new file mode 100644
index 0000000..1c2b313
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_EXAM_RECORDING_PLANS.java
@@ -0,0 +1,29 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+* @author 291189
+* @description CLIENT_SetExamRecordingPlans 接口入参
+* @date 2022/05/16 20:40:47
+*/
+public class NET_IN_SET_EXAM_RECORDING_PLANS extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+考试计划个数
+*/
+public int nPlansNum;
+/**
+考试计划, 由用户申请和释放, 最大为1024个 {@link com.netsdk.lib.structure.NET_EXAM_RECORDING_PLAN_INFO}
+*/
+public Pointer pstuPlans;
+
+public NET_IN_SET_EXAM_RECORDING_PLANS(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_GLOBAL_PARAMETER.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_GLOBAL_PARAMETER.java
new file mode 100644
index 0000000..08ac858
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_GLOBAL_PARAMETER.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_SetRtscGlobalParam 接口输入参数
+ * @date 2021/09/28
+ */
+public class NET_IN_SET_GLOBAL_PARAMETER extends NetSDKLib.SdkStructure{
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ /**
+ * 全局信息
+ */
+ public GLOBAL_INFO stuGlobalInfo;
+
+ public NET_IN_SET_GLOBAL_PARAMETER(){
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_IVSEVENT_PARSE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_IVSEVENT_PARSE_INFO.java
new file mode 100644
index 0000000..c93b626
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_IVSEVENT_PARSE_INFO.java
@@ -0,0 +1,40 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+/**
+ * @author 251823
+ * @description CLIENT_SetRtscGlobalParam 接口输入参数
+ * @date 2022/05/23
+ */
+public class NET_IN_SET_IVSEVENT_PARSE_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ /**
+ * 智能分析事件类型,参考dhnetsdk.h中定义的智能分析事件宏.
+ * 当前支持情况如下:
+ * nCallBackType为0时(即智能事件解析类型):
+ * EVENT_IVS_FACERECOGNITION:dwStructType为 1 时,对应结构体 DEV_EVENT_FACERECOGNITION_INFO_V1
+ *
+ * nCallBackType为1时(即报警事件解析类型):
+ * DH_ALARM_RTSC_RUNING: dwStructType为 1 时,对应结构体 ALARM_RTSC_RUNNING_INFO_V1
+ *
+ */
+ public int dwIVSEvent;
+
+ /**
+ * 指定解析的类型,具体含义参考 dwIVSEvent 字段的说明
+ */
+ public int dwStructType;
+
+ /**
+ * 0 - 智能事件上报
+ * 1 - 普通报警事件上报
+ */
+ public int nCallBackType;
+ public NET_IN_SET_IVSEVENT_PARSE_INFO() {
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_OUTPUT_STATE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_OUTPUT_STATE.java
new file mode 100644
index 0000000..785b567
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_OUTPUT_STATE.java
@@ -0,0 +1,36 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 设置输出状态
+ * 输入参数。此时CLIENT_SetAlarmRegionInfo的emType参数为NET_EM_SET_ALARMREGION_INFO_OUTPUTSTATE
+ * @date 2023/03/15 16:46:55
+ */
+public class NET_IN_SET_OUTPUT_STATE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 输出类型 {@link com.netsdk.lib.enumeration.EM_OUTPUT_TYPE}
+ */
+ public int emType;
+ /**
+ * emType= EM_OUTPUT_TYPE_SIREN时表示警号号 emType= EM_OUTPUT_TYPE_ALARMOUT时表示通道号
+ */
+ public int nChannel;
+ /**
+ * null
+ */
+ public byte action;
+ /**
+ * 字节对齐
+ */
+ public byte[] byReserved = new byte[3];
+
+ public NET_IN_SET_OUTPUT_STATE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_PARKINGRULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_PARKINGRULE_INFO.java
new file mode 100644
index 0000000..a4230e2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_PARKINGRULE_INFO.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @version 1.0
+ * @description 设置停车规则接口,CLIENT_SetParkingRule 入参
+ * @date 2021/05/28
+ */
+public class NET_IN_SET_PARKINGRULE_INFO extends NetSDKLib.SdkStructure {
+
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ /**
+ * 停车时长阈值,单位秒
+ */
+ public int nParkingTimeThreshold;
+
+ public NET_IN_SET_PARKINGRULE_INFO() {
+ this.dwSize = this.size();
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_PARKINGSPACE_STATE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_PARKINGSPACE_STATE_INFO.java
new file mode 100644
index 0000000..739bf8f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_PARKINGSPACE_STATE_INFO.java
@@ -0,0 +1,43 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.EM_PARKINGSPACE_STATE;
+
+/**
+ * 设置停车车位状态 入参
+ * 接口 {@link NetSDKLib#CLIENT_SetParkingSpaceState}
+ * 出参 {@link NET_OUT_SET_PARKINGSPACE_STATE_INFO}
+ *
+ * @author 47040
+ * @since Created in 2020/11/18 13:32
+ */
+public class NET_IN_SET_PARKINGSPACE_STATE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 车牌号码
+ */
+ public byte[] szPlateNumber = new byte[64];
+ /**
+ * 车位号
+ */
+ public byte[] szParkingNo = new byte[32];
+ /**
+ * 车位状态 {@link EM_PARKINGSPACE_STATE}
+ */
+ public int emState;
+ /**
+ * 是否需要图片 0 不需要 1 需要
+ */
+ public int bUnNeedPic;
+
+ public NET_IN_SET_PARKINGSPACE_STATE_INFO() {
+ dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_PARK_CONTROL_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_PARK_CONTROL_INFO.java
new file mode 100644
index 0000000..e23f8e8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_PARK_CONTROL_INFO.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+
+public class NET_IN_SET_PARK_CONTROL_INFO extends SdkStructure{
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 屏幕信息个数
+ */
+ public int nScreenShowInfoNum;
+ /**
+ * 屏幕信息
+ */
+ public NET_SCREEN_SHOW_INFO[] stuScreenShowInfo=(NET_SCREEN_SHOW_INFO[]) new NET_SCREEN_SHOW_INFO().toArray(16);
+ /**
+ * 字节补齐
+ */
+ public byte[] byReserved=new byte[4];
+ /**
+ * 播报信息个数
+ */
+ public int nBroadcastInfoNum;
+ /**
+ * 播报信息
+ */
+ public NET_BROADCAST_INFO[] stuBroadcastInfo =(NET_BROADCAST_INFO[]) new NET_BROADCAST_INFO().toArray(16);
+
+ public NET_IN_SET_PARK_CONTROL_INFO() {
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_POLLING_CONFIG.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_POLLING_CONFIG.java
new file mode 100644
index 0000000..731f8c1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_POLLING_CONFIG.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @description 平台下发轮询配置入参
+ * @date 2022/07/04 10:56:48
+ */
+public class NET_IN_SET_POLLING_CONFIG extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 平台下发轮询配置个数
+ */
+ public int nConfigCnt;
+ /**
+ * 平台下发轮询配置信息
+ */
+ public NET_SET_POLLING_CONFIG_INFO[] stuConfigInfos = new NET_SET_POLLING_CONFIG_INFO[256];
+
+ public NET_IN_SET_POLLING_CONFIG() {
+ for (int i = 0; i < stuConfigInfos.length; i++) {
+ stuConfigInfos[i] = new NET_SET_POLLING_CONFIG_INFO();
+ }
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_PRIVACY_MASKING.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_PRIVACY_MASKING.java
new file mode 100644
index 0000000..0d0ceb1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_PRIVACY_MASKING.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_SetPrivacyMasking 输入参数
+ * @date 2022/07/21 17:11:44
+ */
+public class NET_IN_SET_PRIVACY_MASKING extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 隐私遮挡块信息
+ */
+ public NET_PRIVACY_MASKING_INFO stuPrivacyMaskingInfo = new NET_PRIVACY_MASKING_INFO();
+
+ public NET_IN_SET_PRIVACY_MASKING() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_PRIVACY_MASKING_ENABLE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_PRIVACY_MASKING_ENABLE.java
new file mode 100644
index 0000000..fce1b70
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_PRIVACY_MASKING_ENABLE.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_SetPrivacyMaskingEnable 输入参数
+ * @date 2022/07/21 17:13:49
+ */
+public class NET_IN_SET_PRIVACY_MASKING_ENABLE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * true 使能所有隐私遮挡块 false 关闭所有隐私遮挡块
+ */
+ public int bEnable;
+
+ public NET_IN_SET_PRIVACY_MASKING_ENABLE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_PTZ_WASH_POSISTION_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_PTZ_WASH_POSISTION_INFO.java
new file mode 100644
index 0000000..eeb31b0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_PTZ_WASH_POSISTION_INFO.java
@@ -0,0 +1,33 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author : 260611
+ * @description : 标定球机和蓄水池污点位置, 入参
+ * @since : Created in 2021/11/29 10:47
+ */
+
+public class NET_IN_SET_PTZ_WASH_POSISTION_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 0 - 标定喷水枪位置, 1 - 标定污点位置
+ */
+ public int nIndex;
+ /**
+ * 球机到蓄水池底的高度
+ */
+ public float fHeight;
+ /**
+ * 通道ID
+ */
+ public int nChannelID;
+
+ public NET_IN_SET_PTZ_WASH_POSISTION_INFO() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_RUNNING_MODE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_RUNNING_MODE.java
new file mode 100644
index 0000000..fddf33e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_RUNNING_MODE.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_SetRtscRunningMode 接口输入参数
+ * @date 2021/09/28
+ */
+public class NET_IN_SET_RUNNING_MODE extends NetSDKLib.SdkStructure{
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ /**
+ * 平台下发运行模式:
+ * 0x01 //定时模式
+ * 0xfb //关灯模式
+ * 0xfc //全红模式
+ * 0xfd //区域自适应模式
+ * 0xfe //感应模式
+ * 0xff //黄闪模式
+ * 0xf6 //实时控制模式
+ * 0xf2 //单点自适应模式
+ * 0xf8 //红闪模式
+ * 0xf9 //绿闪模式
+ */
+ public int nMode;
+
+ public NET_IN_SET_RUNNING_MODE(){
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_TRANSMITTUNNEL_PARAM.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_TRANSMITTUNNEL_PARAM.java
new file mode 100644
index 0000000..433c519
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_TRANSMITTUNNEL_PARAM.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+CLIENT_SetTransmitTunnelParam 接口输入参数
+*/
+public class NET_IN_SET_TRANSMITTUNNEL_PARAM extends NetSDKLib.SdkStructure {
+/**
+/< 结构体大小
+*/
+public int dwSize;
+/**
+*字节对齐
+*/
+public byte[] szReserved=new byte[4];
+/**
+/< 本地服务IP
+*/
+public byte[] szLoaclIP=new byte[64];
+/**
+/< 向上侦听端口的最小值和最大值
+*/
+public int[] nPort=new int[2];
+
+public NET_IN_SET_TRANSMITTUNNEL_PARAM(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SET_XRAY_MULTILEVEL_DETECT_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_XRAY_MULTILEVEL_DETECT_INFO.java
new file mode 100644
index 0000000..1a401ff
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SET_XRAY_MULTILEVEL_DETECT_INFO.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 接口 CLIENT_SetXRayMultiLevelDetectCFG 的输入参数
+* @date 2022/12/01 17:25:15
+*/
+public class NET_IN_SET_XRAY_MULTILEVEL_DETECT_INFO extends NetSDKLib.SdkStructure {
+/**
+此结构体大小,必须赋值
+*/
+public int dwSize;
+/**
+安全等级信息
+*/
+public NET_XRAY_MULTILEVEL_DETECT_CFG_INFO stuInfo=new NET_XRAY_MULTILEVEL_DETECT_CFG_INFO();
+
+public NET_IN_SET_XRAY_MULTILEVEL_DETECT_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SMOKE_REMOTE_REBOOT_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SMOKE_REMOTE_REBOOT_INFO.java
new file mode 100644
index 0000000..084c584
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SMOKE_REMOTE_REBOOT_INFO.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description CLIENT_SmokeRemoteReboot 入参
+ * @date 2022/07/26 10:52:50
+ */
+public class NET_IN_SMOKE_REMOTE_REBOOT_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+
+ public NET_IN_SMOKE_REMOTE_REBOOT_INFO() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SNAP_BY_EVENT.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SNAP_BY_EVENT.java
new file mode 100644
index 0000000..96410ce
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SNAP_BY_EVENT.java
@@ -0,0 +1,40 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.EM_EVENT_IVS;
+import com.netsdk.lib.enumeration.EM_EVENT_IVS_TYPE;
+
+/**
+ * 按照事件类型抓图 入参
+ * 接口 {@link NetSDKLib#CLIENT_SnapPictureByEvent}
+ * 出参 {@link NET_OUT_SNAP_BY_EVENT}
+ *
+ * @author 47040
+ * @since Created in 2020/11/18 17:21
+ */
+public class NET_IN_SNAP_BY_EVENT extends NetSDKLib.SdkStructure {
+ /**
+ * 本结构体大小, 初始化时必须填写
+ */
+ public int dwSize;
+ /**
+ * 视频通道号, 从 0开始
+ */
+ public int nChannel;
+ /**
+ * 参考 CLIENT_RealLoadPicEx 的事件类型
+ * {@link NetSDKLib#EVENT_IVS_ALL ...}
+ * {@link EM_EVENT_IVS}
+ * {@link EM_EVENT_IVS_TYPE}
+ */
+ public int dwEventID;
+
+ /**
+ * 抓图序列号,用于和回调事件作匹配
+ */
+ public byte[] szSerialNo = new byte[128];
+
+ public NET_IN_SNAP_BY_EVENT() {
+ dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SPLIT_GET_OSD_EX.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SPLIT_GET_OSD_EX.java
new file mode 100644
index 0000000..2a11e9f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SPLIT_GET_OSD_EX.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description CLIENT_GetSplitOSDEx 接口输入参数(获取解码窗口输出OSD信息)
+ * @date 2022/06/22 09:56:20
+ */
+public class NET_IN_SPLIT_GET_OSD_EX extends NetSDKLib.SdkStructure {
+
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 窗口号
+ */
+ public int nWindow;
+
+ public NET_IN_SPLIT_GET_OSD_EX() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SPLIT_SET_HIGHLIGHT.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SPLIT_SET_HIGHLIGHT.java
new file mode 100644
index 0000000..edae20b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SPLIT_SET_HIGHLIGHT.java
@@ -0,0 +1,42 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 设置源边框高亮使能开关输入参数
+ * @date 2022/06/22 09:56:19
+ */
+public class NET_IN_SPLIT_SET_HIGHLIGHT extends NetSDKLib.SdkStructure {
+
+ public int dwSize;
+ /**
+ * 视频输出通道
+ */
+ public int nChannel;
+ /**
+ * 窗口号
+ */
+ public int nWindow;
+ /**
+ * 边框高亮使能,TRUE-表示高亮
+ */
+ public int bHighLightEn;
+ /**
+ * 边框颜色
+ */
+ public NET_COLOR_RGBA stuColor = new NET_COLOR_RGBA();
+ /**
+ * 边框闪烁次数
+ */
+ public int nBlinkTimes;
+ /**
+ * 闪烁间隔时间,单位ms
+ */
+ public int nBlinkInterval;
+
+ public NET_IN_SPLIT_SET_HIGHLIGHT() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_SPLIT_SET_OSD_EX.java b/src/main/java/com/netsdk/lib/structure/NET_IN_SPLIT_SET_OSD_EX.java
new file mode 100644
index 0000000..df826d2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_SPLIT_SET_OSD_EX.java
@@ -0,0 +1,37 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description CLIENT_SetSplitOSDEx接口输入参数(设置解码窗口输出OSD信息)
+ * @date 2022/06/22 20:38:57
+ */
+public class NET_IN_SPLIT_SET_OSD_EX extends NetSDKLib.SdkStructure {
+
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 窗口号
+ */
+ public int nWindow;
+ /**
+ * OSD数量
+ */
+ public int nOSDNum;
+ /**
+ * OSD信息
+ */
+ public NET_SPLIT_OSD[] stuOSD = new NET_SPLIT_OSD[256];
+
+ public NET_IN_SPLIT_SET_OSD_EX() {
+ for (int i = 0; i < stuOSD.length; i++) {
+ stuOSD[i] = new NET_SPLIT_OSD();
+ }
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_STARTMULTIFIND_FACERECONGNITION_EX.java b/src/main/java/com/netsdk/lib/structure/NET_IN_STARTMULTIFIND_FACERECONGNITION_EX.java
new file mode 100644
index 0000000..6792295
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_STARTMULTIFIND_FACERECONGNITION_EX.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 260611
+ * @description CLIENT_StartMultiFindFaceRecognitionEx 接口输入参数
+ * @date 2022/11/21 17:53:18
+ */
+public class NET_IN_STARTMULTIFIND_FACERECONGNITION_EX extends NetSDKLib.SdkStructure {
+
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public Pointer pChannelID;
+ /**
+ * 通道申请个数
+ */
+ public int nChannelCount;
+ /**
+ * 搜索的目标类型 {@link com.netsdk.lib.NetSDKLib.EM_OBJECT_TYPE}
+ */
+ public int emObjectType;
+ /**
+ * 人脸匹配选项
+ */
+ public NetSDKLib.NET_FACE_MATCH_OPTIONS stMatchOptions = new NetSDKLib.NET_FACE_MATCH_OPTIONS();
+ /**
+ * 查询过滤条件
+ */
+ public NetSDKLib.NET_FACE_FILTER_CONDTION stFilterInfo = new NetSDKLib.NET_FACE_FILTER_CONDTION();
+ /**
+ * 缓冲地址
+ */
+ public Pointer pBuffer;
+ /**
+ * 缓冲数据长度
+ */
+ public int nBufferLen;
+ /**
+ * 目标信息是否有效, 并使用目标信息结构体
+ */
+ public int bPersonEx2Enable;
+ /**
+ * 目标信息, 包括以图搜图的图片数据和属性等
+ */
+ public NET_FACERECOGNITION_PERSON_INFOEX2 stPersonInfoEx2 = new NET_FACERECOGNITION_PERSON_INFOEX2();
+
+ public NET_IN_STARTMULTIFIND_FACERECONGNITION_EX() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_STARTSERACH_DEVICE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_STARTSERACH_DEVICE.java
new file mode 100644
index 0000000..edf13e3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_STARTSERACH_DEVICE.java
@@ -0,0 +1,39 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.fSearchDevicesCBEx;
+import com.sun.jna.Pointer;
+
+public class NET_IN_STARTSERACH_DEVICE extends NetSDKLib.SdkStructure {
+
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ /**
+ * 发起搜索的本地IP
+ */
+ public byte[] szLocalIp=new byte[64];
+
+ /**
+ * 设备信息回调函数
+ */
+ public fSearchDevicesCBEx cbSearchDevices;
+
+ /**
+ * 用户自定义数据
+ */
+ public Pointer pUserData;
+
+ /**
+ * 下发搜索类型(参考EM_SEND_SEARCH_TYPE)
+ */
+ public int emSendType;
+
+ public NET_IN_STARTSERACH_DEVICE()
+ {
+ this.dwSize = this.size();
+ }// 此结构体大小
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_START_BACKUP_TASK_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_START_BACKUP_TASK_INFO.java
new file mode 100644
index 0000000..777bc16
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_START_BACKUP_TASK_INFO.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+import com.sun.jna.Pointer;
+
+/**
+ *
+ * @author 119178
+ * CLIENT_StartBackupTask接口输入参数
+ * {@link NetSDKLib#CLIENT_StartBackupTask}
+ */
+public class NET_IN_START_BACKUP_TASK_INFO extends SdkStructure{
+ public int dwSize;
+ public int emSourceMode; // 源模式(EM_BACKUP_SOURCE_MODE)
+ public int emTargetMode; // 备份模式(EM_BACKUP_TARGET_MODE)
+ public int nSourceNum; // 备份源个数
+ public Pointer pstuSource; // 备份源,用户分配内存,大小为sizeof(NET_BACKUP_SOURCE)*nSourceNum
+ public Pointer pstuTarget; // 备份目的?用户分配内存,大小为sizeof(NET_BACKUP_TARGET)*nTargetNum
+ public int nTargetNum; // 备份目的个数
+ public int emFormat; // 期望备份成为的格式类型(EM_BACKUP_FORMAT)
+ public int nGroupID; // 任务组ID
+ public int bTakePlayer; // 是否带DH播放器,emFormat值dav时,需要DH播放器播放。
+
+ public NET_IN_START_BACKUP_TASK_INFO(){
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_START_BACKUP_TASK_SESSION.java b/src/main/java/com/netsdk/lib/structure/NET_IN_START_BACKUP_TASK_SESSION.java
new file mode 100644
index 0000000..7aff46c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_START_BACKUP_TASK_SESSION.java
@@ -0,0 +1,18 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+/**
+ *
+ * @author 119178
+ * CLIENT_StartBackupTaskSession 接口输入参数
+ * {@link NetSDKLib#CLIENT_StartBackupTaskSession}
+ */
+public class NET_IN_START_BACKUP_TASK_SESSION extends SdkStructure{
+ public int dwSize;
+ public int nGroupID; // 任务组ID,0表示不属于任何任务组
+
+ public NET_IN_START_BACKUP_TASK_SESSION(){
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_START_FIND_DETAIL_CLUSTER.java b/src/main/java/com/netsdk/lib/structure/NET_IN_START_FIND_DETAIL_CLUSTER.java
new file mode 100644
index 0000000..6010ebb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_START_FIND_DETAIL_CLUSTER.java
@@ -0,0 +1,23 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 接口 CLIENT_StartFindDetailNumberStatCluster 的输入参数
+ * @date 2022/10/09 14:06:13
+ */
+public class NET_IN_START_FIND_DETAIL_CLUSTER extends NetSDKLib.SdkStructure {
+ /**
+ * 此结构体大小,必须赋值
+ */
+ public int dwSize;
+ /**
+ * 查询条件
+ */
+ public NET_CLUSTER_DETAIL_CONDITION stuCondition = new NET_CLUSTER_DETAIL_CONDITION();
+
+ public NET_IN_START_FIND_DETAIL_CLUSTER() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_START_FIND_VEHICLE_REG_DB.java b/src/main/java/com/netsdk/lib/structure/NET_IN_START_FIND_VEHICLE_REG_DB.java
new file mode 100644
index 0000000..6f51961
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_START_FIND_VEHICLE_REG_DB.java
@@ -0,0 +1,18 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description CLIENT_StartFindVehicleRegisterDB 接口输入参数
+ * @date 2022/10/22 10:44
+ */
+public class NET_IN_START_FIND_VEHICLE_REG_DB extends NetSDKLib.SdkStructure{
+ public int dwSize; // 结构体大小
+ public NetSDKLib.NET_VEHICLE_INFO stuVehicleInfo=new NetSDKLib.NET_VEHICLE_INFO(); // 车辆信息
+
+ public NET_IN_START_FIND_VEHICLE_REG_DB(){
+ dwSize=this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_START_FIND_WATERDATA_STAT_SERVER_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_START_FIND_WATERDATA_STAT_SERVER_INFO.java
new file mode 100644
index 0000000..536e5f6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_START_FIND_WATERDATA_STAT_SERVER_INFO.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_StartFindWaterDataStatServer 输入参数
+* @date 2022/08/22 17:12:11
+*/
+public class NET_IN_START_FIND_WATERDATA_STAT_SERVER_INFO extends NetSDKLib.SdkStructure {
+/**
+此结构体大小,必须赋值
+*/
+public int dwSize;
+/**
+水质检测数据查询条件
+*/
+public NET_START_FIND_WATERDATA_CONDITION stuCondition=new NET_START_FIND_WATERDATA_CONDITION();
+
+public NET_IN_START_FIND_WATERDATA_STAT_SERVER_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_START_REDIRECT_SERVICE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_START_REDIRECT_SERVICE.java
new file mode 100644
index 0000000..5c52f68
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_START_REDIRECT_SERVICE.java
@@ -0,0 +1,43 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.callback.fRedirectServerCallBackEx;
+import com.sun.jna.Callback;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description CLIENT_StartRedirectServiceEx接口输入参数, {@link
+ * com.netsdk.lib.NetSDKLib#CLIENT_StartRedirectServiceEx(Pointer, Pointer)}
+ * @date 2021/3/13
+ */
+public class NET_IN_START_REDIRECT_SERVICE extends NetSDKLib.SdkStructure {
+ /** 结构体大小, 需要赋值为当前结构体所在大小 */
+ public int dwSize;
+ /** 预留字节 */
+ public byte[] byReserved = new byte[4];
+ /** 主动注册重定向服务器IP */
+ public byte[] szIP = new byte[64];
+ /** 主动注册重定向服务器端口 */
+ public short nPort;
+ /** 预留字节 */
+ public byte[] byReserved1 = new byte[6];
+ /** 设备重定向回调函数(扩展) */
+ public fRedirectServerCallBackEx cbFuncEx;
+ /** 用户参数, 与fRedirectServerCallBackEx绑定 */
+ public Pointer dwUserData;
+
+ /**
+ * DWORD dwSize; // 结构体大小, 需要赋值为当前结构体所在大小
+ * BYTE byReserved[4]; // 预留字节
+ * char szIP[64]; //
+ * 主动注册重定向服务器IP WORD nPort; // 主动注册重定向服务器端口
+ * BYTE byReserved1[6]; // 预留字节
+ * fRedirectServerCallBackEx
+ * cbFuncEx; // 设备重定向回调函数(扩展) LDWORD dwUserData; // 用户参数, 与fRedirectServerCallBackEx绑定
+ */
+ public NET_IN_START_REDIRECT_SERVICE() {
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_START_SUBLINK_LISTEN_SERVER.java b/src/main/java/com/netsdk/lib/structure/NET_IN_START_SUBLINK_LISTEN_SERVER.java
new file mode 100644
index 0000000..024c93b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_START_SUBLINK_LISTEN_SERVER.java
@@ -0,0 +1,31 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+CLIENT_StartSubLinkListenServer 接口输入参数
+*/
+public class NET_IN_START_SUBLINK_LISTEN_SERVER extends NetSDKLib.SdkStructure {
+/**
+/< 结构体大小
+*/
+public int dwSize;
+/**
+/< 本地服务信息
+*/
+public NET_LOCAL_SERVER_NET_INFO stuLoaclServerInfo=new NET_LOCAL_SERVER_NET_INFO();
+/**
+/< 子连接监听服务回调函数
+*/
+public NetSDKLib.fSubLinkServiceCallBack cbSubLinkServiceCallBack;
+/**
+/< 用户数据 LDWORD
+*/
+public Pointer dwUserData;
+
+public NET_IN_START_SUBLINK_LISTEN_SERVER(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_START_TALK_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_START_TALK_INFO.java
new file mode 100644
index 0000000..1302feb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_START_TALK_INFO.java
@@ -0,0 +1,32 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.fAudioDataCallBackEx;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 251823
+ * @version 1.0
+ * @description CLIENT_StartTalkByDataType接口 入参
+ * @date 2021/12/29
+ */
+public class NET_IN_START_TALK_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ /**
+ * 音频数据回调函数,实现时使用{ @link fAudioDataCallBackEx }
+ */
+ public fAudioDataCallBackEx pfAudioDataCallBackEx;
+
+ /**
+ * pfAudioDataCallBackEx回调对应的用户指针
+ */
+ public Pointer dwUser;
+
+ public NET_IN_START_TALK_INFO(){
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_STOP_FIND_DETAIL_CLUSTER_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_STOP_FIND_DETAIL_CLUSTER_INFO.java
new file mode 100644
index 0000000..81ed379
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_STOP_FIND_DETAIL_CLUSTER_INFO.java
@@ -0,0 +1,23 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 接口 CLIENT_StopFindDetailNumberStatCluster 的输入参数
+ * @date 2022/10/09 14:22:07
+ */
+public class NET_IN_STOP_FIND_DETAIL_CLUSTER_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 此结构体大小,必须赋值
+ */
+ public int dwSize;
+ /**
+ * start接口返回的token, token仅会保存
+ */
+ public int nToken;
+
+ public NET_IN_STOP_FIND_DETAIL_CLUSTER_INFO() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_STOP_FIND_VEHICLE_REG_DB.java b/src/main/java/com/netsdk/lib/structure/NET_IN_STOP_FIND_VEHICLE_REG_DB.java
new file mode 100644
index 0000000..172f8b9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_STOP_FIND_VEHICLE_REG_DB.java
@@ -0,0 +1,19 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description CLIENT_StopFindVehicleRegisterDB 接口输入参数
+ * @date 2022/10/22 10:56
+ */
+public class NET_IN_STOP_FIND_VEHICLE_REG_DB extends NetSDKLib.SdkStructure{
+
+ public int dwSize; // 结构体大小
+ public int nToken; // 查询令牌
+
+ public NET_IN_STOP_FIND_VEHICLE_REG_DB(){
+ dwSize=this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_STOP_FIND_WATERDATA_STAT_SERVER_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_STOP_FIND_WATERDATA_STAT_SERVER_INFO.java
new file mode 100644
index 0000000..a7db08e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_STOP_FIND_WATERDATA_STAT_SERVER_INFO.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_StopFindWaterDataStatServer 输入参数
+* @date 2022/08/23 10:33:46
+*/
+public class NET_IN_STOP_FIND_WATERDATA_STAT_SERVER_INFO extends NetSDKLib.SdkStructure {
+/**
+此结构体大小,必须赋值
+*/
+public int dwSize;
+/**
+查询令牌
+*/
+public int nToken;
+
+public NET_IN_STOP_FIND_WATERDATA_STAT_SERVER_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_STORAGE_DEV_INFOS.java b/src/main/java/com/netsdk/lib/structure/NET_IN_STORAGE_DEV_INFOS.java
new file mode 100644
index 0000000..6ac4e40
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_STORAGE_DEV_INFOS.java
@@ -0,0 +1,22 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.NET_VOLUME_TYPE;
+
+/**
+ * CLIENT_QueryDevInfo , NET_QUERY_DEV_STORAGE_INFOS接口输入参数
+ * @author 29779
+ */
+public class NET_IN_STORAGE_DEV_INFOS extends NetSDKLib.SdkStructure {
+ public NET_IN_STORAGE_DEV_INFOS() {
+ this.dwSize = this.size();
+ }
+
+ public int dwSize;
+
+ /**
+ * 要获取的卷类型
+ * {@link NET_VOLUME_TYPE }
+ */
+ public int emVolumeType;
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_TALK_SEND_DATA_FILE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_TALK_SEND_DATA_FILE.java
new file mode 100644
index 0000000..2eea5ac
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_TALK_SEND_DATA_FILE.java
@@ -0,0 +1,65 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 251823
+ * @version 1.0
+ * @description CLIENT_TalkSendDataByFile接口 入参
+ * @date 2021/12/29
+ */
+public class NET_IN_TALK_SEND_DATA_FILE extends NetSDKLib.SdkStructure{
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ /**
+ * 音频文件全路径
+ */
+ public Pointer pFilePath;
+
+ /**
+ * 音频文件发送进度
+ */
+ public NetSDKLib.fTalkSendPosCallBack cbSendPos;
+
+ /**
+ * 用户参数
+ */
+ public Pointer dwUser;
+
+ /**
+ * 发送间隔百分比,0和100表示使用sdk默认计算的间隔,
+ * 于100发送更快,大于100,发送更慢
+ */
+ public int dwSendInterval;
+
+ /**
+ * 是否需要加音频头。
+ * TRUE,表示需要SDK根据下面的音频信息加音频头;
+ * FALSE,表示不需要SDK根据音频信息加音频头,直接发送pFilePath路径指向的数据给设备。
+ */
+ public boolean bNeedHead;
+
+ /**
+ * 音频编码格式,参考枚举{ @link NET_TALK_CODING_TYPE }
+ */
+ public int emEncodeType;
+
+ /**
+ * 位数,如8或16等
+ */
+ public int nAudioBit;
+
+ /**
+ * 采样率,如8000或16000等
+ */
+ public int dwSampleRate;
+
+ public NET_IN_TALK_SEND_DATA_FILE(){
+ this.dwSize = this.size();
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_TALK_SEND_DATA_STREAM.java b/src/main/java/com/netsdk/lib/structure/NET_IN_TALK_SEND_DATA_STREAM.java
new file mode 100644
index 0000000..052e7a7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_TALK_SEND_DATA_STREAM.java
@@ -0,0 +1,53 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 251823
+ * @version 1.0
+ * @description CLIENT_TalkSendDataByStream接口 入参
+ * @date 2021/12/29
+ */
+public class NET_IN_TALK_SEND_DATA_STREAM extends NetSDKLib.SdkStructure{
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+
+ /**
+ * 音频流缓冲
+ */
+ public Pointer pBuf;
+
+ /**
+ * 音频流缓冲大小
+ */
+ public int dwBufSize;
+
+ /**
+ * 是否需要加音频头。
+ * TRUE,表示需要SDK根据下面的音频信息加音频头;
+ * FALSE,表示不需要SDK根据音频信息加音频头,直接发送pBuf指向的数据给设备。
+ */
+ public boolean bNeedHead;
+
+ /**
+ * 音频编码格式,参考枚举{ @link NET_TALK_CODING_TYPE }
+ */
+ public int emEncodeType;
+
+ /**
+ * 位数,如8或16等
+ */
+ public int nAudioBit;
+
+ /**
+ * 采样率,如8000或16000等
+ */
+ public int dwSampleRate;
+
+ public NET_IN_TALK_SEND_DATA_STREAM(){
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_ATTACH.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_ATTACH.java
new file mode 100644
index 0000000..4405530
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_ATTACH.java
@@ -0,0 +1,41 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 260611
+ * @description CLIENT_AttachThingsInfo接口输入参数
+ * @date 2022/04/20 10:16:57
+ */
+public class NET_IN_THINGS_ATTACH extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 订阅类型 {@link com.netsdk.lib.enumeration.EM_ATTACH_TOPICS}
+ */
+ public int emTopics;
+ /**
+ * 产品ID,全网唯一
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID,产品下唯一
+ */
+ public byte[] szDeviceID = new byte[64];
+ /**
+ * 物模型属性信息回调
+ */
+ public NetSDKLib.fThingsCallBack cbThingsInfo;
+ /**
+ * 用户数据
+ */
+ public Pointer dwUser;
+
+ public NET_IN_THINGS_ATTACH() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_DOFIND_HISTORYDATA.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_DOFIND_HISTORYDATA.java
new file mode 100644
index 0000000..7d51654
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_DOFIND_HISTORYDATA.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description CLIENT_DoFindThingsHistoryData 输入参数
+ * @date 2022/04/20 10:16:55
+ */
+public class NET_IN_THINGS_DOFIND_HISTORYDATA extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 偏移量
+ */
+ public int uOffset;
+ /**
+ * 每次查询数量
+ */
+ public int uCount;
+
+ public NET_IN_THINGS_DOFIND_HISTORYDATA() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_GET.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_GET.java
new file mode 100644
index 0000000..78cd636
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_GET.java
@@ -0,0 +1,38 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 260611
+ * @description CLIENT_GetThingsConfig 接口输入参数
+ * @date 2022/04/20 10:16:57
+ */
+public class NET_IN_THINGS_GET extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 产品ID,全网唯一
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID,产品下唯一
+ */
+ public byte[] szDeviceID = new byte[128];
+ /**
+ * pstuGetInProperName个数
+ */
+ public int nProperCount;
+ /**
+ * 物模型标志,需要查询的物模型标志名称
+ * 用户分配内存,大小为sizeof{@link NET_PROPERTIES_NAME}*nPropertiesCount
+ */
+ public Pointer pstuGetInProperName;
+
+ public NET_IN_THINGS_GET() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_GET_CAPS.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_GET_CAPS.java
new file mode 100644
index 0000000..17d3450
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_GET_CAPS.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description CLIENT_GetThingsCaps接口输入参数
+ * @date 2022/04/20 10:16:56
+ */
+public class NET_IN_THINGS_GET_CAPS extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 设备ID,产品下唯一
+ */
+ public byte[] szDeviceID = new byte[128];
+
+ public NET_IN_THINGS_GET_CAPS() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_GET_DEVLIST.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_GET_DEVLIST.java
new file mode 100644
index 0000000..e470ba6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_GET_DEVLIST.java
@@ -0,0 +1,20 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description CLIENT_GetThingsDevList接口输入参数
+ * @date 2022/04/20 10:16:56
+ */
+public class NET_IN_THINGS_GET_DEVLIST extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+
+ public NET_IN_THINGS_GET_DEVLIST() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_GET_NETSTATE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_GET_NETSTATE.java
new file mode 100644
index 0000000..8d3646f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_GET_NETSTATE.java
@@ -0,0 +1,20 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description CLIENT_GetThingsNetState接口输入参数
+ * @date 2022/04/20 10:16:56
+ */
+public class NET_IN_THINGS_GET_NETSTATE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+
+ public NET_IN_THINGS_GET_NETSTATE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_ADDDEVICE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_ADDDEVICE.java
new file mode 100644
index 0000000..5b26cae
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_ADDDEVICE.java
@@ -0,0 +1,44 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 添加设备输入参数(对应 EM_THINGS_SERVICE_TYPE_ADDDEVICE)
+ * @date 2022/04/20 10:50:22
+ */
+public class NET_IN_THINGS_SERVICE_ADDDEVICE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 产品ID,全网唯一
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID
+ */
+ public byte[] szDeviceID = new byte[64];
+ /**
+ * 添加设备类型,3:电表 5:塑壳 6:烟感
+ */
+ public int nDevCata;
+ /**
+ * 485地址(塑壳、烟感填写)
+ */
+ public int nDev485Addr;
+ /**
+ * 设备序列号(电表填写)
+ */
+ public byte[] szDevSn = new byte[128];
+ /**
+ * 设备别名(电表填写)
+ */
+ public byte[] szDevName = new byte[128];
+
+ public NET_IN_THINGS_SERVICE_ADDDEVICE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_ADDRULE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_ADDRULE.java
new file mode 100644
index 0000000..5632bf9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_ADDRULE.java
@@ -0,0 +1,36 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 添加联动规则输入参数(对应 EM_THINGS_SERVICE_TYPE_ADDRULE)
+ * @date 2022/04/20 10:50:21
+ */
+public class NET_IN_THINGS_SERVICE_ADDRULE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 产品ID,全网唯一
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID
+ */
+ public byte[] szDeviceID = new byte[64];
+ /**
+ * 类型名称“timer”、“alarm”
+ */
+ public byte[] szClassName = new byte[256];
+ /**
+ * 联动规则内容
+ */
+ public NET_THINGS_SERVICE_RULECONTENT stuRuleContent = new NET_THINGS_SERVICE_RULECONTENT();
+
+ public NET_IN_THINGS_SERVICE_ADDRULE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_AIRSWITHFIND.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_AIRSWITHFIND.java
new file mode 100644
index 0000000..4cf9a91
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_AIRSWITHFIND.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 空开红蓝灯闪烁输入参数(对应 EM_THINGS_SERVICE_TYPE_AIRSWITHFIND)
+ * @date 2022/04/20 10:50:19
+ */
+public class NET_IN_THINGS_SERVICE_AIRSWITHFIND extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 产品ID
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID
+ */
+ public byte[] szDeviceID = new byte[64];
+
+ public NET_IN_THINGS_SERVICE_AIRSWITHFIND() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_AIRSWITHRESET.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_AIRSWITHRESET.java
new file mode 100644
index 0000000..d8f4632
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_AIRSWITHRESET.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 空开恢复出厂设置输入参数(对应 EM_THINGS_SERVICE_TYPE_AIRSWITHRESET)
+ * @date 2022/04/20 10:50:20
+ */
+public class NET_IN_THINGS_SERVICE_AIRSWITHRESET extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 产品ID
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID
+ */
+ public byte[] szDeviceID = new byte[64];
+
+ public NET_IN_THINGS_SERVICE_AIRSWITHRESET() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_CHARGECLEAR.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_CHARGECLEAR.java
new file mode 100644
index 0000000..dcfb13f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_CHARGECLEAR.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 电量清零输入参数(对应 EM_THINGS_SERVICE_TYPE_CHARGECLEAR)
+ * @date 2022/04/20 10:50:18
+ */
+public class NET_IN_THINGS_SERVICE_CHARGECLEAR extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 产品ID
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID
+ */
+ public byte[] szDeviceID = new byte[64];
+
+ public NET_IN_THINGS_SERVICE_CHARGECLEAR() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_CURRENTSTATUSGET.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_CURRENTSTATUSGET.java
new file mode 100644
index 0000000..22b2952
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_CURRENTSTATUSGET.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 获取所有空开当前报警状态输入参数(对应 EM_THINGS_SERVICE_TYPE_CURRENTSTATUSGET)
+ * @date 2022/04/20 10:50:24
+ */
+public class NET_IN_THINGS_SERVICE_CURRENTSTATUSGET extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 产品ID,全网唯一
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID
+ */
+ public byte[] szDeviceID = new byte[64];
+
+ public NET_IN_THINGS_SERVICE_CURRENTSTATUSGET() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_DELDEVICE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_DELDEVICE.java
new file mode 100644
index 0000000..cfa5ae5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_DELDEVICE.java
@@ -0,0 +1,36 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 删除子设备输入参数(对应 EM_THINGS_SERVICE_TYPE_DELDEVICE)
+ * @date 2022/04/20 10:50:23
+ */
+public class NET_IN_THINGS_SERVICE_DELDEVICE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 子设备ID个数
+ */
+ public int nDelidListCount;
+ /**
+ * 子设备ID列表
+ */
+ public NET_THINGS_SERVICE_DELDEVICE_LIST[] stuDelidList = (NET_THINGS_SERVICE_DELDEVICE_LIST[]) new NET_THINGS_SERVICE_DELDEVICE_LIST().toArray(64);
+ /**
+ * 产品ID,全网唯一
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID
+ */
+ public byte[] szDeviceID = new byte[64];
+
+ public NET_IN_THINGS_SERVICE_DELDEVICE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_DELRULE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_DELRULE.java
new file mode 100644
index 0000000..ec6f3e8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_DELRULE.java
@@ -0,0 +1,36 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 删除联动规则输入参数(对应 EM_THINGS_SERVICE_TYPE_DELRULE)
+ * @date 2022/04/20 10:50:21
+ */
+public class NET_IN_THINGS_SERVICE_DELRULE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 产品ID,全网唯一
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID
+ */
+ public byte[] szDeviceID = new byte[64];
+ /**
+ * 规则ID
+ */
+ public byte[] szRuleID = new byte[256];
+ /**
+ * 类型名称“timer”、“alarm”
+ */
+ public byte[] szClassName = new byte[256];
+
+ public NET_IN_THINGS_SERVICE_DELRULE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_DEVREPLACE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_DEVREPLACE.java
new file mode 100644
index 0000000..2686a93
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_DEVREPLACE.java
@@ -0,0 +1,36 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 子设备替换输入参数(对应 EM_THINGS_SERVICE_TYPE_DEVREPLACE)
+ * @date 2022/04/20 10:50:23
+ */
+public class NET_IN_THINGS_SERVICE_DEVREPLACE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 产品ID,全网唯一
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID
+ */
+ public byte[] szDeviceID = new byte[64];
+ /**
+ * 被替换空开ID
+ */
+ public byte[] szReplacedDevID = new byte[64];
+ /**
+ * 新空开ID
+ */
+ public byte[] szNewDevID = new byte[64];
+
+ public NET_IN_THINGS_SERVICE_DEVREPLACE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_ENABLE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_ENABLE.java
new file mode 100644
index 0000000..c1b1b9b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_ENABLE.java
@@ -0,0 +1,40 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 使能联动规则输入参数(对应 EM_THINGS_SERVICE_TYPE_ENABLERULE)
+ * @date 2022/04/20 10:50:22
+ */
+public class NET_IN_THINGS_SERVICE_ENABLE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 产品ID,全网唯一
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID
+ */
+ public byte[] szDeviceID = new byte[64];
+ /**
+ * 使能
+ */
+ public int bEnable;
+ /**
+ * 规则ID
+ */
+ public byte[] szRuleID = new byte[256];
+ /**
+ * 类型名称“timer”、“alarm”
+ */
+ public byte[] szClassName = new byte[256];
+
+ public NET_IN_THINGS_SERVICE_ENABLE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_LEAKCURTPOST.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_LEAKCURTPOST.java
new file mode 100644
index 0000000..6dd143e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_LEAKCURTPOST.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 漏电自检输入参数(对应 EM_THINGS_SERVICE_TYPE_LEAKCURTPOST)
+ * @date 2022/04/20 10:50:19
+ */
+public class NET_IN_THINGS_SERVICE_LEAKCURTPOST extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 产品ID
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID
+ */
+ public byte[] szDeviceID = new byte[64];
+
+ public NET_IN_THINGS_SERVICE_LEAKCURTPOST() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_LEAKCURTPOSTASYNC.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_LEAKCURTPOSTASYNC.java
new file mode 100644
index 0000000..c44cdd4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_LEAKCURTPOSTASYNC.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 漏电自检异步输入参数(对应 EM_THINGS_SERVICE_TYPE_LEAKCURTPOSTASYNC)
+ * @date 2022/04/20 10:50:19
+ */
+public class NET_IN_THINGS_SERVICE_LEAKCURTPOSTASYNC extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 产品ID
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID
+ */
+ public byte[] szDeviceID = new byte[64];
+
+ public NET_IN_THINGS_SERVICE_LEAKCURTPOSTASYNC() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_MODRULE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_MODRULE.java
new file mode 100644
index 0000000..fea2cc9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_MODRULE.java
@@ -0,0 +1,44 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 修改联动规则输入参数(对应 EM_THINGS_SERVICE_TYPE_MODRULE)
+ * @date 2022/04/20 10:50:21
+ */
+public class NET_IN_THINGS_SERVICE_MODRULE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 产品ID,全网唯一
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID
+ */
+ public byte[] szDeviceID = new byte[64];
+ /**
+ * 规则ID
+ */
+ public byte[] szRuleID = new byte[256];
+ /**
+ * 类型名称“timer”、“alarm”
+ */
+ public byte[] szClassName = new byte[256];
+ /**
+ * 规则内容类型"Action"
+ */
+ public byte[] szRuleContentType = new byte[256];
+ /**
+ * 联动规则内容
+ */
+ public NET_THINGS_SERVICE_RULECONTENT stuRuleContent = new NET_THINGS_SERVICE_RULECONTENT();
+
+ public NET_IN_THINGS_SERVICE_MODRULE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_OFFLINELOGCLEAN.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_OFFLINELOGCLEAN.java
new file mode 100644
index 0000000..b096af4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_OFFLINELOGCLEAN.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 离线日志清除输入参数(对应 EM_THINGS_SERVICE_TYPE_OFFLINELOGCLEAN)
+ * @date 2022/04/20 10:50:23
+ */
+public class NET_IN_THINGS_SERVICE_OFFLINELOGCLEAN extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 产品ID,全网唯一
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID
+ */
+ public byte[] szDeviceID = new byte[64];
+
+ public NET_IN_THINGS_SERVICE_OFFLINELOGCLEAN() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_QUERULE.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_QUERULE.java
new file mode 100644
index 0000000..2329dcf
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_QUERULE.java
@@ -0,0 +1,40 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 查询联动规则输入参数(对应 EM_THINGS_SERVICE_TYPE_QUERULE)
+ * @date 2022/04/20 10:50:22
+ */
+public class NET_IN_THINGS_SERVICE_QUERULE extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 产品ID,全网唯一
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID
+ */
+ public byte[] szDeviceID = new byte[64];
+ /**
+ * 每一页的数据大小
+ */
+ public int nPageSize;
+ /**
+ * 按页查询
+ */
+ public int nPage;
+ /**
+ * 类型名称“timer”、“alarm”
+ */
+ public byte[] szClassName = new byte[256];
+
+ public NET_IN_THINGS_SERVICE_QUERULE() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_VALVECONTROL.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_VALVECONTROL.java
new file mode 100644
index 0000000..d8363ae
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SERVICE_VALVECONTROL.java
@@ -0,0 +1,32 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 闸门控制输入参数(对应 EM_THINGS_SERVICE_TYPE_VALVECONTROL)
+ * @date 2022/04/20 10:50:18
+ */
+public class NET_IN_THINGS_SERVICE_VALVECONTROL extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 开关
+ */
+ public int bSwitch;
+ /**
+ * 产品ID
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID
+ */
+ public byte[] szDeviceID = new byte[64];
+
+ public NET_IN_THINGS_SERVICE_VALVECONTROL() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SET.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SET.java
new file mode 100644
index 0000000..a58346d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_SET.java
@@ -0,0 +1,38 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 260611
+ * @description CLIENT_SetThingsConfig 接口输入参数
+ * @date 2022/04/20 10:16:57
+ */
+public class NET_IN_THINGS_SET extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 产品ID,全网唯一
+ */
+ public byte[] szProductID = new byte[64];
+ /**
+ * 设备ID,产品下唯一
+ */
+ public byte[] szDeviceID = new byte[128];
+ /**
+ * pstuSetInProperInfo个数
+ */
+ public int nProperCount;
+ /**
+ * 属性值,具体内容由物模型协议决定, Key,Value,ValueType均需要填写
+ * 用户分配内存,大小为sizeof(NET_PROPERTIES_INFO)*nPropertiesCount
+ */
+ public Pointer pstuSetInProperInfo;
+
+ public NET_IN_THINGS_SET() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_START_HISTORYDATA.java b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_START_HISTORYDATA.java
new file mode 100644
index 0000000..d6a330e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_THINGS_START_HISTORYDATA.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description CLIENT_StartThingsHistoryData 输入参数
+ * @date 2022/04/20 10:16:56
+ */
+public class NET_IN_THINGS_START_HISTORYDATA extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小, 调用者必须初始化该字段
+ */
+ public int dwSize;
+ /**
+ * 历史数据主题个数
+ */
+ public int nTopicsCount;
+ /**
+ * 历史数据主题列表
+ */
+ public NET_THINGS_START_HISTORYDATA_TOPICS[] stuTopics = (NET_THINGS_START_HISTORYDATA_TOPICS[]) new NET_THINGS_START_HISTORYDATA_TOPICS().toArray(64);
+
+ public NET_IN_THINGS_START_HISTORYDATA() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_TRAFFICDOFINDSTAT.java b/src/main/java/com/netsdk/lib/structure/NET_IN_TRAFFICDOFINDSTAT.java
new file mode 100644
index 0000000..f4159fb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_TRAFFICDOFINDSTAT.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 接口(CLIENT_DoFindFluxStat)输入参数
+* @date 2022/05/07 10:03:35
+*/
+public class NET_IN_TRAFFICDOFINDSTAT extends NetSDKLib.SdkStructure {
+/**
+此结构体大小
+*/
+public int dwSize;
+/**
+每次查询的流量统计条数
+*/
+public int nCount;
+/**
+等待接收数据的超时时间
+*/
+public int nWaittime;
+
+public NET_IN_TRAFFICDOFINDSTAT(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_TRAFFICSTARTFINDSTAT.java b/src/main/java/com/netsdk/lib/structure/NET_IN_TRAFFICSTARTFINDSTAT.java
new file mode 100644
index 0000000..46bcbc2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_TRAFFICSTARTFINDSTAT.java
@@ -0,0 +1,61 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @description 接口(CLIENT_StartFindFluxStat)输入参数
+ * @date 2022/05/07 09:59:47
+ */
+public class NET_IN_TRAFFICSTARTFINDSTAT extends NetSDKLib.SdkStructure {
+ /**
+ * 此结构体大小
+ */
+ public int dwSize;
+ /**
+ * 开始时间 暂时精确到小时
+ */
+ public NET_TIME stStartTime = new NET_TIME();
+ /**
+ * 结束时间 暂时精确到小时
+ */
+ public NET_TIME stEndTime = new NET_TIME();
+ /**
+ * 等待接收数据的超时时间
+ */
+ public int nWaittime;
+
+ /**
+ * 查询的通道号个数
+ */
+ public int nChannelCount;
+ /**
+ * 查询的通道号
+ */
+ public int[] nChannels = new int[256];
+ /**
+ * 查询的车道号个数
+ */
+ public int nLaneCount;
+ /**
+ * 查询的车道号
+ */
+ public int[] nLanes = new int[16];
+ /**
+ * 数据库表类型 0表示视频结构化,1表示道路监控
+ */
+ public int nClassType;
+ /**
+ * 查询要求返回的统计信息粒度 默认按小时
+ * {@link com.netsdk.lib.enumeration.EM_GRANULARITY_STARTFIND_TYPE}
+ */
+ public int emGranularity;
+ /**
+ * 统计方向查询条件 {@link com.netsdk.lib.enumeration.EM_STARTFIND_DIRECTION}
+ */
+ public int emDirection;
+
+ public NET_IN_TRAFFICSTARTFINDSTAT() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_TRAFFIC_RADAR_GET_OBJECT_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_TRAFFIC_RADAR_GET_OBJECT_INFO.java
new file mode 100644
index 0000000..6b08751
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_TRAFFIC_RADAR_GET_OBJECT_INFO.java
@@ -0,0 +1,18 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251589
+ * @version V1.0
+ * @Description: // CLIENT_QueryDevInfo NET_QUERY_TRAFFIC_RADAR_GET_OBJECT 类型接口输入参数
+ * @date 2020/12/14 20:46
+ */
+public class NET_IN_TRAFFIC_RADAR_GET_OBJECT_INFO extends NetSDKLib.SdkStructure {
+ public int dwSize;
+ public int nChannel; // 通道号
+
+ public NET_IN_TRAFFIC_RADAR_GET_OBJECT_INFO() {
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_TRAFFIC_SNAP_RADAR_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_TRAFFIC_SNAP_RADAR_INFO.java
new file mode 100644
index 0000000..43a6618
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_TRAFFIC_SNAP_RADAR_INFO.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 智能交通外接雷达信息入参
+ * @date 2020/12/14
+ */
+public class NET_IN_TRAFFIC_SNAP_RADAR_INFO extends NetSDKLib.SdkStructure{
+
+ /**
+ * 结构体大小
+ * */
+ public int dwSize;
+
+ /**
+ * 通道号
+ * */
+ public int nChannel;
+
+ public NET_IN_TRAFFIC_SNAP_RADAR_INFO() {
+ this.dwSize = this.size();
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_TRAFFIC_SNAP_STROBE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_TRAFFIC_SNAP_STROBE_INFO.java
new file mode 100644
index 0000000..84e46dc
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_TRAFFIC_SNAP_STROBE_INFO.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 智能交通外接道闸信息入参
+ * @date 2020/12/14
+ */
+public class NET_IN_TRAFFIC_SNAP_STROBE_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 结构体大小
+ * */
+ public int dwSize;
+
+ /**
+ * 通道号
+ * */
+ public int nChannel;
+
+ public NET_IN_TRAFFIC_SNAP_STROBE_INFO() {
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_TRANSFER_SUBLINK_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_TRANSFER_SUBLINK_INFO.java
new file mode 100644
index 0000000..0681236
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_TRANSFER_SUBLINK_INFO.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+CLIENT_TransferSubLinkInfo 接口输入参数
+*/
+public class NET_IN_TRANSFER_SUBLINK_INFO extends NetSDKLib.SdkStructure {
+/**
+/< 结构体大小
+*/
+public int dwSize;
+/**
+/< 连接方式 {@link com.netsdk.lib.enumeration.EM_SUBLINK_TYPE }
+*/
+public int emLinkType;
+/**
+/< 会话ID
+*/
+public byte[] szBSID=new byte[64];
+/**
+/< 本地服务信息, emLinkType为EM_SUBCONNECT_TYPE_PORT(主动注册)方式时有效
+*/
+public NET_LOCAL_SERVER_NET_INFO stuLoaclServerInfo=new NET_LOCAL_SERVER_NET_INFO();
+/**
+连接模式 {@link com.netsdk.lib.enumeration.EM_SUBLINK_MODE}
+*/
+public int emLinkMode;
+
+public NET_IN_TRANSFER_SUBLINK_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_TRANSMIT_CMD.java b/src/main/java/com/netsdk/lib/structure/NET_IN_TRANSMIT_CMD.java
new file mode 100644
index 0000000..340ccca
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_TRANSMIT_CMD.java
@@ -0,0 +1,40 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 251823
+ * @description CLIENT_TransmitCmd 接口输入参数
+ * @date 2023/03/15 21:31:22
+ */
+public class NET_IN_TRANSMIT_CMD extends NetSDKLib.SdkStructure {
+ /**
+ * 结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号, 范围 0~设备通道数
+ */
+ public int nChannel;
+ /**
+ * 协议类型,0 : 整形数组
+ */
+ public int nHannel;
+ /**
+ * 此命令需要接收回复,0 - false 1 -true
+ */
+ public int bReply;
+ /**
+ * 命令字节数量
+ */
+ public int nMessageCount;
+ /**
+ * 具体命令,是一个数组,每个元素为每个字节的整形值,使用DVR同前端交互协议,需要用户分配内存空间。指针对应int[]数组
+ */
+ public Pointer pMessage;
+
+ public NET_IN_TRANSMIT_CMD() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_UNIFIEDINFOCOLLECT_GET_DEVSTATUS.java b/src/main/java/com/netsdk/lib/structure/NET_IN_UNIFIEDINFOCOLLECT_GET_DEVSTATUS.java
new file mode 100644
index 0000000..e413fee
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_UNIFIEDINFOCOLLECT_GET_DEVSTATUS.java
@@ -0,0 +1,20 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 获取设备状态入参
+* @date 2022/09/01 15:10:37
+*/
+public class NET_IN_UNIFIEDINFOCOLLECT_GET_DEVSTATUS extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+
+public NET_IN_UNIFIEDINFOCOLLECT_GET_DEVSTATUS(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_UPLOAD_UPPACKING_CHECK_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_UPLOAD_UPPACKING_CHECK_INFO.java
new file mode 100644
index 0000000..4a90c3b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_UPLOAD_UPPACKING_CHECK_INFO.java
@@ -0,0 +1,35 @@
+ package com.netsdk.lib.structure;
+ import com.netsdk.lib.NetSDKLib;
+ import com.sun.jna.Pointer;
+
+ import java.awt.*;
+
+ /**
+ * @author 291189
+ * @version 1.0
+ * @description CLIENT_NET_API BOOL CALL_METHOD CLIENT_UploadUnpackingCheckInfo 入参
+ * @date 2021/9/9
+ */
+ public class NET_IN_UPLOAD_UPPACKING_CHECK_INFO extends NetSDKLib.SdkStructure {
+/** 结构体大小*/
+public int dwSize;
+/** 图片二进制数据缓存大小*/
+public int nImageDataLen;
+/** 图片二进制数据块*/
+public Pointer pImageData;
+/** 开包检查信息*/
+public UNPACKING_CHECK_INFO stuCheckInfo=new UNPACKING_CHECK_INFO();
+
+public NET_IN_UPLOAD_UPPACKING_CHECK_INFO(){
+ this.dwSize=this.size();
+}
+}
+
+
+/**
+ DWORD dwSize; // 结构体大小
+ int nImageDataLen; // 图片二进制数据缓存大小
+ char* pImageData; // 图片二进制数据块
+ UNPACKING_CHECK_INFO stuCheckInfo; // 开包检查信息
+
+ */
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_VIDEOIN_DAYNIGHT_CAPS.java b/src/main/java/com/netsdk/lib/structure/NET_IN_VIDEOIN_DAYNIGHT_CAPS.java
new file mode 100644
index 0000000..924a6d8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_VIDEOIN_DAYNIGHT_CAPS.java
@@ -0,0 +1,25 @@
+package com.netsdk.lib.structure;
+/**
+ * @author 47081
+ * @desc
+ * @version 1.0.0
+ * @date 2021/4/9
+ */
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 47081
+ * @description CLIENT_GetDevCaps NET_VIDEOIN_DAYNIGHT_CAPS 命令入参,日夜模式能力集
+ * @date 2021/4/9
+ * @version 1.0
+ */
+public class NET_IN_VIDEOIN_DAYNIGHT_CAPS extends NetSDKLib.SdkStructure {
+ /** 用户使用时赋值为结构体大小 */
+ public int dwSize;
+ /** 通道号 */
+ public int nChannel;
+
+ public NET_IN_VIDEOIN_DAYNIGHT_CAPS() {
+ this.dwSize = size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_VIDEO_ENCODE_CAPS.java b/src/main/java/com/netsdk/lib/structure/NET_IN_VIDEO_ENCODE_CAPS.java
new file mode 100644
index 0000000..a7eef1d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_VIDEO_ENCODE_CAPS.java
@@ -0,0 +1,31 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 获取视频编码能力集入参
+ * @date 2022/07/20 13:52:07
+ */
+public class NET_IN_VIDEO_ENCODE_CAPS extends NetSDKLib.SdkStructure {
+ /**
+ * 该结构体大小
+ */
+ public int dwSize;
+ /**
+ * 通道号
+ */
+ public int nChannel;
+ /**
+ * 组号
+ */
+ public int nGroup;
+ /**
+ * 码流类型,参考枚举{ @link CFG_EM_STREAM_TYPES }
+ */
+ public int stStreamType;
+
+ public NET_IN_VIDEO_ENCODE_CAPS() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_WATERDATA_STAT_SERVER_GETCAPS_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_WATERDATA_STAT_SERVER_GETCAPS_INFO.java
new file mode 100644
index 0000000..cee33ea
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_WATERDATA_STAT_SERVER_GETCAPS_INFO.java
@@ -0,0 +1,20 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_GetWaterDataStatServerCaps 输入参数
+* @date 2022/08/22 10:06:53
+*/
+public class NET_IN_WATERDATA_STAT_SERVER_GETCAPS_INFO extends NetSDKLib.SdkStructure {
+/**
+此结构体大小,必须赋值
+*/
+public int dwSize;
+
+public NET_IN_WATERDATA_STAT_SERVER_GETCAPS_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_WATERDATA_STAT_SERVER_GETDATA_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_WATERDATA_STAT_SERVER_GETDATA_INFO.java
new file mode 100644
index 0000000..ca72e59
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_WATERDATA_STAT_SERVER_GETDATA_INFO.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description CLIENT_GetWaterDataStatServerWaterData 输入参数
+* @date 2022/08/22 16:50:06
+*/
+public class NET_IN_WATERDATA_STAT_SERVER_GETDATA_INFO extends NetSDKLib.SdkStructure {
+/**
+此结构体大小,必须赋值
+*/
+public int dwSize;
+/**
+检测类型个数
+*/
+public int nTypeNum;
+/**
+检测类型 {@link com.netsdk.lib.enumeration.EM_WATER_DETECTION_ALARM_TYPE}
+*/
+public int[] emType=new int[32];
+
+public NET_IN_WATERDATA_STAT_SERVER_GETDATA_INFO(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_WLAN_ACCESSPOINT.java b/src/main/java/com/netsdk/lib/structure/NET_IN_WLAN_ACCESSPOINT.java
new file mode 100644
index 0000000..245e214
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_WLAN_ACCESSPOINT.java
@@ -0,0 +1,25 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description CLIENT_QueryDevInfo , NET_QUERY_WLAN_ACCESSPOINT 命令输入参数
+ * @date 2023/03/16 14:09:33
+ */
+public class NET_IN_WLAN_ACCESSPOINT extends NetSDKLib.SdkStructure {
+
+ public int dwSize;
+ /**
+ * 需要获取信息的无线网络名称,为空时搜索所有网络
+ */
+ public byte[] szSSID = new byte[36];
+ /**
+ * 网卡名称, 为空时, 默认为eth2
+ */
+ public byte[] szName = new byte[32];
+
+ public NET_IN_WLAN_ACCESSPOINT() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_XRAY_ATTACH_PACKAGE_STATISTICS.java b/src/main/java/com/netsdk/lib/structure/NET_IN_XRAY_ATTACH_PACKAGE_STATISTICS.java
new file mode 100644
index 0000000..6cfe6d9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_XRAY_ATTACH_PACKAGE_STATISTICS.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.callback.securityCheck.fXRayAttachPackageStatistics;
+import com.sun.jna.Pointer;
+
+/**
+ *@author : 291189
+ *@since : Created in 2021/7/1 9:47
+ * CLIENT_XRayAttachPackageStatistics 输入结构体
+ */
+public class NET_IN_XRAY_ATTACH_PACKAGE_STATISTICS extends NetSDKLib.SdkStructure{
+
+
+
+ public int dwSize;// 赋值为结构体大小
+ public byte[] szUUID=new byte[36];// UUID
+ public fXRayAttachPackageStatistics cbNotify; // 回调函数
+ public Pointer dwUser; // 用户信息
+
+ public NET_IN_XRAY_ATTACH_PACKAGE_STATISTICS() {
+ this.dwSize = this.size();
+ }
+
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IN_XRAY_PACKAGE_STATISTICS_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IN_XRAY_PACKAGE_STATISTICS_INFO.java
new file mode 100644
index 0000000..094fc17
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IN_XRAY_PACKAGE_STATISTICS_INFO.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 包裹信息
+ * @date 2021/7/1
+ */
+public class NET_IN_XRAY_PACKAGE_STATISTICS_INFO extends NetSDKLib.SdkStructure{
+
+
+ public byte[] szUUID=new byte[36];// UUID
+ public int nStatisticsInfoID;// 统计信息ID
+ public NET_TIME_EX stuBeginTime=new NET_TIME_EX(); // 开始时间
+ public NET_TIME_EX stuEndTime=new NET_TIME_EX(); // 结束时间
+ public int nTotalCount; // 包裹总数
+ public int nStatisticsInfoByGradeNum; // 按危险等级统计的信息的数量
+ public NET_IN_PACKAGE_STATISTICS_BYGRADE[] stuStatisticsInfoByGrade=new NET_IN_PACKAGE_STATISTICS_BYGRADE[16]; // 按危险等级统计的信息
+ public int nStatisticsInfoByTypeNum; // 按危险类型统计的信息的数量
+ public NET_IN_PACKAGE_STATISTICS_BYTYPE[] stuStatisticsInfoByType=new NET_IN_PACKAGE_STATISTICS_BYTYPE[64]; // 按危险类型统计的信息
+ public byte[] byReserved=new byte[1024]; // 保留字段
+
+
+}
+
diff --git a/src/main/java/com/netsdk/lib/structure/NET_ISCSI_TARGET.java b/src/main/java/com/netsdk/lib/structure/NET_ISCSI_TARGET.java
new file mode 100644
index 0000000..44fdd03
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_ISCSI_TARGET.java
@@ -0,0 +1,19 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+public class NET_ISCSI_TARGET extends NetSDKLib.SdkStructure {
+
+ public NET_ISCSI_TARGET() {
+ this.dwSize = this.size();
+
+ //System.out.println("NET_ISCSI_TARGET " + this.size());
+ }
+
+ public int dwSize;
+ public byte[] szName = new byte[128]; // 名称
+ public byte[] szAddress = new byte[64]; // 服务器地址
+ public byte[] szUser =new byte[128]; // 用户名
+ public int nPort; // 端口
+ public int nStatus; // 状态, 0-未知, 1-已连接, 2-未连接, 3-连接失败, 4-认证失败, 5-连接超时, 6-不存在
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IVSEVENT_EVENT_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IVSEVENT_EVENT_INFO.java
new file mode 100644
index 0000000..a8f5720
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IVSEVENT_EVENT_INFO.java
@@ -0,0 +1,45 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 智能事件数据信息
+* @date 2022/11/02 13:53:03
+*/
+public class NET_IVSEVENT_EVENT_INFO extends NetSDKLib.SdkStructure {
+/**
+通道号 从0开始,-1表示通道号未知
+*/
+public int nChannel;
+/**
+事件编号
+*/
+public int nId;
+/**
+事件类型,值含义参考 EVENT_IVS_ALL 下面的智能事件类型宏定义
+*/
+public int dwEventCode;
+/**
+报警诊断类型
+0:未知
+1:未处理
+2:正确
+3:错误
+4:重复正确报警
+5:重复错误报警
+*/
+public int nVaild;
+/**
+ 事件发生的时间
+*/
+public NET_TIME_EX stuTime=new NET_TIME_EX();
+/**
+保留字节
+*/
+public byte[] byReserved=new byte[1020];
+
+public NET_IVSEVENT_EVENT_INFO(){
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_IVS_DIALRECOGNITION_RULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_IVS_DIALRECOGNITION_RULE_INFO.java
new file mode 100644
index 0000000..98daa82
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_IVS_DIALRECOGNITION_RULE_INFO.java
@@ -0,0 +1,50 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description EVENT_IVS_DIALRECOGNITION(仪表检测事件)对应的规则配置
+* @date 2022/06/30 11:30:54
+*/
+public class NET_IVS_DIALRECOGNITION_RULE_INFO extends NetSDKLib.SdkStructure {
+/**
+仪表类型 {@link com.netsdk.lib.enumeration.EM_DIALDETECT_TYPE}
+*/
+public int emType;
+/**
+规则特定的尺寸过滤器是否有效
+*/
+public int bSizeFileter;
+/**
+规则特定的尺寸过滤器
+*/
+public NET_CFG_SIZEFILTER_INFO stuSizeFileter=new NET_CFG_SIZEFILTER_INFO();
+/**
+检测区域
+*/
+public POINTCOORDINATE[] stuDetectRegion=new POINTCOORDINATE[20];
+/**
+检测区域顶点数
+*/
+public int nDetectRegionNum;
+/**
+敞开式隔离开关有效,分夹角阈值, 单位度,取值范围0~90, 建议20
+*/
+public int nKinfeOpenAngleThreshold;
+/**
+敞开式隔离开关有效,合夹角阈值, 单位度,取值范围0~90, 建议10
+*/
+public int nKinfeClossAngleThreshold;
+/**
+保留字节
+*/
+public byte[] bReserved=new byte[2044];
+
+public NET_IVS_DIALRECOGNITION_RULE_INFO(){
+ for(int i=0;i {@link NET_CHANNEL_INFO}
+ */
+ public Pointer pstuChannelInfo;
+ /**
+ * 通道信息个数,可以根据登陆时获取的通道数为准
+ */
+ public int nChannelInfoNum;
+ /**
+ * 实际返回的通道号信息个数
+ */
+ public int nRetChannelInfoNum;
+ /**
+ * 报警通道相关信息,由用户申请内存,大小为 sizeof(NET_ALARM_INFO)*nAlarmInfoNum
+ * JNA指针类型 -> {@link NET_ALARM_INFO}
+ */
+ public Pointer pstuAlarmInfo;
+ /**
+ * 报警信息个数,最大值为 640
+ */
+ public int nAlarmInfoNum;
+ /**
+ * 实际返回的报警通道信息个数
+ */
+ public int nRetAlarmInfoNum;
+ /**
+ * 音频输出通道相关信息,由用户申请内存,大小为 sizeof(NET_AUDIO_OUTPUT_CHANNEL_INFO)*nAudioOutputChnInfoNum
+ * JNA指针类型 -> {@link NET_AUDIO_OUTPUT_CHANNEL_INFO}
+ */
+ public Pointer pstuAudioOutputChnInfo;
+ /**
+ * 音频输出通道相关信息个数,最大值为181
+ */
+ public int nAudioOutputChnInfoNum;
+ /**
+ * 实际返回的音频输出通道信息个数
+ */
+ public int nRetAudioOutputChnInfoNum;
+ /**
+ * 预留字节
+ */
+ public byte[] byReserved = new byte[1024];
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_SMART_KITCHEN_CLOTHES_CHEF_CLOTHES.java b/src/main/java/com/netsdk/lib/structure/NET_SMART_KITCHEN_CLOTHES_CHEF_CLOTHES.java
new file mode 100644
index 0000000..842edd1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_SMART_KITCHEN_CLOTHES_CHEF_CLOTHES.java
@@ -0,0 +1,17 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 厨师服相关属性状态信息
+ * @date 2021/7/26 15:29
+ */
+public class NET_SMART_KITCHEN_CLOTHES_CHEF_CLOTHES extends NetSDKLib.SdkStructure{
+ public int bChefClothes; // 厨师服相关属性是否生效,true 生效 ,false 不生效
+ public int[] emHasChefClothes=new int[3]; /** 是否有带厨师服 {@link com.netsdk.lib.enumeration.EM_SMART_KITCHEN_CLOTHES_STATE} */
+ public int[] emChefClothesColor=new int[3]; /** 厨师服颜色 {@link com.netsdk.lib.enumeration.EM_SMART_KITCHEN_CLOTHES_COLOUR} */
+ public byte[] byReserved=new byte[1024]; // 预留字段
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_SMART_KITCHEN_CLOTHES_CHEF_HAT.java b/src/main/java/com/netsdk/lib/structure/NET_SMART_KITCHEN_CLOTHES_CHEF_HAT.java
new file mode 100644
index 0000000..bbf7bd3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_SMART_KITCHEN_CLOTHES_CHEF_HAT.java
@@ -0,0 +1,16 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 厨师帽相关属性状态信息
+ * @date 2021/7/26 15:05
+ */
+public class NET_SMART_KITCHEN_CLOTHES_CHEF_HAT extends NetSDKLib.SdkStructure{
+
+ public int bChefHat; // 厨师帽相关属性是否生效,true 生效 ,false 不生效
+ public int[] emHasChefHat=new int[3]; /** 是否有带厨师帽 {@link com.netsdk.lib.enumeration.EM_SMART_KITCHEN_CLOTHES_STATE} */
+ public byte[] byReserved=new byte[1024]; // 预留字段
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_SMART_KITCHEN_CLOTHES_CHEF_MASK.java b/src/main/java/com/netsdk/lib/structure/NET_SMART_KITCHEN_CLOTHES_CHEF_MASK.java
new file mode 100644
index 0000000..56eca82
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_SMART_KITCHEN_CLOTHES_CHEF_MASK.java
@@ -0,0 +1,16 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 口罩相关属性状态信息
+ * @date 2021/7/26 14:56
+ */
+public class NET_SMART_KITCHEN_CLOTHES_CHEF_MASK extends NetSDKLib.SdkStructure {
+ public int bChefMask; // 口罩相关属性是否生效,true 生效 ,false 不生效
+ public int[] emHasMask=new int[3]; /** 是否有带口罩 {@link com.netsdk.lib.enumeration.EM_SMART_KITCHEN_CLOTHES_STATE} */
+ public byte[] byReserved=new byte[1024]; // 预留字段
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_SMART_VALUE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_SMART_VALUE_INFO.java
new file mode 100644
index 0000000..89cf555
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_SMART_VALUE_INFO.java
@@ -0,0 +1,50 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 设备SMART信息
+ * @date 2022/05/30 14:43:22
+ */
+public class NET_SMART_VALUE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 属性ID
+ */
+ public int nID;
+ /**
+ * 属性名
+ */
+ public byte[] szName = new byte[32];
+ /**
+ * 属性值
+ */
+ public int nCurrent;
+ /**
+ * 最大出错值
+ */
+ public int nWorst;
+ /**
+ * 阈值
+ */
+ public int nThreshold;
+ /**
+ * 实际值
+ */
+ public byte[] szRaw = new byte[32];
+ /**
+ * 状态
+ */
+ public int nPredict;
+ /**
+ * Raid同步状态, -1: 未知; 0: 自适应; 1: 同步优先,I/O优先分给Raid同步; 2:业务优先,I/O优先分给硬盘写数据; 3: 均衡
+ */
+ public int nSync;
+ /**
+ * 保留字节
+ */
+ public byte[] szResvered = new byte[256];
+
+ public NET_SMART_VALUE_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_SMOKE_DETECTION_RULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_SMOKE_DETECTION_RULE_INFO.java
new file mode 100644
index 0000000..9843c45
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_SMOKE_DETECTION_RULE_INFO.java
@@ -0,0 +1,45 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+import com.netsdk.lib.enumeration.NET_EM_SCENEDETECTION_TYPE;
+import com.netsdk.lib.NetSDKLib.POINTCOORDINATE;
+/**
+ * @description 事件类型EVENT_IVS_SMOKEDETECTION(烟雾检测事件) 对应的规则配置
+ * @author 119178
+ * @date 2021/3/11
+ */
+public class NET_SMOKE_DETECTION_RULE_INFO extends SdkStructure{
+ /**
+ * 检测区顶点数
+ */
+ public int nDetectRegionPoint;
+ /**
+ * 字节对齐
+ */
+ public byte[] byReserved1= new byte[4];
+ /**
+ * 检测区
+ */
+ public POINTCOORDINATE[] stuDetectRegion=(POINTCOORDINATE[])new POINTCOORDINATE().toArray(20);
+ /**
+ * 最短持续时间,单位:秒 0~65535
+ */
+ public int nMinDuration;
+ /**
+ * 灵敏度,范围[1,10],灵敏度越高越容易检测
+ */
+ public int nSensitivity;
+ /**
+ * 重复报警时间,单位:秒,范围0-3600.无该字段时,不做处理
+ */
+ public int nRepeatAlarmTime;
+ /**
+ * 场景类型
+ * {@link NET_EM_SCENEDETECTION_TYPE}
+ */
+ public int emSceneType;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[4096];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_SMOKING_DETECT.java b/src/main/java/com/netsdk/lib/structure/NET_SMOKING_DETECT.java
new file mode 100644
index 0000000..df562ff
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_SMOKING_DETECT.java
@@ -0,0 +1,19 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 吸烟检测结果
+* @date 2022/06/28 19:44:56
+*/
+public class NET_SMOKING_DETECT extends NetSDKLib.SdkStructure {
+/**
+包围盒
+*/
+public NET_RECT stuBoundingBox=new NET_RECT();
+
+public NET_SMOKING_DETECT(){
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_SPACE_MODE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_SPACE_MODE_INFO.java
new file mode 100644
index 0000000..dda3fa0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_SPACE_MODE_INFO.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 车位模式统计信息
+ * @date 2021/12/18
+ */
+public class NET_SPACE_MODE_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 车位编号
+ */
+ public byte[] szParkNo = new byte[32];
+
+ /**
+ * 车位类型,参考{ @link EM_SPACE_TYPE}
+ */
+ public int emSpaceType;
+
+ /**
+ * 该车位是否有车
+ */
+ public boolean bUsed;
+
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[256];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_SPECIAL_DATE_PLANS_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_SPECIAL_DATE_PLANS_INFO.java
new file mode 100644
index 0000000..92a257e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_SPECIAL_DATE_PLANS_INFO.java
@@ -0,0 +1,50 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 特殊调度列表信息
+ * @date 2021/09/28
+ */
+public class NET_SPECIAL_DATE_PLANS_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 日方案编号,从1开始
+ */
+ public int nDatePlanNumber;
+
+ /**
+ * 日期开始月份
+ */
+ public int nBeginMonth;
+
+ /**
+ * 日期开始日
+ */
+ public int nBeginDay;
+
+ /**
+ * 日期结束月份
+ */
+ public int nEndMonth;
+
+ /**
+ * 日期结束日
+ */
+ public int nEndDay;
+
+ /**
+ * 周计划编号
+ */
+ public int nWeekPlanNumber;
+
+ /**
+ * 周计划名称
+ */
+ public byte[] szWeekPlanName = new byte[64];
+
+ /**
+ * 预留字节
+ */
+ public byte[] szReserved = new byte[32];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_SPECIAL_DATE_PLAN_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_SPECIAL_DATE_PLAN_INFO.java
new file mode 100644
index 0000000..0714a89
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_SPECIAL_DATE_PLAN_INFO.java
@@ -0,0 +1,50 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 特殊调度列表信息
+ * @date 2021/09/27
+ */
+public class NET_SPECIAL_DATE_PLAN_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 特殊调度编号
+ */
+ public int nDatePlanNumber;
+
+ /**
+ * 日期开始月份
+ */
+ public int nBeginMonth;
+
+ /**
+ * 日期开始日
+ */
+ public int nBeginDay;
+
+ /**
+ * 日期结束月份
+ */
+ public int nEndMonth;
+
+ /**
+ * 日期结束日
+ */
+ public int nEndDay;
+
+ /**
+ * 周计划
+ */
+ public int nWeekPlanNumber;
+
+ /**
+ * 周计划名称
+ */
+ public byte[] szWeekPlanName = new byte[32];
+
+ /**
+ * 预留字节
+ */
+ public byte[] szReserved = new byte[32];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_SPECIAL_DAYS_SCHEDULE.java b/src/main/java/com/netsdk/lib/structure/NET_SPECIAL_DAYS_SCHEDULE.java
new file mode 100644
index 0000000..2e74aa4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_SPECIAL_DAYS_SCHEDULE.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+public class NET_SPECIAL_DAYS_SCHEDULE extends NetSDKLib.SdkStructure {
+ /**
+ * 是否支持假日计划
+ */
+ public boolean bSupport;
+ /**
+ * 设备支持的最大计划数量
+ */
+ public int nMaxSpecialDaysSchedules;
+ /**
+ * 每天最多的时间段
+ */
+ public int nMaxTimePeriodsPerDay;
+ /**
+ * 设备支持的最大假日组数
+ */
+ public int nMaxSpecialDayGroups;
+ /**
+ * ,每个假日组里最大的假日数
+ */
+ public int nMaxDaysInSpecialDayGroup;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved=new byte[128];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_SPECIAL_DAYS_SCHEDULE_CAPS.java b/src/main/java/com/netsdk/lib/structure/NET_SPECIAL_DAYS_SCHEDULE_CAPS.java
new file mode 100644
index 0000000..39e9136
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_SPECIAL_DAYS_SCHEDULE_CAPS.java
@@ -0,0 +1,40 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 假日计划能力
+* @origin autoTool
+* @date 2023/02/10 14:34:20
+*/
+public class NET_SPECIAL_DAYS_SCHEDULE_CAPS extends NetSDKLib.SdkStructure {
+/**
+是否支持假日计划
+*/
+public int bSupport;
+/**
+设备支持的最大计划数量
+*/
+public int nMaxSpecialDaysSchedules;
+/**
+每天最多的时间段
+*/
+public int nMaxTimePeriodsPerDay;
+/**
+设备支持的最大假日组数
+*/
+public int nMaxSpecialDayGroups;
+/**
+每个假日组里最大的假日数
+*/
+public int nMaxDaysInSpecialDayGroup;
+/**
+保留字节
+*/
+public byte[] byReserved=new byte[128];
+
+public NET_SPECIAL_DAYS_SCHEDULE_CAPS(){
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_SPEED_LIMIT.java b/src/main/java/com/netsdk/lib/structure/NET_SPEED_LIMIT.java
new file mode 100644
index 0000000..ee0ebee
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_SPEED_LIMIT.java
@@ -0,0 +1,18 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+/**
+ * @description 速度限制
+ * @author 119178
+ * @date 2021/3/11
+ */
+public class NET_SPEED_LIMIT extends SdkStructure{
+ /**
+ * 速度上限
+ */
+ public int nSpeedUpperLimit;
+ /**
+ * 速度下限
+ */
+ public int nSpeedLowerLimit;
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_SPLIT_OSD.java b/src/main/java/com/netsdk/lib/structure/NET_SPLIT_OSD.java
new file mode 100644
index 0000000..2f206a4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_SPLIT_OSD.java
@@ -0,0 +1,88 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 分割窗口OSD信息
+ * @date 2022/06/22 09:56:21
+ */
+public class NET_SPLIT_OSD extends NetSDKLib.SdkStructure {
+
+ public int dwSize;
+ /**
+ * 使能
+ */
+ public int bEnable;
+ /**
+ * 前景颜色
+ */
+ public NET_COLOR_RGBA stuFrontColor = new NET_COLOR_RGBA();
+ /**
+ * 背景颜色
+ */
+ public NET_COLOR_RGBA stuBackColor = new NET_COLOR_RGBA();
+ /**
+ * 前景区域
+ */
+ public NetSDKLib.DH_RECT stuFrontRect = new NetSDKLib.DH_RECT();
+ /**
+ * 背景区域
+ */
+ public NetSDKLib.DH_RECT stuBackRect = new NetSDKLib.DH_RECT();
+ /**
+ * 是否滚动显示, 只对文本有效
+ */
+ public int bRoll;
+ /**
+ * 滚动模式, 只对文本有效, 0-从左往右, 1-从右往左, 2-从上往下滚动, 3-从下往上滚动
+ */
+ public byte byRollMode;
+ /**
+ * 滚动速率, 只对文本有效, 0~4, 数值越大滚动越快
+ */
+ public byte byRoolSpeed;
+ /**
+ * 字体大小, 只对文本有效
+ */
+ public byte byFontSize;
+ /**
+ * 对齐方式, 0-靠左, 1-居中, 2-靠右
+ */
+ public byte byTextAlign;
+ /**
+ * OSD类型, 0-文本, 1-图标, 2-时间, 3-星期, 4-日期, 5-日期+星期, 6-日期+时间, 7-星期+时间, 8-日期+星期+时间
+ */
+ public byte byType;
+ /**
+ * 保留字节
+ */
+ public byte[] Reserved = new byte[3];
+ /**
+ * OSD内容 若类型为图标, 内容为图标名称
+ * 若类型为Time,内容为”Date”(日期),”Week”(星期),”Time”(时间),”\n”(换行)的自由组合。
+ * 例如:不同行显示,需要将此字段填为"Date\nTime",在屏幕上就会显示 2018年4月23日 16:49:15
+ * 同行显示,需要将此字段填为"DateTime",在屏幕上就会显示 2018年4月23日16:49:15
+ */
+ public byte[] szContent = new byte[260];
+ /**
+ * null
+ */
+ public float fPitch;
+ /**
+ * 字体类型
+ */
+ public byte[] szFontType = new byte[64];
+ /**
+ * 文本显示模式 Row:横排(默认) Column:竖排
+ */
+ public byte[] szPattern = new byte[8];
+ /**
+ * OSD内容
+ */
+ public byte[] szContentEx = new byte[1024];
+
+ public NET_SPLIT_OSD() {
+ this.dwSize = this.size();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_STAFF_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_STAFF_INFO.java
new file mode 100644
index 0000000..a2ca2ac
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_STAFF_INFO.java
@@ -0,0 +1,29 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.DH_POINT;
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+import com.netsdk.lib.enumeration.NET_EM_STAFF_TYPE;
+/**
+ * @description 标尺信息
+ * @author 119178
+ * @date 2021/3/16
+ */
+public class NET_STAFF_INFO extends SdkStructure{
+ /**
+ * 起始坐标点
+ */
+ public DH_POINT stuStartLocation=new DH_POINT();
+ /**
+ * 终止坐标点
+ */
+ public DH_POINT stuEndLocation=new DH_POINT();
+ /**
+ * 实际长度,单位米
+ */
+ public float nLenth;
+ /**
+ * 标尺类型
+ * {@link NET_EM_STAFF_TYPE}
+ */
+ public int emType;
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_START_FIND_WATERDATA_CONDITION.java b/src/main/java/com/netsdk/lib/structure/NET_START_FIND_WATERDATA_CONDITION.java
new file mode 100644
index 0000000..9dbf0ca
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_START_FIND_WATERDATA_CONDITION.java
@@ -0,0 +1,43 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 水质检测数据查询条件
+* @date 2022/08/22 17:12:11
+*/
+public class NET_START_FIND_WATERDATA_CONDITION extends NetSDKLib.SdkStructure {
+/**
+开始时间
+*/
+public NET_TIME_EX stuStartTime=new NET_TIME_EX();
+/**
+检测类型 {@link com.netsdk.lib.enumeration.EM_WATER_DETECTION_ALARM_TYPE}
+*/
+public int[] emType=new int[32];
+/**
+检测类型个数
+*/
+public int nTypeNum;
+/**
+预置点个数
+*/
+public int nPresetIDNum;
+/**
+预置点
+*/
+public int[] nPresetID=new int[32];
+/**
+结束时间
+*/
+public NET_TIME_EX stuEndTime=new NET_TIME_EX();
+/**
+预留字节
+*/
+public byte[] szReserved=new byte[256];
+
+public NET_START_FIND_WATERDATA_CONDITION(){
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_STAT_ATTRIBUTE.java b/src/main/java/com/netsdk/lib/structure/NET_STAT_ATTRIBUTE.java
new file mode 100644
index 0000000..94b01e7
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_STAT_ATTRIBUTE.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 属性计数信息
+* @date 2023/02/06 16:07:27
+*/
+public class NET_STAT_ATTRIBUTE extends NetSDKLib.SdkStructure {
+/**
+目标及属性组合的计数
+*/
+public int nNumber;
+/**
+属性组合个数
+*/
+public int nAttrMapNumber;
+/**
+属性组合
+*/
+public NET_STAT_ATTRMAP[] stuAttrMap=new NET_STAT_ATTRMAP[20];
+/**
+预留字节
+*/
+public byte[] szReserved=new byte[128];
+
+public NET_STAT_ATTRIBUTE(){
+ for(int i=0;i\else
+ * \endif
+ * @date 2020/8/11
+ */
+public class NET_TIME_EX extends NetSDKLib.SdkStructure {
+ /** 年 */
+ public int dwYear;
+ /** 月 */
+ public int dwMonth;
+ /** 日 */
+ public int dwDay;
+ /** 时 */
+ public int dwHour;
+ /** 分 */
+ public int dwMinute;
+ /** 秒 */
+ public int dwSecond;
+ /** 毫秒 */
+ public int dwMillisecond;
+ /** utc时间(获取时0表示无效,非0有效 下发无效) */
+ public int dwUTC;
+ /** 保留字段 */
+ public int[] dwReserved = new int[1];
+
+ public void setTime(int year, int month, int day, int hour, int minute, int second) {
+ this.dwYear = year;
+ this.dwMonth = month;
+ this.dwDay = day;
+ this.dwHour = hour;
+ this.dwMinute = minute;
+ this.dwSecond = second;
+ this.dwMillisecond = 0;
+ }
+
+ public String toString() {
+ return dwYear + "/" + dwMonth + "/" + dwDay + " " + dwHour + ":" + dwMinute + ":" + dwSecond;
+ }
+
+ // 用于列表中显示
+ public String toStringTime() {
+ return String.format(
+ "%02d/%02d/%02d %02d:%02d:%02d", dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond);
+ }
+
+ // 存储文件名使用
+ public String toStringTitle() {
+ return String.format(
+ "Time_%02d%02d%02d_%02d%02d%02d", dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond);
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TIME_EX1.java b/src/main/java/com/netsdk/lib/structure/NET_TIME_EX1.java
new file mode 100644
index 0000000..35218e2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TIME_EX1.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 时间拓展结构体
+ * @date 2020/9/10
+ */
+public class NET_TIME_EX1 extends NetSDKLib.SdkStructure {
+ /**
+ * 时
+ */
+ public int dwHour;
+ /**
+ * 分
+ */
+ public int dwMinute;
+ /**
+ * 秒
+ */
+ public int dwSecond;
+
+ public String toTime() {
+ return dwHour + ":" + dwMinute + ":" + dwSecond;
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TIME_RECORDBACKUP_TASK.java b/src/main/java/com/netsdk/lib/structure/NET_TIME_RECORDBACKUP_TASK.java
new file mode 100644
index 0000000..5dee9a8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TIME_RECORDBACKUP_TASK.java
@@ -0,0 +1,18 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+
+public class NET_TIME_RECORDBACKUP_TASK extends SdkStructure{
+ public int nChannelCount; // 通道有效个数
+ public int[] nChannels=new int[512]; // 通道号
+ public int[] nRemoteChannels=new int[512]; // 远程通道号
+
+ public byte[] szDeviceIP=new byte[64]; // IP地址
+ public int nPort; // 端口
+ public byte[] szUserName=new byte[64]; // 用户名
+ public byte[] szPassword=new byte[64]; // 密码
+ public NET_TIME_EX1 stuStartTime; // 开始时间
+ public NET_TIME_EX1 stuEndTime; // 结束时间
+ public byte[] szStorageGroupName=new byte[32]; // 保存的盘组名称
+ public byte[] byReserved=new byte[512]; // 保留字段
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFICCAR_ORIGINAL_VEHICLE.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFICCAR_ORIGINAL_VEHICLE.java
new file mode 100644
index 0000000..359a9f8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFICCAR_ORIGINAL_VEHICLE.java
@@ -0,0 +1,31 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 车身抠图
+ * @date 2022/07/20 16:46:40
+ */
+public class NET_TRAFFICCAR_ORIGINAL_VEHICLE extends NetSDKLib.SdkStructure {
+ /**
+ * 在二进制数据块中的偏移
+ */
+ public int nOffset;
+ /**
+ * 数据大小,单位:字节
+ */
+ public int nLength;
+ /**
+ * 在上传图片数据中的图片序号
+ */
+ public int nIndexInData;
+ /**
+ * 保留字节
+ */
+ public byte[] szReserved = new byte[60];
+
+ public NET_TRAFFICCAR_ORIGINAL_VEHICLE() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFICLIGHT_CHANNEL_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFICLIGHT_CHANNEL_INFO.java
new file mode 100644
index 0000000..880093e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFICLIGHT_CHANNEL_INFO.java
@@ -0,0 +1,43 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * className:NET_TRAFFICLIGHT_CHANNEL_INFO
+ * description:
+ * author:251589
+ * createTime:2021/1/19 15:08
+ *
+ * @version v1.0
+ */
+public class NET_TRAFFICLIGHT_CHANNEL_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 检测通道
+ */
+ public int nChannel;
+
+ /**
+ * 进口方向
+ */
+ public int emEntryDirection;
+
+ /**
+ * 进口类型
+ */
+ public int[] emEntryType = new int[32];
+ /**
+ * 进口类型个数
+ */
+ public int nRetEntryTypeNum;
+
+ /**
+ * 红绿灯状态
+ */
+ public int emLightState;
+
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[368];
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFICLIGHT_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFICLIGHT_INFO.java
new file mode 100644
index 0000000..dfeb85f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFICLIGHT_INFO.java
@@ -0,0 +1,49 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * className:NET_TRAFFICLIGHT_INFO
+ * description:交通信号灯信息
+ * author:251589
+ * createTime:2021/1/19 15:04
+ *
+ * @version v1.0
+ */
+public class NET_TRAFFICLIGHT_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * UTC时间, 发生红绿灯切换时的时间, 本地时区
+ */
+ public NET_TIME stuUTC;
+
+ /**
+ * stuChannels 有效个数
+ */
+ public int nRetChannelNum;
+
+ /**
+ * 通道信息
+ */
+ public NET_TRAFFICLIGHT_CHANNEL_INFO[] stuChannels = (NET_TRAFFICLIGHT_CHANNEL_INFO[])new NET_TRAFFICLIGHT_CHANNEL_INFO().toArray(32);
+
+ /**
+ * nLightChangedChannels 有效个数
+ */
+ public int nRetLightChangedNum;
+
+ /**
+ * 发生红绿灯变换的通道
+ */
+ public int[] nLightChangedChannels = new int[32];
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[512];
+
+ public NET_TRAFFICLIGHT_INFO(){
+ for (int i = 0; i < stuChannels.length; i++){
+ stuChannels[i] = new NET_TRAFFICLIGHT_CHANNEL_INFO();
+ }
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_ACCIDENT_RULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_ACCIDENT_RULE_INFO.java
new file mode 100644
index 0000000..f6c1a2c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_ACCIDENT_RULE_INFO.java
@@ -0,0 +1,71 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+import com.netsdk.lib.NetSDKLib.POINTCOORDINATE;
+/**
+ * @description 事件类型EVENT_IVS_TRAFFICACCIDENT(交通事故) 对应的规则配置
+ * @author 119178
+ * @date 2021/3/11
+ */
+public class NET_TRAFFIC_ACCIDENT_RULE_INFO extends SdkStructure{
+ /**
+ * 检测区
+ */
+ public POINTCOORDINATE[] stuDetectRegion=(POINTCOORDINATE[])new POINTCOORDINATE().toArray(20);
+ /**
+ * 检测区顶点数
+ */
+ public int nDetectRegionPoint;
+ /**
+ * 车道编号 与场景中的车道号对应
+ */
+ public int nLaneNumber;
+ /**
+ * 最短触发时间,单位:秒
+ */
+ public int nMinDuration;
+ /**
+ * 变倍抓拍,违停球做规则判断时,默认会变倍
+ * 如下两种情况不适合变倍
+ * 1. 车速较快场合,变倍会导致跟踪不及时
+ * 2. 车牌很近,由于机芯的光轴畸变会导致车牌过大,算法无法识别
+ * 在以上这两种情况下,需要关闭变倍。是否要关闭变倍取决于现场情况,属于比较专业的配置
+ */
+ public int bZoomEnable;
+ /**
+ * 变倍停留时间,单位:秒,在ZoomEnable为true时有效,为0时表示不停留,默认为0
+ */
+ public int nZoomStayTime;
+ /**
+ * 车辆触发报警时间阈值,大于该阈值认为是交通事件,单位:秒,范围0-3600
+ */
+ public int nVehicleDelayTime;
+ /**
+ * 行人触发报警时间阈值,大于该阈值认为是交通事件,单位:秒,范围0-3600
+ */
+ public int nPersonDelayTime;
+ /**
+ * 最大报警时长 超过此时间将不再报警,单位:秒,范围0-3600
+ */
+ public int nMaxDelayTime;
+ /**
+ * 拥堵状态下的停车数阈值,用于拥堵造成的交通事故,不做报警
+ */
+ public int nVehicleNumberThreshold;
+ /**
+ * 追尾后停车时间阈值,超过阈值报警,单位ms 0~65535
+ */
+ public int nWanderTime;
+ /**
+ * 重复报警时间,单位ms; 0~65535
+ */
+ public int nRepeatTime;
+ /**
+ * 是否需要关联行人才报警,false为不关联,true为关联
+ */
+ public int bRelateHuman;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved=new byte[4096];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_BACKING_RULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_BACKING_RULE_INFO.java
new file mode 100644
index 0000000..fbaed9a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_BACKING_RULE_INFO.java
@@ -0,0 +1,77 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.DH_POINT;
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+import com.netsdk.lib.NetSDKLib.POINTCOORDINATE;
+
+/**
+ * @description 事件类型EVENT_IVS_TRAFFIC_BACKING(倒车) 对应的规则配置
+ * @author 119178
+ * @date 2021/3/11
+ */
+public class NET_TRAFFIC_BACKING_RULE_INFO extends SdkStructure{
+ /**
+ * 检测区
+ */
+ public POINTCOORDINATE[] stuDetectRegion=(POINTCOORDINATE[])new POINTCOORDINATE().toArray(20);
+ /**
+ * 检测区顶点数
+ */
+ public int nDetectRegionPoint;
+ /**
+ * 车道编号 与场景中的车道号对应
+ */
+ public int nLaneNumber;
+ /**
+ * 起点,从起点到终点是正向行驶,反过来是逆行,点的坐标归一化到[0,8192)区间。
+ */
+ public DH_POINT stuDirectionStart;
+ /**
+ * 终点,从起点到终点是正向行驶,反过来是逆行,点的坐标归一化到[0,8192)区间。
+ */
+ public DH_POINT stuDirectionEnd;
+ /**
+ * 灵敏度,范围[1,10],灵敏度越高越容易检测
+ */
+ public int nSensitivity;
+ /**
+ * 是否使能区域内触发该规则, false-不使能,true-使能
+ */
+ public int bAreaTrigEnable;
+ /**
+ * 方案参数, false-普通变道(只要变道一次即可),true -抓连续变道(变道2次及以上)
+ */
+ public int bContinueCrossLaneEnable;
+ /**
+ * 变倍抓拍,违停球做规则判断时,默认会变倍
+ * 如下两种情况不适合变倍
+ * 1. 车速较快场合,变倍会导致跟踪不及时
+ * 2. 车牌很近,由于机芯的光轴畸变会导致车牌过大,算法无法识别
+ * 在以上这两种情况下,需要关闭变倍。是否要关闭变倍取决于现场情况,属于比较专业的配置
+ */
+ public int bZoomEnable;
+ /**
+ * 是否抓拍摩托车
+ */
+ public int bSnapMotorcycle;
+ /**
+ * 事件检测模式下,配置给算法,表示检测到事件发生后,多长时间开始报警,单位:秒,范围0-3600,无该字段不做处理
+ */
+ public int nDelayTime;
+ /**
+ * 规则特定的尺寸过滤器
+ */
+ public NET_CFG_SIZEFILTER_INFO stuSizeFileter;
+ /**
+ * 规则特定的尺寸过滤器是否有效
+ */
+ public int bSizeFileter;
+ /**
+ * 是否抓拍无牌车,true-抓拍无牌车 false-不抓拍无牌车
+ */
+ public int bSnapNoPlateMotor;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[4092];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_CAR_ATTRIBUTE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_CAR_ATTRIBUTE_INFO.java
new file mode 100644
index 0000000..c25fdc2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_CAR_ATTRIBUTE_INFO.java
@@ -0,0 +1,63 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 260611
+ * @description 车辆以图搜图时可选择的属性过滤条件
+ * @date 2022/11/21 17:53:18
+ */
+public class NET_TRAFFIC_CAR_ATTRIBUTE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 车身颜色的个数,最大值是32
+ */
+ public int nVehicleColorArrayNums;
+ /**
+ * 车身颜色
+ */
+ public int[] emVehicleColorArray = new int[32];
+ /**
+ * 车辆类型的个数,最大值是32
+ */
+ public int nCategoryArrayNums;
+ /**
+ * 车辆类型
+ */
+ public int[] emCategoryArray = new int[32];
+ /**
+ * 车标
+ */
+ public byte[] szVehicleSign = new byte[64];
+ /**
+ * 车辆子品牌 需要通过映射表得到真正的子品牌 映射表详见开发手册
+ */
+ public int nSubBrand;
+ /**
+ * 车辆年款 需要通过映射表得到真正的年款 映射表详见开发手册
+ */
+ public int nBrandYear;
+ /**
+ * 是否有摆件, 0: 不限 1: 无 2: 有
+ */
+ public int nFurniture;
+ /**
+ * 是否有挂件, 0: 不限 1: 无 2: 有
+ */
+ public int nPendant;
+ /**
+ * 是否有年检标, 0: 不限 1: 无 2: 有
+ */
+ public int nAnnualInspection;
+ /**
+ * 是否有遮阳板, 0: 不限 1: 无 2: 有
+ */
+ public int nSunShade;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[256];
+
+ public NET_TRAFFIC_CAR_ATTRIBUTE_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_CROSSLANE_RULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_CROSSLANE_RULE_INFO.java
new file mode 100644
index 0000000..9e40584
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_CROSSLANE_RULE_INFO.java
@@ -0,0 +1,76 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.DH_POINT;
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+import com.netsdk.lib.NetSDKLib.POINTCOORDINATE;
+/**
+ * @description 事件类型EVENT_IVS_TRAFFIC_CROSSLANE(违章变道事件) 对应的规则配置
+ * @author 119178
+ * @date 2021/3/11
+ */
+public class NET_TRAFFIC_CROSSLANE_RULE_INFO extends SdkStructure{
+ /**
+ * 检测区
+ */
+ public POINTCOORDINATE[] stuDetectRegion=(POINTCOORDINATE[])new POINTCOORDINATE().toArray(20);
+ /**
+ * 检测区顶点数
+ */
+ public int nDetectRegionPoint;
+ /**
+ * 车道编号 与场景中的车道号对应
+ */
+ public int nLaneNumber;
+ /**
+ * 起点,从起点到终点是正向行驶,反过来是逆行,点的坐标归一化到[0,8192)区间。
+ */
+ public DH_POINT stuDirectionStart;
+ /**
+ * 终点,从起点到终点是正向行驶,反过来是逆行,点的坐标归一化到[0,8192)区间。
+ */
+ public DH_POINT stuDirectionEnd;
+ /**
+ * 灵敏度,范围[1,10],灵敏度越高越容易检测
+ */
+ public int nSensitivity;
+ /**
+ * 是否使能区域内触发该规则, false-不使能,true-使能
+ */
+ public int bAreaTrigEnable;
+ /**
+ * 方案参数, false-普通变道(只要变道一次即可),true -抓连续变道(变道2次及以上)
+ */
+ public int bContinueCrossLaneEnable;
+ /**
+ * 变倍抓拍,违停球做规则判断时,默认会变倍
+ * 如下两种情况不适合变倍
+ * 1. 车速较快场合,变倍会导致跟踪不及时
+ * 2. 车牌很近,由于机芯的光轴畸变会导致车牌过大,算法无法识别
+ * 在以上这两种情况下,需要关闭变倍。是否要关闭变倍取决于现场情况,属于比较专业的配置
+ */
+ public int bZoomEnable;
+ /**
+ * 是否抓拍摩托车
+ */
+ public int bSnapMotorcycle;
+ /**
+ * 事件检测模式下,配置给算法,表示检测到事件发生后,多长时间开始报警,单位:秒,范围0-3600,无该字段不做处理
+ */
+ public int nDelayTime;
+ /**
+ * 规则特定的尺寸过滤器
+ */
+ public NET_CFG_SIZEFILTER_INFO stuSizeFileter;
+ /**
+ * 规则特定的尺寸过滤器是否有效
+ */
+ public int bSizeFileter;
+ /**
+ * 是否抓拍无牌车,true-抓拍无牌车 false-不抓拍无牌车
+ */
+ public int bSnapNoPlateMotor;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[4092];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_FLOWSTAT_INFO_DIR.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_FLOWSTAT_INFO_DIR.java
new file mode 100644
index 0000000..f02da74
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_FLOWSTAT_INFO_DIR.java
@@ -0,0 +1,48 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
+
+/**
+ * @author : 260611
+ * @description : 车辆流量统计车辆行驶方向信息
+ * @since : Created in 2022/03/10 10:12
+ */
+
+public class NET_TRAFFIC_FLOWSTAT_INFO_DIR extends NetSDKLib.SdkStructure {
+ /**
+ * 行驶方向
+ */
+ public int emDrivingDir;
+ /**
+ * 上行地点
+ */
+ public byte[] szUpGoing = new byte[16];
+ /**
+ * 下行地点
+ */
+ public byte[] szDownGoing = new byte[16];
+ /**
+ * 保留字节
+ */
+ public byte[] reserved = new byte[32];
+
+ @Override
+ public String toString() {
+ try {
+ return "NET_TRAFFIC_FLOWSTAT_INFO_DIR{" +
+ "emDrivingDir=" + emDrivingDir +
+ ", szUpGoing UTF-8=" + new String(szUpGoing,"UTF-8").trim() +
+ ", szUpGoing GBK=" + new String(szUpGoing,"GBK").trim() +
+ ", szDownGoing UTF-8=" + new String(szDownGoing,"UTF-8").trim() +
+ ", szDownGoing GBK=" + new String(szDownGoing,"GBK").trim() +
+ '}';
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_FLOWSTAT_RULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_FLOWSTAT_RULE_INFO.java
new file mode 100644
index 0000000..9289140
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_FLOWSTAT_RULE_INFO.java
@@ -0,0 +1,41 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.DH_POINT;
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+import com.netsdk.lib.NetSDKLib.POINTCOORDINATE;
+/**
+ * @description 事件类型EVENT_IVS_TRAFFIC_FLOWSTATE(交通流量统计事件) 对应的规则配置
+ * @author 119178
+ * @date 2021/3/11
+ */
+public class NET_TRAFFIC_FLOWSTAT_RULE_INFO extends SdkStructure{
+ /**
+ * 检测区
+ */
+ public POINTCOORDINATE[] stuDetectRegion = (POINTCOORDINATE[])new POINTCOORDINATE().toArray(20);
+ /**
+ * 检测区顶点数
+ */
+ public int nDetectRegionPoint;
+ /**
+ * 规则检测线顶点数
+ */
+ public int nDetectLineNum;
+ /**
+ * 规则检测线
+ */
+ public DH_POINT[] DetectLine = (DH_POINT[])new DH_POINT().toArray(NetSDKLib.NET_MAX_DETECT_LINE_NUM);
+ /**
+ * 车道编号 与场景中的车道号对应
+ */
+ public int nLaneNumber;
+ /**
+ * 统计周期,单位:分钟
+ */
+ public int nPeriod;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[4096];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_FLOW_STAT.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_FLOW_STAT.java
new file mode 100644
index 0000000..9e15ac3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_FLOW_STAT.java
@@ -0,0 +1,61 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.EM_DETECT_SENSOR_TYPE;
+import com.netsdk.lib.enumeration.EM_TRAFFIC_FLOW_STATUS;
+import com.netsdk.lib.enumeration.EM_VIRTUAL_COIL_OCCUPANCY_STATUS;
+
+/**
+ * @author : 47040
+ * @since : Created in 2020/12/17 11:38
+ */
+public class NET_TRAFFIC_FLOW_STAT extends NetSDKLib.SdkStructure {
+ /**
+ * 物理车道号
+ */
+ public int nLane;
+ /**
+ * 自定义车道号
+ */
+ public int nRoadwayNumber;
+ /**
+ * 流量状态 枚举 {@link EM_TRAFFIC_FLOW_STATUS}
+ */
+ public int emStatus;
+ /**
+ * 车头虚拟线圈状态, 即车进线圈 枚举 {@link EM_VIRTUAL_COIL_OCCUPANCY_STATUS}
+ */
+ public int emHeadCoil;
+ /**
+ * 车尾虚拟线圈状态, 即车出线圈 枚举 {@link EM_VIRTUAL_COIL_OCCUPANCY_STATUS}
+ */
+ public int emTailCoil;
+ /**
+ * 车道平均速度(单位:km/h)
+ */
+ public int nSpeed;
+ /**
+ * 排队长度(单位:cm)
+ */
+ public int nQueueLen;
+ /**
+ * 排队车辆数
+ */
+ public int nCarsInQueue;
+ /**
+ * 探测物体的传感器类型 {@link EM_DETECT_SENSOR_TYPE}
+ */
+ public int emSensorType;
+ /**
+ * 车头间距,相邻车辆之间的距离,单位米/辆
+ */
+ public double dbSpaceHeadway;
+ /**
+ * 车头时距,单位秒/辆
+ */
+ public double dbTimeHeadWay;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserverd = new byte[240];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_FLOW_STATE.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_FLOW_STATE.java
new file mode 100644
index 0000000..f628678
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_FLOW_STATE.java
@@ -0,0 +1,339 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+import java.util.Arrays;
+
+/**
+ * @author : 260611
+ * @description : NET_TRAFFIC_FLOW_STATE
+ * @since : Created in 2022/03/10 10:12
+ */
+
+public class NET_TRAFFIC_FLOW_STATE extends NetSDKLib.SdkStructure {
+ /**
+ * 车道号
+ */
+ public int nLane;
+ /**
+ * 状态值 若emJamState字段为有效值(不为 JAM_STATUS_UNKNOW) ,则dwState字段无效
+ */
+ public int dwState;
+ /**
+ * 流量值, 单位: 辆
+ */
+ public int dwFlow;
+ /**
+ * 流量值对应的统计时间, 单位:分钟。与dwPeriodByMili一起使用。
+ */
+ public int dwPeriod;
+ /**
+ * 车道方向信息
+ */
+ public NET_TRAFFIC_FLOWSTAT_INFO_DIR stTrafficFlowDir = new NET_TRAFFIC_FLOWSTAT_INFO_DIR();
+ /**
+ * 通过车辆总数
+ */
+ public int nVehicles;
+ /**
+ * 平均车速,单位km/h
+ */
+ public float fAverageSpeed;
+ /**
+ * 平均车长,单位米
+ */
+ public float fAverageLength;
+ /**
+ * 时间占有率,即单位时间内通过断面的车辆所用时间的总和占单位时间的比例
+ */
+ public float fTimeOccupyRatio;
+ /**
+ * 空间占有率,即按百分率计量的车辆长度总和除以时间间隔内车辆平均行驶距离
+ */
+ public float fSpaceOccupyRatio;
+ /**
+ * 车头间距,相邻车辆之间的距离,单位米/辆
+ */
+ public float fSpaceHeadway;
+ /**
+ * 车头时距,单位秒/辆
+ */
+ public float fTimeHeadway;
+ /**
+ * 车辆密度,每公里的车辆数,单位辆/km
+ */
+ public float fDensity;
+ /**
+ * 超速车辆数
+ */
+ public int nOverSpeedVehicles;
+ /**
+ * 低速车辆数
+ */
+ public int nUnderSpeedVehicles;
+ /**
+ * 大车交通量(9米<车长<12米),辆/单位时间
+ */
+ public int nLargeVehicles;
+ /**
+ * 中型车交通量(6米<车长<9米),辆/单位时间
+ */
+ public int nMediumVehicles;
+ /**
+ * 小车交通量(4米<车长<6米),辆/单位时间,
+ */
+ public int nSmallVehicles;
+ /**
+ * 摩托交通量(微型车,车长<4米),辆/单位时间,
+ */
+ public int nMotoVehicles;
+ /**
+ * 超长交通量(车长>=12米),辆/单位时间,
+ */
+ public int nLongVehicles;
+ /**
+ * 交通量, 辆/单位时间, 某时间间隔通过车道、道路或其他通道上一点的车辆数,常以1小时计,
+ */
+ public int nVolume;
+ /**
+ * 流率小车当量,辆/小时, 车辆通过车道、道路某一断面或某一路段的当量小时流量
+ */
+ public int nFlowRate;
+ /**
+ * 排队长度,单位:米, 从信号交叉口停车线到上游排队车辆末端之间的距离(建议废掉 改用dBackOfQueue下面)
+ */
+ public int nBackOfQueue;
+ /**
+ * 旅行时间,单位:秒, 车辆通过某一条道路所用时间。包括所有停车延误
+ */
+ public int nTravelTime;
+ /**
+ * 延误,单位:秒,驾驶员、乘客或行人花费的额外的行程时间
+ */
+ public int nDelay;
+ /**
+ * 车道方向,详见NET_ROAD_DIRECTION
+ */
+ public byte[] byDirection = new byte[16];
+ /**
+ * 车道行驶方向个数
+ */
+ public byte byDirectionNum;
+ /**
+ * 字节对齐
+ */
+ public byte[] reserved1 = new byte[3];
+ /**
+ * 道路拥挤状况 若此字段为有效值(不为 JAM_STATUS_UNKNOW) ,则以此字段为准, dwState字段无效
+ */
+ public int emJamState;
+ /**
+ * 客车交通量(辆/单位时间)
+ */
+ public int nPassengerCarVehicles;
+ /**
+ * 大货车交通量(辆/单位时间)
+ */
+ public int nLargeTruckVehicles;
+ /**
+ * 中货车交通量(辆/单位时间)
+ */
+ public int nMidTruckVehicles;
+ /**
+ * 轿车交通量(辆/单位时间)
+ */
+ public int nSaloonCarVehicles;
+ /**
+ * 面包车交通量(辆/单位时间)
+ */
+ public int nMicrobusVehicles;
+ /**
+ * 小货车交通量(辆/单位时间)
+ */
+ public int nMicroTruckVehicles;
+ /**
+ * 三轮车交通量(辆/单位时间)
+ */
+ public int nTricycleVehicles;
+ /**
+ * 摩托车交通量(辆/单位时间)
+ */
+ public int nMotorcycleVehicles;
+ /**
+ * 行人交通量(辆/单位时间)
+ */
+ public int nPasserbyVehicles;
+ /**
+ * 道路等级
+ */
+ public int emRank;
+ /**
+ * 流量状态
+ */
+ public int nState;
+ /**
+ * 车头虚拟线圈是否被占用 TURE表示占用,FALSE表示未占用
+ */
+ public int bOccupyHeadCoil;
+ /**
+ * 车尾虚拟线圈是否被占用 TURE表示占用,FALSE表示未占用
+ */
+ public int bOccupyTailCoil;
+ /**
+ * 流量数据是否有效 TURE表示有效,FALSE表示无效
+ */
+ public int bStatistics;
+ /**
+ * 左转车辆总数,单位:分钟
+ */
+ public int nLeftVehicles;
+ /**
+ * 右转车辆总数,单位:分钟
+ */
+ public int nRightVehicles;
+ /**
+ * 直行车辆总数,单位:分钟
+ */
+ public int nStraightVehicles;
+ /**
+ * 掉头车辆总数,单位:分钟
+ */
+ public int nUTurnVehicles;
+ /**
+ * 每个车道的最后一辆车坐标,采用8192坐标系
+ */
+ public NetSDKLib.NET_POINT stQueueEnd = new NetSDKLib.NET_POINT();
+ /**
+ * 排队长度,单位:米, 从信号交叉口停车线到上游排队车辆末端之间的距离
+ */
+ public double dBackOfQueue;
+ /**
+ * 流量值的毫秒时间,值不超过60000,和dwPeriod一起使用,流量值总时间:dwPeriod*60*1000+dwPeriodByMili(单位:毫秒)
+ */
+ public int dwPeriodByMili;
+ /**
+ * 公交车交通量(辆/单位时间)
+ */
+ public int nBusVehicles;
+ /**
+ * MPV交通量(辆/单位时间)
+ */
+ public int nMPVVehicles;
+ /**
+ * 中客车交通量(辆/单位时间)
+ */
+ public int nMidPassengerCarVehicles;
+ /**
+ * 微型轿车交通量(辆/单位时间)
+ */
+ public int nMiniCarriageVehicles;
+ /**
+ * 油罐车交通量(辆/单位时间)
+ */
+ public int nOilTankTruckVehicles;
+ /**
+ * 皮卡车交通量(辆/单位时间)
+ */
+ public int nPickupVehicles;
+ /**
+ * SUV交通量(辆/单位时间)
+ */
+ public int nSUVVehicles;
+ /**
+ * SUV或者MPV交通量(辆/单位时间)
+ */
+ public int nSUVorMPVVehicles;
+ /**
+ * 槽罐车交通量(辆/单位时间)
+ */
+ public int nTankCarVehicles;
+ /**
+ * 未知车辆交通量(辆/单位时间)
+ */
+ public int nUnknownVehicles;
+ /**
+ * 车道流量信息属性
+ */
+ public int emCustomFlowAttribute;
+ /**
+ * 道路空闲长度,例:如设定路段长度为100米,实际检测到排队长度为30米,那么道路空闲长度就为70米,单位:米
+ */
+ public int nRoadFreeLength;
+ /**
+ * 溢出状态。例:如给当前路段设定允许排队长度阀值,实际排队长度超过阀值后就判定当前时刻该路段有溢出。
+ */
+ public int emOverflowState;
+ /**
+ * 保留字节
+ */
+ public byte[] reserved = new byte[712];
+
+ @Override
+ public String toString() {
+ return "NET_TRAFFIC_FLOW_STATE{" +
+ "nLane=" + nLane +
+ ", dwState=" + dwState +
+ ", dwFlow=" + dwFlow +
+ ", dwPeriod=" + dwPeriod +
+ ", stTrafficFlowDir=" + stTrafficFlowDir.toString() +
+ ", nVehicles=" + nVehicles +
+ ", fAverageSpeed=" + fAverageSpeed +
+ ", fAverageLength=" + fAverageLength +
+ ", fTimeOccupyRatio=" + fTimeOccupyRatio +
+ ", fSpaceOccupyRatio=" + fSpaceOccupyRatio +
+ ", fSpaceHeadway=" + fSpaceHeadway +
+ ", fTimeHeadway=" + fTimeHeadway +
+ ", fDensity=" + fDensity +
+ ", nOverSpeedVehicles=" + nOverSpeedVehicles +
+ ", nUnderSpeedVehicles=" + nUnderSpeedVehicles +
+ ", nLargeVehicles=" + nLargeVehicles +
+ ", nMediumVehicles=" + nMediumVehicles +
+ ", nSmallVehicles=" + nSmallVehicles +
+ ", nMotoVehicles=" + nMotoVehicles +
+ ", nLongVehicles=" + nLongVehicles +
+ ", nVolume=" + nVolume +
+ ", nFlowRate=" + nFlowRate +
+ ", nBackOfQueue=" + nBackOfQueue +
+ ", nTravelTime=" + nTravelTime +
+ ", nDelay=" + nDelay +
+ ", byDirection=" + Arrays.toString(byDirection) +
+ ", byDirectionNum=" + byDirectionNum +
+ ", emJamState=" + emJamState +
+ ", nPassengerCarVehicles=" + nPassengerCarVehicles +
+ ", nLargeTruckVehicles=" + nLargeTruckVehicles +
+ ", nMidTruckVehicles=" + nMidTruckVehicles +
+ ", nSaloonCarVehicles=" + nSaloonCarVehicles +
+ ", nMicrobusVehicles=" + nMicrobusVehicles +
+ ", nMicroTruckVehicles=" + nMicroTruckVehicles +
+ ", nTricycleVehicles=" + nTricycleVehicles +
+ ", nMotorcycleVehicles=" + nMotorcycleVehicles +
+ ", nPasserbyVehicles=" + nPasserbyVehicles +
+ ", emRank=" + emRank +
+ ", nState=" + nState +
+ ", bOccupyHeadCoil=" + bOccupyHeadCoil +
+ ", bOccupyTailCoil=" + bOccupyTailCoil +
+ ", bStatistics=" + bStatistics +
+ ", nLeftVehicles=" + nLeftVehicles +
+ ", nRightVehicles=" + nRightVehicles +
+ ", nStraightVehicles=" + nStraightVehicles +
+ ", nUTurnVehicles=" + nUTurnVehicles +
+ ", stQueueEnd=" + stQueueEnd.toString() +
+ ", dBackOfQueue=" + dBackOfQueue +
+ ", dwPeriodByMili=" + dwPeriodByMili +
+ ", nBusVehicles=" + nBusVehicles +
+ ", nMPVVehicles=" + nMPVVehicles +
+ ", nMidPassengerCarVehicles=" + nMidPassengerCarVehicles +
+ ", nMiniCarriageVehicles=" + nMiniCarriageVehicles +
+ ", nOilTankTruckVehicles=" + nOilTankTruckVehicles +
+ ", nPickupVehicles=" + nPickupVehicles +
+ ", nSUVVehicles=" + nSUVVehicles +
+ ", nSUVorMPVVehicles=" + nSUVorMPVVehicles +
+ ", nTankCarVehicles=" + nTankCarVehicles +
+ ", nUnknownVehicles=" + nUnknownVehicles +
+ ", emCustomFlowAttribute=" + emCustomFlowAttribute +
+ ", nRoadFreeLength=" + nRoadFreeLength +
+ ", emOverflowState=" + emOverflowState +
+ '}';
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_JAM_RULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_JAM_RULE_INFO.java
new file mode 100644
index 0000000..01b2ebb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_JAM_RULE_INFO.java
@@ -0,0 +1,75 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+import com.netsdk.lib.NetSDKLib.POINTCOORDINATE;
+/**
+ * @description 事件类型EVENT_IVS_TRAFFICJAM(交通拥堵事件) 对应的规则配置
+ * @author 119178
+ * @date 2021/3/11
+ */
+public class NET_TRAFFIC_JAM_RULE_INFO extends SdkStructure{
+ /**
+ * 检测区
+ */
+ public POINTCOORDINATE[] stuDetectRegion=(POINTCOORDINATE[])new POINTCOORDINATE().toArray(20);
+ /**
+ * 检测区顶点数
+ */
+ public int nDetectRegionPoint;
+ /**
+ * 占线限值起始值(上限),拥堵长度占车道比例限值1-100
+ */
+ public int nJamLineMargin;
+ /**
+ * 占线限值终值(下限),必须比JamLineMargin小,两值的差推荐大于10,不能相等1-99
+ */
+ public int nJamLineMarginEnd;
+ /**
+ * 车道编号 与场景中的车道号对应
+ */
+ public int nLaneNumber;
+ /**
+ * 检测到报警发生到开始上报的时间,单位:秒 范围1~65535
+ */
+ public int nDelay;
+ /**
+ * 报警间隔时间,单位:秒 范围1~65535
+ */
+ public int nInterval;
+ /**
+ * 灵敏度,范围[1,10],灵敏度越高越容易检测
+ */
+ public int nSensitivity;
+ /**
+ * 上报次数 1~255
+ */
+ public int nReportTimes;
+ /**
+ * 路口车辆数目阈值,大于0:只有当前路口车辆数目大于此值时才会判定为拥堵;等于0:对车辆数目没要求
+ */
+ public int nVehicleNumberThreshold;
+ /**
+ * 变倍抓拍,违停球做规则判断时,默认会变倍
+ * 如下两种情况不适合变倍
+ * 1. 车速较快场合,变倍会导致跟踪不及时
+ * 2. 车牌很近,由于机芯的光轴畸变会导致车牌过大,算法无法识别
+ * 在以上这两种情况下,需要关闭变倍。是否要关闭变倍取决于现场情况,属于比较专业的配置
+ */
+ public int bZoomEnable;
+ /**
+ * 规则特定的尺寸过滤器
+ */
+ public NET_CFG_SIZEFILTER_INFO stuSizeFileter;
+ /**
+ * 规则特定的尺寸过滤器是否有效
+ */
+ public int bSizeFileter;
+ /**
+ * 不连续时间阈值(单位:秒):若超过该时间阈值为不拥堵的情况,将对报警计数清零 0-255
+ */
+ public int nDiscontinuousTimeThreshold;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[4092];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_LATTICE_SCREEN_ALARM_NOTICE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_LATTICE_SCREEN_ALARM_NOTICE_INFO.java
new file mode 100644
index 0000000..a367d11
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_LATTICE_SCREEN_ALARM_NOTICE_INFO.java
@@ -0,0 +1,17 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 点阵屏报警提示显示信息
+ * @date 2021/8/9 16:38
+ */
+public class NET_TRAFFIC_LATTICE_SCREEN_ALARM_NOTICE_INFO extends NetSDKLib.SdkStructure {
+ public byte[] szNoHelmet=new byte[128]; // 未带头盔屏幕提示信息
+ public byte[] szNonMotorOverload=new byte[128]; // 非机动车超载提示信息
+
+}
+
+
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_LATTICE_SCREEN_LOGO_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_LATTICE_SCREEN_LOGO_INFO.java
new file mode 100644
index 0000000..2040ef8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_LATTICE_SCREEN_LOGO_INFO.java
@@ -0,0 +1,15 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description
+ * @date 2021/8/9 16:32
+ */
+public class NET_TRAFFIC_LATTICE_SCREEN_LOGO_INFO extends NetSDKLib.SdkStructure {
+
+ public int emLogoType; /** LOGO类型 {@link com.netsdk.lib.enumeration.NET_EM_LATTICE_SCREEN_LOGO_TYPE} */
+ public byte[] szContent=new byte[128]; // emLogoType为文字时,为文字内容;emLogoType为图片时,为图片名称
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_LIGHT_STATE.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_LIGHT_STATE.java
new file mode 100644
index 0000000..721c3d5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_LIGHT_STATE.java
@@ -0,0 +1,33 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.NET_TRAFFIC_LIGHT_STATUS;
+
+/**
+ * 信号灯指示灯状态
+ *
+ * @author : 47040
+ * @since : Created in 2020/8/29 17:01
+ */
+public class NET_TRAFFIC_LIGHT_STATE extends NetSDKLib.SdkStructure {
+ /**
+ * 直行信号灯状态 {@link NET_TRAFFIC_LIGHT_STATUS}
+ */
+ public int emStraightLightInfo;
+ /**
+ * 左转信号灯状态 {@link NET_TRAFFIC_LIGHT_STATUS}
+ */
+ public int emTurnLeftLightInfo;
+ /**
+ * 右转信号灯状态 {@link NET_TRAFFIC_LIGHT_STATUS}
+ */
+ public int emTurnRightLightInfo;
+ /**
+ * 调头信号灯状态 {@link NET_TRAFFIC_LIGHT_STATUS}
+ */
+ public int emUTurnLightInfo;
+ /**
+ * 预留
+ */
+ public byte[] byReserved = new byte[64];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_OVERSPEED_RULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_OVERSPEED_RULE_INFO.java
new file mode 100644
index 0000000..9c8b221
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_OVERSPEED_RULE_INFO.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+
+/**
+ * @description 事件类型EVENT_IVS_TRAFFIC_OVERSPEED(超速事件) 对应的规则配置
+ * @author 119178
+ * @date 2021/3/11
+ */
+public class NET_TRAFFIC_OVERSPEED_RULE_INFO extends SdkStructure{
+ /**
+ * 限速范围
+ */
+ public NET_SPEED_LIMIT stuSpeedLimit;
+ /**
+ * 最短触发时间,单位:秒
+ */
+ public int nMinDuration;
+ /**
+ * 是否抓拍摩托车
+ */
+ public int bSnapMotorcycle;
+ /**
+ * 黄牌车限速范围,范围0~255km/h
+ */
+ public NET_SPEED_LIMIT stuYellowSpeedLimit;
+ /**
+ * 车道编号 与场景中的车道号对应
+ */
+ public int nLaneNumber;
+ /**
+ * 是否启用大小车限速,True-使用下面具体的大小车限速字段,False-使用SpeedLimit字段,该字段缺省时默认False,即使用通用字段SpeedLimit
+ */
+ public int bSpeedLimitForSize;
+ /**
+ * 小型车辆速度下限和上限,0~255km/h,启用bSpeedLimitForSize有效,作为普通车辆限速
+ */
+ public NET_SPEED_LIMIT stuSmallCarSpeedLimit;
+ /**
+ * 大型车辆速度下限和上限,0~255km/h,启用bSpeedLimitForSize有效,作为大型车辆限速
+ */
+ public NET_SPEED_LIMIT stuBigCarSpeedLimit;
+ /**
+ * 小车限高速宽限值,单位:km/h,不启用大小车限速时作为普通车辆高速宽限值,启用bSpeedLimitForSize时作为小车高速宽限值
+ */
+ public NET_SPEED_LIMIT stuOverSpeedMargin;
+ /**
+ * 大车限高速宽限值,单位:km/h,不启用大小车限速时作为普通车辆高速宽限值,启用bSpeedLimitForSize时作为大型车辆高速宽限值
+ */
+ public NET_SPEED_LIMIT stuBigCarOverSpeedMargin;
+ /**
+ * 小车限低速宽限值,单位:km/h,不启用大小车限速时作为普通车辆低速宽限值,启用bSpeedLimitForSize时,作为小车低速宽限值
+ */
+ public NET_SPEED_LIMIT stuUnderSpeedMargin;
+ /**
+ * 大车限低速宽限值,单位:km/h,不启用大小车限速时作为普通车辆低速宽限值,启用bSpeedLimitForSize时作为大型车辆高速宽限值
+ */
+ public NET_SPEED_LIMIT stuBigCarUnderSpeedMargin;
+ /**
+ * 语音播报使能
+ */
+ public int bVoiceBroadcastEnable;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved= new byte[4092];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_OVERYELLOWLINE_RULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_OVERYELLOWLINE_RULE_INFO.java
new file mode 100644
index 0000000..c4da571
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_OVERYELLOWLINE_RULE_INFO.java
@@ -0,0 +1,43 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+import com.netsdk.lib.NetSDKLib.POINTCOORDINATE;
+/**
+ * @description 事件类型EVENT_IVS_TRAFFIC_OVERYELLOWLINE(压黄线事件) 对应的规则配置
+ * @author 119178
+ * @date 2021/3/11
+ */
+public class NET_TRAFFIC_OVERYELLOWLINE_RULE_INFO extends SdkStructure{
+ /**
+ * 检测区
+ */
+ public POINTCOORDINATE[] stuDetectRegion = (POINTCOORDINATE[])new POINTCOORDINATE().toArray(20);
+ /**
+ * 检测区顶点数
+ */
+ public int nDetectRegionPoint;
+ /**
+ * 车道编号 与场景中的车道号对应
+ */
+ public int nLaneNumber;
+ /**
+ * 是否使能区域内触发该规则, false-不使能,true-使能
+ */
+ public int bAreaTrigEnable;
+ /**
+ * 灵敏度,范围[1,10],灵敏度越高越容易检测
+ */
+ public int nSensitivity;
+ /**
+ * 是否抓拍摩托车
+ */
+ public int bSnapMotorcycle;
+ /**
+ * 事件检测模式下,配置给算法,表示检测到事件发生后,多长时间开始报警,单位:秒,范围0-3600,无该字段不做处理
+ */
+ public int nDelayTime;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved=new byte[4096];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_PARKING_RULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_PARKING_RULE_INFO.java
new file mode 100644
index 0000000..0830b7b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_PARKING_RULE_INFO.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.POINTCOORDINATE;
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+
+public class NET_TRAFFIC_PARKING_RULE_INFO extends SdkStructure{
+ /**
+ * 检测区域
+ */
+ public POINTCOORDINATE[] stuDetectRegion=(POINTCOORDINATE[]) new POINTCOORDINATE().toArray(20);
+ /**
+ * 检测区域顶点数
+ */
+ public int nDetectRegionPoint;
+ public int nLaneNumber; // 车道编号 与场景中的车道号对应
+ public int nDelay; // 检测到报警发生到开始上报的时间,单位:秒 范围1~65535
+ public int nReportTimes; // 上报次数 1~255
+ public int nParkingAllowedTime; // 允许停车时间 单位:秒,范围1~65535
+ public int nSensitivity; // 灵敏度,范围[1,10],灵敏度越高越容易检测
+ public int nParkingNumThreshold; // 停车数阈值,画面中停车数量大于此值时不报警 取值1-128
+ public int bZoomEnable; // 变倍抓拍,违停球做规则判断时,默认会变倍
+ public int bSnapMotorcycle; // 是否抓拍摩托车
+ public int nDectRegionNumber; // 检测区域号 与场景中的检测区域编号对应
+ public int nShadeSnap; // 遮挡抓拍,默认为0 0:不支持1:支持
+ public int nControlMoreAlerts; // 是否开启抑制同一个目标重复多报功能,0:不开启该功能,1:开启功能
+ public int nReduceUnderreporting; // 是否开启减少id跳变导致的漏报功能,0:不开启该功能,1:开启功能
+ public byte[] byReserved=new byte[4096]; // 保留字节
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_PEDESTRAIN_RULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_PEDESTRAIN_RULE_INFO.java
new file mode 100644
index 0000000..53f933c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_PEDESTRAIN_RULE_INFO.java
@@ -0,0 +1,63 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+import com.netsdk.lib.NetSDKLib.POINTCOORDINATE;
+/**
+ * @description 事件类型EVENT_IVS_TRAFFIC_PEDESTRAIN(交通行人事件) 对应的规则配置
+ * @author 119178
+ * @date 2021/3/11
+ */
+public class NET_TRAFFIC_PEDESTRAIN_RULE_INFO extends SdkStructure{
+ /**
+ * 检测区
+ */
+ public POINTCOORDINATE[] stuDetectRegion=(POINTCOORDINATE[])new POINTCOORDINATE().toArray(20);
+ /**
+ * 检测区顶点数
+ */
+ public int nDetectRegionPoint;
+ /**
+ * 车道编号 与场景中的车道号对应
+ */
+ public int nLaneNumber;
+ /**
+ * 最短触发时间,单位:秒
+ */
+ public int nMinDuration;
+ /**
+ * 报警间隔时间,单位:秒
+ */
+ public int nInterval;
+ /**
+ * 是否抓拍摩托车
+ */
+ public int bSnapMotorcycle;
+ /**
+ * 变倍抓拍,违停球做规则判断时,默认会变倍
+ * 如下两种情况不适合变倍
+ * 1. 车速较快场合,变倍会导致跟踪不及时
+ * 2. 车牌很近,由于机芯的光轴畸变会导致车牌过大,算法无法识别
+ * 在以上这两种情况下,需要关闭变倍。是否要关闭变倍取决于现场情况,属于比较专业的配置
+ */
+ public int bZoomEnable;
+ /**
+ * 重复报警时间,无该字段不做处理
+ */
+ public int nRepeatAlarmTime;
+ /**
+ * 抓拍目标类型,默认抓拍行人,后续可做扩展.无该字段不做处理
+ */
+ public int nSnapObjectType;
+ /**
+ * 检测到行人后多少时间开始报警。单位:秒,范围0-3600.无该字段不做处理
+ */
+ public int nDelayTime;
+ /**
+ * 灵敏度,范围1~100 ,配置0即为默认值,灵敏度越大算法检测越灵敏
+ */
+ public int nSensitivity;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[4096];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_RETROGRADE_RULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_RETROGRADE_RULE_INFO.java
new file mode 100644
index 0000000..7c1b5ec
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_RETROGRADE_RULE_INFO.java
@@ -0,0 +1,41 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.DH_POINT;
+import com.netsdk.lib.NetSDKLib.POINTCOORDINATE;
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+
+public class NET_TRAFFIC_RETROGRADE_RULE_INFO extends SdkStructure{
+ /**
+ * 检测区域
+ */
+ public POINTCOORDINATE[] stuDetectRegion=(POINTCOORDINATE[]) new POINTCOORDINATE().toArray(20);
+ /**
+ * 检测区域顶点数
+ */
+ public int nDetectRegionPoint;
+ public byte[] byReserved1 = new byte[4]; // 字节对齐
+ /**
+ * 起点,从起点到终点是正向行驶,反过来是逆行,点的坐标归一化到[0,8192)区间。
+ */
+ public DH_POINT stuDirectionStart;
+ /**
+ * 终点,从起点到终点是正向行驶,反过来是逆行,点的坐标归一化到[0,8192)区间。
+ */
+ public DH_POINT stuDirectionEnd;
+ public int nMinDuration; // 最短触发时间,单位:秒
+ public int nLaneNumber; // 车道编号 与场景中的车道号对应
+ public int bLegal; // 逆行是否违章
+ public int nPositionDistinctness; // 抓拍位置变化区分度
+ public int nSensitivity; // 灵敏度,值越小灵敏度越低。取决于方向夹角,取值1-10
+ public int bZoomEnable; // 变倍抓拍,违停球做规则判断时,默认会变倍
+ public int bSnapMotorcycle; // 是否抓拍摩托车
+ public int nSnapNonMotor; // 是否抓拍非机动车
+ public int nSnapNoPlateMotor; // 是否抓拍无牌机动车
+ public int emSnapPlateMotor; // 是否抓拍机动车(NET_EM_SNAP_PLATEMOTOR_TYPE)
+ public int nSnapBicycle; // 是否抓拍自行车
+ public int nDurationTime; // 事件检测模式下,逆行时间超过这个值后开始报警,单位:秒,范围0-3600
+ public NET_CFG_SIZEFILTER_INFO stuSizeFileter; // 规则特定的尺寸过滤器
+ public int bSizeFileter; // 规则特定的尺寸过滤器是否有效
+ public int nReverseDisplacement; // 逆行位移,默认1024坐标系, 范围是1-1023 单位是像素, 若无该字段或该字段配置为0时,算法设置默认值
+ public byte[] byReserved = new byte[4096]; // 保留字节
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_ROAD_BLOCK_RULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_ROAD_BLOCK_RULE_INFO.java
new file mode 100644
index 0000000..90d8b82
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_ROAD_BLOCK_RULE_INFO.java
@@ -0,0 +1,48 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+import com.netsdk.lib.NetSDKLib.POINTCOORDINATE;
+/**
+ * @description 事件类型EVENT_IVS_TRAFFIC_ROAD_BLOCK(交通路障检测事件) 对应的规则配置
+ * @author 119178
+ * @date 2021/3/11
+ */
+public class NET_TRAFFIC_ROAD_BLOCK_RULE_INFO extends SdkStructure{
+ /**
+ * 检测区
+ */
+ public POINTCOORDINATE[] stuDetectRegion=(POINTCOORDINATE[])new POINTCOORDINATE().toArray(20);
+ /**
+ * 检测区顶点数
+ */
+ public int nDetectRegionPoint;
+ /**
+ * 最短持续时间,单位:秒 0~65535
+ */
+ public int nMinDuration;
+ /**
+ * 灵敏度,范围[1,10],灵敏度越高越容易检测
+ */
+ public int nSensitivity;
+ /**
+ * 车道编号 与场景中的车道号对应
+ */
+ public int nLaneNumber;
+ /**
+ * 变倍抓拍,违停球做规则判断时,默认会变倍。有两种情况不适合变倍
+ * 1.车速较快场合,变倍会导致跟踪不及时
+ * 2.车牌很近,由于机芯的光轴畸变会导致车牌过大,算法无法识别
+ * 在以上这两种情况下,需要关闭变倍。注意是否要关闭变倍取决于现场情况,属于比较专业的配置,只对Web或者调试工具开放该选项
+ * true开启变倍,false不变倍
+ * web上默认勾选
+ */
+ public int bZoomEnable;
+ /**
+ * 重复报警时间,单位:秒,范围0-3600.无该字段时,不做处理
+ */
+ public int nRepeatAlarmTime;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved=new byte[4096];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_ROAD_CONSTRUCTION_RULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_ROAD_CONSTRUCTION_RULE_INFO.java
new file mode 100644
index 0000000..0ef0204
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_ROAD_CONSTRUCTION_RULE_INFO.java
@@ -0,0 +1,48 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+import com.netsdk.lib.NetSDKLib.POINTCOORDINATE;
+/**
+ * @description 事件类型EVENT_IVS_TRAFFIC_ROAD_CONSTRUCTION(交通道路施工检测事件) 对应的规则配置
+ * @author 119178
+ * @date 2021/3/11
+ */
+public class NET_TRAFFIC_ROAD_CONSTRUCTION_RULE_INFO extends SdkStructure{
+ /**
+ * 检测区
+ */
+ public POINTCOORDINATE[] stuDetectRegion=(POINTCOORDINATE[])new POINTCOORDINATE().toArray(20);
+ /**
+ * 检测区顶点数
+ */
+ public int nDetectRegionPoint;
+ /**
+ * 最短持续时间,单位:秒 0~65535
+ */
+ public int nMinDuration;
+ /**
+ * 灵敏度,范围[1,10],灵敏度越高越容易检测
+ */
+ public int nSensitivity;
+ /**
+ * 车道编号 与场景中的车道号对应
+ */
+ public int nLaneNumber;
+ /**
+ * 变倍抓拍,违停球做规则判断时,默认会变倍。有两种情况不适合变倍
+ * 1.车速较快场合,变倍会导致跟踪不及时
+ * 2.车牌很近,由于机芯的光轴畸变会导致车牌过大,算法无法识别
+ * 在以上这两种情况下,需要关闭变倍。注意是否要关闭变倍取决于现场情况,属于比较专业的配置,只对Web或者调试工具开放该选项
+ * true开启变倍,false不变倍
+ * web上默认勾选
+ */
+ public int bZoomEnable;
+ /**
+ * 重复报警时间,单位:秒,范围0-3600.无该字段时,不做处理
+ */
+ public int nRepeatAlarmTime;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved=new byte[4096];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_THROW_RULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_THROW_RULE_INFO.java
new file mode 100644
index 0000000..8dc990f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_THROW_RULE_INFO.java
@@ -0,0 +1,63 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+import com.netsdk.lib.NetSDKLib.POINTCOORDINATE;
+/**
+ * @description 事件类型EVENT_IVS_TRAFFIC_THROW(抛洒物事件) 对应的规则配置
+ * @author 119178
+ * @date 2021/3/11
+ */
+public class NET_TRAFFIC_THROW_RULE_INFO extends SdkStructure{
+ /**
+ * 检测区
+ */
+ public POINTCOORDINATE[] stuDetectRegion=(POINTCOORDINATE[])new POINTCOORDINATE().toArray(20);
+ /**
+ * 检测区顶点数
+ */
+ public int nDetectRegionPoint;
+ /**
+ * 车道编号 与场景中的车道号对应
+ */
+ public int nLaneNumber;
+ /**
+ * 最短触发时间,单位:秒
+ */
+ public int nMinDuration;
+ /**
+ * 报警间隔时间,单位:秒
+ */
+ public int nInterval;
+ /**
+ * 是否抓拍摩托车
+ */
+ public int bSnapMotorcycle;
+ /**
+ * 变倍抓拍,违停球做规则判断时,默认会变倍
+ * 如下两种情况不适合变倍
+ * 1. 车速较快场合,变倍会导致跟踪不及时
+ * 2. 车牌很近,由于机芯的光轴畸变会导致车牌过大,算法无法识别
+ * 在以上这两种情况下,需要关闭变倍。是否要关闭变倍取决于现场情况,属于比较专业的配置
+ */
+ public int bZoomEnable;
+ /**
+ * 重复报警时间,无该字段不做处理
+ */
+ public int nRepeatAlarmTime;
+ /**
+ * 抓拍目标类型,默认抓拍行人,后续可做扩展.无该字段不做处理
+ */
+ public int nSnapObjectType;
+ /**
+ * 检测到行人后多少时间开始报警。单位:秒,范围0-3600.无该字段不做处理
+ */
+ public int nDelayTime;
+ /**
+ * 灵敏度,范围1~100 ,配置0即为默认值,灵敏度越大算法检测越灵敏
+ */
+ public int nSensitivity;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[4096];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_UNDERSPEED_RULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_UNDERSPEED_RULE_INFO.java
new file mode 100644
index 0000000..a65400d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAFFIC_UNDERSPEED_RULE_INFO.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+/**
+ * @description 事件类型EVENT_IVS_TRAFFIC_UNDERSPEED(欠速事件) 对应的规则配置
+ * @author 119178
+ * @date 2021/3/11
+ */
+public class NET_TRAFFIC_UNDERSPEED_RULE_INFO extends SdkStructure{
+ /**
+ * 限速范围
+ */
+ public NET_SPEED_LIMIT stuSpeedLimit;
+ /**
+ * 最短触发时间,单位:秒
+ */
+ public int nMinDuration;
+ /**
+ * 是否抓拍摩托车
+ */
+ public int bSnapMotorcycle;
+ /**
+ * 黄牌车限速范围,范围0~255km/h
+ */
+ public NET_SPEED_LIMIT stuYellowSpeedLimit;
+ /**
+ * 车道编号 与场景中的车道号对应
+ */
+ public int nLaneNumber;
+ /**
+ * 是否启用大小车限速,True-使用下面具体的大小车限速字段,False-使用SpeedLimit字段,该字段缺省时默认False,即使用通用字段SpeedLimit
+ */
+ public int bSpeedLimitForSize;
+ /**
+ * 小型车辆速度下限和上限,0~255km/h,启用bSpeedLimitForSize有效,作为普通车辆限速
+ */
+ public NET_SPEED_LIMIT stuSmallCarSpeedLimit;
+ /**
+ * 大型车辆速度下限和上限,0~255km/h,启用bSpeedLimitForSize有效,作为大型车辆限速
+ */
+ public NET_SPEED_LIMIT stuBigCarSpeedLimit;
+ /**
+ * 小车限高速宽限值,单位:km/h,不启用大小车限速时作为普通车辆高速宽限值,启用bSpeedLimitForSize时作为小车高速宽限值
+ */
+ public NET_SPEED_LIMIT stuOverSpeedMargin;
+ /**
+ * 大车限高速宽限值,单位:km/h,不启用大小车限速时作为普通车辆高速宽限值,启用bSpeedLimitForSize时作为大型车辆高速宽限值
+ */
+ public NET_SPEED_LIMIT stuBigCarOverSpeedMargin;
+ /**
+ * 小车限低速宽限值,单位:km/h,不启用大小车限速时作为普通车辆低速宽限值,启用bSpeedLimitForSize时,作为小车低速宽限值
+ */
+ public NET_SPEED_LIMIT stuUnderSpeedMargin;
+ /**
+ * 大车限低速宽限值,单位:km/h,不启用大小车限速时作为普通车辆低速宽限值,启用bSpeedLimitForSize时作为大型车辆高速宽限值
+ */
+ public NET_SPEED_LIMIT stuBigCarUnderSpeedMargin;
+ /**
+ * 语音播报使能
+ */
+ public int bVoiceBroadcastEnable;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved= new byte[4092];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRANSMIT_DISCONNECT_CALLBACK.java b/src/main/java/com/netsdk/lib/structure/NET_TRANSMIT_DISCONNECT_CALLBACK.java
new file mode 100644
index 0000000..c6819d9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRANSMIT_DISCONNECT_CALLBACK.java
@@ -0,0 +1,23 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+隧道连接断开回调信息
+*/
+public class NET_TRANSMIT_DISCONNECT_CALLBACK extends NetSDKLib.SdkStructure {
+/**
+/< 设备网络信息
+*/
+public NET_DEV_NETWORK_INFO stuDevNetInfo=new NET_DEV_NETWORK_INFO();
+/**
+/< 用户数据 LDWORD
+*/
+public Pointer dwUserData;
+/**
+/< 保留字节
+*/
+public byte[] szReserved=new byte[1024];
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TRAVEL_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_TRAVEL_INFO.java
new file mode 100644
index 0000000..0b0c7a3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TRAVEL_INFO.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+/**
+ * @author 251823
+ * @description 行程码信息
+ * @date 2021/08/15
+ */
+public class NET_TRAVEL_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 行程码状态,{@link EM_TRAVEL_CODE_COLOR}
+ */
+ public int emTravelCodeColor;
+
+ /**
+ * 最近14天经过的城市个数
+ */
+ public int nCityCount;
+
+ /**
+ * 最近14天经过的城市名. 按时间顺序排列, 最早经过的城市放第一个
+ */
+ public PassingCityByteArr[] szPassingCity = (PassingCityByteArr[])new PassingCityByteArr().toArray(16);
+
+ /**
+ * 保留字节
+ */
+ public byte[] szReserved = new byte[1024];
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_TSECT_DAY.java b/src/main/java/com/netsdk/lib/structure/NET_TSECT_DAY.java
new file mode 100644
index 0000000..0d39a60
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_TSECT_DAY.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+import static com.netsdk.lib.NetSDKLib.NET_TSCHE_SEC_NUM;
+
+/**
+ * 拆分自{@link MONITORWALL_COLLECTION_SCHEDULE}
+ *
+ * @author : 47040
+ * @since : Created in 2020/10/19 9:43
+ */
+public class NET_TSECT_DAY extends NetSDKLib.SdkStructure {
+ /**
+ * 时间段结构
+ */
+ public NetSDKLib.NET_TSECT[] stuSchedule = new NetSDKLib.NET_TSECT[NET_TSCHE_SEC_NUM];
+
+ public NET_TSECT_DAY() {
+ for (int i = 0; i < stuSchedule.length; i++) {
+ stuSchedule[i] = new NetSDKLib.NET_TSECT();
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_UINT_POINT.java b/src/main/java/com/netsdk/lib/structure/NET_UINT_POINT.java
new file mode 100644
index 0000000..3aae50b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_UINT_POINT.java
@@ -0,0 +1,18 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 8192坐标点
+ * @date 2022/07/21 16:59:51
+ */
+public class NET_UINT_POINT extends NetSDKLib.SdkStructure {
+
+ public int nx;
+
+ public int ny;
+
+ public NET_UINT_POINT() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_UPDATE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_UPDATE_INFO.java
new file mode 100644
index 0000000..9404ad3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_UPDATE_INFO.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 区域或车位更新信息
+ * @date 2022/05/11 13:27:51
+ */
+public class NET_UPDATE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 更新类型 {@link com.netsdk.lib.enumeration.EM_UPDATE_TYPE}
+ */
+ public int emType;
+ /**
+ * 更新的区域或车位名称
+ */
+ public byte[] szName = new byte[32];
+ /**
+ * 更新前的车位类型 {@link com.netsdk.lib.enumeration.EM_SPACE_TYPE}
+ */
+ public int emBeforeUpdateType;
+ /**
+ * 更新后的车位类型 {@link com.netsdk.lib.enumeration.EM_SPACE_TYPE}
+ */
+ public int emAfterUpdateType;
+ /**
+ * 保留字节
+ */
+ public byte[] szResvered = new byte[256];
+
+ public NET_UPDATE_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_UPLOAD_CLIENT_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_UPLOAD_CLIENT_INFO.java
new file mode 100644
index 0000000..4a1a5a9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_UPLOAD_CLIENT_INFO.java
@@ -0,0 +1,21 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.EM_UPLOAD_FLAG;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 客户端信息
+ * @date 2021/2/22
+ */
+public class NET_UPLOAD_CLIENT_INFO extends NetSDKLib.SdkStructure {
+ /** 平台客户端的标识,当前是IPv4地址或者MAC地址 */
+ public byte[] szClientID = new byte[20];
+ /** 平台上传标识 ,对应枚举{@link EM_UPLOAD_FLAG} */
+ public int emUploadFlag;
+ /** 上传到平台的UTC时间 */
+ public NET_TIME stuUploadTime;
+ /** 预留 */
+ public byte[] byReserved = new byte[64];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_USER_DEF_TITLE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_USER_DEF_TITLE_INFO.java
new file mode 100644
index 0000000..c7a253c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_USER_DEF_TITLE_INFO.java
@@ -0,0 +1,47 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+import static com.netsdk.lib.NetSDKLib.CUSTOM_TITLE_LEN;
+
+/**
+ * 自定义的标题信息
+ *
+ * @author 47040
+ * @version 1.0.0
+ * @since Created in 2021/3/8 20:16
+ */
+public class NET_USER_DEF_TITLE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 标题内容
+ */
+ public byte[] szText = new byte[CUSTOM_TITLE_LEN];
+ /**
+ * 叠加到编码视频使能
+ */
+ public int bEncodeBlend;
+ /**
+ * 叠加到预览视频使能
+ */
+ public int bPreviewBlend;
+ /**
+ * 区域, 坐标取值[0~8191], 仅使用left和top值, 点(left,top)应和(right,bottom)设置成同样的点
+ */
+ public NetSDKLib.NET_RECT stuRect;
+ /**
+ * 前景色
+ */
+ public NET_COLOR_RGBA stuFrontColor;
+ /**
+ * 背景色
+ */
+ public NET_COLOR_RGBA stuBackColor;
+ /**
+ * 文本对齐方式 枚举值 {@link NetSDKLib.EM_TITLE_TEXT_ALIGNTYPE}
+ */
+ public int emTextAlign;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[516];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_USER_PICTURE_DATA.java b/src/main/java/com/netsdk/lib/structure/NET_USER_PICTURE_DATA.java
new file mode 100644
index 0000000..ccf0ad2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_USER_PICTURE_DATA.java
@@ -0,0 +1,17 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * className:NET_USER_PICTURE_DATA
+ * description:
+ * author:251589
+ * createTime:2020/12/22 21:56
+ *
+ * @version v1.0
+ */
+public class NET_USER_PICTURE_DATA extends NetSDKLib.SdkStructure {
+ public String pszPictureData; // 图片数据,最大 200K
+ public int nPictureLen; // pszPictureData 长度
+ public byte[] byReserved = new byte[1020]; // 预留字段
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VACCINE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VACCINE_INFO.java
new file mode 100644
index 0000000..12ccaba
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VACCINE_INFO.java
@@ -0,0 +1,35 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+/**
+ * @author 251823
+ * @description 新冠疫苗接种信息
+ * @date 2021/08/15
+ */
+public class NET_VACCINE_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 是否已接种新冠疫苗, 0: 否, 1: 是
+ */
+ public int nVaccinateFlag;
+
+ /**
+ * 新冠疫苗名称
+ */
+ public byte[] szVaccineName = new byte[128];
+
+ /**
+ * 历史接种日期有效个数
+ */
+ public int nDateCount;
+
+ /**
+ * 历史接种日期 (yyyy-MM-dd). 如提供不了时间, 则填"0000-00-00", 表示已接种
+ */
+ public VaccinateDateByteArr[] szVaccinateDate = (VaccinateDateByteArr[])new VaccinateDateByteArr().toArray(8);
+
+ /**
+ * 保留字节
+ */
+ public byte[] szReserved = new byte[1024];
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VAGEOBJECT_IMAGE.java b/src/main/java/com/netsdk/lib/structure/NET_VAGEOBJECT_IMAGE.java
new file mode 100644
index 0000000..a57fa6b
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VAGEOBJECT_IMAGE.java
@@ -0,0 +1,36 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 物体截图
+ * @date 2021/10/09
+ */
+public class NET_VAGEOBJECT_IMAGE extends NetSDKLib.SdkStructure{
+ /**
+ * 在二进制数据块中的偏移
+ */
+ public int nOffset;
+
+ /**
+ * 图片大小,单位:字节
+ */
+ public int nLength;
+
+ /**
+ * 图片宽度
+ */
+ public int nWidth;
+
+ /**
+ * 图片高度
+ */
+ public int nHeight;
+
+ /**
+ * 文件路径
+ */
+ public byte[] szFilePath = new byte[260];
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VAGEOBJECT_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VAGEOBJECT_INFO.java
new file mode 100644
index 0000000..ddb7638
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VAGEOBJECT_INFO.java
@@ -0,0 +1,74 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+/**
+ * @author 251823
+ * @description 视频分析泛型物体类型
+ * @date 2021/10/09
+ */
+public class NET_VAGEOBJECT_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 物体ID,每个ID表示一个唯一的物体
+ */
+ public int nObjectID;
+
+ /**
+ * 模型支持的泛类型物体类型编号
+ */
+ public int nTypeIndex;
+
+ /**
+ * 模型支持的泛类型物体类型
+ */
+ public byte[] szTypeName = new byte[32];
+
+ /**
+ * 置信度,值越大表示置信度越高 0~100
+ */
+ public int nConfidence;
+
+ /**
+ * 物体动作支持类型,参考枚举{ @link ENUM_VAGEOBJECT_ACTION}
+ */
+ public int emAction;
+
+ /**
+ * 包围盒 矩形类型,当物体类型为车辆、车牌时为0~8191相对坐标
+ */
+ public NetSDKLib.NET_RECT stuBoundingBox;
+
+ /**
+ * 包围盒 绝对坐标
+ */
+ public NetSDKLib.NET_RECT stuOriginalBoundingBox;
+
+ /**
+ * 物体型心(不是包围盒中心), 二维空间点类型
+ */
+ public NetSDKLib.NET_POINT stuCenter;
+
+ /**
+ * 主要颜色是否有效
+ */
+ public boolean bMainColor;
+
+ /**
+ * 物体主要颜色, rgb
+ */
+ public byte[] byMainColor = new byte[4];
+
+ /**
+ * 物体截图
+ */
+ public NET_VAGEOBJECT_IMAGE stuImage;
+
+ /**
+ * 当前时间戳(物体抓拍或识别时,会将此识别智能帧附在一个视频帧或jpeg图片中,此帧所在原始视频中的出现时间)
+ */
+ public NET_TIME_EX stuCurrentTimeStamp;
+
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[1024];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VAOBJECT_ANIMAL_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VAOBJECT_ANIMAL_INFO.java
new file mode 100644
index 0000000..c71fcc6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VAOBJECT_ANIMAL_INFO.java
@@ -0,0 +1,36 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 智慧养殖对象信息
+* @date 2022/04/15 15:29:30
+*/
+public class NET_VAOBJECT_ANIMAL_INFO extends NetSDKLib.SdkStructure {
+/**
+物体ID,每个ID表示一个唯一的物体
+*/
+public int nObjectID;
+/**
+智慧养殖检测目标子类型 {@link com.netsdk.lib.enumeration.EM_BREED_DETECT_CATEGORY_TYPE}
+*/
+public int emCategoryType;
+/**
+包围盒
+*/
+public NET_RECT stuBoundingBox=new NET_RECT();
+/**
+对象重量, 单位: g
+*/
+public int nObjectWeight;
+/**
+物体截图
+*/
+public NetSDKLib.SCENE_IMAGE_INFO_EX stuImageData=new NetSDKLib.SCENE_IMAGE_INFO_EX();
+/**
+预留字节
+*/
+public byte[] byReserved=new byte[1024];
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VAOBJECT_NUMMAN.java b/src/main/java/com/netsdk/lib/structure/NET_VAOBJECT_NUMMAN.java
new file mode 100644
index 0000000..da34676
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VAOBJECT_NUMMAN.java
@@ -0,0 +1,19 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.NET_RECT;
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+
+/**
+ * 检测到的人信息
+ * @author 29779
+ */
+public class NET_VAOBJECT_NUMMAN extends SdkStructure {
+ public int nObjectID; // 物体ID,每个ID表示一个唯一的物体
+ /**
+ * @link EM_UNIFORM_STYLE 制服样式
+ */
+ public int emUniformStyle;
+ public NET_RECT stuBoundingBox; // 包围盒,手套对象在全景图中的框坐标,为0~8191相对坐标
+ public NET_RECT stuOriginalBoundingBox; // 包围盒,绝对坐标
+ public byte[] byReserved = new byte[128]; // 预留字节
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VARLANE_PLAN_LIST_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VARLANE_PLAN_LIST_INFO.java
new file mode 100644
index 0000000..ca3cb00
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VARLANE_PLAN_LIST_INFO.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 可变车道计划表信息
+ * @date 2021/09/28
+ */
+public class NET_VARLANE_PLAN_LIST_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 可变车道方案编号(0表示未配置)
+ */
+ public int nVarlanePatternNumber;
+
+ /**
+ * 可变车道方案名称
+ */
+ public byte[] szVarlanePatternName = new byte[64];
+
+ /**
+ * 计划表个数
+ */
+ public int nLanePlanNum;
+
+ /**
+ * 计划表
+ */
+ public NET_LANE_PLAN_LIST_INFO[] stuLanePlanInfo = (NET_LANE_PLAN_LIST_INFO[]) new NET_LANE_PLAN_LIST_INFO().toArray(12);
+ /**
+ * 预留字节
+ */
+ public byte[] szReserved = new byte[32];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VAR_LANE_LIST_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VAR_LANE_LIST_INFO.java
new file mode 100644
index 0000000..87f6a54
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VAR_LANE_LIST_INFO.java
@@ -0,0 +1,40 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 可变车道列表信息
+ * @date 2021/09/28
+ */
+public class NET_VAR_LANE_LIST_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 可变车道指示牌号
+ */
+ public int nVarlaneId;
+
+ /**
+ * 可变车道编号(车道配置页面编号)
+ */
+ public int nVarlaneNumber;
+
+ /**
+ * 该指示牌对应可变属性的对应的通道的闪光时长 单位秒,0-255 S
+ */
+ public int nVarlaneFlashTime;
+
+ /**
+ * 可变车道属性个数
+ */
+ public int nPropertyListNum;
+
+ /**
+ * 可变车道属性
+ */
+ public NET_PROPERTY_LIST_INFO[] stuPropertyInfo = (NET_PROPERTY_LIST_INFO[]) new NET_PROPERTY_LIST_INFO().toArray(7);
+ /**
+ * 预留字节
+ */
+ public byte[] szReserved = new byte[32];
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VEDIO_WIDGET_COVER.java b/src/main/java/com/netsdk/lib/structure/NET_VEDIO_WIDGET_COVER.java
new file mode 100644
index 0000000..32c37af
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VEDIO_WIDGET_COVER.java
@@ -0,0 +1,55 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * 覆盖区域
+ *
+ * @author 47040
+ * @version 1.0.0
+ * @since Created in 2021/3/8 21:52
+ */
+public class NET_VEDIO_WIDGET_COVER extends NetSDKLib.SdkStructure {
+
+ /**
+ * 叠加到预览视频
+ */
+ public int bPreviewBlend;
+ /**
+ * 叠加到主码流
+ */
+ public int bEncodeBlend;
+ /**
+ * 叠加到辅码流1
+ */
+ public int bEncodeBlendExtra1;
+ /**
+ * 叠加到辅码流2
+ */
+ public int bEncodeBlendExtra2;
+ /**
+ * 叠加到辅码流3
+ */
+ public int bEncodeBlendExtra3;
+ /**
+ * 叠加到抓图
+ */
+ public int bEncodeBlendSnapshot;
+ /**
+ * 前景色
+ */
+ public NET_COLOR_RGBA stuFrontColor;
+ /**
+ * 背景色
+ */
+ public NET_COLOR_RGBA stuBackColor;
+ /**
+ * 区域, 坐标取值0~8191
+ */
+ public NetSDKLib.NET_RECT stuRect;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserver = new byte[128];
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VEHICLE_DRIVING_DIRECTION_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VEHICLE_DRIVING_DIRECTION_INFO.java
new file mode 100644
index 0000000..cf75532
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VEHICLE_DRIVING_DIRECTION_INFO.java
@@ -0,0 +1,17 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * NET_VEHICLE_OBJECT szDrivingDirection 的拆解字段
+ * {@link NET_VEHICLE_OBJECT#szDrivingDirection}
+ *
+ * @author : 47040
+ * @since : Created in 2020/12/17 13:42
+ */
+public class NET_VEHICLE_DRIVING_DIRECTION_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 参数细节
+ */
+ public byte[] info = new byte[32];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VEHICLE_FUSED_OBJECT.java b/src/main/java/com/netsdk/lib/structure/NET_VEHICLE_FUSED_OBJECT.java
new file mode 100644
index 0000000..cb1ab7e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VEHICLE_FUSED_OBJECT.java
@@ -0,0 +1,76 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @description 目标属性
+ * @origin autoTool
+ * @date 2023/02/14 20:02:01
+ */
+public class NET_VEHICLE_FUSED_OBJECT extends NetSDKLib.SdkStructure {
+ /**
+ * 目标ID
+ */
+ public int nObjectID;
+ /**
+ * 物体类型 {@link NetSDKLib.EM_ANALYSE_OBJECT_TYPE}
+ */
+ public int emObjectType;
+ /**
+ * 目标速度
+ */
+ public float fSpeed;
+ /**
+ * 目标当前GPS坐标
+ */
+ public NET_GPS_POSITION stuGPSPosition = new NET_GPS_POSITION();
+ /**
+ * 车牌信息
+ */
+ public NetSDKLib.NET_MSG_OBJECT stuPlate = new NetSDKLib.NET_MSG_OBJECT();
+ /**
+ * 机动车信息
+ */
+ public NetSDKLib.NET_MSG_OBJECT stuVehicle = new NetSDKLib.NET_MSG_OBJECT();
+ /**
+ * 非机动车信息
+ */
+ public NetSDKLib.VA_OBJECT_NONMOTOR stuNonMotor = new NetSDKLib.VA_OBJECT_NONMOTOR();
+ /**
+ * 车道ID
+ */
+ public int nLaneID;
+ /**
+ * 加速度,标量 m/s2
+ */
+ public float fAcceleration;
+ /**
+ * 3D坐标,设备中心坐标系
+ */
+ public NET_3DFLOAT_POINT stu3DPointPosition = new NET_3DFLOAT_POINT();
+ /**
+ * 3D尺寸,单位米
+ */
+ public NET_3DFLOAT_SIZE stu3DSize = new NET_3DFLOAT_SIZE();
+ /**
+ * 3D姿态, 与正东方向的的逆时针夹角,单位度(0~360)
+ */
+ public NET_3DFLOAT_POSTURE stu3DPosture = new NET_3DFLOAT_POSTURE();
+ /**
+ * 速度矢量,m/s
+ */
+ public NET_3DFLOAT_POINT stuVelocity = new NET_3DFLOAT_POINT();
+ /**
+ * 车系
+ */
+ public byte[] szBrandYearText = new byte[64];
+ /**
+ * 保留字节
+ */
+ public byte[] szReserved = new byte[3864];
+
+ public NET_VEHICLE_FUSED_OBJECT() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VEHICLE_GROUP_FOUND_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VEHICLE_GROUP_FOUND_INFO.java
new file mode 100644
index 0000000..08a2910
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VEHICLE_GROUP_FOUND_INFO.java
@@ -0,0 +1,20 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 查找返回的车辆组信息
+ * @date 2022/10/21 17:38
+ */
+public class NET_VEHICLE_GROUP_FOUND_INFO extends NetSDKLib.SdkStructure{
+public byte[] szGroupID =new byte[64]; // 车辆组标识
+public byte[] szGroupName =new byte[128]; // 车辆组名称
+public byte[] szGroupDetail=new byte[256]; // 车辆组备注信息
+public int nGroupType; // 车辆组类型,0:未知 1:禁止列表 2:允许列表
+public int nGroupSize; // 当前组内车辆数
+public int[] nChannels=new int[1024]; // 当前组绑定到的视频通道号列表,未和任何视频通道关联填[-1]
+public int nChannelsNum; // 返回视频通道号列表个数
+public byte[] szReserved=new byte[508]; // 保留字段
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VEHICLE_GROUP_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VEHICLE_GROUP_INFO.java
new file mode 100644
index 0000000..6ed8d3a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VEHICLE_GROUP_INFO.java
@@ -0,0 +1,17 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 车辆组信息
+ * @date 2022/10/21 17:26
+ */
+public class NET_VEHICLE_GROUP_INFO extends NetSDKLib.SdkStructure{
+ public byte[] szGroupID=new byte[64]; // 车辆组标识
+ public byte[] szGroupName=new byte[128]; // 车辆组名称
+ public byte[] szGroupDetail=new byte[256]; // 车辆组备注信息
+ public int nGroupType; // 车辆组类型,0:未知 1:禁止列表 2:允许列表
+ public byte[] szReserved=new byte[512]; // 保留字段
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VEHICLE_OBJECT.java b/src/main/java/com/netsdk/lib/structure/NET_VEHICLE_OBJECT.java
new file mode 100644
index 0000000..99ced1f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VEHICLE_OBJECT.java
@@ -0,0 +1,132 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.EM_DETECT_SENSOR_TYPE;
+import com.netsdk.lib.enumeration.EM_VEHICLEINOUT_CAR_TYPE;
+
+/**
+ * 车辆信息
+ *
+ * @author : 47040
+ * @since : Created in 2020/12/17 11:54
+ */
+public class NET_VEHICLE_OBJECT extends NetSDKLib.SdkStructure {
+ /**
+ * 物体ID
+ */
+ public int nObjectID;
+ /**
+ * 车速,单位km/h
+ */
+ public int nSpeed;
+ /**
+ * 物体类型 Vehicle NonMotor Plate
+ */
+ public byte[] szObjectType = new byte[16];
+ /**
+ * 物体类型中的子类别 {@link NetSDKLib.EM_CATEGORY_TYPE}
+ */
+ public int emSubObject;
+ /**
+ * 物理车道号
+ */
+ public int nLane;
+ /**
+ * 自定义车道号
+ */
+ public int nRoadwayNumber;
+ /**
+ * 探测物体的传感器类型 {@link EM_DETECT_SENSOR_TYPE}
+ */
+ public int emSensorType;
+ /**
+ * 物体雷达和视频融合ID
+ */
+ public int nObjectRVID;
+ /**
+ * 物体的雷达ID
+ */
+ public int nObjectRID;
+ /**
+ * 行驶方向"Approach"-上行,即车辆离设备部署点越来越近; "Leave"-下行,即车辆离设备部署点越来越远,第二和第三个参数分别代表上行和下行的两个地点
+ */
+ public NET_VEHICLE_DRIVING_DIRECTION_INFO[] szDrivingDirection = new NET_VEHICLE_DRIVING_DIRECTION_INFO[3];
+ /**
+ * 车牌号码
+ */
+ public byte[] szPlateNumber = new byte[32];
+ /**
+ * 车牌颜色
+ */
+ public byte[] szPlateColor = new byte[16];
+ /**
+ * 车辆经度
+ */
+ public double dbLongitude;
+ /**
+ * 车辆纬度
+ */
+ public double dbLatitude;
+ /**
+ * 车身颜色
+ */
+ public byte[] szCarColor = new byte[16];
+ /**
+ * 车辆类型 {@link EM_VEHICLEINOUT_CAR_TYPE}
+ */
+ public int emCarType;
+ /**
+ * 车辆驶入驶出虚拟线圈的状态 {@link NetSDKLib.NET_FLOWSTAT_DIRECTION}
+ */
+ public int emVirtualCoilDirection;
+ /**
+ * 距离停车线距离
+ */
+ public double dbDistanceToStop;
+ /**
+ * 车辆与所有车道的中心点(中心点在设备所处位置,且垂直于车道方向的直线上),X轴方向(垂直于车道方向)的距离
+ */
+ public double dbCarX;
+ /**
+ * 车辆与所有车道的中心点(中心点在设备所处位置,且垂直于车道方向的直线上),Y轴方向(平行于车道方向)的距离
+ */
+ public double dbCarY;
+ /**
+ * 车辆与所有车道的中心点(中心点在设备所处位置且垂直于车道方向的直线上)的角度;
+ */
+ public double dbCarAngle;
+ /**
+ * 物体是否在视频车道内, 0:未知, 1:物体不在视频车道内, 2:物体在视频车道内
+ */
+ public int nObjectInVideoLane;
+ /**
+ * 目标物体实际行驶方向 0-未知,1-直行,2-左转,3-右转,4-掉头
+ */
+ public int nDirection;
+ /**
+ * 目标横向运动速度
+ */
+ public float fSpeedX;
+ /**
+ * 目标纵向运动速度
+ */
+ public float fSpeedY;
+ /**
+ * 航向角
+ */
+ public double dbHeadingAngle;
+ /**
+ *车身坐标,包围盒0~8191相对坐标
+ */
+ public NET_RECT stuCarBoundingBox=new NET_RECT();
+ /**
+ * 保留字节
+ */
+ public byte[] byReserverd = new byte[216];
+
+ public NET_VEHICLE_OBJECT() {
+ for (int i = 0; i < szDrivingDirection.length; i++) {
+ szDrivingDirection[i] = new NET_VEHICLE_DRIVING_DIRECTION_INFO();
+ }
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEOABNORMALDETECTION_RULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEOABNORMALDETECTION_RULE_INFO.java
new file mode 100644
index 0000000..b5c7612
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEOABNORMALDETECTION_RULE_INFO.java
@@ -0,0 +1,39 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+
+/**
+ * 事件类型EVENT_IVS_VIDEOABNORMALDETECTION(视频异常)对应的规则配置
+ */
+public class NET_VIDEOABNORMALDETECTION_RULE_INFO extends SdkStructure {
+ /**
+ * 检测类型数
+ */
+ public int nDetectType;
+ /**
+ * 检测类型,0-视频丢失, 1-视频遮挡, 2-画面冻结, 3-过亮, 4-过暗, 5-场景变化
+ * 6-条纹检测 , 7-噪声检测 , 8-偏色检测 , 9-视频模糊检测 , 10-对比度异常检测
+ * 11-视频运动 , 12-视频闪烁 , 13-视频颜色 , 14-虚焦检测 , 15-过曝检测, 16-场景巨变
+ */
+ public byte[] bDetectType=new byte[32];
+ /**
+ * 最短持续时间 单位:秒,0~65535
+ */
+ public int nMinDuration;
+ /**
+ * 灵敏度, 取值1-10,值越小灵敏度越低(只对检测类型视频遮挡,过亮,过暗,场景变化有效)
+ */
+ public int nSensitivity;
+ /**
+ * 异常检测阈值数量
+ */
+ public int nThresholdNum;
+ /**
+ * 异常检测阈值,范围1~100
+ */
+ public int[] nThreshold=new int[32];
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved=new byte[4096];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEOCHANNELS_INPUT_EX.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEOCHANNELS_INPUT_EX.java
new file mode 100644
index 0000000..995ba38
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEOCHANNELS_INPUT_EX.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 输入通道扩展信息
+ * @date 2022/11/24 20:08:17
+ */
+public class NET_VIDEOCHANNELS_INPUT_EX extends NetSDKLib.SdkStructure {
+ /**
+ * 球机通道个数
+ */
+ public int nSDCount;
+ /**
+ * 支持云台程序的通道数量(扩展)
+ */
+ public short[] nSD = new short[1024];
+ /**
+ * 支持云台程序的通道数量
+ */
+ public int nPTZCount;
+ /**
+ * 支持云台程序的通道号(扩展)
+ */
+ public short[] nPTZ = new short[1024];
+ /**
+ * 预留字段
+ */
+ public byte[] reserved = new byte[1024];
+
+ public NET_VIDEOCHANNELS_INPUT_EX() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEODIAGNOSIS_PROJECT_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEODIAGNOSIS_PROJECT_INFO.java
new file mode 100644
index 0000000..0846828
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEODIAGNOSIS_PROJECT_INFO.java
@@ -0,0 +1,16 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+import com.sun.jna.Pointer;
+
+public class NET_VIDEODIAGNOSIS_PROJECT_INFO extends SdkStructure{
+ public int dwSize;
+ public byte[] szProjectName= new byte[260]; // 计划名称
+ public int nTotalTaskNum; // 调用者分配任务列表个数, 根据能力集获取
+ public int nReturnTaskNum; // 返回实际任务列表个数
+ public Pointer pstProjectTasks; // 任务列表 , 调用者分配内存nTotalTaskNum个
+
+ public NET_VIDEODIAGNOSIS_PROJECT_INFO() {
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEOIN_DEFOG_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEOIN_DEFOG_INFO.java
new file mode 100644
index 0000000..2596cad
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEOIN_DEFOG_INFO.java
@@ -0,0 +1,25 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * className:NET_VIDEOIN_DEFOG_INFO
+ * description: 透雾配置
+ * author:251589
+ * createTime:2020/12/28 14:37
+ *
+ * @version v1.0
+ */
+public class NET_VIDEOIN_DEFOG_INFO extends NetSDKLib.SdkStructure {
+ public int dwSize; // 结构体大小
+ public int emCfgType; // 配置类型,获取和设置时都要指定
+ public int emDefogMode; // 透雾模式
+ public int nIntensity; // 强度0-100
+ public int emIntensityMode; //大气光模式
+ public int nLightIntensityLevel; //大气光强度(0-15)
+ public boolean bCamDefogEnable; //光学去雾使能 (TRUE使能,FALSE去使能)
+
+ public NET_VIDEOIN_DEFOG_INFO(){
+ this.dwSize = this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEOSTAT_CROWD_DISTRI_MAP.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEOSTAT_CROWD_DISTRI_MAP.java
new file mode 100644
index 0000000..f963c41
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEOSTAT_CROWD_DISTRI_MAP.java
@@ -0,0 +1,41 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 人群分布图报表实时数据
+ * @date 2022/10/29 09:36:29
+ */
+public class NET_VIDEOSTAT_CROWD_DISTRI_MAP extends NetSDKLib.SdkStructure {
+ /**
+ * 时间
+ */
+ public NET_TIME_EX UTC = new NET_TIME_EX();
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 预置点编号
+ */
+ public int nPtzPresetId;
+ /**
+ * 统计区个数
+ */
+ public int nRegionNum;
+ /**
+ * 统计区列表, 实际个数和nRegionNum保持一致
+ */
+ public NET_PEOPLE_REGION_INFO[] stuRegionList = new NET_PEOPLE_REGION_INFO[16];
+ /**
+ * 保留字节
+ */
+ public byte[] reserved = new byte[1024];
+
+ public NET_VIDEOSTAT_CROWD_DISTRI_MAP() {
+ for (int i = 0; i < stuRegionList.length; i++) {
+ stuRegionList[i] = new NET_PEOPLE_REGION_INFO();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEOSTAT_INSIDESUBTOTAL_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEOSTAT_INSIDESUBTOTAL_INFO.java
new file mode 100644
index 0000000..27643ec
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEOSTAT_INSIDESUBTOTAL_INFO.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 目标实时检测位置统计
+ * @date 2022/10/28 11:06:44
+ */
+public class NET_VIDEOSTAT_INSIDESUBTOTAL_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 当前时间点上报人数的横坐标集,坐标体系是1024体系,数组每个元素的范围为[0, 1023]
+ */
+ public int[] nPosXs = new int[32];
+ /**
+ * nPoxXs数组有效数据个数
+ */
+ public int nPoxXsNum;
+ /**
+ * 预留
+ */
+ public byte[] byReserved = new byte[988];
+
+ public NET_VIDEOSTAT_INSIDESUBTOTAL_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEOSTAT_SUMMARY_HEAD_LIFT_DETECTION.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEOSTAT_SUMMARY_HEAD_LIFT_DETECTION.java
new file mode 100644
index 0000000..b97ed4a
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEOSTAT_SUMMARY_HEAD_LIFT_DETECTION.java
@@ -0,0 +1,38 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 抬头检测周期上报的回调
+ * @date 2022/10/28 11:33:47
+ */
+public class NET_VIDEOSTAT_SUMMARY_HEAD_LIFT_DETECTION extends NetSDKLib.SdkStructure {
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 预置点编号
+ */
+ public int nPtzPresetId;
+ /**
+ * 时间
+ */
+ public NET_TIME_EX UTC = new NET_TIME_EX();
+ /**
+ * 检测到的抬头人数
+ */
+ public int nFaceCount;
+ /**
+ * 检测到的总人数
+ */
+ public int nHumanCount;
+ /**
+ * 保留字节
+ */
+ public byte[] szReserved = new byte[1024];
+
+ public NET_VIDEOSTAT_SUMMARY_HEAD_LIFT_DETECTION() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEOSTAT_SUMMARY_INTELLIPARKING.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEOSTAT_SUMMARY_INTELLIPARKING.java
new file mode 100644
index 0000000..e92cf28
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEOSTAT_SUMMARY_INTELLIPARKING.java
@@ -0,0 +1,42 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 立体行为-智能停车实时数据
+ * @date 2022/10/28 11:30:56
+ */
+public class NET_VIDEOSTAT_SUMMARY_INTELLIPARKING extends NetSDKLib.SdkStructure {
+ /**
+ * 时间
+ */
+ public NET_TIME_EX UTC = new NET_TIME_EX();
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 预置点编号
+ */
+ public int nPtzPresetId;
+ /**
+ * 数据类型 {@link com.netsdk.lib.enumeration.NET_EM_INTELLIPARKING_DATA_TYPE}
+ */
+ public int emType;
+ /**
+ * 规划式停车场车位信息统计,当emType为NET_EM_INTELLIPARKING_DATA_TYPE_PLANAREA时有效
+ */
+ public NET_INTELLIPARKING_PLANAREA_INFO stPlanArea = new NET_INTELLIPARKING_PLANAREA_INFO();
+ /**
+ * 开放式停车场信息统计,当emType为NET_EM_INTELLIPARKING_DATA_TYPE_OPENAREA时有效
+ */
+ public NET_INTELLIPARKING_OPENAREA_INFO stOpenArea = new NET_INTELLIPARKING_OPENAREA_INFO();
+ /**
+ * 保留字节
+ */
+ public byte[] reserved = new byte[1024];
+
+ public NET_VIDEOSTAT_SUMMARY_INTELLIPARKING() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEOSTAT_SUMMARY_STEREO.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEOSTAT_SUMMARY_STEREO.java
new file mode 100644
index 0000000..8e783d5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEOSTAT_SUMMARY_STEREO.java
@@ -0,0 +1,38 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 立体行为-视频统计摘要信息
+ * @date 2022/10/28 11:06:44
+ */
+public class NET_VIDEOSTAT_SUMMARY_STEREO extends NetSDKLib.SdkStructure {
+ /**
+ * 时间
+ */
+ public NET_TIME_EX UTC = new NET_TIME_EX();
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 预置点编号
+ */
+ public int nPtzPresetId;
+ /**
+ * 数据类型 {@link com.netsdk.lib.enumeration.NET_EM_VS_DATA_TYPE}
+ */
+ public int emType;
+ /**
+ * 目标实时检测位置统计
+ */
+ public NET_VIDEOSTAT_INSIDESUBTOTAL_INFO stuInsideSubtotal = new NET_VIDEOSTAT_INSIDESUBTOTAL_INFO();
+ /**
+ * 保留字节
+ */
+ public byte[] reserved = new byte[1024];
+
+ public NET_VIDEOSTAT_SUMMARY_STEREO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEOSTAT_SUMMARY_TANK_CAPACITY_DETECTION.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEOSTAT_SUMMARY_TANK_CAPACITY_DETECTION.java
new file mode 100644
index 0000000..4095a22
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEOSTAT_SUMMARY_TANK_CAPACITY_DETECTION.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 贮柜储量检测实时上报的回调
+ * @date 2022/10/28 11:34:32
+ */
+public class NET_VIDEOSTAT_SUMMARY_TANK_CAPACITY_DETECTION extends NetSDKLib.SdkStructure {
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 贮柜当前状态 {@link com.netsdk.lib.enumeration.EM_TANK_STATUS}
+ */
+ public int emTankStatus;
+ /**
+ * 时间
+ */
+ public NET_TIME_EX stuUTC = new NET_TIME_EX();
+ /**
+ * 用料当前占比(百分比)
+ */
+ public int nCurrentRatio;
+ /**
+ * 保留字节
+ */
+ public byte[] szReserved = new byte[1024];
+
+ public NET_VIDEOSTAT_SUMMARY_TANK_CAPACITY_DETECTION() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEOTALK_SIGNLIGHT_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEOTALK_SIGNLIGHT_INFO.java
new file mode 100644
index 0000000..612f5de
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEOTALK_SIGNLIGHT_INFO.java
@@ -0,0 +1,39 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 签名灯信息
+ * @date 2020/11/06
+ */
+public class NET_VIDEOTALK_SIGNLIGHT_INFO extends NetSDKLib.SdkStructure{
+
+ /**
+ * 灯光类型
+ * */
+ public int emSignLightType; //@link EM_SIGNLIGHT_TYPE
+
+ /**
+ * 有效时间段个数
+ * */
+ public int nTimeSectionsNum;
+
+ /**
+ * 抓拍时间段
+ * */
+ public NetSDKLib.NET_TSECT[] stuTimeSection = new NetSDKLib.NET_TSECT[6];
+
+ /**
+ * 预留字节
+ * */
+ public byte[] bReserved = new byte[64];
+
+
+ public NET_VIDEOTALK_SIGNLIGHT_INFO() {
+ for (int i = 0; i < stuTimeSection.length; i++) {
+ stuTimeSection[i] = new NetSDKLib.NET_TSECT();
+ }
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEO_ALGORITHMTYPE_DETECTIONRESULT.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEO_ALGORITHMTYPE_DETECTIONRESULT.java
new file mode 100644
index 0000000..5a81986
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEO_ALGORITHMTYPE_DETECTIONRESULT.java
@@ -0,0 +1,52 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 视频算法类型检测
+* @date 2022/08/03 14:43:06
+*/
+public class NET_VIDEO_ALGORITHMTYPE_DETECTIONRESULT extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+是否满足人脸算法条件
+*/
+public int bFaceAlgorithm;
+/**
+人脸算法分值
+*/
+public int nFaceAlgorithmValue;
+/**
+是否满足人体算法条件
+*/
+public int bHumanBodyAlgorithm;
+/**
+人体算法分值
+*/
+public int nHumanBodyAlgorithmValue;
+/**
+是否满足车辆算法条件
+*/
+public int bVehicleAlgorithm;
+/**
+车辆算法分值
+*/
+public int nVehicleAlgorithmValue;
+/**
+是否满足车牌算法条件
+*/
+public int bPlateNumAlgorithm;
+/**
+车牌算法分值
+*/
+public int nPlateNumAlgorithmValue;
+
+public NET_VIDEO_ALGORITHMTYPE_DETECTIONRESULT(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEO_ANALYSE_ANALYSE_PROC.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEO_ANALYSE_ANALYSE_PROC.java
new file mode 100644
index 0000000..ad9fa7f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEO_ANALYSE_ANALYSE_PROC.java
@@ -0,0 +1,63 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 260611
+ * @description 智能分析结果的信息
+ * @date 2023/02/21 14:39:21
+ */
+public class NET_VIDEO_ANALYSE_ANALYSE_PROC extends NetSDKLib.SdkStructure {
+ /**
+ * 通道号
+ */
+ public int nChannelId;
+ /**
+ * 时间戳(单位是毫秒)
+ */
+ public double dbPTS;
+ /**
+ * 发生的时间
+ */
+ public NET_TIME_EX stuUTC = new NET_TIME_EX();
+ /**
+ * 时间毫秒数,只表示毫秒
+ */
+ public int nUTCMS;
+ /**
+ * 包序号,用于校验是否丢包
+ */
+ public int nSequence;
+ /**
+ * 物体列表,{@link NET_VEHICLE_FUSED_OBJECT}的数组
+ */
+ public Pointer pstuObjectList;
+ /**
+ * 物体列表个数
+ */
+ public int nObjectListNum;
+ /**
+ * 事件列表个数
+ */
+ public int nEventListCount;
+ /**
+ * 事件列表, 仅支持: 碰撞冲突事件CollisionConflict(EVENT_IVS_COLLISION_CONFLICT)
+ */
+ public int[] dwEventCode = new int[32];
+ /**
+ * 事件信息(只解析Event Data中的字段)
+ * 碰撞冲突事件CollisionConflict(EVENT_IVS_COLLISION_CONFLICT) - {@link NET_DEV_EVENT_COLLISION_CONFLICT_INFO}
+ */
+ public Pointer[] pstuEventList = new Pointer[32];
+ /**
+ * 保留字节
+ */
+ public byte[] szReserved;
+
+ public NET_VIDEO_ANALYSE_ANALYSE_PROC(){
+ int size = new PointerSize().size();
+ szReserved=new byte[1916-size*32];
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEO_AVAILABILITY_DETECTIONRESULT.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEO_AVAILABILITY_DETECTIONRESULT.java
new file mode 100644
index 0000000..6b54056
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEO_AVAILABILITY_DETECTIONRESULT.java
@@ -0,0 +1,32 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 视频完好率监测结果
+* @date 2022/08/03 14:39:35
+*/
+public class NET_VIDEO_AVAILABILITY_DETECTIONRESULT extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+信令延时,-1表示检测失败, 单位ms
+*/
+public int nSignalDelay;
+/**
+视频流延时,-1表示检测失败, 单位ms
+*/
+public int nStreamDelay;
+/**
+I帧延时,-1表示检测失败 单位ms
+*/
+public int nIFrameDelay;
+
+public NET_VIDEO_AVAILABILITY_DETECTIONRESULT(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEO_DELAY_DETECTIONRESUL.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEO_DELAY_DETECTIONRESUL.java
new file mode 100644
index 0000000..c2b5b9e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEO_DELAY_DETECTIONRESUL.java
@@ -0,0 +1,32 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 对应检测类型(NET_DIAGNOSIS_VIDEO_DELAY)视频延时检测结果
+* @date 2022/08/03 14:23:24
+*/
+public class NET_VIDEO_DELAY_DETECTIONRESUL extends NetSDKLib.SdkStructure {
+/**
+此结构体大小
+*/
+public int dwSize;
+/**
+信令延时,-1表示检测失败, 单位ms
+*/
+public int nSignalDelay;
+/**
+视频流延时,-1表示检测失败, 单位ms
+*/
+public int nStreamDelay;
+/**
+I帧延时,-1表示检测失败 单位ms
+*/
+public int nIFrameDelay;
+
+public NET_VIDEO_DELAY_DETECTIONRESUL(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEO_DIAGNOSIS_COMPARE_RECORD_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEO_DIAGNOSIS_COMPARE_RECORD_INFO.java
new file mode 100644
index 0000000..1fa36ea
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEO_DIAGNOSIS_COMPARE_RECORD_INFO.java
@@ -0,0 +1,37 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.NetSDKLib.CFG_NET_TIME;
+
+/**
+ * @author 251823
+ * @version 1.0
+ * @description 比较录像详细信息
+ * @date 2021/11/07
+ */
+public class NET_VIDEO_DIAGNOSIS_COMPARE_RECORD_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 录像开始时间
+ */
+ public CFG_NET_TIME stuStartTime;
+
+ /**
+ * 录像保存位置,参考{ @link EM_SOURCE_VIDEO_LOCATION}
+ */
+ public int emSourceType;
+
+ /**
+ * 录像类型,参考{ @link EM_VIDEO_TYPE}
+ */
+ public int emRecordType;
+
+ /**
+ * 视频诊断录像开始时间为当前实际检测时间的前PreSeconds秒(当该字段与StartTime同时存在时, 以该字段优先)
+ */
+ public int nPreSeconds;
+
+ /**
+ * 保留字节
+ */
+ public byte[] szReserved = new byte[256];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEO_DIAGNOSIS_RECORD_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEO_DIAGNOSIS_RECORD_INFO.java
new file mode 100644
index 0000000..996891e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEO_DIAGNOSIS_RECORD_INFO.java
@@ -0,0 +1,35 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.EM_SOURCE_VIDEO_LOCATION;
+import com.netsdk.lib.enumeration.EM_VIDEO_TYPE;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 视频诊断录像详细信息
+ * @date 2021/2/22
+ */
+public class NET_VIDEO_DIAGNOSIS_RECORD_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 录像保存的位置,对应枚举{@link EM_SOURCE_VIDEO_LOCATION}
+ */
+ public int emSourceLocation;
+ /**
+ * 视频诊断录像类型,对应枚举{@link EM_VIDEO_TYPE}
+ */
+ public int emRecordType;
+ /**
+ * 视频诊断录像开始时间
+ */
+ public NetSDKLib.CFG_NET_TIME stuStartTime;
+ /**
+ * 视频诊断录像开始时间为当前实际检测时间的前PreSeconds秒(当该字段与StartTime同时存在时,以该字段优先)
+ */
+ public int nPreSeconds;
+ /**
+ * 录像文件地址
+ */
+ public byte[] szLocalRecordFilePath = new byte[256];
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEO_FILCKERING_DETECTION_RESULT.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEO_FILCKERING_DETECTION_RESULT.java
new file mode 100644
index 0000000..a04c554
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEO_FILCKERING_DETECTION_RESULT.java
@@ -0,0 +1,36 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 视频闪频检测
+* @date 2022/08/03 14:49:00
+*/
+public class NET_VIDEO_FILCKERING_DETECTION_RESULT extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+检测结果量化值
+*/
+public int nValue;
+/**
+检测结果状态 {@link NetSDKLib.NET_STATE_TYPE}
+*/
+public int emState;
+/**
+状态持续时间,单位:秒
+*/
+public int nDuration;
+/**
+ * 异常检测结果图片地址
+ */
+public byte[] szPicUrl = new byte[256];
+
+public NET_VIDEO_FILCKERING_DETECTION_RESULT(){
+ this.dwSize=this.size();
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEO_LOSS_FRAME_DETECTION_RESULT.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEO_LOSS_FRAME_DETECTION_RESULT.java
new file mode 100644
index 0000000..d853b43
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEO_LOSS_FRAME_DETECTION_RESULT.java
@@ -0,0 +1,21 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 视频丢帧检测
+ * @date 2022/7/21 16:21
+ */
+public class NET_VIDEO_LOSS_FRAME_DETECTION_RESULT extends NetSDKLib.SdkStructure{
+
+ public int dwSize; // 结构体大小
+ public int nValue; // 检测结果量化值
+ public int emState; // 检测结果状态 NET_STATE_TYPE
+ public int nDuration; // 状态持续时间,单位:秒
+ public byte[] szPicUrl = new byte[256]; // 异常检测结果图片地址
+ public NET_VIDEO_LOSS_FRAME_DETECTION_RESULT(){
+ this.dwSize=this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VIDEO_SNOWFLAKE_DETECTIONRESULT.java b/src/main/java/com/netsdk/lib/structure/NET_VIDEO_SNOWFLAKE_DETECTIONRESULT.java
new file mode 100644
index 0000000..42b7d40
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VIDEO_SNOWFLAKE_DETECTIONRESULT.java
@@ -0,0 +1,20 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description
+ * @date 2022/7/21 16:05
+ */
+public class NET_VIDEO_SNOWFLAKE_DETECTIONRESULT extends NetSDKLib.SdkStructure {
+ public int dwSize; // 结构体大小
+ public int nValue; // 检测结果量化值
+ public int emState; // 检测结果状态 NET_STATE_TYPE
+ public int nDuration; // 状态持续时间,单位:秒
+ public byte[] szPicUrl=new byte[256]; // 异常检测结果图片地址
+ public NET_VIDEO_SNOWFLAKE_DETECTIONRESULT(){
+ this.dwSize=this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VKINFO.java b/src/main/java/com/netsdk/lib/structure/NET_VKINFO.java
new file mode 100644
index 0000000..381483f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VKINFO.java
@@ -0,0 +1,46 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description VK二值对信息
+ * @date 2022/11/03 09:43:17
+ */
+public class NET_VKINFO extends NetSDKLib.SdkStructure {
+ /**
+ * VKID
+ */
+ public byte[] szVKID = new byte[128];
+ /**
+ * VK
+ */
+ public byte[] szVK = new byte[128];
+ /**
+ * 加密算法类型 {@link com.netsdk.lib.enumeration.EM_ALGORITHM_TYPE}
+ */
+ public int emAlgorithmType;
+ /**
+ * 返回的VKID字段的实际大小
+ */
+ public int nRetVKIDLen;
+ /**
+ * 返回的VK实际大小
+ */
+ public int nRetVKLen;
+ /**
+ * 是否加密 {@link com.netsdk.lib.enumeration.EM_IS_ENCRYPT}
+ */
+ public int emIsEncrypt;
+ /**
+ * 是否是当前VK 0 :未知,1:当前, 2:之前 {@link com.netsdk.lib.enumeration.EM_IS_CURRENT_VK}
+ */
+ public int emIsCurrent;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[492];
+
+ public NET_VKINFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VOTE_SETTINGS_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VOTE_SETTINGS_INFO.java
new file mode 100644
index 0000000..9031446
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VOTE_SETTINGS_INFO.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 选票设置信息
+ * @date 2021/09/28
+ */
+public class NET_VOTE_SETTINGS_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 周期容许秒数:周期增加或减少幅度未超出容许值,认为周期未增加或减少(0 ~ 10)
+ */
+ public int nCycleChangeTolerate;
+
+ /**
+ * 周期增加所需票数(1 ~ 5)
+ */
+ public int nCycleUpVote;
+
+ /**
+ * 周期减少所需票数(1 ~ 5)
+ */
+ public int ncycleDnVote;
+
+ /**
+ * 预留字节
+ */
+ public byte[] szReserved = new byte[32];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VSP_GAVI_CHANNEL_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VSP_GAVI_CHANNEL_INFO.java
new file mode 100644
index 0000000..520e5c5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VSP_GAVI_CHANNEL_INFO.java
@@ -0,0 +1,18 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+
+public class NET_VSP_GAVI_CHANNEL_INFO extends SdkStructure{
+ /**
+ * 通道编码
+ */
+ public byte[] szChannelEncode = new byte[24];
+ /**
+ * 上报设备信息
+ */
+ public NET_VSP_GAVI_NOTIFY_OBJECT stuNotifyObject;
+ /**
+ * 预留字段
+ */
+ public byte[] byReserved = new byte[512];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VSP_GAVI_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VSP_GAVI_INFO.java
new file mode 100644
index 0000000..1d4382e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VSP_GAVI_INFO.java
@@ -0,0 +1,79 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+import com.netsdk.lib.enumeration.EM_VSP_GAVI_PLATFORM_CODE;
+import com.sun.jna.Pointer;
+/**
+ * @author 119178
+ * @description 注册平台信息
+ * @date 2021/4/19
+ */
+public class NET_VSP_GAVI_INFO extends SdkStructure{
+ /**
+ * 注册平台IP地址或网络名。IP为空时,不做接入
+ */
+ public byte[] szAddress = new byte[128];
+ /**
+ * 设备登陆帐号
+ */
+ public byte[] szUserId = new byte[64];
+ /**
+ * 登陆密码
+ */
+ public byte[] szPassword = new byte[64];
+ /**
+ * 注册平台端口号
+ */
+ public int nPort;
+ /**
+ * 接入使能
+ */
+ public int bEnable;
+ /**
+ * 会话保活周期,范围[10,90],单位秒
+ */
+ public int nKeepAliveTime;
+ /**
+ * 最大超时次数,范围[2,5]
+ */
+ public int nMaxTimeoutTimes;
+ /**
+ * 注册失败后重新注册随机时间上限,范围[30,300],单位秒
+ */
+ public int nRegisterInterval;
+ /**
+ * 注册设备ID
+ */
+ public byte[] szDeviceID = new byte[24];
+ /**
+ * {@link NET_VSP_GAVI_CHANNEL_INFO}
+ * 通道信息,用户分配内存
+ */
+ public Pointer pstuChannelInfo;
+ /**
+ * pstuChannelInfo 个数,和通道数保持一致
+ */
+ public int nChannelCount;
+ /**
+ * 返回的 pstuChannelInfo 个数
+ */
+ public int nChannelCountRet;
+ /**
+ * {@link EM_VSP_GAVI_PLATFORM_CODE}
+ * 当前平台
+ */
+ public int emPlatform;
+ /**
+ * 是否在线,不可修改
+ */
+ public int bIsOnLine;
+ /**
+ * {@link NET_HKIMAGESERVER_INFO}
+ * 视图云存储服务器鉴权密钥信息,emPlatform 为 EM_VSP_GAVI_PLATFORM_CODE_HKTDA_CLOUDSTORAGE时有效
+ */
+ public Pointer pHKImageServerInfo;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[68];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VSP_GAVI_NOTIFY_OBJECT.java b/src/main/java/com/netsdk/lib/structure/NET_VSP_GAVI_NOTIFY_OBJECT.java
new file mode 100644
index 0000000..d3296d5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VSP_GAVI_NOTIFY_OBJECT.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+/**
+ * @author 119178
+ * @description 上报对象信息
+ * @date 2021/4/20
+ */
+public class NET_VSP_GAVI_NOTIFY_OBJECT extends SdkStructure{
+ /**
+ * 人脸选中
+ */
+ public int bFaceChecked;
+ /**
+ * 人体选中
+ */
+ public int bPersonChecked;
+ /**
+ * 机动车选中
+ */
+ public int bMotorVehicleChecked;
+ /**
+ * 非机动车选中
+ */
+ public int bNonMotorVehicleChecked;
+ /**
+ * 图片选中
+ */
+ public int bImageChecked;
+ /**
+ * 预留字段
+ */
+ public byte[] byReserved =new byte[516];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_VSP_GAVI_PLATFORM_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_VSP_GAVI_PLATFORM_INFO.java
new file mode 100644
index 0000000..d88369e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_VSP_GAVI_PLATFORM_INFO.java
@@ -0,0 +1,24 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+import com.netsdk.lib.enumeration.EM_VSP_GAVI_PLATFORM_CODE;
+/**
+ * @author 119178
+ * @description 接入平台范围信息
+ * @date 2021/4/19
+ */
+public class NET_VSP_GAVI_PLATFORM_INFO extends SdkStructure{
+ /**
+ * {@link EM_VSP_GAVI_PLATFORM_CODE}
+ * 平台码
+ */
+ public int emPlatformCode;
+ /**
+ * 平台名称
+ */
+ public byte[] szPlatformName = new byte[128];
+ /**
+ * 预留字段
+ */
+ public byte[] byReserved = new byte[132];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_WANDERDETECTION_RULE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_WANDERDETECTION_RULE_INFO.java
new file mode 100644
index 0000000..c6e02fe
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_WANDERDETECTION_RULE_INFO.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib.POINTCOORDINATE;
+import com.netsdk.lib.NetSDKLib.SdkStructure;
+
+/** 事件类型 EVENT_IVS_WANDERDETECTION( 徘徊事件)对应的规则配置 */
+public class NET_WANDERDETECTION_RULE_INFO extends SdkStructure {
+ /** 检测区域顶点数 */
+ public int nDetectRegionPoint;
+ /** 检测区域 */
+ public POINTCOORDINATE[] stuDetectRegion = (POINTCOORDINATE[]) new POINTCOORDINATE().toArray(20);
+ /** 触发报警位置数 */
+ public int nTriggerPosition;
+ /** 触发报警位置,0-目标外接框中心, 1-目标外接框左端中心, 2-目标外接框顶端中心, 3-目标外接框右端中心, 4-目标外接框底端中心 */
+ public byte[] bTriggerPosition = new byte[8];
+ /** 触发报警的徘徊或滞留人数 */
+ public int nTriggerTargetsNumber;
+ /** 最短持续时间 单位:秒,0~65535 */
+ public int nMinDuration;
+ /** 报告时间间隔,单位秒 0~600;等于0表示不重复报警, 默认值30 */
+ public int nReportInterval;
+ /** 跟踪持续时间,0秒:一直跟踪,1~300秒:跟踪持续时间 */
+ public int nTrackDuration;
+ /** 规则特定的尺寸过滤器是否有效 */
+ public boolean bSizeFileter;
+ /** 规则特定的尺寸过滤器 */
+ public NET_CFG_SIZEFILTER_INFO stuSizeFileter;
+ /** 保留字节 */
+ public byte[] byReserved = new byte[4096];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_WATERDATA_STAT_SERVER_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_WATERDATA_STAT_SERVER_INFO.java
new file mode 100644
index 0000000..c3d13fa
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_WATERDATA_STAT_SERVER_INFO.java
@@ -0,0 +1,31 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 流量统计信息
+* @date 2022/08/22 17:27:50
+*/
+public class NET_WATERDATA_STAT_SERVER_INFO extends NetSDKLib.SdkStructure {
+/**
+开始时间
+*/
+public NET_TIME_EX stuStartTime=new NET_TIME_EX();
+/**
+水质类别 {@link com.netsdk.lib.enumeration.EM_WATER_QUALITY}
+*/
+public int emQuality;
+/**
+水质检测上报数据信息
+*/
+public NET_WATER_DETECTION_UPLOAD_INFO stuUploadInfo=new NET_WATER_DETECTION_UPLOAD_INFO();
+/**
+预留字节
+*/
+public byte[] szReserved=new byte[256];
+
+public NET_WATERDATA_STAT_SERVER_INFO(){
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_WATER_DETECTION_UPLOAD_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_WATER_DETECTION_UPLOAD_INFO.java
new file mode 100644
index 0000000..0415fc8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_WATER_DETECTION_UPLOAD_INFO.java
@@ -0,0 +1,105 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 水质检测上报数据信息
+* @date 2022/08/22 16:51:44
+*/
+public class NET_WATER_DETECTION_UPLOAD_INFO extends NetSDKLib.SdkStructure {
+/**
+PH值 范围(1-14)
+*/
+public float fPH;
+/**
+浊度值 范围(0-500NTU)
+*/
+public float fNTU;
+/**
+氨氮值 范围(0-50mg/l)
+*/
+public float fNH3_N;
+/**
+总氮值 范围(0-50mg/l)
+*/
+public float fTN;
+/**
+透明度值 范围(0-30 m)
+*/
+public float fSD;
+/**
+化学需氧量 范围(0-100mg/l)
+*/
+public float fCOD;
+/**
+亚硝酸盐氮 范围(0-500mg/l)
+*/
+public float fNN;
+/**
+溶解氧 范围(0-10 mg/l)
+*/
+public float fDO;
+/**
+叶绿素a 范围(0-300 ug/l)
+*/
+public float fChl_a;
+/**
+总磷 范围0-5mg/L
+*/
+public float fTP;
+/**
+高锰酸盐指数范围(0-100mg/l)
+*/
+public float fCODMn;
+/**
+悬浮物 范围(0-1000mg/l)
+*/
+public float fSS;
+/**
+五日生化需氧量 范围(0-50mg/l)
+*/
+public float fBOD_5;
+/**
+硝酸盐 范围(0-500mg/l)
+*/
+public float fNO3_N;
+/**
+富营养状况指数 范围无
+*/
+public float fTSI;
+/**
+黑臭等级 {@link com.netsdk.lib.enumeration.EM_SMELLY_LEVEL}
+*/
+public int emSmellyLevel;
+/**
+预留字节
+*/
+public byte[] szReserved=new byte[512];
+
+public NET_WATER_DETECTION_UPLOAD_INFO(){
+}
+
+ @Override
+ public String toString() {
+ return "NET_WATER_DETECTION_UPLOAD_INFO{" +
+ "fPH=" + fPH +
+ ", fNTU=" + fNTU +
+ ", fNH3_N=" + fNH3_N +
+ ", fTN=" + fTN +
+ ", fSD=" + fSD +
+ ", fCOD=" + fCOD +
+ ", fNN=" + fNN +
+ ", fDO=" + fDO +
+ ", fChl_a=" + fChl_a +
+ ", fTP=" + fTP +
+ ", fCODMn=" + fCODMn +
+ ", fSS=" + fSS +
+ ", fBOD_5=" + fBOD_5 +
+ ", fNO3_N=" + fNO3_N +
+ ", fTSI=" + fTSI +
+ ", emSmellyLevel=" + emSmellyLevel +
+ '}';
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_WEEKS_PLAN_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_WEEKS_PLAN_INFO.java
new file mode 100644
index 0000000..8b8bbef
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_WEEKS_PLAN_INFO.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 周计划列表信息
+ * @date 2021/09/27
+ */
+public class NET_WEEKS_PLAN_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 周计划编号
+ */
+ public int nWeekPlanNumber;
+
+ /**
+ * 周计划个数
+ */
+ public int nWeekPlanNum;
+
+ /**
+ * 周计划名称
+ */
+ public byte[] szWeekPlanName = new byte[32];
+
+ /**
+ * 周计划
+ */
+ public NET_WEEK_PLAN_INFO[] stuWeekPlanInfo = (NET_WEEK_PLAN_INFO[]) new NET_WEEK_PLAN_INFO().toArray(7);
+ /**
+ * 预留字节
+ */
+ public byte[] szReserved = new byte[32];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_WEEK_PLANS_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_WEEK_PLANS_INFO.java
new file mode 100644
index 0000000..5a2e24f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_WEEK_PLANS_INFO.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 可变车道调度计划列表,对应配置项NET_EM_CFG_RTSC_SCH_VARLANE_MANAGEMENT
+ * @date 2021/09/28
+ */
+public class NET_WEEK_PLANS_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 周计划编号
+ */
+ public int nWeekPlanNumber;
+
+ /**
+ * 周计划名称
+ */
+ public byte[] szWeekPlanName = new byte[64];
+
+ /**
+ * 周计划个数
+ */
+ public int nWeekPlanNum;
+
+ /**
+ * 周计划
+ */
+ public NET_WEEK_PLAN_INFO[] stuWeekPlanInfo = (NET_WEEK_PLAN_INFO[]) new NET_WEEK_PLAN_INFO().toArray(7);
+ /**
+ * 预留字节
+ */
+ public byte[] szReserved = new byte[32];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_WEEK_PLAN_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_WEEK_PLAN_INFO.java
new file mode 100644
index 0000000..2267b08
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_WEEK_PLAN_INFO.java
@@ -0,0 +1,30 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 周计划信息
+ * @date 2021/09/27
+ */
+public class NET_WEEK_PLAN_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 星期类型| 0 星期日 | 1 星期一 | 2 星期二 | 3 星期三 | 4 星期四 | 5 星期五 | 6 星期六 |
+ */
+ public int nWeekNumber;
+
+ /**
+ * 日计划编号,从1开始
+ */
+ public int nDayPlanNumber;
+
+ /**
+ * 日计划名称
+ */
+ public byte[] szDayPlanName = new byte[64];
+
+ /**
+ * 预留字节
+ */
+ public byte[] szReserved = new byte[32];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/NET_WIEGAND_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_WIEGAND_INFO.java
new file mode 100644
index 0000000..25db380
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_WIEGAND_INFO.java
@@ -0,0 +1,44 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 韦根配置
+* @date 2022/03/08 09:56:03
+*/
+public class NET_WIEGAND_INFO extends NetSDKLib.SdkStructure {
+/**
+工作模式 {@link com.netsdk.lib.enumeration.EM_NET_WIEGAND_MODE}
+*/
+public int emMode;
+/**
+脉冲宽度,单位us
+*/
+public int nPulseWidth;
+/**
+脉冲间隔,单位us
+*/
+public int nPulseStep;
+/**
+传输模式 {@link com.netsdk.lib.enumeration.EM_NET_WIEGAND_TRANSFER_MODE}
+ */
+public int emTransferMode;
+/**
+输出类型 {@link com.netsdk.lib.enumeration.EM_NET_WIEGAND_OUT_TYPE}
+*/
+public int emOutType;
+/**
+掩码值,每一位代表一个接收输入的掩码值,全为0表示不接收输入
+*/
+public int dwInputType;
+/**
+门编号, 例如 0: 门1编号, 1: 门2编号
+*/
+public int nDoorNo;
+/**
+保留字节
+*/
+public byte[] bReserverd=new byte[1024];
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_WLAN_ACCESSPOINT_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_WLAN_ACCESSPOINT_INFO.java
new file mode 100644
index 0000000..fe3c33c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_WLAN_ACCESSPOINT_INFO.java
@@ -0,0 +1,35 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 接入点信息
+ * @date 2023/03/16 14:10:09
+ */
+public class NET_WLAN_ACCESSPOINT_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 无线网络名称
+ */
+ public byte[] szSSID = new byte[36];
+ /**
+ * 信号强度 范围0-100
+ */
+ public int nStrength;
+ /**
+ * 认证模式0:OPEN;1:SHARED;2:WPA;3:WPA-PSK;4:WPA2;5:WPA2-PSK;
+ * 6:WPA-NONE(用在adhoc网络模式), 7-11是混合模式,选择其中任何一种都可以进行连接 7:WPA-PSK | WPA2-PSK;
+ * 8:WPA | WPA2; 9:WPA | WPA-PSK; 10:WPA2 | WPA2-PSK; 11:WPA | WPA-PSK |WPA2
+ * |WPA2-PSK ;12: UnKnown
+ */
+ public int nAuthMode;
+ /**
+ * 0:NONE, 1:WEP, 2:TKIP, 3:AES(CCMP), 4:TKIP+AES( mix Mode), 5:UnKnown
+ */
+ public int nEncrAlgr;
+
+ public byte[] reserved = new byte[1016];
+
+ public NET_WLAN_ACCESSPOINT_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_WORKSUIT_ABSTRACT_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_WORKSUIT_ABSTRACT_INFO.java
new file mode 100644
index 0000000..77cb00d
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_WORKSUIT_ABSTRACT_INFO.java
@@ -0,0 +1,66 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 工装建模结果信息
+ * @date 2022/10/09 11:22:52
+ */
+public class NET_WORKSUIT_ABSTRACT_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 工装合规组ID
+ */
+ public byte[] szGroupID = new byte[64];
+ /**
+ * 工装建模进度,百分比
+ */
+ public int nProcess;
+ /**
+ * 该次工装建模的token值
+ */
+ public int nToken;
+ /**
+ * 工装图片建模成功的个数
+ */
+ public int nSucceedCnt;
+ /**
+ * 工装图片建模失败的个数
+ */
+ public int nFailedCnt;
+ /**
+ * 建模失败的全景图图片名称列表个数
+ */
+ public int nFailedSourceFileNamesNum;
+ /**
+ * 建模失败的全景图唯一标识符列表个数
+ */
+ public int nFailedSourceUIDNum;
+ /**
+ * 建模失败的全景图图片名称列表
+ */
+ public Byte64Arr[] szFailedSourceFileNames = new Byte64Arr[200];
+ /**
+ * 建模失败的全景图唯一标识符列表
+ */
+ public Byte64Arr[] szFailedSourceUID = new Byte64Arr[200];
+ /**
+ * 字节对齐
+ */
+ public byte[] szReserved1 = new byte[4];
+ /**
+ * 工装建模错误码个数
+ */
+ public int nErrCodeNum;
+ /**
+ * 工装建模错误码,参考枚举{ @link EM_WORKSUIT_ABSTRACT_ERRCODE}
+ */
+ public int[] emErrCode = new int[200];
+ /**
+ * 预留字段
+ */
+ public byte[] szReserved = new byte[1024];
+
+ public NET_WORKSUIT_ABSTRACT_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_WORKSUIT_APPEND_IDENTI_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_WORKSUIT_APPEND_IDENTI_INFO.java
new file mode 100644
index 0000000..4779811
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_WORKSUIT_APPEND_IDENTI_INFO.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 工装合规导入标识信息
+ * @date 2022/10/08 19:49:52
+ */
+public class NET_WORKSUIT_APPEND_IDENTI_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 该次图片导入的token值
+ */
+ public int nToken;
+ /**
+ * 表示该次添加图片是否结束,TRUE表示结束,FALSE表示未结束
+ */
+ public int bAppendEnd;
+ /**
+ * 保留字节
+ */
+ public byte[] szReserved = new byte[1024];
+
+ public NET_WORKSUIT_APPEND_IDENTI_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_WORKSUIT_CHANNEL_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_WORKSUIT_CHANNEL_INFO.java
new file mode 100644
index 0000000..8fd91b0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_WORKSUIT_CHANNEL_INFO.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 合规库布控信息(视频通道角度)
+ * @date 2022/10/08 17:05:54
+ */
+public class NET_WORKSUIT_CHANNEL_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 当前组绑定的通道信息, 只读, 获取时有效
+ */
+ public int nChannel;
+ /**
+ * 相似度阈值,范围 [1, 100],默认67, 只读, 获取时有效
+ */
+ public int nSimilarity;
+ /**
+ * 保留字节
+ */
+ public byte[] szReserved = new byte[128];
+
+ public NET_WORKSUIT_CHANNEL_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_WORKSUIT_COMPARE_GROUP_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_WORKSUIT_COMPARE_GROUP_INFO.java
new file mode 100644
index 0000000..9d514ab
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_WORKSUIT_COMPARE_GROUP_INFO.java
@@ -0,0 +1,57 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 工装合规组信息
+ * @date 2022/10/08 17:05:54
+ */
+public class NET_WORKSUIT_COMPARE_GROUP_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 合规组ID, 只读, 由设备生成, 创建工装库时无需指定
+ */
+ public byte[] szGroupID = new byte[64];
+ /**
+ * 合规组名称
+ */
+ public byte[] szGroupName = new byte[128];
+ /**
+ * 合规组备注信息
+ */
+ public byte[] szGroupDetail = new byte[256];
+ /**
+ * 工装优选方案 {@link com.netsdk.lib.enumeration.EM_WORKSUIT_GROUP_POLICY}
+ */
+ public int emWorkSuitPolicy;
+ /**
+ * 相似度阈值,范围 [1, 100],默认67
+ */
+ public int nSimilarity;
+ /**
+ * 合规组类型 {@link com.netsdk.lib.enumeration.EM_WORKSUIT_GROUP_TYPE}
+ */
+ public int emGroupType;
+ /**
+ * 当前组内工装数, 只读, 获取时有效
+ */
+ public int nGroupSize;
+ /**
+ * 合规库视频通道布控信息, 只读, 获取时有效
+ */
+ public NET_WORKSUIT_CHANNEL_INFO[] stuChannelInfo = new NET_WORKSUIT_CHANNEL_INFO[1024];
+ /**
+ * 当前组绑定的通道数量, 只读, 获取时有效
+ */
+ public int nChannelInfoNum;
+ /**
+ * 保留字节
+ */
+ public byte[] szReserved = new byte[2044];
+
+ public NET_WORKSUIT_COMPARE_GROUP_INFO() {
+ for (int i = 0; i < stuChannelInfo.length; i++) {
+ stuChannelInfo[i] = new NET_WORKSUIT_CHANNEL_INFO();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_WORKSUIT_SAMPLE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_WORKSUIT_SAMPLE_INFO.java
new file mode 100644
index 0000000..af43c58
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_WORKSUIT_SAMPLE_INFO.java
@@ -0,0 +1,42 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 工装合规样本信息
+ * @date 2022/10/08 19:51:42
+ */
+public class NET_WORKSUIT_SAMPLE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 合规库组ID
+ */
+ public byte[] szGroupID = new byte[64];
+ /**
+ * 合规库组名称
+ */
+ public byte[] szGroupName = new byte[128];
+ /**
+ * 全景图唯一标识符,由平台生成
+ */
+ public byte[] szSourceUID = new byte[64];
+ /**
+ * 全景图图片名称
+ */
+ public byte[] szSourceFileName = new byte[64];
+ /**
+ * 图片信息
+ */
+ public NetSDKLib.SCENE_IMAGE_INFO stuImageInfo = new NetSDKLib.SCENE_IMAGE_INFO();
+ /**
+ *文件路径, 支持HTTP URL表示; 支持FTP URL表示; 支持服务器本地路径,填写图片路径后无需填写图片信息中的offset与length字段
+ */
+ public byte[] szFilePath = new byte[256];
+ /**
+ * 保留字节
+ */
+ public byte[] szReserved = new byte[1792];
+
+ public NET_WORKSUIT_SAMPLE_INFO() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_WPAN_ACCESSORY_BUTTON_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_WPAN_ACCESSORY_BUTTON_INFO.java
new file mode 100644
index 0000000..92b74e5
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_WPAN_ACCESSORY_BUTTON_INFO.java
@@ -0,0 +1,35 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 按钮信息
+* @date 2022/08/31 14:44:18
+*/
+public class NET_WPAN_ACCESSORY_BUTTON_INFO extends NetSDKLib.SdkStructure {
+/**
+按键使能
+*/
+public int bEnable;
+/**
+报警类型 {@link com.netsdk.lib.enumeration.EM_BUTTON_ALARM_TYPE}
+*/
+public int emType;
+/**
+警号联动个数
+*/
+public int nSirenLinkageNum;
+/**
+警号联动
+*/
+public int[] nSirenLinkage=new int[64];
+/**
+预留字段
+*/
+public byte[] byReserved=new byte[32];
+
+public NET_WPAN_ACCESSORY_BUTTON_INFO(){
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_WPAN_ACCESSORY_CAPS_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_WPAN_ACCESSORY_CAPS_INFO.java
new file mode 100644
index 0000000..6bc3e1f
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_WPAN_ACCESSORY_CAPS_INFO.java
@@ -0,0 +1,43 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 配件能力集
+* @date 2022/08/31 14:44:17
+*/
+public class NET_WPAN_ACCESSORY_CAPS_INFO extends NetSDKLib.SdkStructure {
+/**
+是否支持报警声音设置
+*/
+public int bSupportAlarmTone;
+/**
+是否支持读卡器
+*/
+public int bSupportCardReader;
+/**
+是否支持门铃模式
+*/
+public int bSupportChime;
+/**
+是否支持超温报警
+*/
+public int bSupportOverTemperatureAlarm;
+/**
+是否支持外部wifi设置
+*/
+public int bSupportExternalWifi;
+/**
+是否支持wifi信息设置
+*/
+public int bSupportWifiInfo;
+/**
+预留字段
+*/
+public byte[] byreserve=new byte[32];
+
+public NET_WPAN_ACCESSORY_CAPS_INFO(){
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_WPAN_ACCESSORY_IMAGE_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_WPAN_ACCESSORY_IMAGE_INFO.java
new file mode 100644
index 0000000..0fae68e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_WPAN_ACCESSORY_IMAGE_INFO.java
@@ -0,0 +1,31 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 图片信息
+* @date 2022/08/31 14:44:17
+*/
+public class NET_WPAN_ACCESSORY_IMAGE_INFO extends NetSDKLib.SdkStructure {
+/**
+分辨率 {@link com.netsdk.lib.enumeration.CAPTURE_SIZE}
+*/
+public int emResolution;
+/**
+抓图数量
+*/
+public int nSnapshotNumber;
+/**
+抓图次数
+*/
+public int nSnapshotTimes;
+/**
+预留字段
+*/
+public byte[] byReserved=new byte[32];
+
+public NET_WPAN_ACCESSORY_IMAGE_INFO(){
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/NET_WPAN_ACCESSORY_INFO.java b/src/main/java/com/netsdk/lib/structure/NET_WPAN_ACCESSORY_INFO.java
new file mode 100644
index 0000000..e0ea679
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/NET_WPAN_ACCESSORY_INFO.java
@@ -0,0 +1,302 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 返回的配件信息
+* @date 2022/08/31 14:44:18
+*/
+public class NET_WPAN_ACCESSORY_INFO extends NetSDKLib.SdkStructure {
+/**
+结构体大小
+*/
+public int dwSize;
+/**
+录像使能,必须同时有RecordChannels
+*/
+public int bRecordEnable;
+/**
+外部告警使能
+*/
+public int bExternalAlarmEnable;
+/**
+无密码布防使能
+*/
+public int bArmingWithoutPassword;
+/**
+报警Led灯指示,0:关闭;1:打开
+*/
+public byte byAlarmLedIndication;
+/**
+控制检测外接电源状态的开关,0:关闭;1:打开
+*/
+public byte byExPowerCheck;
+/**
+配件防拆状态,0:关;1:开
+*/
+public byte byTamper;
+/**
+24H防区状态,0:关;1:开
+*/
+public byte by24HDefenceStatus;
+/**
+告警状态,0:正常;1:报警
+*/
+public byte byAlarmStatus;
+/**
+外部告警状态,0:正常;1:报警
+*/
+public byte byExternalAlarmStatus;
+/**
+Led灯指示,0:关;1:开
+*/
+public byte byLedIndication;
+/**
+布撤防以及进入退出延时是否有BEEP声音,0:无;1:有
+*/
+public byte byBeepIndication;
+/**
+紧急按钮状态,0:关;1:开
+*/
+public byte bySosStatus;
+/**
+配件上报方式,0:直连;1:中继上报
+*/
+public byte byViaTrace;
+/**
+传感器类型,0:常闭;1:常开
+*/
+public byte bySensorType;
+/**
+锁定状态,1:非锁定;2:锁定
+*/
+public byte byLockState;
+/**
+传感器故障状态,0:正常;1:故障
+*/
+public byte bySensorFailure;
+/**
+信号强度测试,0:关;1:开
+*/
+public byte bySignalStrengthTest;
+/**
+灵敏度测试,0:关;1:开
+*/
+public byte bySensitivityTest;
+/**
+音量测试,0:关;1:开
+*/
+public byte byVolumeTest;
+/**
+抓图测试,0:关;1:开
+*/
+public byte bySnapshotTest;
+/**
+wifi测试,0:关;1:开
+*/
+public byte byWifiTest;
+/**
+传感器屏蔽状态, 1:关闭屏蔽;2:开启屏蔽
+*/
+public byte byBlockState;
+/**
+配件短地址,从1开始
+*/
+public int nShortAddr;
+/**
+电池电量百分比:0~100
+*/
+public int nPercent;
+/**
+无线信号强度等级
+*/
+public int nSignalLevel;
+/**
+进入延时,单位:秒
+*/
+public int nEntryDelay;
+/**
+退出延时,单位:秒
+*/
+public int nExitDelay;
+/**
+报警持续时间,单位:秒
+*/
+public int nAlarmDuring;
+/**
+触发报警间隔时间,单位:秒
+*/
+public int nTriggerAlarmInterval;
+/**
+探测器状态 {@link com.netsdk.lib.enumeration.EM_DETECTOR_STATUS_TYPE}
+*/
+public int emState;
+/**
+设备布防时音量 {@link com.netsdk.lib.enumeration.EM_ACCESSORY_VOLUME}
+*/
+public int emBeepVolume;
+/**
+灵敏度 {@link com.netsdk.lib.enumeration.EM_ACCESSORY_SENSITIVITY}
+*/
+public int emSensentivity;
+/**
+功率调节 {@link com.netsdk.lib.enumeration.EM_POWER_REGULATION_TYPE}
+*/
+public int emPowerRegulation;
+/**
+在线状态 {@link com.netsdk.lib.enumeration.EM_ONLINE_STATUS}
+*/
+public int emOnline;
+/**
+报警类型 {@link com.netsdk.lib.enumeration.EM_ACCESSORY_ALARM_TYPE}
+*/
+public int emAlarmType;
+/**
+输入类型 {@link com.netsdk.lib.enumeration.EM_ACCESSORY_INPUT_TYPE}
+*/
+public int emInputType;
+/**
+LED亮度 {@link com.netsdk.lib.enumeration.EM_LED_BRIGHTNESS_LEVEL}
+*/
+public int emLedBrightnessLevel;
+/**
+操作模式 {@link com.netsdk.lib.enumeration.EM_OPERATION_MODE}
+*/
+public int emOperationMode;
+/**
+防误按模式 {@link com.netsdk.lib.enumeration.EM_ANTI_MISPRESS_TYPE}
+*/
+public int emAntiMispress;
+/**
+外部电源状态,若未开启检测外接电源状态则为未知 {@link com.netsdk.lib.enumeration.EM_EXPOWER_STATE}
+*/
+public int emExPowerState;
+/**
+设备报警音量 {@link com.netsdk.lib.enumeration.EM_ACCESSORY_VOLUME}
+*/
+public int emVolume;
+/**
+环境温度,单位:摄氏度
+*/
+public float fAmbientTemperature;
+/**
+配件序列号
+*/
+public byte[] szSN=new byte[32];
+/**
+配件名称
+*/
+public byte[] szName=new byte[64];
+/**
+配件版本
+*/
+public byte[] szVersion=new byte[64];
+/**
+配件型号
+*/
+public byte[] szModel=new byte[64];
+/**
+报警提示音
+*/
+public byte[] szAlarmTone=new byte[128];
+/**
+中继状态
+*/
+public NET_WPAN_RELAY_INFO stuRelayTran=new NET_WPAN_RELAY_INFO();
+/**
+传感器感应方式 {@link com.netsdk.lib.enumeration.EM_BUTTON_ALARM_TYPE}
+*/
+public int emType;
+/**
+心跳信息
+*/
+public NET_WPAN_HEARTBEAT_INFO stuHeartbeat=new NET_WPAN_HEARTBEAT_INFO();
+/**
+配件能力集
+*/
+public NET_WPAN_ACCESSORY_CAPS_INFO stuCaps=new NET_WPAN_ACCESSORY_CAPS_INFO();
+/**
+登录失败的锁定信息
+*/
+public NET_WPAN_ACCESSORY_LOCK_INFO stuLockInfo=new NET_WPAN_ACCESSORY_LOCK_INFO();
+/**
+读卡器配置
+*/
+public NET_WPAN_CARD_READER_INFO stuCardReader=new NET_WPAN_CARD_READER_INFO();
+/**
+图片信息
+*/
+public NET_WPAN_ACCESSORY_IMAGE_INFO stuImageInfo=new NET_WPAN_ACCESSORY_IMAGE_INFO();
+/**
+外部wifi信息
+*/
+public NET_WPAN_EXTERNAL_WIFI_INFO stuExternalWifi=new NET_WPAN_EXTERNAL_WIFI_INFO();
+/**
+Wi-Fi信息
+*/
+public NET_WPAN_WIFI_INFO stuWifiInfo=new NET_WPAN_WIFI_INFO();
+/**
+超温报警
+*/
+public NET_WPAN_OVER_TEMPERATURE_ALARM_INFO stuOverTemperatureAlarm=new NET_WPAN_OVER_TEMPERATURE_ALARM_INFO();
+/**
+所属区域个数
+*/
+public int nAreaNumberCnt;
+/**
+所属区域编号,整形数组从1开始
+*/
+public int[] nAreaNumber=new int[64];
+/**
+控制区域个数
+*/
+public int nControlAreaNumCnt;
+/**
+控制区域编号:所属区域编号,从1开始;-1:全局,0:关闭
+*/
+public int[] nControlAreaNum=new int[64];
+/**
+录像通道号个数
+*/
+public int nRecordChannelsNum;
+/**
+录像通道号列表,一维数组,每个成员表示对应的通道需要执行录像,通道号从0开始
+*/
+public int[] nRecordChannels=new int[256];
+/**
+警号联动个数
+*/
+public int nSirenLinkageNum;
+/**
+警号联动
+*/
+public int[] nSirenLinkage=new int[256];
+/**
+布防信息个数
+*/
+public int nArmingInfoNum;
+/**
+布防信息,最大4组
+*/
+public NET_WPAN_ARMING_INFO[] stuArmingInfo=new NET_WPAN_ARMING_INFO[4];
+/**
+按键个数
+*/
+public int nButtonNum;
+/**
+按键信息
+*/
+public NET_WPAN_ACCESSORY_BUTTON_INFO[] stuButton=new NET_WPAN_ACCESSORY_BUTTON_INFO[16];
+
+public NET_WPAN_ACCESSORY_INFO(){
+ for(int i=0;i>start&getOr(start,end);
+ }
+
+ /**
+ * 按位与的位数
+ * @param start 开始与的位数
+ * @param end 结束与的位数
+ * @return
+ */
+ private int getOr(int start,int end){
+ int result=0;
+ for (int i = 0; i < end-start; i++) {
+ result|=(1<
+ * \else
+ * 太阳能蓄电池信息
+ * \endif
+ * @date 2020/8/11
+ */
+public class SOLARCELL_BATTERY_INFO extends NetSDKLib.SdkStructure {
+
+ /**
+ * 电量百分比(范围:0~100)
+ */
+ public int nElectricityQuantityPercent;
+ /**
+ * 电压(单位:伏特)
+ */
+ public float fVoltage;
+ /**
+ * 温度(单位:摄氏度)
+ */
+ public float fTemperature;
+ /**
+ * 控制温度(单位:摄氏度)
+ */
+ public float fControllerTemper;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[256];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/SOLARCELL_PANEL_INFO.java b/src/main/java/com/netsdk/lib/structure/SOLARCELL_PANEL_INFO.java
new file mode 100644
index 0000000..4f6806c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/SOLARCELL_PANEL_INFO.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description \if ENGLISH_LANG
+ *
+ * \else
+ * 太阳能板信息
+ * \endif
+ * @date 2020/8/11
+ */
+public class SOLARCELL_PANEL_INFO extends NetSDKLib.SdkStructure {
+
+ /**
+ * 电压(单位:伏特)
+ */
+ public float fVoltage;
+ /**
+ * 电流(单位:安培)
+ */
+ public float fElectricCurrent;
+ /**
+ * 充电功率
+ */
+ public float fChargingPower;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[252];
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/SOLARCELL_SYSTEM_HISTORY_INFO.java b/src/main/java/com/netsdk/lib/structure/SOLARCELL_SYSTEM_HISTORY_INFO.java
new file mode 100644
index 0000000..1f0943c
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/SOLARCELL_SYSTEM_HISTORY_INFO.java
@@ -0,0 +1,35 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description
+ * \if ENGLISH_LANG
+ * solarcell system history info
+ * \else
+ * 太阳能系统历史数据信息
+ * \endif
+ * @date 2020/8/11
+ */
+public class SOLARCELL_SYSTEM_HISTORY_INFO extends NetSDKLib.SdkStructure {
+
+ /**
+ * 系统运行时间(单位:天)
+ */
+ public int nSystemTotalRunDay;
+ /**
+ * 蓄电池总过放次数
+ */
+ public int nBatteryOverDischargeCount;
+ /**
+ * 蓄电池总充满电次数
+ */
+ public int nBatteryTotalChargeCount;
+ /**
+ * 保留字节
+ */
+ public byte[] byReserved = new byte[252];
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/START_LISTEN_FINISH_RESULT_INFO.java b/src/main/java/com/netsdk/lib/structure/START_LISTEN_FINISH_RESULT_INFO.java
new file mode 100644
index 0000000..40420ca
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/START_LISTEN_FINISH_RESULT_INFO.java
@@ -0,0 +1,13 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @Author 251589
+ * @Description:
+ * @Date 2020/11/27 12:08
+ */
+public class START_LISTEN_FINISH_RESULT_INFO extends NetSDKLib.SdkStructure {
+ public int dwEventResult; // 事件订阅返回结果 NET_NOERROR:成功 非0:失败,值为错误码,详见_EC(x)
+ public byte[] byReserved = new byte[508];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/STEP_INFO.java b/src/main/java/com/netsdk/lib/structure/STEP_INFO.java
new file mode 100644
index 0000000..b5c0e05
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/STEP_INFO.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 灯组色步信息
+ * @date 2021/09/01
+ */
+public class STEP_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 进口方向
+ */
+ public int nEnterDir;
+
+ /**
+ * 进口灯组数量
+ */
+ public int nEnterLampNumber;
+
+ /**
+ * 灯色信息个数
+ */
+ public int nLampInfoNum;
+
+ /**
+ * 灯色信息(0~10)包含1到M(进口灯组数量)个灯色信息
+ */
+ public LAMP_INFO[] stuLightColorInfo = (LAMP_INFO[]) new LAMP_INFO().toArray(10);
+ /**
+ * 预留字节
+ */
+ public byte[] byReserved = new byte[128];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/STEP_SEQUENCE_INFO.java b/src/main/java/com/netsdk/lib/structure/STEP_SEQUENCE_INFO.java
new file mode 100644
index 0000000..d4c6b16
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/STEP_SEQUENCE_INFO.java
@@ -0,0 +1,33 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 色步时间序列信息
+ * @date 2021/09/01
+ */
+public class STEP_SEQUENCE_INFO extends NetSDKLib.SdkStructure{
+
+ /**
+ * 灯色个数
+ */
+ public int nLampColorCount;
+
+ /**
+ * // 灯色 当灯组类型EM_LAMP_TYPE为EM_LAMP_TYPE_STRAIGHT-EM_LAMP_TYPE_FLASH_WARN时,int[0]用于表示红色发光单元,int[1]用于表示黄色发光单元,int[2]用于表示绿色发光单元,int[3]保留
+ // 当灯组类型为EM_LAMP_TYPE_TRAM_DEDICATED_STRAIGHT-EM_LAMP_TYPE_TRAM_DEDICATED_RIGHT时,int[0]用于表示禁止通行信号发光单元,int[1]用于表示过渡信号发光单元,int[2]用于表示通行信号发光单元,int[3]保留
+ // 具体取值0:无灯1:灭灯2:亮灯3:闪烁
+ */
+ public int[] nLampColor = new int[4];
+
+ /**
+ * 时间长度,单位为秒(s)
+ */
+ public int nTime;
+
+ /**
+ * 预留字节
+ */
+ public byte[] byReserved = new byte[128];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/StringByteArr32.java b/src/main/java/com/netsdk/lib/structure/StringByteArr32.java
new file mode 100644
index 0000000..7519367
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/StringByteArr32.java
@@ -0,0 +1,15 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 字符串字节数组对象(长度32)
+ * @date 2021/01/13
+ */
+public class StringByteArr32 extends NetSDKLib.SdkStructure{
+ /**
+ * 二维数组内字符串对应字节数组
+ */
+ public byte[] data = new byte[32];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/StringByteArrSixteen.java b/src/main/java/com/netsdk/lib/structure/StringByteArrSixteen.java
new file mode 100644
index 0000000..6b61f71
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/StringByteArrSixteen.java
@@ -0,0 +1,15 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 字符串字节数组对象(长度16)
+ * @date 2021/01/13
+ */
+public class StringByteArrSixteen extends NetSDKLib.SdkStructure{
+ /**
+ * 二维数组内字符串对应字节数组
+ */
+ public byte[] data = new byte[NetSDKLib.CFG_COMMON_STRING_16];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/SupportedModeByteArr.java b/src/main/java/com/netsdk/lib/structure/SupportedModeByteArr.java
new file mode 100644
index 0000000..0a54794
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/SupportedModeByteArr.java
@@ -0,0 +1,15 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 网络模式字符串对应字节数组
+ * @date 2021/09/17
+ */
+public class SupportedModeByteArr extends NetSDKLib.SdkStructure{
+ /**
+ * 网络模式字符串对应字节数组
+ */
+ public byte[] supportedModeByteArr = new byte[NetSDKLib.NET_MAX_MODE_LEN];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/THERMOMETRY_SHIELD_INFO.java b/src/main/java/com/netsdk/lib/structure/THERMOMETRY_SHIELD_INFO.java
new file mode 100644
index 0000000..a562a15
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/THERMOMETRY_SHIELD_INFO.java
@@ -0,0 +1,39 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+* @author 291189
+* @description 每个屏蔽区的测温屏蔽区配置信息
+* @date 2022/11/07 10:53:23
+*/
+public class THERMOMETRY_SHIELD_INFO extends NetSDKLib.SdkStructure {
+/**
+屏蔽使能, TRUE开启, FALSE关闭
+*/
+public int bEnable;
+/**
+屏蔽区编号
+*/
+public int nShieldId;
+/**
+自定义名称
+*/
+public byte[] szName=new byte[64];
+/**
+ 坐标点
+*/
+public NET_RECT stuRect=new NET_RECT();
+/**
+预置点编号
+*/
+public int nPresetId;
+/**
+预留字段
+*/
+public byte[] szReserved=new byte[128];
+
+public THERMOMETRY_SHIELD_INFO(){
+}
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/TIME_SECTION_6.java b/src/main/java/com/netsdk/lib/structure/TIME_SECTION_6.java
new file mode 100644
index 0000000..45c20f1
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/TIME_SECTION_6.java
@@ -0,0 +1,11 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+/**
+ * @author 251823
+ * @description 6个NET_TSECT时间段结构体
+ * @date 2022/10/14 13:53:01
+ */
+public class TIME_SECTION_6 extends NetSDKLib.SdkStructure{
+ public NetSDKLib.NET_TSECT[] timeSection = new NetSDKLib.NET_TSECT[NetSDKLib.NET_N_REC_TSECT];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/TRAFFIC_EVENT.java b/src/main/java/com/netsdk/lib/structure/TRAFFIC_EVENT.java
new file mode 100644
index 0000000..2407559
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/TRAFFIC_EVENT.java
@@ -0,0 +1,35 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 交通事件信息
+ * @date 2021/09/01
+ */
+public class TRAFFIC_EVENT extends NetSDKLib.SdkStructure{
+ /**
+ * 机动车电子标识序列号
+ */
+ public byte[] szCarId = new byte[128];
+
+ /**
+ * 车牌号码
+ */
+ public byte[] szPlateNumber = new byte[128];
+
+ /**
+ * 行驶方向以地理正北方向为起点的顺时针旋转角度,单位为度(°)
+ */
+ public int nDrivingDir;
+
+ /**
+ * 交通事件,参考{ @link EM_TRAFFIC_EVENT }
+ */
+ public int emTrafficEvent;
+
+ /**
+ * 预留字节
+ */
+ public byte[] byReserved = new byte[128];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/TRAFFIC_FLOW_JUNTION_INFO.java b/src/main/java/com/netsdk/lib/structure/TRAFFIC_FLOW_JUNTION_INFO.java
new file mode 100644
index 0000000..fbf4312
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/TRAFFIC_FLOW_JUNTION_INFO.java
@@ -0,0 +1,68 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author : 260611
+ * @description : 区域路口过车信息
+ * @since : Created in 2022/03/10 10:12
+ */
+
+public class TRAFFIC_FLOW_JUNTION_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 区域号
+ */
+ public int nAreaNo;
+ /**
+ * 路口号
+ */
+ public int nJunNo;
+ /**
+ * 方向号,北东南西分别为0/1/2/3
+ */
+ public int nDirNo;
+ /**
+ * 进出口类型,进口道 0,出口道 1
+ */
+ public int nLaneDirType;
+ /**
+ * 检测断面号
+ */
+ public int nSecNo;
+ /**
+ * 车道号0~7
+ */
+ public int nLaneNo;
+ /**
+ * 车辆类型
+ */
+ public int nVehType;
+ /**
+ * 车辆速度,精度1km/h
+ */
+ public int nVehSpeed;
+ /**
+ * 占有时间,单位ms
+ */
+ public int nOccTime;
+ /**
+ * 保留字节
+ */
+ public byte[] szReserverd = new byte[252];
+
+ @Override
+ public String toString() {
+ return "TRAFFIC_FLOW_JUNTION_INFO{" +
+ "nAreaNo=" + nAreaNo +
+ ", nJunNo=" + nJunNo +
+ ", nDirNo=" + nDirNo +
+ ", nLaneDirType=" + nLaneDirType +
+ ", nSecNo=" + nSecNo +
+ ", nLaneNo=" + nLaneNo +
+ ", nVehType=" + nVehType +
+ ", nVehSpeed=" + nVehSpeed +
+ ", nOccTime=" + nOccTime +
+ '}';
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/TRAFFIC_FLOW_LANE_INFO.java b/src/main/java/com/netsdk/lib/structure/TRAFFIC_FLOW_LANE_INFO.java
new file mode 100644
index 0000000..ae4caf4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/TRAFFIC_FLOW_LANE_INFO.java
@@ -0,0 +1,38 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author : 260611
+ * @description : 车道的车道统计信息
+ * @since : Created in 2022/03/10 10:12
+ */
+
+public class TRAFFIC_FLOW_LANE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 车道流量
+ */
+ public int nFlow;
+ /**
+ * 车道平均速度,1km/h精度
+ */
+ public int nAveSpeed;
+ /**
+ * 车道占有率
+ */
+ public int nOccupancy;
+ /**
+ * 保留字节
+ */
+ public byte[] szReserverd = new byte[252];
+
+ @Override
+ public String toString() {
+ return "TRAFFIC_FLOW_LANE_INFO{" +
+ "nFlow=" + nFlow +
+ ", nAveSpeed=" + nAveSpeed +
+ ", nOccupancy=" + nOccupancy +
+ '}';
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/TRAFFIC_FLOW_QUEUE_INFO.java b/src/main/java/com/netsdk/lib/structure/TRAFFIC_FLOW_QUEUE_INFO.java
new file mode 100644
index 0000000..f11744e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/TRAFFIC_FLOW_QUEUE_INFO.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+import java.util.Arrays;
+
+/**
+ * @author : 260611
+ * @description : 区域路口排队信息
+ * @since : Created in 2022/03/10 10:12
+ */
+
+public class TRAFFIC_FLOW_QUEUE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 检测器状态 0-正常 1-故障
+ */
+ public int nDecStatus;
+ /**
+ * 区域号
+ */
+ public int nAreaNo;
+ /**
+ * 路口号
+ */
+ public int nJunNo;
+ /**
+ * 方向号,北东南西分别为0/1/2/3
+ */
+ public int nDirNo;
+ /**
+ * 进出口类型,进口道 0,出口道 1
+ */
+ public int nLaneDirType;
+ /**
+ * 车道信息个数
+ */
+ public int nQueueInfoNum;
+ /**
+ * 0~7车道的信息
+ */
+ public TRAFFIC_QUEUE_INFO[] stuQueueInfo = (TRAFFIC_QUEUE_INFO[]) new TRAFFIC_QUEUE_INFO().toArray(32);
+ /**
+ * 保留字节
+ */
+ public byte[] szReserverd = new byte[256];
+
+ @Override
+ public String toString() {
+
+ String stuQueueInfos = "";
+ if(nQueueInfoNum > 0){
+ stuQueueInfos += "stuQueueInfo[0] = ";
+ stuQueueInfos += stuQueueInfo[0].toString();
+ }
+ for(int i = 1; i < nQueueInfoNum; i ++){
+ stuQueueInfos += ",stuQueueInfo[" + i + "] = ";
+ stuQueueInfos += stuQueueInfo[i].toString();
+ }
+ return "TRAFFIC_FLOW_QUEUE_INFO{" +
+ "nDecStatus=" + nDecStatus +
+ ", nAreaNo=" + nAreaNo +
+ ", nJunNo=" + nJunNo +
+ ", nDirNo=" + nDirNo +
+ ", nLaneDirType=" + nLaneDirType +
+ ", nQueueInfoNum=" + nQueueInfoNum +
+ ", stuQueueInfo=" + stuQueueInfos +
+ '}';
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/TRAFFIC_FLOW_STAT_EX_INFO.java b/src/main/java/com/netsdk/lib/structure/TRAFFIC_FLOW_STAT_EX_INFO.java
new file mode 100644
index 0000000..ea647f8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/TRAFFIC_FLOW_STAT_EX_INFO.java
@@ -0,0 +1,64 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+import java.util.Arrays;
+
+/**
+ * @author : 260611
+ * @description : 路口车道统计信息
+ * @since : Created in 2022/03/10 10:12
+ */
+
+public class TRAFFIC_FLOW_STAT_EX_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 区域号
+ */
+ public int nAreaNo;
+ /**
+ * 路口号
+ */
+ public int nJunNo;
+ /**
+ * 方向号,北东南西分别为0/1/2/3
+ */
+ public int nDirNo;
+ /**
+ * 检测断面号
+ */
+ public int nSecNo;
+ /**
+ * 0~7车道的车道统计信息
+ */
+ public TRAFFIC_FLOW_LANE_INFO[] stuLaneInfo = (TRAFFIC_FLOW_LANE_INFO[]) new TRAFFIC_FLOW_LANE_INFO().toArray(32);
+ /**
+ * 车道统计信息个数
+ */
+ public int nLaneInfoNum;
+ /**
+ * 保留字节
+ */
+ public byte[] szReserverd = new byte[252];
+
+ @Override
+ public String toString() {
+ String stuLaneInfos = "";
+ if(nLaneInfoNum > 0){
+ stuLaneInfos += "stuLaneInfo[0] = ";
+ stuLaneInfos += stuLaneInfo[0].toString();
+ }
+ for(int i = 1; i < nLaneInfoNum; i ++){
+ stuLaneInfos += ",stuLaneInfo[" + i + "] = ";
+ stuLaneInfos += stuLaneInfo[i].toString();
+ }
+ return "TRAFFIC_FLOW_STAT_EX_INFO{" +
+ "nAreaNo=" + nAreaNo +
+ ", nJunNo=" + nJunNo +
+ ", nDirNo=" + nDirNo +
+ ", nSecNo=" + nSecNo +
+ ", stuLaneInfo=" + stuLaneInfos +
+ ", nLaneInfoNum=" + nLaneInfoNum +
+ '}';
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/TRAFFIC_FLOW_VEHICLE_STOP_INFO.java b/src/main/java/com/netsdk/lib/structure/TRAFFIC_FLOW_VEHICLE_STOP_INFO.java
new file mode 100644
index 0000000..e5da75e
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/TRAFFIC_FLOW_VEHICLE_STOP_INFO.java
@@ -0,0 +1,63 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author : 260611
+ * @description : 区域路口停车信息
+ * @since : Created in 2022/03/10 10:12
+ */
+
+public class TRAFFIC_FLOW_VEHICLE_STOP_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 区域号
+ */
+ public int nAreaNo;
+ /**
+ * 路口号
+ */
+ public int nJunNo;
+ /**
+ * 方向号,北东南西分别为0/1/2/3
+ */
+ public int nDirNo;
+ /**
+ * 进出口类型,进口道 0,出口道 1
+ */
+ public int nLaneDirType;
+ /**
+ * 车道号0~7
+ */
+ public int nLaneNo;
+ /**
+ * 停车位置,精度1m
+ */
+ public int nStopPos;
+ /**
+ * 停车次数,第几次停车
+ */
+ public int nStopTimes;
+ /**
+ * 停车占有时间,单位ms
+ */
+ public int nStopOccTime;
+ /**
+ * 保留字节
+ */
+ public byte[] szReserverd = new byte[256];
+
+ @Override
+ public String toString() {
+ return "TRAFFIC_FLOW_VEHICLE_STOP_INFO{" +
+ "nAreaNo=" + nAreaNo +
+ ", nJunNo=" + nJunNo +
+ ", nDirNo=" + nDirNo +
+ ", nLaneDirType=" + nLaneDirType +
+ ", nLaneNo=" + nLaneNo +
+ ", nStopPos=" + nStopPos +
+ ", nStopTimes=" + nStopTimes +
+ ", nStopOccTime=" + nStopOccTime +
+ '}';
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/TRAFFIC_INFO.java b/src/main/java/com/netsdk/lib/structure/TRAFFIC_INFO.java
new file mode 100644
index 0000000..0650d94
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/TRAFFIC_INFO.java
@@ -0,0 +1,29 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 交通流信息
+ * @date 2021/09/01
+ */
+public class TRAFFIC_INFO extends NetSDKLib.SdkStructure{
+ /**
+ * 进口数量
+ */
+ public int nEnterNumber;
+
+ /**
+ * 进口方向交通流信息个数
+ */
+ public int nEnterTrafficInfoNum;
+
+ /**
+ * 进口方向交通流信息, 包含1到N(进口数量)个进口方向交通流信息
+ */
+ public ENTER_TRAFFIC_INFO[] stuEnterTrafficInfo = (ENTER_TRAFFIC_INFO[]) new ENTER_TRAFFIC_INFO().toArray(8);
+ /**
+ * 预留字节
+ */
+ public byte[] byReserved = new byte[128];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/TRAFFIC_QUEUE_INFO.java b/src/main/java/com/netsdk/lib/structure/TRAFFIC_QUEUE_INFO.java
new file mode 100644
index 0000000..3f028bb
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/TRAFFIC_QUEUE_INFO.java
@@ -0,0 +1,59 @@
+package com.netsdk.lib.structure;
+
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.NET_EM_OVER_FLOW_STATE;
+
+/**
+ * @author : 260611
+ * @description : 车道的信息
+ * @since : Created in 2022/03/10 10:12
+ */
+
+public class TRAFFIC_QUEUE_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 车道号
+ */
+ public int nLane;
+ /**
+ * 排队长度
+ */
+ public int nQueueLen;
+ /**
+ * 排队起始位置,精度1m
+ */
+ public int nQueueStartPos;
+ /**
+ * 检测区域内车辆数
+ */
+ public int nQueueVehNum;
+ /**
+ * 车道中实时车辆平均速度,精度1km/h
+ */
+ public int nQueueVehSpeed;
+ /**
+ * 停止线最近一个线圈的占有时间,从开始占有算起,单位ms
+ */
+ public int nOccTime;
+ /**
+ * 溢出状态。例:如给当前路段设定允许排队长度阀值,实际排队长度超过阀值后就判定当前时刻该路段有溢出。{@link NET_EM_OVER_FLOW_STATE}
+ */
+ public int emOverflowState;
+ /**
+ * 保留字节
+ */
+ public byte[] szReserverd = new byte[252];
+
+ @Override
+ public String toString() {
+ return "TRAFFIC_QUEUE_INFO{" +
+ "nLane=" + nLane +
+ ", nQueueLen=" + nQueueLen +
+ ", nQueueStartPos=" + nQueueStartPos +
+ ", nQueueVehNum=" + nQueueVehNum +
+ ", nQueueVehSpeed=" + nQueueVehSpeed +
+ ", nOccTime=" + nOccTime +
+ ", emOverflowState=" + NET_EM_OVER_FLOW_STATE.getNoteByValue(emOverflowState) +
+ '}';
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/TRAFFIC_STATE.java b/src/main/java/com/netsdk/lib/structure/TRAFFIC_STATE.java
new file mode 100644
index 0000000..2c44bee
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/TRAFFIC_STATE.java
@@ -0,0 +1,36 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 交通运行状态信息
+ * @date 2021/09/01
+ */
+public class TRAFFIC_STATE extends NetSDKLib.SdkStructure{
+ /**
+ * 进口数量
+ */
+ public int nEnterNumber;
+
+ /**
+ * 进口交通运行状态信息个数
+ */
+ public int nEnterStateInfoNum;
+
+ /**
+ * 进口交通运行状态信息(0~8), 包含1到N(进口数量)个进口交通运行状态信息
+ */
+ public ENTER_STATE_INFO[] stuEnterStateInfo = (ENTER_STATE_INFO[]) new ENTER_STATE_INFO().toArray(8);
+
+ /**
+ * 统计分析周期,单位分钟1~255
+ */
+ public int nPeriod;
+
+ /**
+ * 预留字节
+ */
+ public byte[] byReserved = new byte[124];
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/UNPACKING_CHECK_INFO.java b/src/main/java/com/netsdk/lib/structure/UNPACKING_CHECK_INFO.java
new file mode 100644
index 0000000..9978daf
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/UNPACKING_CHECK_INFO.java
@@ -0,0 +1,89 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description 开包检查信息
+ * @date 2021/9/9
+ */
+public class UNPACKING_CHECK_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 事件发生时间,带时区偏差的UTC时间,单位秒
+ */
+ public int nUTC;
+ /**
+ * 事件时间毫秒数
+ */
+ public int nUTCMS;
+ /**
+ * 表示包裹标识,用来唯一标识一个包裹
+ */
+ public byte[] szPackageTag = new byte[32];
+ /**
+ * 关联图片
+ */
+ public RELATED_IMAGE[] stuRelatedImage = new RELATED_IMAGE[64];
+ /**
+ * 关联图片数量
+ */
+ public int nRelatedImageRetNum;
+
+ /**
+ * 报警时间(即拍摄违禁品时间),UTC时间,单位秒
+ */
+ public int nAlarmTime;
+
+ /**
+ * 身份信息
+ */
+ public IDENTITY_INFO stuIdentityInfo = new IDENTITY_INFO();
+ /**
+ * 违禁物品分类 已经废弃
+ */
+ public OneDimensionalInformation[] szContrabandClass = new OneDimensionalInformation[16];
+ /**
+ * 违禁物品个数
+ */
+ public int nContrabandRetNum;
+ /**
+ * 处理方式 EM_PROCESS_MODE
+ */
+ public int emProcessMode;
+ /**
+ * 检出人,即开包人员
+ */
+ public byte[] szChecker = new byte[128];
+ /**
+ * 报警地点
+ */
+ public byte[] szAlarmLocation = new byte[256];
+ /**
+ * com.netsdk.lib.NetSDKLib.EM_INSIDE_OBJECT_TYPE
+ */
+ public int[] emContrabandClass = new int[64]; // 违禁物品分类
+ /**
+ * 行程出发地
+ */
+ public byte[] szPlaceOfDeparture = new byte[256];
+ /**
+ * 行程目的地
+ */
+ public byte[] szDestination = new byte[256];
+ /**
+ * 预留字节
+ */
+ public byte[] szReserved = new byte[18688];
+
+ public UNPACKING_CHECK_INFO() {
+ for (int i = 0; i < 16; i++) {
+ szContrabandClass[i] = new OneDimensionalInformation();
+ }
+ for (int i = 0; i < 64; i++) {
+ stuRelatedImage[i] = new RELATED_IMAGE();
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/USER_TIME_SECTION.java b/src/main/java/com/netsdk/lib/structure/USER_TIME_SECTION.java
new file mode 100644
index 0000000..f7e8a04
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/USER_TIME_SECTION.java
@@ -0,0 +1,13 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 用户的开门时间段
+ * @date 2021/2/8
+ */
+public class USER_TIME_SECTION extends NetSDKLib.SdkStructure {
+ public byte[] userTimeSections=new byte[20];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/VA_CAPS_INFO.java b/src/main/java/com/netsdk/lib/structure/VA_CAPS_INFO.java
new file mode 100644
index 0000000..4d3f3f2
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/VA_CAPS_INFO.java
@@ -0,0 +1,26 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+/**
+ * @author 251823
+ * @description 视频分析能力集
+ * @date 2021/01/11
+ */
+public class VA_CAPS_INFO extends NetSDKLib.SdkStructure {
+
+ /**
+ * 支持的场景列表
+ */
+ public byte[] szSceneName = new byte[NetSDKLib.MAX_SCENE_LIST_SIZE*NetSDKLib.MAX_NAME_LEN];//TODO
+
+ /**
+ * 支持的场景个数
+ */
+ public int nSupportedSceneNum;
+
+ /**
+ * 预留字段
+ */
+ public byte[] byReserved = new byte[4];
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/VA_DYNAMIC_CAPS_INFO.java b/src/main/java/com/netsdk/lib/structure/VA_DYNAMIC_CAPS_INFO.java
new file mode 100644
index 0000000..328c3a8
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/VA_DYNAMIC_CAPS_INFO.java
@@ -0,0 +1,27 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 动态能力集
+ * @date 2021/01/11
+ */
+public class VA_DYNAMIC_CAPS_INFO extends NetSDKLib.SdkStructure{
+
+ /**
+ * 支持的场景类型,参考{ @link NetSDKLib.EM_SCENE_TYPE}
+ */
+ public int[] emSceneType = new int[32];
+
+ /**
+ * 支持的场景个数
+ */
+ public int nSceneNum;
+
+ /**
+ * 预留字段
+ */
+ public byte[] byReserved = new byte[252];
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/VA_OBJECT_ANIMAL.java b/src/main/java/com/netsdk/lib/structure/VA_OBJECT_ANIMAL.java
new file mode 100644
index 0000000..8e6a0a4
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/VA_OBJECT_ANIMAL.java
@@ -0,0 +1,56 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @version 1.0
+ * @description 视频分析物体(动物)
+ * @date 2022/03/31
+ */
+public class VA_OBJECT_ANIMAL extends NetSDKLib.SdkStructure{
+ /**
+ * 物体ID, 每个ID表示一个唯一的物体
+ */
+ public int nObjectID;
+
+ /**
+ * 目标动物类型
+ */
+ public int emCategory;
+
+ /**
+ * 包围盒 动物对象在全景图中的框坐标,为0~8191相对坐标
+ */
+ public NET_RECT stuBoundingBox;
+
+ /**
+ * 动物对象重量,单位:g
+ */
+ public int nObjectWeight;
+
+ /**
+ * 物体截图
+ */
+ public NET_OBJECT_IMAGE_INFO stuImage;
+
+ /**
+ * 运动状态,参考枚举{ @link ENUM_MOTION_STATUS }
+ */
+ public int emMoveStatus;
+
+ /**
+ * 区域内状态,参考枚举{ @link ENUM_IN_REGION_STATUS }
+ */
+ public int emInRegionStatus;
+
+ /**
+ * 结果类型 0-实时 1-非实时
+ */
+ public int nResultType;
+
+ /**
+ * 保留字节,留待扩展
+ */
+ public byte[] bReserved = new byte[1024];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/VaccinateDateByteArr.java b/src/main/java/com/netsdk/lib/structure/VaccinateDateByteArr.java
new file mode 100644
index 0000000..4b606be
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/VaccinateDateByteArr.java
@@ -0,0 +1,15 @@
+package com.netsdk.lib.structure;
+
+import com.netsdk.lib.NetSDKLib;
+/**
+ * @author 251823
+ * @description 历史接种日期字符串对应字节数组
+ * @date 2021/08/15
+ */
+public class VaccinateDateByteArr extends NetSDKLib.SdkStructure{
+ /**
+ * 历史接种日期字符串对应字节数组
+ */
+ public byte[] vaccinateDateByteArr = new byte[32];
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/customize/CANDIDATE_INFO_CEX.java b/src/main/java/com/netsdk/lib/structure/customize/CANDIDATE_INFO_CEX.java
new file mode 100644
index 0000000..8d05385
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/customize/CANDIDATE_INFO_CEX.java
@@ -0,0 +1,67 @@
+package com.netsdk.lib.structure.customize;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.Utils;
+import com.netsdk.lib.structure.NET_TIME;
+
+import java.nio.charset.Charset;
+import java.util.Arrays;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description 候选人信息拓展结构体(),结构体, 日常使用以structure包和NetSDKLib下的同名结构体为主
+ * @date 2021/3/17
+ */
+public class CANDIDATE_INFO_CEX extends NetSDKLib.SdkStructure {
+ /** 姓名 */
+ public byte[] szPersonName = new byte[64];
+ /** 人员唯一标示(证件号码,工号,或其他编号) */
+ public byte[] szID = new byte[32];
+ /** 和查询图片的相似度,百分比表示,1~100 */
+ public byte bySimilarity;
+ /** 人员所属数据库范围,详见EM_FACE_DB_TYPE */
+ public byte byRange;
+ /** 当byRange为历史数据库时有效,表示查询人员出现的时间 */
+ public NET_TIME stTime;
+ /** 当byRange为历史数据库时有效,表示查询人员出现的地点 */
+ public byte[] szAddress = new byte[260];
+ /** 是否有识别结果,指这个检测出的人脸在库中有没有比对结果 */
+ public boolean bIsHit;
+ /** 通道号 */
+ public int nChannelID;
+
+ public String getPersonName() {
+ return new String(szPersonName, Charset.forName(Utils.getPlatformEncode())).trim();
+ }
+
+ public String getID() {
+ return new String(szID, Charset.forName(Utils.getPlatformEncode())).trim();
+ }
+
+ public String getAddress() {
+ return new String(szAddress, Charset.forName(Utils.getPlatformEncode())).trim();
+ }
+
+ @Override
+ public String toString() {
+ return "CANDIDATE_INFO_CEX{"
+ + "szPersonName="
+ + getPersonName()
+ + ", szID="
+ + getID()
+ + ", bySimilarity="
+ + bySimilarity
+ + ", byRange="
+ + byRange
+ + ", stTime="
+ + stTime
+ + ", szAddress="
+ + getAddress()
+ + ", bIsHit="
+ + bIsHit
+ + ", nChannelID="
+ + nChannelID
+ + '}';
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/customize/DEV_EVENT_CROSSLINE_INFO.java b/src/main/java/com/netsdk/lib/structure/customize/DEV_EVENT_CROSSLINE_INFO.java
new file mode 100644
index 0000000..f5f00ea
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/customize/DEV_EVENT_CROSSLINE_INFO.java
@@ -0,0 +1,158 @@
+package com.netsdk.lib.structure.customize;
+
+import com.netsdk.lib.NetSDKLib;
+
+import static com.netsdk.lib.NetSDKLib.*;
+
+/**
+ * 船只绊线入侵事件结构体
+ *
+ * ERR210428143 水面预警事件 专用结构体
+ *
+ * 注意: 其他项目不要使用, 通用的停车检测事件结构体见:
+ * {@link NetSDKLib.DEV_EVENT_CROSSLINE_INFO}
+ *
+ * @author 47040
+ * @since Created in 2021/5/13 19:03
+ */
+public class DEV_EVENT_CROSSLINE_INFO extends SdkStructure {
+
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 事件名称
+ */
+ public byte[] szName = new byte[128];
+ /**
+ * 字节对齐
+ */
+ public byte[] bReserved1 = new byte[4];
+ /**
+ * 时间戳(单位是毫秒)
+ */
+ public double PTS;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX UTC;
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * 检测到的物体
+ */
+ public NET_MSG_OBJECT stuObject;
+ /**
+ * 事件对应文件信息
+ */
+ public NET_EVENT_FILE_INFO stuFileInfo;
+ /**
+ * 规则检测线
+ */
+ public NET_POINT[] DetectLine = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_DETECT_LINE_NUM);
+ /**
+ * 规则检测线顶点数
+ */
+ public int nDetectLineNum;
+ /**
+ * 物体运动轨迹
+ */
+ public NET_POINT[] TrackLine = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_TRACK_LINE_NUM);
+ /**
+ * 物体运动轨迹顶点数
+ */
+ public int nTrackLineNum;
+ /**
+ * 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ */
+ public byte bEventAction;
+ /**
+ * 表示入侵方向, 0-由左至右, 1-由右至左
+ */
+ public byte bDirection;
+ /**
+ * 字节对齐
+ */
+ public byte[] byReserved = new byte[1];
+ /**
+ * 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ */
+ public byte byImageIndex;
+ /**
+ * 抓图标志(按位),具体见 NET_RESERVED_COMMON,
+ * 0位:"*",1位:"Timing",2位:"Manual",
+ * 3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ */
+ public int dwSnapFlagMask;
+ /**
+ * 事件源设备上的index,-1表示数据无效,-1表示数据无效
+ */
+ public int nSourceIndex;
+ /**
+ * 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ */
+ public byte[] szSourceDevice = new byte[MAX_PATH];
+ /**
+ * 事件触发累计次数, 类型为unsigned int
+ */
+ public int nOccurrenceCount;
+ /**
+ * 智能事件公共信息
+ */
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo;
+ /**
+ * 扩展信息
+ */
+ public NET_EXTENSION_INFO stuExtensionInfo;
+ /**
+ * 全景广角图
+ */
+ public SCENE_IMAGE_INFO_EX stuSceneImage;
+ /**
+ * 检测到人的数量
+ */
+ public int nObjetcHumansNum;
+ /**
+ * 检测的到人
+ */
+ public NET_VAOBJECT_NUMMAN[] stuObjetcHumans = (NET_VAOBJECT_NUMMAN[]) new NET_VAOBJECT_NUMMAN().toArray(100);
+ /**
+ * 规则编号,用于标示哪个规则触发的事件,缺省时默认为0
+ */
+ public int nRuleID;
+ /**
+ * 事件级别 {@link EM_EVENT_LEVEL}
+ */
+ public int emEventType;
+ /**
+ * 热成像横向视场角,单位度,实际角度乘以100 (ERR210428143 专用, 其他项目不要使用)
+ */
+ public int nThermoHFOV;
+ /**
+ * 热成像纵向视场角,单位度,实际角度乘以100 (ERR210428143 专用, 其他项目不要使用)
+ */
+ public int nThermoVFOV;
+ /**
+ * 船高 (ERR210428143 专用, 其他项目不要使用)
+ */
+ public int nBoatHeight;
+ /**
+ * 船长 (ERR210428143 专用, 其他项目不要使用)
+ */
+ public int nBoatLength;
+ /**
+ * 船速 (ERR210428143 专用, 其他项目不要使用)
+ */
+ public int nBoatSpeed;
+ /**
+ * 船距 (ERR210428143 专用, 其他项目不要使用)
+ */
+ public int nBoatDistance;
+ /**
+ * 字节对齐
+ */
+ public byte[] byReserved1 = new byte[480];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/customize/DEV_EVENT_CROSSREGION_INFO.java b/src/main/java/com/netsdk/lib/structure/customize/DEV_EVENT_CROSSREGION_INFO.java
new file mode 100644
index 0000000..d0ab8b6
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/customize/DEV_EVENT_CROSSREGION_INFO.java
@@ -0,0 +1,209 @@
+package com.netsdk.lib.structure.customize;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.enumeration.EM_CAPTURE_PROCESS_END_TYPE;
+import com.netsdk.lib.enumeration.EM_TRIGGER_TYPE;
+
+import static com.netsdk.lib.NetSDKLib.*;
+
+/**
+ * 船只的绊线入侵事件信息
+ *
+ * ERR210428143 水面预警事件 专用结构体
+ *
+ * 注意: 其他项目不要使用, 通用的绊线入侵事件结构体见:
+ * {@link NetSDKLib.DEV_EVENT_CROSSREGION_INFO}
+ *
+ * @author 47040
+ * @since Created in 2021/5/13 17:35
+ */
+public class DEV_EVENT_CROSSREGION_INFO extends SdkStructure {
+
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 事件名称
+ */
+ public byte[] szName = new byte[128];
+ /**
+ * 字节对齐
+ */
+ public byte[] bReserved1 = new byte[4];
+ /**
+ * 时间戳(单位是毫秒)
+ */
+ public double PTS;
+ /**
+ * 事件发生的时间
+ */
+ public NET_TIME_EX UTC;
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * 检测到的物体
+ */
+ public NET_MSG_OBJECT stuObject;
+ /**
+ * 事件对应文件信息
+ */
+ public NET_EVENT_FILE_INFO stuFileInfo;
+ /**
+ * 规则检测区域
+ */
+ public NET_POINT[] DetectRegion = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_DETECT_REGION_NUM);
+ /**
+ * 规则检测区域顶点数
+ */
+ public int nDetectRegionNum;
+ /**
+ * 物体运动轨迹
+ */
+ public NET_POINT[] TrackLine = (NET_POINT[]) new NET_POINT().toArray(NET_MAX_TRACK_LINE_NUM);
+ /**
+ * 物体运动轨迹顶点数
+ */
+ public int nTrackLineNum;
+ /**
+ * 事件动作,0表示脉冲事件,1表示持续性事件开始,2表示持续性事件结束;
+ */
+ public byte bEventAction;
+ /**
+ * 表示入侵方向, 0-进入, 1-离开,2-出现,3-消失
+ */
+ public byte bDirection;
+ /**
+ * 表示检测动作类型,0-出现 1-消失 2-在区域内 3-穿越区域
+ */
+ public byte bActionType;
+ /**
+ * 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从0开始
+ */
+ public byte byImageIndex;
+ /**
+ * 抓图标志(按位),具体见NET_RESERVED_COMMON ,
+ * 0位:"*",1位:"Timing",2位:"Manual",
+ * 3位:"Marked",4位:"Event",5位:"Mosaic",6位:"Cutout"
+ */
+ public int dwSnapFlagMask;
+ /**
+ * 事件源设备上的index,-1表示数据无效
+ */
+ public int nSourceIndex;
+ /**
+ * 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ */
+ public byte[] szSourceDevice = new byte[MAX_PATH];
+ /**
+ * 事件触发累计次数, int 类型
+ */
+ public int nOccurrenceCount;
+ /**
+ * 货物通道信息
+ */
+ public NET_CUSTOM_INFO stuCustom;
+ /**
+ * 扩展信息
+ */
+ public NET_EXTENSION_INFO stuExtensionInfo;
+ /**
+ * 智能事件规则编号,用于标示哪个规则触发的事件
+ */
+ public int nRuleID;
+ /**
+ * 热成像横向视场角,单位度,实际角度乘以100 (ERR210428143 专用, 其他项目不要使用)
+ */
+ public int nThermoHFOV;
+ /**
+ * 热成像纵向视场角,单位度,实际角度乘以100 (ERR210428143 专用, 其他项目不要使用)
+ */
+ public int nThermoVFOV;
+ /**
+ * 船高 (ERR210428143 专用, 其他项目不要使用)
+ */
+ public int nBoatHeight;
+ /**
+ * 船长 (ERR210428143 专用, 其他项目不要使用)
+ */
+ public int nBoatLength;
+ /**
+ * 船速 (ERR210428143 专用, 其他项目不要使用)
+ */
+ public int nBoatSpeed;
+ /**
+ * 船距 (ERR210428143 专用, 其他项目不要使用)
+ */
+ public int nBoatDistance;
+ /**
+ * 保留字节,留待扩展.
+ */
+ public byte[] bReserved = new byte[300];
+ /**
+ * 检测到的物体个数
+ */
+ public int nObjectNum;
+ /**
+ * 检测到的物体
+ */
+ public NET_MSG_OBJECT[] stuObjectIDs = (NET_MSG_OBJECT[]) new NET_MSG_OBJECT().toArray(NET_MAX_OBJECT_LIST);
+ /**
+ * 轨迹数(与检测到的物体个数 nObjectNum 对应)
+ */
+ public int nTrackNum;
+ /**
+ * 轨迹信息(与检测到的物体对应)
+ */
+ public NET_POLY_POINTS[] stuTrackInfo = (NET_POLY_POINTS[]) new NET_POLY_POINTS().toArray(NET_MAX_OBJECT_LIST);
+ /**
+ * 智能事件公共信息
+ */
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo;
+ /**
+ * 全景广角图
+ */
+ public SCENE_IMAGE_INFO_EX stuSceneImage;
+ /**
+ * 检测到人的数量
+ */
+ public int nObjetcHumansNum;
+ /**
+ * 检测的到人
+ */
+ public NET_VAOBJECT_NUMMAN[] stuObjetcHumans = (NET_VAOBJECT_NUMMAN[]) new NET_VAOBJECT_NUMMAN().toArray(100);
+ /**
+ * 车身信息
+ */
+ public NET_MSG_OBJECT stuVehicle;
+ /**
+ * 触发类型,参考 {@link EM_TRIGGER_TYPE}
+ */
+ public int emTriggerType;
+ /**
+ * 标记抓拍帧
+ */
+ public int nMark;
+ /**
+ * 视频分析的数据源地址
+ */
+ public int nSource;
+ /**
+ * 视频分析帧序号
+ */
+ public int nFrameSequence;
+ /**
+ * 抓拍过程,参考 {@link EM_CAPTURE_PROCESS_END_TYPE}
+ */
+ public int emCaptureProcess;
+ /**
+ * 交通车辆信息
+ */
+ public DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar;
+ /**
+ * 公共信息
+ */
+ public EVENT_COMM_INFO stuCommInfo;
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/customize/DEV_EVENT_PARKINGDETECTION_INFO.java b/src/main/java/com/netsdk/lib/structure/customize/DEV_EVENT_PARKINGDETECTION_INFO.java
new file mode 100644
index 0000000..893ea60
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/customize/DEV_EVENT_PARKINGDETECTION_INFO.java
@@ -0,0 +1,136 @@
+package com.netsdk.lib.structure.customize;
+
+import com.netsdk.lib.NetSDKLib;
+
+import static com.netsdk.lib.NetSDKLib.MAX_PATH;
+import static com.netsdk.lib.NetSDKLib.NET_MAX_DETECT_REGION_NUM;
+
+/**
+ * 停船检测事件结构体
+ *
+ * ERR210428143 重型云台 水面预警事件 专用结构体
+ *
+ * 注意: 其他项目不要使用, 通用的停车检测事件结构体见:
+ * {@link NetSDKLib.DEV_EVENT_PARKINGDETECTION_INFO}
+ *
+ * @author 47040
+ * @since Created in 2021/5/13 16:57
+ */
+public class DEV_EVENT_PARKINGDETECTION_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 通道号
+ */
+ public int nChannelID;
+ /**
+ * 事件名称
+ */
+ public byte[] szName = new byte[128];
+ /**
+ * 字节对齐
+ */
+ public byte[] bReserved1 = new byte[4];
+ /**
+ * 时间戳(单位是毫秒)
+ */
+ public double PTS;
+ /**
+ * 事件发生的时间
+ */
+ public NetSDKLib.NET_TIME_EX UTC;
+ /**
+ * 事件ID
+ */
+ public int nEventID;
+ /**
+ * 检测到的物体
+ */
+ public NetSDKLib.NET_MSG_OBJECT stuObject;
+ /**
+ * 规则检测区域顶点数
+ */
+ public int nDetectRegionNum;
+ /**
+ * 规则检测区域
+ */
+ public NetSDKLib.NET_POINT[] DetectRegion = new NetSDKLib.NET_POINT[NET_MAX_DETECT_REGION_NUM];
+ /**
+ * 事件对应文件信息
+ */
+ public NetSDKLib.NET_EVENT_FILE_INFO stuFileInfo;
+ /**
+ *
+ */
+ public byte bEventAction;
+ /**
+ *
+ */
+ public byte[] byReserved = new byte[2];
+ /**
+ * 图片的序号, 同一时间内(精确到秒)可能有多张图片, 从 0 开始
+ */
+ public byte byImageIndex;
+ /**
+ * 抓图标志(按位),具体见NET_RESERVED_COMMON
+ */
+ public int dwSnapFlagMask;
+ /**
+ * 事件源设备上的index,-1表示数据无效
+ */
+ public int nSourceIndex;
+ /**
+ * 事件源设备唯一标识,字段不存在或者为空表示本地设备
+ */
+ public byte[] szSourceDevice = new byte[MAX_PATH];
+ /**
+ * 事件触发累计次数
+ */
+ public int nOccurrenceCount;
+ /**
+ * 智能事件公共信息
+ */
+ public EVENT_INTELLI_COMM_INFO stuIntelliCommInfo;
+ /**
+ * 扩展信息
+ */
+ public NetSDKLib.NET_EXTENSION_INFO stuExtensionInfo;
+ /**
+ * 车位名称
+ */
+ public byte[] szCustomParkNo = new byte[64];
+
+ /**
+ * 热成像横向视场角,单位度,实际角度乘以100 (ERR210428143 专用)
+ */
+ public int nThermoHFOV;
+ /**
+ * 热成像纵向视场角,单位度,实际角度乘以100 (ERR210428143 专用)
+ */
+ public int nThermoVFOV;
+ /**
+ * 船高 (ERR210428143 专用, 其他项目不要使用)
+ */
+ public int nBoatHeight;
+ /**
+ * 船长 (ERR210428143 专用, 其他项目不要使用)
+ */
+ public int nBoatLength;
+ /**
+ * 船速 (ERR210428143 专用, 其他项目不要使用)
+ */
+ public int nBoatSpeed;
+ /**
+ * 船距 (ERR210428143 专用, 其他项目不要使用)
+ */
+ public int nBoatDistance;
+ /**
+ * 保留字节,留待扩展
+ */
+ public byte[] bReserved = new byte[396];
+
+ public DEV_EVENT_PARKINGDETECTION_INFO() {
+ for (int i = 0; i < DetectRegion.length; ++i) {
+ DetectRegion[i] = new NetSDKLib.NET_POINT();
+ }
+ }
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/customize/EVENT_INTELLI_COMM_INFO.java b/src/main/java/com/netsdk/lib/structure/customize/EVENT_INTELLI_COMM_INFO.java
new file mode 100644
index 0000000..80987cc
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/customize/EVENT_INTELLI_COMM_INFO.java
@@ -0,0 +1,34 @@
+package com.netsdk.lib.structure.customize;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.structure.POSTION;
+
+/**
+ * 智能报警事件公共信息
+ *
+ * ERR210428143 重型云台 水面预警事件 专用结构体
+ *
+ * 注意: 其他项目不要使用, 通用的停车检测事件结构体见:
+ * {@link NetSDKLib.EVENT_INTELLI_COMM_INFO}
+ *
+ * @author 47040
+ * @since Created in 2021/5/13 23:17
+ */
+public class EVENT_INTELLI_COMM_INFO extends NetSDKLib.SdkStructure {
+ /**
+ * 智能事件所属大类 取值为 {@link NetSDKLib.EM_CLASS_TYPE } 中的值
+ */
+ public int emClassType;
+ /**
+ * 该事件触发的预置点,对应该设置规则的预置点
+ */
+ public int nPresetID;
+ /**
+ * 位置信息 (ERR210428143 专用, 其他项目不要使用)
+ */
+ public POSTION stuPostion;
+ /**
+ * 保留字节,留待扩展.
+ */
+ public byte[] bReserved = new byte[112];
+}
diff --git a/src/main/java/com/netsdk/lib/structure/customize/MEDIAFILE_FACERECOGNITION_INFO.java b/src/main/java/com/netsdk/lib/structure/customize/MEDIAFILE_FACERECOGNITION_INFO.java
new file mode 100644
index 0000000..ab1b404
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/customize/MEDIAFILE_FACERECOGNITION_INFO.java
@@ -0,0 +1,70 @@
+package com.netsdk.lib.structure.customize;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.Utils;
+import com.netsdk.lib.structure.NET_TIME;
+
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author 47081
+ * @version 1.0
+ * @description ERR210301049主动注册重新定向, 结构体, 日常使用以structure包和NetSDKLib下的同名结构体为主
+ * @date 2021/3/17
+ */
+public class MEDIAFILE_FACERECOGNITION_INFO extends NetSDKLib.SdkStructure {
+ /** 结构体大小 */
+ public int dwSize;
+ /** 报警发生时间 */
+ public NET_TIME stTime;
+ /** 报警发生地点 */
+ public byte[] szAddress = new byte[260];
+ /** 通道号 */
+ public int nChannelId;
+ /** 当前人脸匹配到的候选对象(扩展结构体) 数量 */
+ public int nCandidateExNum;
+ /** 当前人脸匹配到的候选对象信息, 实际返回个数同nCandidateNum */
+ // public CANDIDATE_INFO_CEX[] stuCandidatesEx = (CANDIDATE_INFO_CEX[]) new CANDIDATE_INFO_CEX().toArray(50);
+ public CANDIDATE_INFO_CEX[] stuCandidatesEx = new CANDIDATE_INFO_CEX[50];
+
+ public MEDIAFILE_FACERECOGNITION_INFO() {
+
+ for(int i=0;i getCandidateInfos() {
+ return new ArrayList<>(Arrays.asList(stuCandidatesEx).subList(0, nCandidateExNum));
+ }
+
+ @Override
+ public String toString() {
+ return "MEDIAFILE_FACERECOGNITION_INFO{"
+ + "stTime="
+ + stTime.toStringTime()
+ + ", szAddress="
+ + getAddress()
+ + ", nChannelId="
+ + nChannelId
+ + ", nCandidateExNum="
+ + nCandidateExNum
+ + ", stuCandidatesEx="
+ + getCandidateInfos().toString()
+ + '}';
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/optimized/ALARM_RTSC_RUNNING_INFO_V1.java b/src/main/java/com/netsdk/lib/structure/optimized/ALARM_RTSC_RUNNING_INFO_V1.java
new file mode 100644
index 0000000..f7b42ca
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/optimized/ALARM_RTSC_RUNNING_INFO_V1.java
@@ -0,0 +1,80 @@
+package com.netsdk.lib.structure.optimized;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.structure.NET_TIME_EX;
+
+/**
+ * @author 251823
+ * @description 信号机运行事件, 对应事件类型NET_ALARM_RTSC_RUNING
+ * @date 2021/09/01
+ */
+public class ALARM_RTSC_RUNNING_INFO_V1 extends NetSDKLib.SdkStructure{
+ /**
+ * 通道号,从0开始
+ */
+ public int nChannelID;
+
+ /**
+ * 事件动作, 1表示开始, 2表示结束, -1表示未知
+ */
+ public int nEventAction;
+
+ /**
+ * bit0:运行状态
+ bit1:控制方式
+ bit2:灯色状态信息
+ bit3:车道功能状态
+ bit4:车道/匝道控制状态信息
+ bit5:当前信号方案色步信息
+ bit6: 下一个周期信号方案色步信息
+ */
+ public int dwReportState;
+
+
+ /**
+ * 经度个数
+ */
+ public int nLongitudeNum;
+
+ /**
+ * 经度,格式:度,分,秒(秒为浮点数)
+ */
+ public double[] dbLongitude = new double[3];
+
+ /**
+ * 纬度个数
+ */
+ public int nLatitudeNum;
+
+ /**
+ * 纬度,格式:度,分,秒(秒为浮点数)
+ */
+ public double[] dbLatitude = new double[3];
+
+ /**
+ * 高度,单位为米
+ */
+ public double dbAltitude;
+
+ /**
+ * 事件发生时间,带时区偏差的UTC时间,单位秒
+ */
+ public NET_TIME_EX UTC;
+
+ /**
+ * 设备状态 ,参考{ @link EM_STATUS}
+ */
+ public int emStatus;
+
+ /**
+ * 控制模式,参考{ @link EM_CONTROL_MODE}
+ */
+ public int emControlMode;
+
+ /**
+ * 灯色状态信息
+ */
+ public LAMP_STATE_V1 stuLampStateInfo;
+
+
+}
diff --git a/src/main/java/com/netsdk/lib/structure/optimized/ENTER_INFO_V1.java b/src/main/java/com/netsdk/lib/structure/optimized/ENTER_INFO_V1.java
new file mode 100644
index 0000000..62ecbc9
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/optimized/ENTER_INFO_V1.java
@@ -0,0 +1,33 @@
+package com.netsdk.lib.structure.optimized;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 进口灯色状态信息
+ * @date 2022/11/28 09:35:44
+ */
+public class ENTER_INFO_V1 extends NetSDKLib.SdkStructure {
+ /**
+ * 进口方向
+ */
+ public int nEnterDir;
+ /**
+ * 进口灯组数量(0~48)
+ */
+ public int nLampNumber;
+ /**
+ * 灯组灯色信息个数
+ */
+ public int nLampGroupNum;
+ /**
+ * 灯组灯色信息,包含1到M(进口灯组数量)个灯组灯色信息
+ */
+ public LAMP_GROUP_INFO_V1[] stuLampGroupInfo = new LAMP_GROUP_INFO_V1[48];
+
+ public ENTER_INFO_V1() {
+ for (int i = 0; i < stuLampGroupInfo.length; i++) {
+ stuLampGroupInfo[i] = new LAMP_GROUP_INFO_V1();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/optimized/LAMP_GROUP_INFO_V1.java b/src/main/java/com/netsdk/lib/structure/optimized/LAMP_GROUP_INFO_V1.java
new file mode 100644
index 0000000..ff6f4d0
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/optimized/LAMP_GROUP_INFO_V1.java
@@ -0,0 +1,36 @@
+package com.netsdk.lib.structure.optimized;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 灯组灯色信息
+ * @date 2022/11/28 09:35:44
+ */
+public class LAMP_GROUP_INFO_V1 extends NetSDKLib.SdkStructure {
+ /**
+ * 灯组编号
+ */
+ public int nLampNo;
+ /**
+ * 灯组类型 {@link com.netsdk.lib.enumeration.EM_LAMP_TYPE}
+ */
+ public int emLampType;
+ /**
+ * 信号灯组灯色剩余时间,整数,单位为秒(s)
+ */
+ public int nRemainTime;
+ /**
+ * 灯组灯色个数
+ */
+ public int nLampColorCount;
+ /**
+ * 灯组灯色当灯组类型为1~12时,int[0]表示红色发光单元,int[1]表示黄色发光单元,int[2]表示绿色发光单元,int[3]保留
+ * 当灯组类型为13~15时,int[0]用于表示禁止通行信号发光单元,int[1]用于表示过渡信号发光单元,int[2]用于表示通行信号发光单元,int[3]保留
+ * 具体取值 0:无灯 1:灭灯 2:亮灯3:闪烁
+ */
+ public int[] nLampColor = new int[4];
+
+ public LAMP_GROUP_INFO_V1() {
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/optimized/LAMP_STATE_V1.java b/src/main/java/com/netsdk/lib/structure/optimized/LAMP_STATE_V1.java
new file mode 100644
index 0000000..affe327
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/optimized/LAMP_STATE_V1.java
@@ -0,0 +1,29 @@
+package com.netsdk.lib.structure.optimized;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 251823
+ * @description 灯色状态信息
+ * @date 2022/11/28 09:35:44
+ */
+public class LAMP_STATE_V1 extends NetSDKLib.SdkStructure {
+ /**
+ * 信号灯控制路口的进口数量(0~8)
+ */
+ public int nEnterNumber;
+ /**
+ * 进口灯色状态信息个数
+ */
+ public int nEnterInfoNum;
+ /**
+ * 进口灯色状态信息,包含1到N(路口进口数量)个进口灯色状态信息
+ */
+ public ENTER_INFO_V1[] stuEnterInfo = new ENTER_INFO_V1[8];
+
+ public LAMP_STATE_V1() {
+ for (int i = 0; i < stuEnterInfo.length; i++) {
+ stuEnterInfo[i] = new ENTER_INFO_V1();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/netsdk/lib/structure/optimized/NET_IN_WM_GET_COLLECTIONS_V1.java b/src/main/java/com/netsdk/lib/structure/optimized/NET_IN_WM_GET_COLLECTIONS_V1.java
new file mode 100644
index 0000000..5335814
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/optimized/NET_IN_WM_GET_COLLECTIONS_V1.java
@@ -0,0 +1,17 @@
+package com.netsdk.lib.structure.optimized;
+
+import com.netsdk.lib.NetSDKLib;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description CLIENT_GetMonitorWallCollectionsV1接口输入参数(获取电视墙预案信息)
+ * @date 2022/12/21 14:01
+ */
+public class NET_IN_WM_GET_COLLECTIONS_V1 extends NetSDKLib.SdkStructure{
+ public int dwSize;
+ public int nMonitorWallID; // 电视墙ID
+ public NET_IN_WM_GET_COLLECTIONS_V1(){
+ this.dwSize=this.size();
+ }
+}
diff --git a/src/main/java/com/netsdk/lib/structure/optimized/NET_OUT_WM_GET_COLLECTIONS_V1.java b/src/main/java/com/netsdk/lib/structure/optimized/NET_OUT_WM_GET_COLLECTIONS_V1.java
new file mode 100644
index 0000000..7f9faf3
--- /dev/null
+++ b/src/main/java/com/netsdk/lib/structure/optimized/NET_OUT_WM_GET_COLLECTIONS_V1.java
@@ -0,0 +1,28 @@
+package com.netsdk.lib.structure.optimized;
+
+import com.netsdk.lib.NetSDKLib;
+import com.netsdk.lib.structure.BYTE_64;
+import com.sun.jna.Pointer;
+
+/**
+ * @author 291189
+ * @version 1.0
+ * @description CLIENT_GetMonitorWallCollectionsV1接口输出参数(获取电视墙预案信息)
+ * @date 2022/12/21 14:09
+ */
+public class NET_OUT_WM_GET_COLLECTIONS_V1 extends NetSDKLib.SdkStructure {
+ public int dwSize;
+ public byte[] szReserved=new byte[4];
+ public Pointer pBuff; // 电视墙预案
+ public int nBuffSize; // 电视墙预案申请的大小,由用户申请
+ public int nRetBuffSize; // 电视墙预案实际返回的长度
+ public int nNameCount; // 电视墙预案名称个数
+ public BYTE_64[] szName=new BYTE_64[128]; // 电视墙预案名称
+
+ public NET_OUT_WM_GET_COLLECTIONS_V1(){
+ for(int i=0;i