public int openGpsDialog(Pu pu, int channelNo) { foreach (OneDialog dlg in m_gpsDialogs) { if (dlg.pu.id.Equals(pu.id, StringComparison.CurrentCultureIgnoreCase) && dlg.channelNo == channelNo) { LogHelper.LogHelper.RecordLog(51, string.Format("已经发送打开[{0}, {1}]Gps通道的命令", pu.puName, channelNo)); return(-1); } } IntPtr dialog = IntPtr.Zero; int ret = BVCU.ManagedLayer_CuOpenGpsDialog(m_bvsdkHandle, ref dialog, m_session.Handle, Encoding.UTF8.GetBytes(pu.id), channelNo, m_bvsdkEventHandler.gpsDialog_OnEvent, m_bvsdkEventHandler.gpsDialog_OnData); if (BVCU.BVCU_RESULT_S_OK == ret) { OneDialog dlg = new OneDialog(); dlg.dialogHandle = dialog; dlg.channelNo = channelNo; dlg.pu = pu; m_gpsDialogs.Add(dlg); LogHelper.LogHelper.RecordLog(3, string.Format("正在打开{0}, {1}的Gps通道...", pu.puName, channelNo)); return(0); } else { LogHelper.LogHelper.RecordLog(3, string.Format("打开{0}, {1}的Gps通道失败, 错误码:{2}", pu.puName, channelNo, ret)); } return(-1); }
//查询设备列表,如果已存在该设备和通道,则修改通道在线状态,或添加通道,否则在设备列表中添加该设备和通道 public void OnGetPu(string puName, string puId, Channel channel) { foreach (Pu pu in m_server.puList) { if (pu.id.Equals(puId)) { foreach (Channel chnl in pu.channelList) { if (chnl.channelNo == channel.channelNo) { chnl.online = channel.online; return; } } pu.channelList.Add(channel); return; } } Pu newPu = new Pu(); newPu.id = puId; newPu.puName = puName; newPu.channelList.Add(channel); m_server.puList.Add(newPu); }
void OnGetPuPtzAttr(IntPtr session, IntPtr puIdPtr, int ptzIndex, IntPtr ptzAttrPtr) { string puId = Marshal.PtrToStringAnsi(puIdPtr); BVCU_PUCFG_PTZAttr ptzAttr = (BVCU_PUCFG_PTZAttr)Marshal.PtrToStructure(ptzAttrPtr, typeof(BVCU_PUCFG_PTZAttr)); Pu pu = m_session.getPu(puId); if (pu != null) { pu.puPtz.Add(ptzAttr); } }
/// <summary> /// 点击设备列表中的节点时发生 /// </summary> private void treeViewResList_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { //点击通道时发生,视频通道 if (e.Node.Level == TREE_LEVEL_CHANNEL) { Pu pu = m_sdkOperator.Session.getPu(e.Node.Parent.Name); int channelNo = pu.getChannelNo(e.Node.Text); if (channelNo >= BVCU.BVCU_SUBDEV_INDEXMAJOR_MIN_CHANNEL && channelNo < BVCU.BVCU_SUBDEV_INDEXMAJOR_MAX_CHANNEL) { if (m_sdkOperator.Dialog.Count == VIDEO_PANEL_COUNT) { MessageBox.Show("窗口已全部占用"); return; } foreach (Panel panel in m_videoPanels) { if (panel.ContextMenuStrip == null) { panel.ContextMenuStrip = contextMenuStripVideo; Console.WriteLine("Open dialog pu " + pu.id + " channel " + channelNo); //打开浏览******************************************************************* m_sdkOperator.Dialog.openBrowse(pu, channelNo, panel); /* * Player p = new Player(); * p.Show(); * * m_sdkOperator.Dialog.PreviewVideo(pu, channelNo, p.tbPlay); */ break; } } } else if (channelNo >= BVCU.BVCU_SUBDEV_INDEXMAJOR_MIN_TSP && channelNo < BVCU.BVCU_SUBDEV_INDEXMAJOR_MAX_TSP) { //打开Tsp通道 if (m_sdkOperator.Dialog.openTspDialog(pu, channelNo) == 0) { ListViewItem item = new ListViewItem(); item.Text = pu.id; item.Tag = channelNo; ListViewItem.ListViewSubItem TspData = new ListViewItem.ListViewSubItem(); ListViewItem.ListViewSubItem len = new ListViewItem.ListViewSubItem(); item.SubItems.AddRange(new ListViewItem.ListViewSubItem[] { TspData, len }); listViewGPSData.Items.Add(item); } } }//点击通道时发生 end }
/// <summary> /// 打开对话(Dialog) /// </summary> /// <param name="pu"></param> /// <param name="channelNo"></param> /// <param name="panel"></param> public void openBrowse(Pu pu, int channelNo, Panel panel) { try { BVCU_DialogControlParam_Network net = new BVCU_DialogControlParam_Network(0, 5, 1, 3); BVRect dispRect = new BVRect(0, 0, panel.ClientRectangle.Height, panel.ClientRectangle.Width); OneDialog dlg = new OneDialog(); foreach (Channel channel in pu.channelList) { int volume = -1; if (channel.channelNo == channelNo) { if (channel.audioPlayback) { volume = 0; } //打开视屏浏览, 主要参数:sdkHandle、sessionHandle、puID、channelNo、显示区域的大小 int ret = BVCU.ManagedLayer_CuBrowsePu(m_bvsdkHandle, //sdk handle ref dlg.dialogHandle, //dialog handle m_session.Handle, //session handle Encoding.UTF8.GetBytes(pu.id), //pu id channelNo, //channel no panel.Handle, //pannel handle ref dispRect, //上下左右,矩形 volume, //音量 0, //single Rec File Sec Encoding.UTF8.GetBytes(""), //rec File Dir true, //videoTrans ref net, //network 时延 m_bvsdkEventHandler.dialog_OnDialogEvent, m_bvsdkEventHandler.dialog_OnStorageEvent); BVCU.FAILED(ret); LogHelper.LogHelper.RecordLog(4, string.Format("打开[{0}, {1}]的视屏预览通道", pu.puName, channelNo)); break; } } dlg.panel = panel; dlg.pu = pu; dlg.channelNo = channelNo; m_dialogs.Add(dlg); } catch { panel.ContextMenuStrip = null; MessageBox.Show("打开预览失败"); } }
public Channel getChannel(string puId, int channelNo) { Pu pu = getPu(puId); if (pu != null) { foreach (Channel channel in pu.channelList) { if (channel.channelNo == channelNo) { return(channel); } } } return(null); }
private void treeViewResList_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Right) { if (e.Node.Level == TREE_LEVEL_CHANNEL) { Pu pu = m_sdkOperator.Session.getPu(e.Node.Parent.Name); int ichannelNo = pu.getChannelNo(e.Node.Text); g_pu = pu; g_channelNo = ichannelNo; if (ichannelNo >= BVCU.BVCU_SUBDEV_INDEXMAJOR_MIN_CHANNEL && ichannelNo < BVCU.BVCU_SUBDEV_INDEXMAJOR_MAX_CHANNEL) { contextMenuStripTalkOnly.Show(Control.MousePosition.X, Control.MousePosition.Y); } } } }
public void openTalkOnly(Pu pu, int channelNo, Panel panel) { try { BVCU_DialogControlParam_Network net = new BVCU_DialogControlParam_Network(0, 5, 1, 3); BVRect dispRect = new BVRect(0, 0, panel.ClientRectangle.Height, panel.ClientRectangle.Width); OneDialog dlg = new OneDialog(); foreach (Channel channel in pu.channelList) { int captureVolume = 50; int audioVolume = 50; if (channel.channelNo == channelNo) { int ret = BVCU.ManagedLayer_CuNewTalk(m_bvsdkHandle, ref dlg.dialogHandle, m_session.Handle, Encoding.UTF8.GetBytes(pu.id), channelNo, captureVolume, audioVolume, ref net, m_bvsdkEventHandler.dialog_OnDialogEvent, m_bvsdkEventHandler.dialog_OnStorageEvent); BVCU.FAILED(ret); LogHelper.LogHelper.RecordLog(4, string.Format("打开[{0}]对讲", pu.puName)); break; } } dlg.panel = panel; dlg.pu = pu; dlg.channelNo = channelNo; m_dialogs.Add(dlg); } catch { panel.ContextMenuStrip = null; MessageBox.Show("打开对讲失败"); } }
/// <summary> /// 视频预览 /// </summary> /// <example>adf</example> /// <param name="pu">要预览的设备</param> /// <param name="channelNo">通道号</param> /// <param name="control">在哪个控件上预览</param> public void PreviewVideo(Pu pu, int channelNo, Control control) { BVCU_DialogControlParam_Network net = new BVCU_DialogControlParam_Network(0, 5, 1, 3); OneDialog dlg = new OneDialog(); BVRect dispRect = new BVRect(0, 0, control.ClientRectangle.Height, control.ClientRectangle.Width); //打开视屏浏览 int ret = BVCU.ManagedLayer_CuBrowsePu(m_bvsdkHandle, //sdk handle ref dlg.dialogHandle, //dialog handle m_session.Handle, //session handle Encoding.UTF8.GetBytes(pu.id), //pu id channelNo, //channel no control.Handle, //pannel handle ref dispRect, //上下左右,矩形 0, //音量 0, //single Rec File Sec Encoding.UTF8.GetBytes(""), //rec File Dir true, //videoTrans ref net, //network 时延 m_bvsdkEventHandler.dialog_OnDialogEvent, m_bvsdkEventHandler.dialog_OnStorageEvent); }
public int openTspDialog(Pu pu, int channelNo) { //查询tsp通道列表,如果已存在该通道,则返回 foreach (OneDialog dlg in m_tspDialogs) { if (dlg.pu.id.Equals(pu.id, StringComparison.CurrentCultureIgnoreCase) && dlg.channelNo == channelNo) { LogHelper.LogHelper.RecordLog(51, string.Format("已经发送打开[{0}, {1}]串口通道的命令", pu.puName, channelNo)); return(-1); } } IntPtr dialog = IntPtr.Zero; //打开TSP通道 int ret = BVCU.ManagedLayer_CuOpenTspDialog(m_bvsdkHandle, ref dialog, m_session.Handle, Encoding.UTF8.GetBytes(pu.id), channelNo, m_bvsdkEventHandler.tspDialog_OnEvent, m_bvsdkEventHandler.tspDialog_OnData); //如果打开TSP通道成功,则在TSP通道列表中加入该通道 if (BVCU.BVCU_RESULT_S_OK == ret) { OneDialog dlg = new OneDialog(); dlg.dialogHandle = dialog; dlg.channelNo = channelNo; dlg.pu = pu; m_tspDialogs.Add(dlg); LogHelper.LogHelper.RecordLog(0, string.Format("正在打开设备:{0}, 通道:{1}的串口", pu.puName, channelNo)); return(0); } else { string errorMsg = string.Format("打开{0}的{1}串口失败(错误码:{2})", pu.puName, channelNo, ret); MessageBox.Show(errorMsg); LogHelper.LogHelper.RecordLog(100, errorMsg); } return(-1); }
/// <summary> /// 获得设备列表,更新Form中设备TreeView的内容,被this.getPuList()调用 /// </summary> void procGetPuList() { //添加session节点 treeViewResList.Nodes.Clear(); TreeNode session = new TreeNode(m_sdkOperator.Session.Name); treeViewResList.Nodes.Add(session); for (int i = 0; i < m_sdkOperator.Session.PuList.Count; i++) { //添加设备节点 Pu pu = (Pu)m_sdkOperator.Session.PuList[i]; //当前设备是否连接通道 foreach (OneDialog dlg in m_sdkOperator.Dialog.m_dialogs) { if (dlg.pu == pu) { is_on_dialog = true; break; } } //m_sdkOperator.Dialog.m_dialogs; TreeNode puNode = new TreeNode(); puNode.Name = pu.id; if (pu.puName.Length == 0) { puNode.Text = pu.id; } else { puNode.Text = pu.puName; } session.Nodes.Add(puNode); bool online = false; //添加通道节点 foreach (Channel channl in pu.channelList) { TreeNode channelNode = new TreeNode(channl.channelName); if (channl.online) { //。。。。。。。。。。后添加。。。。。。。。 if (!is_on_dialog) { #region //获取通道号 int channelNo = pu.getChannelNo(channelNode.Text); //如果通道在线,判断是否为TSP通道,如果为TSP通道,则打开TSP通道 if (channelNo >= BVCU.BVCU_SUBDEV_INDEXMAJOR_MIN_TSP && channelNo < BVCU.BVCU_SUBDEV_INDEXMAJOR_MAX_TSP) { //打开Tsp通道 if (m_sdkOperator.Dialog.openTspDialog(pu, channelNo) == 0) { //向listview中添加设备和其对应的数据长度列 ListViewItem item = new ListViewItem(); item.Text = pu.id; item.Tag = channelNo; ListViewItem.ListViewSubItem TspData = new ListViewItem.ListViewSubItem(); ListViewItem.ListViewSubItem len = new ListViewItem.ListViewSubItem(); item.SubItems.AddRange(new ListViewItem.ListViewSubItem[] { TspData, len }); listViewGPSData.Items.Add(item); } } else if (channelNo >= BVCU.BVCU_SUBDEV_INDEXMAJOR_MIN_CHANNEL && channelNo < BVCU.BVCU_SUBDEV_INDEXMAJOR_MAX_CHANNEL) { if (m_sdkOperator.Dialog.Count == 4) { //MessageBox.Show("窗口已全部占用"); //return; } else { foreach (Panel panel in m_videoPanels) { if (panel.ContextMenuStrip == null) { panel.ContextMenuStrip = contextMenuStripVideo; Console.WriteLine("Open dialog pu " + pu.id + " channel " + channelNo); //打开浏览******************************************************************* m_sdkOperator.Dialog.openBrowse(pu, channelNo, panel); //录像 // RecordPath = "E:\\PIPE_DATA\\TEST"; Thread.Sleep(10000); m_sdkOperator.Dialog.record(panel); /* * Player p = new Player(); * p.Show(); * * m_sdkOperator.Dialog.PreviewVideo(pu, channelNo, p.tbPlay); */ break; } } Thread.Sleep(10000); } } #endregion } channelNode.ForeColor = Color.Blue; online = true; } else { channelNode.ForeColor = Color.Gray; } puNode.Nodes.Add(channelNode); } /*for (int t = 0; t < pu.channelList.Count; t++) * { * Channel channl = pu.channelList[i] as Channel; * TreeNode channelNode = new TreeNode(channl.channelName); * if (channl.online) * { * channelNode.ForeColor = Color.Blue; * online = true; * } * else * { * channelNode.ForeColor = Color.Gray; * } * puNode.Nodes.Add(channelNode); * }*/ if (online) { puNode.ForeColor = Color.Blue; } else { puNode.ForeColor = Color.Gray; } is_on_dialog = false; } //打开TSP通道后,向所有打开通道发送数据请求信息 sndData_timer.Enabled = true; }