<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:altova="http://www.altova.com/xml-schema-extensions" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:element name="Tier-1Project" type="Tier-1ProjectType">
		<xs:annotation>
			<xs:documentation>Root element containing the whole Tier-1 Project</xs:documentation>
		</xs:annotation>
		<xs:unique name="ProcessNameUnique">
			<xs:selector xpath="Processes/*"/>
			<xs:field xpath="@name"/>
		</xs:unique>
		<xs:unique name="ProcessAliasUnique">
			<xs:selector xpath="Processes/*"/>
			<xs:field xpath="@alias"/>
		</xs:unique>
		<xs:unique name="SymbolNameUnique">
			<xs:selector xpath="Symbols/*"/>
			<xs:field xpath="@name"/>
		</xs:unique>
		<xs:unique name="SymbolAddressUnique">
			<xs:selector xpath="Symbols/*"/>
			<xs:field xpath="@address"/>
		</xs:unique>
		<xs:key name="HookableKey">
			<xs:selector xpath="Measurements/*"/>
			<xs:field xpath="@name"/>
		</xs:key>
		<xs:key name="ArrayCopyKey">
			<xs:selector xpath="Measurements/Array/Copies/ArrayCopy"/>
			<xs:field xpath="@name"/>
		</xs:key>
		<xs:keyref name="ProcessWriteVariableRef" refer="HookableKey">
			<xs:selector xpath="ProcessWrites/ProcessWrite"/>
			<xs:field xpath="@variableRef"/>
		</xs:keyref>
		<xs:key name="RasterKey">
			<xs:selector xpath="Rasters/Raster"/>
			<xs:field xpath="@name"/>
		</xs:key>
		<xs:keyref name="ServicePointRasterRef" refer="RasterKey">
			<xs:selector xpath="ServicePoints/ServicePoint"/>
			<xs:field xpath="@rasterRef"/>
		</xs:keyref>
		<xs:keyref name="ProcessRasterRef" refer="RasterKey">
			<xs:selector xpath="Processes/Process/Rasters/Raster"/>
			<xs:field xpath="@rasterRef"/>
		</xs:keyref>
		<xs:keyref name="CopyRasterRef" refer="RasterKey">
			<xs:selector xpath="Measurements/*/Copies/*/Uses/Usage"/>
			<xs:field xpath="@raster"/>
		</xs:keyref>
	</xs:element>
	<xs:complexType name="VersionType">
		<xs:annotation>
			<xs:documentation>Helper type (generic version info).</xs:documentation>
		</xs:annotation>
		<xs:attribute name="major" type="xs:integer" use="required" fixed="1"/>
		<xs:attribute name="minor" type="xs:integer" use="required" fixed="0"/>
	</xs:complexType>
	<xs:simpleType name="SectionPurposeType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="CODE"/>
			<xs:enumeration value="CONST"/>
			<xs:enumeration value="RAM"/>
			<xs:enumeration value="CHARACTERISTICS"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="MessageCopyType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="READ"/>
			<xs:enumeration value="WRITE"/>
			<xs:enumeration value="READ-WRITE"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="Tier-1ProjectType">
		<xs:sequence>
			<xs:element name="General" type="GeneralType">
				<xs:annotation>
					<xs:documentation>Meta information about the project</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Environments">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Environment">
							<xs:complexType>
								<xs:complexContent>
									<xs:extension base="HardwareInfoType">
										<xs:sequence>
											<xs:element name="uC" minOccurs="0">
												<xs:annotation>
													<xs:documentation>Mandatory for OTP scenarios</xs:documentation>
												</xs:annotation>
												<xs:complexType>
													<xs:sequence>
														<xs:element name="Cores">
															<xs:complexType>
																<xs:sequence>
																	<xs:element name="Core" maxOccurs="unbounded">
																		<xs:annotation>
																			<xs:documentation>µC core of the ECU</xs:documentation>
																		</xs:annotation>
																		<xs:complexType>
																			<xs:sequence>
																				<xs:element name="Contexts" type="ProcessRastersType"/>
																			</xs:sequence>
																			<xs:attribute name="name" use="required">
																				<xs:annotation>
																					<xs:documentation>Display identifier of related core</xs:documentation>
																				</xs:annotation>
																			</xs:attribute>
																			<xs:attribute name="startAddress" use="required">
																				<xs:annotation>
																					<xs:documentation>Startup address of first instruction executed on related core</xs:documentation>
																				</xs:annotation>
																			</xs:attribute>
																		</xs:complexType>
																	</xs:element>
																</xs:sequence>
															</xs:complexType>
														</xs:element>
														<xs:element name="InterfaceOptions" type="InterfaceOptionsType" minOccurs="0">
															<xs:annotation>
																<xs:documentation>Option strings that are passed straight through to the OEM tool, untouched</xs:documentation>
															</xs:annotation>
														</xs:element>
													</xs:sequence>
													<xs:attribute name="uCFamily" use="required">
														<xs:annotation>
															<xs:documentation>Identifier of the ECU µC family: e.g., Tricore, MPC5xxx, V85x etc.</xs:documentation>
															<xs:appinfo>
																<altova:exampleValues>
																	<altova:example value="TMSx"/>
																	<altova:example value="RH85x"/>
																	<altova:example value="V85x"/>
																	<altova:example value="MPC5xxx"/>
																	<altova:example value="Tricore"/>
																</altova:exampleValues>
															</xs:appinfo>
														</xs:annotation>
														<xs:simpleType>
															<xs:restriction base="xs:string"/>
														</xs:simpleType>
													</xs:attribute>
													<xs:attribute name="uCIdentifier" type="xs:string">
														<xs:annotation>
															<xs:documentation>Identifier of the ECU µC</xs:documentation>
														</xs:annotation>
													</xs:attribute>
												</xs:complexType>
											</xs:element>
										</xs:sequence>
									</xs:extension>
								</xs:complexContent>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="Measurements" type="MeasurementsType" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Container for all the measurements in the ECU</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Contexts" type="RastersType" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Container for all the contexts in the ECU</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Processes" type="ProcessesType" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Container for all the processes in the ECU.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="ServicePoints" type="ServicePointsType" minOccurs="0"/>
			<xs:element name="FunctionGroups" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="FunctionGroup" type="FunctionGroupType" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="MemorySections" type="MemorySectionsType" minOccurs="0"/>
			<xs:element name="InterfaceOptions" type="InterfaceOptionsType" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Option strings that are passed straight through to OEM tool, untouched.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="A2LOverrides" type="A2LOverridesType" minOccurs="0"/>
			<xs:element name="ReferencedFiles" type="EmbeddedFilesType" minOccurs="0"/>
			<xs:element name="Patches" type="PatchesType" minOccurs="0"/>
			<xs:element name="Symbols" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Symbol" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="name" use="required">
									<xs:annotation>
										<xs:documentation>Name of symbol, i.e., name of a function, variable, segment, etc.</xs:documentation>
									</xs:annotation>
								</xs:attribute>
								<xs:attribute name="address" use="required">
									<xs:annotation>
										<xs:documentation>Address in ECU memory.
