All Downloads are FREE. Search and download functionalities are using the official Maven repository.

xml.ServiceDefPLATFORM.xml Maven / Gradle / Ivy

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<mal:specification xmlns:mal="http://www.ccsds.org/schema/ServiceSchema" xmlns:com="http://www.ccsds.org/schema/COMSchema" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" comment="">
	<mal:area comment="The Platform set of services contains services for monitoring and control of devices on-board of a spacecraft platform. The following services are contained in the Platform services set:&#10;The Camera service allows a consumer to take and stream pictures.&#10;The GNSS service allows a consumer to retrieve satellite navigation data.&#10;The Autonomous ADCS service allows a consumer to determine the attitude, and additionally to control the attitude by selecting the desired definition.&#10;The Software-defined Radio service allows a consumer to configure and receive a stream of data from a Software-defined Radio.&#10;The Optical Data Receiver service allows a consumer to stream data from the Optical Data Receiver.&#10;The Magnetometer service allows a consumer to acquire the magnetic field.&#10;The Power Control service allows a consumer to control the power of the different subsystems.&#10;&#10;This section details the Platform services. The area and structures are defined in terms of the MO Message Abstraction Layer (MAL), so it is possible to deploy them over any supported protocol and message transport." name="Platform" number="105" version="1">
		<mal:service comment="The Camera service allows a consumer to acquire pictures and control a camera in the spacecraft platform. The service can perform format conversions in case the consumer selects a specific format other than raw. The service can also stream pictures periodically." name="Camera" number="1" xsi:type="com:ExtendedServiceType">
			<mal:documentation name="High Level Requirements" order="1">The Camera service shall provide:
&lt;ol&gt;
&lt;li&gt;the capability for streaming pictures;&lt;/li&gt;
&lt;li&gt;the capability for previewing pictures;&lt;/li&gt;
&lt;li&gt;the capability for taking pictures;&lt;/li&gt;
&lt;li&gt;the capability for requesting the service and camera properties.&lt;/li&gt;
&lt;/ol&gt;
			</mal:documentation>
			<mal:documentation name="Functional Requirements" order="2"/>
			<mal:capabilitySet comment="" number="1">
				<mal:pubsubIP comment="The streamPictures operation allows a consumer to subscribe for picture updates." name="streamPictures" number="1" supportInReplay="false">
					<mal:messages>
						<mal:publishNotify comment="">
							<mal:field canBeNull="true" comment="The picture in streaming mode.&#10;The MAL EntityKey.firstSubKey shall be the value provided by the consumer during the setStreaming operation.&#10;The MAL EntityKey.secondSubKey shall hold a unique object instance identifier.&#10;The MAL EntityKey.thirdSubKey shall hold the width value of the resolution object provided by the consumer during the setStreaming operation.&#10;The MAL EntityKey.fourthSubKey shall hold the height value of the resolution object provided by the consumer during the setStreaming operation.&#10;The timestamp of the update shall be the time of when the picture was taken." name="picture">
								<mal:type area="Platform" list="false" name="Picture" service="Camera"/>
							</mal:field>
						</mal:publishNotify>
					</mal:messages>
				</mal:pubsubIP>
				<mal:submitIP comment="The setStreaming operation allows a consumer to set the rate, dimension and format of the Pictures being streamed." name="setStreaming" number="2" supportInReplay="false">
					<mal:messages>
						<mal:submit comment="">
							<mal:field canBeNull="true" comment="The streamingRate field shall hold the streaming rate of the pictures." name="streamingRate">
								<mal:type area="MAL" list="false" name="Duration"/>
							</mal:field>
							<mal:field canBeNull="true" comment="The resolution field shall hold the desired streaming pictures resolution." name="resolution">
								<mal:type area="Platform" list="false" name="PixelResolution" service="Camera"/>
							</mal:field>
							<mal:field canBeNull="true" comment="The format field shall hold the desired streaming picture format." name="format">
								<mal:type area="Platform" list="false" name="PictureFormat" service="Camera"/>
							</mal:field>
							<mal:field canBeNull="true" comment="The firstEntityKey field holds the first entity key that will be present during the broadcast of the streamPictures operation.&#10;The firstEntityKey field must not empty, nor be NULL nor the wildcard '*'. An INVALID error shall be returned in this case." name="firstEntityKey">
								<mal:type area="MAL" list="false" name="Identifier"/>
							</mal:field>
							<mal:field canBeNull="true" comment="The exposureTime field shall hold the exposure time of each frame." name="exposureTime">
								<mal:type area="MAL" list="false" name="Duration"/>
							</mal:field>
						</mal:submit>
					</mal:messages>
					<mal:errors>
						<mal:errorRef comment="The Camera is currently being used. Use the unsetStreaming operation in order to manually unset the streaming and try again.">
							<mal:type area="Platform" list="false" name="DEVICE_IN_USE"/>
						</mal:errorRef>
						<mal:errorRef comment="The Camera unit is not available.">
							<mal:type area="Platform" list="false" name="DEVICE_NOT_AVAILABLE"/>
						</mal:errorRef>
						<mal:errorRef comment="The requested streaming rate is not supported.">
							<mal:type area="COM" list="false" name="INVALID"/>
							<mal:extraInformation comment="The extra information fied shall hold the minimum duration that can be selected.">
								<mal:type area="MAL" list="false" name="Duration"/>
							</mal:extraInformation>
						</mal:errorRef>
						<mal:errorRef comment="The requested resolution is not supported.">
							<mal:type area="COM" list="false" name="INVALID"/>
							<mal:extraInformation comment="The extra information fied shall hold the list of available resolutions.">
								<mal:type area="Platform" list="true" name="PixelResolution" service="Camera"/>
							</mal:extraInformation>
						</mal:errorRef>
						<mal:errorRef comment="The requested format is not supported.">
							<mal:type area="COM" list="false" name="INVALID"/>
							<mal:extraInformation comment="The extra information fied shall hold the list of available formats.">
								<mal:type area="Platform" list="true" name="PictureFormat" service="Camera"/>
							</mal:extraInformation>
						</mal:errorRef>
						<mal:errorRef comment="The firstEntityKey field cannot be a null nor a wildcard.">
							<mal:type area="COM" list="false" name="INVALID"/>
						</mal:errorRef>
					</mal:errors>
				</mal:submitIP>
				<mal:submitIP comment="" name="unsetStreaming" number="3" supportInReplay="false">
					<mal:messages>
						<mal:submit comment=""/>
					</mal:messages>
				</mal:submitIP>
			</mal:capabilitySet>
			<mal:capabilitySet comment="" number="2">
				<mal:requestIP comment="The previewPicture operation allows a consumer to quickly get a raw picture from the camera with a lower quality. This operation intendes to  provide a quick snap of what the camera is observing." name="previewPicture" number="4" supportInReplay="false">
					<mal:messages>
						<mal:request comment=""/>
						<mal:response comment="">
							<mal:field canBeNull="true" comment="The picture field shall hold the picture preview." name="picture">
								<mal:type area="Platform" list="false" name="Picture" service="Camera"/>
							</mal:field>
						</mal:response>
					</mal:messages>
					<mal:errors>
						<mal:errorRef comment="The Camera is currently being used. Use the unsetStreaming operation in order to manually unset the streaming and try again.">
							<mal:type area="Platform" list="false" name="DEVICE_IN_USE"/>
						</mal:errorRef>
						<mal:errorRef comment="The Camera unit is not available.">
							<mal:type area="Platform" list="false" name="DEVICE_NOT_AVAILABLE"/>
						</mal:errorRef>
					</mal:errors>
				</mal:requestIP>
			</mal:capabilitySet>
			<mal:capabilitySet comment="" number="3">
				<mal:invokeIP comment="The takePicture operation allows a consumer to take a picture from the camera. The appropriate dimension and format of the picture can be selected." name="takePicture" number="5" supportInReplay="false">
					<mal:messages>
						<mal:invoke comment="">
							<mal:field canBeNull="true" comment="The resolution field shall hold the desired picture resolution." name="resolution">
								<mal:type area="Platform" list="false" name="PixelResolution" service="Camera"/>
							</mal:field>
							<mal:field canBeNull="true" comment="The format field shall hold the desired streaming picture format." name="format">
								<mal:type area="Platform" list="false" name="PictureFormat" service="Camera"/>
							</mal:field>
							<mal:field canBeNull="true" comment="The exposureTime field shall hold the exposure time of the camera." name="exposureTime">
								<mal:type area="MAL" list="false" name="Duration"/>
							</mal:field>
						</mal:invoke>
						<mal:acknowledgement comment=""/>
						<mal:response comment="">
							<mal:field canBeNull="true" comment="The picture field shall hold the picture." name="picture">
								<mal:type area="Platform" list="false" name="Picture" service="Camera"/>
							</mal:field>
						</mal:response>
					</mal:messages>
					<mal:errors>
						<mal:errorRef comment="The Camera is currently being used. Use the unsetStreaming operation in order to manually unset the streaming and try again.">
							<mal:type area="Platform" list="false" name="DEVICE_IN_USE"/>
						</mal:errorRef>
						<mal:errorRef comment="The Camera unit is not available.">
							<mal:type area="Platform" list="false" name="DEVICE_NOT_AVAILABLE"/>
						</mal:errorRef>
						<mal:errorRef comment="The requested resolution is not supported.">
							<mal:type area="COM" list="false" name="INVALID"/>
							<mal:extraInformation comment="The extra information fied shall hold the list of available resolutions.">
								<mal:type area="Platform" list="true" name="PixelResolution" service="Camera"/>
							</mal:extraInformation>
						</mal:errorRef>
						<mal:errorRef comment="The requested format is not supported.">
							<mal:type area="COM" list="false" name="INVALID"/>
							<mal:extraInformation comment="The extra information fied shall hold the list of available formats.">
								<mal:type area="Platform" list="true" name="PictureFormat" service="Camera"/>
							</mal:extraInformation>
						</mal:errorRef>
					</mal:errors>
				</mal:invokeIP>
			</mal:capabilitySet>
			<mal:capabilitySet comment="" number="4">
				<mal:requestIP comment="The getProperties operation allows a consumer to request the properties of the service and camera. The service shall provide information about the available resolutions, formats and some extra information." name="getProperties" number="6" supportInReplay="true">
					<mal:messages>
						<mal:request comment=""/>
						<mal:response comment="">
							<mal:field canBeNull="true" comment="The availableResolutions field shall hold the list of the available resolutions by the camera." name="availableResolutions">
								<mal:type area="Platform" list="true" name="PixelResolution" service="Camera"/>
							</mal:field>
							<mal:field canBeNull="true" comment="The availableFormats field shall hold a list of available formats by the service." name="availableFormats">
								<mal:type area="Platform" list="true" name="PictureFormat" service="Camera"/>
							</mal:field>
							<mal:field canBeNull="true" comment="The info field shall hold additional properties of the camera. The actual content is undefined." name="extraInfo">
								<mal:type area="MAL" list="false" name="String"/>
							</mal:field>
						</mal:response>
					</mal:messages>
				</mal:requestIP>
			</mal:capabilitySet>
			<mal:dataTypes>
				<mal:composite comment="The Picture structure holds the details of the picture." name="Picture" shortFormPart="1">
					<mal:extends>
						<mal:type area="MAL" list="false" name="Composite"/>
					</mal:extends>
					<mal:field canBeNull="false" comment="The content of the picture." name="content">
						<mal:type area="MAL" list="false" name="Blob"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The time of creation." name="creationDate">
						<mal:type area="MAL" list="false" name="Time"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The dimension of the picture." name="dimension">
						<mal:type area="Platform" list="false" name="PixelResolution" service="Camera"/>
					</mal:field>
					<mal:field canBeNull="false" comment="The format of the picture." name="format">
						<mal:type area="Platform" list="false" name="PictureFormat" service="Camera"/>
					</mal:field>
				</mal:composite>
				<mal:composite comment="The PixelResolution structure holds the pixel resolution of a picture." name="PixelResolution" shortFormPart="2">
					<mal:extends>
						<mal:type area="MAL" list="false" name="Composite"/>
					</mal:extends>
					<mal:field canBeNull="false" comment="The width of the picture." name="width">
						<mal:type area="MAL" list="false" name="UInteger"/>
					</mal:field>
					<mal:field canBeNull="false" comment="The height of the picture." name="height">
						<mal:type area="MAL" list="false" name="UInteger"/>
					</mal:field>
				</mal:composite>
				<mal:enumeration comment="PictureFormat is an enumeration definition holding the format of the picture." name="PictureFormat" shortFormPart="3">
					<mal:item comment="RAW format." nvalue="1" value="RAW"/>
					<mal:item comment="Bitmap format." nvalue="3" value="BMP"/>
					<mal:item comment="PNG format." nvalue="4" value="PNG"/>
					<mal:item comment="JPG format." nvalue="5" value="JPG"/>
				</mal:enumeration>
			</mal:dataTypes>
			<com:features/>
		</mal:service>
		<mal:service comment="The GPS service provides the ability to retrieve satellite navigation data from a Global Navigation Satellite System (GNSS) device receiver in the spacecraft platform. The GPS service provides the capability for streaming NMEA messages; the capability for enabling/disabling the streaming of NMEA messages; the capability for getting the last known position from the receiver; the capability for getting the satellites GNSS information; the capability for maintaining the list of nearby position events.&#10;The nearbyPosition operation allows a consumer to receive a message from the service when the spacecraft enters or exists a certain position. These can be set using the addNearbyPosition and removed using the removeNearbyPosition." name="GPS" number="2" xsi:type="com:ExtendedServiceType">
			<mal:documentation name="High Level Requirements" order="1">The GPS service shall provide:
&lt;ol&gt;
&lt;li&gt;the capability for streaming GPS NMEA messages;&lt;/li&gt;
&lt;li&gt;the capability for enabling/disabling the streaming of NMEA messages;&lt;/li&gt;
&lt;li&gt;the capability for having getting the last known position from the GPS;&lt;/li&gt;
&lt;li&gt;the capability for getting the satellites GPS information;&lt;/li&gt;
&lt;li&gt;The capability for maintaining the list of nearby position events.&lt;/li&gt;
&lt;/ol&gt;
			</mal:documentation>
			<mal:documentation name="Functional Requirements" order="2"/>
			<mal:capabilitySet comment="" number="1">
				<mal:invokeIP comment="The getNMEASentence operation allows a consumer to request a NMEA sentence from a sentence identifier." name="getNMEASentence" number="1" supportInReplay="false">
					<mal:messages>
						<mal:invoke comment="">
							<mal:field canBeNull="true" comment="The sentenceIdentifier field shall hold the sentence identifier of the request." name="sentenceIdentifier">
								<mal:type area="MAL" list="false" name="String"/>
							</mal:field>
						</mal:invoke>
						<mal:acknowledgement comment=""/>
						<mal:response comment="">
							<mal:field canBeNull="true" comment="The sentence field shall hold the NMEA sentence." name="sentence">
								<mal:type area="MAL" list="false" name="String"/>
							</mal:field>
						</mal:response>
					</mal:messages>
					<mal:errors>
						<mal:errorRef comment="The requested sentence identifier is invalid.">
							<mal:type area="COM" list="false" name="INVALID"/>
						</mal:errorRef>
						<mal:errorRef comment="The GPS unit is not available.">
							<mal:type area="Platform" list="false" name="DEVICE_NOT_AVAILABLE"/>
						</mal:errorRef>
					</mal:errors>
				</mal:invokeIP>
			</mal:capabilitySet>
			<mal:capabilitySet comment="" number="2">
				<mal:requestIP comment="The getLastKnownPosition operation allows a consumer to retrieve the last known position that was provided by the GPS unit." name="getLastKnownPosition" number="2" supportInReplay="false">
					<mal:messages>
						<mal:request comment="">
						</mal:request>
						<mal:response comment="">
							<mal:field canBeNull="true" comment="The position field shall hold the last known position." name="position">
								<mal:type area="Platform" list="false" name="Position" service="GPS"/>
							</mal:field>
							<mal:field canBeNull="true" comment="The elapsedTime field shall hold the elapsed time since the position's determination." name="elapsedTime">
								<mal:type area="MAL" list="false" name="Duration"/>
							</mal:field>
						</mal:response>
					</mal:messages>
				<mal:errors>
            <mal:errorRef comment="The position is unknown.">
              <mal:type area="MAL" list="false" name="UNKNOWN"/>
            </mal:errorRef>
          </mal:errors>
        </mal:requestIP>
			</mal:capabilitySet>
			<mal:capabilitySet comment="" number="3">
				<mal:invokeIP comment="The getPosition operation allows a consumer to obtain a position from the GPS unit." name="getPosition" number="3" supportInReplay="false">
					<mal:messages>
						<mal:invoke comment="">
						</mal:invoke>
						<mal:acknowledgement comment=""/>
						<mal:response comment="">
							<mal:field canBeNull="true" comment="The position field shall hold the current position." name="position">
								<mal:type area="Platform" list="false" name="Position" service="GPS"/>
							</mal:field>
						</mal:response>
					</mal:messages>
					<mal:errors>
						<mal:errorRef comment="The GPS unit is not available.">
							<mal:type area="Platform" list="false" name="DEVICE_NOT_AVAILABLE"/>
						</mal:errorRef>
            <mal:errorRef comment="The position is unknown.">
              <mal:type area="MAL" list="false" name="UNKNOWN"/>
            </mal:errorRef>
          </mal:errors>
				</mal:invokeIP>
			</mal:capabilitySet>
			<mal:capabilitySet comment="" number="4">
				<mal:invokeIP comment="The getSatellitesInfo operation allows a consumer to obtain the satellites information from the GPS." name="getSatellitesInfo" number="4" supportInReplay="false">
					<mal:messages>
						<mal:invoke comment=""/>
						<mal:acknowledgement comment=""/>
						<mal:response comment="">
							<mal:field canBeNull="true" comment="The gpsSatellitesInfo field shall hold the information of the satellites." name="gpsSatellitesInfo">
								<mal:type area="Platform" list="true" name="SatelliteInfo" service="GPS"/>
							</mal:field>
						</mal:response>
					</mal:messages>
					<mal:errors>
						<mal:errorRef comment="The GPS unit is not available.">
							<mal:type area="Platform" list="false" name="DEVICE_NOT_AVAILABLE"/>
						</mal:errorRef>
					</mal:errors>
				</mal:invokeIP>
			</mal:capabilitySet>


			<mal:capabilitySet comment="" number="5">
				<mal:requestIP comment="The listNearbyPositionEvent operation allows a consumer to request the object instance identifiers of the existing nearby position events in the service. The operation is expected to be used in conjunction with the COM archive which holds the actual nearby position objects." name="listNearbyPosition" number="5" supportInReplay="false">
					<mal:messages>
						<mal:request comment="">
							<mal:field canBeNull="true" comment="The names field shall hold a list of NearbyPositionEvent names." name="names">
								<mal:type area="MAL" list="true" name="Identifier"/>
							</mal:field>
						</mal:request>
						<mal:response comment="">
							<mal:field canBeNull="true" comment="The objInstIds field shall hold a list of the corresponding object instance identifiers for the selected names.&#10;The request may contain the wildcard value of '*' to return all supported nearby position events.&#10;The returned list shall maintain the same order as the submitted list unless the wildcard value was included in the request." name="objInstIds">
								<mal:type area="MAL" list="true" name="Long"/>
							</mal:field>
						</mal:response>
					</mal:messages>
				</mal:requestIP>
			</mal:capabilitySet>			


			<mal:capabilitySet comment="" number="6">
				<mal:requestIP comment="The addNearbyPositionEvent operation allows a consumer to define a list of nearby position events in the service.The new NearbyPosition objects are expected to be stored in the COM Archive by the provider of the GPS service." name="addNearbyPosition" number="6" supportInReplay="false">
					<mal:messages>
						<mal:request comment="">
							<mal:field canBeNull="true" comment="The nearbyPosition field shall hold the definition of a position." name="nearbyPositionDefinitions">
								<mal:type area="Platform" list="true" name="NearbyPositionDefinition" service="GPS"/>
							</mal:field>
						</mal:request>
						<mal:response comment="">
							<mal:field canBeNull="true" comment="The objInstIds field shall hold a list of the corresponding object instance identifiers for the selected names." name="objInstIds">
								<mal:type area="MAL" list="true" name="Long"/>
							</mal:field>
						</mal:response>
					</mal:messages>
					<mal:errors>
						<mal:errorRef comment="One of the supplied attitudeDefinitions objects contains an invalid name.">
							<mal:type area="COM" list="false" name="INVALID"/>
							<mal:extraInformation comment="The extra information field contains a list of the indexes of the erroneous values from the originating list supplied.">
								<mal:type area="MAL" list="true" name="UInteger"/>
							</mal:extraInformation>
						</mal:errorRef>
						<mal:errorRef comment="One or more of the nearbyPosition objects being added has a name that is already in use in the domain.">
							<mal:type area="COM" list="false" name="DUPLICATE"/>
							<mal:extraInformation comment="The extra information field contains a list of the indexes of the erroneous values from the originating list supplied.">
								<mal:type area="MAL" list="false" name="UInteger"/>
							</mal:extraInformation>
						</mal:errorRef>
					</mal:errors>
				</mal:requestIP>
				<mal:submitIP comment="The removeNearbyPositionEvent operation allows a consumer to remove a list of nearby position events set in the service." name="removeNearbyPosition" number="7" supportInReplay="false">
					<mal:messages>
						<mal:submit comment="">
							<mal:field canBeNull="true" comment="The objInstIds field shall hold a list of the corresponding object instance identifiers of the NearbyPosition objects." name="objInstIds">
								<mal:type area="MAL" list="true" name="Long"/>
							</mal:field>
						</mal:submit>
					</mal:messages>
					<mal:errors>
						<mal:errorRef comment="One of the supplied NearbyPosition object instance identifiers is unknown.">
							<mal:type area="MAL" list="false" name="UNKNOWN"/>
							<mal:extraInformation comment="A list of the indexes of the error values shall be contained in the extra information field.">
								<mal:type area="MAL" list="true" name="UInteger"/>
							</mal:extraInformation>
						</mal:errorRef>
					</mal:errors>
				</mal:submitIP>
			</mal:capabilitySet>
			<mal:capabilitySet comment="" number="7">
				<mal:pubsubIP comment="The nearbyPosition allows a consumer to subscribe to nearby position notifications. The notifications shall be generated upon entering or exiting a nearby position." name="nearbyPosition" number="8" supportInReplay="false">
					<mal:messages>
						<mal:publishNotify comment="">
							<mal:field canBeNull="true" comment="The isEntering field shall hold the entering state of the current position.&#10;If the GPS current position has entered the nearby position, then the field shall be set to TRUE otherwise FALSE.&#10;The MAL EntityKey.firstSubKey shall contain the NearbyPosition name.&#10;The MAL EntityKey.secondSubKey shall contain the NearbyPosition object instance identifier.&#10;The MAL EntityKey.thirdSubKey shall contain the NearbyPositionAlert object instance identifier.&#10;The MAL EntityKey.fourthSubKey shall be NULL.&#10;The timestamp of the update shall be on-board clock at the time of the notification.&#10;The ObjectId shall be set to NULL." name="isEntering">
								<mal:type area="MAL" list="false" name="Boolean"/>
							</mal:field>
						</mal:publishNotify>
					</mal:messages>
				</mal:pubsubIP>
			</mal:capabilitySet>
			<mal:dataTypes>
				<mal:composite comment="The Position structure holds the position of the spacecraft given by the GPS unit." name="Position" shortFormPart="1">
					<mal:extends>
						<mal:type area="MAL" list="false" name="Composite"/>
					</mal:extends>
					<mal:field canBeNull="false" comment="The latitude of the position. The unit is in decimal degrees." name="latitude">
						<mal:type area="MAL" list="false" name="Double"/>
					</mal:field>
					<mal:field canBeNull="false" comment="The longitude of the position. The unit is in decimal degrees." name="longitude">
						<mal:type area="MAL" list="false" name="Double"/>
					</mal:field>
					<mal:field canBeNull="false" comment="Altitude in meters according to the WGS-84 ellipsoid" name="altitude">
						<mal:type area="MAL" list="false" name="Double"/>
					</mal:field>
					<mal:field canBeNull="true" comment="Extra details about the position." name="extraDetails">
						<mal:type area="Platform" list="false" name="PositionExtraDetails" service="GPS"/>
					</mal:field>
				</mal:composite>
				<mal:composite comment="The SatelliteInfo structure holds the information about the satellites obtained from the GPS unit." name="SatelliteInfo" shortFormPart="2">
					<mal:extends>
						<mal:type area="MAL" list="false" name="Composite"/>
					</mal:extends>
					<mal:field canBeNull="true" comment="The azimuth of the satellite." name="azimuth">
						<mal:type area="MAL" list="false" name="Float"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The elevation of the satellite." name="elevation">
						<mal:type area="MAL" list="false" name="Float"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The pseudorandom noise number." name="prn">
						<mal:type area="MAL" list="false" name="Integer"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The almanac of the satellite." name="almanac">
						<mal:type area="MAL" list="false" name="Double"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The ephemeris of the satellite." name="ephemeris">
						<mal:type area="MAL" list="false" name="Double"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The time of the fix." name="recentFix">
						<mal:type area="MAL" list="false" name="Time"/>
					</mal:field>
					<mal:field canBeNull="true" comment="Space vehicle number." name="svn">
						<mal:type area="MAL" list="false" name="UInteger"/>
					</mal:field>
				</mal:composite>
				<mal:composite comment="The PositionExtraDetails structure holds extra information that can be provided by a GPS unit." name="PositionExtraDetails" shortFormPart="4">
					<mal:extends>
						<mal:type area="MAL" list="false" name="Composite"/>
					</mal:extends>
					<mal:field canBeNull="true" comment="UTC time status of position." name="utc">
						<mal:type area="MAL" list="false" name="Time"/>
					</mal:field>
					<mal:field canBeNull="true" comment="Fix Quality:&#10;0 = Invalid; &#10;1 = GPS fix;&#10;2 = DGPS fix." name="fixQuality">
						<mal:type area="MAL" list="false" name="Integer"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The number of satellites in view for this position." name="numberOfSatellites">
						<mal:type area="MAL" list="false" name="Integer"/>
					</mal:field>
					<mal:field canBeNull="true" comment="Horizontal Dilution of Precision. The relative accuracy of horizontal position." name="hdop">
						<mal:type area="MAL" list="false" name="Float"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The relationship between the geoid and the WGS84 ellipsoid. The unit is meters." name="undulation">
						<mal:type area="MAL" list="false" name="Float"/>
					</mal:field>
				</mal:composite>
				<mal:composite comment="The NearbyPositionDefinition structure holds a definition of a certain Position." name="NearbyPositionDefinition" shortFormPart="26">
					<mal:extends>
						<mal:type area="MAL" list="false" name="Composite"/>
					</mal:extends>
					<mal:field canBeNull="true" comment="The name of the definition." name="name">
						<mal:type area="MAL" list="false" name="Identifier"/>
					</mal:field>
					<mal:field canBeNull="true" comment="A textual description of the definition." name="description">
						<mal:type area="MAL" list="false" name="String"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The distance boundary of this definition. The distance boundary shall define a spherical zone around the position. The unit is meters." name="distanceBoundary">
						<mal:type area="MAL" list="false" name="Double"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The position of the definition." name="position">
						<mal:type area="Platform" list="false" name="Position" service="GPS"/>
					</mal:field>
				</mal:composite>
			</mal:dataTypes>
			<com:features>
				<mal:diagram name="GPSObjects">
					<svg:svg height="100" version="1.1" width="700">
						<svg:defs>
							<svg:linearGradient id="box_gradient" x1="0%" x2="100%" y1="0%" y2="0%">
								<svg:stop offset="0%" style="stop-color:rgb(237,227,212);stop-opacity:1"/>
								<svg:stop offset="100%" style="stop-color:rgb(249,239,224);stop-opacity:1"/>
							</svg:linearGradient>
							<svg:marker id="sourceArrow" markerHeight="10" markerWidth="15" orient="auto" refX="0" refY="5">
								<svg:path d="M0,0 V10 L15,5 Z" fill="rgb(255,0,0)"/>
							</svg:marker>
							<svg:marker id="relatedArrow" markerHeight="10" markerWidth="15" orient="auto" refX="0" refY="5">
								<svg:path d="M0,0 V10 L15,5 Z" fill="rgb(0,0,0)"/>
							</svg:marker>
						</svg:defs>
						<svg:path d="M130,50 L242,50 L355,50" end="NearbyPosition" fill="none" marker-mid="url(#relatedArrow)" start="NearbyPositionEntered" stroke="rgb(0,0,0)" stroke-width="1"/>
						<svg:path d="M570,50 L463,50 L355,50" end="NearbyPosition" fill="none" marker-mid="url(#relatedArrow)" start="NearbyPositionExited" stroke="rgb(0,0,0)" stroke-width="1"/>
						<svg:g id="NearbyPositionEntered" transform="translate(50,20)">
							<svg:rect fill="rgb(190,190,190)" height="60" id="shadow" opacity="0.5" rx="15" width="160" x="4" y="4"/>
							<svg:rect fill="url(#box_gradient)" height="60" id="frame" rx="15" stroke="black" stroke-width="2" width="160"/>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_name" pointer-events="none" text-anchor="middle" x="80" y="25">NearbyPositionEntered</svg:text>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_number" pointer-events="none" text-anchor="middle" x="80" y="45">2</svg:text>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_type" pointer-events="none" text-anchor="middle" x="80" y="65"/>
						</svg:g>
						<svg:g id="NearbyPosition" transform="translate(300,10)">
							<svg:rect fill="rgb(190,190,190)" height="80" id="shadow" opacity="0.5" rx="0" width="110" x="4" y="4"/>
							<svg:rect fill="url(#box_gradient)" height="80" id="frame" rx="0" stroke="black" stroke-width="2" width="110"/>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_name" pointer-events="none" text-anchor="middle" x="55" y="25">NearbyPosition</svg:text>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_number" pointer-events="none" text-anchor="middle" x="55" y="45">1</svg:text>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_type" pointer-events="none" text-anchor="middle" x="55" y="65">MAL::Identifier</svg:text>
						</svg:g>
						<svg:g id="NearbyPositionExited" transform="translate(490,20)">
							<svg:rect fill="rgb(190,190,190)" height="60" id="shadow" opacity="0.5" rx="15" width="160" x="4" y="4"/>
							<svg:rect fill="url(#box_gradient)" height="60" id="frame" rx="15" stroke="black" stroke-width="2" width="160"/>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_name" pointer-events="none" text-anchor="middle" x="80" y="25">NearbyPositionExited</svg:text>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_number" pointer-events="none" text-anchor="middle" x="80" y="45">3</svg:text>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_type" pointer-events="none" text-anchor="middle" x="80" y="65"/>
						</svg:g>
					</svg:svg>
				</mal:diagram>
				<com:objects comment="">
					<com:object comment="The positions markers for the events shall be represented as NearbyPosition COM objects. " name="NearbyPosition" number="1">
						<com:objectType>
							<mal:type area="Platform" list="false" name="NearbyPositionDefinition" service="GPS"/>
						</com:objectType>
						<com:relatedObject comment=""/>
						<com:sourceObject comment="The source link of the NearbyPosition object should be the object that caused it to be created, most likely a COM OperationActivity object or an operator login in the case of off-line editors being used.">
						</com:sourceObject>
					</com:object>
					<com:object comment="The body shall contain a boolean value " name="NearbyPositionAlert" number="2">
						<com:objectType>
							<mal:type area="MAL" list="false" name="Boolean"/>
						</com:objectType>
						<com:relatedObject comment="">
							<com:objectType area="Platform" number="1" service="GPS"/>
						</com:relatedObject>
						<com:sourceObject comment=""/>
					</com:object>
				</com:objects>
				<com:archiveUsage comment="NearbyPosition objects should be stored in the COM archive.&#10;When a nearby event is published, the NearbyPosition object should be stored in the COM archive by the publisher."/>
			</com:features>
		</mal:service>
		<mal:service comment="The AutonomousADCS service allows a consumer to monitor the attitude from an ADCS device in the spacecraft platform and to set/unset the desired attitude from a list of attitude definitions." name="AutonomousADCS" number="3" xsi:type="com:ExtendedServiceType">
			<mal:documentation name="High Level Requirements" order="1">The Autonomous ADCS service shall provide:
&lt;ol&gt;
&lt;li&gt;the capability for periodic monitoring of the spacecraft's attitude;&lt;/li&gt;
&lt;li&gt;the capability for setting and unsetting the spacecraft's desired attitude;&lt;/li&gt;
&lt;li&gt;the capability for maintaining the list of attitude definitions;&lt;/li&gt;
&lt;li&gt;the capability for listing the object instance identifiers for the attitude definitions.&lt;/li&gt;
&lt;/ol&gt;
			</mal:documentation>
			<mal:documentation name="Functional Requirements" order="2">// Add the validation checks criteria
			</mal:documentation>
			<mal:capabilitySet comment="" number="1">
				<mal:pubsubIP comment="The monitorAttitude operation allows a consumer to subscribe for the satellite's current attitude.&#10;The pointingTo field shall contain the attitude instance in a reference frame.&#10;The MAL EntityKey.firstSubKey shall contain the AttitudeDefinition name.&#10;The MAL EntityKey.secondSubKey shall contain the AttitudeDefinition object instance identifier.&#10;The MAL EntityKey.thirdSubKey shall contain the numeric value of the AttitudeMode of the AttitudeDefinition.&#10;The MAL EntityKey.fourthSubKey shall be NULL.&#10;The timestamp of the update shall be on-board clock at the time of the sampling.&#10;The ObjectId shall be set to NULL." name="monitorAttitude" number="1" supportInReplay="false">
					<mal:messages>
						<mal:publishNotify comment="">
							<mal:field canBeNull="true" comment="The attitudeInstance field shall hold the instance of the current attitude." name="attitudeInstance">
								<mal:type area="Platform" list="false" name="AttitudeInstance" service="AutonomousADCS"/>
							</mal:field>
						</mal:publishNotify>
					</mal:messages>
				</mal:pubsubIP>
			</mal:capabilitySet>
			<mal:capabilitySet comment="" number="2">
				<mal:submitIP comment="The setDesiredAttitude operation allows a consumer to set the spacecraft's attitude from an attitude definition." name="setDesiredAttitude" number="2" supportInReplay="false">
					<mal:messages>
						<mal:submit comment="">
							<mal:field canBeNull="true" comment="The object instance identifier of the attitude definition to be set." name="objInstId">
								<mal:type area="MAL" list="false" name="Long"/>
							</mal:field>
							<mal:field canBeNull="true" comment="The autoUnset field holds the duration after which the attitude definition shall be automatically unset.&#10;If the field is null, then the attitude definition won't be automatically unset, in this case the manual unsetAttitude operation must be used to disengage it." name="autoUnset">
								<mal:type area="MAL" list="false" name="Duration"/>
							</mal:field>
							<mal:field canBeNull="true" comment="The streamingRate field shall contain the publishing frequency. " name="streamingRate">
								<mal:type area="MAL" list="false" name="Duration"/>
							</mal:field>
						</mal:submit>
					</mal:messages>
					<mal:errors>
						<mal:errorRef comment="The ADCS unit is not available.">
							<mal:type area="Platform" list="false" name="ADCS_NOT_AVAILABLE" service="AutonomousADCS"/>
						</mal:errorRef>
						<mal:errorRef comment="The submited object instance identifier is unknown.">
							<mal:type area="MAL" list="false" name="UNKNOWN"/>
						</mal:errorRef>
						<mal:errorRef comment="The selected attitude definition contains an invalid argument.">
							<mal:type area="COM" list="false" name="INVALID"/>
							<mal:extraInformation comment="Contains the field name of the first field that did not pass the validation checks of the attitude definition.">
								<mal:type area="MAL" list="false" name="String"/>
							</mal:extraInformation>
						</mal:errorRef>
						<mal:errorRef comment="The ADCS is currently being used.">
							<mal:type area="Platform" list="false" name="DEVICE_IN_USE"/>
							<mal:extraInformation comment="The service will unset the current selected attitude definition in the duration provided in the extra information field. If the extra information field is set to null, then the attitude definition shall not be automatically unset. The consumer should use the unsetAttitude operation to manually disengage it.">
								<mal:type area="MAL" list="false" name="Duration"/>
							</mal:extraInformation>
						</mal:errorRef>
						<mal:errorRef comment="The selected attitude definition is unsupported by the current implementation of the service.">
							<mal:type area="MAL" list="false" name="UNSUPPORTED_OPERATION"/>
						</mal:errorRef>
						<mal:errorRef comment="The streamingRate is out of limits.">
							<mal:type area="COM" list="false" name="INVALID"/>
							<mal:extraInformation comment="The minimum valid streamingRate.">
								<mal:type area="MAL" list="false" name="Duration"/>
							</mal:extraInformation>
						</mal:errorRef>
					</mal:errors>
				</mal:submitIP>
				<mal:submitIP comment="The unsetAttitude operation allows a consumer to unset the spacecraft's attitude from the current selected attitude definition. This operation is expected to be used after a certain attitude definition is set by the setDesiredAttitude operation. If the attitude was set with the automatic unsetting enabled, then the unsetAttitude operation will override it and the attitude will be unset immediately. " name="unsetAttitude" number="3" supportInReplay="false">
					<mal:messages>
						<mal:submit comment=""/>
					</mal:messages>
					<mal:errors>
						<mal:errorRef comment="The ADCS unit is not available.">
							<mal:type area="Platform" list="false" name="ADCS_NOT_AVAILABLE" service="AutonomousADCS"/>
						</mal:errorRef>
					</mal:errors>
				</mal:submitIP>
			</mal:capabilitySet>
			<mal:capabilitySet comment="" number="3">
				<mal:requestIP comment="The listAttitudeDefinition operation allows a consumer to request the object instance identifiers of the attitude definition objects for the supported parameters of the provider. The operation is expected to be used in conjunction with the COM archive which holds the actual ParameterDefinition objects." name="listAttitudeDefinition" number="4" supportInReplay="false">
					<mal:messages>
						<mal:request comment="">
							<mal:field canBeNull="true" comment="The names of the Attitude definitions to be listed.&#10;The names field may contain the wildcard value of '*' to return all supported ParameterDefinition objects." name="names">
								<mal:type area="MAL" list="true" name="Identifier"/>
							</mal:field>
						</mal:request>
						<mal:response comment="">
							<mal:field canBeNull="true" comment="The objIds field holds the object instance identifiers of the Attitude definitions.&#10;The returned list shall maintain the same order as the submitted list unless the wildcard value was included in the request." name="objIds">
								<mal:type area="MAL" list="true" name="Long"/>
							</mal:field>
						</mal:response>
					</mal:messages>
					<mal:errors>
						<mal:errorRef comment="One of the supplied AttitudeDefinition object instance identifiers is unknown.">
							<mal:type area="MAL" list="false" name="UNKNOWN"/>
							<mal:extraInformation comment="A list of the indexes of the error values shall be contained in the extra information field.">
								<mal:type area="MAL" list="true" name="UInteger"/>
							</mal:extraInformation>
						</mal:errorRef>
					</mal:errors>
				</mal:requestIP>
			</mal:capabilitySet>
			<mal:capabilitySet comment="" number="4">
				<mal:requestIP comment="The addAttitudeDefinition operation allows a consumer to define one or more attitude definitions that do not currently exist. The new AttitudeDefinition object is expected to be stored in the COM archive by the provider of the AutonomousADCS service." name="addAttitudeDefinition" number="5" supportInReplay="false">
					<mal:messages>
						<mal:request comment="">
							<mal:field canBeNull="true" comment="The attitudeDefinitions field holds the attitude definitions.&#10;The name field of the supplied AttitudeDefinition structures must not be NULL, the wildcard '*', or empty. An INVALID error shall be returned in this case.&#10;The supplied name must be unique among all AttitudeDefinition objects for the domain of the provider otherwise a DUPLICATE error shall be returned.&#10;If an error is returned then no new attitude definitions shall be added as a result of this operation call." name="attitudeDefinitions">
								<mal:type area="Platform" list="true" name="AttitudeDefinition" service="AutonomousADCS"/>
							</mal:field>
						</mal:request>
						<mal:response comment="">
							<mal:field canBeNull="true" comment="The objIds field holds the object instance identifiers of the attitude definitions.&#10;The returned list shall maintain the same order as the submitted definitions." name="objIds">
								<mal:type area="MAL" list="true" name="Long"/>
							</mal:field>
						</mal:response>
					</mal:messages>
					<mal:errors>
						<mal:errorRef comment="One of the supplied attitudeDefinitions objects contains an invalid name.">
							<mal:type area="COM" list="false" name="INVALID"/>
							<mal:extraInformation comment="The extra information field contains a list of the indexes of the erroneous values from the originating list supplied.">
								<mal:type area="MAL" list="true" name="UInteger"/>
							</mal:extraInformation>
						</mal:errorRef>
						<mal:errorRef comment="One or more of the attitudeDefinitions objects being added has supplied a parameter name that is already in use in the domain.">
							<mal:type area="COM" list="false" name="DUPLICATE"/>
							<mal:extraInformation comment="The extra information field contains a list of the indexes of the erroneous values from the originating request list.">
								<mal:type area="MAL" list="true" name="UInteger"/>
							</mal:extraInformation>
						</mal:errorRef>
						<mal:errorRef comment="The selected attitude definition contains an invalid argument.">
							<mal:type area="COM" list="false" name="INVALID"/>
							<mal:extraInformation comment="Contains the field name of the first field that did not pass the validation checks of the attitude definition.">
								<mal:type area="MAL" list="false" name="String"/>
							</mal:extraInformation>
						</mal:errorRef>
					</mal:errors>
				</mal:requestIP>
				<mal:submitIP comment="The removeAttitudeDefinition operation allows a consumer to remove one or more attitude definitions from the list of attitudes supported by the service.&#10;The operation does not remove the attitude definitions object from the COM archive, merely removes the object from the provider." name="removeAttitudeDefinition" number="6" supportInReplay="false">
					<mal:messages>
						<mal:submit comment="">
							<mal:field canBeNull="true" comment="The object instance identifiers of the attitude definition to be removed.&#10;The list may contain the wildcard value of '0'.&#10;If a provided ParameterDefinition object instance identifier does not include a wildcard and does not match an existing definition then this operation shall fail with an UNKNOWN error.&#10;Matched attitude definition objects shall not be removed from the COM archive only from the list of attitude definitions objects in the provider.&#10;If an error is raised then no definitions shall be removed as a result of this operation call.&#10;If the operation succeeds then the provider shall no longer be able to set the removed attitude definitions." name="objIds">
								<mal:type area="MAL" list="true" name="Long"/>
							</mal:field>
						</mal:submit>
					</mal:messages>
					<mal:errors>
						<mal:errorRef comment="One of the supplied AttitudeDefinition object instance identifiers is unknown.">
							<mal:type area="MAL" list="false" name="UNKNOWN"/>
							<mal:extraInformation comment="A list of the indexes of the error values shall be contained in the extra information field.">
								<mal:type area="MAL" list="true" name="UInteger"/>
							</mal:extraInformation>
						</mal:errorRef>
					</mal:errors>
				</mal:submitIP>
			</mal:capabilitySet>
			<mal:dataTypes>
				<mal:enumeration comment="AttitudeMode is an enumeration definition holding the attitude modes." name="AttitudeMode" shortFormPart="4">
					<mal:item comment="B dot mode. Can also be used for detumbling and momentum unloading." nvalue="1" value="BDOT"/>
					<mal:item comment="Sun Pointing mode." nvalue="2" value="SUNPOINTING"/>
					<mal:item comment="Single Spinning mode." nvalue="3" value="SINGLESPINNING"/>
					<mal:item comment="Target Pointing mode." nvalue="4" value="TARGETTRACKING"/>
					<mal:item comment="Nadir Pointing mode." nvalue="5" value="NADIRPOINTING"/>
				</mal:enumeration>
				<mal:enumeration comment="ReferenceFrame is an enumeration definition holding the frames of reference." name="ReferenceFrame" shortFormPart="5">
					<mal:item comment="Euler angles reference frame." nvalue="1" value="EULER_ANGLES"/>
					<mal:item comment="Quaternions reference frame." nvalue="2" value="UNIT_QUATERNIONS"/>
					<mal:item comment="Rotation Matrix reference frame." nvalue="3" value="ROTATION_MATRIX"/>
				</mal:enumeration>
				<mal:composite comment="The AttitudeInstance holds an attitude instance." name="AttitudeInstance">
					<mal:extends>
						<mal:type area="MAL" list="false" name="Composite"/>
					</mal:extends>
				</mal:composite>		
				<mal:composite comment="The AttitudeInstanceBDot structure holds an attitude instance of type BDot." name="AttitudeInstanceBDot" shortFormPart="11">
					<mal:extends>
						<mal:type area="Platform" list="false" name="AttitudeInstance" service="AutonomousADCS"/>
					</mal:extends>
					<mal:field canBeNull="false" comment="The magnetic field instance." name="magneticField">
						<mal:type area="Platform" list="false" name="Vector3D"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The wheels speed instance." name="wheelSpeed">
						<mal:type area="Platform" list="false" name="WheelSpeed"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The magnetorquer momentum." name="mtqDipoleMomentum">
						<mal:type area="Platform" list="false" name="Vector3D"/>
					</mal:field>
				</mal:composite>
				<mal:composite comment="The AttitudeInstanceSunPointing structure holds an attitude instance of type Sun Pointing." name="AttitudeInstanceSunPointing" shortFormPart="12">
					<mal:extends>
						<mal:type area="Platform" list="false" name="AttitudeInstance" service="AutonomousADCS"/>
					</mal:extends>
					<mal:field canBeNull="false" comment="The sun vector instance." name="sunVector">
						<mal:type area="Platform" list="false" name="Vector3D"/>
					</mal:field>
					<mal:field canBeNull="false" comment="The validity of the instance." name="valid">
						<mal:type area="MAL" list="false" name="Boolean"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The wheels speed instance." name="wheelSpeed">
						<mal:type area="Platform" list="false" name="WheelSpeed"/>
					</mal:field>
					<mal:field canBeNull="true" comment="This value shall not be used" name="mtqDipoleMomentum">
						<mal:type area="Platform" list="false" name="Vector3D"/>
					</mal:field>
				</mal:composite>
				<mal:composite comment="The AttitudeInstanceSingleSpinning structure holds an attitude instance of type Single Spinning." name="AttitudeInstanceSingleSpinning" shortFormPart="13">
					<mal:extends>
						<mal:type area="Platform" list="false" name="AttitudeInstance" service="AutonomousADCS"/>
					</mal:extends>
					<mal:field canBeNull="false" comment="The sun vector instance." name="sunVector">
						<mal:type area="Platform" list="false" name="Vector3D"/>
					</mal:field>
					<mal:field canBeNull="false" comment="The magnetic field instance." name="magneticField">
						<mal:type area="Platform" list="false" name="Vector3D"/>
					</mal:field>
					<mal:field canBeNull="false" comment="The quaternions of the current attitude instance." name="currentQuaternions">
						<mal:type area="Platform" list="false" name="Quaternions"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The angular momentum vector." name="angularMomentum">
						<mal:type area="Platform" list="false" name="Vector3D"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The magnetorquer momentum." name="mtqDipoleMomentum">
						<mal:type area="Platform" list="false" name="Vector3D"/>
					</mal:field>
				</mal:composite>
				<mal:composite comment="The AttitudeInstanceTargetTracking structure holds an attitude instance of type Target Tracking." name="AttitudeInstanceTargetTracking" shortFormPart="14">
					<mal:extends>
						<mal:type area="Platform" list="false" name="AttitudeInstance" service="AutonomousADCS"/>
					</mal:extends>
					<mal:field canBeNull="false" comment="The quaternions of the current attitude instance." name="currentQuaternions">
						<mal:type area="Platform" list="false" name="Quaternions"/>
					</mal:field>
					<mal:field canBeNull="false" comment="The quaternions of the target attitude instance." name="targetQuaternions">
						<mal:type area="Platform" list="false" name="Quaternions"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The wheels speed instance." name="wheelSpeed">
						<mal:type area="Platform" list="false" name="WheelSpeed"/>
					</mal:field>
					<mal:field canBeNull="true" comment="WGS84 reference." name="positionVector">
						<mal:type area="Platform" list="false" name="Vector3D"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The angular velocity in rpm." name="angularVelocity">
						<mal:type area="Platform" list="false" name="Vector3D"/>
					</mal:field>
				</mal:composite>
				<mal:composite comment="The AttitudeInstanceNadirPointing structure holds an attitude instance of type Nadir Pointing." name="AttitudeInstanceNadirPointing" shortFormPart="15">
					<mal:extends>
						<mal:type area="Platform" list="false" name="AttitudeInstance" service="AutonomousADCS"/>
					</mal:extends>
					<mal:field canBeNull="false" comment="The quaternions of the current attitude instance." name="currentQuaternions">
						<mal:type area="Platform" list="false" name="Quaternions"/>
					</mal:field>
					<mal:field canBeNull="false" comment="The quaternions of the target attitude instance." name="targetQuaternions">
						<mal:type area="Platform" list="false" name="Quaternions"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The wheels speed instance." name="speed">
						<mal:type area="Platform" list="false" name="WheelSpeed"/>
					</mal:field>
					<mal:field canBeNull="true" comment="WGS84 reference." name="positionVector">
						<mal:type area="Platform" list="false" name="Vector3D"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The angular velocity in rpm." name="angularVelocity">
						<mal:type area="Platform" list="false" name="Vector3D"/>
					</mal:field>
				</mal:composite>
				<mal:composite comment="The AttitudeInstance holds an attitude definition." name="AttitudeDefinition">
					<mal:extends>
						<mal:type area="MAL" list="false" name="Composite"/>
					</mal:extends>
					<mal:field canBeNull="true" comment="The name of the attitude definition." name="name">
						<mal:type area="MAL" list="false" name="Identifier"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The description of the attitude definition." name="description">
						<mal:type area="MAL" list="false" name="String"/>
					</mal:field>
				</mal:composite>
				<mal:composite comment="The AttitudeDefinitionBDot structure holds an attitude definition of type BDot." name="AttitudeDefinitionBDot" shortFormPart="21">
					<mal:extends>
						<mal:type area="Platform" list="false" name="AttitudeDefinition" service="AutonomousADCS"/>
					</mal:extends>
				</mal:composite>
				<mal:composite comment="The AttitudeDefinitionSingleSpinning structure holds an attitude definition of type Sun Pointing." name="AttitudeDefinitionSingleSpinning" shortFormPart="22">
					<mal:extends>
						<mal:type area="Platform" list="false" name="AttitudeDefinition" service="AutonomousADCS"/>
					</mal:extends>
					<mal:field canBeNull="false" comment="The axis defined in the body reference frame for spinning." name="bodyAxis">
						<mal:type area="Platform" list="false" name="Vector3D"/>
					</mal:field>
					<mal:field canBeNull="false" comment="The magnitude of the angular velocity of the spinning in rpm. The right-hand rule shall be followed to indicate the positive direction of the angular velocity." name="angularVelocity">
						<mal:type area="MAL" list="false" name="Double"/>
					</mal:field>
				</mal:composite>
				<mal:composite comment="The AttitudeDefinitionSunPointing structure holds an attitude definition of type Single Spinning." name="AttitudeDefinitionSunPointing" shortFormPart="23">
					<mal:extends>
						<mal:type area="Platform" list="false" name="AttitudeDefinition" service="AutonomousADCS"/>
					</mal:extends>
				</mal:composite>
				<mal:composite comment="The AttitudeDefinitionTargetTracking structure holds an attitude definition of type Target Tracking." name="AttitudeDefinitionTargetTracking" shortFormPart="24">
					<mal:extends>
						<mal:type area="Platform" list="false" name="AttitudeDefinition" service="AutonomousADCS"/>
					</mal:extends>
					<mal:field canBeNull="false" comment="The latitude of the target to be tracked. The unit is in decimal degrees." name="latitude">
						<mal:type area="MAL" list="false" name="Double"/>
					</mal:field>
					<mal:field canBeNull="false" comment="The longitude of the target to be tracked. The unit is in decimal degrees." name="longitude">
						<mal:type area="MAL" list="false" name="Double"/>
					</mal:field>
				</mal:composite>
				<mal:composite comment="The AttitudeDefinitionNadirPointing structure holds an attitude definition of type Nadir Pointing." name="AttitudeDefinitionNadirPointing" shortFormPart="25">
					<mal:extends>
						<mal:type area="Platform" list="false" name="AttitudeDefinition" service="AutonomousADCS"/>
					</mal:extends>
				</mal:composite>
			</mal:dataTypes>
			<mal:errors>
				<mal:error comment="The ADCS is not available." name="ADCS_NOT_AVAILABLE" number="10"/>
			</mal:errors>
			<com:features>
				<mal:diagram name="AutonomousADCSObjects">
					<svg:svg height="300" version="1.1" width="700">
						<svg:defs>
							<svg:linearGradient id="box_gradient" x1="0%" x2="100%" y1="0%" y2="0%">
								<svg:stop offset="0%" style="stop-color:rgb(237,227,212);stop-opacity:1"/>
								<svg:stop offset="100%" style="stop-color:rgb(249,239,224);stop-opacity:1"/>
							</svg:linearGradient>
							<svg:marker id="sourceArrow" markerHeight="10" markerWidth="15" orient="auto" refX="0" refY="5">
								<svg:path d="M0,0 V10 L15,5 Z" fill="rgb(255,0,0)"/>
							</svg:marker>
							<svg:marker id="relatedArrow" markerHeight="10" markerWidth="15" orient="auto" refX="0" refY="5">
								<svg:path d="M0,0 V10 L15,5 Z" fill="rgb(0,0,0)"/>
							</svg:marker>
						</svg:defs>
						<svg:g id="AttitudeDefinitionNadirPointing" transform="translate(96,108)">
							<svg:rect fill="rgb(190,190,190)" height="80" id="shadow" opacity="0.5" rx="0" width="205" x="4" y="4"/>
							<svg:rect fill="url(#box_gradient)" height="80" id="frame" rx="0" stroke="black" stroke-width="2" width="205"/>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_name" pointer-events="none" text-anchor="middle" x="102" y="25">AttitudeDefinitionNadirPointing</svg:text>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_number" pointer-events="none" text-anchor="middle" x="102" y="45">6</svg:text>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_type" pointer-events="none" text-anchor="middle" x="102" y="65">AttitudeDefinitionNadirPointing</svg:text>
						</svg:g>
						<svg:g id="AttitudeDefinitionSunPointing" transform="translate(410,110)">
							<svg:rect fill="rgb(190,190,190)" height="80" id="shadow" opacity="0.5" rx="0" width="200" x="4" y="4"/>
							<svg:rect fill="url(#box_gradient)" height="80" id="frame" rx="0" stroke="black" stroke-width="2" width="200"/>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_name" pointer-events="none" text-anchor="middle" x="100" y="25">AttitudeDefinitionSunPointing</svg:text>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_number" pointer-events="none" text-anchor="middle" x="100" y="45">4</svg:text>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_type" pointer-events="none" text-anchor="middle" x="100" y="65">AttitudeDefinitionSunPointing</svg:text>
						</svg:g>
						<svg:g id="AttitudeDefinitionBDot" transform="translate(431,9)">
							<svg:rect fill="rgb(190,190,190)" height="80" id="shadow" opacity="0.5" rx="0" width="155" x="4" y="4"/>
							<svg:rect fill="url(#box_gradient)" height="80" id="frame" rx="0" stroke="black" stroke-width="2" width="155"/>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_name" pointer-events="none" text-anchor="middle" x="77" y="25">AttitudeDefinitionBDot</svg:text>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_number" pointer-events="none" text-anchor="middle" x="77" y="45">2</svg:text>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_type" pointer-events="none" text-anchor="middle" x="77" y="65">AttitudeDefinitionBDot</svg:text>
						</svg:g>
						<svg:g id="ADCSProblemDetected" transform="translate(118,7)">
							<svg:rect fill="rgb(190,190,190)" height="80" id="shadow" opacity="0.5" rx="15" width="160" x="4" y="4"/>
							<svg:rect fill="url(#box_gradient)" height="80" id="frame" rx="15" stroke="black" stroke-width="2" width="160"/>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_name" pointer-events="none" text-anchor="middle" x="80" y="25">ADCSProblemDetected</svg:text>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_number" pointer-events="none" text-anchor="middle" x="80" y="45">1</svg:text>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_type" pointer-events="none" text-anchor="middle" x="80" y="65">MAL::Blob</svg:text>
						</svg:g>
						<svg:g id="AttitudeDefinitionTargetTracking" transform="translate(93,205)">
							<svg:rect fill="rgb(190,190,190)" height="80" id="shadow" opacity="0.5" rx="0" width="215" x="4" y="4"/>
							<svg:rect fill="url(#box_gradient)" height="80" id="frame" rx="0" stroke="black" stroke-width="2" width="215"/>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_name" pointer-events="none" text-anchor="middle" x="107" y="25">AttitudeDefinitionTargetTracking</svg:text>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_number" pointer-events="none" text-anchor="middle" x="107" y="45">5</svg:text>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_type" pointer-events="none" text-anchor="middle" x="107" y="65">AttitudeDefinitionTargetTracking</svg:text>
						</svg:g>
						<svg:g id="AttitudeDefinitionSingleSpinning" transform="translate(407,206)">
							<svg:rect fill="rgb(190,190,190)" height="80" id="shadow" opacity="0.5" rx="0" width="215" x="4" y="4"/>
							<svg:rect fill="url(#box_gradient)" height="80" id="frame" rx="0" stroke="black" stroke-width="2" width="215"/>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_name" pointer-events="none" text-anchor="middle" x="107" y="25">AttitudeDefinitionSingleSpinning</svg:text>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_number" pointer-events="none" text-anchor="middle" x="107" y="45">3</svg:text>
							<svg:text fill="navy" font-family="Verdana,Arial" font-size="12" id="object_type" pointer-events="none" text-anchor="middle" x="107" y="65">AttitudeDefinitionSingleSpinning</svg:text>
						</svg:g>
					</svg:svg>
				</mal:diagram>
				<com:objects comment="An AttitudeDefinitionBDot COM object represents the definition of a BDot attitude. The object body shall hold an AttitudeDefinitionBDot structure.&#10;&lt;ol&gt;&#10;&lt;li&gt;The AttitudeDefinitionBDot COM object source link should be the object that caused it to be created, most likely a COM OperationActivity object.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;An AttitudeDefinitionSingleSpinning COM object represents the definition of a Single Spinning attitude. The object body shall hold an AttitudeDefinitionSingleSpinning structure.&#10;&lt;ol&gt;&#10;&lt;li&gt;The AttitudeDefinitionSingleSpinning COM object source link should be the object that caused it to be created, most likely a COM OperationActivity object.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;An AttitudeDefinitionSunPointing COM object represents the definition of a Sun Pointing attitude. The object body shall hold an AttitudeDefinitionSunPointing structure.&#10;&lt;ol&gt;&#10;&lt;li&gt;The AttitudeDefinitionSunPointing COM object source link should be the object that caused it to be created, most likely a COM OperationActivity object.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;An AttitudeDefinitionTargetTracking COM object represents the definition of a Target Tracking attitude. The object body shall hold an AttitudeDefinitionTargetTracking structure.&#10;&lt;ol&gt;&#10;&lt;li&gt;The AttitudeDefinitionTargetTracking COM object source link should be the object that caused it to be created, most likely a COM OperationActivity object.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;An AttitudeDefinitionNadirPointing COM object represents the definition of a Nadir Pointing attitude. The object body shall hold an AttitudeDefinitionNadirPointing structure.&#10;&lt;ol&gt;&#10;&lt;li&gt;The AttitudeDefinitionNadirPointing COM object source link should be the object that caused it to be created, most likely a COM OperationActivity object.&lt;/li&gt;&#10;&lt;/ol&gt;">
					<com:object comment="" name="AttitudeDefinitionBDot" number="2">
						<com:objectType>
							<mal:type area="Platform" list="false" name="AttitudeDefinitionBDot" service="AutonomousADCS"/>
						</com:objectType>
						<com:relatedObject comment=""/>
						<com:sourceObject comment="">
						</com:sourceObject>
					</com:object>
					<com:object comment="" name="AttitudeDefinitionSingleSpinning" number="3">
						<com:objectType>
							<mal:type area="Platform" list="false" name="AttitudeDefinitionSingleSpinning" service="AutonomousADCS"/>
						</com:objectType>
						<com:relatedObject comment=""/>
						<com:sourceObject comment=""/>
					</com:object>
					<com:object comment="" name="AttitudeDefinitionSunPointing" number="4">
						<com:objectType>
							<mal:type area="Platform" list="false" name="AttitudeDefinitionSunPointing" service="AutonomousADCS"/>
						</com:objectType>
						<com:relatedObject comment=""/>
						<com:sourceObject comment=""/>
					</com:object>
					<com:object comment="" name="AttitudeDefinitionTargetTracking" number="5">
						<com:objectType>
							<mal:type area="Platform" list="false" name="AttitudeDefinitionTargetTracking" service="AutonomousADCS"/>
						</com:objectType>
						<com:relatedObject comment=""/>
						<com:sourceObject comment=""/>
					</com:object>
					<com:object comment="" name="AttitudeDefinitionNadirPointing" number="6">
						<com:objectType>
							<mal:type area="Platform" list="false" name="AttitudeDefinitionNadirPointing" service="AutonomousADCS"/>
						</com:objectType>
						<com:relatedObject comment=""/>
						<com:sourceObject comment=""/>
					</com:object>
				</com:objects>
				<com:events comment="An ADCSProblemDetected COM event represents the detection of a problem on the ADCS. The object body can hold a blob of data containing implementation-specific data.&#10;&lt;ol&gt;&#10;&lt;li&gt;The ADCSProblemDetected COM event shall be generated upon the detection of a problem with the ADCS.&lt;/li&gt;&#10;&lt;/ol&gt;">
					<com:event comment="The Event body is implementation-specific." name="ADCSProblemDetected" number="1">
						<com:objectType>
							<mal:type area="MAL" list="false" name="Blob"/>
						</com:objectType>
						<com:relatedObject comment=""/>
						<com:sourceObject comment=""/>
					</com:event>
				</com:events>
				<com:archiveUsage comment="AttitudeDefinitionBDot COM objects should be stored in the COM archive.&#10;AttitudeDefinitionSingleSpinning COM objects should be stored in the COM archive.&#10;AttitudeDefinitionSunPointing COM objects should be stored in the COM archive.&#10;AttitudeDefinitionTargetTracking COM objects should be stored in the COM archive.&#10;AttitudeDefinitionNadirPointing COM objects should be stored in the COM archive."/>
			</com:features>
		</mal:service>
		<mal:service comment="The Software-defined Radio provides a generic mechanism to set, configure and receive data from a Software-defined Radio device." name="SoftwareDefinedRadio" number="4" xsi:type="com:ExtendedServiceType">
			<mal:documentation name="High Level Requirements" order="1"/>
			<mal:documentation name="Functional Requirements" order="2"/>
			<mal:capabilitySet comment="" number="1">
				<mal:pubsubIP comment="The streamRadio operation allows a consumer to subscribe for Software-defined Radio data updates." name="streamRadio" number="1" supportInReplay="false">
					<mal:messages>
						<mal:publishNotify comment="">
							<mal:field canBeNull="true" comment="The iqComponents field shall hold the in-phase and quadrature data from the Software-defined Radio unit." name="iqComponents">
								<mal:type area="Platform" list="false" name="IQComponents" service="SoftwareDefinedRadio"/>
							</mal:field>
						</mal:publishNotify>
					</mal:messages>
				</mal:pubsubIP>
			</mal:capabilitySet>
			<mal:capabilitySet comment="" number="2">
				<mal:submitIP comment="The enableSDR operation allows a consumer to enable or disable the Software-defined Radio." name="enableSDR" number="2" supportInReplay="false">
					<mal:messages>
						<mal:submit comment="">
							<mal:field canBeNull="true" comment="The enable field shall hold the flag status to enable/disable the Software-defined Radio.&#10;If the enable field is true then the Software-defined Radio shall be enabled otherwise disabled." name="enable">
								<mal:type area="MAL" list="false" name="Boolean"/>
							</mal:field>
							<mal:field canBeNull="true" comment="The  initialConfiguration field shall hold the configuration to be set right after the SDR is enabled." name="initialConfiguration">
								<mal:type area="Platform" list="false" name="SDRConfiguration" service="SoftwareDefinedRadio"/>
							</mal:field>
							<mal:field canBeNull="true" comment="" name="publishingPeriod">
								<mal:type area="MAL" list="false" name="Duration"/>
							</mal:field>
						</mal:submit>
					</mal:messages>
					<mal:errors>
						<mal:errorRef comment="The provided configuration is invalid.">
							<mal:type area="COM" list="false" name="INVALID"/>
						</mal:errorRef>
						<mal:errorRef comment="The Software-defined Radio could not be enabled.">
							<mal:type area="MAL" list="false" name="INTERNAL"/>
						</mal:errorRef>
					</mal:errors>
				</mal:submitIP>
			</mal:capabilitySet>
			<mal:capabilitySet comment="" number="3">
				<mal:submitIP comment="The setConfiguration operation allows a consumer to set a configuration to the Software-defined Radio." name="updateConfiguration" number="3" supportInReplay="false">
					<mal:messages>
						<mal:submit comment="">
							<mal:field canBeNull="true" comment="The configuration field holds the configuration of the SDR." name="configuration">
								<mal:type area="Platform" list="false" name="SDRConfiguration" service="SoftwareDefinedRadio"/>
							</mal:field>
						</mal:submit>
					</mal:messages>
					<mal:errors>
						<mal:errorRef comment="The provided configuration is invalid.">
							<mal:type area="COM" list="false" name="INVALID"/>
						</mal:errorRef>
					</mal:errors>
				</mal:submitIP>
			</mal:capabilitySet>
			<mal:dataTypes>
				<mal:composite comment="It holds a configuration for the SDR." name="SDRConfiguration" shortFormPart="1">
					<mal:extends>
						<mal:type area="MAL" list="false" name="Composite"/>
					</mal:extends>
					<mal:field canBeNull="true" comment="Local Oscillator Frequency." name="LOFrequency">
						<mal:type area="MAL" list="false" name="Double"/>
					</mal:field>
					<mal:field canBeNull="true" comment="Low-noise Amplifier Gain." name="LNA">
						<mal:type area="MAL" list="false" name="Integer"/>
					</mal:field>
					<mal:field canBeNull="true" comment="Variable Gain Amplifier 1." name="VGA1">
						<mal:type area="MAL" list="false" name="Integer"/>
					</mal:field>
					<mal:field canBeNull="true" comment="Variable Gain Amplifier 2." name="VGA2">
						<mal:type area="MAL" list="false" name="Integer"/>
					</mal:field>
					<mal:field canBeNull="true" comment="Low Pass Filter frequency in GHz." name="LPF">
						<mal:type area="MAL" list="false" name="Double"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The frequency in MHz." name="sampleRate">
						<mal:type area="MAL" list="false" name="Double"/>
					</mal:field>
				</mal:composite>
				<mal:composite comment="It holds the In-phase and Quadrature components." name="IQComponents" shortFormPart="27">
					<mal:extends>
						<mal:type area="MAL" list="false" name="Composite"/>
					</mal:extends>
					<mal:field canBeNull="true" comment="The in-phase component." name="inPhase">
						<mal:type area="MAL" list="true" name="Double"/>
					</mal:field>
					<mal:field canBeNull="true" comment="The quadrature component." name="quadrature">
						<mal:type area="MAL" list="true" name="Double"/>
					</mal:field>
				</mal:composite>
			</mal:dataTypes>
			<com:features/>
		</mal:service>
		<mal:service comment="The Optical Data Receiver service provides a mechanism to receive messages from an Optical Data Receiver device." name="OpticalDataReceiver" number="5" xsi:type="com:ExtendedServiceType">
			<mal:documentation name="High Level Requirements" order="1"/>
			<mal:documentation name="Functional Requirements" order="2"/>
			<mal:capabilitySet comment="" number="1">
				<mal:pubsubIP comment="The streamData operation allows a consumer to subscribe to a stream feed from the Optical Data Receiver." name="streamData" number="1" supportInReplay="false">
					<mal:messages>
						<mal:publishNotify comment="">
							<mal:field canBeNull="true" comment="The data field holds a blob of data coming from the Optical Data Receiver." name="data">
								<mal:type area="MAL" list="false" name="Blob"/>
							</mal:field>
						</mal:publishNotify>
					</mal:messages>
				</mal:pubsubIP>
				<mal:requestIP comment="The setPublishingFrequency operation allows a consumer to set the publishing frequency or disable it." name="setPublishingFrequency" number="2" supportInReplay="false">
					<mal:messages>
						<mal:request comment="">
							<mal:field canBeNull="true" comment="The publishingPeriod field shall hold the period of updates to be streamed.&#10;If set to 0, then no updates will be generated." name="publishingPeriod">
								<mal:type area="MAL" list="false" name="Duration"/>
							</mal:field>
						</mal:request>
						<mal:response comment=""/>
					</mal:messages>
				</mal:requestIP>
			</mal:capabilitySet>
			<com:features/>
		</mal:service>
		<mal:service comment="The Magnetometer service provides a generic mechanism to retrieve the magnetic field from a magnetometer in the spacecraft platform." name="Magnetometer" number="6" xsi:type="com:ExtendedServiceType">
			<mal:capabilitySet comment="" number="1">
				<mal:requestIP comment="The getMagneticField operation allows a consumer to retrieve the magnetic field instance from a magnetometer unit." name="getMagneticField" number="1" supportInReplay="false">
					<mal:messages>
						<mal:request comment=""/>
						<mal:response comment="">
							<mal:field canBeNull="true" comment="The magneticField field shall hold the magnetic field instance of the magnetometer." name="magneticField">
								<mal:type area="Platform" list="false" name="MagneticFieldInstance" service="Magnetometer"/>
							</mal:field>
						</mal:response>
					</mal:messages>
				</mal:requestIP>
			</mal:capabilitySet>
			<mal:dataTypes>
				<mal:composite comment="An instance of the magnetic field vector." name="MagneticFieldInstance" shortFormPart="1">
					<mal:extends>
						<mal:type area="MAL" list="false" name="Composite"/>
					</mal:extends>
					<mal:field canBeNull="false" comment="The X component of the magetic field in microTesla." name="x">
						<mal:type area="MAL" list="false" name="Double"/>
					</mal:field>
					<mal:field canBeNull="false" comment="The Y component of the magetic field in microTesla." name="y">
						<mal:type area="MAL" list="false" name="Double"/>
					</mal:field>
					<mal:field canBeNull="false" comment="The Z component of the magetic field in microTesla." name="z">
						<mal:type area="MAL" list="false" name="Double"/>
					</mal:field>
				</mal:composite>
			</mal:dataTypes>
			<com:features/>
		</mal:service>
		<mal:service comment="The Power Control service provides a generic mechanism to list the available power units in a spacecraft platform and to enable/disable them." name="PowerControl" number="7" xsi:type="com:ExtendedServiceType">
			<mal:capabilitySet comment="" number="1">
				<mal:requestIP comment="The listUnitsAvailable operation allows a consumer to request the list of the units available and their respective status." name="listUnitsAvailable" number="1" supportInReplay="false">
					<mal:messages>
						<mal:request comment="">
              <mal:field canBeNull="true" comment="The names field holds the name of the units." name="names">
                <mal:type area="MAL" list="true" name="Identifier"/>
              </mal:field>
            </mal:request>
						<mal:response comment="">
              <mal:field canBeNull="true" comment="The unitObjInstIds field holds the object instance identifier of the units." name="unitObjInstIds">
                <mal:type area="MAL" list="true" name="Long"/>
              </mal:field>
              <mal:field canBeNull="true" comment="The enabled field holds the status of the unit. True if enabled, false if disabled." name="enabled">
                <mal:type area="MAL" list="true" name="Boolean"/>
              </mal:field>
            </mal:response>
					</mal:messages>
				</mal:requestIP>
			</mal:capabilitySet>
			<mal:capabilitySet comment="" number="2">
				<mal:requestIP comment="The enableUnit operation allows a consumer to enable and disable a specific Unit. " name="enableUnit" number="2" supportInReplay="false">
					<mal:messages>
						<mal:request comment="">
							<mal:field canBeNull="true" comment="The enable field holds the boolean value to enable or disable the unit." name="enable">
								<mal:type area="MAL" list="false" name="Boolean"/>
							</mal:field>
							<mal:field canBeNull="true" comment="The unitObjInstId field holds the object instance identifier of the unit to be enabled or disabled." name="unitObjInstId">
								<mal:type area="MAL" list="false" name="Long"/>
							</mal:field>
						</mal:request>
						<mal:response comment=""/>
					</mal:messages>
				</mal:requestIP>
			</mal:capabilitySet>
			<com:features/>
		</mal:service>
		<mal:dataTypes>
			<mal:composite comment="The Vector3D holds a 3D Vector." name="Vector3D" shortFormPart="17">
				<mal:extends>
					<mal:type area="MAL" list="false" name="Composite"/>
				</mal:extends>
				<mal:field canBeNull="true" comment="The x component of the Vector. The unit shall be defined by each specific case." name="x">
					<mal:type area="MAL" list="false" name="Double"/>
				</mal:field>
				<mal:field canBeNull="true" comment="The y component of the Vector. The unit shall be defined by each specific case." name="y">
					<mal:type area="MAL" list="false" name="Double"/>
				</mal:field>
				<mal:field canBeNull="true" comment="The z component of the Vector. The unit shall be defined by each specific case." name="z">
					<mal:type area="MAL" list="false" name="Double"/>
				</mal:field>
			</mal:composite>
			<mal:composite comment="The WheelSpeed holds the speed of the wheels." name="WheelSpeed" shortFormPart="2">
				<mal:extends>
					<mal:type area="MAL" list="false" name="Composite"/>
				</mal:extends>
				<mal:field canBeNull="false" comment="Velocity of the wheels in rpm." name="velocity">
					<mal:type area="MAL" list="true" name="Double"/>
				</mal:field>
			</mal:composite>
			<mal:composite comment="The Quaternions holds the quaternion components." name="Quaternions" shortFormPart="16">
				<mal:extends>
					<mal:type area="MAL" list="false" name="Composite"/>
				</mal:extends>
				<mal:field canBeNull="true" comment="Quaternion component 1. Equivalent to the i component." name="q1">
					<mal:type area="MAL" list="false" name="Float"/>
				</mal:field>
				<mal:field canBeNull="true" comment="Quaternion component 2. Equivalent to the j component." name="q2">
					<mal:type area="MAL" list="false" name="Float"/>
				</mal:field>
				<mal:field canBeNull="true" comment="Quaternion component 3. Equivalent to the k component." name="q3">
					<mal:type area="MAL" list="false" name="Float"/>
				</mal:field>
				<mal:field canBeNull="true" comment="Quaternion component 4. Equivalent to the l component." name="q4">
					<mal:type area="MAL" list="false" name="Float"/>
				</mal:field>
			</mal:composite>
		</mal:dataTypes>
		<mal:errors>
			<mal:error comment="The device is currently in use." name="DEVICE_IN_USE" number="10509"/>
			<mal:error comment="The device is currently not available." name="DEVICE_NOT_AVAILABLE" number="10510"/>
		</mal:errors>
	</mal:area>
</mal:specification>




© 2015 - 2024 Weber Informatics LLC | Privacy Policy