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; }
public NodeReadEventArgs(KowhaiNodeInfo info) { Info = info; }
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++; } }
public DataChangeEventArgs(KowhaiNodeInfo info, byte[] buffer) { Info = info; Buffer = buffer; }
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)); }
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; }
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; }
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; }
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; }