18f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown/*
28f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * Copyright (C) 2013 The Android Open Source Project
38f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown *
48f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License");
58f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * you may not use this file except in compliance with the License.
68f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * You may obtain a copy of the License at
78f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown *
88f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown *      http://www.apache.org/licenses/LICENSE-2.0
98f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown *
108f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * Unless required by applicable law or agreed to in writing, software
118f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS,
128f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * See the License for the specific language governing permissions and
148f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * limitations under the License.
158f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown */
168f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown
178f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownpackage com.android.accessorydisplay.common;
188f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown
198f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport com.android.accessorydisplay.common.Transport;
208f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown
218f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport android.content.Context;
228f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport android.os.Looper;
238f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown
248f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport java.nio.ByteBuffer;
258f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown
268f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown/**
278f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * Base implementation of a service that communicates over a transport.
288f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * <p>
298f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * This object's interface is single-threaded.  It is only intended to be
308f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * accessed from the {@link Looper} thread on which the transport was created.
318f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * </p>
328f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown */
338f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownpublic abstract class Service implements Transport.Callback {
348f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    private final Context mContext;
358f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    private final Transport mTransport;
368f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    private final int mServiceId;
378f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown
388f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    public Service(Context context, Transport transport, int serviceId) {
398f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown        mContext = context;
408f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown        mTransport = transport;
418f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown        mServiceId = serviceId;
428f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    }
438f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown
448f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    public Context getContext() {
458f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown        return mContext;
468f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    }
478f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown
488f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    public int getServiceId() {
498f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown        return mServiceId;
508f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    }
518f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown
528f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    public Transport getTransport() {
538f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown        return mTransport;
548f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    }
558f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown
568f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    public Logger getLogger() {
578f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown        return mTransport.getLogger();
588f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    }
598f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown
608f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    public void start() {
618f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown        mTransport.registerService(mServiceId, this);
628f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    }
638f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown
648f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    public void stop() {
658f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown        mTransport.unregisterService(mServiceId);
668f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    }
678f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown
688f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    @Override
698f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    public void onMessageReceived(int service, int what, ByteBuffer content) {
708f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown    }
718f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown}
72