1 /* 2 * Copyright (C) 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.bluetooth.gatt; 17 18 import android.util.Log; 19 import java.util.ArrayList; 20 import java.util.Iterator; 21 import java.util.List; 22 import java.util.UUID; 23 24 class ServiceDeclaration { 25 private static final boolean DBG = GattServiceConfig.DBG; 26 private static final String TAG = GattServiceConfig.TAG_PREFIX + "ServiceDeclaration"; 27 28 public static final byte TYPE_UNDEFINED = 0; 29 public static final byte TYPE_SERVICE = 1; 30 public static final byte TYPE_CHARACTERISTIC = 2; 31 public static final byte TYPE_DESCRIPTOR = 3; 32 public static final byte TYPE_INCLUDED_SERVICE = 4; 33 34 class Entry { 35 byte type = TYPE_UNDEFINED; 36 UUID uuid = null; 37 int instance = 0; 38 int permissions = 0; 39 int properties = 0; 40 int serviceType = 0; 41 int serviceHandle = 0; 42 43 Entry(UUID uuid, int serviceType, int instance) { 44 this.type = TYPE_SERVICE; 45 this.uuid = uuid; 46 this.instance = instance; 47 this.serviceType = serviceType; 48 } 49 50 Entry(UUID uuid, int properties, int permissions, int instance) { 51 this.type = TYPE_CHARACTERISTIC; 52 this.uuid = uuid; 53 this.instance = instance; 54 this.permissions = permissions; 55 this.properties = properties; 56 } 57 58 Entry(UUID uuid, int permissions) { 59 this.type = TYPE_DESCRIPTOR; 60 this.uuid = uuid; 61 this.permissions = permissions; 62 } 63 } 64 65 List<Entry> mEntries = null; 66 int mNumHandles = 0; 67 68 ServiceDeclaration() { 69 mEntries = new ArrayList<Entry>(); 70 } 71 72 void addService(UUID uuid, int serviceType, int instance, int minHandles) { 73 mEntries.add(new Entry(uuid, serviceType, instance)); 74 if (minHandles == 0) { 75 ++mNumHandles; 76 } else { 77 mNumHandles = minHandles; 78 } 79 } 80 81 void addIncludedService(UUID uuid, int serviceType, int instance) { 82 Entry entry = new Entry(uuid, serviceType, instance); 83 entry.type = TYPE_INCLUDED_SERVICE; 84 mEntries.add(entry); 85 ++mNumHandles; 86 } 87 88 void addCharacteristic(UUID uuid, int properties, int permissions) { 89 mEntries.add(new Entry(uuid, properties, permissions, 0 /*instance*/)); 90 mNumHandles += 2; 91 } 92 93 void addDescriptor(UUID uuid, int permissions) { 94 mEntries.add(new Entry(uuid, permissions)); 95 ++mNumHandles; 96 } 97 98 Entry getNext() { 99 if (mEntries.isEmpty()) return null; 100 Entry entry = mEntries.get(0); 101 mEntries.remove(0); 102 return entry; 103 } 104 105 int getNumHandles() { 106 return mNumHandles; 107 } 108 } 109