Program Listing for File temperature.c

Return to documentation for file (mainboard/Src/pack/temperature.c)

#include "pack/temperature.h"

#include "error/error.h"
#include "main.h"
#include "mainboard_config.h"

#include <inttypes.h>
#include <math.h>

temperature_t temperatures[PACK_TEMP_COUNT];

void temperature_init() {
    for (size_t i = 0; i < PACK_TEMP_COUNT; i++) {
        temperatures[i] = 0;
    }
}

void temperature_check() {
    for (size_t i = 0; i < PACK_TEMP_COUNT; i++) {
        if (temperatures[i] > CELL_MAX_TEMPERATURE) {
            error_set(ERROR_CELL_OVER_TEMPERATURE, i, HAL_GetTick());
        } else {
            error_reset(ERROR_CELL_OVER_TEMPERATURE, i);
        }
    }
}

temperature_t *temperature_get_all() {
    return temperatures;
}
temperature_t temperature_get_max() {
    temperature_t max_temp = 0;
    for (size_t i = 0; i < PACK_TEMP_COUNT; i++) {
        max_temp = MAX(max_temp, temperatures[i]);
    }
    return max_temp;
}

temperature_t temperature_get_min() {
    temperature_t min_temp = 0;
    for (size_t i = 0; i < PACK_TEMP_COUNT; i++) {
        min_temp = MIN(min_temp, temperatures[i]);
    }
    return min_temp;
}

temperature_t temperature_get_average() {
    size_t average = 0;
    for (size_t i = 0; i < PACK_TEMP_COUNT; i++) {
        average += temperatures[i];
    }
    return (temperature_t)round(average / PACK_TEMP_COUNT);
}