TBD: Remove address information from Measurements, Process, MemorySections, Core, Patches, etc. Replace by means of symbolRef Information.</xs:documentation>
									</xs:annotation>
								</xs:attribute>
								<xs:attribute name="size" use="required">
									<xs:annotation>
										<xs:documentation>Size in ECU memory</xs:documentation>
									</xs:annotation>
								</xs:attribute>
								<xs:attribute name="bitMask">
									<xs:annotation>
										<xs:documentation>Bits in ECU memory</xs:documentation>
									</xs:annotation>
								</xs:attribute>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="RasterDefType">
		<xs:attribute name="name" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Name of the context</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="id" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Unique numeric identifier</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="priority" type="xs:unsignedInt" default="0">
			<xs:annotation>
				<xs:documentation>Priority of context. Higher value indicates higher priority.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="period" type="xs:unsignedInt" default="0">
			<xs:annotation>
				<xs:documentation>The period of this context milliseconds</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="comment" type="xs:string">
			<xs:annotation>
				<xs:documentation>An optional comment for describing the context</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="ScalarType">
		<xs:sequence>
			<xs:element name="Copies" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Copy" type="ScalarCopyType" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Variable's A2L identifier as it appears in the ECU's ASAM MCD-2MC file</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="hookable" type="xs:boolean" default="true">
			<xs:annotation>
				<xs:documentation>States if the OEM is allowed to hook this measurement.
