android 類比IR(續二)---架構

來源:互聯網
上載者:User

架構中的實現很簡單,且千篇一律,這裡直接給出patch內容。


Index: frameworks/base/Android.mk===================================================================--- frameworks/base/Android.mk(revision 5203)+++ frameworks/base/Android.mk(working copy)@@ -120,6 +120,7 @@ core/java/android/hardware/display/IDisplayManagerCallback.aidl \ core/java/android/hardware/input/IInputManager.aidl \ core/java/android/hardware/input/IInputDevicesChangedListener.aidl \+core/java/android/hardware/output/IIrSendManager.aidl \ core/java/android/hardware/usb/IUsbManager.aidl \ core/java/android/net/IConnectivityManager.aidl \ core/java/android/net/INetworkManagementEventObserver.aidl \Index: frameworks/base/core/java/android/app/ContextImpl.java===================================================================--- frameworks/base/core/java/android/app/ContextImpl.java(revision 5203)+++ frameworks/base/core/java/android/app/ContextImpl.java(working copy)@@ -49,6 +49,8 @@ import android.hardware.ISerialManager; import android.hardware.SensorManager; import android.hardware.SerialManager;+import android.hardware.output.IrSendManager;+import android.hardware.output.IIrSendManager; import android.hardware.SystemSensorManager; import android.hardware.display.DisplayManager; import android.hardware.input.IInputManager;@@ -497,6 +499,14 @@                     return new SerialManager(ctx, ISerialManager.Stub.asInterface(b));                 }}); +//yanxi for soniq irout++        registerService(IRSEND_SERVICE, new ServiceFetcher() {+                public Object createService(ContextImpl ctx) {+                    IBinder b = ServiceManager.getService(IRSEND_SERVICE);+                    return new IrSendManager(ctx, IIrSendManager.Stub.asInterface(b));+                }});+         registerService(VIBRATOR_SERVICE, new ServiceFetcher() {                 public Object createService(ContextImpl ctx) {                     return new SystemVibrator();Index: frameworks/base/core/java/android/content/Context.java===================================================================--- frameworks/base/core/java/android/content/Context.java(revision 5203)+++ frameworks/base/core/java/android/content/Context.java(working copy)@@ -2207,6 +2207,19 @@      /**      * Use with {@link #getSystemService} to retrieve a {@link+    /**+     * Use with {@link #getSystemService} to retrieve a {@link+     * android.hardware.IrSendManager} for access to IRSEND_SERVICE.+     *+     * @see #getSystemService+     * @see  android.hardware.output.IrSendManager+     *+     * @hide+     */+    public static final String IRSEND_SERVICE = "irsend";++/**+     * Use with {@link #getSystemService} to retrieve a {@link      * android.hardware.SerialManager} for access to serial ports.      *      * @see #getSystemService@@ -2215,7 +2228,6 @@      * @hide      */     public static final String SERIAL_SERVICE = "serial";-     /**      * Use with {@link #getSystemService} to retrieve a      * {@link android.hardware.input.InputManager} for interacting with input devices.Index: frameworks/base/core/java/android/hardware/output/IIrSendManager.aidl===================================================================--- frameworks/base/core/java/android/hardware/output/IIrSendManager.aidl(revision 0)+++ frameworks/base/core/java/android/hardware/output/IIrSendManager.aidl(working copy)@@ -0,0 +1,24 @@+/*+ * 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.+ */++package android.hardware.output;+++/** @hide */+interface IIrSendManager+{+boolean SendIR(int head, int scancode, boolean Outreverse);+}Index: frameworks/base/core/java/android/hardware/output/IrSendManager.java===================================================================--- frameworks/base/core/java/android/hardware/output/IrSendManager.java(revision 0)+++ frameworks/base/core/java/android/hardware/output/IrSendManager.java(working copy)@@ -0,0 +1,42 @@+/*+ * Copyright (C) 2014 siviton msd6369+ * yanxi 20140125 for soniq ir out function+ */+++package android.hardware.output;++import android.app.PendingIntent;+import android.content.Context;+import android.os.Bundle;+import android.os.ParcelFileDescriptor;+import android.os.RemoteException;+import android.os.SystemProperties;+import android.util.Log;++import java.io.IOException;+import java.util.HashMap;++/**+ * @hide+ */+public class IrSendManager {+    private static final String TAG = "IrSendManager";++    private final Context mContext;+    private final IIrSendManager mService;++    /**+     * {@hide}+     */+    public IrSendManager(Context context, IIrSendManager service) {+        mContext = context;+        mService = service;+Log.d(TAG,"IrSendManager");+    }++public boolean SendIR(int head, int scancode, boolean Outreverse) throws android.os.RemoteException{+Log.d(TAG,"scancode:"+scancode);+return mService.SendIR(head, scancode, Outreverse);+}+}Index: frameworks/base/services/java/com/android/server/IrSendService.java===================================================================--- frameworks/base/services/java/com/android/server/IrSendService.java(revision 0)+++ frameworks/base/services/java/com/android/server/IrSendService.java(working copy)@@ -0,0 +1,45 @@+/*+ * Copyright (C) 2014 siviton msd6369+ * yanxi 20140125 for soniq ir out function+ */++package com.android.server;++import android.content.Context;+import android.hardware.output.IIrSendManager;+import android.util.Log;++import java.io.File;+import java.util.ArrayList;++public class IrSendService extends IIrSendManager.Stub {+    private static final String TAG = "IrSendManager";++    private final Context mContext;+    private int mIrSendFd = -1;++    public IrSendService(Context context) {+        mContext = context;+if(mIrSendFd == -1){+        mIrSendFd = native_open();+Log.d(TAG, "mIrSendFd:"+mIrSendFd);+}else+Log.d(TAG, "mIrSendFd1:"+mIrSendFd);++    }++public boolean SendIR(int head, int scancode, boolean Outreverse){+if(mIrSendFd > 0)+{+return native_irsend(head, scancode, Outreverse);+}+else {+return false;+}+}++    private native static int native_open();+private native static boolean native_close();+private native static boolean native_irsend(int head, int scancode, boolean Outreverse);++}Index: frameworks/base/services/java/com/android/server/SystemServer.java===================================================================--- frameworks/base/services/java/com/android/server/SystemServer.java(revision 5203)+++ frameworks/base/services/java/com/android/server/SystemServer.java(working copy)@@ -156,6 +156,7 @@         // MStar Android Patch End         UsbService usb = null;         SerialService serial = null;+IrSendService IrSend = null;//yanxi 0125         TwilightService twilight = null;         UiModeManagerService uiMode = null;         RecognitionManagerService recognition = null;@@ -735,7 +736,18 @@                 Slog.e(TAG, "Failure starting SerialService", e);             } +//yanxi for soniq irout start+             try {+                Slog.i(TAG, "IrSend Service");+                IrSend = new IrSendService(context);+                ServiceManager.addService(Context.IRSEND_SERVICE, IrSend);+            } catch (Throwable e) {+                Slog.e(TAG, "Failure starting IrSend Service", e);+            }+            +//yanxi end+            try {                 Slog.i(TAG, "Twilight Service");                 twilight = new TwilightService(context);             } catch (Throwable e) {Index: frameworks/base/services/jni/Android.mk===================================================================--- frameworks/base/services/jni/Android.mk(revision 5203)+++ frameworks/base/services/jni/Android.mk(working copy)@@ -16,6 +16,7 @@     com_android_server_VibratorService.cpp \     com_android_server_location_GpsLocationProvider.cpp \     com_android_server_connectivity_Vpn.cpp \+    com_android_server_IrSend.cpp \     onload.cpp  # MStar Android Patch BeginIndex: frameworks/base/services/jni/com_android_server_IrSend.cpp===================================================================--- frameworks/base/services/jni/com_android_server_IrSend.cpp(revision 0)+++ frameworks/base/services/jni/com_android_server_IrSend.cpp(working copy)@@ -0,0 +1,101 @@+/*+ * Copyright (C) 2014 siviton msd6369+ * yanxi 20140125 for soniq ir out function+ */++#define LOG_TAG "IRSENDJNI"++#include "utils/Log.h"+#include "JNIHelp.h"+#include "android_runtime/AndroidRuntime.h"+#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include  ++namespace android{++static int uIrSend_fd = -1;+//static jfieldID field_context;+struct IR_CODE+{+    unsigned short uHead;+    unsigned char uScancode;+unsigned char bOutreverse;+};+typedef struct IR_CODE IR_CODE_t;++/*+ * Class:     android_server_IrSend_open+ * Method:    open+ * Signature: ()Z+ */+static jint android_server_IrSend_open(JNIEnv *evn, jclass thiz)+{+    // Open the input device+    uIrSend_fd = open("/dev/Mstar-gpio", O_WRONLY | O_NDELAY);+    if (uIrSend_fd == -1) {+        ALOGE("android_server_IrSend_open uIrSend_fd:%d",uIrSend_fd);+        return 0;+    }+    return uIrSend_fd;+}++/*+ * Class:     android_server_IrSend_close+ * Method:    close+ * Signature: ()Z+ */+static jboolean android_server_IrSend_close(JNIEnv *env, jclass thiz)+{ +    close(uIrSend_fd);+  +  return 1;+  +}++/*+ * Class:     android_server_IrSend_sendir+ * Method:    sendir+ * Signature: (CC)Z+ */+static jboolean android_server_IrSend_sendir(JNIEnv *env, jclass thiz, jint head, jint scancode, jboolean Outreverse)+{+IR_CODE_t mIR_CODE_t;+mIR_CODE_t.uHead = (unsigned short)head;+mIR_CODE_t.uScancode = (unsigned char)scancode;+mIR_CODE_t.bOutreverse = (unsigned char)Outreverse;+//ioctl(uIrSend_fd,_IOW('g', 9, IR_CODE_t),mIR_CODE_t);+write(uIrSend_fd, &mIR_CODE_t, sizeof(IR_CODE_t));+return 1;+}++static JNINativeMethod method_table[] = {+    {"native_open",             "()I",(void *)android_server_IrSend_open},+    {"native_close",            "()Z",  (void *)android_server_IrSend_close},+    {"native_irsend",       "(IIZ)Z",  (void *)android_server_IrSend_sendir},+};++int register_android_server_IrSend(JNIEnv *env)+{+    jclass clazz = env->FindClass("com/android/server/IrSendService");+    if (clazz == NULL) {+        ALOGE("Can't find com/android/server/IrSendService");+        return -1;+    }++    return jniRegisterNativeMethods(env, "com/android/server/IrSendService",+            method_table, NELEM(method_table));+}+};Index: frameworks/base/services/jni/onload.cpp===================================================================--- frameworks/base/services/jni/onload.cpp(revision 5203)+++ frameworks/base/services/jni/onload.cpp(working copy)@@ -34,6 +34,7 @@ int register_android_server_SystemServer(JNIEnv* env); int register_android_server_location_GpsLocationProvider(JNIEnv* env); int register_android_server_connectivity_Vpn(JNIEnv* env);+int register_android_server_IrSend(JNIEnv *env);//yanxi 140125 };  using namespace android;@@ -51,6 +52,7 @@      register_android_server_PowerManagerService(env);     register_android_server_SerialService(env);+    register_android_server_IrSend(env);     register_android_server_InputApplicationHandle(env);     register_android_server_InputWindowHandle(env);     register_android_server_InputManager(env);


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.