/* --------------------------------- * 蓝牙手柄(Xbox)模块 * 包含:蓝牙实体、状态变量、连接处理函数 * 不包含:手柄数据解析逻辑(processControllerData) ------------------------------------- */ #ifndef XBOX_BLUETOOTH_H #define XBOX_BLUETOOTH_H #include #include // Xbox手柄库 /************ Xbox手柄全局实体 *************/ // 连接目标手柄的MAC地址(保持原地址不变) XboxSeriesXControllerESP32_asukiaaa::Core xboxController("0a:27:12:5c:71:79"); // 震动 XboxSeriesXHIDReportBuilder_asukiaaa::ReportBase repo; /************ 外部函数声明 *************/ // 声明主文件中的数据处理函数(在主文件中实现) extern void processControllerData(const XboxControllerNotificationParser& data); /************ 蓝牙手柄核心函数 *************/ // 初始化蓝牙手柄(供主文件setup()调用) void xboxControllerInit() { // 启动蓝牙连接 xboxController.begin(); } // 处理蓝牙手柄通知(循环调用,保持连接并接收数据) void process_xbox_notif() { xboxController.onLoop(); // 维持蓝牙连接状态 if (xboxController.isConnected()) { if (xboxController.isWaitingForFirstNotification()) { // 可添加调试信息(如"等待手柄数据...") } else { // 接收数据后,调用主文件的解析函数 processControllerData(xboxController.xboxNotif); } } else { // 可添加调试信息(如"手柄未连接") } } // xbox 按键震动 void XboxKeyVibration() { repo.setAllOff(); repo.v.select.center = true; repo.v.select.left = true; repo.v.select.right = true; repo.v.select.shake = true; repo.v.power.center = 20; repo.v.power.shake = 20; repo.v.timeActive = 10; xboxController.writeHIDReport(repo); delay(250); repo.v.power.center = 0; repo.v.power.shake = 0; xboxController.writeHIDReport(repo); } // xbox 扳机键震动 void XboxtrigRTVibration() { repo.setAllOff(); repo.v.select.center = true; repo.v.select.left = true; repo.v.select.right = true; repo.v.select.shake = true; static uint16_t TrigMax = XboxControllerNotificationParser::maxTrig; uint8_t power = (uint8_t)((float)xboxController.xboxNotif.trigRT / (float)TrigMax * 100) * 0.8; // Serial.print("trigRT:" + String(xboxController.xboxNotif.trigRT)); // Serial.print(",TrigMax:" + String(TrigMax)); // Serial.println(",power:" + String(power)); repo.v.power.center = power; repo.v.power.shake = power; repo.v.power.center = power; repo.v.power.shake = power; repo.v.timeActive = 10; xboxController.writeHIDReport(repo); delay(500); repo.v.power.center = 0; repo.v.power.shake = 0; xboxController.writeHIDReport(repo); } #endif // XBOX_BLUETOOTH_H