More accurate descriptions for descriptors

This commit is contained in:
capitalistspz 2025-03-12 00:07:01 +00:00
parent 186e92221a
commit c3419d5589
2 changed files with 21 additions and 21 deletions

View file

@ -24,14 +24,14 @@ static bool AttemptSetNonBlock(int sockFd)
} }
L2CapWiimote::L2CapWiimote(int recvFd, int sendFd, bdaddr_t addr) L2CapWiimote::L2CapWiimote(int recvFd, int sendFd, bdaddr_t addr)
: m_recvFd(recvFd), m_sendFd(sendFd), m_addr(addr) : m_controlFd(recvFd), m_dataFd(sendFd), m_addr(addr)
{ {
} }
L2CapWiimote::~L2CapWiimote() L2CapWiimote::~L2CapWiimote()
{ {
close(m_recvFd); close(m_controlFd);
close(m_sendFd); close(m_dataFd);
const auto& b = m_addr.b; const auto& b = m_addr.b;
cemuLog_logDebug(LogType::Force, "Wiimote at {:02x}:{:02x}:{:02x}:{:02x}:{:02x}:{:02x} disconnected", b[5], b[4], b[3], b[2], b[1], b[0]); cemuLog_logDebug(LogType::Force, "Wiimote at {:02x}:{:02x}:{:02x}:{:02x}:{:02x}:{:02x} disconnected", b[5], b[4], b[3], b[2], b[1], b[0]);
@ -61,9 +61,9 @@ std::vector<WiimoteDevicePtr> L2CapWiimote::get_devices()
std::vector<WiimoteDevicePtr> outDevices; std::vector<WiimoteDevicePtr> outDevices;
for (const auto& addr : unconnected) for (const auto& addr : unconnected)
{ {
// Socket for sending data to controller, PSM 0x11 // Control socket, PSM 0x11, needs to be open for the data socket to be opened
auto sendFd = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP); auto controlFd = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP);
if (sendFd < 0) if (controlFd < 0)
{ {
cemuLog_logDebug(LogType::Force, "Failed to open send socket: {}", strerror(errno)); cemuLog_logDebug(LogType::Force, "Failed to open send socket: {}", strerror(errno));
continue; continue;
@ -74,21 +74,21 @@ std::vector<WiimoteDevicePtr> L2CapWiimote::get_devices()
sendAddr.l2_psm = htobs(0x11); sendAddr.l2_psm = htobs(0x11);
sendAddr.l2_bdaddr = addr; sendAddr.l2_bdaddr = addr;
if (!AttemptConnect(sendFd, sendAddr) || !AttemptSetNonBlock(sendFd)) if (!AttemptConnect(controlFd, sendAddr) || !AttemptSetNonBlock(controlFd))
{ {
const auto& b = addr.b; const auto& b = addr.b;
cemuLog_logDebug(LogType::Force, "Failed to connect send socket to '{:02x}:{:02x}:{:02x}:{:02x}:{:02x}:{:02x}': {}", cemuLog_logDebug(LogType::Force, "Failed to connect send socket to '{:02x}:{:02x}:{:02x}:{:02x}:{:02x}:{:02x}': {}",
b[5], b[4], b[3], b[2], b[1], b[0], strerror(errno)); b[5], b[4], b[3], b[2], b[1], b[0], strerror(errno));
close(sendFd); close(controlFd);
continue; continue;
} }
// Socket for receiving data from controller, PSM 0x13 // Socket for sending and receiving data from controller, PSM 0x13
auto recvFd = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP); auto dataFd = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP);
if (recvFd < 0) if (dataFd < 0)
{ {
cemuLog_logDebug(LogType::Force, "Failed to open recv socket: {}", strerror(errno)); cemuLog_logDebug(LogType::Force, "Failed to open recv socket: {}", strerror(errno));
close(sendFd); close(controlFd);
continue; continue;
} }
sockaddr_l2 recvAddr{}; sockaddr_l2 recvAddr{};
@ -96,16 +96,16 @@ std::vector<WiimoteDevicePtr> L2CapWiimote::get_devices()
recvAddr.l2_psm = htobs(0x13); recvAddr.l2_psm = htobs(0x13);
recvAddr.l2_bdaddr = addr; recvAddr.l2_bdaddr = addr;
if (!AttemptConnect(recvFd, recvAddr) || !AttemptSetNonBlock(recvFd)) if (!AttemptConnect(dataFd, recvAddr) || !AttemptSetNonBlock(dataFd))
{ {
const auto& b = addr.b; const auto& b = addr.b;
cemuLog_logDebug(LogType::Force, "Failed to connect recv socket to '{:02x}:{:02x}:{:02x}:{:02x}:{:02x}:{:02x}': {}", cemuLog_logDebug(LogType::Force, "Failed to connect recv socket to '{:02x}:{:02x}:{:02x}:{:02x}:{:02x}:{:02x}': {}",
b[5], b[4], b[3], b[2], b[1], b[0], strerror(errno)); b[5], b[4], b[3], b[2], b[1], b[0], strerror(errno));
close(sendFd); close(controlFd);
close(recvFd); close(dataFd);
continue; continue;
} }
outDevices.emplace_back(std::make_shared<L2CapWiimote>(sendFd, recvFd, addr)); outDevices.emplace_back(std::make_shared<L2CapWiimote>(controlFd, dataFd, addr));
s_addressMutex.lock(); s_addressMutex.lock();
s_addresses[addr] = true; s_addresses[addr] = true;
@ -123,13 +123,13 @@ bool L2CapWiimote::write_data(const std::vector<uint8>& data)
buffer[0] = 0xA2; buffer[0] = 0xA2;
std::memcpy(buffer + 1, data.data(), size); std::memcpy(buffer + 1, data.data(), size);
const auto outSize = size + 1; const auto outSize = size + 1;
return send(m_sendFd, buffer, outSize, 0) == outSize; return send(m_dataFd, buffer, outSize, 0) == outSize;
} }
std::optional<std::vector<uint8>> L2CapWiimote::read_data() std::optional<std::vector<uint8>> L2CapWiimote::read_data()
{ {
uint8 buffer[23]; uint8 buffer[23];
const auto nBytes = recv(m_sendFd, buffer, 23, 0); const auto nBytes = recv(m_dataFd, buffer, 23, 0);
if (nBytes < 0 && errno == EWOULDBLOCK) if (nBytes < 0 && errno == EWOULDBLOCK)
return std::vector<uint8>{}; return std::vector<uint8>{};

View file

@ -5,7 +5,7 @@
class L2CapWiimote : public WiimoteDevice class L2CapWiimote : public WiimoteDevice
{ {
public: public:
L2CapWiimote(int recvFd, int sendFd, bdaddr_t addr); L2CapWiimote(int controlFd, int dataFd, bdaddr_t addr);
~L2CapWiimote() override; ~L2CapWiimote() override;
bool write_data(const std::vector<uint8>& data) override; bool write_data(const std::vector<uint8>& data) override;
@ -15,8 +15,8 @@ class L2CapWiimote : public WiimoteDevice
static void AddCandidateAddress(bdaddr_t addr); static void AddCandidateAddress(bdaddr_t addr);
static std::vector<WiimoteDevicePtr> get_devices(); static std::vector<WiimoteDevicePtr> get_devices();
private: private:
int m_recvFd; int m_controlFd;
int m_sendFd; int m_dataFd;
bdaddr_t m_addr; bdaddr_t m_addr;
}; };