Loading services/core/java/com/android/server/SerialService.java +19 −2 Original line number Diff line number Diff line Loading @@ -18,22 +18,30 @@ package com.android.server; import android.annotation.EnforcePermission; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.hardware.ISerialManager; import android.hardware.SerialManagerInternal; import android.os.ParcelFileDescriptor; import android.os.PermissionEnforcer; import android.system.ErrnoException; import android.system.Os; import android.system.OsConstants; import android.util.Slog; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.Preconditions; import java.io.File; import java.io.FileDescriptor; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.function.Supplier; @android.ravenwood.annotation.RavenwoodKeepWholeClass public class SerialService extends ISerialManager.Stub { private static final String TAG = "SerialService"; private final Context mContext; @GuardedBy("mSerialPorts") Loading @@ -50,7 +58,7 @@ public class SerialService extends ISerialManager.Stub { final String[] serialPorts = getSerialPorts(context); for (String serialPort : serialPorts) { mSerialPorts.put(serialPort, () -> { return native_open(serialPort); return tryOpen(serialPort); }); } } Loading Loading @@ -135,5 +143,14 @@ public class SerialService extends ISerialManager.Stub { } }; private native ParcelFileDescriptor native_open(String path); private static @Nullable ParcelFileDescriptor tryOpen(String path) { try { FileDescriptor fd = Os.open(path, OsConstants.O_RDWR | OsConstants.O_NOCTTY, 0); return new ParcelFileDescriptor(fd); } catch (ErrnoException e) { Slog.e(TAG, "Could not open: " + path, e); // We return null to preserve API semantics from earlier implementation variants. return null; } } } services/core/jni/Android.bp +0 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,6 @@ cc_library_static { "com_android_server_powerstats_PowerStatsService.cpp", "com_android_server_power_stats_CpuPowerStatsCollector.cpp", "com_android_server_hint_HintManagerService.cpp", "com_android_server_SerialService.cpp", "com_android_server_soundtrigger_middleware_AudioSessionProviderImpl.cpp", "com_android_server_soundtrigger_middleware_ExternalCaptureStateTracker.cpp", "com_android_server_stats_pull_StatsPullAtomService.cpp", Loading services/core/jni/com_android_server_SerialService.cppdeleted 100644 → 0 +0 −83 Original line number Diff line number Diff line /* * 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. */ #define LOG_TAG "SerialServiceJNI" #include "utils/Log.h" #include "jni.h" #include <nativehelper/JNIPlatformHelp.h> #include "android_runtime/AndroidRuntime.h" #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> namespace android { static struct parcel_file_descriptor_offsets_t { jclass mClass; jmethodID mConstructor; } gParcelFileDescriptorOffsets; static jobject android_server_SerialService_open(JNIEnv *env, jobject /* thiz */, jstring path) { const char *pathStr = env->GetStringUTFChars(path, NULL); int fd = open(pathStr, O_RDWR | O_NOCTTY); if (fd < 0) { ALOGE("could not open %s", pathStr); env->ReleaseStringUTFChars(path, pathStr); return NULL; } env->ReleaseStringUTFChars(path, pathStr); jobject fileDescriptor = jniCreateFileDescriptor(env, fd); if (fileDescriptor == NULL) { close(fd); return NULL; } return env->NewObject(gParcelFileDescriptorOffsets.mClass, gParcelFileDescriptorOffsets.mConstructor, fileDescriptor); } static const JNINativeMethod method_table[] = { { "native_open", "(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;", (void*)android_server_SerialService_open }, }; int register_android_server_SerialService(JNIEnv *env) { jclass clazz = env->FindClass("com/android/server/SerialService"); if (clazz == NULL) { ALOGE("Can't find com/android/server/SerialService"); return -1; } clazz = env->FindClass("android/os/ParcelFileDescriptor"); LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.ParcelFileDescriptor"); gParcelFileDescriptorOffsets.mClass = (jclass) env->NewGlobalRef(clazz); gParcelFileDescriptorOffsets.mConstructor = env->GetMethodID(clazz, "<init>", "(Ljava/io/FileDescriptor;)V"); LOG_FATAL_IF(gParcelFileDescriptorOffsets.mConstructor == NULL, "Unable to find constructor for android.os.ParcelFileDescriptor"); return jniRegisterNativeMethods(env, "com/android/server/SerialService", method_table, NELEM(method_table)); } }; services/core/jni/onload.cpp +0 −2 Original line number Diff line number Diff line Loading @@ -33,7 +33,6 @@ int register_android_server_PowerStatsService(JNIEnv* env); int register_android_server_power_stats_CpuPowerStatsCollector(JNIEnv* env); int register_android_server_HintManagerService(JNIEnv* env); int register_android_server_storage_AppFuse(JNIEnv* env); int register_android_server_SerialService(JNIEnv* env); int register_android_server_SystemServer(JNIEnv* env); int register_android_server_UsbAlsaJackDetector(JNIEnv* env); int register_android_server_UsbAlsaMidiDevice(JNIEnv* env); Loading Loading @@ -93,7 +92,6 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */) register_android_server_PowerStatsService(env); register_android_server_power_stats_CpuPowerStatsCollector(env); register_android_server_HintManagerService(env); register_android_server_SerialService(env); register_android_server_InputManager(env); register_android_server_LightsService(env); register_android_server_UsbDeviceManager(env); Loading Loading
services/core/java/com/android/server/SerialService.java +19 −2 Original line number Diff line number Diff line Loading @@ -18,22 +18,30 @@ package com.android.server; import android.annotation.EnforcePermission; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.hardware.ISerialManager; import android.hardware.SerialManagerInternal; import android.os.ParcelFileDescriptor; import android.os.PermissionEnforcer; import android.system.ErrnoException; import android.system.Os; import android.system.OsConstants; import android.util.Slog; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.Preconditions; import java.io.File; import java.io.FileDescriptor; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.function.Supplier; @android.ravenwood.annotation.RavenwoodKeepWholeClass public class SerialService extends ISerialManager.Stub { private static final String TAG = "SerialService"; private final Context mContext; @GuardedBy("mSerialPorts") Loading @@ -50,7 +58,7 @@ public class SerialService extends ISerialManager.Stub { final String[] serialPorts = getSerialPorts(context); for (String serialPort : serialPorts) { mSerialPorts.put(serialPort, () -> { return native_open(serialPort); return tryOpen(serialPort); }); } } Loading Loading @@ -135,5 +143,14 @@ public class SerialService extends ISerialManager.Stub { } }; private native ParcelFileDescriptor native_open(String path); private static @Nullable ParcelFileDescriptor tryOpen(String path) { try { FileDescriptor fd = Os.open(path, OsConstants.O_RDWR | OsConstants.O_NOCTTY, 0); return new ParcelFileDescriptor(fd); } catch (ErrnoException e) { Slog.e(TAG, "Could not open: " + path, e); // We return null to preserve API semantics from earlier implementation variants. return null; } } }
services/core/jni/Android.bp +0 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,6 @@ cc_library_static { "com_android_server_powerstats_PowerStatsService.cpp", "com_android_server_power_stats_CpuPowerStatsCollector.cpp", "com_android_server_hint_HintManagerService.cpp", "com_android_server_SerialService.cpp", "com_android_server_soundtrigger_middleware_AudioSessionProviderImpl.cpp", "com_android_server_soundtrigger_middleware_ExternalCaptureStateTracker.cpp", "com_android_server_stats_pull_StatsPullAtomService.cpp", Loading
services/core/jni/com_android_server_SerialService.cppdeleted 100644 → 0 +0 −83 Original line number Diff line number Diff line /* * 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. */ #define LOG_TAG "SerialServiceJNI" #include "utils/Log.h" #include "jni.h" #include <nativehelper/JNIPlatformHelp.h> #include "android_runtime/AndroidRuntime.h" #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> namespace android { static struct parcel_file_descriptor_offsets_t { jclass mClass; jmethodID mConstructor; } gParcelFileDescriptorOffsets; static jobject android_server_SerialService_open(JNIEnv *env, jobject /* thiz */, jstring path) { const char *pathStr = env->GetStringUTFChars(path, NULL); int fd = open(pathStr, O_RDWR | O_NOCTTY); if (fd < 0) { ALOGE("could not open %s", pathStr); env->ReleaseStringUTFChars(path, pathStr); return NULL; } env->ReleaseStringUTFChars(path, pathStr); jobject fileDescriptor = jniCreateFileDescriptor(env, fd); if (fileDescriptor == NULL) { close(fd); return NULL; } return env->NewObject(gParcelFileDescriptorOffsets.mClass, gParcelFileDescriptorOffsets.mConstructor, fileDescriptor); } static const JNINativeMethod method_table[] = { { "native_open", "(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;", (void*)android_server_SerialService_open }, }; int register_android_server_SerialService(JNIEnv *env) { jclass clazz = env->FindClass("com/android/server/SerialService"); if (clazz == NULL) { ALOGE("Can't find com/android/server/SerialService"); return -1; } clazz = env->FindClass("android/os/ParcelFileDescriptor"); LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.ParcelFileDescriptor"); gParcelFileDescriptorOffsets.mClass = (jclass) env->NewGlobalRef(clazz); gParcelFileDescriptorOffsets.mConstructor = env->GetMethodID(clazz, "<init>", "(Ljava/io/FileDescriptor;)V"); LOG_FATAL_IF(gParcelFileDescriptorOffsets.mConstructor == NULL, "Unable to find constructor for android.os.ParcelFileDescriptor"); return jniRegisterNativeMethods(env, "com/android/server/SerialService", method_table, NELEM(method_table)); } };
services/core/jni/onload.cpp +0 −2 Original line number Diff line number Diff line Loading @@ -33,7 +33,6 @@ int register_android_server_PowerStatsService(JNIEnv* env); int register_android_server_power_stats_CpuPowerStatsCollector(JNIEnv* env); int register_android_server_HintManagerService(JNIEnv* env); int register_android_server_storage_AppFuse(JNIEnv* env); int register_android_server_SerialService(JNIEnv* env); int register_android_server_SystemServer(JNIEnv* env); int register_android_server_UsbAlsaJackDetector(JNIEnv* env); int register_android_server_UsbAlsaMidiDevice(JNIEnv* env); Loading Loading @@ -93,7 +92,6 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */) register_android_server_PowerStatsService(env); register_android_server_power_stats_CpuPowerStatsCollector(env); register_android_server_HintManagerService(env); register_android_server_SerialService(env); register_android_server_InputManager(env); register_android_server_LightsService(env); register_android_server_UsbDeviceManager(env); Loading