xiongzhu 4 yıl önce
ebeveyn
işleme
d87b87f947
69 değiştirilmiş dosya ile 1569 ekleme ve 908 silme
  1. 8 0
      install-jar.sh
  2. 6 0
      pom.xml
  3. BIN
      sdk/Sadp.dll
  4. BIN
      sdk/Sadp.lib
  5. BIN
      sdk/Sadp.pdb
  6. BIN
      sdk/libeay32.dll
  7. BIN
      sdk/npf64.sys
  8. 32 0
      src/main/java/cn/drewslab/heimdall/Application.java
  9. 900 908
      src/main/java/cn/drewslab/heimdall/HCNetSDK.java
  10. 88 0
      src/main/java/cn/drewslab/heimdall/HCSadpSdk.java
  11. 13 0
      src/main/java/cn/drewslab/heimdall/SdkPath.java
  12. 9 0
      src/main/java/cn/drewslab/heimdall/service/DeviceService.java
  13. 27 0
      src/main/java/cn/drewslab/heimdall/utils/ByteUtil.java
  14. 141 0
      src/main/java/cn/drewslab/heimdall/utils/ComnUtil.java
  15. 201 0
      src/main/java/cn/drewslab/heimdall/utils/ConvertUtil.java
  16. 48 0
      src/main/java/cn/drewslab/heimdall/utils/DicUtil.java
  17. 28 0
      src/main/java/cn/drewslab/heimdall/utils/SdkErrorUtil.java
  18. 46 0
      src/main/java/cn/drewslab/heimdall/utils/StructUtil.java
  19. 21 0
      src/main/java/cn/drewslab/heimdall/web/DeviceController.java
  20. BIN
      src/main/resources/sdk/AudioRender.dll
  21. 0 0
      src/main/resources/sdk/ClientDemo.exe
  22. 1 0
      src/main/resources/sdk/ClientDemoDll/ReadMe.txt
  23. BIN
      src/main/resources/sdk/ClientDemoDll/calib.dll
  24. BIN
      src/main/resources/sdk/ClientDemoDll/iconv.dll
  25. BIN
      src/main/resources/sdk/ClientDemoDll/libxml2.dll
  26. BIN
      src/main/resources/sdk/ClientDemoDll/zlib1.dll
  27. BIN
      src/main/resources/sdk/GdiPlus.dll
  28. BIN
      src/main/resources/sdk/GdiPlus.lib
  29. BIN
      src/main/resources/sdk/HCCore.dll
  30. BIN
      src/main/resources/sdk/HCCore.lib
  31. BIN
      src/main/resources/sdk/HCNetSDK.dll
  32. BIN
      src/main/resources/sdk/HCNetSDK.lib
  33. BIN
      src/main/resources/sdk/HCNetSDKCom/AnalyzeData.dll
  34. BIN
      src/main/resources/sdk/HCNetSDKCom/AudioIntercom.dll
  35. BIN
      src/main/resources/sdk/HCNetSDKCom/HCAlarm.dll
  36. BIN
      src/main/resources/sdk/HCNetSDKCom/HCAlarm.lib
  37. BIN
      src/main/resources/sdk/HCNetSDKCom/HCCoreDevCfg.dll
  38. BIN
      src/main/resources/sdk/HCNetSDKCom/HCDisplay.dll
  39. BIN
      src/main/resources/sdk/HCNetSDKCom/HCGeneralCfgMgr.dll
  40. BIN
      src/main/resources/sdk/HCNetSDKCom/HCGeneralCfgMgr.lib
  41. BIN
      src/main/resources/sdk/HCNetSDKCom/HCIndustry.dll
  42. BIN
      src/main/resources/sdk/HCNetSDKCom/HCPlayBack.dll
  43. BIN
      src/main/resources/sdk/HCNetSDKCom/HCPreview.dll
  44. BIN
      src/main/resources/sdk/HCNetSDKCom/HCPreview.lib
  45. BIN
      src/main/resources/sdk/HCNetSDKCom/HCVoiceTalk.dll
  46. BIN
      src/main/resources/sdk/HCNetSDKCom/OpenAL32.dll
  47. BIN
      src/main/resources/sdk/HCNetSDKCom/StreamTransClient.dll
  48. BIN
      src/main/resources/sdk/HCNetSDKCom/SystemTransform.dll
  49. BIN
      src/main/resources/sdk/HCNetSDKCom/libiconv2.dll
  50. BIN
      src/main/resources/sdk/HXVA.dll
  51. BIN
      src/main/resources/sdk/HmMerge.dll
  52. 0 0
      src/main/resources/sdk/LocalSensorAdd.dat
  53. BIN
      src/main/resources/sdk/LocalXml.zip
  54. BIN
      src/main/resources/sdk/MP_Render.dll
  55. BIN
      src/main/resources/sdk/NPQos.dll
  56. BIN
      src/main/resources/sdk/PlayCtrl.dll
  57. BIN
      src/main/resources/sdk/PlayCtrl.lib
  58. BIN
      src/main/resources/sdk/Sadp.dll
  59. BIN
      src/main/resources/sdk/Sadp.lib
  60. BIN
      src/main/resources/sdk/Sadp.pdb
  61. BIN
      src/main/resources/sdk/SuperRender.dll
  62. BIN
      src/main/resources/sdk/YUVProcess.dll
  63. BIN
      src/main/resources/sdk/hlog.dll
  64. BIN
      src/main/resources/sdk/hpr.dll
  65. BIN
      src/main/resources/sdk/libeay32.dll
  66. BIN
      src/main/resources/sdk/libmmd.dll
  67. BIN
      src/main/resources/sdk/npf64.sys
  68. BIN
      src/main/resources/sdk/ssleay32.dll
  69. BIN
      src/main/resources/sdk/zlib1.dll

