/*
 * @file exo_ahw_al_thruster_common.h
 *
 * @brief This file has structure declaration and function declaration
 *
 * @copyright Copyright 2023 Antaris, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <stdint.h>
#include "exo_io_al_common.h"
#include "exo_hal_common.h"
#include "exo_ahw_al_common.h"

#ifndef DRIVERS_EXO_HAL_DRIVER_FW_EXO_AHW_AL_DRIVER_API_EXO_AHW_AL_COMMON_MORPHEUS_MULTIFEEP_INC_EXO_AHW_AL_MORPHEUS_MULTIFEEP_COMMON_H_
#define DRIVERS_EXO_HAL_DRIVER_FW_EXO_AHW_AL_DRIVER_API_EXO_AHW_AL_COMMON_MORPHEUS_MULTIFEEP_INC_EXO_AHW_AL_MORPHEUS_MULTIFEEP_COMMON_H_

/**
 * @brief Part number of thruster sensor
 */
typedef struct
{
	ahw_al_gen_info ahw_gen_info;

}ahw_al_thruster_hdle;

/**
 * @brief Housekeeping 1 data of thruster sensor
 */
typedef struct
{
	uint32_t master_tm;				/*!< master time	        	*/
	uint8_t sts;		        	/*!< status 		    		*/
	int8_t temp;					/*!< temperature	    		*/
	uint16_t tot_force;				/*!< total force	    		*/
	uint16_t tot_azmth;				/*!< total azimuthal angle		*/
	uint8_t tot_polar;				/*!< total polar angle		   	*/
	uint16_t tot_pwr_cnsp;			/*!< total power consumption	*/
	uint8_t unreg_vol;				/*!< unregulated voltage   		*/
	uint16_t prplt;					/*!< propellant	    	   		*/
	uint16_t force_unit1;			/*!< force of unit1     	   	*/
	uint8_t azmth_unit1;			/*!< azimuthal angle of unit1   */
	uint16_t polar_unit1;			/*!< polar angle of unit1	    */
	uint16_t pwr_unit1;				/*!< power of unit1	    		*/
	uint8_t mode_unit1;				/*!< mode of unit1	    		*/
	uint16_t force_unit2;			/*!< force of unit2	    		*/
	uint8_t polar_unit2;			/*!< polar angle of unit2   	*/
	uint16_t azmth_unit2;			/*!< azimuthal angle of unit2	*/
	uint16_t pwr_unit2;				/*!< power of unit2		    	*/
	uint8_t mode_unit2;				/*!< mode of unit2  			*/

}al_thruster_housekeeping1;

/**
 * @brief Housekeeping 2 data of thruster sensor
 */
