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
17package com.android.bluetooth.avrcp;
18
19import android.util.Log;
20
21import com.android.bluetooth.Utils;
22
23import java.nio.ByteBuffer;
24import java.nio.charset.Charset;
25import java.util.ArrayList;
26import java.util.Arrays;
27import java.util.HashMap;
28import 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
35final 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
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