+ 8 - 0
install-jar.sh

@@ -14,3 +14,11 @@ mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file \
 -Dversion=1.0.0 \
 -Dversion=1.0.0 \
 -Dfile=lib/examples.jar \
 -Dfile=lib/examples.jar \
 -DlocalRepositoryPath=libs
 -DlocalRepositoryPath=libs
+
+mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file \
+-DgroupId=com.beautyeye \
+-DartifactId=beautyeye \
+-Dpackaging=jar \
+-Dversion=1.0.0 \
+-Dfile=lib/beautyeye_lnf.jar \
+-DlocalRepositoryPath=libs

+ 6 - 0
pom.xml

@@ -277,6 +277,12 @@
             <artifactId>jna.platform</artifactId>
             <artifactId>jna.platform</artifactId>
             <version>1.0.0</version>
             <version>1.0.0</version>
         </dependency>
         </dependency>
+
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>4.1.19</version>
+        </dependency>
     </dependencies>
     </dependencies>
 
 
 </project>
 </project>

BIN
sdk/Sadp.dll


BIN
sdk/Sadp.lib


BIN
sdk/Sadp.pdb


BIN
sdk/libeay32.dll


BIN
sdk/npf64.sys


+ 32 - 0
src/main/java/cn/drewslab/heimdall/Application.java

@@ -1,21 +1,53 @@
 package cn.drewslab.heimdall;
 package cn.drewslab.heimdall;
 
 
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FileUtils;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cache.annotation.EnableCaching;
 import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.core.io.support.ResourcePatternResolver;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import springfox.documentation.swagger2.annotations.EnableSwagger2;
 import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
 
+import javax.annotation.PostConstruct;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
 @SpringBootApplication
 @SpringBootApplication
 @EnableJpaAuditing
 @EnableJpaAuditing
 @EnableSwagger2
 @EnableSwagger2
 @EnableCaching
 @EnableCaching
 @EnableScheduling
 @EnableScheduling
+@Slf4j
 public class Application {
 public class Application {
 
 
     public static void main(String[] args) {
     public static void main(String[] args) {
         SpringApplication.run(Application.class, args);
         SpringApplication.run(Application.class, args);
     }
     }
 
 
+    @PostConstruct
+    public void init() throws IOException {
+        File directory = new File(System.getProperty("java.io.tmpdir"), "MifosBirtFilesExtractedFromClasspath");
+        directory.mkdirs();
+        FileUtils.cleanDirectory(directory);
+
+        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
+        Resource[] resources = resolver.getResources(ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + "/sdk/**");
+        for (Resource resource : resources) {
+            if (resource.exists() & resource.isReadable() && resource.contentLength() > 0) {
+                URL url = resource.getURL();
+                String urlString = url.toExternalForm();
+                String targetName = urlString.substring(urlString.indexOf("/sdk"));
+                File destination = new File(directory, targetName);
+                FileUtils.copyURLToFile(url, destination);
+                log.info("Copied " + url + " to " + destination.getAbsolutePath());
+            } else {
+                log.warn("Did not copy, seems to be directory: " + resource.getDescription());
+            }
+        }
+    }
 }
 }

