|
| 1 | +#pragma once |
| 2 | + |
| 3 | +#include "format.hpp" |
| 4 | + |
| 5 | +template <uint8_t REPORT_ID> |
| 6 | +struct fmt::formatter<espp::PS4DualShock4GamepadInputReport<REPORT_ID>> { |
| 7 | + template <typename ParseContext> constexpr auto parse(ParseContext &ctx) const { |
| 8 | + return ctx.begin(); |
| 9 | + } |
| 10 | + |
| 11 | + template <typename FormatContext> |
| 12 | + auto format(const espp::PS4DualShock4GamepadInputReport<REPORT_ID> &report, |
| 13 | + FormatContext &ctx) const { |
| 14 | + auto out = ctx.out(); |
| 15 | + fmt::format_to(out, "PS4DualShock4GamepadInputReport {{"); |
| 16 | + fmt::format_to(out, "left_stick: ({}, {}), ", report.get_left_joystick_x(), |
| 17 | + report.get_left_joystick_y()); |
| 18 | + fmt::format_to(out, "right_stick: ({}, {}), ", report.get_right_joystick_x(), |
| 19 | + report.get_right_joystick_y()); |
| 20 | + fmt::format_to(out, "triggers: (L2={}, R2={}), ", report.get_l2_trigger(), |
| 21 | + report.get_r2_trigger()); |
| 22 | + fmt::format_to(out, "hat: {}, ", static_cast<int>(report.get_hat())); |
| 23 | + fmt::format_to(out, "buttons: ["); |
| 24 | + fmt::format_to(out, "Square={}, Cross={}, Circle={}, Triangle={}, ", report.get_button_square(), |
| 25 | + report.get_button_cross(), report.get_button_circle(), |
| 26 | + report.get_button_triangle()); |
| 27 | + fmt::format_to(out, "L1={}, R1={}, L2={}, R2={}, ", report.get_button_l1(), |
| 28 | + report.get_button_r1(), report.get_button_l2(), report.get_button_r2()); |
| 29 | + fmt::format_to(out, "Share={}, Options={}, L3={}, R3={}, ", report.get_button_share(), |
| 30 | + report.get_button_options(), report.get_button_l3(), report.get_button_r3()); |
| 31 | + fmt::format_to(out, "PS={}, Touchpad={}], ", report.get_button_home(), |
| 32 | + report.get_button_touchpad()); |
| 33 | + fmt::format_to(out, "battery: {}%, charging: {}, ", report.get_battery_level(), |
| 34 | + report.get_battery_charging()); |
| 35 | + auto gyro = report.get_gyroscope(); |
| 36 | + auto accel = report.get_accelerometer(); |
| 37 | + fmt::format_to(out, "gyro: ({}, {}, {}), ", gyro.X, gyro.Y, gyro.Z); |
| 38 | + fmt::format_to(out, "accel: ({}, {}, {}), ", accel.X, accel.Y, accel.Z); |
| 39 | + fmt::format_to(out, "timestamp: {}, counter: {}", report.get_timestamp(), report.get_counter()); |
| 40 | + return fmt::format_to(out, "}}"); |
| 41 | + } |
| 42 | +}; |
| 43 | + |
| 44 | +template <uint8_t REPORT_ID> struct fmt::formatter<espp::PS4DualShock4OutputReport<REPORT_ID>> { |
| 45 | + template <typename ParseContext> constexpr auto parse(ParseContext &ctx) const { |
| 46 | + return ctx.begin(); |
| 47 | + } |
| 48 | + |
| 49 | + template <typename FormatContext> |
| 50 | + auto format(const espp::PS4DualShock4OutputReport<REPORT_ID> &report, FormatContext &ctx) const { |
| 51 | + auto out = ctx.out(); |
| 52 | + fmt::format_to(out, "PS4DualShock4OutputReport {{"); |
| 53 | + fmt::format_to(out, "data: [{::#02X}]", report.data); |
| 54 | + return fmt::format_to(out, "}}"); |
| 55 | + } |
| 56 | +}; |
0 commit comments