summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/doppelganger/schedulingpolicyservice.cpp11
-rw-r--r--src/doppelganger/schedulingpolicyservice.h5
-rw-r--r--src/imports/wifi/qwifimanager.cpp74
-rw-r--r--src/qconnectivity/main.cpp60
-rw-r--r--src/utils/qdroidutils.cpp3
5 files changed, 132 insertions, 21 deletions
diff --git a/src/doppelganger/schedulingpolicyservice.cpp b/src/doppelganger/schedulingpolicyservice.cpp
index a7a3f17..365e97a 100644
--- a/src/doppelganger/schedulingpolicyservice.cpp
+++ b/src/doppelganger/schedulingpolicyservice.cpp
@@ -49,7 +49,7 @@ status_t SchedulingPolicyService::onTransact(uint32_t code, const Parcel &data,
int32_t pid = data.readInt32();
int32_t tid = data.readInt32();
int32_t prio = data.readInt32();
- int res = requestPriority(pid, tid, prio);
+ int res = requestPriority_helper(pid, tid, prio);
reply->writeNoException();
reply->writeInt32(res);
return NO_ERROR;
@@ -59,7 +59,16 @@ status_t SchedulingPolicyService::onTransact(uint32_t code, const Parcel &data,
}
}
+#if Q_ANDROID_VERSION_MAJOR == 4 && Q_ANDROID_VERSION_MINOR < 3
int SchedulingPolicyService::requestPriority(int32_t pid, int32_t tid, int32_t prio)
+#else
+int SchedulingPolicyService::requestPriority(int32_t pid, int32_t tid, int32_t prio, bool)
+#endif
+{
+ return requestPriority_helper(pid, tid, prio);
+}
+
+int SchedulingPolicyService::requestPriority_helper(int32_t pid, int32_t tid, int32_t prio)
{
if (prio < PRIORITY_MIN || prio > PRIORITY_MAX)
return PERMISSION_DENIED;
diff --git a/src/doppelganger/schedulingpolicyservice.h b/src/doppelganger/schedulingpolicyservice.h
index ef56dcd..f544561 100644
--- a/src/doppelganger/schedulingpolicyservice.h
+++ b/src/doppelganger/schedulingpolicyservice.h
@@ -30,10 +30,15 @@ public:
android::status_t onTransact(uint32_t code, const android::Parcel &data,
android::Parcel *reply, uint32_t flags);
+#if Q_ANDROID_VERSION_MAJOR == 4 && Q_ANDROID_VERSION_MINOR < 3
int requestPriority(int32_t pid, int32_t tid, int32_t prio);
+#else
+ int requestPriority(int32_t pid, int32_t tid, int32_t prio, bool);
+#endif
private:
SchedulingPolicyService();
+ int requestPriority_helper(int32_t pid, int32_t tid, int32_t prio);
};
#endif // SCHEDULINGPOLICYSERVICE_H
diff --git a/src/imports/wifi/qwifimanager.cpp b/src/imports/wifi/qwifimanager.cpp
index 7d6683b..160b9a7 100644
--- a/src/imports/wifi/qwifimanager.cpp
+++ b/src/imports/wifi/qwifimanager.cpp
@@ -34,6 +34,68 @@ const QEvent::Type WIFI_SCAN_RESULTS = (QEvent::Type) (QEvent::User + 2001);
const QEvent::Type WIFI_CONNECTED = (QEvent::Type) (QEvent::User + 2002);
/*
+ * Work around API differences between Android versions
+ */
+
+static int q_wifi_start_supplicant()
+{
+#if Q_ANDROID_VERSION_MAJOR == 4 && Q_ANDROID_VERSION_MINOR < 1
+ return wifi_start_supplicant();
+#else
+ return wifi_start_supplicant(0);
+#endif
+}
+
+static int q_wifi_stop_supplicant()
+{
+#if Q_ANDROID_VERSION_MAJOR == 4 && Q_ANDROID_VERSION_MINOR < 1
+ return wifi_stop_supplicant();
+#else
+ return wifi_stop_supplicant(0);
+#endif
+}
+
+static int q_wifi_connect_to_supplicant(const char *ifname)
+{
+#if Q_ANDROID_VERSION_MAJOR == 4 && (Q_ANDROID_VERSION_MINOR < 4 && Q_ANDROID_VERSION_MINOR >= 1)
+ return wifi_connect_to_supplicant(ifname);
+#else
+ Q_UNUSED(ifname);
+ return wifi_connect_to_supplicant();
+#endif
+}
+
+static void q_wifi_close_supplicant_connection(const char *ifname)
+{
+#if Q_ANDROID_VERSION_MAJOR == 4 && (Q_ANDROID_VERSION_MINOR < 4 && Q_ANDROID_VERSION_MINOR >= 1)
+ wifi_close_supplicant_connection(ifname);
+#else
+ Q_UNUSED(ifname);
+ wifi_close_supplicant_connection();
+#endif
+}
+
+static int q_wifi_wait_for_event(const char *ifname, char *buf, size_t len)
+{
+#if Q_ANDROID_VERSION_MAJOR == 4 && (Q_ANDROID_VERSION_MINOR < 4 && Q_ANDROID_VERSION_MINOR >= 1)
+ return wifi_wait_for_event(ifname, buf, len);
+#else
+ Q_UNUSED(ifname);
+ return wifi_wait_for_event(buf, len);
+#endif
+}
+
+static int q_wifi_command(const char *ifname, const char *command, char *reply, size_t *reply_len)
+{
+#if Q_ANDROID_VERSION_MAJOR == 4 && (Q_ANDROID_VERSION_MINOR < 4 && Q_ANDROID_VERSION_MINOR >= 1)
+ return wifi_command(ifname, command, reply, reply_len);
+#else
+ Q_UNUSED(ifname);
+ return wifi_command(command, reply, reply_len);
+#endif
+}
+
+/*
* This function is borrowed from /system/core/libnetutils/dhcp_utils.c
*
* Wait for a system property to be assigned a specified value.
@@ -92,7 +154,7 @@ public:
if (QT_WIFI_DEBUG) qDebug("EventReceiver thread is running");
char buffer[2048];
while (1) {
- int size = wifi_wait_for_event(m_if.constData(), buffer, sizeof(buffer) - 1);
+ int size = q_wifi_wait_for_event(m_if.constData(), buffer, sizeof(buffer) - 1);
if (size > 0) {
buffer[size] = 0;
@@ -225,7 +287,7 @@ void QWifiManager::connectToBackend()
qWarning("QWifiManager: failed to load a driver");
return;
}
- if (wifi_start_supplicant(0) != 0) {
+ if (q_wifi_start_supplicant() != 0) {
qWarning("QWifiManager: failed to start a supplicant");
return;
}
@@ -233,7 +295,7 @@ void QWifiManager::connectToBackend()
qWarning("QWifiManager: Timed out waiting for supplicant to start");
return;
}
- if (wifi_connect_to_supplicant(m_interface.constData()) == 0) {
+ if (q_wifi_connect_to_supplicant(m_interface.constData()) == 0) {
m_backendReady = true;
emit backendReadyChanged();
property_set(QT_WIFI_BACKEND, "running");
@@ -253,9 +315,9 @@ void QWifiManager::disconnectFromBackend()
call("SCAN");
m_eventThread->wait();
- if (wifi_stop_supplicant(0) < 0)
+ if (q_wifi_stop_supplicant() < 0)
qWarning("QWifiManager: failed to stop supplicant");
- wifi_close_supplicant_connection(m_interface.constData());
+ q_wifi_close_supplicant_connection(m_interface.constData());
property_set(QT_WIFI_BACKEND, "stopped");
m_backendReady = false;
emit backendReadyChanged();
@@ -283,7 +345,7 @@ QByteArray QWifiManager::call(const char *command) const
{
char data[2048];
size_t len = sizeof(data) - 1; // -1: room to add a 0-terminator
- if (wifi_command(m_interface.constData(), command, data, &len) < 0) {
+ if (q_wifi_command(m_interface.constData(), command, data, &len) < 0) {
qWarning("QWifiManager: call failed: %s", command);
return QByteArray();
}
diff --git a/src/qconnectivity/main.cpp b/src/qconnectivity/main.cpp
index 046375e..2b167f4 100644
--- a/src/qconnectivity/main.cpp
+++ b/src/qconnectivity/main.cpp
@@ -41,18 +41,52 @@ static int MIN_RENEWAL_TIME_SECS = 300; // 5 min
#define ETH_INTERFACE_HW "eth0"
#define ETH_INTERFACE_EMULATOR "eth1"
+#if Q_ANDROID_VERSION_MAJOR == 4 && Q_ANDROID_VERSION_MINOR < 3
// this function is defined in android/system/core/libnetutils/dhcp_utils.c
extern "C" {
-int dhcp_do_request_renew(const char *ifname,
- const char *ipaddr,
- const char *gateway,
- uint32_t *prefixLength,
- const char *dns1,
- const char *dns2,
- const char *server,
- uint32_t *lease,
- const char *vendorInfo);
+int dhcp_do_request_renew(char *ifname,
+ char *ipaddr,
+ char *gateway,
+ uint32_t *prefixLength,
+ char *dns1,
+ char *dns2,
+ char *server,
+ uint32_t *lease,
+ char *vendorInfo);
}
+#endif
+
+static int q_dhcp_do_request(bool renew,
+ const char *ifname,
+ char *ipaddr,
+ char *gateway,
+ uint32_t *prefixLength,
+ char *dns1,
+ char *dns2,
+ char *server,
+ uint32_t *lease,
+ char *vendorInfo)
+{
+#if Q_ANDROID_VERSION_MAJOR == 4 && Q_ANDROID_VERSION_MINOR < 3
+ if (!renew)
+ return dhcp_do_request(ifname, ipaddr, gateway, prefixLength, dns1, dns2, server, lease, vendorInfo);
+ return dhcp_do_request_renew(ifname, ipaddr, gateway, prefixLength, dns1, dns2, server, lease, vendorInfo);
+#else
+ char *dns[3] = {dns1, dns2, 0};
+ char domain[PROPERTY_VALUE_MAX];
+ char mtu[PROPERTY_VALUE_MAX];
+#if Q_ANDROID_VERSION_MAJOR == 4 && Q_ANDROID_VERSION_MINOR < 4
+ if (!renew)
+ return dhcp_do_request(ifname, ipaddr, gateway, prefixLength, dns, server, lease, vendorInfo);
+ return dhcp_do_request_renew(ifname, ipaddr, gateway, prefixLength, dns, server, lease, vendorInfo);
+#else
+ if (!renew)
+ return dhcp_do_request(ifname, ipaddr, gateway, prefixLength, dns, server, lease, vendorInfo, domain, mtu);
+ return dhcp_do_request_renew(ifname, ipaddr, gateway, prefixLength, dns, server, lease, vendorInfo, domain, mtu);
+#endif
+#endif
+}
+
class LeaseTimer;
class QConnectivityDaemon : public QObject
@@ -254,8 +288,8 @@ bool QConnectivityDaemon::startDhcp(bool renew, const char *interface)
char vendorInfo[PROPERTY_VALUE_MAX];
if (renew) {
- result = dhcp_do_request_renew(interface, ipaddr, gateway, &prefixLength,
- dns1, dns2, server, &lease, vendorInfo);
+ result = q_dhcp_do_request(true, interface, ipaddr, gateway, &prefixLength,
+ dns1, dns2, server, &lease, vendorInfo);
} else {
// stop any existing DHCP daemon before starting new
dhcp_stop(interface);
@@ -263,8 +297,8 @@ bool QConnectivityDaemon::startDhcp(bool renew, const char *interface)
// the device init.rc. Android starts dhcpcd with argument -B which means that
// we are responsible for renewing a lease before it expires
ifc_clear_addresses(interface);
- result = dhcp_do_request(interface, ipaddr, gateway, &prefixLength,
- dns1, dns2, server, &lease, vendorInfo);
+ result = q_dhcp_do_request(false, interface, ipaddr, gateway, &prefixLength,
+ dns1, dns2, server, &lease, vendorInfo);
}
bool success = (result == 0) ? true : false;
diff --git a/src/utils/qdroidutils.cpp b/src/utils/qdroidutils.cpp
index 7ab2098..d880de9 100644
--- a/src/utils/qdroidutils.cpp
+++ b/src/utils/qdroidutils.cpp
@@ -29,6 +29,7 @@
#include <cutils/properties.h>
#include <hardware/lights.h>
#include <media/AudioSystem.h>
+#include <utils/String8.h>
#endif
/*!
@@ -225,7 +226,7 @@ bool QDroidUtils::setDisplayBrightness(quint8 value)
QString QDroidUtils::getIPAddress()
{
QStringList addresses;
- QNetworkInterface interface = QNetworkInterface::interfaceFromName("eth0");
+ QNetworkInterface interface = QNetworkInterface::interfaceFromName(QStringLiteral("eth0"));
QList<QNetworkAddressEntry> entries;
entries = interface.addressEntries();
foreach (const QNetworkAddressEntry &entry, entries) {