Merge "Correct reporting of errors in MediaCrypto"
diff --git a/automotive/vehicle/2.0/default/Android.mk b/automotive/vehicle/2.0/default/Android.mk
index fcfe3df..ba4a6cd 100644
--- a/automotive/vehicle/2.0/default/Android.mk
+++ b/automotive/vehicle/2.0/default/Android.mk
@@ -75,6 +75,8 @@
LOCAL_MODULE:= $(vhal_v2_0)-default-impl-lib
LOCAL_SRC_FILES:= \
impl/vhal_v2_0/DefaultVehicleHal.cpp \
+ impl/vhal_v2_0/PipeComm.cpp \
+ impl/vhal_v2_0/SocketComm.cpp
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/impl/vhal_v2_0
@@ -86,6 +88,7 @@
$(vhal_v2_0)-manager-lib \
LOCAL_SHARED_LIBRARIES := \
+ libbase \
libbinder \
libhidlbase \
libhidltransport \
@@ -98,6 +101,8 @@
LOCAL_STATIC_LIBRARIES := \
$(vhal_v2_0)-libproto-native \
+LOCAL_CFLAGS += -Wall -Wextra -Werror
+
include $(BUILD_STATIC_LIBRARY)
@@ -146,6 +151,7 @@
VehicleService.cpp
LOCAL_SHARED_LIBRARIES := \
+ libbase \
libbinder \
libhidlbase \
libhidltransport \
@@ -160,4 +166,6 @@
$(vhal_v2_0)-default-impl-lib \
$(vhal_v2_0)-libproto-native \
+LOCAL_CFLAGS += -Wall -Wextra -Werror
+
include $(BUILD_EXECUTABLE)
diff --git a/automotive/vehicle/2.0/default/impl/vhal_v2_0/CommBase.h b/automotive/vehicle/2.0/default/impl/vhal_v2_0/CommBase.h
new file mode 100644
index 0000000..6832ad3
--- /dev/null
+++ b/automotive/vehicle/2.0/default/impl/vhal_v2_0/CommBase.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef android_hardware_automotive_vehicle_V2_0_impl_CommBase_H_
+#define android_hardware_automotive_vehicle_V2_0_impl_CommBase_H_
+
+#include <string>
+#include <vector>
+
+namespace android {
+namespace hardware {
+namespace automotive {
+namespace vehicle {
+namespace V2_0 {
+
+namespace impl {
+
+/**
+ * This is the communications base class. It defines the interface used in DefaultVehicleHal to
+ * send and receive data to and from the emulator.
+ */
+class CommBase {
+public:
+ virtual ~CommBase() = default;
+
+ /**
+ * Closes a connection if it is open.
+ */
+ virtual void stop() {}
+
+ /**
+ * Creates a connection to the other side.
+ *
+ * @return int Returns fd or socket number if connection is successful.
+ * Otherwise, returns -1 if no connection is availble.
+ */
+ virtual int connect() { return 0; }
+
+ /**
+ * Opens the communications channel.
+ *
+ * @return int Returns 0 if channel is opened, else -errno if failed.
+ */
+ virtual int open() = 0;
+
+ /**
+ * Blocking call to read data from the connection.
+ *
+ * @return std::vector<uint8_t> Serialized protobuf data received from emulator. This will be
+ * an empty vector if the connection was closed or some other error occurred.
+ */
+ virtual std::vector<uint8_t> read() = 0;
+
+ /**
+ * Transmits a string of data to the emulator.
+ *
+ * @param data Serialized protobuf data to transmit.
+ *
+ * @return int Number of bytes transmitted, or -1 if failed.
+ */
+ virtual int write(const std::vector<uint8_t>& data) = 0;
+};
+
+} // impl
+
+} // namespace V2_0
+} // namespace vehicle
+} // namespace automotive
+} // namespace hardware
+} // namespace android
+
+
+#endif // android_hardware_automotive_vehicle_V2_0_impl_CommBase_H_
diff --git a/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultConfig.h b/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultConfig.h
index 02f8438..3c17183 100644
--- a/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultConfig.h
+++ b/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultConfig.h
@@ -36,6 +36,30 @@
},
{
+ .prop = toInt(VehicleProperty::PERF_VEHICLE_SPEED),
+ .access = VehiclePropertyAccess::READ,
+ .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
+ },
+
+ {
+ .prop = toInt(VehicleProperty::CURRENT_GEAR),
+ .access = VehiclePropertyAccess::READ,
+ .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
+ },
+
+ {
+ .prop = toInt(VehicleProperty::PARKING_BRAKE_ON),
+ .access = VehiclePropertyAccess::READ,
+ .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
+ },
+
+ {
+ .prop = toInt(VehicleProperty::FUEL_LEVEL_LOW),
+ .access = VehiclePropertyAccess::READ,
+ .changeMode = VehiclePropertyChangeMode::ON_CHANGE,
+ },
+
+ {
.prop = toInt(VehicleProperty::HVAC_POWER_ON),
.access = VehiclePropertyAccess::READ_WRITE,
.changeMode = VehiclePropertyChangeMode::ON_CHANGE,
diff --git a/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultVehicleHal.cpp b/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultVehicleHal.cpp
index f21e950..38e21c7 100644
--- a/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultVehicleHal.cpp
+++ b/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultVehicleHal.cpp
@@ -18,14 +18,14 @@
#include <android/log.h>
#include <algorithm>
-#include <netinet/in.h>
-#include <sys/socket.h>
+#include <android-base/properties.h>
+#include <cstdio>
#include "DefaultVehicleHal.h"
+#include "PipeComm.h"
+#include "SocketComm.h"
#include "VehicleHalProto.pb.h"
-#define DEBUG_SOCKET (33452)
-
namespace android {
namespace hardware {
namespace automotive {
@@ -184,34 +184,35 @@
void DefaultVehicleHal::parseRxProtoBuf(std::vector<uint8_t>& msg) {
emulator::EmulatorMessage rxMsg;
emulator::EmulatorMessage respMsg;
- std::string str(reinterpret_cast<const char*>(msg.data()), msg.size());
- rxMsg.ParseFromString(str);
+ if (rxMsg.ParseFromArray(msg.data(), msg.size())) {
+ switch (rxMsg.msg_type()) {
+ case emulator::GET_CONFIG_CMD:
+ doGetConfig(rxMsg, respMsg);
+ break;
+ case emulator::GET_CONFIG_ALL_CMD:
+ doGetConfigAll(rxMsg, respMsg);
+ break;
+ case emulator::GET_PROPERTY_CMD:
+ doGetProperty(rxMsg, respMsg);
+ break;
+ case emulator::GET_PROPERTY_ALL_CMD:
+ doGetPropertyAll(rxMsg, respMsg);
+ break;
+ case emulator::SET_PROPERTY_CMD:
+ doSetProperty(rxMsg, respMsg);
+ break;
+ default:
+ ALOGW("%s: Unknown message received, type = %d", __FUNCTION__, rxMsg.msg_type());
+ respMsg.set_status(emulator::ERROR_UNIMPLEMENTED_CMD);
+ break;
+ }
- switch (rxMsg.msg_type()) {
- case emulator::GET_CONFIG_CMD:
- doGetConfig(rxMsg, respMsg);
- break;
- case emulator::GET_CONFIG_ALL_CMD:
- doGetConfigAll(rxMsg, respMsg);
- break;
- case emulator::GET_PROPERTY_CMD:
- doGetProperty(rxMsg, respMsg);
- break;
- case emulator::GET_PROPERTY_ALL_CMD:
- doGetPropertyAll(rxMsg, respMsg);
- break;
- case emulator::SET_PROPERTY_CMD:
- doSetProperty(rxMsg, respMsg);
- break;
- default:
- ALOGW("%s: Unknown message received, type = %d", __FUNCTION__, rxMsg.msg_type());
- respMsg.set_status(emulator::ERROR_UNIMPLEMENTED_CMD);
- break;
+ // Send the reply
+ txMsg(respMsg);
+ } else {
+ ALOGE("%s: ParseFromString() failed. msgSize=%d", __FUNCTION__, static_cast<int>(msg.size()));
}
-
- // Send the reply
- txMsg(respMsg);
}
// Copies internal VehiclePropConfig data structure to protobuf VehiclePropConfig
@@ -306,94 +307,50 @@
}
}
-void DefaultVehicleHal::rxMsg(void) {
+void DefaultVehicleHal::rxMsg() {
int numBytes = 0;
- int32_t msgSize;
- do {
- // This is a variable length message.
- // Read the number of bytes to rx over the socket
- numBytes = read(mCurSocket, &msgSize, sizeof(msgSize));
- if (numBytes != sizeof(msgSize)) {
- // This happens when connection is closed
- ALOGD("%s: numBytes=%d, expected=4", __FUNCTION__, numBytes);
- break;
- }
+ while (mExit == 0) {
+ std::vector<uint8_t> msg = mComm->read();
- std::vector<uint8_t> msg = std::vector<uint8_t>(msgSize);
-
- numBytes = read(mCurSocket, msg.data(), msgSize);
-
- if ((numBytes == msgSize) && (msgSize > 0)) {
+ if (msg.size() > 0) {
// Received a message.
parseRxProtoBuf(msg);
} else {
// This happens when connection is closed
- ALOGD("%s: numBytes=%d, msgSize=%d", __FUNCTION__, numBytes, msgSize);
+ ALOGD("%s: numBytes=%d, msgSize=%d", __FUNCTION__, numBytes,
+ static_cast<int32_t>(msg.size()));
break;
}
- } while (mExit == 0);
+ }
}
-void DefaultVehicleHal::rxThread(void) {
- // Initialize the socket
- {
- int retVal;
- struct sockaddr_in servAddr;
+void DefaultVehicleHal::rxThread() {
+ bool isEmulator = android::base::GetBoolProperty("ro.kernel.qemu", false);
- mSocket = socket(AF_INET, SOCK_STREAM, 0);
- if (mSocket < 0) {
- ALOGE("%s: socket() failed, mSocket=%d, errno=%d", __FUNCTION__, mSocket, errno);
- mSocket = -1;
- return;
- }
-
- bzero(&servAddr, sizeof(servAddr));
- servAddr.sin_family = AF_INET;
- servAddr.sin_addr.s_addr = INADDR_ANY;
- servAddr.sin_port = htons(DEBUG_SOCKET);
-
- retVal = bind(mSocket, reinterpret_cast<struct sockaddr*>(&servAddr), sizeof(servAddr));
- if(retVal < 0) {
- ALOGE("%s: Error on binding: retVal=%d, errno=%d", __FUNCTION__, retVal, errno);
- close(mSocket);
- mSocket = -1;
- return;
- }
-
- listen(mSocket, 1);
-
- // Set the socket to be non-blocking so we can poll it continouously
- fcntl(mSocket, F_SETFL, O_NONBLOCK);
+ if (isEmulator) {
+ // Initialize pipe to Emulator
+ mComm.reset(new PipeComm);
+ } else {
+ // Initialize socket over ADB
+ mComm.reset(new SocketComm);
}
- while (mExit == 0) {
- struct sockaddr_in cliAddr;
- socklen_t cliLen = sizeof(cliAddr);
- int cSocket = accept(mSocket, reinterpret_cast<struct sockaddr*>(&cliAddr), &cliLen);
+ int retVal = mComm->open();
- if (cSocket >= 0) {
- {
- std::lock_guard<std::mutex> lock(mTxMutex);
- mCurSocket = cSocket;
+ if (retVal == 0) {
+ // Comms are properly opened
+ while (mExit == 0) {
+ retVal = mComm->connect();
+
+ if (retVal >= 0) {
+ rxMsg();
}
- ALOGD("%s: Incoming connection received on socket %d", __FUNCTION__, cSocket);
- rxMsg();
- ALOGD("%s: Connection terminated on socket %d", __FUNCTION__, cSocket);
- {
- std::lock_guard<std::mutex> lock(mTxMutex);
- mCurSocket = -1;
- }
+
+ // Check every 100ms for a new connection
+ std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
-
- // TODO: Use a blocking socket?
- // Check every 100ms for a new socket connection
- std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
-
- // Shutdown the socket
- close(mSocket);
- mSocket = -1;
}
// This function sets the default value of a property if we are interested in setting it.
@@ -404,6 +361,18 @@
case toInt(VehicleProperty::INFO_MAKE):
prop->value.stringValue = "Default Car";
break;
+ case toInt(VehicleProperty::PERF_VEHICLE_SPEED):
+ prop->value.floatValues[0] = 0;
+ break;
+ case toInt(VehicleProperty::CURRENT_GEAR):
+ prop->value.int32Values[0] = toInt(VehicleGear::GEAR_PARK);
+ break;
+ case toInt(VehicleProperty::PARKING_BRAKE_ON):
+ prop->value.int32Values[0] = 1;
+ break;
+ case toInt(VehicleProperty::FUEL_LEVEL_LOW):
+ prop->value.int32Values[0] = 0;
+ break;
case toInt(VehicleProperty::HVAC_POWER_ON):
prop->value.int32Values[0] = 1;
break;
@@ -454,21 +423,15 @@
// Transmit a reply back to the emulator
void DefaultVehicleHal::txMsg(emulator::EmulatorMessage& txMsg) {
- std::string msgString;
+ int numBytes = txMsg.ByteSize();
+ std::vector<uint8_t> msg(numBytes);
- if (txMsg.SerializeToString(&msgString)) {
- int32_t msgLen = msgString.length();
+ if (txMsg.SerializeToArray(msg.data(), msg.size())) {
int retVal = 0;
- // TODO: Prepend the message length to the string without a copy
- msgString.insert(0, reinterpret_cast<char*>(&msgLen), 4);
-
// Send the message
- {
- std::lock_guard<std::mutex> lock(mTxMutex);
- if (mCurSocket != -1) {
- retVal = write(mCurSocket, msgString.data(), msgString.size());
- }
+ if (mExit == 0) {
+ mComm->write(msg);
}
if (retVal < 0) {
@@ -553,9 +516,7 @@
// Parse supported properties list and generate vector of property values to hold current values.
void DefaultVehicleHal::onCreate() {
// Initialize member variables
- mCurSocket = -1;
mExit = 0;
- mSocket = -1;
// Get the list of configurations supported by this HAL
std::vector<VehiclePropConfig> configs = listProperties();
diff --git a/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultVehicleHal.h b/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultVehicleHal.h
index 29e8a9f..b4ba8ba 100644
--- a/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultVehicleHal.h
+++ b/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultVehicleHal.h
@@ -23,6 +23,9 @@
#include <utils/SystemClock.h>
+#include "CommBase.h"
+#include "VehicleHalProto.pb.h"
+
#include <vhal_v2_0/VehicleHal.h>
#include "DefaultConfig.h"
@@ -44,13 +47,7 @@
mExit = 1;
// Close emulator socket if it is open
- {
- std::lock_guard<std::mutex> lock(mTxMutex);
- if (mCurSocket != -1) {
- close(mCurSocket);
- mCurSocket = -1;
- }
- }
+ mComm->stop();
mThread.join();
}
@@ -91,19 +88,17 @@
void populateProtoVehiclePropValue(emulator::VehiclePropValue* protoVal,
const VehiclePropValue* val);
void setDefaultValue(VehiclePropValue* prop);
- void rxMsg(void);
- void rxThread(void);
+ void rxMsg();
+ void rxThread();
void txMsg(emulator::EmulatorMessage& txMsg);
StatusCode updateProperty(const VehiclePropValue& propValue);
private:
// TODO: Use a hashtable to support indexing props
std::vector<std::unique_ptr<VehiclePropValue>> mProps;
- std::atomic<int> mCurSocket;
std::atomic<int> mExit;
std::mutex mPropsMutex;
- int mSocket;
- std::mutex mTxMutex;
std::thread mThread;
+ std::unique_ptr<CommBase> mComm{nullptr};
};
} // impl
diff --git a/automotive/vehicle/2.0/default/impl/vhal_v2_0/PipeComm.cpp b/automotive/vehicle/2.0/default/impl/vhal_v2_0/PipeComm.cpp
new file mode 100644
index 0000000..6f219fa
--- /dev/null
+++ b/automotive/vehicle/2.0/default/impl/vhal_v2_0/PipeComm.cpp
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "PipeComm"
+
+#include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
+#include <android/log.h>
+#include <system/qemu_pipe.h>
+
+#include "PipeComm.h"
+
+#define CAR_SERVICE_NAME "pipe:qemud:car"
+
+
+namespace android {
+namespace hardware {
+namespace automotive {
+namespace vehicle {
+namespace V2_0 {
+
+namespace impl {
+
+PipeComm::PipeComm() {
+ // Initialize member vars
+ mPipeFd = -1;
+}
+
+
+int PipeComm::open() {
+ int fd = qemu_pipe_open(CAR_SERVICE_NAME);
+
+ if (fd < 0) {
+ ALOGE("%s: Could not open connection to service: %s %d", __FUNCTION__, strerror(errno), fd);
+ return -errno;
+ }
+
+ ALOGI("%s: OPENED PIPE, fd=%d", __FUNCTION__, fd);
+ mPipeFd = fd;
+ return 0;
+}
+
+std::vector<uint8_t> PipeComm::read() {
+ static constexpr int MAX_RX_MSG_SZ = 2048;
+ std::vector<uint8_t> msg = std::vector<uint8_t>(MAX_RX_MSG_SZ);
+ int numBytes;
+
+ numBytes = qemu_pipe_frame_recv(mPipeFd, msg.data(), msg.size());
+
+ if (numBytes == MAX_RX_MSG_SZ) {
+ ALOGE("%s: Received max size = %d", __FUNCTION__, MAX_RX_MSG_SZ);
+ } else if (numBytes > 0) {
+ msg.resize(numBytes);
+ return msg;
+ } else {
+ ALOGD("%s: Connection terminated on pipe %d, numBytes=%d", __FUNCTION__, mPipeFd, numBytes);
+ {
+ std::lock_guard<std::mutex> lock(mMutex);
+ mPipeFd = -1;
+ }
+ }
+
+ return std::vector<uint8_t>();
+}
+
+int PipeComm::write(const std::vector<uint8_t>& data) {
+ int retVal = 0;
+
+ {
+ std::lock_guard<std::mutex> lock(mMutex);
+ if (mPipeFd != -1) {
+ retVal = qemu_pipe_frame_send(mPipeFd, data.data(), data.size());
+ }
+ }
+
+ if (retVal < 0) {
+ retVal = -errno;
+ ALOGE("%s: send_cmd: (fd=%d): ERROR: %s", __FUNCTION__, mPipeFd, strerror(errno));
+ }
+
+ return retVal;
+}
+
+
+} // impl
+
+} // namespace V2_0
+} // namespace vehicle
+} // namespace automotive
+} // namespace hardware
+} // namespace android
+
+
+
diff --git a/automotive/vehicle/2.0/default/impl/vhal_v2_0/PipeComm.h b/automotive/vehicle/2.0/default/impl/vhal_v2_0/PipeComm.h
new file mode 100644
index 0000000..bcd32d0
--- /dev/null
+++ b/automotive/vehicle/2.0/default/impl/vhal_v2_0/PipeComm.h
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef android_hardware_automotive_vehicle_V2_0_impl_PipeComm_H_
+#define android_hardware_automotive_vehicle_V2_0_impl_PipeComm_H_
+
+#include <mutex>
+#include <vector>
+#include "CommBase.h"
+
+namespace android {
+namespace hardware {
+namespace automotive {
+namespace vehicle {
+namespace V2_0 {
+
+namespace impl {
+
+/**
+ * PipeComm uses a qemu pipe interface to connect to the Goldfish Emulator.
+ */
+class PipeComm : public CommBase {
+public:
+ PipeComm();
+
+ /**
+ * Opens a pipe and begins listening.
+ *
+ * @return int Returns 0 on success.
+ */
+ int open() override;
+
+ /**
+ * Blocking call to read data from the connection.
+ *
+ * @return std::vector<uint8_t> Serialized protobuf data received from emulator. This will be
+ * an empty vector if the connection was closed or some other error occurred.
+ */
+ std::vector<uint8_t> read() override;
+
+ /**
+ * Transmits a string of data to the emulator.
+ *
+ * @param data Serialized protobuf data to transmit.
+ *
+ * @return int Number of bytes transmitted, or -1 if failed.
+ */
+ int write(const std::vector<uint8_t>& data) override;
+
+private:
+ std::mutex mMutex;
+ int mPipeFd;
+};
+
+} // impl
+
+} // namespace V2_0
+} // namespace vehicle
+} // namespace automotive
+} // namespace hardware
+} // namespace android
+
+
+#endif // android_hardware_automotive_vehicle_V2_0_impl_PipeComm_H_
diff --git a/automotive/vehicle/2.0/default/impl/vhal_v2_0/SocketComm.cpp b/automotive/vehicle/2.0/default/impl/vhal_v2_0/SocketComm.cpp
new file mode 100644
index 0000000..a3ef4b1
--- /dev/null
+++ b/automotive/vehicle/2.0/default/impl/vhal_v2_0/SocketComm.cpp
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "SocketComm"
+
+#include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
+#include <android/log.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+
+#include "SocketComm.h"
+
+// Socket to use when communicating with Host PC
+static constexpr int DEBUG_SOCKET = 33452;
+
+namespace android {
+namespace hardware {
+namespace automotive {
+namespace vehicle {
+namespace V2_0 {
+
+namespace impl {
+
+SocketComm::SocketComm() {
+ // Initialize member vars
+ mCurSockFd = -1;
+ mExit = 0;
+ mSockFd = -1;
+}
+
+
+SocketComm::~SocketComm() {
+ stop();
+}
+
+int SocketComm::connect() {
+ sockaddr_in cliAddr;
+ socklen_t cliLen = sizeof(cliAddr);
+ int cSockFd = accept(mSockFd, reinterpret_cast<struct sockaddr*>(&cliAddr), &cliLen);
+
+ if (cSockFd >= 0) {
+ {
+ std::lock_guard<std::mutex> lock(mMutex);
+ mCurSockFd = cSockFd;
+ }
+ ALOGD("%s: Incoming connection received on socket %d", __FUNCTION__, cSockFd);
+ } else {
+ cSockFd = -1;
+ }
+
+ return cSockFd;
+}
+
+int SocketComm::open() {
+ int retVal;
+ struct sockaddr_in servAddr;
+
+ mSockFd = socket(AF_INET, SOCK_STREAM, 0);
+ if (mSockFd < 0) {
+ ALOGE("%s: socket() failed, mSockFd=%d, errno=%d", __FUNCTION__, mSockFd, errno);
+ mSockFd = -1;
+ return -errno;
+ }
+
+ memset(&servAddr, 0, sizeof(servAddr));
+ servAddr.sin_family = AF_INET;
+ servAddr.sin_addr.s_addr = INADDR_ANY;
+ servAddr.sin_port = htons(DEBUG_SOCKET);
+
+ retVal = bind(mSockFd, reinterpret_cast<struct sockaddr*>(&servAddr), sizeof(servAddr));
+ if(retVal < 0) {
+ ALOGE("%s: Error on binding: retVal=%d, errno=%d", __FUNCTION__, retVal, errno);
+ close(mSockFd);
+ mSockFd = -1;
+ return -errno;
+ }
+
+ listen(mSockFd, 1);
+
+ // Set the socket to be non-blocking so we can poll it continouously
+ fcntl(mSockFd, F_SETFL, O_NONBLOCK);
+
+ return 0;
+}
+
+std::vector<uint8_t> SocketComm::read() {
+ int32_t msgSize;
+ int numBytes = 0;
+
+ // This is a variable length message.
+ // Read the number of bytes to rx over the socket
+ numBytes = ::read(mCurSockFd, &msgSize, sizeof(msgSize));
+ msgSize = ntohl(msgSize);
+
+ if (numBytes != sizeof(msgSize)) {
+ // This happens when connection is closed
+ ALOGD("%s: numBytes=%d, expected=4", __FUNCTION__, numBytes);
+ ALOGD("%s: Connection terminated on socket %d", __FUNCTION__, mCurSockFd);
+ {
+ std::lock_guard<std::mutex> lock(mMutex);
+ mCurSockFd = -1;
+ }
+
+ return std::vector<uint8_t>();
+ }
+
+ std::vector<uint8_t> msg = std::vector<uint8_t>(msgSize);
+
+ numBytes = ::read(mCurSockFd, msg.data(), msgSize);
+
+ if ((numBytes == msgSize) && (msgSize > 0)) {
+ // Received a message.
+ return msg;
+ } else {
+ // This happens when connection is closed
+ ALOGD("%s: numBytes=%d, msgSize=%d", __FUNCTION__, numBytes, msgSize);
+ ALOGD("%s: Connection terminated on socket %d", __FUNCTION__, mCurSockFd);
+ {
+ std::lock_guard<std::mutex> lock(mMutex);
+ mCurSockFd = -1;
+ }
+
+ return std::vector<uint8_t>();
+ }
+}
+
+void SocketComm::stop() {
+ if (mExit == 0) {
+ std::lock_guard<std::mutex> lock(mMutex);
+ mExit = 1;
+
+ // Close emulator socket if it is open
+ if (mCurSockFd != -1) {
+ close(mCurSockFd);
+ mCurSockFd = -1;
+ }
+
+ if (mSockFd != -1) {
+ close(mSockFd);
+ mSockFd = -1;
+ }
+ }
+}
+
+int SocketComm::write(const std::vector<uint8_t>& data) {
+ static constexpr int MSG_HEADER_LEN = 4;
+ int retVal = 0;
+ union {
+ uint32_t msgLen;
+ uint8_t msgLenBytes[MSG_HEADER_LEN];
+ };
+
+ // Prepare header for the message
+ msgLen = static_cast<uint32_t>(data.size());
+ msgLen = htonl(msgLen);
+
+ std::lock_guard<std::mutex> lock(mMutex);
+ if (mCurSockFd != -1) {
+ retVal = ::write(mCurSockFd, msgLenBytes, MSG_HEADER_LEN);
+
+ if (retVal == MSG_HEADER_LEN) {
+ retVal = ::write(mCurSockFd, data.data(), data.size());
+ }
+ }
+
+ return retVal;
+}
+
+
+} // impl
+
+} // namespace V2_0
+} // namespace vehicle
+} // namespace automotive
+} // namespace hardware
+} // namespace android
+
diff --git a/automotive/vehicle/2.0/default/impl/vhal_v2_0/SocketComm.h b/automotive/vehicle/2.0/default/impl/vhal_v2_0/SocketComm.h
new file mode 100644
index 0000000..12cfb29
--- /dev/null
+++ b/automotive/vehicle/2.0/default/impl/vhal_v2_0/SocketComm.h
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef android_hardware_automotive_vehicle_V2_0_impl_SocketComm_H_
+#define android_hardware_automotive_vehicle_V2_0_impl_SocketComm_H_
+
+#include <mutex>
+#include <vector>
+#include "CommBase.h"
+
+namespace android {
+namespace hardware {
+namespace automotive {
+namespace vehicle {
+namespace V2_0 {
+
+namespace impl {
+
+/**
+ * SocketComm opens a socket via adb's TCP port forwarding to enable a Host PC to connect to
+ * the VehicleHAL.
+ */
+class SocketComm : public CommBase {
+public:
+ SocketComm();
+ virtual ~SocketComm();
+
+ /**
+ * Creates a connection to the other side.
+ *
+ * @return int Returns fd or socket number if connection is successful.
+ * Otherwise, returns -1 if no connection is availble.
+ */
+ int connect() override;
+
+ /**
+ * Opens a socket and begins listening.
+ *
+ * @return int Returns 0 on success.
+ */
+ int open() override;
+
+ /**
+ * Blocking call to read data from the connection.
+ *
+ * @return std::vector<uint8_t> Serialized protobuf data received from emulator. This will be
+ * an empty vector if the connection was closed or some other error occurred.
+ */
+ std::vector<uint8_t> read() override;
+
+ /**
+ * Closes a connection if it is open.
+ */
+ void stop() override;
+
+ /**
+ * Transmits a string of data to the emulator.
+ *
+ * @param data Serialized protobuf data to transmit.
+ *
+ * @return int Number of bytes transmitted, or -1 if failed.
+ */
+ int write(const std::vector<uint8_t>& data) override;
+
+private:
+ int mCurSockFd;
+ std::atomic<int> mExit;
+ std::mutex mMutex;
+ int mSockFd;
+};
+
+} // impl
+
+} // namespace V2_0
+} // namespace vehicle
+} // namespace automotive
+} // namespace hardware
+} // namespace android
+
+
+#endif // android_hardware_automotive_vehicle_V2_0_impl_SocketComm_H_
diff --git a/automotive/vehicle/2.1/default/Android.mk b/automotive/vehicle/2.1/default/Android.mk
index c9d13ea..3075956 100644
--- a/automotive/vehicle/2.1/default/Android.mk
+++ b/automotive/vehicle/2.1/default/Android.mk
@@ -70,6 +70,7 @@
$(vhal_v2_0)-libproto-native
LOCAL_SHARED_LIBRARIES := \
+ libbase \
libbinder \
libhidlbase \
libhidltransport \
@@ -80,6 +81,8 @@
$(vhal_v2_0) \
$(vhal_v2_1) \
+LOCAL_CFLAGS += -Wall -Wextra -Werror
+
include $(BUILD_STATIC_LIBRARY)
###############################################################################
@@ -103,6 +106,7 @@
$(vhal_v2_1)-manager-lib \
LOCAL_SHARED_LIBRARIES := \
+ libbase \
libbinder \
libhidlbase \
libhidltransport \
@@ -113,4 +117,6 @@
$(vhal_v2_0) \
$(vhal_v2_1) \
+LOCAL_CFLAGS += -Wall -Wextra -Werror
+
include $(BUILD_EXECUTABLE)
diff --git a/automotive/vehicle/2.1/default/service.cpp b/automotive/vehicle/2.1/default/service.cpp
index aaadf17..0844622 100644
--- a/automotive/vehicle/2.1/default/service.cpp
+++ b/automotive/vehicle/2.1/default/service.cpp
@@ -88,7 +88,7 @@
Vehicle_V2_1 vehicle21(vehicleManager.get());
ALOGI("Registering as service...");
- vehicle21.registerAsService("Vehicle");
+ vehicle21.registerAsService();
configureRpcThreadpool(1, true /* callerWillJoin */);
diff --git a/bluetooth/1.0/vts/functional/Android.bp b/bluetooth/1.0/vts/functional/Android.bp
index 939a07f..a57a55a 100644
--- a/bluetooth/1.0/vts/functional/Android.bp
+++ b/bluetooth/1.0/vts/functional/Android.bp
@@ -16,7 +16,6 @@
cc_test {
name: "VtsHalBluetoothV1_0TargetTest",
- gtest: true,
srcs: ["VtsHalBluetoothV1_0TargetTest.cpp"],
shared_libs: [
"libbase",
@@ -28,7 +27,7 @@
"libutils",
"android.hardware.bluetooth@1.0",
],
- static_libs: ["libgtest"],
+ static_libs: ["VtsHalHidlTargetBaseTest"],
cflags: [
"-O0",
"-g",
diff --git a/bluetooth/1.0/vts/functional/VtsHalBluetoothV1_0TargetTest.cpp b/bluetooth/1.0/vts/functional/VtsHalBluetoothV1_0TargetTest.cpp
index 5a6c29a..c8c7cb5 100644
--- a/bluetooth/1.0/vts/functional/VtsHalBluetoothV1_0TargetTest.cpp
+++ b/bluetooth/1.0/vts/functional/VtsHalBluetoothV1_0TargetTest.cpp
@@ -23,7 +23,7 @@
#include <hardware/bluetooth.h>
#include <utils/Log.h>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include <condition_variable>
#include <mutex>
#include <queue>
@@ -117,11 +117,11 @@
};
// The main test class for Bluetooth HIDL HAL.
-class BluetoothHidlTest : public ::testing::Test {
+class BluetoothHidlTest : public ::testing::VtsHalHidlTargetBaseTest {
public:
virtual void SetUp() override {
// currently test passthrough mode only
- bluetooth = IBluetoothHci::getService();
+ bluetooth = ::testing::VtsHalHidlTargetBaseTest::getService<IBluetoothHci>();
ASSERT_NE(bluetooth, nullptr);
ALOGI("%s: getService() for bluetooth is %s", __func__,
bluetooth->isRemote() ? "remote" : "local");
diff --git a/configstore/utils/Android.bp b/configstore/utils/Android.bp
index 32053a7..09ab5b2 100644
--- a/configstore/utils/Android.bp
+++ b/configstore/utils/Android.bp
@@ -14,15 +14,13 @@
// limitations under the License.
//
-cc_library_static {
+cc_library_headers {
name: "android.hardware.configstore-utils",
export_include_dirs: ["include"],
- srcs: [],
shared_libs: [
- "android.hardware.configstore@1.0",
+ "libhidlbase"
],
export_shared_lib_headers: [
- "android.hardware.configstore@1.0",
+ "libhidlbase"
],
}
-
diff --git a/ir/1.0/vts/functional/Android.bp b/ir/1.0/vts/functional/Android.bp
index ac29996..fe0a595 100644
--- a/ir/1.0/vts/functional/Android.bp
+++ b/ir/1.0/vts/functional/Android.bp
@@ -16,7 +16,6 @@
cc_test {
name: "VtsHalIrV1_0TargetTest",
- gtest: true,
srcs: ["VtsHalIrV1_0TargetTest.cpp"],
shared_libs: [
"libbase",
@@ -27,7 +26,7 @@
"libutils",
"android.hardware.ir@1.0",
],
- static_libs: ["libgtest"],
+ static_libs: ["VtsHalHidlTargetBaseTest"],
cflags: [
"-O0",
"-g",
diff --git a/ir/1.0/vts/functional/VtsHalIrV1_0TargetTest.cpp b/ir/1.0/vts/functional/VtsHalIrV1_0TargetTest.cpp
index 08c7974..605eabb 100644
--- a/ir/1.0/vts/functional/VtsHalIrV1_0TargetTest.cpp
+++ b/ir/1.0/vts/functional/VtsHalIrV1_0TargetTest.cpp
@@ -21,7 +21,7 @@
#include <android/hardware/ir/1.0/IConsumerIr.h>
#include <android/hardware/ir/1.0/types.h>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include <algorithm>
using ::android::hardware::ir::V1_0::IConsumerIr;
@@ -31,10 +31,10 @@
using ::android::sp;
// The main test class for IR HIDL HAL.
-class ConsumerIrHidlTest : public ::testing::Test {
+class ConsumerIrHidlTest : public ::testing::VtsHalHidlTargetBaseTest {
public:
virtual void SetUp() override {
- ir = IConsumerIr::getService();
+ ir = ::testing::VtsHalHidlTargetBaseTest::getService<IConsumerIr>();
ASSERT_NE(ir, nullptr);
}
diff --git a/nfc/1.0/vts/functional/Android.bp b/nfc/1.0/vts/functional/Android.bp
index 23d83e5..0ab8dc5 100644
--- a/nfc/1.0/vts/functional/Android.bp
+++ b/nfc/1.0/vts/functional/Android.bp
@@ -16,7 +16,6 @@
cc_test {
name: "VtsHalNfcV1_0TargetTest",
- gtest: true,
srcs: ["VtsHalNfcV1_0TargetTest.cpp"],
shared_libs: [
"libbase",
@@ -28,7 +27,7 @@
"libutils",
"android.hardware.nfc@1.0",
],
- static_libs: ["libgtest"],
+ static_libs: ["VtsHalHidlTargetBaseTest"],
cflags: [
"-O0",
"-g",
diff --git a/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
index a0c5f1a..5b6089d 100644
--- a/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
+++ b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
@@ -22,7 +22,7 @@
#include <android/hardware/nfc/1.0/types.h>
#include <hardware/nfc.h>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include <chrono>
#include <condition_variable>
#include <mutex>
@@ -56,10 +56,10 @@
#define TIMEOUT_PERIOD 5
// The main test class for NFC HIDL HAL.
-class NfcHidlTest : public ::testing::Test {
+class NfcHidlTest : public ::testing::VtsHalHidlTargetBaseTest {
public:
virtual void SetUp() override {
- nfc_ = INfc::getService();
+ nfc_ = ::testing::VtsHalHidlTargetBaseTest::getService<INfc>();
ASSERT_NE(nfc_, nullptr);
nfc_cb_ = new NfcClientCallback(*this);
diff --git a/radio/1.0/IRadio.hal b/radio/1.0/IRadio.hal
index baa4df6..a8c9d93 100644
--- a/radio/1.0/IRadio.hal
+++ b/radio/1.0/IRadio.hal
@@ -378,13 +378,18 @@
* @param radioTechnology Radio technology to use.
* @param dataProfileInfo data profile info.
* @param modemCognitive Indicating this profile was sent to the modem through setDataProfile
- * earlier.
+ * earlier.
* @param roamingAllowed Indicating data roaming is allowed or not by the user.
+ * @param isRoaming Indicating the device is roaming or not. The 'protocol' parameter in the old
+ * RIL API must be filled accordingly based on the roaming condition.
+ * Note this is for backward compatibility with the old radio modem. The modem
+ * must not use this param for any other reason.
*
* Response function is IRadioResponse.setupDataCallResponse()
*/
oneway setupDataCall(int32_t serial, RadioTechnology radioTechnology,
- DataProfileInfo dataProfileInfo, bool modemCognitive, bool roamingAllowed);
+ DataProfileInfo dataProfileInfo, bool modemCognitive, bool roamingAllowed,
+ bool isRoaming);
/*
* Request ICC I/O operation.
@@ -1139,7 +1144,7 @@
oneway reportSmsMemoryStatus(int32_t serial, bool available);
/*
- * Indicates that the StkSerivce is running and is
+ * Indicates that the StkService is running and is
* ready to receive unsolicited stkXXXXX commands.
*
* @param serial Serial number of request.
@@ -1241,13 +1246,17 @@
*
* @param serial Serial number of request.
* @param dataProfileInfo data profile containing APN settings
- * @param modemCognitive is indicating the data profile was sent to the modem through
- * setDataProfile earlier.
+ * @param modemCognitive indicating the data profile was sent to the modem through
+ * setDataProfile earlier.
+ * @param isRoaming Indicating the device is roaming or not. The 'protocol' parameter in the old
+ * RIL_InitialAttachApn must be filled accordingly based on the roaming
+ * condition. Note this is for backward compatibility with the old radio modem.
+ * The modem must not use this param for any other reason.
*
* Response callback is IRadioResponse.setInitialAttachApnResponse()
*/
oneway setInitialAttachApn(int32_t serial, DataProfileInfo dataProfileInfo,
- bool modemCognitive);
+ bool modemCognitive, bool isRoaming);
/*
* Request current IMS registration state
@@ -1413,10 +1422,14 @@
*
* @param serial Serial number of request.
* @param profiles Array of DataProfiles to set.
+ * @param isRoaming Indicating the device is roaming or not. The 'protocol' parameter in the old
+ * RIL API RIL_DataProfileInfo must be filled accordingly based on the
+ * roaming condition. Note this is for backward compatibility with the old
+ * radio modem. The modem must not use this param for any other reason.
*
* Response callback is IRadioResponse.setDataProfileResponse()
*/
- oneway setDataProfile(int32_t serial, vec<DataProfileInfo> profiles);
+ oneway setDataProfile(int32_t serial, vec<DataProfileInfo> profiles, bool isRoaming);
/*
* Device is shutting down. All further commands are ignored
@@ -1429,7 +1442,7 @@
oneway requestShutdown(int32_t serial);
/*
- * Used to get phone radio capablility.
+ * Used to get phone radio capability.
*
* @param serial Serial number of request.
*
diff --git a/radio/1.0/vts/functional/Android.bp b/radio/1.0/vts/functional/Android.bp
index 03434f4..10bd725 100644
--- a/radio/1.0/vts/functional/Android.bp
+++ b/radio/1.0/vts/functional/Android.bp
@@ -16,7 +16,6 @@
cc_test {
name: "VtsHalRadioV1_0TargetTest",
- gtest: true,
srcs: ["radio_hidl_hal_test.cpp",
"radio_response.cpp",
"radio_hidl_hal_icc.cpp",
@@ -31,7 +30,7 @@
"libutils",
"android.hardware.radio@1.0",
],
- static_libs: ["libgtest"],
+ static_libs: ["VtsHalHidlTargetBaseTest"],
cflags: [
"-O0",
"-g",
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_test.cpp b/radio/1.0/vts/functional/radio_hidl_hal_test.cpp
index 2a67954..3bb786d 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_test.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_test.cpp
@@ -17,7 +17,7 @@
#include<radio_hidl_hal_utils.h>
void RadioHidlTest::SetUp() {
- radio = IRadio::getService(hidl_string("rild"));
+ radio = ::testing::VtsHalHidlTargetBaseTest::getService<IRadio>(hidl_string("rild"));
ASSERT_NE(radio, nullptr);
radioRsp = new RadioResponse(*this);
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_utils.h b/radio/1.0/vts/functional/radio_hidl_hal_utils.h
index 23b6ffa..732d88e 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_utils.h
+++ b/radio/1.0/vts/functional/radio_hidl_hal_utils.h
@@ -16,7 +16,7 @@
#include <android-base/logging.h>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include <chrono>
#include <condition_variable>
#include <mutex>
@@ -423,7 +423,7 @@
};
// The main test class for Radio HIDL.
-class RadioHidlTest : public ::testing::Test {
+class RadioHidlTest : public ::testing::VtsHalHidlTargetBaseTest {
private:
std::mutex mtx;
std::condition_variable cv;
diff --git a/tests/Android.bp b/tests/Android.bp
index 040a6fb..997ba79 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -3,6 +3,7 @@
"bar/1.0",
"bar/1.0/default",
"baz/1.0",
+ "baz/1.0/default",
"expression/1.0",
"extension/light/2.0",
"foo/1.0",
diff --git a/tests/baz/1.0/default/Android.bp b/tests/baz/1.0/default/Android.bp
new file mode 100644
index 0000000..e160d8a
--- /dev/null
+++ b/tests/baz/1.0/default/Android.bp
@@ -0,0 +1,16 @@
+cc_library_shared {
+ name: "android.hardware.tests.baz@1.0-impl",
+ relative_install_path: "hw",
+ proprietary: true,
+ srcs: [
+ "Baz.cpp",
+ ],
+ shared_libs: [
+ "libbase",
+ "libhidlbase",
+ "libhidltransport",
+ "libutils",
+ "android.hardware.tests.baz@1.0",
+ "android.hidl.base@1.0",
+ ],
+}
diff --git a/tests/baz/1.0/default/Baz.cpp b/tests/baz/1.0/default/Baz.cpp
new file mode 100644
index 0000000..8e57fa0
--- /dev/null
+++ b/tests/baz/1.0/default/Baz.cpp
@@ -0,0 +1,519 @@
+#include "Baz.h"
+#include <android-base/logging.h>
+
+namespace android {
+namespace hardware {
+namespace tests {
+namespace baz {
+namespace V1_0 {
+namespace implementation {
+
+struct BazCallback : public IBazCallback {
+ Return<void> heyItsMe(const sp<IBazCallback> &cb) override;
+ Return<void> hey() override;
+};
+
+Return<void> BazCallback::heyItsMe(
+ const sp<IBazCallback> &cb) {
+ LOG(INFO) << "SERVER: heyItsMe cb = " << cb.get();
+
+ return Void();
+}
+
+Return<void> BazCallback::hey() {
+ LOG(INFO) << "SERVER: hey";
+
+ return Void();
+}
+
+// TODO(b/35703683) : replace usage of below methods with toString()
+
+static std::string to_string(const IBaz::Foo::Bar &bar);
+static std::string to_string(const IBaz::Foo &foo);
+static std::string to_string(const hidl_string &s);
+static std::string to_string(bool x);
+static std::string to_string(const IBaz::StringMatrix5x3 &M);
+static std::string to_string(const IBaz::StringMatrix3x5 &M);
+
+template<typename T, size_t SIZE>
+static std::string to_string(const hidl_array<T, SIZE> &array);
+
+template<size_t SIZE>
+static std::string to_string(const hidl_array<uint8_t, SIZE> &array);
+
+template<typename T>
+static std::string to_string(const hidl_vec<T> &vec) {
+ std::string out;
+ out = "[";
+ for (size_t i = 0; i < vec.size(); ++i) {
+ if (i > 0) {
+ out += ", ";
+ }
+ out += to_string(vec[i]);
+ }
+ out += "]";
+
+ return out;
+}
+
+template<typename T, size_t SIZE>
+static std::string to_string(const hidl_array<T, SIZE> &array) {
+ std::string out;
+ out = "[";
+ for (size_t i = 0; i < SIZE; ++i) {
+ if (i > 0) {
+ out += ", ";
+ }
+ out += to_string(array[i]);
+ }
+ out += "]";
+
+ return out;
+}
+
+template<size_t SIZE>
+static std::string to_string(const hidl_array<uint8_t, SIZE> &array) {
+ std::string out;
+ for (size_t i = 0; i < SIZE; ++i) {
+ if (i > 0) {
+ out += ":";
+ }
+
+ char tmp[3];
+ sprintf(tmp, "%02x", array[i]);
+
+ out += tmp;
+ }
+
+ return out;
+}
+
+template<typename T, size_t SIZE1, size_t SIZE2>
+static std::string to_string(const hidl_array<T, SIZE1, SIZE2> &array) {
+ std::string out;
+ out = "[";
+ for (size_t i = 0; i < SIZE1; ++i) {
+ if (i > 0) {
+ out += ", ";
+ }
+
+ out += "[";
+ for (size_t j = 0; j < SIZE2; ++j) {
+ if (j > 0) {
+ out += ", ";
+ }
+
+ out += to_string(array[i][j]);
+ }
+ out += "]";
+ }
+ out += "]";
+
+ return out;
+}
+
+static std::string to_string(bool x) {
+ return x ? "true" : "false";
+}
+
+static std::string to_string(const hidl_string &s) {
+ return std::string("'") + s.c_str() + "'";
+}
+
+static std::string to_string(const IBaz::Foo::Bar &bar) {
+ std::string out;
+ out = "Bar(";
+ out += "z = " + to_string(bar.z) + ", ";
+ out += "s = '" + std::string(bar.s.c_str()) + "'";
+ out += ")";
+
+ return out;
+}
+
+static std::string to_string(const IBaz::Foo &foo) {
+ std::string out;
+ out = "Foo(";
+ out += "x = " + to_string(foo.x) + ", ";
+ out += "y = " + to_string(foo.y) + ", ";
+ out += "aaa = " + to_string(foo.aaa);
+ out += ")";
+
+ return out;
+}
+
+static std::string to_string(const IBaz::StringMatrix5x3 &M) {
+ return to_string(M.s);
+}
+
+static std::string to_string(const IBaz::StringMatrix3x5 &M) {
+ return to_string(M.s);
+}
+
+static std::string VectorOfArray_to_string(const IBaz::VectorOfArray &in) {
+ std::string out;
+ out += "VectorOfArray(";
+
+ for (size_t i = 0; i < in.addresses.size(); ++i) {
+ if (i > 0) {
+ out += ", ";
+ }
+
+ for (size_t j = 0; j < 6; ++j) {
+ if (j > 0) {
+ out += ":";
+ }
+
+ char tmp[3];
+ sprintf(tmp, "%02x", in.addresses[i][j]);
+
+ out += tmp;
+ }
+ }
+
+ out += ")";
+
+ return out;
+}
+
+// Methods from ::android::hardware::tests::baz::V1_0::IBase follow.
+Return<void> Baz::someBaseMethod() {
+ LOG(INFO) << "Baz::someBaseMethod";
+
+ return Void();
+}
+
+Return<bool> Baz::someBoolMethod(bool x) {
+ LOG(INFO) << "Baz::someBoolMethod(" << to_string(x) << ")";
+
+ return !x;
+}
+
+Return<void> Baz::someBoolArrayMethod(const hidl_array<bool, 3>& x,
+ someBoolArrayMethod_cb _hidl_cb) {
+ LOG(INFO) << "Baz::someBoolArrayMethod("
+ << to_string(x[0])
+ << ", "
+ << to_string(x[1])
+ << ", "
+ << to_string(x[2])
+ << ")";
+
+ hidl_array<bool, 4> out;
+ out[0] = !x[0];
+ out[1] = !x[1];
+ out[2] = !x[2];
+ out[3] = true;
+
+ _hidl_cb(out);
+
+ return Void();
+}
+
+Return<void> Baz::someBoolVectorMethod(const hidl_vec<bool>& x, someBoolVectorMethod_cb _hidl_cb) {
+ LOG(INFO) << "Baz::someBoolVectorMethod(" << to_string(x) << ")";
+
+ hidl_vec<bool> out;
+ out.resize(x.size());
+ for (size_t i = 0; i < x.size(); ++i) {
+ out[i] = !x[i];
+ }
+
+ _hidl_cb(out);
+
+ return Void();
+}
+
+Return<void> Baz::someOtherBaseMethod(const IBase::Foo& foo, someOtherBaseMethod_cb _hidl_cb) {
+ LOG(INFO) << "Baz::someOtherBaseMethod "
+ << to_string(foo);
+
+ _hidl_cb(foo);
+
+ return Void();
+}
+
+Return<void> Baz::someMethodWithFooArrays(const hidl_array<IBase::Foo, 2>& fooInput,
+ someMethodWithFooArrays_cb _hidl_cb) {
+ LOG(INFO) << "Baz::someMethodWithFooArrays "
+ << to_string(fooInput);
+
+ hidl_array<IBaz::Foo, 2> fooOutput;
+ fooOutput[0] = fooInput[1];
+ fooOutput[1] = fooInput[0];
+
+ _hidl_cb(fooOutput);
+
+ return Void();
+}
+
+Return<void> Baz::someMethodWithFooVectors(const hidl_vec<IBase::Foo>& fooInput,
+ someMethodWithFooVectors_cb _hidl_cb) {
+ LOG(INFO) << "Baz::someMethodWithFooVectors "
+ << to_string(fooInput);
+
+ hidl_vec<IBaz::Foo> fooOutput;
+ fooOutput.resize(2);
+ fooOutput[0] = fooInput[1];
+ fooOutput[1] = fooInput[0];
+
+ _hidl_cb(fooOutput);
+
+ return Void();
+}
+
+Return<void> Baz::someMethodWithVectorOfArray(const IBase::VectorOfArray& in,
+ someMethodWithVectorOfArray_cb _hidl_cb) {
+ LOG(INFO) << "Baz::someMethodWithVectorOfArray "
+ << VectorOfArray_to_string(in);
+
+ IBase::VectorOfArray out;
+
+ const size_t n = in.addresses.size();
+ out.addresses.resize(n);
+
+ for (size_t i = 0; i < n; ++i) {
+ out.addresses[i] = in.addresses[n - 1 - i];
+ }
+
+ _hidl_cb(out);
+
+ return Void();
+}
+
+Return<void> Baz::someMethodTakingAVectorOfArray(const hidl_vec<hidl_array<uint8_t, 6>>& in,
+ someMethodTakingAVectorOfArray_cb _hidl_cb) {
+ LOG(INFO) << "Baz::someMethodTakingAVectorOfArray "
+ << to_string(in);
+
+ const size_t n = in.size();
+
+ hidl_vec<hidl_array<uint8_t, 6> > out;
+ out.resize(n);
+
+ for (size_t i = 0; i < n; ++i) {
+ out[i] = in[n - 1 - i];
+ }
+
+ _hidl_cb(out);
+
+ return Void();
+}
+
+Return<void> Baz::transpose(const IBase::StringMatrix5x3& in, transpose_cb _hidl_cb) {
+ LOG(INFO) << "Baz::transpose " << to_string(in);
+
+ IBase::StringMatrix3x5 out;
+ for (size_t i = 0; i < 3; ++i) {
+ for (size_t j = 0; j < 5; ++j) {
+ out.s[i][j] = in.s[j][i];
+ }
+ }
+
+ _hidl_cb(out);
+
+ return Void();
+}
+
+Return<void> Baz::transpose2(const hidl_array<hidl_string, 5, 3>& in, transpose2_cb _hidl_cb) {
+ LOG(INFO) << "Baz::transpose2 " << to_string(in);
+
+ hidl_array<hidl_string, 3, 5> out;
+ for (size_t i = 0; i < 3; ++i) {
+ for (size_t j = 0; j < 5; ++j) {
+ out[i][j] = in[j][i];
+ }
+ }
+
+ _hidl_cb(out);
+
+ return Void();
+}
+
+Return<void> Baz::takeAMask(IBase::BitField bf,
+ uint8_t first,
+ const IBase::MyMask& second,
+ uint8_t third,
+ takeAMask_cb _hidl_cb) {
+ _hidl_cb(bf, bf | first, second.value & bf, (bf | bf) & third);
+ return Void();
+}
+
+// Methods from ::android::hardware::tests::baz::V1_0::IBaz follow.
+
+Return<void> Baz::doThis(float param) {
+ LOG(INFO) << "Baz::doThis(" << param << ")";
+
+ return Void();
+}
+
+Return<int32_t> Baz::doThatAndReturnSomething(int64_t param) {
+ LOG(INFO) << "Baz::doThatAndReturnSomething(" << param << ")";
+
+ return 666;
+}
+
+Return<double> Baz::doQuiteABit(int32_t a, int64_t b, float c, double d) {
+ LOG(INFO) << "Baz::doQuiteABit("
+ << a
+ << ", "
+ << b
+ << ", "
+ << c
+ << ", "
+ << d
+ << ")";
+
+ return 666.5;
+}
+
+Return<void> Baz::doSomethingElse(const hidl_array<int32_t, 15>& param,
+ doSomethingElse_cb _hidl_cb) {
+ LOG(INFO) << "Baz::doSomethingElse(...)";
+
+ hidl_array<int32_t, 32> result;
+ for (size_t i = 0; i < 15; ++i) {
+ result[i] = 2 * param[i];
+ result[15 + i] = param[i];
+ }
+ result[30] = 1;
+ result[31] = 2;
+
+ _hidl_cb(result);
+
+ return Void();
+}
+
+Return<void> Baz::doStuffAndReturnAString(doStuffAndReturnAString_cb _hidl_cb) {
+ LOG(INFO) << "doStuffAndReturnAString";
+
+ hidl_string s;
+ s = "Hello, world!";
+
+ _hidl_cb(s);
+
+ return Void();
+}
+
+Return<void> Baz::mapThisVector(const hidl_vec<int32_t>& param, mapThisVector_cb _hidl_cb) {
+ LOG(INFO) << "mapThisVector";
+
+ hidl_vec<int32_t> out;
+ out.resize(param.size());
+ for (size_t i = 0; i < param.size(); ++i) {
+ out[i] = param[i] * 2;
+ }
+
+ _hidl_cb(out);
+
+ return Void();
+}
+
+Return<void> Baz::callMe(const sp<IBazCallback>& cb) {
+ LOG(INFO) << "callMe " << cb.get();
+
+ if (cb != NULL) {
+ sp<IBazCallback> my_cb = new BazCallback;
+ cb->heyItsMe(my_cb);
+ }
+
+ return Void();
+}
+
+Return<void> Baz::callMeLater(const sp<IBazCallback>& cb) {
+ LOG(INFO) << "callMeLater " << cb.get();
+
+ mStoredCallback = cb;
+
+ return Void();
+}
+
+Return<void> Baz::iAmFreeNow() {
+ if (mStoredCallback != nullptr) {
+ mStoredCallback->hey();
+ }
+ return Void();
+}
+
+Return<void> Baz::dieNow() {
+ exit(1);
+ return Void();
+}
+
+Return<IBaz::SomeEnum> Baz::useAnEnum(IBaz::SomeEnum zzz) {
+ LOG(INFO) << "useAnEnum " << (int)zzz;
+
+ return SomeEnum::goober;
+}
+
+Return<void> Baz::haveSomeStrings(const hidl_array<hidl_string, 3>& array,
+ haveSomeStrings_cb _hidl_cb) {
+ LOG(INFO) << "haveSomeStrings("
+ << to_string(array)
+ << ")";
+
+ hidl_array<hidl_string, 2> result;
+ result[0] = "Hello";
+ result[1] = "World";
+
+ _hidl_cb(result);
+
+ return Void();
+}
+
+Return<void> Baz::haveAStringVec(const hidl_vec<hidl_string>& vector,
+ haveAStringVec_cb _hidl_cb) {
+ LOG(INFO) << "haveAStringVec(" << to_string(vector) << ")";
+
+ hidl_vec<hidl_string> result;
+ result.resize(2);
+
+ result[0] = "Hello";
+ result[1] = "World";
+
+ _hidl_cb(result);
+
+ return Void();
+}
+
+Return<void> Baz::returnABunchOfStrings(returnABunchOfStrings_cb _hidl_cb) {
+ hidl_string eins; eins = "Eins";
+ hidl_string zwei; zwei = "Zwei";
+ hidl_string drei; drei = "Drei";
+ _hidl_cb(eins, zwei, drei);
+
+ return Void();
+}
+
+Return<uint8_t> Baz::returnABitField() {
+ return 0;
+}
+
+Return<uint32_t> Baz::size(uint32_t size) {
+ return size;
+}
+
+Return<void> Baz::getNestedStructs(getNestedStructs_cb _hidl_cb) {
+ int size = 5;
+ hidl_vec<IBaz::NestedStruct> result;
+ result.resize(size);
+ for (int i = 0; i < size; i++) {
+ result[i].a = i;
+ if (i == 1) {
+ result[i].matrices.resize(6);
+ }
+ }
+ _hidl_cb(result);
+ return Void();
+}
+// Methods from ::android::hidl::base::V1_0::IBase follow.
+
+IBaz* HIDL_FETCH_IBaz(const char* /* name */) {
+ return new Baz();
+}
+
+} // namespace implementation
+} // namespace V1_0
+} // namespace baz
+} // namespace tests
+} // namespace hardware
+} // namespace android
diff --git a/tests/baz/1.0/default/Baz.h b/tests/baz/1.0/default/Baz.h
new file mode 100644
index 0000000..ceb3035
--- /dev/null
+++ b/tests/baz/1.0/default/Baz.h
@@ -0,0 +1,92 @@
+#ifndef ANDROID_HARDWARE_TESTS_BAZ_V1_0_BAZ_H
+#define ANDROID_HARDWARE_TESTS_BAZ_V1_0_BAZ_H
+
+#include <android/hardware/tests/baz/1.0/IBaz.h>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+
+namespace android {
+namespace hardware {
+namespace tests {
+namespace baz {
+namespace V1_0 {
+namespace implementation {
+
+// using ::android::hardware::tests::baz::V1_0::IBase;
+using ::android::hardware::tests::baz::V1_0::IBaz;
+using ::android::hardware::tests::baz::V1_0::IBazCallback;
+using ::android::hidl::base::V1_0::DebugInfo;
+using ::android::hidl::base::V1_0::IBase;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::sp;
+
+struct Baz : public IBaz {
+ // Methods from ::android::hardware::tests::baz::V1_0::IBase follow.
+ Return<void> someBaseMethod() override;
+ Return<bool> someBoolMethod(bool x) override;
+ Return<void> someBoolArrayMethod(const hidl_array<bool, 3>& x,
+ someBoolArrayMethod_cb _hidl_cb) override;
+ Return<void> someBoolVectorMethod(const hidl_vec<bool>& x,
+ someBoolVectorMethod_cb _hidl_cb) override;
+ Return<void> someOtherBaseMethod(const IBase::Foo& foo,
+ someOtherBaseMethod_cb _hidl_cb) override;
+ Return<void> someMethodWithFooArrays(const hidl_array<IBase::Foo, 2>& fooInput,
+ someMethodWithFooArrays_cb _hidl_cb) override;
+ Return<void> someMethodWithFooVectors(const hidl_vec<IBase::Foo>& fooInput,
+ someMethodWithFooVectors_cb _hidl_cb) override;
+ Return<void> someMethodWithVectorOfArray(const IBase::VectorOfArray& in,
+ someMethodWithVectorOfArray_cb _hidl_cb) override;
+ Return<void> someMethodTakingAVectorOfArray(const hidl_vec<hidl_array<uint8_t, 6>>& in,
+ someMethodTakingAVectorOfArray_cb _hidl_cb) override;
+ Return<void> transpose(const IBase::StringMatrix5x3& in,
+ transpose_cb _hidl_cb) override;
+ Return<void> transpose2(const hidl_array<hidl_string, 5, 3>& in,
+ transpose2_cb _hidl_cb) override;
+ Return<void> takeAMask(IBase::BitField bf,
+ uint8_t first,
+ const IBase::MyMask& second,
+ uint8_t third,
+ takeAMask_cb _hidl_cb) override;
+
+ // Methods from ::android::hardware::tests::baz::V1_0::IBaz follow.
+ Return<void> doThis(float param) override;
+ Return<int32_t> doThatAndReturnSomething(int64_t param) override;
+ Return<double> doQuiteABit(int32_t a, int64_t b, float c, double d) override;
+ Return<void> doSomethingElse(const hidl_array<int32_t, 15>& param,
+ doSomethingElse_cb _hidl_cb) override;
+ Return<void> doStuffAndReturnAString(doStuffAndReturnAString_cb _hidl_cb) override;
+ Return<void> mapThisVector(const hidl_vec<int32_t>& param, mapThisVector_cb _hidl_cb) override;
+ Return<void> callMe(const sp<IBazCallback>& cb) override;
+ Return<void> callMeLater(const sp<IBazCallback>& cb) override;
+ Return<void> iAmFreeNow() override;
+ Return<void> dieNow() override;
+ Return<IBaz::SomeEnum> useAnEnum(IBaz::SomeEnum zzz) override;
+ Return<void> haveSomeStrings(const hidl_array<hidl_string, 3>& array,
+ haveSomeStrings_cb _hidl_cb) override;
+ Return<void> haveAStringVec(const hidl_vec<hidl_string>& vector,
+ haveAStringVec_cb _hidl_cb) override;
+ Return<void> returnABunchOfStrings(returnABunchOfStrings_cb _hidl_cb) override;
+ Return<uint8_t> returnABitField() override;
+ Return<uint32_t> size(uint32_t size) override;
+ Return<void> getNestedStructs(getNestedStructs_cb _hidl_cb) override;
+
+ // Methods from ::android::hidl::base::V1_0::IBase follow.
+ private:
+ sp<IBazCallback> mStoredCallback;
+};
+
+extern "C" IBaz* HIDL_FETCH_IBaz(const char* name);
+
+} // namespace implementation
+} // namespace V1_0
+} // namespace baz
+} // namespace tests
+} // namespace hardware
+} // namespace android
+
+#endif // ANDROID_HARDWARE_TESTS_BAZ_V1_0_BAZ_H
diff --git a/wifi/1.0/default/hidl_struct_util.cpp b/wifi/1.0/default/hidl_struct_util.cpp
index c7b8c41..726f011 100644
--- a/wifi/1.0/default/hidl_struct_util.cpp
+++ b/wifi/1.0/default/hidl_struct_util.cpp
@@ -950,7 +950,7 @@
hidl_request.baseConfigs.disableMatchExpirationIndication ? 0x2 : 0x0;
legacy_request->recv_indication_cfg |=
hidl_request.baseConfigs.disableFollowupReceivedIndication ? 0x4 : 0x0;
- legacy_request->cipher_type = hidl_request.baseConfigs.supportedCipherTypes;
+ legacy_request->cipher_type = (unsigned int) hidl_request.baseConfigs.cipherType;
legacy_request->pmk_len = hidl_request.baseConfigs.pmk.size();
if (legacy_request->pmk_len > NAN_PMK_INFO_LEN) {
LOG(ERROR) << "convertHidlNanPublishRequestToLegacy: pmk_len too large";
@@ -973,6 +973,8 @@
legacy_request->range_report = legacy_hal::NAN_DISABLE_RANGE_REPORT;
legacy_request->publish_type = (legacy_hal::NanPublishType) hidl_request.publishType;
legacy_request->tx_type = (legacy_hal::NanTxType) hidl_request.txType;
+ legacy_request->service_responder_policy = hidl_request.autoAcceptDataPathRequests ?
+ legacy_hal::NAN_SERVICE_ACCEPT_POLICY_ALL : legacy_hal::NAN_SERVICE_ACCEPT_POLICY_NONE;
return true;
}
@@ -1041,7 +1043,7 @@
hidl_request.baseConfigs.disableMatchExpirationIndication ? 0x2 : 0x0;
legacy_request->recv_indication_cfg |=
hidl_request.baseConfigs.disableFollowupReceivedIndication ? 0x4 : 0x0;
- legacy_request->cipher_type = hidl_request.baseConfigs.supportedCipherTypes;
+ legacy_request->cipher_type = (unsigned int) hidl_request.baseConfigs.cipherType;
legacy_request->pmk_len = hidl_request.baseConfigs.pmk.size();
if (legacy_request->pmk_len > NAN_PMK_INFO_LEN) {
LOG(ERROR) << "convertHidlNanSubscribeRequestToLegacy: pmk_len too large";
@@ -1230,14 +1232,15 @@
legacy_hal::NAN_DP_CONFIG_SECURITY : legacy_hal::NAN_DP_CONFIG_NO_SECURITY;
legacy_request->app_info.ndp_app_info_len = hidl_request.appInfo.size();
if (legacy_request->app_info.ndp_app_info_len > NAN_DP_MAX_APP_INFO_LEN) {
- LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: ndp_app_info_len to large";
+ LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: ndp_app_info_len too large";
return false;
}
memcpy(legacy_request->app_info.ndp_app_info, hidl_request.appInfo.data(),
legacy_request->app_info.ndp_app_info_len);
- legacy_request->cipher_type = hidl_request.supportedCipherTypes;
+ legacy_request->cipher_type = (unsigned int) hidl_request.cipherType;
legacy_request->pmk_len = hidl_request.pmk.size();
if (legacy_request->pmk_len > NAN_PMK_INFO_LEN) {
+ LOG(ERROR) << "convertHidlNanDataPathInitiatorRequestToLegacy: pmk_len too large";
return false;
}
memcpy(legacy_request->pmk, hidl_request.pmk.data(), legacy_request->pmk_len);
@@ -1267,7 +1270,7 @@
}
memcpy(legacy_request->app_info.ndp_app_info, hidl_request.appInfo.data(),
legacy_request->app_info.ndp_app_info_len);
- legacy_request->cipher_type = hidl_request.supportedCipherTypes;
+ legacy_request->cipher_type = (unsigned int) hidl_request.cipherType;
legacy_request->pmk_len = hidl_request.pmk.size();
if (legacy_request->pmk_len > NAN_PMK_INFO_LEN) {
LOG(ERROR) << "convertHidlNanDataPathIndicationResponseToLegacy: pmk_len too large";
@@ -1337,7 +1340,7 @@
hidl_ind->matchOccuredInBeaconFlag = legacy_ind.match_occured_flag == 1;
hidl_ind->outOfResourceFlag = legacy_ind.out_of_resource_flag == 1;
hidl_ind->rssiValue = legacy_ind.rssi_value;
- hidl_ind->peerSupportedCipherTypes = legacy_ind.peer_cipher_type;
+ hidl_ind->peerCipherType = (NanCipherSuiteType) legacy_ind.peer_cipher_type;
hidl_ind->peerRequiresSecurityEnabledInNdp =
legacy_ind.peer_sdea_params.security_cfg == legacy_hal::NAN_DP_CONFIG_SECURITY;
hidl_ind->peerRequiresRanging =
diff --git a/wifi/1.0/default/wifi_nan_iface.cpp b/wifi/1.0/default/wifi_nan_iface.cpp
index 68be2a7..6977fc0 100644
--- a/wifi/1.0/default/wifi_nan_iface.cpp
+++ b/wifi/1.0/default/wifi_nan_iface.cpp
@@ -166,6 +166,7 @@
LOG(ERROR) << "Failed to invoke the callback";
}
}
+ break;
}
case legacy_hal::NAN_DP_END: {
for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
diff --git a/wifi/1.0/types.hal b/wifi/1.0/types.hal
index a843ce8..3b2f25b 100644
--- a/wifi/1.0/types.hal
+++ b/wifi/1.0/types.hal
@@ -877,6 +877,7 @@
* Cipher suite flags.
*/
enum NanCipherSuiteType : uint32_t {
+ NONE = 0, // No (open) security
SHARED_KEY_128_MASK = 1 << 0, // NCS-SK-128
SHARED_KEY_256_MASK = 1 << 1 // NCS-SK-256
};
@@ -991,13 +992,15 @@
*/
bool disableFollowupReceivedIndication;
/**
- * Cipher types supported in data-paths constructed in the context of this discovery session.
+ * Cipher type for data-paths constructed in the context of this discovery session. Must be
+ * specified as |NanCipherSuiteType.NONE| if no |pmk| is provided.
*/
- bitfield<NanCipherSuiteType> supportedCipherTypes;
+ NanCipherSuiteType cipherType;
/**
* Optional Pairwise Master Key (PMK) for data-paths constructed in the context of this discovery
* session. A PMK can also be provided during the actual construction of the data-path (which
- * allows for unique PMKs for each data-path).
+ * allows for unique PMKs for each data-path). The |cipherType| must be specified if a PMK is
+ * provided.
* Max length: 32
* Ref: IEEE 802.11i
*/
@@ -1059,6 +1062,13 @@
* peer.
*/
NanTxType txType;
+ /**
+ * Specifies whether data-path requests |IWifiNanIfaceEventCallback.eventDataPathRequest| (in
+ * the context of this discovery session) are automatically accepted (if true) - in which case
+ * the Responder must not call the |IWifiNanIface.respondToDataPathIndicationRequest| method and
+ * the device must automatically accept the data-path request and complete the negotiation.
+ */
+ bool autoAcceptDataPathRequests;
};
/**
@@ -1199,11 +1209,13 @@
*/
vec<uint8_t> appInfo;
/**
- * Cipher types supported in data-paths constructed in the context of this discovery session.
+ * Cipher type for the data-path being requested. Must be specified as |NanCipherSuiteType.NONE|
+ * if no |pmk| is provided.
*/
- bitfield<NanCipherSuiteType> supportedCipherTypes;
+ NanCipherSuiteType cipherType;
/**
* Pairwise Master Key (PMK) for the data-path being requested (if |securityRequired| is true).
+ * The |cipherType| must be specified if a PMK is provided.
* Max length: 32
* Ref: IEEE 802.11i
*/
@@ -1243,11 +1255,13 @@
*/
vec<uint8_t> appInfo;
/**
- * Cipher types supported in data-paths constructed in the context of this discovery session.
+ * Cipher type for the data-path being negotiated. Must be specified as |NanCipherSuiteType.NONE|
+ * if no |pmk| is provided.
*/
- bitfield<NanCipherSuiteType> supportedCipherTypes;
+ NanCipherSuiteType cipherType;
/**
* Pairwise Master Key (PMK) for the data-path being negotiated (if |securityRequired| is true).
+ * The |cipherType| must be specified if a PMK is provided.
* Max length: 32
*/
vec<uint8_t> pmk;
@@ -1374,13 +1388,14 @@
*/
uint8_t rssiValue;
/**
- * Cipher types supported by the peer for data-paths constructed in the context of this discovery
- * session.
+ * Cipher type for data-paths constructed in the context of this discovery session. Valid if
+ * |peerRequiresSecurityEnabledInNdp| is true.
*/
- bitfield<NanCipherSuiteType> peerSupportedCipherTypes;
+ NanCipherSuiteType peerCipherType;
/**
* Indicates whether or not the peer requires security enabled in any data-path (NDP) constructed
- * in the context of this discovery session.
+ * in the context of this discovery session. The |cipherType| specifies the cipher type for such
+ * data-paths.
* NAN Spec: Service Discovery Extension Attribute (SDEA) / Control / Security Required
*/
bool peerRequiresSecurityEnabledInNdp;
diff --git a/wifi/1.0/vts/functional/Android.bp b/wifi/1.0/vts/functional/Android.bp
index dc36139..de917c0 100644
--- a/wifi/1.0/vts/functional/Android.bp
+++ b/wifi/1.0/vts/functional/Android.bp
@@ -16,7 +16,6 @@
cc_test {
name: "VtsHalWifiV1_0TargetTest",
- gtest: true,
srcs: [
"VtsHalWifiV1_0TargetTest.cpp",
"wifi_ap_iface_hidl_test.cpp",
@@ -38,7 +37,7 @@
"libutils",
"android.hardware.wifi@1.0",
],
- static_libs: ["libgtest"],
+ static_libs: ["VtsHalHidlTargetBaseTest"],
cflags: [
"-O0",
"-g",
diff --git a/wifi/1.0/vts/functional/VtsHalWifiV1_0TargetTest.cpp b/wifi/1.0/vts/functional/VtsHalWifiV1_0TargetTest.cpp
index b33b5eb..51512a1 100644
--- a/wifi/1.0/vts/functional/VtsHalWifiV1_0TargetTest.cpp
+++ b/wifi/1.0/vts/functional/VtsHalWifiV1_0TargetTest.cpp
@@ -16,7 +16,7 @@
#include <android-base/logging.h>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include "wifi_hidl_test_utils.h"
diff --git a/wifi/1.0/vts/functional/wifi_ap_iface_hidl_test.cpp b/wifi/1.0/vts/functional/wifi_ap_iface_hidl_test.cpp
index dc7b0b9..dd3df56 100644
--- a/wifi/1.0/vts/functional/wifi_ap_iface_hidl_test.cpp
+++ b/wifi/1.0/vts/functional/wifi_ap_iface_hidl_test.cpp
@@ -18,7 +18,7 @@
#include <android/hardware/wifi/1.0/IWifiApIface.h>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include "wifi_hidl_test_utils.h"
@@ -28,7 +28,7 @@
/**
* Fixture to use for all AP Iface HIDL interface tests.
*/
-class WifiApIfaceHidlTest : public ::testing::Test {
+class WifiApIfaceHidlTest : public ::testing::VtsHalHidlTargetBaseTest {
public:
virtual void SetUp() override {}
diff --git a/wifi/1.0/vts/functional/wifi_chip_hidl_test.cpp b/wifi/1.0/vts/functional/wifi_chip_hidl_test.cpp
index b6ecd8b..3c2ba9a 100644
--- a/wifi/1.0/vts/functional/wifi_chip_hidl_test.cpp
+++ b/wifi/1.0/vts/functional/wifi_chip_hidl_test.cpp
@@ -18,7 +18,7 @@
#include <android/hardware/wifi/1.0/IWifiChip.h>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include "wifi_hidl_test_utils.h"
@@ -28,7 +28,7 @@
/**
* Fixture to use for all Wifi chip HIDL interface tests.
*/
-class WifiChipHidlTest : public ::testing::Test {
+class WifiChipHidlTest : public ::testing::VtsHalHidlTargetBaseTest {
public:
virtual void SetUp() override {}
diff --git a/wifi/1.0/vts/functional/wifi_hidl_call_util.h b/wifi/1.0/vts/functional/wifi_hidl_call_util.h
index 03200a0..4797423 100644
--- a/wifi/1.0/vts/functional/wifi_hidl_call_util.h
+++ b/wifi/1.0/vts/functional/wifi_hidl_call_util.h
@@ -21,7 +21,7 @@
#include <type_traits>
#include <utility>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
namespace {
namespace detail {
diff --git a/wifi/1.0/vts/functional/wifi_hidl_test.cpp b/wifi/1.0/vts/functional/wifi_hidl_test.cpp
index 3e350e5..2f4e01e 100644
--- a/wifi/1.0/vts/functional/wifi_hidl_test.cpp
+++ b/wifi/1.0/vts/functional/wifi_hidl_test.cpp
@@ -18,7 +18,7 @@
#include <android/hardware/wifi/1.0/IWifi.h>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include "wifi_hidl_test_utils.h"
@@ -28,7 +28,7 @@
/**
* Fixture to use for all root Wifi HIDL interface tests.
*/
-class WifiHidlTest : public ::testing::Test {
+class WifiHidlTest : public ::testing::VtsHalHidlTargetBaseTest {
public:
virtual void SetUp() override {}
diff --git a/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp b/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp
index 8f34a88..9042075 100644
--- a/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp
+++ b/wifi/1.0/vts/functional/wifi_hidl_test_utils.cpp
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include "wifi_hidl_call_util.h"
#include "wifi_hidl_test_utils.h"
@@ -43,7 +43,7 @@
void startFramework() { ASSERT_EQ(std::system("svc wifi enable"), 0); }
sp<IWifi> getWifi() {
- sp<IWifi> wifi = IWifi::getService();
+ sp<IWifi> wifi = ::testing::VtsHalHidlTargetBaseTest::getService<IWifi>();
return wifi;
}
diff --git a/wifi/1.0/vts/functional/wifi_nan_iface_hidl_test.cpp b/wifi/1.0/vts/functional/wifi_nan_iface_hidl_test.cpp
index a8be48c..eb482c9 100644
--- a/wifi/1.0/vts/functional/wifi_nan_iface_hidl_test.cpp
+++ b/wifi/1.0/vts/functional/wifi_nan_iface_hidl_test.cpp
@@ -18,7 +18,7 @@
#include <android/hardware/wifi/1.0/IWifiNanIface.h>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include "wifi_hidl_test_utils.h"
@@ -28,7 +28,7 @@
/**
* Fixture to use for all NAN Iface HIDL interface tests.
*/
-class WifiNanIfaceHidlTest : public ::testing::Test {
+class WifiNanIfaceHidlTest : public ::testing::VtsHalHidlTargetBaseTest {
public:
virtual void SetUp() override {}
diff --git a/wifi/1.0/vts/functional/wifi_p2p_iface_hidl_test.cpp b/wifi/1.0/vts/functional/wifi_p2p_iface_hidl_test.cpp
index e29226d..d53096c 100644
--- a/wifi/1.0/vts/functional/wifi_p2p_iface_hidl_test.cpp
+++ b/wifi/1.0/vts/functional/wifi_p2p_iface_hidl_test.cpp
@@ -18,7 +18,7 @@
#include <android/hardware/wifi/1.0/IWifiP2pIface.h>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include "wifi_hidl_test_utils.h"
@@ -28,7 +28,7 @@
/**
* Fixture to use for all P2P Iface HIDL interface tests.
*/
-class WifiP2pIfaceHidlTest : public ::testing::Test {
+class WifiP2pIfaceHidlTest : public ::testing::VtsHalHidlTargetBaseTest {
public:
virtual void SetUp() override {}
diff --git a/wifi/1.0/vts/functional/wifi_rtt_controller_hidl_test.cpp b/wifi/1.0/vts/functional/wifi_rtt_controller_hidl_test.cpp
index 7aee761..4d08919 100644
--- a/wifi/1.0/vts/functional/wifi_rtt_controller_hidl_test.cpp
+++ b/wifi/1.0/vts/functional/wifi_rtt_controller_hidl_test.cpp
@@ -18,7 +18,7 @@
#include <android/hardware/wifi/1.0/IWifiRttController.h>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include "wifi_hidl_test_utils.h"
@@ -28,7 +28,7 @@
/**
* Fixture to use for all RTT controller HIDL interface tests.
*/
-class WifiRttControllerHidlTest : public ::testing::Test {
+class WifiRttControllerHidlTest : public ::testing::VtsHalHidlTargetBaseTest {
public:
virtual void SetUp() override {}
diff --git a/wifi/1.0/vts/functional/wifi_sta_iface_hidl_test.cpp b/wifi/1.0/vts/functional/wifi_sta_iface_hidl_test.cpp
index 770763c..4457487 100644
--- a/wifi/1.0/vts/functional/wifi_sta_iface_hidl_test.cpp
+++ b/wifi/1.0/vts/functional/wifi_sta_iface_hidl_test.cpp
@@ -18,7 +18,7 @@
#include <android/hardware/wifi/1.0/IWifiStaIface.h>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include "wifi_hidl_test_utils.h"
@@ -28,7 +28,7 @@
/**
* Fixture to use for all STA Iface HIDL interface tests.
*/
-class WifiStaIfaceHidlTest : public ::testing::Test {
+class WifiStaIfaceHidlTest : public ::testing::VtsHalHidlTargetBaseTest {
public:
virtual void SetUp() override {}
diff --git a/wifi/supplicant/1.0/vts/functional/Android.mk b/wifi/supplicant/1.0/vts/functional/Android.mk
index 5d7c763..93e5250 100644
--- a/wifi/supplicant/1.0/vts/functional/Android.mk
+++ b/wifi/supplicant/1.0/vts/functional/Android.mk
@@ -37,6 +37,6 @@
libwifi-system
LOCAL_STATIC_LIBRARIES := \
libgmock \
- libgtest
+ VtsHalHidlTargetBaseTest
include $(BUILD_NATIVE_TEST)
diff --git a/wifi/supplicant/1.0/vts/functional/VtsHalWifiSupplicantV1_0TargetTest.cpp b/wifi/supplicant/1.0/vts/functional/VtsHalWifiSupplicantV1_0TargetTest.cpp
index 81a2947..802d11c 100644
--- a/wifi/supplicant/1.0/vts/functional/VtsHalWifiSupplicantV1_0TargetTest.cpp
+++ b/wifi/supplicant/1.0/vts/functional/VtsHalWifiSupplicantV1_0TargetTest.cpp
@@ -16,7 +16,7 @@
#include <android-base/logging.h>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include "supplicant_hidl_test_utils.h"
diff --git a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test.cpp b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test.cpp
index 9922447..eb02445 100644
--- a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test.cpp
+++ b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test.cpp
@@ -16,7 +16,7 @@
#include <android-base/logging.h>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include "supplicant_hidl_test_utils.h"
diff --git a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp
index 2f3405d..3f7ee1a 100644
--- a/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp
+++ b/wifi/supplicant/1.0/vts/functional/supplicant_hidl_test_utils.cpp
@@ -15,7 +15,7 @@
*/
#include <android-base/logging.h>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include <hidl/HidlTransportSupport.h>
#include <android/hidl/manager/1.0/IServiceManager.h>
@@ -174,7 +174,7 @@
}
sp<ISupplicant> getSupplicant() {
- return ISupplicant::getService(kSupplicantServiceName);
+ return getService<ISupplicant>(kSupplicantServiceName);
}
sp<ISupplicantStaIface> getSupplicantStaIface() {
diff --git a/wifi/supplicant/1.0/vts/functional/supplicant_p2p_iface_hidl_test.cpp b/wifi/supplicant/1.0/vts/functional/supplicant_p2p_iface_hidl_test.cpp
index 968d4c9..200845b 100644
--- a/wifi/supplicant/1.0/vts/functional/supplicant_p2p_iface_hidl_test.cpp
+++ b/wifi/supplicant/1.0/vts/functional/supplicant_p2p_iface_hidl_test.cpp
@@ -16,7 +16,7 @@
#include <android-base/logging.h>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include "supplicant_hidl_test_utils.h"
diff --git a/wifi/supplicant/1.0/vts/functional/supplicant_sta_iface_hidl_test.cpp b/wifi/supplicant/1.0/vts/functional/supplicant_sta_iface_hidl_test.cpp
index 45cc6bc..a1f5513 100644
--- a/wifi/supplicant/1.0/vts/functional/supplicant_sta_iface_hidl_test.cpp
+++ b/wifi/supplicant/1.0/vts/functional/supplicant_sta_iface_hidl_test.cpp
@@ -16,7 +16,7 @@
#include <android-base/logging.h>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include "supplicant_hidl_test_utils.h"
diff --git a/wifi/supplicant/1.0/vts/functional/supplicant_sta_network_hidl_test.cpp b/wifi/supplicant/1.0/vts/functional/supplicant_sta_network_hidl_test.cpp
index 8c42a22..e2572c2 100644
--- a/wifi/supplicant/1.0/vts/functional/supplicant_sta_network_hidl_test.cpp
+++ b/wifi/supplicant/1.0/vts/functional/supplicant_sta_network_hidl_test.cpp
@@ -16,7 +16,7 @@
#include <android-base/logging.h>
-#include <gtest/gtest.h>
+#include <VtsHalHidlTargetBaseTest.h>
#include "supplicant_hidl_test_utils.h"