Nvr.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package HikSDK
  2. import (
  3. "errors"
  4. "time"
  5. )
  6. type Nvr struct {
  7. userId LONG
  8. deviceInfo NET_DVR_DEVICEINFO
  9. }
  10. type TimeRange struct {
  11. StartYear DWORD
  12. StartMonth DWORD
  13. StartDay DWORD
  14. StartHour DWORD
  15. StartMinute DWORD
  16. StartSecond DWORD
  17. EndYear DWORD
  18. EndMonth DWORD
  19. EndDay DWORD
  20. EndHour DWORD
  21. EndMinute DWORD
  22. EndSecond DWORD
  23. }
  24. type WebTimeRang struct {
  25. StartTime time.Time
  26. EndTime time.Time
  27. }
  28. func NewNvr(Ip string, Port int, Username, Password string) (*Nvr, error) {
  29. userId, deviceInfo, err := login(Ip, Port, Username, Password)
  30. if err != nil {
  31. return nil, err
  32. }
  33. return &Nvr{
  34. userId: userId,
  35. deviceInfo: deviceInfo,
  36. }, nil
  37. }
  38. func (this *Nvr) GetTimeZone() (int, error) {
  39. if this == nil {
  40. return 0, errors.New("Nvr is nil")
  41. }
  42. return getTimeZone(this.userId), nil
  43. }
  44. func (this *Nvr) CheckTimeRegionWithMonth(Year, Month, Channel uint16) ([]uint8, error) {
  45. if this == nil {
  46. return nil, errors.New("Nvr is nil")
  47. }
  48. return QueryMonth(this.userId, WORD(Year), BYTE(Month), DWORD(Channel))
  49. }
  50. func (this *Nvr) CheckTimeRegionWithDay(Year, Month, Day, Channel uint16) ([]WebTimeRang, error) {
  51. if this == nil {
  52. return nil, errors.New("Nvr is nil")
  53. }
  54. Handle := QueryDayHandle(this.userId, DWORD(Year), DWORD(Month), DWORD(Day), LONG(Channel))
  55. res, state, err := QueryDayNextFile(Handle)
  56. if err != nil {
  57. return []WebTimeRang{}, err
  58. }
  59. ByUTCDiff, err := this.GetTimeZone()
  60. if err != nil {
  61. return nil, err
  62. }
  63. var webres []WebTimeRang
  64. for state > 0 {
  65. var StartTimeObj time.Time
  66. var EndTimeObj time.Time
  67. if state == 1001 {
  68. break
  69. }
  70. if state == 1003 {
  71. break
  72. }
  73. if state == 1004 {
  74. break
  75. }
  76. if state == 1000 {
  77. if uint16(res.StartDay) != Day {
  78. StartTimeObj = time.Date(int(res.StartYear), time.Month(res.StartMonth), int(res.StartDay+1), 0, 0, 0, 0, time.UTC)
  79. } else {
  80. StartTimeObj = time.Date(int(res.StartYear), time.Month(res.StartMonth), int(res.StartDay), int(res.StartHour), int(res.StartMinute), int(res.StartSecond), 0, time.UTC)
  81. }
  82. if uint16(res.EndDay) != Day {
  83. EndTimeObj = time.Date(int(res.EndYear), time.Month(res.EndMonth), int(res.EndDay-1), 23, 59, 59, 59, time.UTC)
  84. } else {
  85. EndTimeObj = time.Date(int(res.EndYear), time.Month(res.EndMonth), int(res.EndDay), int(res.EndHour), int(res.EndMinute), int(res.EndSecond), 0, time.UTC)
  86. }
  87. StartTimeObj = StartTimeObj.Add(time.Minute * time.Duration(-ByUTCDiff))
  88. EndTimeObj = EndTimeObj.Add(time.Minute * time.Duration(-ByUTCDiff))
  89. webres = append(webres, WebTimeRang{
  90. StartTime: StartTimeObj,
  91. EndTime: EndTimeObj,
  92. })
  93. }
  94. if state == 1002 {
  95. res, state, err = QueryDayNextFile(Handle)
  96. if err != nil {
  97. return []WebTimeRang{}, err
  98. }
  99. time.Sleep(time.Millisecond * 5)
  100. continue
  101. }
  102. res, state, err = QueryDayNextFile(Handle)
  103. if err != nil {
  104. return []WebTimeRang{}, err
  105. }
  106. time.Sleep(time.Millisecond * 5)
  107. }
  108. err = FindClose(Handle)
  109. if err != nil {
  110. return nil, err
  111. }
  112. return webres, nil
  113. }
  114. func (this *Nvr) Logout() error {
  115. if this == nil {
  116. return errors.New("Nvr is nil")
  117. }
  118. return logout(this.userId)
  119. }
  120. func (this *Nvr) Status() bool {
  121. if this == nil {
  122. return false
  123. }
  124. return deviceOnline(this.userId)
  125. }