#pragma once
#include <stdint.h>
#include "rev/CANDetachedEncoderDriver.h"
#include "rev/CANDetachedEncoderParameters.h"
#include "rev/REVLibErrors.h"
#include "rev/REVUtils.h"
extern "C" {
typedef struct c_SIM_Detached_Obj* c_SIM_Detached_handle;
typedef struct c_SIM_Detached_FaultManager_Obj*
c_SIM_Detached_FaultManager_handle;
c_SIM_Detached_handle c_SIM_Detached_Create(
int deviceId, c_Detached_EncoderModel encoderModel);
void c_SIM_Detached_Close(c_SIM_Detached_handle handle);
void c_SIM_Detached_Destroy(c_SIM_Detached_handle handle);
bool c_SIM_Detached_IsSim(c_SIM_Detached_handle handle);
c_REVLib_ErrorCode c_SIM_Detached_ResetParameters(c_SIM_Detached_handle handle);
c_REVLib_ErrorCode c_SIM_Detached_SetParameter(
c_SIM_Detached_handle handle, c_Detached_ConfigParameter parameter,
uint32_t value);
c_REVLib_ErrorCode c_SIM_Detached_GetParameter(
c_SIM_Detached_handle handle, c_Detached_ConfigParameter parameterID,
uint32_t* value);
uint8_t c_SIM_Detached_GetEncoderModel(c_SIM_Detached_handle handle);
c_SIM_Detached_FaultManager_handle c_SIM_Detached_GetOrCreateSimFaultManager(
c_SIM_Detached_handle handle);
void c_SIM_Detached_SetEncoderPosition(c_SIM_Detached_handle handle,
double position);
double c_SIM_Detached_GetEncoderPosition(c_SIM_Detached_handle handle);
void c_SIM_Detached_SetEncoderVelocity(c_SIM_Detached_handle handle,
double velocity);
double c_SIM_Detached_GetEncoderVelocity(c_SIM_Detached_handle handle);
void c_SIM_Detached_SetEncoderAngle(c_SIM_Detached_handle handle, double angle);
double c_SIM_Detached_GetEncoderAngle(c_SIM_Detached_handle handle);
void c_SIM_Detached_SetEncoderRawAngle(c_SIM_Detached_handle handle,
double rawAngle);
double c_SIM_Detached_GetEncoderRawAngle(c_SIM_Detached_handle handle);
void c_SIM_Detached_SetEncoderZeroOffset(c_SIM_Detached_handle handle,
double offset);
double c_SIM_Detached_GetEncoderZeroOffset(c_SIM_Detached_handle handle);
void c_SIM_Detached_SetEncoderInverted(c_SIM_Detached_handle handle,
bool inverted);
bool c_SIM_Detached_GetEncoderInverted(c_SIM_Detached_handle handle);
void c_SIM_Detached_SetEncoderPositionFactor(c_SIM_Detached_handle handle,
double posFactor);
double c_SIM_Detached_GetEncoderPositionFactor(c_SIM_Detached_handle handle);
void c_SIM_Detached_SetEncoderVelocityFactor(c_SIM_Detached_handle handle,
double velFactor);
double c_SIM_Detached_GetEncoderVelocityFactor(c_SIM_Detached_handle handle);
void c_SIM_Detached_SetRawframeFromSimFaults(
c_SIM_Detached_FaultManager_handle handle,
c_Detached_PeriodicStatus1* rawframe);
void c_SIM_Detached_ClearSimFaults(c_SIM_Detached_FaultManager_handle handle);
bool c_SIM_Detached_GetSimFaultManagerExists(c_SIM_Detached_handle handle);
}