Default: true;</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="readable" type="xs:boolean" default="true">
			<xs:annotation>
				<xs:documentation>States if the OEM is allowed to use this measurement as an input to an on-target bypass function.
Default: true;</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Address">
			<xs:annotation>
				<xs:documentation>Address in ECU memory. If no address is specified, the address is applied from a dedicated symbol entry or the A2L file.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="DataType">
			<xs:annotation>
				<xs:documentation>A2L data type</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Min">
			<xs:annotation>
				<xs:documentation>Lowest valid value for argument</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Max">
			<xs:annotation>
				<xs:documentation>Highest valid value for argument</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="BitMask">
			<xs:annotation>
				<xs:documentation>Bits in memory location representing the value</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Visible" type="xs:boolean" default="true">
			<xs:annotation>
				<xs:documentation>True: Variable is visible in Tool
False: Variable is hidden
Default: True</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="CompuMethodRef">
			<xs:annotation>
				<xs:documentation>Reference to computation method (name of computation method)</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="ArrayType">
		<xs:sequence>
			<xs:element name="Copies" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Copy" type="ArrayCopyType" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Array's A2L identifier as it appears in the ECU's ASAM MCD-2MC file</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="hookable" type="xs:boolean" default="true">
			<xs:annotation>
				<xs:documentation>States if the OEM is allowed to hook this measurement.
Default: true;</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="readable" type="xs:boolean" default="true">
			<xs:annotation>
				<xs:documentation>States if the OEM is allowed to use this measurement as an input to an on-target bypass function.
Default: true;</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Address">
			<xs:annotation>
				<xs:documentation>Address in ECU memory. Possibly overrides A2L address. If no address is specified, the address is applied from a dedicated symbol entry or the A2L file.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="DataType">
			<xs:annotation>
				<xs:documentation>A2L data type</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Min">
			<xs:annotation>
				<xs:documentation>Lowest valid value for argument</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Max">
			<xs:annotation>
				<xs:documentation>Highest valid value for argument</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Size">
			<xs:annotation>
				<xs:documentation>Number of DataType elements</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Visible" type="xs:boolean" default="true">
			<xs:annotation>
				<xs:documentation>True: Variable is visible in Tool
