/*
 * Slave_Monitoring.h
 *
 *  Created on: Jun 15, 2022
 *      Author: max
 */

#ifndef INC_SLAVE_MONITORING_H_
#define INC_SLAVE_MONITORING_H_

#include "AMS_Errorcodes.h"
#include "Error_Check.h"
#include "main.h"

#include "stm32g431xx.h"

#define NUMBEROFSLAVES 9
#define NUMBEROFCELLS 10
#define NUMBEROFTEMPS 32

#define SLAVETIMEOUT 5000
#define SLAVE_HEARTBEAT_FRAMES 11
// 30% * 90 = 27, each sensor measures 2 cells
#define SLAVE_MIN_TEMP_SENSORS 14

typedef struct {

  uint16_t slaveID;
  uint16_t cellVoltages[NUMBEROFCELLS];
  uint16_t cellTemps[NUMBEROFTEMPS];
  uint32_t timestamp;
  uint8_t error;
  uint8_t timeout;
  uint32_t frame_timestamps[SLAVE_HEARTBEAT_FRAMES];
  uint8_t error_frame[8];

} SlaveHandler;

extern SlaveHandler slaves[NUMBEROFSLAVES];

void initSlaves();
uint8_t checkSlaveTimeout();

#endif /* INC_SLAVE_MONITORING_H_ */
