33#include "../SensorBuildOpt.h"
34#if !SENSORLIB_EXCLUDE_HAPTIC_AW86224
44static constexpr uint8_t AW8624_SLAVE_ADDRESS = (0x58);
144 void setPins(uint8_t resetPin, uint8_t intPin);
155 bool stop()
override;
163 bool setGain(uint8_t gain)
override;
164 uint8_t
getGain()
const override;
196 uint32_t
getF0()
const override;
289 void longVibration(uint8_t index, uint8_t gain = 0x80, uint32_t duration_ms = 1000,
bool blocking =
true);
414 bool playRtp(
const uint8_t *data, uint32_t len, uint8_t gain = 0x80);
429 bool loadRamData(
const uint8_t *data, uint32_t len);
477 return _f0_cali_data;
525 _cont_brk_time = val;
529 return _cont_brk_time;
538 _cont_brk_gain = val;
542 return _cont_brk_gain;
551 _cont_drv1_lvl = val;
555 return _cont_drv1_lvl;
564 _cont_drv1_time = val;
568 return _cont_drv1_time;
577 _cont_drv2_time = val;
581 return _cont_drv2_time;
590 _cont_track_margin = val;
594 return _cont_track_margin;
616 _pwmcfg4_prtime = val;
620 return _pwmcfg4_prtime;
629 _pwmcfg3_prlvl = val;
633 return _pwmcfg3_prlvl;
642 _auto_brk_enabled = val;
646 return _auto_brk_enabled;
655 _f0_cali_percent = val;
659 return _f0_cali_percent;
673 bool waitRtpGo(uint32_t timeout_ms);
684 void ramInit(
bool enable);
688 bool offsetCalibration();
689 int selectD2sGain(uint8_t reg);
692 void getLraResistance();
697 bool getBaseAddr(
const uint8_t *data, uint32_t len);
698 void setRepeatSeq(uint8_t seq);
699 void autoBrkConfig(
bool enable);
703 void protectConfig(uint8_t prtime, uint8_t prlvl);
707 void interruptSetup();
708 void vbatModeConfig(uint8_t flag);
709 void calculateCaliData();
712 void f0Calibration();
713 bool judgeF0WithinRange();
714 uint8_t getGlobalState()
const;
715 bool waitStandby(uint32_t timeout_ms = 100);
718 uint8_t rtpGetFifoAfs();
719 void setRtpAei(
bool enable);
720 void cancelVibration();
721 void ram_vbat_comp(
bool flag);
724 inline uint8_t drv2_lvl_formula(uint32_t f0, uint32_t vrms)
726 uint32_t base = (f0 < 1800) ? 1809920 : 1990912;
727 return static_cast<uint8_t
>((base / 1000 * vrms) / 61000);
730 bool initImpl(uint8_t param);
732 void afterInitSuccess(uint8_t param)
override
737 inline uint32_t vbat_formula(uint32_t value)
739 return (6100 * (value) / 1024);
742 inline uint32_t f0_formula(uint32_t value)
744 return (384000 * 10 / (value));
747 inline uint32_t rl_formula(uint32_t value, uint32_t gain)
749 return (((value) * 678 * 100) / (1024 * (gain)));
752 inline int os_formula(
int value,
int d2s_gain)
754 return (2440 * (value - 512) / (1024 * (d2s_gain + 1)));
767 uint8_t _cont_drv2_lvl;
768 int8_t _f0_cali_data;
770 uint16_t _ramBaseAddr;
773 uint8_t _cont_brk_time;
774 uint8_t _cont_brk_gain;
775 uint8_t _cont_drv1_lvl;
776 uint8_t _cont_drv1_time;
777 uint8_t _cont_drv2_time;
778 uint8_t _cont_track_margin;
780 uint8_t _pwmcfg4_prtime;
781 uint8_t _pwmcfg3_prlvl;
782 bool _auto_brk_enabled;
783 uint8_t _f0_cali_percent;
785 uint32_t _vibrationStartTime;
HapticStatus
Vibration playback status.
HapticActuatorType
Actuator type.
HapticMode
Generic haptic operating mode.
uint16_t HapticEffectId
Haptic effect ID type.
Abstract base class for haptic drivers.
void setReady(bool ready)
Set ready state.
AW86224/86225 Haptic Driver Class.
void end() override
Deinitialize the haptic driver and release resources.
uint8_t getContBrkTime() const
void setContDrv2Time(uint8_t val)
Set continuous mode drive time 2.
void setPlayMode(PlayMode mode)
Set playback mode.
bool setSequence(uint8_t slot, HapticEffectId effect) override
Set a waveform in the sequence.
void setContDrv1Lvl(uint8_t val)
Set continuous mode drive level 1.
void setPwmcfg4Prtime(uint8_t val)
Set protection time.
bool playEffectAsync(HapticEffectId effect) override
Play a haptic effect (non-blocking).
uint32_t getLraValue() const
Get LRA resistance.
void setWaveLoop(uint8_t wav, uint8_t loop)
Set waveform loop count.
PwmMode
PWM mode selection.
@ PWM_12K
12kHz PWM rate (default)
uint8_t getRamNum() const
Get number of loaded waveforms.
void stopVibration()
Stop any ongoing vibration.
void setWaveSeq(uint8_t wav, uint8_t seq)
Update vibration state (for non-blocking mode)
uint32_t getF0Pre() const
bool calibrate() override
Perform auto-calibration.
uint8_t getContDrv1Time() const
bool isPlaying() const override
Check if haptic is currently playing.
void setF0Pre(uint32_t val)
Set expected F0 (resonant frequency)
void setTrimLRA(uint8_t val)
Set LRA frequency trim value.
bool setGain(uint8_t gain) override
Set the gain/amplitude (0x00 to 0xFF).
uint32_t getVbat() override
Get the battery voltage.
bool loadRamData(const uint8_t *data, uint32_t len)
Load RAM waveform data.
uint8_t getContDrv1Lvl() const
void setPins(uint8_t resetPin, uint8_t intPin)
setPins
uint32_t getLraVrms() const
bool stop() override
Stop haptic playback immediately.
bool setMode(HapticMode mode) override
Set the operating mode.
uint8_t getPwmcfg3Prlvl() const
uint8_t getContDrv2Time() const
uint32_t getF0() const override
Get the measured resonant frequency (F0).
HapticMode getMode() const override
Get the current operating mode.
int8_t getF0CaliData() const
Get F0 calibration data.
uint8_t getContBrkGain() const
void setRtpData(uint8_t *data, uint32_t len)
Set RTP waveform data.
bool playRtp(const uint8_t *data, uint32_t len, uint8_t gain=0x80)
Play RTP (Real-Time Playback) waveform.
void setContBrkGain(uint8_t val)
Set continuous mode break gain.
bool setActuatorType(HapticActuatorType type) override
Set the actuator type.
bool getAutoBrkEnabled() const
uint8_t getGain() const override
Get the current gain value.
bool setRealtimeValue(uint8_t value) override
Set RTP (real-time playback) value.
bool isReady() const override
Check if the driver is initialized and ready.
void setLraVrms(uint32_t val)
Set LRA rated voltage.
uint8_t getPwmcfg4Prtime() const
uint8_t getF0CaliPercent() const
void setContDrv1Time(uint8_t val)
Set continuous mode drive time 1.
void softReset()
Perform soft reset.
void setContTrackMargin(uint8_t val)
Set continuous mode track margin.
uint8_t getD2sGain() const
void vibrationUpdate() override
Update vibration state (for non-blocking mode).
void setAutoBrkEnabled(bool val)
Enable/disable auto break.
ChipID
Chip ID enumeration.
PlayMode getPlayMode() const
Get current play mode.
void setF0CaliPercent(uint8_t val)
Set F0 calibration tolerance percentage.
uint32_t getVbatValue() const
Get current voltage reading.
uint8_t getContTrackMargin() const
void continuousVibration(uint32_t duration_ms, bool blocking=true) override
Play a continuous vibration for specified duration.
HapticActuatorType getActuatorType() const override
Get the actuator type.
bool playEffect(HapticEffectId effect) override
Play a haptic effect.
HapticStatus getStatus() const override
Get current playback status.
bool run() override
Start haptic playback.
bool isVibrating() const
Check if vibration is currently active (alias for isPlaying)
bool clearSequence() override
Clear the waveform sequence.
HapticDriver_AW86224()
Default constructor.
void shortVibration(uint8_t index, uint8_t gain=0x80, uint8_t loop=1)
Play a short vibration effect.
SramSize
SRAM size selection.
bool isRamInit() const
Check if RAM is initialized.
HapticCapabilities getCapabilities() const override
Get device capabilities.
void setD2sGain(uint8_t val)
Set D2S gain (digital to simulation gain)
const char * getChipName() const override
Get the chip name.
void longVibration(uint8_t index, uint8_t gain=0x80, uint32_t duration_ms=1000, bool blocking=true)
Play a long continuous vibration effect.
PlayMode
Playback mode enumeration.
@ CONT
Continuous mode with F0 tracking.
@ RAM_LOOP
RAM loop mode, continuous playback.
@ RAM
RAM playback mode, single play.
@ STANDBY
Standby mode, minimal power consumption.
@ RTP
Real-time playback mode.
bool needsCalibration() const override
Check if calibration is needed.
uint8_t getChipID() const override
Get the chip ID.
void setPwmcfg3Prlvl(uint8_t val)
Set protection level.
void setContBrkTime(uint8_t val)
Set continuous mode break time.
bool playSequence() override
Play the waveform sequence.