#pragma once
#include <stdint.h>
#include "rev/CANServoHubDriver.h"
#include "rev/CANServoHubParameters.h"
#include "rev/REVLibErrors.h"
#include "rev/REVUtils.h"
extern "C" {
typedef struct c_SIM_ServoHub_Obj* c_SIM_ServoHub_handle;
typedef struct c_SIM_ServoHub_FaultManager_Obj*
c_SIM_ServoHub_FaultManager_handle;
c_SIM_ServoHub_handle c_SIM_ServoHub_Create(int deviceId);
void c_SIM_ServoHub_Destroy(c_SIM_ServoHub_handle handle);
bool c_SIM_ServoHub_IsSim(c_SIM_ServoHub_handle handle);
c_REVLib_ErrorCode c_SIM_ServoHub_ResetParameters(c_SIM_ServoHub_handle handle);
c_REVLib_ErrorCode c_SIM_ServoHub_SetParameter(
c_SIM_ServoHub_handle handle, c_ServoHub_ConfigParameter parameter,
uint32_t value);
float c_SIM_ServoHub_GetDeviceVoltage(c_SIM_ServoHub_handle handle);
float c_SIM_ServoHub_GetDeviceCurrent(c_SIM_ServoHub_handle handle);
float c_SIM_ServoHub_GetServoVoltage(c_SIM_ServoHub_handle handle);
int c_SIM_ServoHub_GetChannelPulseWidth(c_SIM_ServoHub_handle handle,
c_ServoHub_Channel channel);
c_REVLib_ErrorCode c_SIM_ServoHub_SetChannelPulseWidth(
c_SIM_ServoHub_handle handle, c_ServoHub_Channel channel,
int pulseWidth_us);
bool c_SIM_ServoHub_GetChannelEnabled(c_SIM_ServoHub_handle handle,
c_ServoHub_Channel channel);
c_REVLib_ErrorCode c_SIM_ServoHub_SetChannelEnabled(
c_SIM_ServoHub_handle handle, c_ServoHub_Channel channel, bool enabled);
c_REVLib_ErrorCode c_SIM_ServoHub_SetChannelPowered(
c_SIM_ServoHub_handle handle, c_ServoHub_Channel channel, bool powered);
c_REVLib_ErrorCode c_SIM_ServoHub_SetBankPulsePeriod(
c_SIM_ServoHub_handle handle, c_ServoHub_Bank bank, int pulsePeriod_us);
c_REVLib_ErrorCode c_SIM_ServoHub_GetChannelPulseRange(
c_SIM_ServoHub_handle handle, c_ServoHub_Channel channel,
c_ServoHub_ChannelPulseRange* pulseRange);
c_REVLib_ErrorCode c_SIM_ServoHub_GetChannelDisableBehavior(
c_SIM_ServoHub_handle handle, c_ServoHub_Channel channel,
bool* disableBehavior);
c_SIM_ServoHub_FaultManager_handle c_SIM_ServoHub_GetOrCreateSimFaultManager(
c_SIM_ServoHub_handle handle);
bool c_SIM_ServoHub_GetSimFaultManagerExists(c_SIM_ServoHub_handle handle);
void c_SIM_ServoHub_SetRawFrameFromSimFaults(
c_SIM_ServoHub_FaultManager_handle handle,
c_ServoHub_PeriodicStatus1* rawFrame);
void c_SIM_ServoHub_ClearSimFaults(c_SIM_ServoHub_FaultManager_handle handle);
}