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