False: Variable is hidden
Default: True</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="CompuMethodRef">
			<xs:annotation>
				<xs:documentation>Reference to computation method (name of computation method)</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="ProcessType">
		<xs:sequence>
			<xs:element name="Contexts" type="ProcessRastersType"/>
			<xs:element name="Arguments" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Function argument specification</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Argument" maxOccurs="unbounded">
							<xs:annotation>
								<xs:documentation>Specifies the arguments to be provided when calling the process</xs:documentation>
							</xs:annotation>
							<xs:complexType>
								<xs:attribute name="Name" use="required">
									<xs:annotation>
										<xs:documentation>Name of argument</xs:documentation>
									</xs:annotation>
								</xs:attribute>
								<xs:attribute name="Type" type="xs:string" use="required">
									<xs:annotation>
										<xs:documentation>C data type of argument</xs:documentation>
										<xs:appinfo>
											<altova:exampleValues>
												<altova:example value="float"/>
												<altova:example value="double"/>
												<altova:example value="Int32"/>
												<altova:example value="UInt32"/>
												<altova:example value="Int16"/>
												<altova:example value="UInt16"/>
												<altova:example value="Int8"/>
												<altova:example value="UInt8"/>
											</altova:exampleValues>
										</xs:appinfo>
									</xs:annotation>
								</xs:attribute>
								<xs:attribute name="Min">
									<xs:annotation>
										<xs:documentation>Lowest valid value for argument</xs:documentation>
									</xs:annotation>
								</xs:attribute>
								<xs:attribute name="Max">
									<xs:annotation>
										<xs:documentation>Highest valid value for argument</xs:documentation>
									</xs:annotation>
								</xs:attribute>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="Calls" type="CallType" minOccurs="0"/>
			<xs:element name="Internals" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Specifies the implied references to variables and subprocesses</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:choice maxOccurs="unbounded">
						<xs:element name="ReadAccess">
							<xs:annotation>
								<xs:documentation>Variable read by the process</xs:documentation>
							</xs:annotation>
							<xs:complexType>
								<xs:attribute name="variableRef" type="xs:string" use="required">
									<xs:annotation>
										<xs:documentation>Identifier of the variable/array/array element (or copy) to which the process writes</xs:documentation>
									</xs:annotation>
								</xs:attribute>
								<xs:attribute name="address">
									<xs:annotation>
										<xs:documentation>Address of related read access opcode</xs:documentation>
									</xs:annotation>
								</xs:attribute>
							</xs:complexType>
						</xs:element>
						<xs:element name="WriteAccess">
							<xs:annotation>
								<xs:documentation>Variable written by the process</xs:documentation>
							</xs:annotation>
							<xs:complexType>
								<xs:attribute name="variableRef" type="xs:string" use="required">
									<xs:annotation>
										<xs:documentation>Identifier of the variable/array/array element (or copy) to which the process writes</xs:documentation>
									</xs:annotation>
								</xs:attribute>
								<xs:attribute name="address">
									<xs:annotation>
										<xs:documentation>Address of related write access opcode</xs:documentation>
									</xs:annotation>
								</xs:attribute>
							</xs:complexType>
						</xs:element>
						<xs:element name="FunctionCall">
							<xs:annotation>
								<xs:documentation>Processes called by the process</xs:documentation>
							</xs:annotation>
							<xs:complexType>
								<xs:attribute name="processRef" use="required">
									<xs:annotation>
										<xs:documentation>Identifier of the process called by the current process</xs:documentation>
									</xs:annotation>
								</xs:attribute>
								<xs:attribute name="address">
									<xs:annotation>
										<xs:documentation>Address of related function call opcode</xs:documentation>
									</xs:annotation>
								</xs:attribute>
							</xs:complexType>
						</xs:element>
					</xs:choice>
				</xs:complexType>
			</xs:element>
			<xs:element name="InterfaceOptions" type="InterfaceOptionsType" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Option strings that are passed straight through to the OEM tool, untouched</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Name of the process</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="address">
			<xs:annotation>
				<xs:documentation>Process's address in ECU memory. If not specified, the address is taken from a dedicated symbol defined in the symbol list.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="size">
			<xs:annotation>
				<xs:documentation>Process's size in bytes. If not specified, the size is taken from a dedicated symbol defined in the symbol list.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="period" type="xs:unsignedInt" default="0">
			<xs:annotation>
				<xs:documentation>Override of context period information</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="bypassable" type="xs:boolean" default="false">
			<xs:annotation>
				<xs:documentation>States if the OEM is allowed to bypass this process</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="visible" type="xs:boolean" default="false">
			<xs:annotation>
				<xs:documentation>States if this process should be visible to the OEM in the GUI</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="alias" type="xs:string">
			<xs:annotation>
				<xs:documentation>An alias to use for this process. If there is an alias, OEMs will never see the real name of the process. They will always see this alias.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="isCopyProcess" type="xs:boolean" default="false">
			<xs:annotation>
				<xs:documentation>States if this process is a special process for synchronizing message copies</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="isBypassContainer" type="xs:boolean" default="false">
			<xs:annotation>
				<xs:documentation>Process can be used for execute OTB code</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="comment" type="xs:string">
			<xs:annotation>
				<xs:documentation>Optional comment about the process</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="HookSectionType">
		<xs:attribute name="name" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>The name of the memory section as used by the linker.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="address" use="required">
			<xs:annotation>
				<xs:documentation>Address in ECU memory of the section.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="size" use="required">
			<xs:annotation>
				<xs:documentation>Size in bytes of the section.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="purpose" type="SectionPurposeType" use="required">
			<xs:annotation>
				<xs:documentation>The section's purpose. One of: CODE, CONST, RAM, CHARACTERISTICS.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="ECUSectionType">
		<xs:sequence>
			<xs:element name="Purpose">
				<xs:annotation>
					<xs:documentation>Defines the purpose of a segment</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:choice maxOccurs="unbounded">
						<xs:element name="code">
							<xs:annotation>
								<xs:documentation>Segment contains or is intended to be used for µc instructions</xs:documentation>
							</xs:annotation>
							<xs:complexType>
								<xs:sequence>
									<xs:element name="InstructionSets" minOccurs="0">
										<xs:complexType>
											<xs:sequence>
												<xs:element name="InstructionSet" maxOccurs="unbounded">
													<xs:annotation>
														<xs:documentation>Special instruction sets used/ to be used by/for the related µC's code segment</xs:documentation>
													</xs:annotation>
													<xs:complexType>
														<xs:attribute name="name" use="required">
															<xs:annotation>
																<xs:documentation>Name of the instruction set or instruction subset</xs:documentation>
																<xs:appinfo>
																	<altova:exampleValues>
																		<altova:example value="SPE"/>
																		<altova:example value="LSP"/>
																		<altova:example value="Book-E"/>
																		<altova:example value="VLE"/>
																	</altova:exampleValues>
																</xs:appinfo>
															</xs:annotation>
															<xs:simpleType>
																<xs:restriction base="xs:string">
																	<xs:enumeration value="SPE"/>
																	<xs:enumeration value="LSP"/>
																	<xs:enumeration value="Book-E"/>
																	<xs:enumeration value="VLE"/>
																</xs:restriction>
															</xs:simpleType>
														</xs:attribute>
													</xs:complexType>
												</xs:element>
											</xs:sequence>
										</xs:complexType>
									</xs:element>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element name="constant">
							<xs:annotation>
								<xs:documentation>Segment contains or is intended to be used for internal read-only data</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="characteristics">
							<xs:annotation>
								<xs:documentation>Segment contains or is intended to be used for calibrateable parameters</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="variables">
							<xs:annotation>
								<xs:documentation>Segment contains or is intended to be used for dynamically changed memory content and measurements</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:choice>
				</xs:complexType>
			</xs:element>
			<xs:element name="Location" minOccurs="0">
				<xs:complexType>
					<xs:choice>
						<xs:element name="ROM">
							<xs:annotation>
								<xs:documentation>Segment is located in  a read-only memory area</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="RAM">
							<xs:annotation>
								<xs:documentation>Segment is located in a random access memory area</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:choice>
				</xs:complexType>
			</xs:element>
			<xs:element name="free" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Segment is free to be used by RPT tool in the context of the purposes above</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:attribute name="VariableAssignment">
						<xs:annotation>
							<xs:documentation>Regular expression used to match variables generated by the RPT tool. If an RPT tool generated variable matches this regex then it will be located in this memory section.</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Name of the memory section</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="address">
			<xs:annotation>
				<xs:documentation>Address in ECU memory of the section. If not specified, the address is taken from a dedicated symbol defined in the symbol list.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="size">
			<xs:annotation>
				<xs:documentation>Size in bytes of the section. If not specified, the size is taken from a dedicated symbol defined in the symbol list.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="Flags">
			<xs:annotation>
				<xs:documentation>Optional comma separated section properties: e.g.,
