etherlab/entries_list.ysl2
author Edouard Tisserant
Tue, 13 Jul 2021 16:16:58 +0200
branchsvghmi
changeset 3278 2bcfbea6a2a8
parent 2641 c9deff128c37
permissions -rw-r--r--
SVGHMI: Fixed typo on session manager unregister, leading to wrong count of sessions and then exceptions when creating more session than allowed in protocol options. Also added more safety check in protocol in case session would be missing.
/*

Stylesheet used to list EtherCat dictionnary entries.

Copyright (C) 2011-2014: Laurent BESSARD

Distributed under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

See COPYING file for copyrights details.

*/

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()»
                variable "default_value" > «Info/DefaultData/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»
                            with "sub_default_value" > «Info/SubItem/Info/DefaultData/text()»
                        }
                    }
                    otherwise {
                        variable "subindex" > 0
                        variable "sub_entry_flag" > 0
                        variable "entry" {
                            > «ns:AddEntry($index, $subindex, $entry_name, $datatype_name, BitSize/text(), Flags/Access/text(), Flags/PdoMapping/text(), $default_value, $sub_entry_flag)»
                        }
                    }
                }
            }
        }
    }
    
    template "DataType" {
        param "index";
        param "entry_name";
        param "sub_default_value"
        foreach "SubItem" {
            variable "subindex" > «ns:HexDecValue(SubIdx/text())»
            variable "subentry_name" > «$entry_name» - «ns:EntryName(DisplayName, Name/text())»
            variable "sub_entry_flag" > 1
            variable "entry" {
                > «ns:AddEntry($index, $subindex, $subentry_name, Type/text(), BitSize/text(), Flags/Access/text(), Flags/PdoMapping/text(), $sub_default_value, $sub_entry_flag)»
            }
        }
    }
    
    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)»
                    }
                }
            }
        }
    }
}