ConfigService.cs 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. using QuickNV.HikvisionNetSDK.Api.Utils;
  2. using System;
  3. using System.Linq;
  4. using System.Runtime.InteropServices;
  5. using static QuickNV.HikvisionNetSDK.Defines;
  6. using static QuickNV.HikvisionNetSDK.Methods;
  7. namespace QuickNV.HikvisionNetSDK.Api.Service
  8. {
  9. public class ConfigService
  10. {
  11. private HvSession session;
  12. internal ConfigService(HvSession session)
  13. {
  14. this.session = session;
  15. }
  16. public DateTime GetTime()
  17. {
  18. NET_DVR_TIME m_struTimeCfg = default;
  19. uint dwReturn = 0;
  20. int nSize = Marshal.SizeOf(m_struTimeCfg);
  21. IntPtr ptrTimeCfg = Marshal.AllocHGlobal(nSize);
  22. try
  23. {
  24. Marshal.StructureToPtr(m_struTimeCfg, ptrTimeCfg, false);
  25. Invoke(NET_DVR_GetDVRConfig(session.UserId, NET_DVR_GET_TIMECFG, 1, ptrTimeCfg, (uint)nSize, ref dwReturn));
  26. m_struTimeCfg = Marshal.PtrToStructure<NET_DVR_TIME>(ptrTimeCfg);
  27. return m_struTimeCfg.ToDateTime();
  28. }
  29. catch
  30. {
  31. throw;
  32. }
  33. finally
  34. {
  35. Marshal.FreeHGlobal(ptrTimeCfg);
  36. }
  37. }
  38. public void SetTime(DateTime dateTime)
  39. {
  40. NET_DVR_TIME m_struTimeCfg = dateTime.ToNET_DVR_TIME();
  41. int nSize = Marshal.SizeOf(m_struTimeCfg);
  42. IntPtr ptrTimeCfg = Marshal.AllocHGlobal(nSize);
  43. try
  44. {
  45. Marshal.StructureToPtr(m_struTimeCfg, ptrTimeCfg, false);
  46. Invoke(NET_DVR_SetDVRConfig(session.UserId, NET_DVR_SET_TIMECFG, -1, ptrTimeCfg, (uint)nSize));
  47. }
  48. catch
  49. {
  50. throw;
  51. }
  52. finally
  53. {
  54. Marshal.FreeHGlobal(ptrTimeCfg);
  55. }
  56. }
  57. public HvNetworkConfig GetNetworkConfig()
  58. {
  59. NET_DVR_NETCFG_V30 m_struNetCfg = default;
  60. uint dwReturn = 0;
  61. int nSize = Marshal.SizeOf(m_struNetCfg);
  62. IntPtr ptrNetCfg = Marshal.AllocHGlobal(nSize);
  63. try
  64. {
  65. Marshal.StructureToPtr(m_struNetCfg, ptrNetCfg, false);
  66. Invoke(NET_DVR_GetDVRConfig(session.UserId, NET_DVR_GET_NETCFG_V30, -1, ptrNetCfg, (uint)nSize, ref dwReturn));
  67. m_struNetCfg = Marshal.PtrToStructure<NET_DVR_NETCFG_V30>(ptrNetCfg);
  68. HvNetworkConfig networkConfig = new HvNetworkConfig
  69. {
  70. IPAddress = StringUtils.ByteArray2String(m_struNetCfg.struEtherNet[0].struDVRIP.sIpV4, session.Encoding),
  71. GateWay = StringUtils.ByteArray2String(m_struNetCfg.struGatewayIpAddr.sIpV4, session.Encoding),
  72. SubMask = StringUtils.ByteArray2String(m_struNetCfg.struEtherNet[0].struDVRIPMask.sIpV4, session.Encoding),
  73. Dns = StringUtils.ByteArray2String(m_struNetCfg.struDnsServer1IpAddr.sIpV4, session.Encoding),
  74. HostIP = StringUtils.ByteArray2String(m_struNetCfg.struAlarmHostIpAddr.sIpV4, session.Encoding),
  75. AlarmHostIpPort = Convert.ToInt32(m_struNetCfg.wAlarmHostIpPort),
  76. HttpPort = Convert.ToInt32(m_struNetCfg.wHttpPortNo),
  77. DVRPort = Convert.ToInt32(m_struNetCfg.struEtherNet[0].wDVRPort),
  78. DHCP = m_struNetCfg.byUseDhcp == 1,
  79. PPPoE = m_struNetCfg.struPPPoE.dwPPPOE == 1,
  80. PPPoEName = StringUtils.ByteArray2String(m_struNetCfg.struPPPoE.sPPPoEUser, session.Encoding),
  81. PPPoEPassword = m_struNetCfg.struPPPoE.sPPPoEPassword
  82. };
  83. return networkConfig;
  84. }
  85. catch
  86. {
  87. throw;
  88. }
  89. finally
  90. {
  91. Marshal.FreeHGlobal(ptrNetCfg);
  92. }
  93. }
  94. public HvDeviceConfig GetDeviceConfig()
  95. {
  96. NET_DVR_DEVICECFG_V40 m_struDeviceCfg = default;
  97. uint dwReturn = 0;
  98. int nSize = Marshal.SizeOf(m_struDeviceCfg);
  99. IntPtr ptrDeviceCfg = Marshal.AllocHGlobal(nSize);
  100. try
  101. {
  102. Marshal.StructureToPtr(m_struDeviceCfg, ptrDeviceCfg, false);
  103. Invoke(NET_DVR_GetDVRConfig(session.UserId, NET_DVR_GET_DEVICECFG_V40, -1, ptrDeviceCfg, (uint)nSize, ref dwReturn));
  104. m_struDeviceCfg = Marshal.PtrToStructure<NET_DVR_DEVICECFG_V40>(ptrDeviceCfg);
  105. uint iVer1 = (m_struDeviceCfg.dwSoftwareVersion >> 24) & 0xFF;
  106. uint iVer2 = (m_struDeviceCfg.dwSoftwareVersion >> 16) & 0xFF;
  107. uint iVer3 = m_struDeviceCfg.dwSoftwareVersion & 0xFFFF;
  108. uint iVer4 = (m_struDeviceCfg.dwSoftwareBuildDate >> 16) & 0xFFFF;
  109. uint iVer5 = (m_struDeviceCfg.dwSoftwareBuildDate >> 8) & 0xFF;
  110. uint iVer6 = m_struDeviceCfg.dwSoftwareBuildDate & 0xFF;
  111. var deviceConfig = new HvDeviceConfig
  112. {
  113. Name = StringUtils.ByteArray2String(m_struDeviceCfg.sDVRName, session.Encoding),
  114. TypeName = StringUtils.ByteArray2String(m_struDeviceCfg.byDevTypeName, session.Encoding),
  115. AnalogChannel = Convert.ToInt32(m_struDeviceCfg.byChanNum),
  116. IPChannel = Convert.ToInt32(m_struDeviceCfg.byIPChanNum + 256 * m_struDeviceCfg.byHighIPChanNum),
  117. ZeroChannel = Convert.ToInt32(m_struDeviceCfg.byZeroChanNum),
  118. NetworkPort = Convert.ToInt32(m_struDeviceCfg.byNetworkPortNum),
  119. AlarmInPort = Convert.ToInt32(m_struDeviceCfg.byAlarmInPortNum),
  120. AlarmOutPort = Convert.ToInt32(m_struDeviceCfg.byAlarmOutPortNum),
  121. Serial = StringUtils.ByteArray2String(m_struDeviceCfg.sSerialNumber, session.Encoding),
  122. Version = $"V{iVer1}.{iVer2}.{iVer3} Build {iVer4,0:D2}{iVer5,0:D2}{iVer6,0:D2}"
  123. };
  124. return deviceConfig;
  125. }
  126. catch
  127. {
  128. throw;
  129. }
  130. finally
  131. {
  132. Marshal.FreeHGlobal(ptrDeviceCfg);
  133. }
  134. }
  135. /// <summary>
  136. /// 获取第一块硬盘信息
  137. /// </summary>
  138. /// <returns></returns>
  139. public HvHdConfig GetHdConfig()
  140. {
  141. return GetHdConfigs().FirstOrDefault();
  142. }
  143. /// <summary>
  144. /// 获取全部硬盘信息
  145. /// </summary>
  146. /// <returns></returns>
  147. public HvHdConfig[] GetHdConfigs()
  148. {
  149. NET_DVR_HDCFG hdConfig = default;
  150. uint returned = 0;
  151. int sizeOfConfig = Marshal.SizeOf(hdConfig);
  152. IntPtr ptrDeviceCfg = Marshal.AllocHGlobal(sizeOfConfig);
  153. try
  154. {
  155. Marshal.StructureToPtr(hdConfig, ptrDeviceCfg, false);
  156. Invoke(NET_DVR_GetDVRConfig(
  157. session.UserId,
  158. NET_DVR_GET_HDCFG,
  159. -1,
  160. ptrDeviceCfg,
  161. (uint)sizeOfConfig,
  162. ref returned));
  163. hdConfig = Marshal.PtrToStructure<NET_DVR_HDCFG>(ptrDeviceCfg);
  164. var disks = hdConfig.struHDInfo
  165. .Take((int)hdConfig.dwHDCount)
  166. .Select(x => new HvHdConfig(x))
  167. .ToArray();
  168. return disks;
  169. }
  170. catch
  171. {
  172. throw;
  173. }
  174. finally
  175. {
  176. Marshal.FreeHGlobal(ptrDeviceCfg);
  177. }
  178. }
  179. /// <summary>
  180. /// 获取RTSP端口
  181. /// </summary>
  182. /// <returns></returns>
  183. public int GetRtspPort()
  184. {
  185. NET_DVR_RTSPCFG rtspConfig = default;
  186. var ptrSize = Marshal.SizeOf(rtspConfig);
  187. NET_DVR_GetRtspConfig(session.UserId, 0, ref rtspConfig, (uint)ptrSize);
  188. return rtspConfig.wPort;
  189. }
  190. }
  191. }