Exemple #1
0
 public KowhaiNodeInfo(Kowhai.kowhai_node_t kowhaiNode, int nodeIndex, bool isArrayItem, ushort arrayIndex, ushort offset, KowhaiNodeInfo parent)
 {
     KowhaiNode = kowhaiNode;
     NodeIndex = nodeIndex;
     IsArrayItem = isArrayItem;
     ArrayIndex = arrayIndex;
     Offset = offset;
     Parent = parent;
 }
Exemple #2
0
 public NodeReadEventArgs(KowhaiNodeInfo info)
 {
     Info = info;
 }
Exemple #3
0
 void _UpdateDescriptor(Kowhai.kowhai_node_t[] descriptor, ref int index, ref ushort offset, TreeNode node, KowhaiNodeInfo initialNodeInfo)
 {
     while (index < descriptor.Length)
     {
         Kowhai.kowhai_node_t descNode = descriptor[index];
         switch (descNode.type)
         {
             case Kowhai.BRANCH:
                 if (node == null)
                     node = treeView1.Nodes.Add(GetNodeName(descNode, null));
                 else
                     node = node.Nodes.Add(GetNodeName(descNode, null));
                 KowhaiNodeInfo parentInfo = null;
                 if (node.Parent != null)
                     parentInfo = (KowhaiNodeInfo)node.Parent.Tag;
                 node.Tag = new KowhaiNodeInfo(descNode, index, false, 0, offset, parentInfo);
                 if (descNode.count > 1)
                 {
                     int prevIndex = index;
                     for (ushort i = 0; i < descNode.count; i++)
                     {
                         if (initialNodeInfo != null && initialNodeInfo.IsArrayItem && initialNodeInfo.ArrayIndex != i)
                             continue;
                         index = prevIndex;
                         TreeNode arrayNode = node.Nodes.Add("#" + i.ToString());
                         arrayNode.Tag = new KowhaiNodeInfo(descNode, index, true, i, offset, parentInfo);
                         index++;
                         _UpdateDescriptor(descriptor, ref index, ref offset, arrayNode, null);
                     }
                 }
                 else
                 {
                     index++;
                     _UpdateDescriptor(descriptor, ref index, ref offset, node, null);
                 }
                 node = node.Parent;
                 break;
             case Kowhai.BRANCH_END:
                 return;
             default:
                 TreeNode leaf;
                 if (node == null)
                     leaf = treeView1.Nodes.Add(GetNodeName(descNode, null));
                 else
                     leaf = node.Nodes.Add(GetNodeName(descNode, null));
                 KowhaiNodeInfo parentNodeInfo = null;
                 if (leaf.Parent != null)
                     parentNodeInfo = (KowhaiNodeInfo)leaf.Parent.Tag;
                 leaf.Tag = new KowhaiNodeInfo(descNode, index, false, 0, offset, parentNodeInfo);
                 if (descNode.count > 1 && descNode.type != Kowhai.CHAR)
                 {
                     for (ushort i = 0; i < descNode.count; i++)
                     {
                         TreeNode child = leaf.Nodes.Add("#" + i.ToString());
                         child.Tag = new KowhaiNodeInfo(descNode, index, true, i, offset, parentNodeInfo);
                         offset += (ushort)Kowhai.kowhai_get_node_type_size(descNode.type);
                     }
                 }
                 else
                     offset += (ushort)(Kowhai.kowhai_get_node_type_size(descNode.type) * descNode.count);
                 break;
         }
         index++;
     }
 }
Exemple #4
0
 public DataChangeEventArgs(KowhaiNodeInfo info, byte[] buffer)
 {
     Info = info;
     Buffer = buffer;
 }
Exemple #5
0
 string GetNodeName(Kowhai.kowhai_node_t node, KowhaiNodeInfo info)
 {
     if (node.type == Kowhai.BRANCH)
         return string.Format("{0}{1}{2}", symbols[node.symbol], GetNodeArrayString(node), GetNodeTagString(node));
     if (info != null && info.IsArrayItem)
         return string.Format("#{0}{1} = {2}", info.ArrayIndex, GetNodeTagString(node), GetDataValue(info));
     else if (node.type == Kowhai.CHAR)
         return string.Format("{0}{1}{2}: {3} = \"{4}\"", symbols[node.symbol], GetNodeArrayString(node), GetNodeTagString(node), GetDataTypeString(node.type), GetDataValue(info));
     else if (node.count > 1)
         return string.Format("{0}{1}{2}: {3}", symbols[node.symbol], GetNodeArrayString(node), GetNodeTagString(node), GetDataTypeString(node.type));
     else
         return string.Format("{0}{1}: {2} = {3}", symbols[node.symbol], GetNodeTagString(node), GetDataTypeString(node.type), GetDataValue(info));
 }
Exemple #6
0
 byte[] GetNodeData(KowhaiNodeInfo info)
 {
     if (info == null)
         return null;
     int size = Kowhai.kowhai_get_node_type_size(info.KowhaiNode.type);
     if (info.Offset + size <= data.Length)
     {
         byte[] nodeData = new byte[size];
         Array.Copy(data, info.Offset, nodeData, 0, size);
         return nodeData;
     }
     return null;
 }
Exemple #7
0
 private object GetDataValue(KowhaiNodeInfo info)
 {
     if (info == null)
         return null;
     int size = Kowhai.kowhai_get_node_type_size(info.KowhaiNode.type);
     if (info.Offset + size <= data.Length)
     {
         switch (info.KowhaiNode.type)
         {
             case Kowhai.INT8:
                 return (sbyte)data[info.Offset];
             case Kowhai.UINT8:
                 return data[info.Offset];
             case Kowhai.CHAR:
                 // convert byte array to string
                 string result = "";
                 int max = Math.Min(data.Length, info.Offset + info.KowhaiNode.count) - info.Offset;
                 result = System.Text.Encoding.ASCII.GetString(data, info.Offset, max);
                 int nullLocation = result.IndexOf((char)0);
                 if (nullLocation > -1)
                     return result.Substring(0, nullLocation);
                 return result;
             case Kowhai.INT16:
                 return BitConverter.ToInt16(data, info.Offset);
             case Kowhai.UINT16:
                 return BitConverter.ToUInt16(data, info.Offset);
             case Kowhai.INT32:
                 return BitConverter.ToInt32(data, info.Offset);
             case Kowhai.UINT32:
                 return BitConverter.ToUInt32(data, info.Offset);
             case Kowhai.FLOAT:
                 return BitConverter.ToSingle(data, info.Offset);
         }
     }
     return null;
 }
Exemple #8
0
 public void UpdateDescriptor(Kowhai.kowhai_node_t[] descriptor, string[] symbols, KowhaiNodeInfo info)
 {
     this.descriptor = descriptor;
     this.symbols = symbols;
     treeView1.Nodes.Clear();
     int index = 0;
     ushort offset = 0;
     _UpdateDescriptor(descriptor, ref index, ref offset, null, info);
     treeView1.ExpandAll();
     return;
 }
Exemple #9
0
 public void UpdateDescriptor(Kowhai.kowhai_node_t[] descriptor, string[] symbols, KowhaiNodeInfo info)
 {
     this.descriptor = descriptor;
     this.symbols = symbols;
     treeView1.Nodes.Clear();
     int index = 0;
     ushort offset = 0;
     _UpdateDescriptor(descriptor, ref index, ref offset, null, info, descriptor[0].type == Kowhai.BRANCH_U_START);
     if (treeView1.Nodes.Count > 0)
         treeView1.Nodes[0].Expand();
     return;
 }