Dosya farkı çok büyük olduğundan ihmal edildi
+ 900 - 908
src/main/java/cn/drewslab/heimdall/HCNetSDK.java


+ 88 - 0
src/main/java/cn/drewslab/heimdall/HCSadpSdk.java

@@ -0,0 +1,88 @@
+package cn.drewslab.heimdall;
+
+import com.sun.jna.Library;
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+import com.sun.jna.win32.StdCallLibrary;
+
+import java.io.File;
+import java.nio.file.Paths;
+
+public interface HCSadpSdk extends Library {
+
+    HCSadpSdk INSTANCE = (HCSadpSdk) Native
+            .loadLibrary(Paths.get(SdkPath.ROOT_PATH, "Sadp").toString(), HCSadpSdk.class);
+
+
+    public static class SADP_DEVICE_INFO extends Structure {
+        public byte[] szSeries                = new byte[12];
+        public byte[] szSerialNO              = new byte[48];
+        public byte[] szMAC                   = new byte[20];
+        public byte[] szIPv4Address           = new byte[16];
+        public byte[] szIPv4SubnetMask        = new byte[16];
+        public int    dwDeviceType;
+        public int    dwPort;
+        public int    dwNumberOfEncoders;
+        public int    dwNumberOfHardDisk;
+        public byte[] szDeviceSoftwareVersion = new byte[48];
+        public byte[] szDSPVersion            = new byte[48];
+        public byte[] szBootTime              = new byte[48];
+        public int    iResult;
+        public byte[] szDevDesc               = new byte[24];
+        public byte[] szOEMinfo               = new byte[24];
+        public byte[] szIPv4Gateway           = new byte[16];
+        public byte[] szIPv6Address           = new byte[46];
+        public byte[] szIPv6Gateway           = new byte[46];
+        public byte   byIPv6MaskLen;
+        public byte   bySupport;
+        public byte   byDhcpEnabled;
+        public byte   byDeviceAbility;
+        public byte   wHttpPort;
+        public short  wDigitalChannelNum;
+        public byte[] szCmsIPv4               = new byte[16];
+        public short  wCmsPort;
+        public byte   byOEMCode;
+        public byte   byActivated;
+        public byte[] szBaseDesc              = new byte[24];
+        public byte[] byRes                   = new byte[16];
+    }
+
+    public static class SADP_DEV_NET_PARAM extends Structure {
+
+        public byte[] szIPv4Address    = new byte[16];
+        public byte[] szIPv4SubnetMask = new byte[16];
+        public byte[] szIPv4Gateway    = new byte[16];
+        public byte[] szIPv6Address    = new byte[128];
+        public byte[] szIPv6Gateway    = new byte[128];
+        public short  wPort;
+        public byte   byIPv6MaskLen;
+        public byte   byDhcpEnable;
+        public short  wHttpPort;
+        public byte[] byRes            = new byte[126];
+
+        public static class ByReference extends SADP_DEV_NET_PARAM implements Structure.ByReference {
+        }
+
+        public static class ByValue extends SADP_DEV_NET_PARAM implements Structure.ByValue {
+        }
+    }
+
+    boolean SADP_SetLogToFile(int nLogLevel, String strLogDir, int bAutoDel);
+
+    boolean SADP_Start_V30(PDEVICE_FIND_CALLBACK pDeviceFindCallBack, int bInstallNPF, Pointer pUserData);
+
+    boolean SADP_SendInquiry();
+
+    boolean SADP_Stop();
+
+    boolean SADP_ActivateDevice(String sDevSerialNO, String sCommand);
+
+    boolean SADP_ModifyDeviceNetParam(String sMAC, String sPassword, Pointer lpNetParam);
+
+    public static interface PDEVICE_FIND_CALLBACK extends StdCallLibrary.StdCallCallback {
+        public void invoke(SADP_DEVICE_INFO lpDeviceInfo, Pointer pUserData);
+    }
+
+    int SADP_GetLastError();
+}

+ 13 - 0
src/main/java/cn/drewslab/heimdall/SdkPath.java