reserved, relocateable, overwrite, got, u8, u16, u32, bigendian, littleendian, flash_ff, flash_00</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="\s*(reserved|relocateable|overwrite|got|u8|u16|u32|bigendian|littleendian|flash_ff|flash_00)(\s*,\s*(reserved|relocateable|overwrite|got|u8|u16|u32|bigendian|littleendian|flash_ff|flash_00)\s*)*"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="coreRef" type="xs:string">
			<xs:annotation>
				<xs:documentation>Name of the core which can access this memory section. If not specified, the memory is accessible by all cores.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="ScalarCopyType">
		<xs:sequence>
			<xs:element name="Uses">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Usage" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="mode" type="MessageCopyType" use="required">
									<xs:annotation>
										<xs:documentation>Specifies whether the copy is read, write, or read/write</xs:documentation>
									</xs:annotation>
								</xs:attribute>
								<xs:attribute name="context" type="xs:string" use="required">
									<xs:annotation>
										<xs:documentation>The context in which the message copy is used</xs:documentation>
									</xs:annotation>
								</xs:attribute>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="name" use="required">
			<xs:annotation>
				<xs:documentation>A unique identifier</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="address">
			<xs:annotation>
				<xs:documentation>Address in ECU memory of the copy. If no address is specified, the address is applied from a dedicated symbol entry or the A2L file.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="bitmask">
			<xs:annotation>
				<xs:documentation>Optional: the copy's bitmask</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="ArrayCopyType">
		<xs:sequence>
			<xs:element name="Uses">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Usage" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="mode" type="MessageCopyType" use="required">
									<xs:annotation>
										<xs:documentation>Specifies whether the copy is read, write, or read/write.</xs:documentation>
									</xs:annotation>
								</xs:attribute>
								<xs:attribute name="context" type="xs:string" use="required">
									<xs:annotation>
										<xs:documentation>The context in which the message copy is used</xs:documentation>
									</xs:annotation>
								</xs:attribute>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>The name of the copy</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="address">
			<xs:annotation>
				<xs:documentation>Address in ECU memory of the copy. If no address is specified, the address is applied from a dedicated symbol entry or the A2L file.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="ProcessWriteType">
		<xs:sequence>
			<xs:element name="Process" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>For each process that writes to the variable/array/array element:</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:attribute name="processRef" type="xs:string">
						<xs:annotation>
							<xs:documentation>identifier of the process' HookableVariableProcess or BypassableFunctionProcess.</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="variableRef" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>identifier of the variable/array/array element (or copy) to which the process writes.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="index" type="xs:integer"/>
	</xs:complexType>
	<xs:complexType name="MeasurementsType">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element name="Scalar" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>An ECU scalar variable/message that can be hooked. For messages this is the 'master' copy that appears in the ASAM MCD-2MC file.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:complexContent>
						<xs:extension base="ScalarType"/>
					</xs:complexContent>
				</xs:complexType>
			</xs:element>
			<xs:element name="Array" type="ArrayType" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>An ECU array variable/message that can be hooked. For messages this is the 'master' copy that appears in the ASAM MCD-2MC file.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:choice>
	</xs:complexType>
	<xs:complexType name="ProcessesType">
		<xs:sequence>
			<xs:element name="Process" type="ProcessType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="SoftwareInfoType">
		<xs:sequence>
			<xs:element name="HexSegmentHashes" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Added automatically by the Tier-1 tool.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:sequence>
						<xs:element name="HexSegmentHash" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:attribute name="segmentName" type="xs:string">
									<xs:annotation>
										<xs:documentation>The name of the section as given in the A2L file.</xs:documentation>
									</xs:annotation>
								</xs:attribute>
								<xs:attribute name="hash" type="xs:string">
									<xs:annotation>
										<xs:documentation>The SHA256 hash of the segment's data.</xs:documentation>
									</xs:annotation>
								</xs:attribute>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="a2lHash" type="xs:string">
			<xs:annotation>
				<xs:documentation>SHA256 hash of the A2L file. Added automatically by the Tier-1 tool.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="HardwareInfoType">
		<xs:attribute name="name" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>e.g., ECU name</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="vendor" type="xs:string">
			<xs:annotation>
				<xs:documentation>e.g., Tier 1 name</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="compatibilityVersion" type="xs:integer">
			<xs:annotation>
				<xs:documentation>Increment this every time the ECU software/hardware is modified and rendered incompatible with existing versions.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="RastersType">
		<xs:sequence>
			<xs:element name="Context" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:complexContent>
						<xs:extension base="RasterDefType"/>
					</xs:complexContent>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="MemorySectionsType">
		<xs:sequence>
			<xs:element name="Section" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>An ECU memory section. All memory sections in the ECU should be listed. Existing A2L sections will be overwritten.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:complexContent>
						<xs:extension base="ECUSectionType"/>
					</xs:complexContent>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="InterfaceOptionsType">
		<xs:sequence>
			<xs:element name="Interface" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Option" minOccurs="0" maxOccurs="unbounded">
							<xs:complexType>
								<xs:simpleContent>
									<xs:extension base="xs:string">
										<xs:attribute name="name" use="required"/>
										<xs:attribute name="value"/>
									</xs:extension>
								</xs:simpleContent>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
					<xs:attribute name="name" use="required">
						<xs:annotation>
							<xs:documentation>Name of interface, tool or tool vendor</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ProcessWritesType">
		<xs:sequence>
			<xs:element name="ProcessWrite" type="ProcessWriteType" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Specifies which ECU Processes write to a particular variable/array/array element.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="ProcessWriteCopy" type="ProcessWriteType" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Specifies which ECU Processes write to a particular copy of a variable/array/array element.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="WriteLocationsType">
		<xs:sequence>
			<xs:element name="ScalarWriteLocation" type="ScalarWriteLocationType" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Manually specifies the address of an instruction that writes to a scalar variable.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="ArrayWriteLocation" type="ArrayWriteLocationType" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Manually specifies the address of an instruction that writes to an array variable.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="GeneralType">
		<xs:all>
			<xs:element name="SchemaVersion" type="VersionType">
				<xs:annotation>
					<xs:documentation>The version of the schema used by the configuration file</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Description" type="xs:string" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Any text can be placed here</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="UserInformation" type="xs:string" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Text to be shown to users in the OEM tool</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="Password" type="xs:string" minOccurs="0">
				<xs:annotation>
					<xs:documentation>The password that will be needed to use the OEM tools</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:all>
	</xs:complexType>
	<xs:complexType name="ServicePointType">
		<xs:attribute name="name" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Name of the service point</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="id" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Unique numeric identifier</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="position" type="xs:string">
			<xs:annotation>
				<xs:documentation>Begin/End of context ==> evtl. replace via  Identification via Variable -> Process -> Context ref</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="contextRef" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Name of the context containing this service point</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="serviceProcessRef">
			<xs:annotation>
				<xs:documentation>Name of service call function</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="ServicePointsType">
		<xs:sequence>
			<xs:element name="ServicePoint" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:complexContent>
						<xs:extension base="ServicePointType"/>
					</xs:complexContent>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ProcessRastersType">
		<xs:sequence>
			<xs:element name="Context" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>For each context that contains this process</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:simpleContent>
						<xs:extension base="xs:string">
							<xs:attribute name="contextRef">
								<xs:annotation>
									<xs:documentation>Name of a context that contains this process</xs:documentation>
								</xs:annotation>
							</xs:attribute>
						</xs:extension>
					</xs:simpleContent>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="EmbeddedFilesType">
		<xs:sequence>
			<xs:element name="File" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:complexContent>
						<xs:extension base="EmbeddedFileType">
							<xs:sequence>
								<xs:element name="Contents" minOccurs="0">
									<xs:annotation>
										<xs:documentation>Definition of which content is to be imported from the related files.
