Merge "Fix broken failure condition when populating ase configurtion." into main
diff --git a/audio/aidl/android/hardware/audio/effect/Visualizer.aidl b/audio/aidl/android/hardware/audio/effect/Visualizer.aidl
index 0b37546..fe8fe97 100644
--- a/audio/aidl/android/hardware/audio/effect/Visualizer.aidl
+++ b/audio/aidl/android/hardware/audio/effect/Visualizer.aidl
@@ -20,10 +20,12 @@
/**
* Visualizer specific definitions. Visualizer enables application to retrieve part of the currently
- * playing audio for visualization purpose
+ * playing audio for visualization purpose. The output is identical to the input, while
+ * visualization data is generated separately based on scalingMode and captureSamples parameter
+ * values.
*
* All parameter settings must be inside the range of Capability.Range.visualizer definition if the
- * definition for the corresponding parameter tag exist. See more detals about Range in Range.aidl.
+ * definition for the corresponding parameter tag exist. See more details about Range in Range.aidl.
*
*/
@VintfStability
@@ -50,14 +52,24 @@
enum ScalingMode {
/**
* Defines a capture mode where amplification is applied based on the content of the
- * captured data. This is the default Visualizer mode, and is suitable for music
- * visualization.
+ * captured data in order to normalize it to the unsigned 8 bit sample range. This is the
+ * default Visualizer mode, and is suitable for music visualization.
+ *
+ * For example,
+ * Input Range:[-0.5, 0.5] -> Visualization Data Range:[0, 255]
+ * Input Range:[-1,1] -> Visualization Data Range:[0, 255]
+ *
*/
NORMALIZED = 0,
/**
- * Defines a capture mode where the playback volume will affect (scale) the range of the
- * captured data. A low playback volume will lead to low sample and fft values, and
- * vice-versa.
+ * Defines a capture mode where no additional scaling is done on the input audio data thus
+ * the visualization data remains as close as possible to the input. The visualization
+ * directly reflects the actual loudness and waveform shape, rather than fitting everything
+ * into a normalized visual range.
+ *
+ * For example,
+ * Input Range:[-0.5, 0.5] -> Visualization Data Range:[64, 192]
+ * Input Range:[-1,1] -> Visualization Data Range:[0, 255]
*/
AS_PLAYED,
}
@@ -93,7 +105,10 @@
Measurement measurement;
/**
- * Get only parameter to get the latest captured samples of PCM samples (8 bits per sample).
+ * Get only parameter to get the latest captured samples of PCM samples (8 bits per sample). It
+ * represents the visualization data. The capture is intended for passing to applications, and
+ * it contains the same audio data as the input, but with intentionally lower sample resolution,
+ * and optionally normalized, depending on the scalingMode.
*/
byte[] captureSampleBuffer;
diff --git a/automotive/can/aidl/default/service.cpp b/automotive/can/aidl/default/service.cpp
index eb45167..ef04cfd 100644
--- a/automotive/can/aidl/default/service.cpp
+++ b/automotive/can/aidl/default/service.cpp
@@ -20,12 +20,11 @@
#include <android/binder_manager.h>
#include <android/binder_process.h>
-namespace android::hardware::automotive::can {
-
using namespace std::string_literals;
+using namespace android;
using ::aidl::android::hardware::automotive::can::CanController;
-extern "C" int main() {
+int main() {
base::SetDefaultTag("CanController");
base::SetMinimumLogSeverity(base::VERBOSE);
@@ -40,4 +39,3 @@
LOG(FATAL) << "CanController exited unexpectedly!";
return EXIT_FAILURE;
}
-} // namespace android::hardware::automotive::can
diff --git a/automotive/can/aidl/default/tools/configurator/canhalconfigurator.cpp b/automotive/can/aidl/default/tools/configurator/canhalconfigurator.cpp
index 94e77b4..87a4497 100644
--- a/automotive/can/aidl/default/tools/configurator/canhalconfigurator.cpp
+++ b/automotive/can/aidl/default/tools/configurator/canhalconfigurator.cpp
@@ -98,7 +98,11 @@
return true;
}
-extern "C" int main(int argc, char* argv[]) {
+} // namespace android::hardware::automotive::can
+
+int main(int argc, char* argv[]) {
+ using namespace android::hardware::automotive::can;
+
std::string configFilepath = static_cast<std::string>(kDefaultConfigPath);
// allow for CLI specification of a config file.
@@ -114,5 +118,3 @@
}
return 0;
}
-
-} // namespace android::hardware::automotive::can
diff --git a/bluetooth/hci/h4_protocol.cc b/bluetooth/hci/h4_protocol.cc
index 5f6d86e..109ca5c 100644
--- a/bluetooth/hci/h4_protocol.cc
+++ b/bluetooth/hci/h4_protocol.cc
@@ -45,29 +45,50 @@
}
size_t H4Protocol::Send(PacketType type, const uint8_t* data, size_t length) {
- /* For HCI communication over USB dongle, multiple write results in
- * response timeout as driver expect type + data at once to process
- * the command, so using "writev"(for atomicity) here.
- */
- struct iovec iov[2];
- ssize_t ret = 0;
- iov[0].iov_base = &type;
- iov[0].iov_len = sizeof(type);
- iov[1].iov_base = (void*)data;
- iov[1].iov_len = length;
- while (1) {
- ret = TEMP_FAILURE_RETRY(writev(uart_fd_, iov, 2));
+ struct iovec iov_array[] = {{&type, sizeof(type)},
+ {const_cast<uint8_t*>(data), length}};
+ size_t iovcnt = sizeof(iov_array) / sizeof(iov_array[0]);
+ struct iovec* iov = iov_array;
+ size_t total_bytes = sizeof(type) + length;
+ size_t remaining_bytes = total_bytes;
+ size_t bytes_written = 0;
+
+ while (remaining_bytes > 0) {
+ ssize_t ret = TEMP_FAILURE_RETRY(writev(uart_fd_, iov, iovcnt));
if (ret == -1) {
- LOG_ALWAYS_FATAL("%s error writing to UART (%s)", __func__,
- strerror(errno));
+ if (errno == EAGAIN) continue;
+ ALOGE("Error writing to UART (%s)", strerror(errno));
+ break;
} else if (ret == 0) {
// Nothing written :(
ALOGE("%s zero bytes written - something went wrong...", __func__);
break;
+ } else if (ret == remaining_bytes) {
+ // Everything written
+ bytes_written += ret;
+ break;
}
- break;
+
+ // Updating counters for partial writes
+ bytes_written += ret;
+ remaining_bytes -= ret;
+
+ ALOGW("%s: %zu/%zu bytes written - retrying remaining %zu bytes", __func__,
+ bytes_written, total_bytes, remaining_bytes);
+
+ // Remove fully written iovs from the list
+ while (ret >= iov->iov_len) {
+ ret -= iov->iov_len;
+ ++iov;
+ --iovcnt;
+ }
+ // Adjust the iov to point to the remaining data that needs to be written
+ if (ret > 0) {
+ iov->iov_base = static_cast<uint8_t*>(iov->iov_base) + ret;
+ iov->iov_len -= ret;
+ }
}
- return ret;
+ return total_bytes - remaining_bytes;
}
size_t H4Protocol::OnPacketReady(const std::vector<uint8_t>& packet) {
diff --git a/boot/aidl/client/BootControlClient.cpp b/boot/aidl/client/BootControlClient.cpp
index 5cca183..7aab5b4 100644
--- a/boot/aidl/client/BootControlClient.cpp
+++ b/boot/aidl/client/BootControlClient.cpp
@@ -80,6 +80,7 @@
explicit BootControlClientAidl(std::shared_ptr<IBootControl> module)
: module_(module),
boot_control_death_recipient(AIBinder_DeathRecipient_new(onBootControlServiceDied)) {
+ AIBinder_DeathRecipient_setOnUnlinked(boot_control_death_recipient, onCallbackUnlinked);
binder_status_t status =
AIBinder_linkToDeath(module->asBinder().get(), boot_control_death_recipient, this);
if (status != STATUS_OK) {
@@ -236,6 +237,11 @@
private:
std::shared_ptr<IBootControl> module_;
AIBinder_DeathRecipient* boot_control_death_recipient;
+ static void onCallbackUnlinked(void* /*client*/) {
+ // this is an empty function needed to suppress the "AIBinder_linkToDeath is being called
+ // with a non-null cookie and no onUnlink callback set. This might not be intended.
+ // AIBinder_DeathRecipient_setOnUnlinked should be called first." warning
+ }
static void onBootControlServiceDied(void* client) {
BootControlClientAidl* self = static_cast<BootControlClientAidl*>(client);
self->onBootControlServiceDied();
diff --git a/compatibility_matrices/bump.py b/compatibility_matrices/bump.py
index bcb0fa6..91f58d4 100755
--- a/compatibility_matrices/bump.py
+++ b/compatibility_matrices/bump.py
@@ -45,6 +45,7 @@
self.current_level = cmdline_args.current_level
self.current_letter = cmdline_args.current_letter
self.current_version = cmdline_args.platform_version
+ self.next_version = cmdline_args.next_platform_version
self.current_module_name = f"framework_compatibility_matrix.{self.current_level}.xml"
self.current_xml = self.interfaces_dir / f"compatibility_matrices/compatibility_matrix.{self.current_level}.xml"
self.device_module_name = "framework_compatibility_matrix.device.xml"
@@ -132,27 +133,27 @@
return
try:
check_call(["grep", "-h",
- f"{self.current_letter.upper()} = {self.current_level}",
- "system/libvintf/include/vintf/Level.h"])
+ f"{self.next_letter.upper()} = {self.next_level}",
+ f"{self.top}/system/libvintf/include/vintf/Level.h"])
except subprocess.CalledProcessError:
print("Adding new API level to libvintf")
- add_lines_above("system/libvintf/analyze_matrix/analyze_matrix.cpp",
+ add_lines_above(f"{self.top}/system/libvintf/analyze_matrix/analyze_matrix.cpp",
" case Level::UNSPECIFIED:",
textwrap.indent(textwrap.dedent(f"""\
- case Level::{self.current_letter.upper()}:
- return "Android {self.current_version} ({self.current_letter.upper()})";"""),
+ case Level::{self.next_letter.upper()}:
+ return "Android {self.next_version} ({self.next_letter.upper()})";"""),
" "*2))
- add_lines_above("system/libvintf/include/vintf/Level.h",
+ add_lines_above(f"{self.top}/system/libvintf/include/vintf/Level.h",
" // To add new values:",
- f" {self.current_letter.upper()} = {self.current_level},")
- add_lines_above("system/libvintf/include/vintf/Level.h",
+ f" {self.next_letter.upper()} = {self.next_level},")
+ add_lines_above(f"{self.top}/system/libvintf/include/vintf/Level.h",
" Level::UNSPECIFIED,",
- f" Level::{self.current_letter.upper()},")
- add_lines_above("system/libvintf/RuntimeInfo.cpp",
+ f" Level::{self.next_letter.upper()},")
+ add_lines_above(f"{self.top}/system/libvintf/RuntimeInfo.cpp",
" // Add more levels above this line.",
textwrap.indent(textwrap.dedent(f"""\
- case {self.current_version}: {{
- ret = Level::{self.current_letter.upper()};
+ case {self.next_version}: {{
+ ret = Level::{self.next_letter.upper()};
}} break;"""),
" "*3))
@@ -188,7 +189,11 @@
parser.add_argument("platform_version",
type=str,
nargs="?",
- help="Android release version number number (e.g. 16)")
+ help="Current Android release version number (e.g. 16)")
+ parser.add_argument("next_platform_version",
+ type=str,
+ nargs="?",
+ help="Next Android release version number number (e.g. 17)")
cmdline_args = parser.parse_args()
Bump(cmdline_args).run()
diff --git a/health/aidl/default/LinkedCallback.h b/health/aidl/default/LinkedCallback.h
index 8c9c997..6b17be0 100644
--- a/health/aidl/default/LinkedCallback.h
+++ b/health/aidl/default/LinkedCallback.h
@@ -36,7 +36,7 @@
// cookie when it's unlinked.
static ::android::base::Result<LinkedCallback*> Make(
std::shared_ptr<Health> service, std::shared_ptr<IHealthInfoCallback> callback);
- // On callback died, unreigster it from the service.
+ // On callback died, unregister it from the service.
void OnCallbackDied();
private:
diff --git a/macsec/aidl/default/service.cpp b/macsec/aidl/default/service.cpp
index faf3a09..9d5d3bf 100644
--- a/macsec/aidl/default/service.cpp
+++ b/macsec/aidl/default/service.cpp
@@ -20,12 +20,11 @@
#include <android/binder_manager.h>
#include <android/binder_process.h>
-namespace android::hardware::macsec {
-
using namespace std::string_literals;
+using namespace android;
using ::aidl::android::hardware::macsec::MacsecPskPlugin;
-extern "C" int main() {
+int main() {
base::SetDefaultTag("MacsecPskPlugin");
base::SetMinimumLogSeverity(base::VERBOSE);
@@ -40,4 +39,3 @@
LOG(FATAL) << "MacsecPskPlugin exited unexpectedly!";
return EXIT_FAILURE;
}
-} // namespace android::hardware::macsec