--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<TrbNetEntity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="TrbNetEntity.xsd"
+ name="CTS"
+ address="a000"
+ >
+ <description>Registers for the Central Trigger System (CTS)</description>
+
+ <!-- this is just a very minimal version -->
+
+ <register name="TriggerAssertedCounter" address="0000" purpose="statistics">
+ <description>Number of clock cycles with trigger asserted</description>
+ <field name="TriggerAssertedCounter" start="0" size="32" format="unsigned" />
+ </register>
+
+</TrbNetEntity>
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<TrbNetEntity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="TrbNetEntity.xsd"
+ name="TrbNet"
+ address="7000"
+ >
+ <description>Registers for the TrbNet itself</description>
+
+ <!-- this is just a very minimal version -->
+
+ <register name="IPUHandlerStatus" address="0202" purpose="status">
+ <description>IPU handler status register</description>
+ <field name="IPUHandlerStatusState" start="0" size="4" format="enum">
+ <description>FSM state bits</description>
+ <enumItem value="0">IDLE</enumItem>
+ <enumItem value="1">WaitForLength</enumItem>
+ <enumItem value="2">GotLength</enumItem>
+ <enumItem value="3">SendDHDR</enumItem>
+ <enumItem value="4">ReadData</enumItem>
+ <enumItem value="5">EndReadout</enumItem>
+ </field>
+ </register>
+
+</TrbNetEntity>
<xs:element name="trb">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
- <xs:element name="entity" type="entitytype"/>
- <xs:element ref="external" />
+ <xs:element name="entity" type="trbitemtype" />
+ <xs:element name="external" type="trbitemtype" />
</xs:choice>
- <xs:attribute ref="address" />
+ <xs:attribute ref="address" use="required" />
</xs:complexType>
</xs:element>
- <xs:complexType name="entitytype">
+ <xs:complexType name="trbitemtype">
<!-- the entity may contain similar elements as the TrbNetEntity
element, but without a complex grouping mechanism. This is
why we defined some sparse elements in TrbNetCommon.xsd,
<xs:element name="field" type="fieldtype" />
</xs:choice>
<xs:attribute name="type" type="xs:string" use="required" />
+ <xs:attribute name="address" type="addresstype" />
</xs:complexType>
- <xs:element name="external">
- <xs:complexType>
- <xs:complexContent>
- <xs:extension base="entitytype">
- <xs:attribute name="address" type="addresstype" use="required" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- </xs:element>
-
+
<xs:attribute name="endpoint">
<xs:simpleType>
<xs:restriction base="xs:integer">
are identified by their type and address (if specified) -->
<trb address="0200">
<entity type="TDC">
- <!-- this field is a bitmask, so there's a converter to easily set single bits -->
+ <!-- this field is a bitmask, so there's a converter to easily
+ set single bits -->
<field name="ChannelEnable">
0-15 => 1, <!-- enables channels 0-15 -->
34 => 1, <!-- enables channel 34 -->
my ($db,$files) = &LoadDBAndFiles;
#print Dumper($files);
-
foreach my $item (@$files) {
my $file = $item->[0];
- my $doc = $item->[1];
- print "Working on $file...\n" if $verbose;
-
+ my $doc = $item->[1]; print "Working on $file...\n" if $verbose;
+ my $merged = {};
+ foreach my $trbnode ($doc->getDocumentElement->findnodes('trb')) {
+ my $trbaddress = $trbnode->getAttribute('address');
+ print $trbaddress,"\n";
+ foreach my $entitynode ($trbnode->findnodes('entity')) {
+ my $type = $entitynode->getAttribute('type');
+ # check if we know this type
+ FatalError($entitynode, "Entity type $type not found in database")
+ unless defined $db->{"$type.xml"};
+
+ print $type,"\n";
+ }
+ }
}
-
# testing...
#DumpDatabase($db);
}
+sub FatalError($$) {
+ my $node = shift;
+ my $file = $node->ownerDocument->URI;
+ my $line = $node->line_number;
+ my $msg = shift;
+ print "$file:$line: Fatal Error: $msg\n";
+ exit 1;
+}
sub DumpDatabase($) {
my $db = shift;
$field->getAttribute('size') || 1,
$name, $field->getAttribute('name')
);
-
+
#print $field->getAttribute('errorflag') || 'false',"\n";
}
}