etherlab/entries_list.ysl2
changeset 2162 43ab74687f45
child 2165 02a2b5dee5e3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etherlab/entries_list.ysl2	Wed Oct 02 10:46:18 2013 +0200
@@ -0,0 +1,86 @@
+include yslt.yml2
+estylesheet xmlns:ns="entries_list_ns" 
+            extension-element-prefixes="ns" 
+            exclude-result-prefixes="ns" {
+    
+    param "min_index";
+    param "max_index";
+    
+    template "text()";
+    
+    template "Device" {
+        apply "Profile/Dictionary/Objects/Object";
+        foreach "RxPdo" {
+            call "pdo_entries" with "direction", "'Receive'";
+        }
+        foreach "TxPdo" {
+            call "pdo_entries" with "direction", "'Transmit'";
+        }
+    }
+    
+    template "Object" {
+        variable "index" > «ns:HexDecValue(Index/text())»
+        variable "entry_name" > «ns:EntryName(Name)»
+        choose {
+            when "$index >= $min_index and $index <= $max_index" {
+                variable "datatype_name" > «Type/text()»
+                choose {
+                    when "ancestor::Dictionary/child::DataTypes/DataType[Name/text()=$datatype_name][SubItem]" {
+                        apply "ancestor::Dictionary/child::DataTypes/DataType[Name/text()=$datatype_name][SubItem]" {
+                            with "index" > «$index»
+                            with "entry_name" > «$entry_name»
+                        }
+                    }
+                    otherwise {
+                        variable "subindex" > 0
+                        variable "entry" {
+                            > «ns:AddEntry($index, $subindex, $entry_name, $datatype_name, BitSize/text(), Flags/Access/text(), Flags/PdoMapping/text())»
+                        }
+                    }
+                }
+            }
+        }
+    }
+    
+    template "DataType" {
+        param "index";
+        param "entry_name";
+        foreach "SubItem" {
+            variable "subindex" > «ns:HexDecValue(SubIdx/text())»
+            variable "subentry_name" > «$entry_name» - «ns:EntryName(DisplayName, Name/text())»
+            variable "entry" {
+                > «ns:AddEntry($index, $subindex, $subentry_name, Type/text(), BitSize/text(), Flags/Access/text(), Flags/PdoMapping/text())»
+            }
+        }
+    }
+    
+    function "pdo_entries" {
+        param "direction";
+        variable "pdo_index" > «ns:HexDecValue(Index/text())»
+        variable "pdo_name" > «ns:EntryName(Name)»
+        foreach "Entry" {
+            variable "index" > «ns:HexDecValue(Index/text())»
+            choose {
+                when "$index >= $min_index and $index <= $max_index" {
+                    variable "subindex" > «ns:HexDecValue(SubIndex/text())»
+                    variable "subentry_name" > «ns:EntryName(Name)»
+                    variable "access" {
+                        choose {
+                            when "$direction='Transmit'" > ro
+                            otherwise > wo
+                        }
+                    }
+                    variable "pdo_mapping" {
+                        choose {
+                            when "$direction='Transmit'" > T
+                            otherwise > R
+                        }
+                    }
+                    variable "entry" {
+                        > «ns:AddEntry($index, $subindex, $subentry_name, DataType/text(), BitLen/text(), $access, $pdo_mapping, $pdo_index, $pdo_name, $direction)»
+                    }
+                }
+            }
+        }
+    }
+}
\ No newline at end of file