STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
FormMain.cs
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without modification,
6  * are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice,
9  * this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright notice,
11  * this list of conditions and the following disclaimer in the documentation
12  * and/or other materials provided with the distribution.
13  * 3. The name of the author may not be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
19  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
21  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
24  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
25  * OF SUCH DAMAGE.
26  *
27  * This file is part of the lwIP TCP/IP stack.
28  *
29  * Author: Martin Hentschel <info@cl-soft.de>
30  *
31  */
32 
33 using System.Windows.Forms;
34 using Lextm.SharpSnmpLib.Mib;
38 using System.IO;
39 
40 namespace LwipMibViewer
41 {
42  public partial class FormMain : Form
43  {
44  readonly ListViewGroup listviewgroupAbstract;
45  readonly ListViewGroup listviewgroupElement;
46  readonly ListViewGroup listviewgroupBaseType;
47  readonly ListViewGroup listviewgroupTypeChain;
48 
49  public FormMain()
50  {
51  this.Font = SystemInformation.MenuFont;
52  InitializeComponent();
53 
54  this.listviewgroupAbstract = new ListViewGroup("Abstract", System.Windows.Forms.HorizontalAlignment.Left);
55  this.listviewgroupElement = new ListViewGroup("Element Properties", System.Windows.Forms.HorizontalAlignment.Left);
56  this.listviewgroupBaseType = new ListViewGroup("Element Base Type", System.Windows.Forms.HorizontalAlignment.Left);
57  this.listviewgroupTypeChain = new ListViewGroup("Element Type Chain", System.Windows.Forms.HorizontalAlignment.Left);
58  this.listviewNodeDetails.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] {
59  listviewgroupAbstract,
60  listviewgroupElement,
61  listviewgroupBaseType,
62  listviewgroupTypeChain});
63 
64  try
65  {
66  DirectoryInfo dirInfo = new DirectoryInfo(Path.GetDirectoryName(Application.ExecutablePath));
67  if (dirInfo != null)
68  {
69  dirInfo = dirInfo.Parent;
70  if (dirInfo != null)
71  {
72  dirInfo = dirInfo.Parent;
73  if (dirInfo != null)
74  {
75  dirInfo = new DirectoryInfo(Path.Combine(dirInfo.FullName, "Mibs"));
76  if (dirInfo.Exists)
77  {
78  MibTypesResolver.RegisterResolver(new FileSystemMibResolver(dirInfo.FullName, true));
79  }
80  }
81  }
82  }
83  }
84  catch
85  { }
86  }
87 
88  #region GUI Event Handler
89 
90  private void toolbuttonOpenMib_Click(object sender, System.EventArgs e)
91  {
92  if (this.dialogOpenMib.ShowDialog() == DialogResult.OK)
93  {
94  OpenMib(this.dialogOpenMib.FileName);
95  }
96  }
97 
98  private void treeMib_AfterSelect(object sender, TreeViewEventArgs e)
99  {
100  listviewNodeDetails.Items.Clear();
101 
102  if (e.Node != null)
103  {
104  MibTreeNode mtn = e.Node.Tag as MibTreeNode;
105  if (mtn != null)
106  {
107  listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Abstract", mtn.NodeType.ToString() }, this.listviewgroupAbstract));
108 
109  listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Module", (mtn.Entity.Module != null) ? mtn.Entity.Module.Name : "" }, this.listviewgroupElement));
110  listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Type", mtn.Entity.GetType().Name }, this.listviewgroupElement));
111  listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Name", mtn.Entity.Name }, this.listviewgroupElement));
112  listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Description", mtn.Entity.Description }, this.listviewgroupElement));
113  listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "OID", mtn.Entity.Value.ToString() }, this.listviewgroupElement));
114  listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Full OID", MibTypesResolver.ResolveOid(mtn.Entity).GetOidString() }, this.listviewgroupElement));
115  if (mtn.Entity is ObjectType)
116  {
117  listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Access", (mtn.Entity as ObjectType).Access.ToString() }, this.listviewgroupElement));
118  }
119 
120  ITypeReferrer tr = mtn.Entity as ITypeReferrer;
121  if (tr != null)
122  {
123  ShowTypeDetails(listviewNodeDetails, this.listviewgroupBaseType, tr.BaseType);
124  ShowTypeChain(listviewNodeDetails, tr.ReferredType);
125  }
126  }
127  }
128  }
129 
130  #endregion
131 
132  #region Methods
133 
134  private void OpenMib(string file)
135  {
136  try
137  {
138  MibDocument md = new MibDocument(file);
139  MibTypesResolver.ResolveTypes(md.Modules[0]);
140 
141  this.treeMib.Nodes.Clear();
142  this.listviewNodeDetails.Items.Clear();
143 
144  MibTree mt = new MibTree(md.Modules[0] as MibModule);
145  foreach (MibTreeNode mibTreeNode in mt.Root)
146  {
147  AddNode(mibTreeNode, this.treeMib.Nodes);
148 
149  foreach (TreeNode node in this.treeMib.Nodes)
150  {
151  node.Expand();
152  }
153  }
154  }
155  catch
156  {
157  }
158  }
159 
160  private void AddNode(MibTreeNode mibNode, TreeNodeCollection parentNodes)
161  {
162  int imgIndex = 5; //unknown
163  if ((mibNode.NodeType & MibTreeNodeType.Table) != 0)
164  {
165  imgIndex = 1;
166  }
167  else if ((mibNode.NodeType & MibTreeNodeType.TableRow) != 0)
168  {
169  imgIndex = 2;
170  }
171  else if ((mibNode.NodeType & MibTreeNodeType.TableCell) != 0)
172  {
173  imgIndex = 3;
174  }
175  else if ((mibNode.NodeType & MibTreeNodeType.Scalar) != 0)
176  {
177  imgIndex = 4;
178  }
179  else if ((mibNode.NodeType & MibTreeNodeType.Container) != 0)
180  {
181  imgIndex = 0;
182  }
183 
184  TreeNode newNode = new TreeNode(mibNode.Entity.Name, imgIndex, imgIndex);
185  newNode.Tag = mibNode;
186 
187  parentNodes.Add(newNode);
188 
189  foreach (MibTreeNode child in mibNode.ChildNodes)
190  {
191  AddNode(child, newNode.Nodes);
192  }
193  }
194 
195  private void ShowTypeChain(ListView lv, ITypeAssignment type)
196  {
197  ShowTypeDetails(lv, this.listviewgroupTypeChain, type);
198 
199  ITypeReferrer tr = type as ITypeReferrer;
200  if ((tr != null) && (tr.ReferredType != null))
201  {
202  lv.Items.Add(new ListViewItem(new string[] { " >>>", "" }, this.listviewgroupTypeChain));
203  ShowTypeChain(listviewNodeDetails, tr.ReferredType);
204  }
205  }
206 
207  private void ShowTypeDetails(ListView lv, ListViewGroup lvg, ITypeAssignment type)
208  {
209  lv.Items.Add(new ListViewItem(new string[] { "Module", (type.Module != null) ? type.Module.Name : "" }, lvg));
210  lv.Items.Add(new ListViewItem(new string[] { "Type", type.GetType().Name }, lvg));
211  lv.Items.Add(new ListViewItem(new string[] { "Name", type.Name }, lvg));
212  }
213 
214  #endregion
215 
216  }
217 }
string Description
Gets the description.
Definition: IEntity.cs:58
List< MibTreeNode > ChildNodes
Definition: MibTreeNode.cs:51
IList< IModule > Modules
MibModule containing in this document.
Definition: MibDocument.cs:50
IModule Module
Containing module.
Definition: IElement.cs:30
string Name
Module name.
Definition: IModule.cs:42
Builds up a tree from a single MIB
Definition: MibTree.cs:9