362 lines
11 KiB
C++
362 lines
11 KiB
C++
/*==================================================================================================
|
|
|
|
FILE INFORMATION HEADER
|
|
|
|
USED IN PROJECT: S1003065-01 PPS-TX/S1003067-01 PPS-RX software application
|
|
ITEM TYPE: Source Code
|
|
ITEM NAME: xlru_pps.h
|
|
ITEM DESCRIPTION: This file contains the list of class and interface definitions for the PPS / REP connection
|
|
TARGET: ATSAM4LC8B / ATSAM4LS8B
|
|
DOC REFERENCES: SWDS1003065-01/SWDS1003065-01
|
|
PROGRAMMER NAME(S): A.Chessa, L.Vallongo
|
|
COPYRIGHT: LEONARDO-FINMECCANICA S.p.A
|
|
REVISION HISTORY:
|
|
- 01.00: first release
|
|
|
|
====================================================================================================
|
|
© Copyright LEONARDO S.p.A.. All rights reserved
|
|
Any right of industrial and intellectual property on this document,
|
|
and of technical Know-how herein contained, belongs to
|
|
LEONARDO S.p.A. and/or third parties.
|
|
According to the law, it is forbidden to disclose, reproduce or however
|
|
use this document and any data herein contained for any use without
|
|
previous written authorization by LEONARDO S.p.A.
|
|
==================================================================================================*/
|
|
|
|
#ifndef XLRU_PPS_H_
|
|
#define XLRU_PPS_H_
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "xlru_message_def.h"
|
|
|
|
#define DEF_OPERATIVE 0
|
|
#define DEF_HAZARD 0
|
|
#define DEF_RADOME 0
|
|
|
|
//ASCII for message
|
|
#define PPS_CONTROL_MSG 'O'
|
|
#define PPS_GENERAL_STATUS 'S'
|
|
#define PPS_TEST_REPORTS 't'
|
|
#define PPS_OPERATIVE_CMD_IDLE 'I'
|
|
#define PPS_OPERATIVE_CMD_GO 'G'
|
|
#define PPS_OPERATIVE_CMD_T 'T'
|
|
#define PPS_HAZARD_OVERRIDE_NO 'N'
|
|
#define PPS_HAZARD_OVERRIDE 'O'
|
|
#define PPS_RADOME_BOUNCE_TEST_NO 'N'
|
|
#define PPS_RADOME_BOUNCE_TEST 'R'
|
|
#define PPS_SPARE '_'
|
|
#define PPS_GET_MESSAGE 'T'
|
|
|
|
//Response
|
|
#define PPS_MODE_IDLE 'i'
|
|
#define PPS_MODE_POWERUP 'P'
|
|
#define PPS_MODE_STANDBY 'S'
|
|
#define PPS_MODE_IBIT 'I'
|
|
#define PPS_MODE_GO 'G'
|
|
#define PPS_HEALTH_GO 'G'
|
|
#define PPS_HEALTH_WARNING 'W'
|
|
#define PPS_HEALTH_FAIL 'F'
|
|
#define PPS_WOW_NOT_ACTIVE 'w'
|
|
#define PPS_WOW_ACTIVE 'W'
|
|
#define PPS_WOW_FAIL 'F'
|
|
#define PPS_HAZARD_NO '_'
|
|
#define PPS_HAZARD_1 'h'
|
|
#define PPS_HAZARD_2 'H'
|
|
#define PPS_LIMIT_NO '_'
|
|
#define PPS_LIMIT_CURRENT 'C'
|
|
|
|
//INDEX position
|
|
#define PPS_OPERATIVE_CMD_IDX 1
|
|
#define PPS_HAZARD_OVERRIDE_IDX 2
|
|
#define PPS_RADOME_BOUNCE_TEST_IDX 3
|
|
|
|
//index for response message
|
|
#define PPS_MODE_STATUS_INDEX 5
|
|
#define PPS_HEALTH_STATUS_INDEX 6
|
|
#define PPS_WOW_STATUS_INDEX 7
|
|
#define PPS_HAZARD_STATUS_INDEX 8
|
|
#define PPS_CURR_LIMIT_STATUS_INDEX 9
|
|
#define PPS_BYTES1_INDEX 10
|
|
#define PPS_BYTES2_INDEX 12
|
|
#define PPS_BYTES3_INDEX 14
|
|
#define PPS_BYTES4_INDEX 16
|
|
#define PPS_BYTES5_INDEX 18
|
|
#define PPS_BYTES6_INDEX 20
|
|
#define PPS_RX_VERSION_INDEX 22
|
|
#define PPS_RX_RELEASE_INDEX 24
|
|
#define PPS_TX1_VERSION_INDEX 26
|
|
#define PPS_TX1_RELEASE_INDEX 28
|
|
#define PPS_TX2_VERSION_INDEX 30
|
|
#define PPS_TX2_RELEASE_INDEX 32
|
|
#define PPS_TX3_VERSION_INDEX 34
|
|
#define PPS_TX3_RELEASE_INDEX 36
|
|
#define PPS_RX_TEMP_INDEX 38
|
|
#define PPS_TX1_TEMP_INDEX 40
|
|
#define PPS_TX2_TEMP_INDEX 42
|
|
#define PPS_TX3_TEMP_INDEX 44
|
|
#define PPS_LIQUID_INLET_TEMP_IDX 46
|
|
#define PPS_LIQUID_OUTLET_TEMP_IDX 48
|
|
#define PPS_CURR_IDX 50
|
|
#define PPS_TX1_CURR_IDX 52
|
|
#define PPS_TX2_CURR_IDX 54
|
|
#define PPS_TX3_CURR_IDX 56
|
|
#define PPS_TX1_CURR_MAX_IDX 58 //aggiunte nuove info
|
|
#define PPS_TX2_CURR_MAX_IDX 60 //correnti medie e correnti massime per ogni tx
|
|
#define PPS_TX3_CURR_MAX_IDX 62
|
|
#define PPS_TX1_CURR_AVG_IDX 64
|
|
#define PPS_TX2_CURR_AVG_IDX 66
|
|
#define PPS_TX3_CURR_AVG_IDX 68
|
|
#define PPS_PHASER_MIN_IDX 70 //aggiunte nuove info
|
|
#define PPS_PHASES_MIN_IDX 72 //phase R,S, min e max
|
|
#define PPS_PHASET_MIN_IDX 74
|
|
#define PPS_PHASER_MAX_IDX 76
|
|
#define PPS_PHASES_MAX_IDX 78
|
|
#define PPS_PHASET_MAX_IDX 80
|
|
|
|
#define PPS_CHECKSUM_MIN_INDEX 58 //per compatibilità, lunghezza minima
|
|
|
|
#define PPS_CHECKSUM_INDEX 82 //da verificare, passato da 58 a 82 per aggiunta nuove correnti.
|
|
|
|
|
|
#define PPS_CURR_LSB (double)0.1
|
|
|
|
enum pps_mode_status_t
|
|
{
|
|
PPSIdle = 'i',
|
|
PPSPowerUp = 'P',
|
|
PPSStandBy = 'S',
|
|
PPSOnGo = 'G',
|
|
PPSIBIT = 'I'
|
|
};
|
|
|
|
enum pps_health_status_t
|
|
{
|
|
PPSHealthGo = 'G',
|
|
PPSHealthWarning = 'W',
|
|
PPSHealthFail = 'F'
|
|
|
|
};
|
|
|
|
enum pps_wow_tellback_status_t
|
|
{
|
|
PPSWowNotActive = 'w',
|
|
PPSWowActive = 'W',
|
|
PPSWowFail = 'F'
|
|
};
|
|
|
|
enum pps_hazard_status_t
|
|
{
|
|
PPSNoHazard = '_',
|
|
PPSHazard1 = 'h',
|
|
PPSHazard2 = 'H'
|
|
};
|
|
|
|
enum pps_current_limitation_status_t
|
|
{
|
|
PPSNoCurrentLimitation = '_',
|
|
PPSCurrentLimitation = 'C'
|
|
};
|
|
|
|
struct pps_status_byte1_holdUp_boards_t
|
|
{
|
|
unsigned int b1_LP_under_voltage_fail : 1;
|
|
unsigned int b2_HP_under_voltage_fail : 1;
|
|
unsigned int b3_spare : 1;
|
|
unsigned int b4_spare : 1;
|
|
unsigned int b5_spare : 1;
|
|
unsigned int b6_AC_power_umbalance_fail_ph1 : 1;
|
|
unsigned int b7_AC_power_umbalance_fail_ph2 : 1;
|
|
unsigned int b8_AC_power_umbalance_fail_ph3 : 1;
|
|
|
|
}__attribute__((packed));
|
|
|
|
struct pps_status_byte2_rx_board_t
|
|
{
|
|
unsigned int b1_rx_link_fail : 1;
|
|
unsigned int b2_rx_input_dc_overcurrent_fail : 1;
|
|
unsigned int b3_rx_rectified_dc_under_voltage_fail_ac_power_loss : 1;
|
|
unsigned int b4_spare : 1;
|
|
unsigned int b5_output_rx_over_voltage_fail : 1;
|
|
unsigned int b6_output_rx_under_voltage_fail : 1;
|
|
unsigned int b7_rx_hazard : 1;
|
|
unsigned int b8_rx_hazard : 1;
|
|
|
|
}__attribute__((packed));
|
|
|
|
struct pps_status_byte3_tx1_board_t
|
|
{
|
|
unsigned int b1_tx1_link_with_rx : 1;
|
|
unsigned int b2_tx1_input_dc_over_current_fail : 1;
|
|
unsigned int b3_tx1_rectified_dc_under_voltage_fail_270_uv : 1;
|
|
unsigned int b4_spare : 1;
|
|
//unsigned int b4_tx1_rectified_dc_over_voltage_fail : 1;
|
|
unsigned int b5_output_tx1_over_voltage_fail : 1;
|
|
unsigned int b6_output_tx1_under_voltage_fail : 1;
|
|
unsigned int b7_tx1_hazard : 1;
|
|
unsigned int b8_tx1_hazard : 1;
|
|
|
|
}__attribute__((packed));
|
|
|
|
struct pps_status_byte4_tx2_board_t
|
|
{
|
|
unsigned int b1_tx2_link_with_rx : 1;
|
|
unsigned int b2_tx2_input_dc_over_current_fail : 1;
|
|
unsigned int b3_tx2_rectified_dc_under_voltage_fail_270_uv : 1;
|
|
unsigned int b4_spare : 1;
|
|
//unsigned int b4_tx2_rectified_dc_over_voltage_fail : 1;
|
|
unsigned int b5_output_tx2_over_voltage_fail : 1;
|
|
unsigned int b6_output_tx2_under_voltage_fail : 1;
|
|
unsigned int b7_tx2_hazard : 1;
|
|
unsigned int b8_tx2_hazard : 1;
|
|
|
|
}__attribute__((packed));
|
|
|
|
struct pps_status_byte5_tx3_board_t
|
|
{
|
|
unsigned int b1_tx3_link_with_rx : 1;
|
|
unsigned int b2_tx3_input_dc_over_current_fail : 1;
|
|
unsigned int b3_tx3_rectified_dc_under_voltage_fail_270_uv : 1;
|
|
unsigned int b4_spare : 1;
|
|
//unsigned int b4_tx3_rectified_dc_over_voltage_fail : 1;
|
|
unsigned int b5_output_tx3_over_voltage_fail : 1;
|
|
unsigned int b6_output_tx3_under_voltage_fail : 1;
|
|
unsigned int b7_tx3_hazard : 1;
|
|
unsigned int b8_tx3_hazard : 1;
|
|
|
|
}__attribute__((packed));
|
|
|
|
struct pps_status_byte6_general_t
|
|
{
|
|
unsigned int b1_wow_tellback_1 : 1;
|
|
unsigned int b2_wow_tellback_2 : 1;
|
|
unsigned int b3_wow_tellback_3 : 1;
|
|
unsigned int b4_spare : 1;
|
|
unsigned int b5_spare : 1;
|
|
unsigned int b6_spare : 1;
|
|
unsigned int b7_spare : 1;
|
|
unsigned int b8_spare : 1;
|
|
|
|
}__attribute__((packed));
|
|
|
|
|
|
class xlru_pps
|
|
{
|
|
private:
|
|
|
|
struct xlru_pps_command_t
|
|
{
|
|
unsigned int operativeCmd; // 0 -> 'I', 1 -> 'G'. 2 -> 'T'
|
|
unsigned int hazardOverride; // 0 -> 'N', 1 -> 'O'
|
|
unsigned int radomeBounce_Test; // 0 -> 'N', 1 -> 'R'
|
|
int mode;
|
|
};
|
|
|
|
static xlru_pps_command_t xlru_pps_command;
|
|
|
|
struct xlru_pps_status_t
|
|
{
|
|
xlru_unit_status_t status;
|
|
bool warning;
|
|
bool wow; //Weight-on-Wheel
|
|
|
|
pps_mode_status_t mode_status;
|
|
pps_health_status_t health_status;
|
|
pps_wow_tellback_status_t wow_tellback_status;
|
|
pps_hazard_status_t hazard_status;
|
|
pps_current_limitation_status_t current_limitation_status;
|
|
|
|
pps_status_byte1_holdUp_boards_t byte1_holdUp_boards;
|
|
pps_status_byte2_rx_board_t byte2_rx_board;
|
|
pps_status_byte3_tx1_board_t byte3_tx1_board;
|
|
pps_status_byte4_tx2_board_t byte4_tx2_board;
|
|
pps_status_byte5_tx3_board_t byte5_tx3_board;
|
|
pps_status_byte6_general_t byte6_general;
|
|
|
|
unsigned int rx_board_version;
|
|
unsigned int rx_board_release;
|
|
unsigned int tx1_board_version;
|
|
unsigned int tx1_board_release;
|
|
unsigned int tx2_board_version;
|
|
unsigned int tx2_board_release;
|
|
unsigned int tx3_board_version;
|
|
unsigned int tx3_board_release;
|
|
|
|
int rx_board_temp;
|
|
int tx1_board_temp;
|
|
int tx2_board_temp;
|
|
int tx3_board_temp;
|
|
int liquid_inlet_temp;
|
|
int liquid_outlet_temp;
|
|
|
|
float curr_42v;
|
|
float tx_curr[3];
|
|
|
|
bool tx_curr_max_valid;
|
|
float tx_curr_max[3];
|
|
bool tx_curr_avg_valid;
|
|
float tx_curr_avg[3];
|
|
|
|
float rx_phase_min[3];
|
|
float rx_phase_max[3];
|
|
};
|
|
|
|
public:
|
|
|
|
static xlru_pps_status_t xlru_pps_status;
|
|
|
|
static xlru_counter_t xlru_counter;
|
|
|
|
static char xlru_pps_fcs_prev; //fcs previous
|
|
|
|
//****************************************************
|
|
// MASTER - from EIF TO PPS -
|
|
// SET MESSAGE - PPS Operative Control Msg
|
|
// GET MESSAGE
|
|
|
|
static void pps_header_master(void);
|
|
static void pps_get_message_payload_master(void);
|
|
static void pps_set_message_payload_master(void);
|
|
static char* pps_get_message_master(void);
|
|
static char* pps_set_message_master(void);
|
|
static void pps_test_status_payload_master(void);
|
|
|
|
static char *pps_getStringTx(void);
|
|
static char *pps_getStringRx(void);
|
|
|
|
static void pps_setStringTx(char *txt);
|
|
static void pps_setStringRx(char *txt);
|
|
|
|
static void pps_reset_buffer_TX_RX(void);
|
|
static void init(void);
|
|
|
|
static unsigned int get_pps_operativeCmd(); // 0 -> 'I', 1 -> 'G'. 2 -> 'T'
|
|
static unsigned int get_pps_hazardOverride(); // 0 -> 'N', 1 -> 'O'
|
|
static unsigned int get_pps_radomeBounce(); // 0 -> 'N', 1 -> 'R'
|
|
|
|
static void set_pps_operative_cmd(int value);
|
|
static void set_pps_hazard_override(int value);
|
|
static void set_pps_radome_bounce(int value);
|
|
|
|
static int xlru_pps_command_message_decoder(char* buffer);
|
|
|
|
static void xlru_display(int (*print_func)(const char*, ...));
|
|
static void xlru_display_compact(int (*print_func)(const char*, ...));
|
|
|
|
static void xlru_add_error(int n_error); //error into last decode response message
|
|
static void xlru_add_rx(int n_rx); //response messages
|
|
static void xlru_add_rx_error(int n_error); //response messages with error
|
|
static void xlru_add_no_rx(int n_error); //count messages without response
|
|
static void xlru_set_last_error(char *last_error); //report last error
|
|
static void xlru_set_last_rx(char *last_rx); //report last received message
|
|
static void xlru_set_last_tx(char *last_tx); //report last trasmitted message
|
|
|
|
static char* xlru_get_last_error();
|
|
static char* xlru_get_last_rx();
|
|
static char* xlru_get_last_tx();
|
|
|
|
static char* pps_set_test_status_master(void);
|
|
};
|
|
|
|
#endif /* XLRU_PPS_H_ */
|