Program Listing for File super_fsm.c

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

#include "super_fsm.h"

#include "bms_fsm.h"
#include "can_comm.h"
#include "energy.h"
#include "main.h"
#include "mainboard_config.h"
#include "pack/current.h"
#include "pack/voltage.h"
#include "soc.h"
#include "spi.h"
#include "tim.h"
#include "usart.h"

#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void super_bms_entry(fsm handle);
void super_bms(fsm handle, super_events event);
void super_measure_volts(fsm handle, super_events event);

void super_fsm_init() {
    super_fsm = fsm_init(SUPER_NUM_STATES, SUPER_EV_NUM, NULL, NULL);

    fsm_state state;
    state.run     = NULL;
    state.handler = super_bms;
    state.entry   = super_bms_entry;
    state.exit    = NULL;
    fsm_set_state(super_fsm, SUPER_BMS, &state);

    state.handler = super_measure_volts;
    state.entry   = NULL;
    state.exit    = NULL;
    fsm_set_state(super_fsm, SUPER_MEASURE_VOLTS, &state);

    HAL_TIM_OC_Start_IT(&HTIM_SUPER, TIM_CHANNEL_1);
    HAL_TIM_OC_Start_IT(&HTIM_SUPER, TIM_CHANNEL_2);
    fsm_start(super_fsm);
}

void super_bms_entry(fsm handle) {
    fsm_trigger_event(handle, SUPER_EV_BMS);
}

void super_bms(fsm handle, super_events event) {
    switch (event) {
        case SUPER_EV_MEASURE_VOLTS:
            fsm_transition(handle, SUPER_MEASURE_VOLTS);
            break;
        case SUPER_EV_BMS:
            fsm_run(bms.fsm);
            fsm_trigger_event(handle, SUPER_EV_BMS);
            break;
        default:
            break;
    }
}

void super_measure_volts(fsm handle, super_events event) {
    voltage_measure(&SI8900_UART);
    current_read();

    soc_sample_energy(HAL_GetTick());

    can_send(ID_HV_CURRENT);

    fsm_transition(handle, SUPER_BMS);
}