typedef struct
{
	uint32_t bkpln_master_tm;			/*!< master time of backplane			*/
	uint8_t sts;		    			/*!< status		    					*/
	uint8_t rst_backplane;		    	/*!< backplane reset			    	*/
	uint16_t pwr;		    			/*!< power		    					*/
	uint16_t unreg_vol;			    	/*!< unregulated voltage				*/
	uint32_t unit_master_tm;			/*!< master time of unit				*/
	uint8_t mode;		    			/*!< mode		    					*/
	uint16_t dev_on_sts;		    	/*!< device on status					*/
	uint8_t rst_sts_unit;		    	/*!< reset status of unit		    	*/
	int8_t temp;		    			/*!< temperature	    				*/
	uint16_t prplt;		    			/*!< propellant		    				*/
	uint16_t force;		    			/*!< force		    					*/
	uint16_t azmth; 					/*!< azimuthal angle		    		*/
	uint8_t polar;		    			/*!< polar angle		    			*/
	uint16_t unregu_vol;		    	/*!< unregulated voltage		    	*/
	uint32_t calib_data[7]; 			/*!< calibration value		    		*/
	uint8_t heat_err;		    		/*!< heater error		    			*/
	uint8_t heat_duty;		    		/*!< heater duty cycle			    	*/
	int8_t heat_temp;		    		/*!< heater temperature			    	*/
	int8_t heat_targ_temp;		    	/*!< heater target temperature			*/
	uint16_t emit_vol;			    	/*!< emitter voltage			    	*/
	uint16_t emit_cur;			    	/*!< emitter current			    	*/
	uint16_t emit_ip_cur;	    		/*!< emitter current			    	*/
	uint16_t ext1_vol;		    		/*!< extractor1 voltage			    	*/
	uint16_t ext1_cur;		    		/*!< extractor1 current			    	*/
	uint16_t ext1_ip_cur;	    		/*!< extractor1 input current			*/
	uint16_t ext2_vol;		    		/*!< extractor2 voltage			    	*/
	uint16_t ext2_cur;		    		/*!< extractor2 current		    		*/
	uint16_t ext2_ip_cur;	    		/*!< extractor2 input current			*/
	uint16_t ext3_vol;		    		/*!< extractor3 voltage			    	*/
	uint16_t ext3_cur;		    		/*!< extractor3 voltage			    	*/
	uint16_t ext3_ip_cur;	    		/*!< extractor3 voltage			    	*/
	uint16_t ext4_vol;		    		/*!< extractor4 voltage			    	*/
	uint16_t ext4_cur;		    		/*!< extractor4 voltage			    	*/
	uint16_t ext4_ip_cur;	    		/*!< extractor4 voltage			    	*/
	uint16_t ext5_vol;		    		/*!< extractor5 voltage			    	*/
	uint16_t ext5_cur;		    		/*!< extractor5 voltage			    	*/
	uint16_t ext5_ip_cur;	    		/*!< extractor5 voltage					*/
	uint16_t ext6_vol;		    		/*!< extractor6 voltage					*/
	uint16_t ext6_cur;		    		/*!< extractor6 voltage	    			*/
	uint16_t ext6_ip_cur;   			/*!< extractor6 voltage	    			*/
	uint16_t ext7_vol;	    			/*!< extractor7 voltage	    			*/
	uint16_t ext7_cur;	    			/*!< extractor7 voltage	    			*/
	uint16_t ext7_ip_cur;   			/*!< extractor7 voltage					*/
	uint16_t neut1_vol;	    			/*!< neutralizer1 voltage	    		*/
	uint16_t neut1_cur;	    			/*!< neutralizer1 current		    	*/
	uint16_t neut1_ip_cur;  			/*!< neutralizer1 input current			*/
	uint16_t neut1_ret_cur; 			/*!< neutralizer1 return current		*/
	uint16_t neut2_vol;	    			/*!< neutralizer2 voltage	    		*/
	uint16_t neut2_cur;	    			/*!< neutralizer2 current		    	*/
	uint16_t neut2_ip_cur;	    		/*!< neutralizer2 input current			*/
	uint16_t neut2_ret_cur;	    		/*!< neutralizer2 return current		*/
}al_thruster_housekeeping2;

/**
 * @brief Housekeeping 3 data of thruster sensor
 */
typedef struct
{
	uint8_t mjr_vers_no;			/*!< major version number		*/
	uint8_t mnr_vers_no;			/*!< minor version number		*/
	uint16_t ptch_vers_no;			/*!< patch version number		*/
	uint8_t brd_err_cde;			/*!< board error code			*/
	uint8_t brd_err_count;			/*!< board error count			*/
	uint8_t rst_sts;		        /*!< reset status	        	*/
	uint8_t brd_temp;		        /*!< board temperature	        */
	uint32_t strt_tm;				/*!< start time			    	*/
	uint32_t master_tm;				/*!< master time		    	*/

}al_thruster_sts;

