245 lines
11 KiB
C
245 lines
11 KiB
C
/**********************************************************************
|
|
* NAME: failsafe_toggles.h *
|
|
* AUTHOR: Jonas Holmberg *
|
|
* PURPOSE: Give the ability to create boolean flags and failsafe *
|
|
* variables. *
|
|
* INFORMATION: Create any boolean variable that should be able to be *
|
|
* used throughout the system. These can be boolean vales *
|
|
* for standard checks, failsafes etc. These can also be *
|
|
* linked to a RC channel and value range wherein the *
|
|
* value will be set to one. *
|
|
* *
|
|
* GLOBAL VARIABLES: *
|
|
* Variable Type Description *
|
|
* -------- ---- ----------- *
|
|
* systemFlags boolFlags_t Represents a bitfield of all the *
|
|
* boolean values in the system. *
|
|
* flagConfigArr flags_Configuration_t Configuration values for any *
|
|
* flag that should be changeable *
|
|
* from the RC controller. *
|
|
**********************************************************************/
|
|
|
|
#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 3 //offset for the booleans values in the bitfield. Equals the amount of failsafe ids
|
|
|
|
/*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
|
|
#define systemFlags_Failsafe_toManyMissedFrames_id 2 + 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_mixerfullscale_id 5 + boolean_vals_offset
|
|
#define systemFlags_mixerlowscale_id 6 + boolean_vals_offset
|
|
#define systemFlags_flightMode_3_id 7 + boolean_vals_offset
|
|
#define systemFlags_barometerIsCalibrated_id 8 + boolean_vals_offset
|
|
#define systemFlags_AcceleromterIsCalibrated_id 9 + boolean_vals_offset
|
|
/* Stick booleans */
|
|
#define systemFlags_throttleMax_id 10 + boolean_vals_offset
|
|
#define systemFlags_stickLeft_id 11 + boolean_vals_offset
|
|
#define systemFlags_stickRight_id 12 + boolean_vals_offset
|
|
#define systemFlags_stickUp_id 13 + boolean_vals_offset
|
|
#define systemFlags_stickDown_id 14 + boolean_vals_offset
|
|
#define systemFlags_stickCenterH_id 15 + boolean_vals_offset
|
|
#define systemFlags_stickCenterV_id 16 + boolean_vals_offset
|
|
#define systemFlags_throttleLeft_id 17 + 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)
|
|
#define systemFlags_Failsafe_toManyMissedFrames_mask getFlagMaskValue(systemFlags_Failsafe_toManyMissedFrames_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_mixerfullscale_mask getFlagMaskValue(systemFlags_mixerfullscale_id)
|
|
#define systemFlags_mixerlowscale_mask getFlagMaskValue(systemFlags_mixerlowscale_id)
|
|
#define systemFlags_flightMode_3_mask getFlagMaskValue(systemFlags_flightMode_3_id)
|
|
#define systemFlags_barometerIsCalibrated_mask getFlagMaskValue(systemFlags_barometerIsCalibrated_id)
|
|
#define systemFlags_AcceleromterIsCalibrated_mask getFlagMaskValue(systemFlags_AcceleromterIsCalibrated_id)
|
|
/* Stick booleans */
|
|
#define systemFlags_throttleMax_mask getFlagMaskValue(systemFlags_throttleMax_id)
|
|
#define systemFlags_stickLeft_mask getFlagMaskValue(systemFlags_stickLeft_id)
|
|
#define systemFlags_stickRight_mask getFlagMaskValue(systemFlags_stickRight_id
|
|
#define systemFlags_stickUp_mask getFlagMaskValue(systemFlags_stickUp_id)
|
|
#define systemFlags_stickDown_mask getFlagMaskValue(systemFlags_stickDown_id)
|
|
#define systemFlags_stickCenterH_mask getFlagMaskValue(systemFlags_stickCenterH_id)
|
|
#define systemFlags_stickCenterV_mask getFlagMaskValue(systemFlags_stickCenterV_id)
|
|
#define systemFlags_throttleLeft_mask getFlagMaskValue(systemFlags_throttleLeft_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 mixerfullscale : 1;
|
|
booleanValue_t mixerlowscale : 1;
|
|
booleanValue_t flightMode_3 : 1;
|
|
booleanValue_t barometerIsCalibrated : 1;
|
|
booleanValue_t AcceleromterIsCalibrated : 1;
|
|
/* Stick booleans */
|
|
booleanValue_t throttleMax : 1;
|
|
booleanValue_t stickLeft : 1;
|
|
booleanValue_t stickRight : 1;
|
|
booleanValue_t stickUp : 1;
|
|
booleanValue_t stickDown : 1;
|
|
booleanValue_t stickCenterH : 1;
|
|
booleanValue_t stickCenterV : 1;
|
|
booleanValue_t throttleLeft : 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_MIXERFULLSCALE,
|
|
FLAG_CONFIGURATION_MIXERLOWSCALE,
|
|
FLAG_CONFIGURATION_FLIGHTMODE_3,
|
|
/* Stick booleans */
|
|
FLAG_CONFIGURATION_THROTTLEMAX,
|
|
FLAG_CONFIGURATION_STICKLEFT,
|
|
FLAG_CONFIGURATION_STICKRIGHT,
|
|
FLAG_CONFIGURATION_STICKUP,
|
|
FLAG_CONFIGURATION_STICKDOWN,
|
|
FLAG_CONFIGURATION_STICKCENTERH,
|
|
FLAG_CONFIGURATION_STICKCENTERV,
|
|
FLAG_CONFIGURATION_THROTTLELEFT,
|
|
|
|
|
|
//Counter
|
|
FLAG_CONFIGURATION_COUNT
|
|
}flags_configuration_IDs_t;
|
|
|
|
/* Bitfield 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: Could be used to set start values for some values
|
|
* INFORMATION: Possible to set the values for any of the failsafes
|
|
***********************************************************************/
|
|
void initFlags();
|
|
|
|
/***********************************************************************
|
|
* BRIEF: Process RC channels that should operate on some flags
|
|
* INFORMATION: Reads the value of the RC channels that and checks if
|
|
* any of the channels should handle some flag value in the
|
|
* system. If it should it will update its state.
|
|
***********************************************************************/
|
|
void flags_ProcessRcChannel(int rcChannel_ID, int value);
|
|
|
|
/***********************************************************************
|
|
* BRIEF: Process RC channels that should operate on some flags
|
|
* INFORMATION: Reads the value of the RC channels that and checks if
|
|
* any of the channels should handle some flag value in the
|
|
* system. If it should it will update its state.
|
|
***********************************************************************/
|
|
void flags_ProcessRcChannel_Improved(uint8_t minChannel, uint8_t maxChannel);
|
|
|
|
/***********************************************************************
|
|
* BRIEF: Set flag to true(1)
|
|
* INFORMATION: Given an id set that value to true
|
|
***********************************************************************/
|
|
void flags_Set_ID(int id);
|
|
|
|
/***********************************************************************
|
|
* BRIEF: Set flag to false(0)
|
|
* INFORMATION: Given an id set that value to false
|
|
***********************************************************************/
|
|
void flags_Clear_ID(int id);
|
|
|
|
/***********************************************************************
|
|
* BRIEF: Toggle a flag
|
|
* INFORMATION: Given an id changes the current value of a flag to its
|
|
* opposite.
|
|
***********************************************************************/
|
|
void flags_Toggle_ID(int id);
|
|
|
|
/***********************************************************************
|
|
* BRIEF: Checks if a flag is set
|
|
* INFORMATION: Given an id value, check if that is set to true in the
|
|
* bitfield
|
|
***********************************************************************/
|
|
bool flags_IsSet_ID(int id);
|
|
|
|
/***********************************************************************
|
|
* BRIEF: Set flag to true(1)
|
|
* INFORMATION: Given a mask set that value to true
|
|
***********************************************************************/
|
|
void flags_Set_MASK(int mask);
|
|
|
|
/***********************************************************************
|
|
* BRIEF: Set flag to false(0)
|
|
* INFORMATION: Given a mask set that value to false
|
|
***********************************************************************/
|
|
void flags_Clear_MASK(int mask);
|
|
|
|
/***********************************************************************
|
|
* BRIEF: Toggle a flag
|
|
* INFORMATION: Given a mask changes the current value of a flag to its
|
|
* opposite.
|
|
***********************************************************************/
|
|
void flags_Toggle_MASK(int mask);
|
|
|
|
/***********************************************************************
|
|
* BRIEF: Checks if a flag is set
|
|
* INFORMATION: Given a mask value, check if that is set to true in the
|
|
* bitfield
|
|
***********************************************************************/
|
|
bool flags_IsSet_MASK(int mask);
|
|
|
|
|
|
|
|
|
|
#endif /* DRIVERS_FAILSAFE_TOGGLES_H_ */
|