200 lines
8.2 KiB
C
200 lines
8.2 KiB
C
/*------------------------------------------------------------------------------
|
|
|
|
Copyright (C) 1998 : Space Systems Finland Ltd.
|
|
|
|
Space Systems Finland Ltd (SSF) allows you to use this version of
|
|
the DEBIE-I DPU software for the specific purpose and under the
|
|
specific conditions set forth in the Terms Of Use document enclosed
|
|
with or attached to this software. In particular, the software
|
|
remains the property of SSF and you must not distribute the software
|
|
to third parties without written and signed authorization from SSF.
|
|
|
|
System Name: DEBIE DPU SW
|
|
Subsystem : DAS
|
|
Module : tm_data.h
|
|
|
|
The Telemetry Data Structure.
|
|
|
|
Based on the SSF file tm_data.h, rev 1.22, Mon May 31 10:10:12 1999.
|
|
|
|
- * --------------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef TM_DATA_H
|
|
#define TM_DATA_H
|
|
|
|
#include "keyword.h"
|
|
|
|
#include "dpu_ctrl.h"
|
|
#include "su_ctrl.h"
|
|
|
|
#include "target_tm_data.h"
|
|
|
|
#define NUM_CLASSES 10
|
|
#define NUM_TEMP 2
|
|
#define NUM_NOT_USED (4 + 0x70 - 0x6A)
|
|
|
|
#define DPU_SELF_TEST 0
|
|
#define STAND_BY 1
|
|
#define ACQUISITION 2
|
|
|
|
#define MODE_BITS_MASK 3
|
|
|
|
/* Definitions related to error indicating bits in mode status register: */
|
|
#define SUPPLY_ERROR 0x80
|
|
#define DATA_MEMORY_ERROR 0x40
|
|
#define PROGRAM_MEMORY_ERROR 0x20
|
|
#define MEMORY_WRITE_ERROR 0x10
|
|
#define ADC_ERROR 0x04
|
|
|
|
|
|
/* Definitions related to error indicating bits in SU status register: */
|
|
#define HV_SUPPLY_ERROR 0x80
|
|
#define LV_SUPPLY_ERROR 0x40
|
|
#define TEMPERATURE_ERROR 0x20
|
|
#define SELF_TEST_ERROR 0x10
|
|
#define HV_LIMIT_ERROR 0x08
|
|
#define LV_LIMIT_ERROR 0x04
|
|
#define SUPPLY_VOLTAGE_MASK 0x03
|
|
|
|
/* Used when error indiacting bits are cleared. */
|
|
|
|
|
|
|
|
/* Definitions related to error indicating bits in error status register: */
|
|
#define CHECKSUM_ERROR 0x08
|
|
#define WATCHDOG_ERROR 0x04
|
|
#define OVERALL_SU_ERROR 0xF0
|
|
/* Used to indicate error in all of the SUs. */
|
|
|
|
#define ERROR_STATUS_OFFSET 0x10
|
|
/* Used when SU error indicating bit is selected. */
|
|
|
|
|
|
/* Definitions related to error indicating bits in software error register: */
|
|
#define MEASUREMENT_ERROR 0x01
|
|
#define OS_START_SYSTEM_ERROR 0x02
|
|
#define OS_WAIT_ERROR 0x04
|
|
#define OS_SET_SLICE_ERROR 0x08
|
|
|
|
|
|
#define NUM_QCOEFF 5
|
|
/* Number of Quality Coefficients. */
|
|
|
|
/* Sensor Unit low power and TC settings : */
|
|
|
|
typedef struct {
|
|
unsigned char plus_5_voltage; /* byte 1 */
|
|
unsigned char minus_5_voltage; /* byte 2 */
|
|
unsigned char plasma_1_plus_threshold; /* byte 3 */
|
|
unsigned char plasma_1_minus_threshold; /* byte 4 */
|
|
unsigned char piezo_threshold; /* byte 5 */
|
|
unsigned char plasma_1_plus_classification; /* byte 6 */
|
|
unsigned char plasma_1_minus_classification; /* byte 7 */
|
|
unsigned char piezo_1_classification; /* byte 8 */
|
|
unsigned char piezo_2_classification; /* byte 9 */
|
|
unsigned char plasma_2_plus_classification; /* byte 10 */
|
|
unsigned char plasma_1_plus_to_minus_max_time; /* byte 11 */
|
|
unsigned char plasma_1_plus_to_piezo_min_time; /* byte 12 */
|
|
unsigned char plasma_1_plus_to_piezo_max_time; /* byte 13 */
|
|
unsigned char plasma_1_minus_to_piezo_min_time; /* byte 14 */
|
|
unsigned char plasma_1_minus_to_piezo_max_time; /* byte 15 */
|
|
} SU_settings_t;
|
|
|
|
/* TM data registers : */
|
|
|
|
typedef struct {
|
|
unsigned char error_status; /* reg 0 */
|
|
unsigned char mode_status; /* reg 1 */
|
|
uint16_t TC_word; /* reg 2 - 3 */
|
|
dpu_time_t TC_time_tag; /* reg 4 - 7 */
|
|
unsigned char watchdog_failures; /* reg 8 */
|
|
unsigned char checksum_failures; /* reg 9 */
|
|
unsigned char SW_version; /* reg 10 */
|
|
unsigned char isr_send_message_error; /* reg 11 */
|
|
unsigned char SU_status[NUM_SU]; /* reg 12 - 15 */
|
|
unsigned char SU_temperature[NUM_SU][NUM_TEMP]; /* reg 16 - 23 */
|
|
unsigned char DPU_plus_5_digital; /* reg 24 */
|
|
unsigned char os_send_message_error; /* reg 25 */
|
|
unsigned char os_create_task_error; /* reg 26 */
|
|
unsigned char SU_plus_50; /* reg 27 */
|
|
unsigned char SU_minus_50; /* reg 28 */
|
|
unsigned char os_disable_isr_error; /* reg 29 */
|
|
unsigned char not_used_1; /* reg 30 */
|
|
SU_settings_t sensor_unit_1; /* reg 31 - 45 */
|
|
unsigned char os_wait_error; /* reg 46 */
|
|
SU_settings_t sensor_unit_2; /* reg 47 - 61 */
|
|
unsigned char os_attach_interrupt_error; /* reg 62 */
|
|
SU_settings_t sensor_unit_3; /* reg 63 - 77 */
|
|
unsigned char os_enable_isr_error; /* reg 78 */
|
|
SU_settings_t sensor_unit_4; /* reg 79 - 93 */
|
|
code_address_t failed_code_address; /* reg 94 - 95 */
|
|
data_address_t failed_data_address; /* reg 96 - 97 */
|
|
uint16_t SU_hits[NUM_SU]; /* reg 98 - 105 */
|
|
tm_dpu_time_t time; /* reg 106 - 109 */
|
|
unsigned char software_error; /* reg 110 */
|
|
unsigned char hit_budget_exceedings; /* reg 111 */
|
|
unsigned char coefficient[NUM_QCOEFF]; /* reg 112 - 116 */
|
|
unsigned char not_used; /* reg 117 */
|
|
|
|
/* The last register of telemetry data should be 'not_used'. */
|
|
/* This is necessary for correct operation of telemetry */
|
|
/* retrieving TCs i.e. number of bytes should be even. */
|
|
|
|
} telemetry_data_t;
|
|
|
|
extern EXTERNAL telemetry_data_t telemetry_data;
|
|
|
|
/* Hit trigger event record : */
|
|
|
|
typedef struct {
|
|
unsigned char quality_number; /* byte 0 */
|
|
unsigned char classification; /* byte 1 */
|
|
unsigned char SU_number; /* byte 2 */
|
|
tm_dpu_time_t hit_time; /* byte 3 - 6 */
|
|
unsigned char SU_temperature_1; /* byte 7 */
|
|
unsigned char SU_temperature_2; /* byte 8 */
|
|
tm_ushort_t plasma_1_plus; /* byte 9 - 10 */
|
|
tm_ushort_t plasma_1_minus; /* byte 11 - 12 */
|
|
tm_ushort_t piezo_1; /* byte 13 - 14 */
|
|
tm_ushort_t piezo_2; /* byte 15 - 16 */
|
|
tm_ushort_t plasma_2_plus; /* byte 17 - 18 */
|
|
unsigned char rise_time; /* byte 19 */
|
|
signed char delay_1; /* byte 20 */
|
|
tm_ushort_t delay_2; /* byte 21 - 22 */
|
|
tm_ushort_t delay_3; /* byte 23 - 24 */
|
|
unsigned char checksum; /* byte 25 */
|
|
} event_record_t;
|
|
|
|
/* Science Data File : */
|
|
|
|
typedef struct {
|
|
unsigned short int length;
|
|
unsigned char event_counter[NUM_SU][NUM_CLASSES];
|
|
unsigned char not_used;
|
|
unsigned char counter_checksum;
|
|
event_record_t event[MAX_EVENTS];
|
|
} science_data_file_t;
|
|
|
|
extern EXTERNAL science_data_file_t
|
|
LOCATION( SCIENCE_DATA_START_ADDRESS ) science_data;
|
|
|
|
extern uint_least16_t EXTERNAL max_events;
|
|
/* This variable is used to speed up certain */
|
|
/* Functional Test by adding the possibility */
|
|
/* to restrict the amount of events. */
|
|
/* It is initialised to value MAX_EVENTS at */
|
|
/* Boot. */
|
|
|
|
extern void RecordEvent( void );
|
|
/* This function increments proper event counter and stores */
|
|
/* the new event record to the science data memory, if there */
|
|
/* is free place or events with lower or equal quality number */
|
|
|
|
|
|
extern void ClearEvents( void );
|
|
/* Cleares the event counters and the quality numbers of */
|
|
/* the event records in the science data memory */
|
|
|
|
#endif
|