edouard@2165: /*
edouard@2165: 
edouard@2165: Stylesheet used to list EtherCat dictionnary entries.
edouard@2165: 
edouard@2165: Copyright (C) 2011-2014: Laurent BESSARD
edouard@2165: 
edouard@2165: Distributed under the terms of the GNU Lesser General Public License as
edouard@2165: published by the Free Software Foundation; either version 2 of the License, or
edouard@2165: (at your option) any later version.
edouard@2165: 
edouard@2165: See COPYING file for copyrights details.
edouard@2165: 
edouard@2165: */
edouard@2165: 
Laurent@2162: include yslt.yml2
Laurent@2162: estylesheet xmlns:ns="entries_list_ns" 
Laurent@2162:             extension-element-prefixes="ns" 
Laurent@2162:             exclude-result-prefixes="ns" {
Laurent@2162:     
Laurent@2162:     param "min_index";
Laurent@2162:     param "max_index";
Laurent@2162:     
Laurent@2162:     template "text()";
Laurent@2162:     
Laurent@2162:     template "Device" {
Laurent@2162:         apply "Profile/Dictionary/Objects/Object";
Laurent@2162:         foreach "RxPdo" {
Laurent@2162:             call "pdo_entries" with "direction", "'Receive'";
Laurent@2162:         }
Laurent@2162:         foreach "TxPdo" {
Laurent@2162:             call "pdo_entries" with "direction", "'Transmit'";
Laurent@2162:         }
Laurent@2162:     }
Laurent@2162:     
Laurent@2162:     template "Object" {
Laurent@2162:         variable "index" > «ns:HexDecValue(Index/text())»
Laurent@2162:         variable "entry_name" > «ns:EntryName(Name)»
Laurent@2162:         choose {
Laurent@2162:             when "$index >= $min_index and $index <= $max_index" {
Laurent@2162:                 variable "datatype_name" > «Type/text()»
edouard@2641:                 variable "default_value" > «Info/DefaultData/text()»
Laurent@2162:                 choose {
Laurent@2162:                     when "ancestor::Dictionary/child::DataTypes/DataType[Name/text()=$datatype_name][SubItem]" {
Laurent@2162:                         apply "ancestor::Dictionary/child::DataTypes/DataType[Name/text()=$datatype_name][SubItem]" {
Laurent@2162:                             with "index" > «$index»
Laurent@2162:                             with "entry_name" > «$entry_name»
edouard@2641:                             with "sub_default_value" > «Info/SubItem/Info/DefaultData/text()»
Laurent@2162:                         }
Laurent@2162:                     }
Laurent@2162:                     otherwise {
Laurent@2162:                         variable "subindex" > 0
edouard@2641:                         variable "sub_entry_flag" > 0
Laurent@2162:                         variable "entry" {
edouard@2641:                             > «ns:AddEntry($index, $subindex, $entry_name, $datatype_name, BitSize/text(), Flags/Access/text(), Flags/PdoMapping/text(), $default_value, $sub_entry_flag)»
Laurent@2162:                         }
Laurent@2162:                     }
Laurent@2162:                 }
Laurent@2162:             }
Laurent@2162:         }
Laurent@2162:     }
Laurent@2162:     
Laurent@2162:     template "DataType" {
Laurent@2162:         param "index";
Laurent@2162:         param "entry_name";
edouard@2641:         param "sub_default_value"
Laurent@2162:         foreach "SubItem" {
Laurent@2162:             variable "subindex" > «ns:HexDecValue(SubIdx/text())»
Laurent@2162:             variable "subentry_name" > «$entry_name» - «ns:EntryName(DisplayName, Name/text())»
edouard@2641:             variable "sub_entry_flag" > 1
Laurent@2162:             variable "entry" {
edouard@2641:                 > «ns:AddEntry($index, $subindex, $subentry_name, Type/text(), BitSize/text(), Flags/Access/text(), Flags/PdoMapping/text(), $sub_default_value, $sub_entry_flag)»
Laurent@2162:             }
Laurent@2162:         }
Laurent@2162:     }
Laurent@2162:     
Laurent@2162:     function "pdo_entries" {
Laurent@2162:         param "direction";
Laurent@2162:         variable "pdo_index" > «ns:HexDecValue(Index/text())»
Laurent@2162:         variable "pdo_name" > «ns:EntryName(Name)»
Laurent@2162:         foreach "Entry" {
Laurent@2162:             variable "index" > «ns:HexDecValue(Index/text())»
Laurent@2162:             choose {
Laurent@2162:                 when "$index >= $min_index and $index <= $max_index" {
Laurent@2162:                     variable "subindex" > «ns:HexDecValue(SubIndex/text())»
Laurent@2162:                     variable "subentry_name" > «ns:EntryName(Name)»
Laurent@2162:                     variable "access" {
Laurent@2162:                         choose {
Laurent@2162:                             when "$direction='Transmit'" > ro
Laurent@2162:                             otherwise > wo
Laurent@2162:                         }
Laurent@2162:                     }
Laurent@2162:                     variable "pdo_mapping" {
Laurent@2162:                         choose {
Laurent@2162:                             when "$direction='Transmit'" > T
Laurent@2162:                             otherwise > R
Laurent@2162:                         }
Laurent@2162:                     }
Laurent@2162:                     variable "entry" {
Laurent@2162:                         > «ns:AddEntry($index, $subindex, $subentry_name, DataType/text(), BitLen/text(), $access, $pdo_mapping, $pdo_index, $pdo_name, $direction)»
Laurent@2162:                     }
Laurent@2162:                 }
Laurent@2162:             }
Laurent@2162:         }
Laurent@2162:     }
edouard@2165: }