/**
 * @brief This function initialize the thruster sensor
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_init();

/**
 * @brief This function is used to set the force (micro N)
 * @param[in] h_thruster - instance pointer of thruster
 * @param[in] system_id - id of the system
 * @param[in] force -
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_unit_set_frc(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,float force);

/**
 * @brief  This function is used to reset the system
 * @param[in] h_thruster - instance pointer of thruster
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_reset(ahw_al_thruster_hdle *h_thruster);

/**
 * @brief  This function is used to boot the system
 * @param[in] h_thruster - instance pointer of thruster
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_boot(ahw_al_thruster_hdle *h_thruster);

/**
 * @brief  This function is used to set the on/off status
 * @param[in] h_thruster - instance pointer of thruster
 * @param[in] system_id - id of the system
 * @param[in] on_off - set the  power ON and OFF
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_unit_set_pwr_on_off(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint8_t on_off);

/**
 * @brief  This function is used to set the device mode of the thruster
 * @param[in] h_thruster - instance pointer of thruster
 * @param[in] system_id - id of the system
 * @param[in] mode - set the mode
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_unit_set_mode(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint8_t mode);

/**
 * @brief  This function is used to set the mode of the system
 * @param[in] h_thruster - instance pointer of thruster
 * @param[in] system_id - id of the system
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts  ahw_al_thruster_set_mode(ahw_al_thruster_hdle *h_thruster,uint8_t system_id);

/**
 * @brief  This function is used to get the mode of the system
 * @param[in] h_thruster - in This stance pointer of thruster
 * @param[in] system_id - id of the system
 * @param[out] mode - decoded frame is updated in this pointer variable
 * @retval hal_ret_sts - returns the mode of the system
 */
hal_ret_sts ahw_al_thruster_get_mode(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint8_t *mode);

/**
 * @brief  This function is used to get the device mode of the thruster
 * @param[in] h_thruster - instance pointer of thruster
 * @param[in] system_id - id of the system
 * @param[out] mode - decoded frame is updated in this pointer variable
 * @retval hal_ret_sts - returns the success or error code.
 */
hal_ret_sts ahw_al_thruster_unit_get_mode(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint8_t *mode);

/**
 * @brief  This function is used to get the status
 * @param[in] h_thruster - instance pointer of thruster
 * @param[in] system_id - id of the system
 * @param[out] info - decoded frame is updated in this pointer variable
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_sys_sts(ahw_al_thruster_hdle *h_thruster, uint8_t system_id,al_thruster_sts *info);

/**
 * @brief  This function is used to get the serial number
 * @param[in] h_thruster - instance pointer of thruster
 * @param[in] system_id - id of the system
 * @param[out] srl_num - decoded frame is updated in this pointer variable
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_sys_srl_num(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint8_t *srl_num);

/**
 * @brief  This function is used to get the housekeeping1 data
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] info - decoded frame is updated in this structure pointer variable
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_housekeeping1_data(ahw_al_thruster_hdle *h_thruster,al_thruster_housekeeping1 *info);

/**
 * @brief  This function is used to get the housekeeping2 data
 * @param[in] h_thruster - instance pointer of thruster
 * @param[in] system_id - id of the system
 * @param[out] info - decoded frame is updated in this structure pointer variable
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_housekeeping2_data(ahw_al_thruster_hdle *h_thruster,al_thruster_housekeeping2 *info,uint8_t system_id);

/**
 * @brief  This function is used to get the housekeeping3 data
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] housekeeping3 - decoded frame is updated in this pointer variable
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_housekeeping3_data(ahw_al_thruster_hdle *h_thruster,uint8_t *housekeeping3);

/**
 * @brief  This function is used to get the power of the system
 * @param[in] h_thruster - instance pointer of thruster
 * @param[in] system_id - id of the system
 * @param[out] on_off - decoded frame is updated in this pointer variable
 * @retval hal_ret_sts - returns the ON or OFF status of of the system
 */
hal_ret_sts ahw_al_thruster_unit_get_pwr_on_off(ahw_al_thruster_hdle *h_thruster,uint8_t *on_off,uint8_t system_id);

/**
 * @brief  This function is used to get the force (micro N)
 * @param[in] h_thruster - instance pointer of thruster
 * @param[in] system_id - id of the system
 * @param[out] frc - decoded frame is updated in this pointer variable
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_unit_get_frc(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint8_t *frc);

/**
 * @brief  This function is used to get the master time from housekeeping1 data
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] mst_tm - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_mst_time(ahw_al_thruster_hdle *h_thruster,uint32_t *mst_tm);

/**
 * @brief  This function is used to get the the backplane temperature
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] bckpln_temp - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_bckplane_temp(ahw_al_thruster_hdle *h_thruster,uint8_t* bckpln_temp);

/**
 * @brief  This function is used to get total force of backplane
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] bckpln_frc - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_bckplane_tot_frc(ahw_al_thruster_hdle *h_thruster,uint16_t* bckpln_frc);

/**
 * @brief  This function is used to get total azimuthal angle
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] tot_azmth - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_tot_azimth_ang(ahw_al_thruster_hdle *h_thruster,uint16_t* tot_azmth);

/**
 * @brief  This function is used to get the total polar angle
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] tot_plr - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_tot_polar_ang(ahw_al_thruster_hdle *h_thruster,uint8_t *tot_plr);

/**
 * @brief  This function is used to get the total power consumption
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] pwr_cnsp - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_tot_pwr_cnsp(ahw_al_thruster_hdle *h_thruster,uint16_t *pwr_cnsp);

/**
 * @brief  This function is used to get the unregulated voltage
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] unreg_vol - pointer to a data
 *@retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_unreg_vol(ahw_al_thruster_hdle *h_thruster,uint8_t *unreg_vol);

/**
 * @brief  This function is used to get the remaining propellant
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] prplt - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_remn_prplt(ahw_al_thruster_hdle *h_thruster,uint16_t *prplt);

/**
 * @brief  This function is used to get the polar angle of the system
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] polar - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_unit_polar_ang(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint8_t *polar);

/**
 * @brief  This function is used to get the Azimuthal angle of system
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] azimuthal - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_unit_azimth_ang(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint16_t *azimuthal);

/**
 * @brief  This function is used to get the Power-Consumption of the system
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] power - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_unit_pwr(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint16_t *power);

/**
 * @brief  This function is used to get the reset status
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] rst_sts - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_rst_sts(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint8_t *rst_sts);

/**
 * @brief  This function is used to get the total power
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] pwr - pointer to a data
 * @param[out] system_id -  id of the system
 * @retval success or error code - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_tot_pwr(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint16_t *pwr);

/**
 * @brief  This function is used to get the unregulated voltage
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] unreg_vol - pointer to a data
 * @param[out] system_id -  id of the system
 * @retval hal_ret_sts- returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_unreg_volt(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint16_t *unreg_vol);

/**
 * @brief  This function is used to get the ON status of the device
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] dev_sts - pointer to a data
 * @param[out] system_id -  id of the system
 * @retval thal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_dev_on_sts(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint16_t *dev_sts);

/**
 * @brief  This function is used to get the reset status
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] rst_sts - pointer to a data
 * @param[out] system_id -  id of the system
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_unit_rst_sts(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint8_t *rst_sts);

/**
 * @brief  This function is used to get the board temperature
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] temp - pointer to a data
 * @param[out] system_id -  id of the system
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_brd_temp(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint8_t *temp);

/**
 * @brief  This function is used to get the remaining propellant
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] prplt - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_unit_prplt(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint16_t *prplt);

/**
 * @brief  This function is used to get the Unregulated voltage
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] unreg_vol - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_ureg_volt(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint16_t *unreg_vol);

/**
 * @brief  This function is used to get the calibration value
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] calib - pointer to the calibration data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_calib(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint32_t *calib);

/**
 * @brief  This function is used to get the heater error code
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] err_cde - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_heat_err_code(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint8_t *err_cde);

/**
 * @brief  This function is used to get the Duty cycle of the heater
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] duty_cycle - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_heat_duty_cycle(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint8_t *duty_cycle);

/**
 * @brief  This function is used to get the temperature of heater
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] temp - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_heat_temp(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,int8_t *temp);

/**
 * @brief  This function is used to get the target temperature of heater
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] trgt_temp - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_heat_trg_temp(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,int8_t *trgt_temp);

/**
 * @brief  This function is used to get the emitter voltage
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] emt_vol - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_emit_volt(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint16_t *emt_vol);

/**
 * @brief  This function is used to get the emitter current
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] emt_cur - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_emit_cur(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint16_t *emt_cur);

/**
 * @brief  This function is used to get the input emitter current
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] emt_ip_cur - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_emit_inp_cur(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint16_t *emt_ip_cur);

/**
 * @brief  This function is used to get the extractor voltage
 * @param[in] h_thruster - instance pointer of thruster
 * @param[in] ext_id -  id of the extractor
 * @param[out] system_id -  id of the system
 * @param[out] ext_vol - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_ext_volt(ahw_al_thruster_hdle *h_thruster,uint8_t ext_id,uint8_t system_id,uint16_t *ext_vol);

/**
 * @brief  This function is used to get the extractor current
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] ext_id -  id of the extractor
 * @param[out] system_id -  id of the system
 * @param[out] ext_cur - pointer to a data
 * @retval hal_ret_sts- returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_ext_cur(ahw_al_thruster_hdle *h_thruster,uint8_t ext_id,uint8_t system_id,uint16_t *ext_cur);

/**
 * @brief  This function is used to get the extractor input current
 * @param[in] h_thruster - instance pointer of thruster
 * @param[in] ext_id -  id of the extractor
 * @param[out] system_id -  id of the system
 * @param[out] ext_ip_cur - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_ext_inp_cur(ahw_al_thruster_hdle *h_thruster,uint8_t ext_id,uint8_t system_id,uint16_t *ext_ip_cur);

/**
 * @brief  This function is used to get the neutralizer voltage
 * @param[in] h_thruster - instance pointer of thruster
 * @param[in] neut_id -  id of the neutralizer
 * @param[out] system_id -  id of the system
 * @param[out] neut_vol - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_neutlr_volt(ahw_al_thruster_hdle *h_thruster,uint8_t neut_id,uint8_t system_id,uint16_t *neut_vol);

/**
 * @brief  This function is used to get the neutralizer current
 * @param[in] h_thruster - instance pointer of thruster
 * @param[in] neut_id -  id of the neutralizer
 * @param[out] system_id -  id of the system
 * @param[out] neut_cur - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_neutlr_cur(ahw_al_thruster_hdle *h_thruster,uint8_t neut_id,uint8_t system_id,uint16_t *neut_cur);

/**
 * @brief  This function is used to get the neutralizer input current
 * @param[in] h_thruster - instance pointer of thruster
 * @param[in] neut_id -  id of the neutralizer
 * @param[out] system_id -  id of the system
 * @param[out] neut_ip_cur - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_neutlr_inp_cur(ahw_al_thruster_hdle *h_thruster,uint8_t neut_id,uint8_t system_id,uint16_t *neut_ip_cur);

/**
 * @brief  This function is used to get the return neutralizer current
 * @param[in] h_thruster - instance pointer of thruster
 * @param[in] neut_id -  id of the neutralizer
 * @param[out] system_id -  id of the system
 * @param[out] neut_ret_cur - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_neutlr_retn_cur(ahw_al_thruster_hdle *h_thruster,uint8_t neut_id,uint8_t system_id,uint16_t *neut_ret_cur);

/**
 * @brief  This function is used to get the major version number
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] mjr_vers_no - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_mjr_vers_no(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint8_t *mjr_vers_no);

/**
 * @brief  This function is used to get the minor version number
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] mnr_vers_no - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_mnr_vers_no(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint8_t *mnr_vers_no);

/**
 * @brief  This function is used to get the patch version number
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] ptch_vers_no - pointer to a data
 * @retval hal_ret_sts - returns the  success or error code
 */
hal_ret_sts ahw_al_thruster_get_patch_vers_no(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint16_t *ptch_vers_no);

/**
 * @brief  This function is used to get the board error code
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] err_cde - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_brd_err_cde(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint8_t *err_cde);

/**
 * @brief  This function is used to get the error counter
 * @param[in] h_thruster - instance pointer of thruster
 * @param[out] system_id -  id of the system
 * @param[out] err_count - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_err_count(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint8_t *err_count);

/**
 * @brief  This function is used to get the start time
 * @param[in] h_thruster - instance pointer of thruster
 * @param[in] system_id -  id of the system
 * @param[out] strt_time - pointer to a data
 * @retval hal_ret_sts - returns the success or error code
 */
hal_ret_sts ahw_al_thruster_get_strt_time(ahw_al_thruster_hdle *h_thruster,uint8_t system_id,uint32_t *strt_time);

#endif /* DRIVERS_EXO_HAL_DRIVER_FW_EXO_AHW_AL_DRIVER_API_EXO_AHW_AL_COMMON_MORPHEUS_MULTIFEEP_INC_EXO_AHW_AL_MORPHEUS_MULTIFEEP_COMMON_H_ */