Default: All content is imported;</xs:documentation>
									</xs:annotation>
									<xs:complexType>
										<xs:sequence>
											<xs:element name="Content" minOccurs="0" maxOccurs="unbounded">
												<xs:complexType>
													<xs:choice>
														<xs:element name="Variable">
															<xs:annotation>
																<xs:documentation>Import variables information from related file</xs:documentation>
															</xs:annotation>
														</xs:element>
														<xs:element name="Process">
															<xs:annotation>
																<xs:documentation>Import function/process information from related file</xs:documentation>
															</xs:annotation>
														</xs:element>
														<xs:element name="Segment">
															<xs:annotation>
																<xs:documentation>Import segment information from related file</xs:documentation>
															</xs:annotation>
														</xs:element>
														<xs:element name="Memory">
															<xs:annotation>
																<xs:documentation>Import memory content from related file</xs:documentation>
															</xs:annotation>
														</xs:element>
													</xs:choice>
												</xs:complexType>
											</xs:element>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
							</xs:sequence>
						</xs:extension>
					</xs:complexContent>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="EmbeddedFileType">
		<xs:attribute name="name" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>Path/URL to embedded file: reference distributed binary, A2L, header files, etc.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:simpleType name="MemoryOverrideType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="VOLATILE-ROM"/>
			<xs:enumeration value="ARRAY"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="A2LOverridesType">
		<xs:sequence>
			<xs:element name="PseudoArrayName" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Specifies that collections of scalar measurements are really elements of an array. All contiguous measurements that match this pattern are considered to be elements of an array.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:complexContent>
						<xs:extension base="PseudoArrayNameType"/>
					</xs:complexContent>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ScalarWriteLocationType">
		<xs:attribute name="name" type="xs:string" use="required"/>
		<xs:attribute name="address" use="required">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="ArrayWriteLocationType">
		<xs:attribute name="name" type="xs:string" use="required"/>
		<xs:attribute name="address" use="required">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="index" type="xs:int">
			<xs:annotation>
				<xs:documentation>If the write is to a specific element in the array, this attribute should contain the index of that element in the array. If the write is to more than one element or to an element that is only decided during runtime, this attribute should be left out.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="MemoryTypeOverrideType">
		<xs:attribute name="address" use="required">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="size" use="required">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="type" type="MemoryOverrideType" use="required"/>
	</xs:complexType>
	<xs:complexType name="PseudoArrayType">
		<xs:attribute name="address" use="required">
			<xs:annotation>
				<xs:documentation>Address of the pseudo array.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="size" use="required">
			<xs:annotation>
				<xs:documentation>Size of the pseudo array.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="PseudoArraysType">
		<xs:sequence>
			<xs:element name="PseudoArray" type="PseudoArrayType" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Identifies a block of memory that contains an array. Any scalar measurements in this block of memory are really elements of the array.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="PseudoArrayNameType">
		<xs:attribute name="pattern" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>A regular expression used to identify scalar measurements that are really part of an array. Patterns are matched using .NET regular expressions, which are compatible with Perl 5 syntax.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="displayName">
			<xs:annotation>
				<xs:documentation>Name to be displayed in tool.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="PatchType">
		<xs:attribute name="address" use="required">
			<xs:annotation>
				<xs:documentation>The location of the patch in ECU memory</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="maxSize" use="required">
			<xs:annotation>
				<xs:documentation>The maximum length of the patch in bytes</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="content" type="xs:string" use="required">
			<xs:annotation>
				<xs:documentation>The patch content. The following macros are available:
