Open FFBoard
Open source force feedback firmware
HidFFB Class Reference

#include <HidFFB.h>

Inheritance diagram for HidFFB:
UsbHidHandler EffectsControlItf

Public Member Functions

 HidFFB (std::shared_ptr< EffectsCalculator > ec, uint8_t axisCount)
 
virtual ~HidFFB ()
 
void hidOut (uint8_t report_id, hid_report_type_t report_type, const uint8_t *buffer, uint16_t bufsize) override
 
uint16_t hidGet (uint8_t report_id, hid_report_type_t report_type, uint8_t *buffer, uint16_t reqlen) override
 
bool getFfbActive ()
 
void reset_ffb ()
 
void start_FFB ()
 
void stop_FFB ()
 
void set_FFB (bool state)
 
void set_gain (uint8_t gain)
 
void sendStatusReport (uint8_t effect)
 
void setDirectionEnableMask (uint8_t mask)
 
- Public Member Functions inherited from UsbHidHandler
 UsbHidHandler ()
 
virtual ~UsbHidHandler ()
 
void registerHidCallback ()
 
void transferComplete (uint8_t itf, uint8_t const *report, uint8_t len)
 
- Public Member Functions inherited from EffectsControlItf
virtual uint32_t getConstantForceRate ()
 
virtual uint32_t getRate ()
 
virtual void cfUpdateEvent ()
 
virtual void fxUpdateEvent ()
 

Static Public Member Functions

static bool HID_SendReport (uint8_t *report, uint16_t len)
 
- Static Public Member Functions inherited from UsbHidHandler
static void setHidDesc (const uint8_t *desc)
 
static const uint8_t * getHidDesc ()
 

Private Member Functions

void new_effect (FFB_CreateNewEffect_Feature_Data_t *effect)
 
void free_effect (uint16_t id)
 
void ffb_control (uint8_t cmd)
 
void set_effect (FFB_SetEffect_t *effect)
 
void set_condition (FFB_SetCondition_Data_t *cond)
 
void set_envelope (FFB_SetEnvelope_Data_t *report)
 
void set_ramp (FFB_SetRamp_Data_t *report)
 
void set_constant_effect (FFB_SetConstantForce_Data_t *effect)
 
void set_periodic (FFB_SetPeriodic_Data_t *report)
 
void set_effect_operation (FFB_EffOp_Data_t *report)
 
void set_filters (FFB_Effect *effect)
 

Private Attributes

std::shared_ptr< EffectsCalculatoreffects_calc
 
std::array< FFB_Effect, EffectsCalculator::max_effects > & effects
 
uint8_t directionEnableMask
 
uint16_t used_effects = 0
 
bool ffb_active = false
 
FFB_BlockLoad_Feature_Data_t blockLoad_report
 
FFB_PIDPool_Feature_Data_t pool_report
 
reportFFB_status_t reportFFBStatus
 
uint8_t axisCount
 

Additional Inherited Members

- Static Public Attributes inherited from UsbHidHandler
static UsbHidHandlerglobalHidHandler = nullptr
 
static uint8_t * hid_desc = nullptr
 

Detailed Description

Definition at line 23 of file HidFFB.h.

Constructor & Destructor Documentation

◆ HidFFB()

HidFFB::HidFFB ( std::shared_ptr< EffectsCalculator ec,
uint8_t  axisCount 
)

Definition at line 15 of file HidFFB.cpp.

◆ ~HidFFB()

HidFFB::~HidFFB ( )
virtual

Definition at line 31 of file HidFFB.cpp.

Member Function Documentation

◆ ffb_control()

void HidFFB::ffb_control ( uint8_t  cmd)
private

Definition at line 205 of file HidFFB.cpp.

◆ free_effect()

void HidFFB::free_effect ( uint16_t  id)
private

◆ getFfbActive()

bool HidFFB::getFfbActive ( )
virtual

Implements EffectsControlItf.

Definition at line 43 of file HidFFB.cpp.

◆ HID_SendReport()

bool HidFFB::HID_SendReport ( uint8_t *  report,
uint16_t  len 
)
static

Definition at line 47 of file HidFFB.cpp.

◆ hidGet()

uint16_t HidFFB::hidGet ( uint8_t  report_id,
hid_report_type_t  report_type,
uint8_t *  buffer,
uint16_t  reqlen 
)
overridevirtual

Called on HID feature GET events Any reply is assigned to the return buffer

Handles block load reports and pool status which are requested after a new effect has been created

Reimplemented from UsbHidHandler.

Definition at line 151 of file HidFFB.cpp.

◆ hidOut()

void HidFFB::hidOut ( uint8_t  report_id,
hid_report_type_t  report_type,
const uint8_t *  buffer,
uint16_t  bufsize 
)
overridevirtual

Called when HID OUT data is received via USB

Reimplemented from UsbHidHandler.

