/**
 * @file epb_types.h
 * @brief Common types for the EPB software.
 *
 * @arch SA-001
 */
#ifndef EPB_TYPES_H
#define EPB_TYPES_H

#include <stdbool.h>
#include <stdint.h>

typedef enum {
    EPB_OK            = 0,
    EPB_EINVAL        = 1,
    EPB_ETIMEOUT      = 2,
    EPB_ENOSPACE      = 3,
    EPB_EHARDWARE     = 4,
    EPB_EOVERCURRENT  = 5
} EpbStatus;

typedef enum {
    EPB_STATE_RELEASED  = 0,
    EPB_STATE_APPLYING  = 1,
    EPB_STATE_APPLIED   = 2,
    EPB_STATE_RELEASING = 3,
    EPB_STATE_ERROR     = 0xFF
} EpbState;

typedef enum {
    ACTUATOR_LEFT  = 0,
    ACTUATOR_RIGHT = 1,
    ACTUATOR_COUNT = 2
} ActuatorId;

typedef enum {
    SWITCH_NEUTRAL = 0,
    SWITCH_APPLY   = 1,
    SWITCH_RELEASE = 2
} SwitchState;

typedef struct {
    uint8_t apply_raw   : 1;
    uint8_t release_raw : 1;
} SwitchRaw;

#endif /* EPB_TYPES_H */
