summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorLeo Lam <leolino.lam@gmail.com>2017-06-19 10:56:09 +0200
committerGitHub <noreply@github.com>2017-06-19 10:56:09 +0200
commit1be10e7ebc9cb4e00e6d5ec2aee67c4f64686f82 (patch)
treed16b756c9e71e2dede8c664eb28cd9c7d1d4dfa4 /Source/Core
parentc6417e0e789834b3b58c4ea491b5bc490fb0a2da (diff)
parente9a696b160430b3fa50814bd9ad661f97807cb0e (diff)
Merge pull request #4940 from sjnewbury/wiimote-connect
Retry opening of wiimote channels on initial failure
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/HW/WiimoteReal/IOLinux.cpp44
1 files changed, 37 insertions, 7 deletions
diff --git a/Source/Core/Core/HW/WiimoteReal/IOLinux.cpp b/Source/Core/Core/HW/WiimoteReal/IOLinux.cpp
index 82fa1b898b..579b442d6d 100644
--- a/Source/Core/Core/HW/WiimoteReal/IOLinux.cpp
+++ b/Source/Core/Core/HW/WiimoteReal/IOLinux.cpp
@@ -140,22 +140,52 @@ bool WiimoteLinux::ConnectInternal()
// Output channel
addr.l2_psm = htobs(WC_OUTPUT);
- if ((m_cmd_sock = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP)) == -1 ||
- connect(m_cmd_sock, (sockaddr*)&addr, sizeof(addr)) < 0)
+ if (m_cmd_sock = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP))
+ {
+ int retry = 0;
+ while (connect(m_cmd_sock, (sockaddr*)&addr, sizeof(addr)) < 0)
+ {
+ // If opening channel fails sleep and try again
+ if (retry == 3)
+ {
+ WARN_LOG(WIIMOTE, "Unable to connect output channel to Wiimote: %s", strerror(errno));
+ close(m_cmd_sock);
+ m_cmd_sock = -1;
+ return false;
+ }
+ retry++;
+ sleep(1);
+ }
+ }
+ else
{
WARN_LOG(WIIMOTE, "Unable to open output socket to Wiimote: %s", strerror(errno));
- close(m_cmd_sock);
- m_cmd_sock = -1;
return false;
}
// Input channel
addr.l2_psm = htobs(WC_INPUT);
- if ((m_int_sock = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP)) == -1 ||
- connect(m_int_sock, (sockaddr*)&addr, sizeof(addr)) < 0)
+ if (m_int_sock = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP))
+ {
+ int retry = 0;
+ while (connect(m_int_sock, (sockaddr*)&addr, sizeof(addr)) < 0)
+ {
+ // If opening channel fails sleep and try again
+ if (retry == 3)
+ {
+ WARN_LOG(WIIMOTE, "Unable to connect input channel to Wiimote: %s", strerror(errno));
+ close(m_int_sock);
+ close(m_cmd_sock);
+ m_int_sock = m_cmd_sock = -1;
+ return false;
+ }
+ retry++;
+ sleep(1);
+ }
+ }
+ else
{
WARN_LOG(WIIMOTE, "Unable to open input socket from Wiimote: %s", strerror(errno));
- close(m_int_sock);
close(m_cmd_sock);
m_int_sock = m_cmd_sock = -1;
return false;