Definition at line 76 of file HidFFB.cpp.

◆ new_effect()

void HidFFB::new_effect ( FFB_CreateNewEffect_Feature_Data_t *  effect)
private

Definition at line 240 of file HidFFB.cpp.

◆ reset_ffb()

void HidFFB::reset_ffb ( )
virtual

Implements EffectsControlItf.

Definition at line 459 of file HidFFB.cpp.

◆ sendStatusReport()

void HidFFB::sendStatusReport ( uint8_t  effect)

Sends a status report for a specific effect

Definition at line 55 of file HidFFB.cpp.

◆ set_condition()

void HidFFB::set_condition ( FFB_SetCondition_Data_t *  cond)
private

If the number of Condition report blocks is equal to the number of axes for the effect, then the first report block applies to the first axis, the second applies to the second axis, and so on. For example, a two-axis spring condition with CP Offset set to zero in both Condition report blocks would have the same effect as the joystick self-centering spring. When a condition is defined for each axis in this way, the effect must not be rotated.

If there is a single Condition report block for an effect with more than one axis, then the direction along which the parameters of the Condition report block are in effect is determined by the direction parameters passed in the Direction field of the Effect report block. For example, a friction condition rotated 45 degrees (in polar coordinates) would resist joystick motion in the northeast-southwest direction but would have no effect on joystick motion in the northwest-southeast direction.

Definition at line 350 of file HidFFB.cpp.

◆ set_constant_effect()

void HidFFB::set_constant_effect ( FFB_SetConstantForce_Data_t *  effect)
private

Definition at line 227 of file HidFFB.cpp.

◆ set_effect()

void HidFFB::set_effect ( FFB_SetEffect_t *  effect)
private

Sets up an effect If the direction enable bit is set then only 1 condition block is used

Definition at line 277 of file HidFFB.cpp.

◆ set_effect_operation()

void HidFFB::set_effect_operation ( FFB_EffOp_Data_t *  report)
private

Definition at line 383 of file HidFFB.cpp.

◆ set_envelope()

void HidFFB::set_envelope ( FFB_SetEnvelope_Data_t *  report)
private

Definition at line 422 of file HidFFB.cpp.

◆ set_FFB()

void HidFFB::set_FFB ( bool  state)
virtual

Implements EffectsControlItf.

Definition at line 188 of file HidFFB.cpp.

◆ set_filters()

void HidFFB::set_filters ( FFB_Effect effect)
private

Definition at line 200 of file HidFFB.cpp.

◆ set_gain()

void HidFFB::set_gain ( uint8_t  gain)
virtual

Implements EffectsControlItf.

Definition at line 195 of file HidFFB.cpp.

◆ set_periodic()

void HidFFB::set_periodic ( FFB_SetPeriodic_Data_t *  report)
private

Definition at line 445 of file HidFFB.cpp.

◆ set_ramp()

void HidFFB::set_ramp ( FFB_SetRamp_Data_t *  report)
private

Definition at line 435 of file HidFFB.cpp.

◆ setDirectionEnableMask()

void HidFFB::setDirectionEnableMask ( uint8_t  mask)

Sets the mask where the direction enable bit is in the effect

Definition at line 38 of file HidFFB.cpp.

◆ start_FFB()

void HidFFB::start_FFB ( )
virtual

Reimplemented from EffectsControlItf.

Definition at line 174 of file HidFFB.cpp.

◆ stop_FFB()

void HidFFB::stop_FFB ( )
virtual

Reimplemented from EffectsControlItf.

Definition at line 181 of file HidFFB.cpp.

Member Data Documentation

◆ axisCount

uint8_t HidFFB::axisCount
private

Definition at line 69 of file HidFFB.h.

◆ blockLoad_report

FFB_BlockLoad_Feature_Data_t HidFFB::blockLoad_report
private

Definition at line 64 of file HidFFB.h.

◆ directionEnableMask

uint8_t HidFFB::directionEnableMask
private

Definition at line 61 of file HidFFB.h.

◆ effects

std::array<FFB_Effect,EffectsCalculator::max_effects>& HidFFB::effects
private

Definition at line 46 of file HidFFB.h.

◆ effects_calc

std::shared_ptr<EffectsCalculator> HidFFB::effects_calc
private

Definition at line 45 of file HidFFB.h.

◆ ffb_active

bool HidFFB::ffb_active = false
private

Definition at line 63 of file HidFFB.h.

◆ pool_report

FFB_PIDPool_Feature_Data_t HidFFB::pool_report
private

Definition at line 65 of file HidFFB.h.

◆ reportFFBStatus

reportFFB_status_t HidFFB::reportFFBStatus
private

Definition at line 67 of file HidFFB.h.

◆ used_effects

uint16_t HidFFB::used_effects = 0
private

Definition at line 62 of file HidFFB.h.


The documentation for this class was generated from the following files: