Merge \"audio: Add callback event to asynchronously notify error\" into nyc-mr1-dev
am: 61187f61ef
Change-Id: I9a4dd8e48bd9746636b6d5a2c8fc1423b0cb46e1
diff --git a/include/hardware/bt_gatt_client.h b/include/hardware/bt_gatt_client.h
index e2c8a92..68dc3c7 100644
--- a/include/hardware/bt_gatt_client.h
+++ b/include/hardware/bt_gatt_client.h
@@ -19,9 +19,12 @@
#define ANDROID_INCLUDE_BT_GATT_CLIENT_H
#include <stdint.h>
+#include <vector>
#include "bt_gatt_types.h"
#include "bt_common_types.h"
+using std::vector;
+
__BEGIN_DECLS
/**
@@ -119,7 +122,7 @@
bt_uuid_t *app_uuid);
/** Callback for scan results */
-typedef void (*scan_result_callback)(bt_bdaddr_t* bda, int rssi, uint8_t* adv_data);
+typedef void (*scan_result_callback)(bt_bdaddr_t* bda, int rssi, vector<uint8_t> adv_data);
/** GATT open callback invoked in response to open */
typedef void (*connect_callback)(int conn_id, int status, int client_if, bt_bdaddr_t* bda);
@@ -210,7 +213,7 @@
/** Callback invoked when batchscan reports are obtained */
typedef void (*batchscan_reports_callback)(int client_if, int status, int report_format,
- int num_records, int data_len, uint8_t* rep_data);
+ int num_records, vector<uint8_t> data);
/** Callback invoked when batchscan storage threshold limit is crossed */
typedef void (*batchscan_threshold_callback)(int client_if);
@@ -304,16 +307,16 @@
/** Write a remote characteristic */
bt_status_t (*write_characteristic)(int conn_id, uint16_t handle,
- int write_type, int len, int auth_req,
- char* p_value);
+ int write_type, int auth_req,
+ vector<uint8_t> value);
/** Read the descriptor for a given characteristic */
bt_status_t (*read_descriptor)(int conn_id, uint16_t handle, int auth_req);
/** Write a remote descriptor for a given characteristic */
bt_status_t (*write_descriptor)( int conn_id, uint16_t handle,
- int write_type, int len,
- int auth_req, char* p_value);
+ int write_type, int auth_req,
+ vector<uint8_t> value);
/** Execute a prepared write operation */
bt_status_t (*execute_write)(int conn_id, int execute);
@@ -341,8 +344,8 @@
int filt_index, int company_id,
int company_id_mask, const bt_uuid_t *p_uuid,
const bt_uuid_t *p_uuid_mask, const bt_bdaddr_t *bd_addr,
- char addr_type, int data_len, char* p_data, int mask_len,
- char* p_mask);
+ char addr_type, vector<uint8_t> data,
+ vector<uint8_t> p_mask);
/** Clear all scan filter conditions for specific filter index*/
bt_status_t (*scan_filter_clear)(int client_if, int filt_index);
@@ -356,9 +359,9 @@
/** Set the advertising data or scan response data */
bt_status_t (*set_adv_data)(int client_if, bool set_scan_rsp, bool include_name,
bool include_txpower, int min_interval, int max_interval, int appearance,
- uint16_t manufacturer_len, char* manufacturer_data,
- uint16_t service_data_len, char* service_data,
- uint16_t service_uuid_len, char* service_uuid);
+ vector<uint8_t> manufacturer_data,
+ vector<uint8_t> service_data,
+ vector<uint8_t> service_uuid);
/** Configure the MTU for a given connection */
bt_status_t (*configure_mtu)(int conn_id, int mtu);
@@ -380,9 +383,8 @@
/* Setup the data for the specified instance */
bt_status_t (*multi_adv_set_inst_data)(int client_if, bool set_scan_rsp, bool include_name,
- bool incl_txpower, int appearance, int manufacturer_len,
- char* manufacturer_data, int service_data_len,
- char* service_data, int service_uuid_len, char* service_uuid);
+ bool incl_txpower, int appearance, vector<uint8_t> manufacturer_data,
+ vector<uint8_t> service_data, vector<uint8_t> service_uuid);
/* Disable the multi adv instance */
bt_status_t (*multi_adv_disable)(int client_if);
diff --git a/include/hardware/bt_gatt_server.h b/include/hardware/bt_gatt_server.h
index 0d6cc1e..f0eb1b2 100644
--- a/include/hardware/bt_gatt_server.h
+++ b/include/hardware/bt_gatt_server.h
@@ -19,9 +19,12 @@
#define ANDROID_INCLUDE_BT_GATT_SERVER_H
#include <stdint.h>
+#include <vector>
#include "bt_gatt_types.h"
+using std::vector;
+
__BEGIN_DECLS
/** GATT value type used in response to remote read requests */
@@ -91,8 +94,8 @@
* characteristic or descriptor.
*/
typedef void (*request_write_callback)(int conn_id, int trans_id, bt_bdaddr_t *bda,
- int attr_handle, int offset, int length,
- bool need_rsp, bool is_prep, uint8_t* value);
+ int attr_handle, int offset, bool need_rsp,
+ bool is_prep, vector<uint8_t> value);
/** Callback invoked when a previously prepared write is to be executed */
typedef void (*request_exec_write_callback)(int conn_id, int trans_id,
@@ -182,8 +185,8 @@
/** Send value indication to a remote device */
bt_status_t (*send_indication)(int server_if, int attribute_handle,
- int conn_id, int len, int confirm,
- char* p_value);
+ int conn_id, int confirm,
+ vector<uint8_t> value);
/** Send a response to a read/write operation */
bt_status_t (*send_response)(int conn_id, int trans_id,
diff --git a/include/hardware/nvram.h b/include/hardware/nvram.h
index a1868b5..859ea47 100644
--- a/include/hardware/nvram.h
+++ b/include/hardware/nvram.h
@@ -21,6 +21,7 @@
#include <sys/cdefs.h>
#include <hardware/hardware.h>
+#include <hardware/nvram_defs.h>
__BEGIN_DECLS
@@ -30,30 +31,7 @@
/* The version of this module. */
#define NVRAM_MODULE_API_VERSION_0_1 HARDWARE_MODULE_API_VERSION(0, 1)
-#define NVRAM_DEVICE_API_VERSION_0_1 HARDWARE_DEVICE_API_VERSION(0, 1)
-
-/* Values returned by nvram_device methods. */
-typedef uint32_t nvram_result_t;
-
-const nvram_result_t NV_RESULT_SUCCESS = 0;
-const nvram_result_t NV_RESULT_INTERNAL_ERROR = 1;
-const nvram_result_t NV_RESULT_ACCESS_DENIED = 2;
-const nvram_result_t NV_RESULT_INVALID_PARAMETER = 3;
-const nvram_result_t NV_RESULT_SPACE_DOES_NOT_EXIST = 4;
-const nvram_result_t NV_RESULT_SPACE_ALREADY_EXISTS = 5;
-const nvram_result_t NV_RESULT_OPERATION_DISABLED = 6;
-
-/* Values describing available access controls. */
-typedef uint32_t nvram_control_t;
-
-const nvram_control_t NV_CONTROL_PERSISTENT_WRITE_LOCK = 1;
-const nvram_control_t NV_CONTROL_BOOT_WRITE_LOCK = 2;
-const nvram_control_t NV_CONTROL_BOOT_READ_LOCK = 3;
-const nvram_control_t NV_CONTROL_WRITE_AUTHORIZATION = 4;
-const nvram_control_t NV_CONTROL_READ_AUTHORIZATION = 5;
-const nvram_control_t NV_CONTROL_WRITE_EXTEND = 6;
-
-const uint32_t NV_UNLIMITED_SPACES = 0xFFFFFFFF;
+#define NVRAM_DEVICE_API_VERSION_1_1 HARDWARE_DEVICE_API_VERSION(1, 1)
struct nvram_module {
/**
@@ -99,6 +77,17 @@
const struct nvram_device* device, uint64_t* available_size);
/**
+ * Outputs the maximum number of bytes that can be allocated for a single
+ * space. This will always be at least 32. If an implementation does not
+ * limit the maximum size it may provide the total size.
+ *
+ * device - The nvram_device instance.
+ * max_space_size - Receives the output. Cannot be NULL.
+ */
+ nvram_result_t (*get_max_space_size_in_bytes)(
+ const struct nvram_device* device, uint64_t* max_space_size);
+
+ /**
* Outputs the maximum total number of spaces that may be allocated.
* This will always be at least 8. Outputs NV_UNLIMITED_SPACES if any
* number of spaces are supported (limited only to available NVRAM
diff --git a/include/hardware/nvram_defs.h b/include/hardware/nvram_defs.h
new file mode 100644
index 0000000..0256a3c
--- /dev/null
+++ b/include/hardware/nvram_defs.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+/*
+ * This file contains data type definitions and constants that are useful to
+ * code interacting with and implementing the NVRAM HAL, even though it doesn't
+ * use the actual NVRAM HAL module interface. Keeping this in a separate file
+ * simplifies inclusion in low-level code which can't easily include the heavier
+ * hardware.h due to lacking standard headers.
+ */
+
+#ifndef ANDROID_HARDWARE_NVRAM_DEFS_H
+#define ANDROID_HARDWARE_NVRAM_DEFS_H
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/* Values returned by nvram_device methods. */
+typedef uint32_t nvram_result_t;
+
+const nvram_result_t NV_RESULT_SUCCESS = 0;
+const nvram_result_t NV_RESULT_INTERNAL_ERROR = 1;
+const nvram_result_t NV_RESULT_ACCESS_DENIED = 2;
+const nvram_result_t NV_RESULT_INVALID_PARAMETER = 3;
+const nvram_result_t NV_RESULT_SPACE_DOES_NOT_EXIST = 4;
+const nvram_result_t NV_RESULT_SPACE_ALREADY_EXISTS = 5;
+const nvram_result_t NV_RESULT_OPERATION_DISABLED = 6;
+
+/* Values describing available access controls. */
+typedef uint32_t nvram_control_t;
+
+const nvram_control_t NV_CONTROL_PERSISTENT_WRITE_LOCK = 1;
+const nvram_control_t NV_CONTROL_BOOT_WRITE_LOCK = 2;
+const nvram_control_t NV_CONTROL_BOOT_READ_LOCK = 3;
+const nvram_control_t NV_CONTROL_WRITE_AUTHORIZATION = 4;
+const nvram_control_t NV_CONTROL_READ_AUTHORIZATION = 5;
+const nvram_control_t NV_CONTROL_WRITE_EXTEND = 6;
+
+const uint32_t NV_UNLIMITED_SPACES = 0xFFFFFFFF;
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+#endif // ANDROID_HARDWARE_NVRAM_DEFS_H
diff --git a/include/hardware/qemu_pipe.h b/include/hardware/qemu_pipe.h
deleted file mode 100644
index 53aec97..0000000
--- a/include/hardware/qemu_pipe.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2011 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_INCLUDE_HARDWARE_QEMU_PIPE_H
-#define ANDROID_INCLUDE_HARDWARE_QEMU_PIPE_H
-
-#include <sys/cdefs.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/mman.h>
-#include <pthread.h> /* for pthread_once() */
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#ifndef D
-# define D(...) do{}while(0)
-#endif
-
-/* Try to open a new Qemu fast-pipe. This function returns a file descriptor
- * that can be used to communicate with a named service managed by the
- * emulator.
- *
- * This file descriptor can be used as a standard pipe/socket descriptor.
- *
- * 'pipeName' is the name of the emulator service you want to connect to.
- * E.g. 'opengles' or 'camera'.
- *
- * On success, return a valid file descriptor
- * Returns -1 on error, and errno gives the error code, e.g.:
- *
- * EINVAL -> unknown/unsupported pipeName
- * ENOSYS -> fast pipes not available in this system.
- *
- * ENOSYS should never happen, except if you're trying to run within a
- * misconfigured emulator.
- *
- * You should be able to open several pipes to the same pipe service,
- * except for a few special cases (e.g. GSM modem), where EBUSY will be
- * returned if more than one client tries to connect to it.
- */
-static __inline__ int
-qemu_pipe_open(const char* pipeName)
-{
- char buff[256];
- int buffLen;
- int fd, ret;
-
- if (pipeName == NULL || pipeName[0] == '\0') {
- errno = EINVAL;
- return -1;
- }
-
- snprintf(buff, sizeof buff, "pipe:%s", pipeName);
-
- fd = open("/dev/qemu_pipe", O_RDWR);
- if (fd < 0 && errno == ENOENT)
- fd = open("/dev/goldfish_pipe", O_RDWR);
- if (fd < 0) {
- D("%s: Could not open /dev/qemu_pipe: %s", __FUNCTION__, strerror(errno));
- //errno = ENOSYS;
- return -1;
- }
-
- buffLen = strlen(buff);
-
- ret = TEMP_FAILURE_RETRY(write(fd, buff, buffLen+1));
- if (ret != buffLen+1) {
- D("%s: Could not connect to %s pipe service: %s", __FUNCTION__, pipeName, strerror(errno));
- if (ret == 0) {
- errno = ECONNRESET;
- } else if (ret > 0) {
- errno = EINVAL;
- }
- return -1;
- }
-
- return fd;
-}
-
-#endif /* ANDROID_INCLUDE_HARDWARE_QEMUD_PIPE_H */
diff --git a/include/hardware/qemud.h b/include/hardware/qemud.h
deleted file mode 100644
index 5c39f9c..0000000
--- a/include/hardware/qemud.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (C) 2008 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_INCLUDE_HARDWARE_QEMUD_H
-#define ANDROID_INCLUDE_HARDWARE_QEMUD_H
-
-#include <cutils/sockets.h>
-#include "qemu_pipe.h"
-
-/* the following is helper code that is used by the QEMU-specific
- * hardware HAL modules to communicate with the emulator program
- * through the 'qemud' multiplexing daemon, or through the qemud
- * pipe.
- *
- * see the documentation comments for details in
- * development/emulator/qemud/qemud.c
- *
- * all definitions here are built into the HAL module to avoid
- * having to write a tiny shared library for this.
- */
-
-/* we expect the D macro to be defined to a function macro
- * that sends its formatted string argument(s) to the log.
- * If not, ignore the traces.
- */
-#ifndef D
-# define D(...) ((void)0)
-#endif
-
-static __inline__ int
-qemud_fd_write(int fd, const void* buff, int len)
-{
- int len2;
- do {
- len2 = write(fd, buff, len);
- } while (len2 < 0 && errno == EINTR);
- return len2;
-}
-
-static __inline__ int
-qemud_fd_read(int fd, void* buff, int len)
-{
- int len2;
- do {
- len2 = read(fd, buff, len);
- } while (len2 < 0 && errno == EINTR);
- return len2;
-}
-
-static __inline__ int
-qemud_channel_open(const char* name)
-{
- int fd;
- int namelen = strlen(name);
- char answer[2];
- char pipe_name[256];
-
- /* First, try to connect to the pipe. */
- snprintf(pipe_name, sizeof(pipe_name), "qemud:%s", name);
- fd = qemu_pipe_open(pipe_name);
- if (fd < 0) {
- D("QEMUD pipe is not available for %s: %s", name, strerror(errno));
- /* If pipe is not available, connect to qemud control socket */
- fd = socket_local_client( "qemud",
- ANDROID_SOCKET_NAMESPACE_RESERVED,
- SOCK_STREAM );
- if (fd < 0) {
- D("no qemud control socket: %s", strerror(errno));
- return -1;
- }
-
- /* send service name to connect */
- if (qemud_fd_write(fd, name, namelen) != namelen) {
- D("can't send service name to qemud: %s",
- strerror(errno));
- close(fd);
- return -1;
- }
-
- /* read answer from daemon */
- if (qemud_fd_read(fd, answer, 2) != 2 ||
- answer[0] != 'O' || answer[1] != 'K') {
- D("cant' connect to %s service through qemud", name);
- close(fd);
- return -1;
- }
- }
- return fd;
-}
-
-static __inline__ int
-qemud_channel_send(int fd, const void* msg, int msglen)
-{
- char header[5];
-
- if (msglen < 0)
- msglen = strlen((const char*)msg);
-
- if (msglen == 0)
- return 0;
-
- snprintf(header, sizeof header, "%04x", msglen);
- if (qemud_fd_write(fd, header, 4) != 4) {
- D("can't write qemud frame header: %s", strerror(errno));
- return -1;
- }
-
- if (qemud_fd_write(fd, msg, msglen) != msglen) {
- D("can4t write qemud frame payload: %s", strerror(errno));
- return -1;
- }
- return 0;
-}
-
-static __inline__ int
-qemud_channel_recv(int fd, void* msg, int msgsize)
-{
- char header[5];
- int size, avail;
-
- if (qemud_fd_read(fd, header, 4) != 4) {
- D("can't read qemud frame header: %s", strerror(errno));
- return -1;
- }
- header[4] = 0;
- if (sscanf(header, "%04x", &size) != 1) {
- D("malformed qemud frame header: '%.*s'", 4, header);
- return -1;
- }
- if (size > msgsize)
- return -1;
-
- if (qemud_fd_read(fd, msg, size) != size) {
- D("can't read qemud frame payload: %s", strerror(errno));
- return -1;
- }
- return size;
-}
-
-#endif /* ANDROID_INCLUDE_HARDWARE_QEMUD_H */
diff --git a/modules/camera/Camera.h b/modules/camera/Camera.h
index 0ceaf25..072de35 100644
--- a/modules/camera/Camera.h
+++ b/modules/camera/Camera.h
@@ -34,7 +34,7 @@
public:
// id is used to distinguish cameras. 0 <= id < NUM_CAMERAS.
// module is a handle to the HAL module, used when the device is opened.
- Camera(int id);
+ explicit Camera(int id);
virtual ~Camera();
// Common Camera Device Operations (see <hardware/camera_common.h>)
diff --git a/modules/camera/CameraHAL.h b/modules/camera/CameraHAL.h
index 00c74e5..74a70a6 100644
--- a/modules/camera/CameraHAL.h
+++ b/modules/camera/CameraHAL.h
@@ -29,7 +29,7 @@
// camera device.
class CameraHAL {
public:
- CameraHAL(int num_cameras);
+ explicit CameraHAL(int num_cameras);
~CameraHAL();
// Camera Module Interface (see <hardware/camera_common.h>)
diff --git a/modules/camera/ExampleCamera.cpp b/modules/camera/ExampleCamera.cpp
index d873321..2b1f185 100644
--- a/modules/camera/ExampleCamera.cpp
+++ b/modules/camera/ExampleCamera.cpp
@@ -26,7 +26,7 @@
#include "ExampleCamera.h"
-#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
+#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
namespace default_camera_hal {
diff --git a/modules/camera/ExampleCamera.h b/modules/camera/ExampleCamera.h
index 45c4a94..44eac76 100644
--- a/modules/camera/ExampleCamera.h
+++ b/modules/camera/ExampleCamera.h
@@ -27,7 +27,7 @@
// metadata and logic about that device.
class ExampleCamera : public Camera {
public:
- ExampleCamera(int id);
+ explicit ExampleCamera(int id);
~ExampleCamera();
private:
diff --git a/modules/consumerir/consumerir.c b/modules/consumerir/consumerir.c
index f3eac0b..b0ff940 100644
--- a/modules/consumerir/consumerir.c
+++ b/modules/consumerir/consumerir.c
@@ -22,7 +22,7 @@
#include <hardware/hardware.h>
#include <hardware/consumerir.h>
-#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
+#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
static const consumerir_freq_range_t consumerir_freqs[] = {
{.min = 30000, .max = 30000},
diff --git a/modules/gralloc/gr.h b/modules/gralloc/gr.h
index 732b6bc..ac7e967 100644
--- a/modules/gralloc/gr.h
+++ b/modules/gralloc/gr.h
@@ -48,7 +48,7 @@
class Autolock {
Locker& locker;
public:
- inline Autolock(Locker& locker) : locker(locker) { locker.lock(); }
+ inline explicit Autolock(Locker& locker) : locker(locker) { locker.lock(); }
inline ~Autolock() { locker.unlock(); }
};
inline Locker() { pthread_mutex_init(&mutex, 0); }
diff --git a/modules/sensors/SensorEventQueue.h b/modules/sensors/SensorEventQueue.h
index 11e1f41..9778e93 100644
--- a/modules/sensors/SensorEventQueue.h
+++ b/modules/sensors/SensorEventQueue.h
@@ -38,7 +38,7 @@
pthread_cond_t mSpaceAvailableCondition;
public:
- SensorEventQueue(int capacity);
+ explicit SensorEventQueue(int capacity);
~SensorEventQueue();
// Returns length of region, between zero and min(capacity, requestedLength). If there is any
diff --git a/modules/usbcamera/Camera.h b/modules/usbcamera/Camera.h
index 6419c7d..4051345 100644
--- a/modules/usbcamera/Camera.h
+++ b/modules/usbcamera/Camera.h
@@ -38,7 +38,7 @@
public:
// id is used to distinguish cameras. 0 <= id < NUM_CAMERAS.
// module is a handle to the HAL module, used when the device is opened.
- Camera(int id);
+ explicit Camera(int id);
virtual ~Camera();
// Common Camera Device Operations (see <hardware/camera_common.h>)
diff --git a/modules/usbcamera/HotplugThread.h b/modules/usbcamera/HotplugThread.h
index a13adb7..625dcb4 100644
--- a/modules/usbcamera/HotplugThread.h
+++ b/modules/usbcamera/HotplugThread.h
@@ -36,7 +36,7 @@
class HotplugThread : public android::Thread {
public:
- HotplugThread(CameraHAL *hal);
+ explicit HotplugThread(CameraHAL *hal);
~HotplugThread();
// Override below two methods for proper cleanup.
diff --git a/modules/usbcamera/UsbCamera.cpp b/modules/usbcamera/UsbCamera.cpp
index 82a1145..d0aaded 100644
--- a/modules/usbcamera/UsbCamera.cpp
+++ b/modules/usbcamera/UsbCamera.cpp
@@ -26,7 +26,7 @@
#include "Camera.h"
#include "UsbCamera.h"
-#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
+#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
namespace usb_camera_hal {
diff --git a/modules/usbcamera/UsbCamera.h b/modules/usbcamera/UsbCamera.h
index fe52ade..57017fe 100644
--- a/modules/usbcamera/UsbCamera.h
+++ b/modules/usbcamera/UsbCamera.h
@@ -28,7 +28,7 @@
*/
class UsbCamera : public Camera {
public:
- UsbCamera(int id);
+ explicit UsbCamera(int id);
~UsbCamera();
private:
diff --git a/modules/vibrator/vibrator.c b/modules/vibrator/vibrator.c
index 6b3ce57..c3c2951 100644
--- a/modules/vibrator/vibrator.c
+++ b/modules/vibrator/vibrator.c
@@ -21,11 +21,15 @@
#include <malloc.h>
#include <stdio.h>
+#include <stdbool.h>
+#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <math.h>
+#define TIMEOUT_STR_LEN 20
+
static const char THE_DEVICE[] = "/sys/class/timed_output/vibrator/enable";
static int vibra_exists() {
@@ -33,7 +37,6 @@
fd = TEMP_FAILURE_RETRY(open(THE_DEVICE, O_RDWR));
if(fd < 0) {
- ALOGE("Vibrator file does not exist : %d", fd);
return 0;
}
@@ -41,27 +44,24 @@
return 1;
}
-static int sendit(unsigned int timeout_ms)
+static int write_value(const char *file, const char *value)
{
int to_write, written, ret, fd;
- char value[20]; /* large enough for millions of years */
-
- fd = TEMP_FAILURE_RETRY(open(THE_DEVICE, O_RDWR));
- if(fd < 0) {
+ fd = TEMP_FAILURE_RETRY(open(file, O_WRONLY));
+ if (fd < 0) {
return -errno;
}
- to_write = snprintf(value, sizeof(value), "%u\n", timeout_ms);
+ to_write = strlen(value) + 1;
written = TEMP_FAILURE_RETRY(write(fd, value, to_write));
-
if (written == -1) {
ret = -errno;
} else if (written != to_write) {
/* even though EAGAIN is an errno value that could be set
by write() in some cases, none of them apply here. So, this return
value can be clearly identified when debugging and suggests the
- caller that it may try to call vibraror_on() again */
+ caller that it may try to call vibrator_on() again */
ret = -EAGAIN;
} else {
ret = 0;
@@ -73,6 +73,14 @@
return ret;
}
+static int sendit(unsigned int timeout_ms)
+{
+ char value[TIMEOUT_STR_LEN]; /* large enough for millions of years */
+
+ snprintf(value, sizeof(value), "%u", timeout_ms);
+ return write_value(THE_DEVICE, value);
+}
+
static int vibra_on(vibrator_device_t* vibradev __unused, unsigned int timeout_ms)
{
/* constant on, up to maximum allowed time */
@@ -84,6 +92,43 @@
return sendit(0);
}
+static const char LED_DEVICE[] = "/sys/class/leds/vibrator";
+
+static int write_led_file(const char *file, const char *value)
+{
+ char file_str[50];
+
+ snprintf(file_str, sizeof(file_str), "%s/%s", LED_DEVICE, file);
+ return write_value(file_str, value);
+}
+
+static int vibra_led_exists()
+{
+ return !write_led_file("trigger", "transient");
+}
+
+static int vibra_led_on(vibrator_device_t* vibradev __unused, unsigned int timeout_ms)
+{
+ int ret;
+ char value[TIMEOUT_STR_LEN]; /* large enough for millions of years */
+
+ ret = write_led_file("state", "1");
+ if (ret)
+ return ret;
+
+ snprintf(value, sizeof(value), "%u\n", timeout_ms);
+ ret = write_led_file("duration", value);
+ if (ret)
+ return ret;
+
+ return write_led_file("activate", "1");
+}
+
+static int vibra_led_off(vibrator_device_t* vibradev __unused)
+{
+ return write_led_file("activate", "0");
+}
+
static int vibra_close(hw_device_t *device)
{
free(device);
@@ -92,7 +137,15 @@
static int vibra_open(const hw_module_t* module, const char* id __unused,
hw_device_t** device __unused) {
- if (!vibra_exists()) {
+ bool use_led;
+
+ if (vibra_exists()) {
+ ALOGD("Vibrator using timed_output");
+ use_led = false;
+ } else if (vibra_led_exists()) {
+ ALOGD("Vibrator using LED trigger");
+ use_led = true;
+ } else {
ALOGE("Vibrator device does not exist. Cannot start vibrator");
return -ENODEV;
}
@@ -109,8 +162,13 @@
vibradev->common.version = HARDWARE_DEVICE_API_VERSION(1,0);
vibradev->common.close = vibra_close;
- vibradev->vibrator_on = vibra_on;
- vibradev->vibrator_off = vibra_off;
+ if (use_led) {
+ vibradev->vibrator_on = vibra_led_on;
+ vibradev->vibrator_off = vibra_led_off;
+ } else {
+ vibradev->vibrator_on = vibra_on;
+ vibradev->vibrator_off = vibra_off;
+ }
*device = (hw_device_t *) vibradev;
diff --git a/tests/camera2/CameraModuleFixture.h b/tests/camera2/CameraModuleFixture.h
index 661c693..25513af 100644
--- a/tests/camera2/CameraModuleFixture.h
+++ b/tests/camera2/CameraModuleFixture.h
@@ -35,7 +35,7 @@
template <bool InfoQuirk = false>
struct CameraModuleFixture {
- CameraModuleFixture(int CameraID = -1) {
+ explicit CameraModuleFixture(int CameraID = -1) {
TEST_EXTENSION_FORKING_CONSTRUCTOR;
mCameraID = CameraID;
diff --git a/tests/camera2/CameraStreamFixture.h b/tests/camera2/CameraStreamFixture.h
index bf7fb42..92ff05b 100644
--- a/tests/camera2/CameraStreamFixture.h
+++ b/tests/camera2/CameraStreamFixture.h
@@ -71,7 +71,7 @@
: public CameraModuleFixture</*InfoQuirk*/true> {
public:
- CameraStreamFixture(CameraStreamParams p)
+ explicit CameraStreamFixture(CameraStreamParams p)
: CameraModuleFixture(TestSettings::DeviceId()) {
TEST_EXTENSION_FORKING_CONSTRUCTOR;
diff --git a/tests/camera2/camera2_utils.h b/tests/camera2/camera2_utils.h
index ab1fcfb..a01bae2 100644
--- a/tests/camera2/camera2_utils.h
+++ b/tests/camera2/camera2_utils.h
@@ -166,7 +166,7 @@
*/
class StreamAdapter: public camera2_stream_ops {
public:
- StreamAdapter(sp<IGraphicBufferProducer> consumer);
+ explicit StreamAdapter(sp<IGraphicBufferProducer> consumer);
~StreamAdapter();
diff --git a/tests/hwc/cnativewindow.c b/tests/hwc/cnativewindow.c
index 5c16afb..5b1d78e 100644
--- a/tests/hwc/cnativewindow.c
+++ b/tests/hwc/cnativewindow.c
@@ -37,7 +37,7 @@
static int trace_level = 1;
#define _TRACE(n,fmt...) \
- do { if (trace_level >= n) fprintf(stderr, "CNW: " fmt); } while (0)
+ do { if (trace_level >= (n)) fprintf(stderr, "CNW: " fmt); } while (0)
#define ERROR(fmt...) _TRACE(0, fmt)
#define INFO(fmt...) _TRACE(1, fmt)
diff --git a/tests/input/evdev/TestHelpers.h b/tests/input/evdev/TestHelpers.h
index 461db04..d26adfb 100644
--- a/tests/input/evdev/TestHelpers.h
+++ b/tests/input/evdev/TestHelpers.h
@@ -42,7 +42,7 @@
*/
class TempFile {
public:
- TempFile(const char* path);
+ explicit TempFile(const char* path);
~TempFile();
// No copy or assign
diff --git a/tests/keymaster/keymaster_test.cpp b/tests/keymaster/keymaster_test.cpp
index 6266d40..3040a5c 100644
--- a/tests/keymaster/keymaster_test.cpp
+++ b/tests/keymaster/keymaster_test.cpp
@@ -41,7 +41,7 @@
class UniqueBlob : public UniquePtr<uint8_t[]> {
public:
- UniqueBlob(size_t length) :
+ explicit UniqueBlob(size_t length) :
mLength(length) {
}