320 likes | 407 Views
NPAL Datasheet. F . Torelli & P. Skrzypek CCSDS Spring Meeting 2013 16/04/2013. Contents. Introduction Describing functional interface Describing device-specific interface Describing packet interface Implementing device abstraction control procedure
E N D
NPAL Datasheet F. Torelli & P. SkrzypekCCSDS Spring Meeting 201316/04/2013
Contents • Introduction • Describing functional interface • Describing device-specific interface • Describing packet interface • Implementing device abstraction control procedure • Implementing device-specific access protocol • Summary
Introduction The NPAL device is a multi-function camera with the ability to perform horizon detection and star tracking. The device uses Space Wire link to communicate. The NPAL ICD lists over 23 different data packets. For the purpose of this presentation, Space Wire has been mapped on SOIS packet service. This presentation is focused on describing packets, SOIS interfaces and access protocols for this device. Due to the complexity of the device, only a subset of functionality is addressed in this presentation.
Functional interface <functional_interface> <interface> <!-- .. --> <acquire> <value_idtype="fi_image_acq"/> <valuetype="fi_image"/> <metadatatype="fi_bivalent"/> </acquire> </interface> <data_types> <!-- .. --> <sequencename="fi_image_acq"> <declarename="header"type="fi_id_header"> <constraintfield="id"> <optionname="Image"/> </constraint> </declare> </sequence> <arrayname="fi_image"type="fi_image_line"> <countconst="1024"/> </array> <arrayname="fi_image_line"type="fi_pixel_intensity_t"> <countconst="1024"/> </array> <intname="fi_pixel_intensity_t"> <constraints> <interval> <leftbound="closed"value="0"/> <rightbound="closed"value="255"/> </interval> </constraints> </int> </data_types> </functional_interface> Acquire Image Value ID Acquire Image, no arguments Value 1024x1024 matrix of integer values ranged 0..255 Meta data bivalent – success or failure
Functional interface <functional_interface> <interface> <!-- .. --> <acquire> <value_idtype="fi_temperature_acq"/> <valuetype="fi_temperature"/> <metadatatype="fi_bivalent"/> </acquire> </interface> <data_types> <!-- .. --> <sequencename="fi_temperature_acq"> <declarename="header"type="fi_id_header"> <constraintfield="id"> <optionname="Temperature"/> </constraint> </declare> <declarename="unit"type="fi_thermocouple"/> </sequence> <enumname="fi_thermocouple"> <options> <optionname="Optics"value="1"/> <optionname="APS"value="2"/> </options> </enum> <floatname="fi_temperature"> <constraints> <interval> <leftbound="closed"value="0"/> <rightbound="closed"value="1.4167911e32"/> </interval> </constraints> </float> </data_types> </functional_interface> Acquire Temperature Value ID Acquire Temperature, select one of the two thermocouples (APS, Optics) Value single float number ranged 0..1.4167911e32 Meta data bivalent – success or failure
Functional interface <functional_interface> <interface> <!-- .. --> <command> <value_idtype="fi_exposure_cmd"/> <valuetype="fi_exposure"/> <metadatatype="fi_bivalent"/> </command> </interface> <data_types> <!-- .. --> <sequencename="fi_exposure_cmd"> <declarename="header"type="fi_id_header"> <constraintfield="id"> <optionname="Exposure time"/> </constraint> </declare> </sequence> <floatname="fi_exposure"> <constraints> <interval> <leftbound="closed"value="0.000050"/> <rightbound="closed"value="0.100000"/> </interval> </constraints> </float> </data_types> </functional_interface> Command Exposure time Value ID Command Exposure time, no arguments Value single float argument ranged 0.050e-3..100.0e-3 Meta data bivalent – success or failure
Device-specific interface <device_specific_interface> <interface> <!-- .. --> <acquire> <value_idtype="di_image_acq"/> <valuetype="di_image"/> <metadatatype="di_bivalent"/> </acquire> </interface> <data_types> <!-- .. --> <sequencename="di_image_acq"> <declarename="header"type="di_id_header"> <constraintfield="id"> <optionname="Image"/> </constraint> </declare> </sequence> <arrayname="di_image"type="di_image_line"> <countconst="1024"/> </array> <arrayname="di_image_line"type="di_pixel_intensity"> <countconst="1024"/> </array> <intname="di_pixel_intensity"> <constraints> <interval> <leftbound="closed"value="0"/> <rightbound="closed"value="255"/> </interval> </constraints> </int> </data_types> </device_specific_interface> Acquire Image Value ID Acquire Image, no arguments Value 1024x1024 matrix of integer values ranged 0..255 Meta data bivalent – success or failure
Device-specific interface <device_specific_interface> <interface> <!-- .. --> <acquire> <value_idtype="di_temperature_acq"/> <valuetype="di_temperature"/> <metadatatype="di_bivalent"/> </acquire> </interface> <data_types> <!-- .. --> <sequencename="di_temperature_acq"> <declarename="header"type="di_id_header"> <constraintfield="id"> <optionname="Temperature"/> </constraint> </declare> <declarename="unit"type="di_thermocouple"/> </sequence> <enumname="di_thermocouple"> <options> <optionname="Optics"value="1"/> <optionname="APS"value="2"/> </options> </enum> <intname="di_temperature"> <constraints> <interval> <leftbound="closed"value="0"/> <rightbound="closed"value="65535"/> </interval> </constraints> </int> </data_types> </device_specific_interface > Acquire Temperature Value ID Acquire Temperature, select one of the two thermocouples (APS, Optics) Value single integer number ranged 0..65535 Meta data bivalent – success or failure
Device-specific interface <device_specific_interface> <interface> <!-- .. --> <command> <value_idtype="di_exposure_cmd"/> <valuetype="di_exposure"/> <metadatatype="di_bivalent"/> </command> </interface> <data_types> <!-- .. --> <sequencename="di_exposure_cmd"> <declarename="header"type="di_id_header"> <constraintfield="id"> <optionname="Exposure time"/> </constraint> </declare> </sequence> <enumname="di_exposure"> <options> <optionname="0.069ms"value="0"/> <optionname="0.082ms"value="1"/> <!-- .. --> <optionname="84.10ms"value="41"/> <optionname="100.0ms"value="42"/> </options> </enum> </data_types> </device_specific_interface> Command Exposure time Value ID Command Exposure time, no arguments Value single value from enumeration type Meta data bivalent – success or failure
Device-specific interface <device_specific_interface> <interface> <!-- .. --> <command> <value_idtype="di_speed_cmd"/> <valuetype="di_speed"/> <metadatatype="di_bivalent"/> </command> </interface> <data_types> <!-- .. --> <sequencename="di_speed_cmd"> <declarename="header"type="di_id_header"> <constraintfield="id"> <optionname="Set speed"/> </constraint> </declare> </sequence> <enumname="di_speed"> <options> <optionname="100 Mbps"value="0"/> <optionname="50 Mbps"value="1"/> <optionname="25 Mbps"value="2"/> <optionname="16.7 Mbps"value="3"/> <optionname="12.5 Mbps"value="4"/> <optionname="10 Mbps"value="5"/> </options> </enum> </data_types> </device_specific_interface> Command Link speed Value ID Command Link speed, no arguments Value single value from enumeration type Meta data bivalent – success or failure
Packet interface <packet_interface> <interface> <!-- .. --> <packet> <datatype="pi_tc_trk"/> </packet> </interface> <data_types> <!-- .. --> <sequencename="pi_tc_trk"> <declarename="header"type="pi_tc_header"> <constraintfield="data_header"> <constraintfield="service_type"> <constvalue="4"/> </constraint> </constraint> </declare> <declarename="window_start_row"type="pi_pixel_coord"/> <declarename="window_start_column"type="pi_pixel_coord"/> <declarename="commanded_exposure_time" type="pi_exposure_time"/> <declarename="tracking_option"type="pi_tracking_option"/> <declarename="footer"type="pi_tc_footer"/> </sequence> </data_types> </packet_interface> TC_TRK
Packet interface <packet_interface> <interface> <!-- .. --> <packet> <datatype="pi_tm_report"/> </packet> </interface> <data_types> <!-- .. --> <sequencename="pi_tm_report"> <declarename="header"type="pi_tm_header"> <constraintfield="data_header"> <constraintfield="service_type"> <constvalue="3"/> </constraint> </constraint> </declare> <declarename="event_code"type="pi_event_code"/> <declarename="tc_acceptance"type="pi_tc_acceptance"/> <declarename="previous_mode"type="pi_mode"/> <declarename="current_mode"type="pi_mode"/> <declarename="cause_of_mode_transition" type="pi_mode_transition_cause"/> <declarename="download_status"type="pi_download_status"/> <declarename="not_used"type="pi_fill8"/> <declarename="calibration"type="pi_calibration_status"/> <declarename="error_code"type="pi_error_code"/> <declarename="fill1"type="pi_fill8"/> <declarename="fill2"type="pi_fill8"/> <declarename="fill3"type="pi_fill8"/> <declarename="footer"type="pi_tm_footer"/> </sequence> </data_types> </packet_interface> TM_REPORT
Acquire Temperature <device_abstraction_control_procedure> <!-- .. --> <request_handler> <variables> <declarename="dvs_id"type="fi_temperature_acq"/> <declarename="das_id"type="di_temperature_acq"/> <declarename="temperature_raw"type="di_temperature"/> <declarename="temperature_kelvin"type="fi_temperature"/> <declarename="dvs_meta"type="fi_bivalent"/> <declarename="das_meta"type="di_bicalent"/> </variables> <value_id> <variablename="dvs_id"/> </value_id> <value> <variablename="temperature_kelvin"/> </value> <metadata> <variablename="dvs_meta"/> </metadata> <process> <!-- see next slide --> </process> </request_handler> </device_abstraction_control_procedure> The following code attaches a process to the functional interface. This process will be executed each time the system receives ACQUIRE_FROM_DEVICE primitive with value_id matching fi_temperature_acq.
Acquire Temperature <compare> <subject> <variablename="dvs_id"><variablename="unit"/></variable> <subject> <equal> <reference> <constvalue="APS"/> </reference> <process> <copy> <destination> <variablename="das_id"/><variablename="unit"/></variable> </destination> <source> <constvalue="APS"/> </source> </copy> </process> </equal> <equal> <reference> <constvalue="Optics"/> </reference> <process> <copy> <destination> <variablename="das_id"/><variablename="unit"/></variable> </destination> <source> <constvalue="Optics"/> </source> </copy> </process> </equal> </compare>
Acquire Temperature <das_acquire> <value_id> <variablename="das_id"/> </value_id> <value> <variablename="temperature_raw"/> </value> <metadata> <variablename="das_meta"/> </metadata> <time_limit> <aliasname="das_timeout"/> </time_limit> <on_success> <!-- see next slide --> </on_success> <on_timeout> <!-- see next slide --> </on_timeout> </das_acquire>
Acquire Temperature <compare> <subject> <variablename="das_meta"/> </subject> <reference> <constvalue="success"/> </reference> <equal> <linear_calibration> <slope><constvalue="1"/></slope> <bias><constvalue="-100"/></bias> <input><variablename="temperature_raw"/></input> <output><variablename="temperature_kelvin"/></output> </linear_calibration> <copy> <destination> <variablename="dvs_meta"/> </destination> <source> <constvalue="success"/> </source> </copy> </equal> <not_equal> <copy> <destination> <variablename="dvs_meta"/> </destination> <source> <constvalue="failure"/> </source> </copy> </not_equal> </compare> <copy> <destination> <variablename="dvs_meta"/> </destination> <source> <constvalue="failure"/> </source> </copy>
Command Exposure time <device_specific_access_protocol> <!-- .. --> <request_handler> <variables> <declarename="id"type="di_exposure_cmd"/> <declarename="data"type="di_exposure"/> <declarename="meta"type="di_bivalent"/> <declarename="trk_packet"type="pi_tc_trk"/> <declarename="report_packet"type="pi_tm_report"/> </variables> <value_id> <variablename="id"/> </value_id> <value> <variablename="data"/> </value> <metadata> <variablename="meta"/> </metadata> <process> <!-- see next slides --> </process> </request_handler> </device_specific_access_protocol> The following code attaches a process to the device-specific interface. This process will be executed each time the system receives COMMAND_DEVICE primitive with value_id matching di_exposure_cmd.
Command Exposure time <copy> <destination> <variablename="trk_packet"/> <variablename="window_start_row"/> </variable> </destination> <source> <constvalue="0"/> </source> </copy> <copy> <destination> <variablename="trk_packet"/> <variablename="window_start_column"/> </variable> </destination> <source> <constvalue="0"/> </source> </copy> <copy> <destination> <variablename="trk_packet"/> <variablename="tracking_option"/> </variable> </destination> <source> <constvalue="normal"/> </source> </copy>
Command Exposure time <compare> <subject> <variablename="data"/> </subject> <equal> <reference> <constvalue="0.069ms"> </reference> <process> <copy> <destination> <variablename="trk_packet"> <variablename="commanded_exposure_time"/> </variable> </destination> <source> <constvalue="0.069ms"/> </source> </copy> </process> </equal> <equal> <reference> <constvalue="0.082ms"> </reference> <process> <copy> <destination> <variablename="trk_packet"> <variablename="commanded_exposure_time"/> </variable> </destination> <source> <constvalue="0.082ms"/> </source> </copy> </process> </equal>
Command Exposure time <equal> <reference> <constvalue="84.10ms"> </reference> <process> <copy> <destination> <variablename="trk_packet"> <variablename="commanded_exposure_time"/> </variable> </destination> <source> <constvalue="84.10ms"/> </source> </copy> </process> </equal> <equal> <reference> <constvalue="100.0ms"> </reference> <process> <copy> <destination> <variablename="trk_packet"> <variablename="commanded_exposure_time"/> </variable> </destination> <source> <constvalue="100.0ms"/> </source> </copy> </process> </equal> </compare>
Command Exposure time <packet_send> <destination_address> <aliasname="npal_addr"/> </destination_address> <data> <variablename="trk_packet"/> </data> </packet_send> <wait_for_packets> <scenario> <minterm> <packet_receive> <source_address> <aliasname="npal_addr"/> </source_address> <data> <variablename="report_packet"/> </data> </packet_receive> </minterm> <process> <!-- see next slide --> </process> </scenario> <timeout> <time_limit> <aliasname="npal_timeout"/> </time_limit> <process> <!-- see next slide --> </process> </timeout> </wait_for_packets>
Command Exposure time <compare> <subject> <variablename="report_packet"> <variablename="tc_acceptance"/> </variable> </subject> <reference> <constvalue="accepted"/> </reference> <equal> <copy> <destination> <variablename="meta"/> </destination> <source> <constvalue="success"/> </source> </copy> </equal> <not_equal> <copy> <destination> <variablename="meta"/> </destination> <source> <constvalue="failure"/> </source> </copy> </not_equal> </compare> <copy> <destination> <variablename="meta"/> </destination> <source> <constvalue="failure"/> </source> </copy>
Summary • Described sample SOIS functional interface and device-specific interface • Described 2 NPAL packets available from SOIS subnetwork • Implemented one process of the device-specific access protocol • Implemented one process of the device abstraction control procedure • The attached XML document contains description of all NPAL packets and all sample SOIS interfaces • Attached EDS may not be perfectly cnsistent. Back-propagating all updates to the EDS schema is very time consuming.