Added runtime/spawn_subprocess.py. Force use posix spawn instead of fork, with API similar to subprocess. Using fork in runtime is incompatible with Xenomai, because memory is locked and this can lead to out of memory error.
/*
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()»
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)»
}
}
}
}
}
}