@@ -0,0 +1,13 @@
+package cn.drewslab.heimdall;
+
+import java.io.File;
+
+public class SdkPath {
+
+    public static String ROOT_PATH;
+
+    static {
+        ROOT_PATH = new File(System.getProperty("java.io.tmpdir"), "MifosBirtFilesExtractedFromClasspath").getPath();
+    }
+}
+

+ 9 - 0
src/main/java/cn/drewslab/heimdall/service/DeviceService.java

@@ -0,0 +1,9 @@
+package cn.drewslab.heimdall.service;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Service
+@Slf4j
+public class DeviceService {
+}

+ 27 - 0
src/main/java/cn/drewslab/heimdall/utils/ByteUtil.java

@@ -0,0 +1,27 @@
+package cn.drewslab.heimdall.utils;
+
+import cn.hutool.core.lang.Assert;
+
+public class ByteUtil {
+
+	public static byte[] setStrToByteArr(String str,int arrLen){
+		 byte [] arr = new byte[arrLen];
+		 byte [] strBytes=str.getBytes();
+		 Assert.isTrue(arrLen>strBytes.length,"arrLen is too small.");
+		 for(int i=0;i<strBytes.length;i++){
+		     arr[i]=strBytes[i];
+	     }
+		 return arr;
+	}
+	
+	public static int getValidLength(byte[] bytes){
+	    int i = 0;
+	    if (null == bytes || 0 == bytes.length)
+	        return i ;
+	    for (; i < bytes.length; i++) {
+	        if (bytes[i] == '\0')
+	            break;
+	    }
+	    return i;
+	}
+}

+ 141 - 0
src/main/java/cn/drewslab/heimdall/utils/ComnUtil.java

@@ -0,0 +1,141 @@
+package cn.drewslab.heimdall.utils;
+
+import java.util.*;
+
+/**
+ * @author gongjunlang
+ */
+public class ComnUtil {
+
+    /**
+     * 判断一个对象是否为空
+     * <p>
+     * 以下情况为true
+     * <p>
+     * 对象为null
+     * <p>
+     * 字符串对象为""或者length为0
+     * <p>
+     * 集合对象size为0
+     * <p>
+     * 数组对象length为0
+     *
+     * @param obj
+     * @return
+     */
+    public static boolean isEmpty(Object obj) {
+        if (obj == null) {
+            return true;
+        } else if (obj instanceof String) {
+            return ((String) obj).trim().equals("");
+        } else if (obj instanceof StringBuilder) {
+            return ((StringBuilder) obj).length() == 0;
+        } else if (Collection.class.isAssignableFrom(obj.getClass())) {
+            return ((Collection<?>) obj).size() == 0;
+        } else if (obj instanceof Map) {
+            return ((Map<?, ?>) obj).size() == 0;
+        } else if (obj.getClass().isArray()) {
+            if (obj instanceof byte[]) {
+                return ((byte[]) obj).length == 0;
+            }
+            if (obj instanceof short[]) {
+                return ((short[]) obj).length == 0;
+            }
+            if (obj instanceof int[]) {
+                return ((int[]) obj).length == 0;
+            }
+            if (obj instanceof long[]) {
+                return ((long[]) obj).length == 0;
+            }
+            if (obj instanceof char[]) {
+                return ((char[]) obj).length == 0;
+            }
+            if (obj instanceof float[]) {
+                return ((float[]) obj).length == 0;
+            }
+            if (obj instanceof double[]) {
+                return ((double[]) obj).length == 0;
+            }
+            if (obj instanceof boolean[]) {
+                return ((boolean[]) obj).length == 0;
+            }
+            return ((Object[]) obj).length == 0;
+        } else if (obj instanceof StringBuffer) {
+            return ((StringBuffer) obj).length() == 0;
+        }
+        return false;
+    }
+
+    /**
+     * 判断一个对象是否为空
+     * <p>
+     * 以下情况为true
+     * <p>
+     * 对象为null
+     * <p>
+     * 字符串对象为""或者length为0
+     * <p>
+     * 集合对象size为0
+     * <p>
+     * 数组对象length为0
+     * <p>
+     * 数字对象值为0
+     *
+     * @param obj
+     * @return
+     */
+    public static boolean isEmptyOrZero(Object obj) {
+        if (Number.class.isAssignableFrom(obj.getClass())) {
+            if (((Number) obj).intValue() == 0 || ((Number) obj).doubleValue() == 0 || ((Number) obj).longValue() == 0
+                    || ((Number) obj).floatValue() == 0 || ((Number) obj).shortValue() == 0
+                    || ((Number) obj).byteValue() == 0) {
+                return true;
+            }
+        }
+        return isEmpty(obj);
+    }
+
+    /**
+     * 适用于非复合主键数据
+     *
+     * @param key
+     * @return
+     */
+    public static String getStringWithSingleQuotes(String key, String split) {
+        String[] ids = key.split(split);
+        String result = "";
+        for (String id : ids) {
+            result += ",'" + id + "'";
+        }
+        if (result.length() > 0) {
+            return result.substring(1);
+        }
+        return null;
+    }
+
+    public static List<String> string2List(String key, String split) {
+        if (isEmpty(key)) {
+            return new ArrayList<String>();
+        }
+        return Arrays.asList(key.split(split));
+    }
+
+    /**
+     * @param src
+     * @param concat
+     * @return
+     */
+    public static <T> T[] concatArray(T[] src, T[] concat) {
+        List<T> srcList = new ArrayList<T>(Arrays.asList(src));
+        List<T> concatList = new ArrayList<T>(Arrays.asList(concat));
+        srcList.addAll(concatList);
+        return srcList.toArray(src);
+    }
+
+    // public static Object[] concatArray(Object[] src, Object[] concat) {
+    // List<Object> srcList = new ArrayList<Object>(Arrays.asList(src));
+    // List<Object> concatList = new ArrayList<Object>(Arrays.asList(concat));
+    // srcList.addAll(concatList);
+    // return srcList.toArray(src);
+    // }
+}

