Open FFBoard
Open source force feedback firmware
Loading...
Searching...
No Matches
HidFFB.h
Go to the documentation of this file.
1/*
2 * HidFFB.h
3 *
4 * Created on: 12.02.2020
5 * Author: Yannick
6 */
7
8#ifndef HIDFFB_H_
9#define HIDFFB_H_
10
11#include <UsbHidHandler.h>
12#include "ffb_defs.h"
13#include "PersistentStorage.h"
14#include "Filters.h"
15#include "EffectsCalculator.h"
16#include "FastAvg.h"
17
18#define X_AXIS_ENABLE 1
19#define Y_AXIS_ENABLE 2
20#define Z_AXIS_ENABLE 4
21#define DIRECTION_ENABLE(AXES) (1 << AXES)
22
23class HidFFB: public UsbHidHandler, public EffectsControlItf {
24public:
25 HidFFB(std::shared_ptr<EffectsCalculator> ec,uint8_t axisCount);
26 virtual ~HidFFB();
27
28 void hidOut(uint8_t report_id, hid_report_type_t report_type,const uint8_t* buffer, uint16_t bufsize) override;
29 uint16_t hidGet(uint8_t report_id, hid_report_type_t report_type,uint8_t* buffer, uint16_t reqlen) override;
30
31 bool getFfbActive();
32 static bool HID_SendReport(uint8_t *report,uint16_t len);
33
34 void reset_ffb();
35 void start_FFB();
36 void stop_FFB();
37 void set_FFB(bool state);
38 void set_gain(uint8_t gain);
39
40 void sendStatusReport(uint8_t effect);
41 void setDirectionEnableMask(uint8_t mask);
42 void updateSamplerate(float newSamplerate);
43
44private:
45 // HID
46 std::shared_ptr<EffectsCalculator> effects_calc;
47 std::array<FFB_Effect,EffectsCalculator::max_effects>& effects; // Must be passed in constructor
48 void new_effect(FFB_CreateNewEffect_Feature_Data_t* effect);
49 void free_effect(uint16_t id);
50 void ffb_control(uint8_t cmd);
51 void set_effect(FFB_SetEffect_t* effect);
52 void set_condition(FFB_SetCondition_Data_t* cond);
53 void set_envelope(FFB_SetEnvelope_Data_t* report);
54 void set_ramp(FFB_SetRamp_Data_t* report);
55 void set_constant_effect(FFB_SetConstantForce_Data_t* effect);
56 void set_periodic(FFB_SetPeriodic_Data_t* report);
57 void set_effect_operation(FFB_EffOp_Data_t* report);
58
59
60 void set_filters(FFB_Effect* effect);
61
62 uint8_t directionEnableMask; // Has to be adjusted if bit is not last bit after axis enable bits
63 uint16_t used_effects = 0;
64 bool ffb_active = false;
65 FFB_BlockLoad_Feature_Data_t blockLoad_report;
66 FFB_PIDPool_Feature_Data_t pool_report;
67
68 reportFFB_status_t reportFFBStatus;
69
70 uint8_t axisCount;
71};
72
73#endif /* HIDFFB_H_ */
std::array< FFB_Effect, EffectsCalculator::max_effects > & effects
Definition HidFFB.h:47
reportFFB_status_t reportFFBStatus
Definition HidFFB.h:68
void set_effect_operation(FFB_EffOp_Data_t *report)
Definition HidFFB.cpp:387
void set_FFB(bool state)
Definition HidFFB.cpp:192
void set_constant_effect(FFB_SetConstantForce_Data_t *effect)
Definition HidFFB.cpp:231
void start_FFB()
Definition HidFFB.cpp:178
uint16_t hidGet(uint8_t report_id, hid_report_type_t report_type, uint8_t *buffer, uint16_t reqlen) override
Definition HidFFB.cpp:155
void updateSamplerate(float newSamplerate)
Definition HidFFB.cpp:42
FFB_BlockLoad_Feature_Data_t blockLoad_report
Definition HidFFB.h:65
void setDirectionEnableMask(uint8_t mask)
Definition HidFFB.cpp:38
uint16_t used_effects
Definition HidFFB.h:63
void free_effect(uint16_t id)
std::shared_ptr< EffectsCalculator > effects_calc
Definition HidFFB.h:46
uint8_t directionEnableMask
Definition HidFFB.h:62
void set_gain(uint8_t gain)
Definition HidFFB.cpp:199
void sendStatusReport(uint8_t effect)
Definition HidFFB.cpp:59
virtual ~HidFFB()
Definition HidFFB.cpp:31
void set_condition(FFB_SetCondition_Data_t *cond)
Definition HidFFB.cpp:354
FFB_PIDPool_Feature_Data_t pool_report
Definition HidFFB.h:66
void set_envelope(FFB_SetEnvelope_Data_t *report)
Definition HidFFB.cpp:426
bool getFfbActive()
Definition HidFFB.cpp:47
void ffb_control(uint8_t cmd)
Definition HidFFB.cpp:209
static bool HID_SendReport(uint8_t *report, uint16_t len)
Definition HidFFB.cpp:51
void new_effect(FFB_CreateNewEffect_Feature_Data_t *effect)
Definition HidFFB.cpp:244
void reset_ffb()
Definition HidFFB.cpp:463
bool ffb_active
Definition HidFFB.h:64
void hidOut(uint8_t report_id, hid_report_type_t report_type, const uint8_t *buffer, uint16_t bufsize) override
Definition HidFFB.cpp:80
HidFFB(std::shared_ptr< EffectsCalculator > ec, uint8_t axisCount)
Definition HidFFB.cpp:15
void set_ramp(FFB_SetRamp_Data_t *report)
Definition HidFFB.cpp:439
void stop_FFB()
Definition HidFFB.cpp:185
void set_effect(FFB_SetEffect_t *effect)
Definition HidFFB.cpp:281
uint8_t axisCount
Definition HidFFB.h:70
void set_filters(FFB_Effect *effect)
Definition HidFFB.cpp:204
void set_periodic(FFB_SetPeriodic_Data_t *report)
Definition HidFFB.cpp:449
hid_report_type_t
HID Request Report Type.
Definition hid.h:85
uint8_t const * buffer
uint32_t bufsize
Definition midi_device.h:95