/* * failsafe_toggles.h * * Created on: 10 okt. 2016 * Author: holmis */ #ifndef DRIVERS_FAILSAFE_TOGGLES_H_ #define DRIVERS_FAILSAFE_TOGGLES_H_ #include "stdint.h" //Macro functions #define getFlagMaskValue(x) (1 << x) #define failSafe_vals_offset 0 //offset for the fail safe values in the bitfield #define boolean_vals_offset 2 //offset for the booleans values in the bitfield /*If a new value is added to the bitfield these IDs must be reviewed and checkd so that they still are correct*/ //failsafe values #define systemFlags_Failsafe_rcChannelInRange_id 0 + failSafe_vals_offset #define systemFlags_Failsafe_noRcReceived_id 1 + failSafe_vals_offset //other flags #define systemFlags_armed_id 0 + boolean_vals_offset #define systemFlags_flightmode_acceleromter_id 1 + boolean_vals_offset #define systemFlags_flightmode_barometer_id 2 + boolean_vals_offset #define systemFlags_flightmode_compass_id 3 + boolean_vals_offset #define systemFlags_flightmode_gps_id 4 + boolean_vals_offset #define systemFlags_flightMode_1_id 5 + boolean_vals_offset #define systemFlags_flightMode_2_id 6 + boolean_vals_offset #define systemFlags_flightMode_3_id 7 + boolean_vals_offset /*Mask values for each of the flag values*/ //failsafe values #define systemFlags_Failsafe_rcChannelInRange_mask getFlagMaskValue(systemFlags_Failsafe_rcChannelInRange_id) #define systemFlags_Failsafe_noRcReceived_mask getFlagMaskValue(systemFlags_Failsafe_noRcReceived_id) //other flags #define systemFlags_armed_mask getFlagMaskValue(systemFlags_armed_id) #define systemFlags_flightmode_acceleromter_mask getFlagMaskValue(systemFlags_flightmode_acceleromter_id) #define systemFlags_flightmode_barometer_mask getFlagMaskValue(systemFlags_flightmode_barometer_id) #define systemFlags_flightmode_compass_mask getFlagMaskValue(systemFlags_flightmode_compass_id) #define systemFlags_flightmode_gps_mask getFlagMaskValue(systemFlags_flightmode_gps_id) #define systemFlags_flightMode_1_mask getFlagMaskValue(systemFlags_flightMode_1_id) #define systemFlags_flightMode_2_mask getFlagMaskValue(systemFlags_flightMode_2_id) #define systemFlags_flightMode_3_mask getFlagMaskValue(systemFlags_flightMode_3_id) //typedef for the boolean value typedef unsigned int booleanValue_t; /* Struct containing all the failsafe on boolean values in the system */ typedef union bitSetRegion { struct { //fail-safe booleans booleanValue_t rcChannelInRange : 1; booleanValue_t noRcReceived : 1; //Flag boleans that are not fail-safe booleanValue_t armed : 1; booleanValue_t acceleromter : 1; booleanValue_t barometer : 1; booleanValue_t compass : 1; booleanValue_t gps : 1; booleanValue_t flightMode_1 : 1; booleanValue_t flightMode_2 : 1; booleanValue_t flightMode_3 : 1; }bitField; uint64_t intRepresentation; }boolFlags_t; /* Stuct to define values that can be changed and manipulated by RC commands */ typedef struct { uint16_t minRange; //minimum range value in a RC channel (uint16 to save space, increase if higher ranges are needed) uint16_t maxRange; //maximum range value in a RC channel (uint16 to save space, increase if higher ranges are needed) uint8_t channelNumber; //The RC channel number for the value uint8_t flagId; //ID for the flag to be changed in the system }flags_Configuration_t; typedef enum { FLAG_CONFIGURATION_ARM = 0, FLAG_CONFIGURATION_FLIGHTMODE_ACCELEROMETER, FLAG_CONFIGURATION_FLIGHTMODE_BAROMETER, FLAG_CONFIGURATION_FLIGHTMODE_COMPASS, FLAG_CONFIGURATION_FLIGHTMODE_GPS, FLAG_CONFIGURATION_FLIGHTMODE_1, FLAG_CONFIGURATION_FLIGHTMODE_2, FLAG_CONFIGURATION_FLIGHTMODE_3, //Counter FLAG_CONFIGURATION_COUNT }flags_configuration_IDs_t; /* Stuct containing values for all the flags and failsafe booleans sin the system */ extern boolFlags_t systemFlags; /* Array of flag configurations. These are values that can be set by RC. */ extern flags_Configuration_t flagConfigArr[FLAG_CONFIGURATION_COUNT]; /*********************************************************************** * BRIEF: * INFORMATION: ***********************************************************************/ void initFlags(); /*********************************************************************** * BRIEF: * INFORMATION: ***********************************************************************/ void flags_ProcessRcChannel(int rcChannel_ID, int value); /*********************************************************************** * BRIEF: * INFORMATION: ***********************************************************************/ void flags_Set_ID(int id); /*********************************************************************** * BRIEF: * INFORMATION: ***********************************************************************/ void flags_Clear_ID(int id); /*********************************************************************** * BRIEF: * INFORMATION: ***********************************************************************/ void flags_Toggle_ID(int id); /*********************************************************************** * BRIEF: * INFORMATION: ***********************************************************************/ bool flags_IsSet_ID(int id); /*********************************************************************** * BRIEF: * INFORMATION: ***********************************************************************/ void flags_Set_MASK(int mask); /*********************************************************************** * BRIEF: * INFORMATION: ***********************************************************************/ void flags_Clear_MASK(int mask); /*********************************************************************** * BRIEF: * INFORMATION: ***********************************************************************/ void flags_Toggle_MASK(int mask); /*********************************************************************** * BRIEF: * INFORMATION: ***********************************************************************/ bool flags_IsSet_MASK(int mask); #endif /* DRIVERS_FAILSAFE_TOGGLES_H_ */