$x## inserts a byte with hex value ##.
$DATE inserts the date.
$DD inserts the day.
$MO inserts the month.
$YY inserts the year.
$TIME inserts the time.
$HH inserts the hour.
$MI inserts the minute.
$SS inserts the second.
$USER inserts the current user's name.
$PRODUCT inserts the name of the used Tool.
$VERSION inserts the Tool version.
$DESCRIPTION inserts the description field from the Tier 1 project.</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="description" type="xs:string" use="optional">
			<xs:annotation>
				<xs:documentation>Optional description of the patch</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Flags">
			<xs:annotation>
				<xs:documentation>Optional comma separated patch properties: e.g.,: export, overwrite, endian_little, endian_big</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="\s*(export|endian_big|endian_little|overwrite)(\s*,\s*(export|endian_little|endian_big|overwrite)\s*)*"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="PatchesType">
		<xs:sequence>
			<xs:element name="Patch" type="PatchType" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>The Patch element is used to manually specify a patch to be applied to the ECU's memory</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="SparsePseudoArrayType">
		<xs:sequence>
			<xs:element name="Element" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="address" use="required">
						<xs:annotation>
							<xs:documentation>The address of an element in the array.</xs:documentation>
						</xs:annotation>
						<xs:simpleType>
							<xs:restriction base="xs:string">
								<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="elementSize" use="required">
			<xs:annotation>
				<xs:documentation>The size of an element in the array.</xs:documentation>
			</xs:annotation>
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="SparsePseudoArraysType">
		<xs:sequence>
			<xs:element name="SparsePseudoArray" type="SparsePseudoArrayType" minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Contains the addresses of the elements of an array. Any scalar measurement at one of these addresses is really an element of the array.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ArgumentType">
		<xs:sequence>
			<xs:element name="Arg" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>The value of one of the process's arguments. The arguments should be given in the order they are passed to the process in the C code.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:attribute name="value" use="required">
						<xs:simpleType>
							<xs:restriction base="xs:string">
								<xs:pattern value="[0-9]{1,10}|0[xX][0-9a-fA-F]{1,8}"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:attribute>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="FunctionGroupType">
		<xs:sequence>
			<xs:element name="Processes">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Process" maxOccurs="unbounded">
							<xs:complexType>
								<xs:complexContent>
									<xs:extension base="FunctionGroupProcessType">
										<xs:sequence/>
									</xs:extension>
								</xs:complexContent>
							</xs:complexType>
						</xs:element>
						<xs:element name="InterfaceOptions" type="InterfaceOptionsType" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Option strings that are passed straight through to OEM tool, untouched.</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string" use="required"/>
	</xs:complexType>
	<xs:complexType name="FunctionGroupProcessType">
		<xs:attribute name="processRef" type="xs:string" use="required"/>
	</xs:complexType>
	<xs:complexType name="CallType">
		<xs:sequence>
			<xs:element name="Call" type="ArgumentType" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>This element is used to tell the tool the values of this process's arguments when it is called. If the process can be called at different times with different argument values, mutliple elements may be used. This element is optional. It is used to provide extra information to the tool to aid variable write detection.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
</xs:schema>
