Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cd0e839a authored by Nick Pelly's avatar Nick Pelly
Browse files

NFC: Move NFC service implementation out of system_server.



NFC service is now an application service in packages/apps/Nfc.

NFC service is registered through ServiceManager.addService(), and the proxy
object NfcAdapter obtains a handle to it through ServiceManager.getService().

**Important** Had to add new symbols AID_NFC / NFC_UID / android.uid.nfc and
modify service_manager.c, Process.java and PackageManagerService.java in order
to force the com.android.nfc process to take a fixed uid, so that it can use
ServiceManager.addService().

Most of the JNI has moved to packages/apps/Nfc/jni. However NdefRecord and
NdefMessage require some in-process native code, so android_com_NdefMessage.cpp
and android_com_NdefRecord.cpp stay in frameworks/base/core/jni. They link to
a very small library libnfc_ndef.so that implements NDEF message parsing. This
has been added to core.mk so all devices (even without NFC hardware) can work
with NDEF data.

Bug: 3041259
Bug: 3097445
Change-Id: If7f00cd8f2053acfc9319ca366d4a9c02bd396e6
Signed-off-by: default avatarNick Pelly <npelly@google.com>
parent dbb78f0e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ static struct {
    { AID_MEDIA, "media.audio_policy" },
    { AID_DRMIO, "drm.drmIOService" },
    { AID_DRM,   "drm.drmManager" },
    { AID_NFC,   "nfc" },
    { AID_RADIO, "radio.phone" },
    { AID_RADIO, "radio.sms" },
    { AID_RADIO, "radio.phonesubinfo" },
+0 −10
Original line number Diff line number Diff line
@@ -1591,16 +1591,6 @@ public abstract class Context {
    /** @hide */
    public static final String SIP_SERVICE = "sip";

    /**
     * Use with {@link #getSystemService} to retrieve an
     * {@link com.trustedlogic.trustednfc.android.INfcManager.INfcManager} for
     * accessing NFC methods.
     *
     * @see #getSystemService
     * @hide
     */
    public static final String NFC_SERVICE = "nfc";

    /**
     * Determine whether the given permission is allowed for a particular
     * process and user ID running in the system.
+3 −3
Original line number Diff line number Diff line
@@ -166,10 +166,10 @@ public final class NfcAdapter {
            }
            sIsInitialized = true;

            // TODO(npelly): check which method to use here to get the service
            IBinder b = ServiceManager.getService(Context.NFC_SERVICE);
            IBinder b = ServiceManager.getService("nfc");
            if (b == null) {
                return null;  // This device does not have NFC
                Log.d(TAG, "NFC Service not available");
                return null;
            }

            sAdapter = new NfcAdapter(INfcAdapter.Stub.asInterface(b));
+6 −0
Original line number Diff line number Diff line
@@ -91,6 +91,12 @@ public class Process {
     */
    public static final int SDCARD_RW_GID = 1015;

    /**
     * Defines the UID/GID for the NFC service process.
     * @hide
     */
    public static final int NFC_UID = 1022;

    /**
     * Defines the start of a range of UIDs (and GIDs), going from this
     * number to {@link #LAST_APPLICATION_UID} that are reserved for assigning
+0 −82
Original line number Diff line number Diff line
/*
 * Copyright (C) 2010 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.
 */

/**
 * File            : NativeLlcpServerSocket.java
 * Original-Author : Trusted Logic S.A. (Sylvain Fonteneau)
 * Created         : 18-02-2010
 */

package com.trustedlogic.trustednfc.android.internal;

/**
 * LlcpServiceSocket represents a LLCP Service to be used in a
 * Connection-oriented communication
 * {@hide}
 */

public class NativeLlcpServiceSocket {

    private int mHandle;

    private int mLocalMiu;

    private int mLocalRw;

    private int mLocalLinearBufferLength;

    private int mSap;

    private int mTimeout;

    private String mServiceName;

    public NativeLlcpServiceSocket(){

    }

    public NativeLlcpServiceSocket(String serviceName){
        mServiceName = serviceName;
    }

    public native NativeLlcpSocket doAccept(int timeout, int miu, int rw, int linearBufferLength);

    public native boolean doClose();

    public int getHandle(){
        return mHandle;
    }

    public void setAcceptTimeout(int timeout){
        mTimeout = timeout;
    }

    public int getAcceptTimeout(){
        return mTimeout;
    }

    public int getRw(){
        return mLocalRw;
    }

    public int getMiu(){
        return mLocalMiu;
    }

    public int getLinearBufferLength(){
        return mLocalLinearBufferLength;
    }
}
Loading