Files
wrobot/v1.2/Shibo-main-TOMMY/test/XboxBluetooth.h
T

97 lines
2.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ---------------------------------
* 蓝牙手柄(Xbox)模块
* 包含:蓝牙实体、状态变量、连接处理函数
* 不包含:手柄数据解析逻辑(processControllerData)
------------------------------------- */
#ifndef XBOX_BLUETOOTH_H
#define XBOX_BLUETOOTH_H
#include <Arduino.h>
#include <XboxSeriesXControllerESP32_asukiaaa.hpp> // 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