This repository has been archived on 2020-06-14. You can view files and clone it, but cannot push or open issues or pull requests.
Jonas Holmberg 2b05c843a1 Fiexed small errors and added more commands for RC things in CLI
Also added some statistical values that can be veiwed in CLI to see how
they sytem performs.
2016-10-12 14:58:21 +02:00

171 lines
6.0 KiB
C

/*
* 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_airmode_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_airmode_mask getFlagMaskValue(systemFlags_airmode_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 airmode : 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_AIRMODE,
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_ */