77 } __attribute__((packed));
79 } __attribute__((packed));
87 } __attribute__((packed)) finger[2];
88 } __attribute__((packed));
101 } __attribute__((packed));
103 } __attribute__((packed));
127 #if 0 // The status byte depends on if it's sent via USB or Bluetooth, so is not parsed for now 130 uint8_t rightTriggerFeedback;
131 uint8_t leftTriggerFeedback;
132 uint8_t reserved4[10];
137 } __attribute__((packed));
146 } __attribute__((packed));
194 uint16_t
getX(uint8_t finger = 0) {
195 return ps5Data.xy.finger[finger].x;
203 uint16_t
getY(uint8_t finger = 0) {
204 return ps5Data.xy.finger[finger].y;
213 return !(ps5Data.xy.finger[finger].touching);
222 return ps5Data.xy.finger[finger].counter;
232 return (atan2f(-ps5Data.accY, -ps5Data.accZ) + PI) * RAD_TO_DEG;
234 return (atan2f(ps5Data.accX, -ps5Data.accZ) + PI) * RAD_TO_DEG;
245 return ps5Data.gyroX;
247 return ps5Data.gyroY;
249 return ps5Data.gyroZ;
261 #if 0 // Seems to only be available via Bluetooth, so have been disabled for now 266 uint8_t getBatteryLevel() {
267 return ps5Data.status.battery;
271 #if 0 // These are only valid via USB, so have been commented out for now 276 bool getUsbStatus() {
277 return ps5Data.status.usb;
284 bool getAudioStatus() {
285 return ps5Data.status.headphone;
292 bool getMicStatus() {
293 return ps5Data.status.mic;
314 setRumbleOn(0x00, 0xFF);
316 setRumbleOn(0xFF, 0x00);
325 ps5Output.bigRumble = bigRumble;
326 ps5Output.smallRumble = smallRumble;
327 ps5Output.reportChanged =
true;
339 void setLed(uint8_t r, uint8_t g, uint8_t b) {
343 ps5Output.reportChanged =
true;
351 setLed((uint8_t)(color >> 16), (uint8_t)(color >> 8), (uint8_t)(color));
364 ps5Output.playerLeds = mask;
365 ps5Output.reportChanged =
true;
378 ps5Output.microphoneLed = on ? 1 : 0;
379 ps5Output.reportChanged =
true;
384 return message_counter;
393 void Parse(uint8_t len, uint8_t *buf);
402 virtual void sendOutputReport(
PS5Output *output) = 0;
412 uint16_t message_counter = 0;
uint8_t getTouchCounter(uint8_t finger=00)
uint16_t getX(uint8_t finger=0)
void setLed(ColorsEnum color)
uint16_t getY(uint8_t finger=0)
Based on Ludwig Füchsl's DualSense Windows driver https://github.com/Ohjurot/DualSense-Windows.
void setRumbleOn(uint8_t bigRumble, uint8_t smallRumble)
const uint8_t PS5_BUTTONS[]
void setRumbleOn(RumbleEnum mode)
int16_t getSensor(SensorEnum s)
void setPlayerLed(uint8_t mask)
float getAngle(AngleEnum a)
void setLed(uint8_t r, uint8_t g, uint8_t b)
uint16_t getMessageCounter()
bool isTouching(uint8_t finger=0)