+ 201 - 0
src/main/java/cn/drewslab/heimdall/utils/ConvertUtil.java

@@ -0,0 +1,201 @@
+package cn.drewslab.heimdall.utils;
+
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.sun.jna.Structure;
+import lombok.extern.slf4j.Slf4j;
+
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName: ConvertUtil
+ * @Description: 数据转换工具类
+ * @author: ShenYue
+ * @date: 2019年4月22日 下午3:22:59
+ */
+@Slf4j
+public class ConvertUtil {
+
+    /**
+     * 结构体转map
+     *
+     * @param t            待转换的结构体
+     * @param ignoreFields 忽略的字段列表
+     * @return 转换后的map, 传入的结构体为NULL时, 返回值也为NULL
+     */
+    public static <T> Map<String, Object> struct2Map(T t, String... ignoreFields) {
+        if (t == null) {
+            return null;
+        }
+        Class<?> clazz = t.getClass();
+        List<String> ignoreList = Arrays.asList(ignoreFields);
+        Map<String, Object> map = new HashMap<>(32);
+        Field[] fields = clazz.getDeclaredFields();
+        for (Field field : fields) {
+            Class<?> type = field.getType();
+            String fieldName = field.getName();
+            field.setAccessible(true);
+            try {
+                if (!ignoreList.contains(fieldName)) {
+                    if (isBaseType(type)) {
+                        map.put(fieldName, field.get(t));
+                    } else if (type == byte[].class) {
+                        byte[] bytes = (byte[]) field.get(t);
+                        int validByteLen = ByteUtil.getValidLength(bytes);
+                        map.put(fieldName, new String(bytes, 0, validByteLen));
+                    } else if (type.newInstance() instanceof Structure) {
+                        map.put(fieldName, struct2Map(field.get(t)));
+                    } else {
+                        log.warn("unsupport type " + type);
+                    }
+                }
+            } catch (InstantiationException e) {
+                log.error("can not instance obj.");
+                e.printStackTrace();
+            } catch (IllegalAccessException e) {
+                log.error("no access to convert field.");
+                e.printStackTrace();
+            }
+        }
+        return map;
+    }
+
+    /**
+     * 结构体转换为json
+     *
+     * @param t            待转换的结构体
+     * @param ignoreFields 忽略的字段列表
+     * @return
+     */
+    public static <T> String struct2Json(T t, String... ignoreFields) {
+        return JSONUtil.toJsonPrettyStr(struct2Map(t, ignoreFields));
+    }
+
+    /**
+     * 将map中的参数值赋值到结构体中
+     *
+     * @param t      待赋值的结构体
+     * @param params 封装相关参数的map
+     * @return 赋值完成的结构体, 传入的结构体为NULL时, 返回值也为NULL
+     */
+    public static <T> T map2Struct(T t, Map<String, Object> params) {
+        if (t == null) {
+            return null;
+        }
+        Class<?> clazz = t.getClass();
+        Field[] fields = clazz.getDeclaredFields();
+        for (Field field : fields) {
+            Class<?> type = field.getType();
+            String fieldName = field.getName();
+            field.setAccessible(true);
+            try {
+                if (params.containsKey(fieldName) && !ComnUtil.isEmpty(params.get(fieldName))) {
+                    if (type == byte[].class) {
+                        int byteLen = ((byte[]) field.get(t)).length;
+                        field.set(t, ComnUtil.isEmpty(params.get(fieldName).toString()) ? field
+                                .get(t) : ByteUtil
+                                .setStrToByteArr(params.get(fieldName).toString(), byteLen));
+                    } else if (type == byte.class) {
+                        field.set(t, Byte.valueOf(String.valueOf(params.get(fieldName))).intValue());
+                    } else if (type == int.class) {
+                        field.set(t, Integer.valueOf(String.valueOf(params.get(fieldName))).intValue());
+                    } else if (type == short.class) {
+                        field.set(t, Short.valueOf(String.valueOf(params.get(fieldName))).intValue());
+                    } else if (type == double.class) {
+                        field.set(t, Double.valueOf(String.valueOf(params.get(fieldName))).intValue());
+                    } else if (type == float.class) {
+                        field.set(t, Float.valueOf(String.valueOf(params.get(fieldName))).intValue());
+                    } else if (type == char.class) {
+                        String source = String.valueOf(params.get(fieldName));
+                        if (source.length() != 1) {
+                            log.error("can not convert " + type + " to char.");
+                            throw new RuntimeException("can not convert " + type + " to char.");
+                        }
+                        field.set(t, String.valueOf(params.get(fieldName)).charAt(0));
+                    } else {
+                        log.warn("unsupport type " + type + "," + fieldName + " is skiped.");
+                    }
+                }
+            } catch (IllegalAccessException e) {
+                log.error("no access to convert field.");
+                e.printStackTrace();
+            }
+        }
+        return t;
+    }
+
+    /**
+     * list转obj二维数组
+     *
+     * @param list 待转换的list
+     * @return
+     */
+    public static <T> Object[][] toObjArray(List<T> list) {
+        try {
+            if (list == null || list.size() == 0) {
+                return null;
+            }
+            Field[] fields = list.get(0).getClass().getDeclaredFields();
+            Object[][] objs = new Object[list.size()][fields.length];
+            for (int row = 0; row < list.size(); row++) {
+                T t = list.get(row);
+                fields = t.getClass().getDeclaredFields();
+                for (int col = 0; col < fields.length; col++) {
+                    fields[col].setAccessible(true);
+                    objs[row][col] = fields[col].get(t);
+                }
+            }
+            return objs;
+        } catch (Exception e) {
+            log.error("no access to convert field.");
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * map转对象
+     *
+     * @param paramMap 待转换map
+     * @param cls      转换对象的class
+     * @return
+     */
+    public static <T> T map2Object(Map<?, ?> paramMap, Class<T> cls) {
+        return JSONObject.parseObject(JSONObject.toJSONString(paramMap), cls);
+    }
+
+    /**
+     * json转map
+     *
+     * @param jsonObj json字符串
+     * @return
+     */
+    public static Map<String, Object> jsonToMap(String jsonObj) {
+        return (Map<String, Object>) JSONObject.parseObject(jsonObj);
+    }
+
+    /**
+     * 判断是否为基本类型
+     *
+     * @param type 传入类型
+     * @return
+     */
+    public static boolean isBaseType(Class<?> type) {
+        if (type.equals(int.class) ||
+                type.equals(byte.class) ||
+                type.equals(long.class) ||
+                type.equals(double.class) ||
+                type.equals(float.class) ||
+                type.equals(char.class) ||
+                type.equals(short.class) ||
+                type.equals(boolean.class)) {
+            return true;
+        }
+        return false;
+    }
+
+}

+ 48 - 0
src/main/java/cn/drewslab/heimdall/utils/DicUtil.java

@@ -0,0 +1,48 @@
+package cn.drewslab.heimdall.utils;
+
+import cn.hutool.setting.dialect.Props;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class DicUtil {
+	
+	private static Props dicEn2CnProps;
+	private static Props dicCn2EnProps;
+	
+	private static Props getDicCn2EnProps(){
+		if(dicCn2EnProps==null){
+			dicCn2EnProps=new Props("dic/dic_cn_en.properties");
+		}
+		return dicCn2EnProps;
+	}
+	
+	private static Props getDicEn2CnProps(){
+		if(dicEn2CnProps==null){
+			dicEn2CnProps=new Props("dic/dic_en_cn.properties");
+		}
+		return dicEn2CnProps;
+	}
+
+	public static Map<String,Object> translateMap2CnKey(Map<String,Object> map,boolean skipNoneNote){
+		return translateMapKey(map,getDicEn2CnProps(),skipNoneNote);
+	}
+	
+	public static Map<String,Object> translateMap2EnKey(Map<String,Object> map,boolean skipNoneNote){
+		return translateMapKey(map,getDicCn2EnProps(),skipNoneNote);
+	}
+	
+	private static Map<String,Object> translateMapKey(Map<String,Object> map,Props dicProps,boolean skipNoneNote){
+		Map<String,Object> currMap = new HashMap<>();
+		for (Map.Entry<String,Object> entry : map.entrySet()) { 
+			  if(dicProps.containsKey(entry.getKey())){
+				  currMap.put(dicProps.getProperty(entry.getKey()),entry.getValue());
+			  }else{
+				  if(!skipNoneNote){
+					  currMap.put(entry.getKey(),entry.getValue());
+				  }
+			  }
+		}
+		return currMap;
+	}
+}

+ 28 - 0
src/main/java/cn/drewslab/heimdall/utils/SdkErrorUtil.java

@@ -0,0 +1,28 @@
+package cn.drewslab.heimdall.utils;
+
+import cn.hutool.setting.dialect.Props;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class SdkErrorUtil {
+    private static       Props  HkNetErrorProps;
+    private static       Props  HkSadpErrorProps;
+    private final static String HK_NET_ERROR_PREFIX  = "HK_NET_ERROR_";
+    private final static String HK_SADP_ERROR_PREFIX = "HK_SADP_ERROR_";
+
+    private static Props getHkNetErrorProps() {
+        if (HkNetErrorProps == null) {
+            HkNetErrorProps = new Props("hk_net_error.properties");
+        }
+        return HkNetErrorProps;
+    }
+
+    private static Props getHkSadpErrorProps() {
+        if (HkSadpErrorProps == null) {
+            HkSadpErrorProps = new Props("hk_sadp_error.properties");
+        }
+        return HkSadpErrorProps;
+    }
+
+
+}

+ 46 - 0
src/main/java/cn/drewslab/heimdall/utils/StructUtil.java

@@ -0,0 +1,46 @@
+package cn.drewslab.heimdall.utils;
+
+import cn.hutool.core.lang.Assert;
+import com.sun.jna.Structure;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.Arrays;
+import java.util.List;
+
+public class StructUtil {
+	
+	public static void  copyProperties(Object source,Object target,String...ignoreFields){
+		Assert.isTrue(target instanceof Structure && source instanceof Structure);
+		try{
+			List<String> ignoreFieldList=Arrays.asList(ignoreFields);
+			Field[] srcFields=source.getClass().getFields();
+			Field[] tarFields=target.getClass().getFields();
+			for(Field srcField : srcFields){
+				for(Field tarField : tarFields){
+					String srcFieldName=srcField.getName();
+					String tarFieldName=tarField.getName();
+					if(srcFieldName.equals(tarFieldName)
+							&& tarField.getType() == srcField.getType()
+							&& !Modifier.isFinal(tarField.getModifiers())
+							&& !ignoreFieldList.contains(srcFieldName)){
+						tarField.setAccessible(true);
+						if(tarField.getType() == byte[].class){
+							int valByteLen=ByteUtil.getValidLength((byte[])srcField.get(source));
+							if(valByteLen!=0){
+							   int arrLen=((byte[])tarField.get(target)).length;
+							   tarField.set(target,null);
+							   tarField.set(target,ByteUtil.setStrToByteArr(new String((byte[])srcField.get(source),0,valByteLen),arrLen));
+							}
+						}else{
+							tarField.set(target,srcField.get(source));
+						}
+					}
+				}
+			}
+		}catch (Exception e) {
+			e.printStackTrace();
+			throw new RuntimeException("copy properties fail.");
+		}
+	}
+}

+ 21 - 0
src/main/java/cn/drewslab/heimdall/web/DeviceController.java

@@ -0,0 +1,21 @@
+package cn.drewslab.heimdall.web;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.File;
+import java.io.IOException;
+
+@RestController
+@RequestMapping("/device")
+@Slf4j
+public class DeviceController {
+    @GetMapping("/test")
+    public String test() throws IOException {
+
+        return System.getProperty("java.io.tmpdir");
+    }
+
+}

BIN
src/main/resources/sdk/AudioRender.dll


+ 0 - 0
sdk/ClientDemo.exe → src/main/resources/sdk/ClientDemo.exe


+ 1 - 0
src/main/resources/sdk/ClientDemoDll/ReadMe.txt

@@ -0,0 +1 @@
+The dll in this directory£¨iconv.dll,libxml2.dll,zlib1.dll,calib.dll£©only used in ClientDemo.

BIN
src/main/resources/sdk/ClientDemoDll/calib.dll


BIN
src/main/resources/sdk/ClientDemoDll/iconv.dll


BIN
src/main/resources/sdk/ClientDemoDll/libxml2.dll


BIN
src/main/resources/sdk/ClientDemoDll/zlib1.dll


BIN
src/main/resources/sdk/GdiPlus.dll


BIN
src/main/resources/sdk/GdiPlus.lib


BIN
src/main/resources/sdk/HCCore.dll


BIN
src/main/resources/sdk/HCCore.lib


BIN
src/main/resources/sdk/HCNetSDK.dll


BIN
src/main/resources/sdk/HCNetSDK.lib


BIN
src/main/resources/sdk/HCNetSDKCom/AnalyzeData.dll


BIN
src/main/resources/sdk/HCNetSDKCom/AudioIntercom.dll


BIN
src/main/resources/sdk/HCNetSDKCom/HCAlarm.dll


BIN
src/main/resources/sdk/HCNetSDKCom/HCAlarm.lib


BIN
src/main/resources/sdk/HCNetSDKCom/HCCoreDevCfg.dll


BIN
src/main/resources/sdk/HCNetSDKCom/HCDisplay.dll


BIN
src/main/resources/sdk/HCNetSDKCom/HCGeneralCfgMgr.dll


BIN
src/main/resources/sdk/HCNetSDKCom/HCGeneralCfgMgr.lib


BIN
src/main/resources/sdk/HCNetSDKCom/HCIndustry.dll


BIN
src/main/resources/sdk/HCNetSDKCom/HCPlayBack.dll


BIN
src/main/resources/sdk/HCNetSDKCom/HCPreview.dll


BIN
src/main/resources/sdk/HCNetSDKCom/HCPreview.lib


BIN
src/main/resources/sdk/HCNetSDKCom/HCVoiceTalk.dll


BIN
src/main/resources/sdk/HCNetSDKCom/OpenAL32.dll


BIN
src/main/resources/sdk/HCNetSDKCom/StreamTransClient.dll


BIN
src/main/resources/sdk/HCNetSDKCom/SystemTransform.dll


BIN
src/main/resources/sdk/HCNetSDKCom/libiconv2.dll


BIN
src/main/resources/sdk/HXVA.dll


BIN
src/main/resources/sdk/HmMerge.dll


+ 0 - 0
src/main/resources/sdk/LocalSensorAdd.dat


BIN
src/main/resources/sdk/LocalXml.zip


BIN
src/main/resources/sdk/MP_Render.dll


BIN
src/main/resources/sdk/NPQos.dll


BIN
src/main/resources/sdk/PlayCtrl.dll


BIN
src/main/resources/sdk/PlayCtrl.lib


BIN
src/main/resources/sdk/Sadp.dll


BIN
src/main/resources/sdk/Sadp.lib


BIN
src/main/resources/sdk/Sadp.pdb


BIN
src/main/resources/sdk/SuperRender.dll


BIN
src/main/resources/sdk/YUVProcess.dll


BIN
src/main/resources/sdk/hlog.dll


BIN
src/main/resources/sdk/hpr.dll


BIN
src/main/resources/sdk/libeay32.dll


BIN
src/main/resources/sdk/libmmd.dll


BIN
src/main/resources/sdk/npf64.sys


BIN
src/main/resources/sdk/ssleay32.dll


BIN
src/main/resources/sdk/zlib1.dll


Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor