1 /* 2 * Copyright (C) 2015 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 17 package com.android.bluetooth.avrcp; 18 19 import android.util.Log; 20 21 import com.android.bluetooth.Utils; 22 23 import java.nio.ByteBuffer; 24 import java.nio.charset.Charset; 25 import java.util.ArrayList; 26 import java.util.Arrays; 27 import java.util.HashMap; 28 import java.util.List; 29 30 /** 31 * Provides helper classes used by other AvrcpControllerClasses. 32 * Don't change this file without changing HAL Constants in bt_rc.h 33 */ 34 35 final class AvrcpControllerConstants { 36 37 /* 38 * Debug flags 39 */ 40 public static final boolean DBG = true; 41 public static final boolean VDBG = true; 42 /* 43 * Whether to push broadcast updates about metadata. 44 */ 45 public static final int START_METADATA_BROADCASTS = 0; 46 public static final int STOP_METADATA_BROADCASTS = 1; 47 48 /* 49 * Scopes of operation 50 */ 51 public static final int AVRCP_SCOPE_NOW_PLAYING = 0; 52 public static final int AVRCP_SCOPE_VFS = 1; 53 /* 54 * Remote features 55 */ 56 public static final byte BTRC_FEAT_NONE = 0; 57 public static final byte BTRC_FEAT_METADATA = 1; 58 public static final byte BTRC_FEAT_ABSOLUTE_VOLUME = 2; 59 public static final byte BTRC_FEAT_BROWSE = 4; 60 61 /* 62 *Element Id Values for GetMetaData 63 */ 64 public static final int MEDIA_ATTRIBUTE_TITLE = 0x01; 65 public static final int MEDIA_ATTRIBUTE_ARTIST_NAME = 0x02; 66 public static final int MEDIA_ATTRIBUTE_ALBUM_NAME = 0x03; 67 public static final int MEDIA_ATTRIBUTE_TRACK_NUMBER = 0x04; 68 public static final int MEDIA_ATTRIBUTE_TOTAL_TRACK_NUMBER = 0x05; 69 public static final int MEDIA_ATTRIBUTE_GENRE = 0x06; 70 public static final int MEDIA_ATTRIBUTE_PLAYING_TIME = 0x07; 71 72 /* 73 * Default values for each of the items 74 */ 75 public static final int TRACK_NUM_INVALID = 0xFF; 76 public static final int STATUS_INVALID = 0xFF; 77 public static final String TITLE_INVALID = "NOT_SUPPORTED"; 78 public static final String ARTIST_NAME_INVALID = "NOT_SUPPORTED"; 79 public static final String ALBUM_NAME_INVALID = "NOT_SUPPORTED"; 80 public static final int TOTAL_TRACKS_INVALID = 0xFFFFFFFF; 81 public static final String GENRE_INVALID = "NOT_SUPPORTED"; 82 public static final int PLAYING_TIME_INVALID = 0xFF; 83 public static final int TOTAL_TRACK_TIME_INVALID = 0xFF; 84 public static final String REPEAT_STATUS_INVALID = "NOT_SUPPORTED"; 85 public static final String SHUFFLE_STATUS_INVALID = "NOT_SUPPORTED"; 86 public static final String SCAN_STATUS_INVALID = "NOT_SUPPORTED"; 87 public static final String EQUALIZER_STATUS_INVALID = "NOT_SUPPORTED"; 88 public static final String BATTERY_STATUS_INVALID = "NOT_SUPPORTED"; 89 public static final String SYSTEM_STATUS_INVALID = "NOT_SUPPORTED"; 90 91 /* 92 * Values for SetPlayerApplicationSettings 93 */ 94 public static final byte ATTRIB_EQUALIZER_STATUS = 0x01; 95 public static final byte ATTRIB_REPEAT_STATUS = 0x02; 96 public static final byte ATTRIB_SHUFFLE_STATUS = 0x03; 97 public static final byte ATTRIB_SCAN_STATUS = 0x04; 98 99 public static final byte EQUALIZER_STATUS_OFF = 0x01; 100 public static final byte EQUALIZER_STATUS_ON = 0x02; 101 102 public static final byte REPEAT_STATUS_OFF = 0x01; 103 public static final byte REPEAT_STATUS_SINGLE_TRACK_REPEAT = 0x02; 104 public static final byte REPEAT_STATUS_ALL_TRACK_REPEAT = 0x03; 105 public static final byte REPEAT_STATUS_GROUP_REPEAT = 0x04; 106 107 public static final byte SHUFFLE_STATUS_OFF = 0x01; 108 public static final byte SHUFFLE_STATUS_ALL_TRACK_SHUFFLE = 0x02; 109 public static final byte SHUFFLE_STATUS_GROUP_SHUFFLE = 0x03; 110 111 public static final byte SCAN_STATUS_OFF = 0x01; 112 public static final byte SCAN_STATUS_ALL_TRACK_SCAN = 0x02; 113 public static final byte SCAN_STATUS_GROUP_SCAN = 0x03; 114 115 /* 116 * Play State Values 117 */ 118 public static final int PLAY_STATUS_STOPPED = 0x00; 119 public static final int PLAY_STATUS_PLAYING = 0x01; 120 public static final int PLAY_STATUS_PAUSED = 0x02; 121 public static final int PLAY_STATUS_FWD_SEEK = 0x03; 122 public static final int PLAY_STATUS_REV_SEEK = 0x04; 123 public static final int PLAY_STATUS_ERROR = 0xFF; 124 /* 125 * System Status 126 */ 127 public static final int SYSTEM_POWER_ON = 0x00; 128 public static final int SYSTEM_POWER_OFF = 0x01; 129 public static final int SYSTEM_UNPLUGGED = 0x02; 130 public static final int SYSTEM_STATUS_UNDEFINED = 0xFF; 131 /* 132 * Battery Status 133 */ 134 public static final int BATT_POWER_NORMAL = 0x00; 135 public static final int BATT_POWER_WARNING = 0x01; 136 public static final int BATT_POWER_CRITICAL = 0x02; 137 public static final int BATT_POWER_EXTERNAL = 0x03; 138 public static final int BATT_POWER_FULL_CHARGE = 0x04; 139 public static final int BATT_POWER_UNDEFINED = 0xFF; 140 141 public static final int NOTIFICATION_RSP_TYPE_INTERIM = 0x00; 142 public static final int NOTIFICATION_RSP_TYPE_CHANGED = 0x01; 143 /* 144 * Base value for absolute volume 145 */ 146 static final int ABS_VOL_BASE = 127; 147 148 public static final int MESSAGE_SEND_PASS_THROUGH_CMD = 1; 149 public static final int MESSAGE_SEND_SET_CURRENT_PLAYER_APPLICATION_SETTINGS = 2; 150 public static final int MESSAGE_SEND_GROUP_NAVIGATION_CMD = 3; 151 152 public static final int MESSAGE_PROCESS_SUPPORTED_PLAYER_APP_SETTING = 101; 153 public static final int MESSAGE_PROCESS_PLAYER_APP_SETTING_CHANGED = 102; 154 public static final int MESSAGE_PROCESS_SET_ABS_VOL_CMD = 103; 155 public static final int MESSAGE_PROCESS_REGISTER_ABS_VOL_NOTIFICATION = 104; 156 public static final int MESSAGE_PROCESS_TRACK_CHANGED = 105; 157 public static final int MESSAGE_PROCESS_PLAY_POS_CHANGED = 106; 158 public static final int MESSAGE_PROCESS_PLAY_STATUS_CHANGED = 107; 159 160 public static final int MESSAGE_PROCESS_RC_FEATURES = 1100; 161 public static final int MESSAGE_PROCESS_CONNECTION_CHANGE = 1200; 162 163 public static final int MESSAGE_STOP_METADATA_BROADCASTS = 201; 164 public static final int MESSAGE_START_METADATA_BROADCASTS = 202; 165 166 dumpMessageString(int message)167 public static String dumpMessageString(int message) 168 { 169 String str = "UNKNOWN"; 170 switch(message) 171 { 172 case MESSAGE_SEND_PASS_THROUGH_CMD: 173 str = "REQ_PASS_THROUGH_CMD"; 174 break; 175 case MESSAGE_SEND_SET_CURRENT_PLAYER_APPLICATION_SETTINGS: 176 str = "REQ_SET_PLAYER_APP_SETTING"; 177 break; 178 case MESSAGE_SEND_GROUP_NAVIGATION_CMD: 179 str = "REQ_GRP_NAV_CMD"; 180 break; 181 case MESSAGE_PROCESS_SUPPORTED_PLAYER_APP_SETTING: 182 str = "CB_SUPPORTED_PLAYER_APP_SETTING"; 183 break; 184 case MESSAGE_PROCESS_PLAYER_APP_SETTING_CHANGED: 185 str = "CB_PLAYER_APP_SETTING_CHANGED"; 186 break; 187 case MESSAGE_PROCESS_SET_ABS_VOL_CMD: 188 str = "CB_SET_ABS_VOL_CMD"; 189 break; 190 case MESSAGE_PROCESS_REGISTER_ABS_VOL_NOTIFICATION: 191 str = "CB_REGISTER_ABS_VOL"; 192 break; 193 case MESSAGE_PROCESS_TRACK_CHANGED: 194 str = "CB_TRACK_CHANGED"; 195 break; 196 case MESSAGE_PROCESS_PLAY_POS_CHANGED: 197 str = "CB_PLAY_POS_CHANGED"; 198 break; 199 case MESSAGE_PROCESS_PLAY_STATUS_CHANGED: 200 str = "CB_PLAY_STATUS_CHANGED"; 201 break; 202 case MESSAGE_PROCESS_RC_FEATURES: 203 str = "CB_RC_FEATURES"; 204 break; 205 case MESSAGE_PROCESS_CONNECTION_CHANGE: 206 str = "CB_CONN_CHANGED"; 207 break; 208 default: 209 str = Integer.toString(message); 210 break; 211 } 212 return str; 213 } 214 215 /* Absolute Volume Notification State */ 216 /* if we are in this state, we would send vol update to remote */ 217 public static final int SEND_VOLUME_CHANGE_RSP = 0; 218 /* if we are in this state, we would not send vol update to remote */ 219 public static final int DEFER_VOLUME_CHANGE_RSP = 1; 220 public static final int VOLUME_LABEL_UNDEFINED = 0xFF; 221 } 222