MatDispChan.cpp 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. // MatDispChan.cpp : implementation file
  2. //
  3. /************************************************************************/
  4. /* CopyRights 2007-2008 Hikvision Digital Technology Co., Ltd.
  5. FileName: MatDispChan.cpp
  6. Description: 获取多路解码器解码通道状态和信息
  7. Author: sym
  8. Date: 2007-11-10
  9. Modification History:
  10. <version> <time> <author> <desc>
  11. 2.1.11.10 2007-11-10 sym 创建文件,添加新的功能 */
  12. /************************************************************************/
  13. #include "stdafx.h"
  14. #include "newclient.h"
  15. #include "MatDispChan.h"
  16. #include ".\matdispchan.h"
  17. #ifdef _DEBUG
  18. #define new DEBUG_NEW
  19. #undef THIS_FILE
  20. static char THIS_FILE[] = __FILE__;
  21. #endif
  22. #define DISP_TIMER WM_USER + 1
  23. /////////////////////////////////////////////////////////////////////////////
  24. // CMatDispChan dialog
  25. extern void g_IPToStr(DWORD dip, char outbuf[16]);
  26. CMatDispChan::CMatDispChan(CWnd* pParent /*=NULL*/)
  27. : CDialog(CMatDispChan::IDD, pParent)
  28. {
  29. //{{AFX_DATA_INIT(CMatDispChan)
  30. m_DIIP = _T("");
  31. m_DIPort = 0;
  32. m_DIChanNum = 0;
  33. m_DIUserName = _T("");
  34. m_DIPwd = _T("");
  35. m_FileName = _T("");
  36. m_CopyRate = 0;
  37. //}}AFX_DATA_INIT
  38. m_iChanSel = -1;
  39. }
  40. void CMatDispChan::DoDataExchange(CDataExchange* pDX)
  41. {
  42. CDialog::DoDataExchange(pDX);
  43. //{{AFX_DATA_MAP(CMatDispChan)
  44. DDX_Control(pDX, IDC_COMBOISLINK, m_IsLinkCombo);
  45. DDX_Control(pDX, IDC_CHANCOMBO, m_ChanCombo);
  46. DDX_Control(pDX, IDC_DATETIMEPICKER4, m_EndTime);
  47. DDX_Control(pDX, IDC_DATETIMEPICKER3, m_EndDate);
  48. DDX_Control(pDX, IDC_DATETIMEPICKER2, m_StartTime);
  49. DDX_Control(pDX, IDC_DATETIMEPICKER1, m_StartDate);
  50. DDX_Control(pDX, IDC_TRANSMODECOMBO2, m_DIModeCombo);
  51. DDX_Control(pDX, IDC_PROTOCOLTYPECOMBO2, m_DIProTypeCombo);
  52. DDX_Control(pDX, IDC_COMBODECSTATE, m_DecStateCombo);
  53. DDX_Text(pDX, IDC_LINKIP2, m_DIIP);
  54. DDX_Text(pDX, IDC_LINKPORT2, m_DIPort);
  55. DDX_Text(pDX, IDC_LINKCHAN2, m_DIChanNum);
  56. DDX_Text(pDX, IDC_USERNAME2, m_DIUserName);
  57. DDX_Text(pDX, IDC_PASSWD2, m_DIPwd);
  58. DDX_Text(pDX, IDC_FILENAME, m_FileName);
  59. DDX_Text(pDX, IDC_EDITCOPYRATE, m_CopyRate);
  60. //}}AFX_DATA_MAP
  61. }
  62. BEGIN_MESSAGE_MAP(CMatDispChan, CDialog)
  63. //{{AFX_MSG_MAP(CMatDispChan)
  64. ON_CBN_SELCHANGE(IDC_CHANCOMBO, OnSelchangeChancombo)
  65. ON_WM_TIMER()
  66. //}}AFX_MSG_MAP
  67. ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
  68. END_MESSAGE_MAP()
  69. /////////////////////////////////////////////////////////////////////////////
  70. // CMatDispChan message handlers
  71. BOOL CMatDispChan::OnInitDialog()
  72. {
  73. CDialog::OnInitDialog();
  74. // TODO: Add extra initialization here
  75. CString tmp;
  76. int i=0;
  77. int ChanNo = -1;
  78. m_vGetStatus.resize(m_iChannelnumber);
  79. m_vbGetInfo.resize(m_iChannelnumber);
  80. TRACE("\nm_iChannelnumber = %d\n", m_iChannelnumber);
  81. for(i=0; i<m_iChannelnumber; i++)
  82. {
  83. ChanNo = m_lStartChan+i;
  84. tmp.Format("通道 %d", ChanNo);
  85. m_ChanCombo.AddString(tmp);
  86. //获取各解码通道状态和信息
  87. GetChanStatus(ChanNo, i);
  88. }
  89. for (i=0; i<m_iChannelnumber; ++i)
  90. {
  91. if (m_vbGetInfo[i])
  92. {
  93. //选择获取成功的进行显示
  94. ShowChanInfo(i);
  95. if (m_vGetStatus[i])
  96. {
  97. m_IsLinkCombo.SetCurSel(m_DecChanStatus[i].dwIsLinked);
  98. TRACE("m_DecChanStatus[i].dwIsLinked = %d\n", m_DecChanStatus[i].dwIsLinked);
  99. m_CopyRate = m_DecChanStatus[i].dwStreamCpRate;
  100. }
  101. else
  102. {
  103. tmp.Format("没有获取到通道 %d 的状态!", i+m_lStartChan);
  104. AfxMessageBox(tmp);
  105. }
  106. break;
  107. }
  108. }
  109. UpdateData(FALSE);
  110. SetTimer(DISP_TIMER, 5000, NULL);
  111. return TRUE; // return TRUE unless you set the focus to a control
  112. // EXCEPTION: OCX Property Pages should return FALSE
  113. }
  114. //获取各解码通道状态和信息
  115. BOOL CMatDispChan::GetChanStatus(DWORD DecChanNum, int index)
  116. {
  117. CString tmp;
  118. ZeroMemory(&m_DecChanStatus[index], sizeof(m_DecChanStatus[index]));
  119. m_DecChanStatus->dwSize = sizeof(m_DecChanStatus[index]);
  120. if (!NET_DVR_MatrixGetDecChanStatus(m_lServerID, DecChanNum, &m_DecChanStatus[index]))
  121. {
  122. tmp.Format("\nNET_DVR_MatrixGetDecChanStatus = %ld", NET_DVR_GetLastError());
  123. OutputDebugString(tmp);
  124. m_vGetStatus[index] = FALSE;
  125. }
  126. else
  127. {
  128. m_vGetStatus[index] = TRUE;
  129. }
  130. ZeroMemory(&m_DecChanInfo[index], sizeof(m_DecChanInfo[index]));
  131. m_DecChanInfo[index].dwSize = sizeof(m_DecChanInfo[index]);
  132. if (!NET_DVR_MatrixGetDecChanInfo(m_lServerID, DecChanNum, &m_DecChanInfo[index]))
  133. {
  134. tmp.Format("\nNET_DVR_MatrixGetDecChanInfo = %ld", NET_DVR_GetLastError());
  135. OutputDebugString(tmp);
  136. m_vbGetInfo[index] = FALSE;
  137. }
  138. else
  139. {
  140. m_vbGetInfo[index] = TRUE;
  141. }
  142. return TRUE;
  143. }
  144. //显示某一解码通道的信息
  145. void CMatDispChan::ShowChanInfo(int index)
  146. {
  147. if(index < 0 || index > m_iChannelnumber-1)
  148. {
  149. return;
  150. }
  151. UpdateData(TRUE);
  152. CString tmp;
  153. if(!m_vbGetInfo[index])
  154. {
  155. tmp.Format("未获取到通道 %d 的信息!", index+m_lStartChan);
  156. OutputDebugString(tmp);
  157. }
  158. else
  159. {
  160. m_ChanCombo.SetCurSel(index);
  161. m_DecStateCombo.SetCurSel(m_DecChanInfo[index].dwDecState);
  162. //Dec info...
  163. m_DIIP.Format("%s", m_DecChanInfo[index].struDecChanInfo.sDVRIP);
  164. m_DIPort = m_DecChanInfo[index].struDecChanInfo.wDVRPort;
  165. m_DIChanNum = m_DecChanInfo[index].struDecChanInfo.byChannel;
  166. m_DIUserName.Format("%s", m_DecChanInfo[index].struDecChanInfo.sUserName);
  167. m_DIPwd.Format("%s", m_DecChanInfo[index].struDecChanInfo.sPassword);
  168. m_DIProTypeCombo.SetCurSel(m_DecChanInfo[index].struDecChanInfo.byTransProtocol);
  169. m_DIModeCombo.SetCurSel(m_DecChanInfo[index].struDecChanInfo.byTransMode);
  170. if (m_DecChanInfo[index].dwDecState == 2)
  171. {
  172. SYSTEMTIME sysTime;
  173. ZeroMemory(&sysTime, sizeof(sysTime));
  174. sysTime.wYear = (WORD)m_DecChanInfo[index].StartTime.dwYear;
  175. sysTime.wMonth = (WORD)m_DecChanInfo[index].StartTime.dwMonth;
  176. sysTime.wDay = (WORD)m_DecChanInfo[index].StartTime.dwDay;
  177. sysTime.wHour = (WORD)m_DecChanInfo[index].StartTime.dwHour;
  178. sysTime.wMinute = (WORD)m_DecChanInfo[index].StartTime.dwMinute;
  179. sysTime.wSecond = (WORD)m_DecChanInfo[index].StartTime.dwSecond;
  180. m_StartDate.SetTime(&sysTime);
  181. m_StartTime.SetTime(&sysTime);
  182. ZeroMemory(&sysTime, sizeof(sysTime));
  183. sysTime.wYear = (WORD)m_DecChanInfo[index].StopTime.dwYear;
  184. sysTime.wMonth = (WORD)m_DecChanInfo[index].StopTime.dwMonth;
  185. sysTime.wDay = (WORD)m_DecChanInfo[index].StopTime.dwDay;
  186. sysTime.wHour = (WORD)m_DecChanInfo[index].StopTime.dwHour;
  187. sysTime.wMinute = (WORD)m_DecChanInfo[index].StopTime.dwMinute;
  188. sysTime.wSecond = (WORD)m_DecChanInfo[index].StopTime.dwSecond;
  189. m_EndDate.SetTime(&sysTime);
  190. m_EndTime.SetTime(&sysTime);
  191. m_FileName.Empty();
  192. }
  193. else if (m_DecChanInfo[index].dwDecState == 3)
  194. {
  195. m_FileName.Format("%s", m_DecChanInfo[index].sFileName);
  196. CTime now = CTime::GetCurrentTime();
  197. m_StartDate.SetTime(&now);
  198. m_StartTime.SetTime(&now);
  199. m_EndDate.SetTime(&now);
  200. m_EndTime.SetTime(&now);
  201. }
  202. else
  203. {
  204. CTime now = CTime::GetCurrentTime();
  205. m_StartDate.SetTime(&now);
  206. m_StartTime.SetTime(&now);
  207. m_EndDate.SetTime(&now);
  208. m_EndTime.SetTime(&now);
  209. m_FileName.Empty();
  210. }
  211. }
  212. UpdateData(FALSE);
  213. }
  214. //变换列表中的解码通道号时,显示其对应的状态和信息
  215. void CMatDispChan::OnSelchangeChancombo()
  216. {
  217. // TODO: Add your control notification handler code here
  218. UpdateData(TRUE);
  219. int sel = m_ChanCombo.GetCurSel();
  220. ShowChanInfo(sel);
  221. if (!m_vGetStatus[sel])
  222. {
  223. CString tmp;
  224. tmp.Format("没有获取到通道 %d 的状态!", sel + m_lStartChan);
  225. AfxMessageBox(tmp);
  226. }
  227. else
  228. {
  229. m_IsLinkCombo.SetCurSel(m_DecChanStatus[sel].dwIsLinked);
  230. m_CopyRate = m_DecChanStatus[sel].dwStreamCpRate;
  231. }
  232. UpdateData(FALSE);
  233. }
  234. void CMatDispChan::OnTimer(UINT nIDEvent)
  235. {
  236. // TODO: Add your message handler code here and/or call default
  237. if (nIDEvent == DISP_TIMER)
  238. {
  239. UpdateData(TRUE);
  240. int sel = m_ChanCombo.GetCurSel();
  241. GetChanStatus(sel+m_lStartChan, sel);
  242. ShowChanInfo(sel);
  243. UpdateData(TRUE);
  244. if (!m_vGetStatus[sel])
  245. {
  246. CString tmp;
  247. tmp.Format("没有获取到通道 %d 的状态!", sel + m_lStartChan);
  248. OutputDebugString(tmp);
  249. }
  250. else
  251. {
  252. m_IsLinkCombo.SetCurSel(m_DecChanStatus[sel].dwIsLinked);
  253. m_CopyRate = m_DecChanStatus[sel].dwStreamCpRate;
  254. }
  255. UpdateData(FALSE);
  256. }
  257. CDialog::OnTimer(nIDEvent);
  258. }
  259. void CMatDispChan::OnCancel()
  260. {
  261. // TODO: Add extra cleanup here
  262. KillTimer(DISP_TIMER);
  263. CDialog::OnCancel();
  264. }
  265. void CMatDispChan::OnBnClickedCancel()
  266. {
  267. // TODO: 在此添加控件通知处理程序代码
  268. OnCancel();
  269. }