From 4c6c06470f4998506d59de0a6488f40d50ca4154 Mon Sep 17 00:00:00 2001 From: aavit Date: Thu, 20 Mar 2014 11:25:31 +0100 Subject: Compilation fixes for Android 4.4 Change-Id: I2017665372e190f9d12841820714457967ff3a3a Reviewed-by: Gatis Paeglis --- src/doppelganger/schedulingpolicyservice.cpp | 11 ++++- src/doppelganger/schedulingpolicyservice.h | 5 ++ src/imports/wifi/qwifimanager.cpp | 74 +++++++++++++++++++++++++--- src/qconnectivity/main.cpp | 60 +++++++++++++++++----- src/utils/qdroidutils.cpp | 3 +- 5 files changed, 132 insertions(+), 21 deletions(-) (limited to 'src') 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 @@ -33,6 +33,68 @@ static bool QT_WIFI_DEBUG = !qgetenv("QT_WIFI_DEBUG").isEmpty(); 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 * @@ -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 #include #include +#include #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 entries; entries = interface.addressEntries(); foreach (const QNetworkAddressEntry &entry, entries) { -- cgit v1.2.3