view Small_CPU/Inc/scheduler.h @ 277:580822b5d3d1
IPC_Sync_Improvment_3
Rework SPI error handling.
SPI_Start_single_TxRx_with_Master evaluated the incoming data for a condition to send device instead of life data. In case of invalid input data this may cause unintended transmission of device data => now lifedata is send if incoming data is expected to be invalid
The SPI timeout monitoring was done at the beginning of the mode loop. A timeout may have been detected even if meanwhile valid data was received (this is evaluated at x20ms) => Moved the timeout monitoring after the handling of incoming data
author
ideenmodellierer
date
Sun, 28 Apr 2019 10:16:38 +0200 (2019-04-28)
parents
a91d99265884
children
aa6006975e76
line source
/**+ −
******************************************************************************+ −
* @file scheduler.h+ −
* @author heinrichs weikamp gmbh+ −
* @version V0.0.5+ −
* @date 27-March-2014+ −
* @brief+ −
* + −
******************************************************************************+ −
* @attention+ −
*+ −
* <h2><center>© COPYRIGHT(c) 2015 heinrichs weikamp</center></h2>+ −
*+ −
******************************************************************************+ −
*/ + −
+ −
+ −
#ifndef SCHEDULER_H+ −
#define SCHEDULER_H+ −
+ −
#ifdef __cplusplus+ −
extern "C" {+ −
#endif+ −
+ −
+ −
/* Includes ------------------------------------------------------------------*/+ −
#include "data_central.h"+ −
#include "data_exchange.h"+ −
#include "settings.h"+ −
+ −
/* Types -------------------------------------------------------------*/+ −
#define SENSOR_PRESSURE_ID 0+ −
#define MAX_SENSORS 1+ −
+ −
#define SPI_SYNC_METHOD_NONE (0u)+ −
#define SPI_SYNC_METHOD_HARD (1u) /* Scheduler shall reset all counters to 0 */+ −
#define SPI_SYNC_METHOD_SOFT (2u) /* Scheduler shall reset adjust counters to 100ms SPI data exchange cycle */+ −
#define SPI_SYNC_METHOD_INVALID (4u)+ −
+ −
#define SCHEDULER_TICK_EXE1SEC (980u) /* tick count based on cycle start which is used to trigger functions which */+ −
/* shall be executed once in a second (20ms before cycle restarts) */+ −
+ −
#define SPI_COM_TIMEOUT_START (5) /* *100 ms timeout to avoid tiemout e.g. after Main wakeup */+ −
#define SPI_COM_TIMEOUT_COMMON (3) /* *100ms shorter timeout during normal operation to have a faster error reaction */+ −
+ −
typedef struct+ −
{+ −
uint8_t mode;+ −
short conservatism;+ −
short repetitive_dive; + −
long seconds_since_last_dive;+ −
long no_fly_time_minutes;+ −
uint8_t whichGas;+ −
SGas aktualGas[2];+ −
float ceiling_from_main_CPU_mbar;+ −
SLifeData lifeData;+ −
SVpm vpm;+ −
SSettings settings;+ −
SDevice deviceData;+ −
SDataExchangeSlaveToMasterDeviceData deviceDataSendToMaster; + −
SDataExchangeSlaveToMaster dataSendToMaster; + −
SDataReceiveFromMaster dataSendToSlave; + −
_Bool demo_mode;+ −
uint8_t dataSendToSlaveIsValid;+ −
uint8_t dataSendToSlavePending;+ −
uint32_t sync_error_count;+ −
uint32_t check_sync_not_running;+ −
uint8_t ButtonResponsiveness[4];+ −
uint8_t chargerStatus;+ −
uint8_t dataSendToSlaveIsNotValidCount;+ −
uint8_t ButtonPICdata[4];+ −
uint8_t accidentFlag;+ −
uint32_t accidentRemainingSeconds;+ −
uint8_t sensorError[MAX_SENSORS];+ −
HAL_StatusTypeDef I2C_SystemStatus;+ −
} SGlobal;+ −
+ −
typedef struct+ −
{+ −
long seconds_since_last_dive;+ −
long no_fly_time_minutes;+ −
} SBackup;+ −
+ −
typedef struct+ −
{+ −
uint8_t counterSPIdata100msec;+ −
uint8_t counterPressure100msec;+ −
uint8_t counterCompass100msec;+ −
uint8_t counterAmbientLight100msec;+ −
uint8_t communicationTimeout;+ −
uint32_t tick_execute1second;+ −
uint32_t tickstart;+ −
} SScheduleCtrl;+ −
+ −
+ −
/* Variables ---------------------------------------------------------*/+ −
extern SGlobal global;+ −
+ −
+ −
/* Function prototypes -----------------------------------------------*/+ −
+ −
void initGlobals(void);+ −
void reinitGlobals(void);+ −
+ −
void scheduleSurfaceMode(void);+ −
void scheduleDiveMode(void);+ −
void scheduleSleepMode(void);+ −
void scheduleCompassCalibrationMode(void);+ −
void scheduleTestMode(void);+ −
+ −
void scheduleUpdateLifeData(int32_t asynchron_milliseconds_since_last);+ −
void scheduleSpecial_Evaluate_DataSendToSlave(void);+ −
void scheduleUpdateDeviceDataChargerFull(void);+ −
void scheduleUpdateDeviceDataChargerCharging(void);+ −
+ −
void Scheduler_Request_sync_with_SPI(uint8_t SyncMethod);+ −
void Scheduler_SyncToSPI(uint8_t TXtick);+ −
+ −
uint8_t scheduleSetButtonResponsiveness(void);+ −
+ −
void copyBatteryData(void);+ −
+ −
//void scheduleSurfaceMode_test(void);+ −
//void scheduleSleepMode_test(void);+ −
+ −
#ifdef __cplusplus+ −
}+ −
#endif+ −
+ −
#endif /* SCHEDULER_H */+ −
+ −
/************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/+ −