1 /* 2 * Copyright (C) 2017 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 #ifndef ANDROID_HARDWARE_BROADCASTRADIO_V1_1_UTILS_H 17 #define ANDROID_HARDWARE_BROADCASTRADIO_V1_1_UTILS_H 18 19 #include <android/hardware/broadcastradio/1.1/types.h> 20 #include <chrono> 21 #include <queue> 22 #include <thread> 23 24 namespace android { 25 namespace hardware { 26 namespace broadcastradio { 27 namespace V1_1 { 28 namespace utils { 29 30 // TODO(b/64115813): move it out from frameworks/base/services/core/jni/BroadcastRadio/types.h 31 enum class HalRevision : uint32_t { 32 V1_0 = 1, 33 V1_1, 34 }; 35 36 /** 37 * Checks, if {@code pointer} tunes to {@channel}. 38 * 39 * For example, having a channel {AMFM_FREQUENCY = 103.3}: 40 * - selector {AMFM_FREQUENCY = 103.3, HD_SUBCHANNEL = 0} can tune to this channel; 41 * - selector {AMFM_FREQUENCY = 103.3, HD_SUBCHANNEL = 1} can't. 42 * 43 * @param pointer selector we're trying to match against channel. 44 * @param channel existing channel. 45 */ 46 bool tunesTo(const ProgramSelector& pointer, const ProgramSelector& channel); 47 48 ProgramType getType(const ProgramSelector& sel); 49 bool isAmFm(const ProgramType type); 50 51 bool isAm(const V1_0::Band band); 52 bool isFm(const V1_0::Band band); 53 54 bool hasId(const ProgramSelector& sel, const IdentifierType type); 55 56 /** 57 * Returns ID (either primary or secondary) for a given program selector. 58 * 59 * If the selector does not contain given type, returns 0 and emits a warning. 60 */ 61 uint64_t getId(const ProgramSelector& sel, const IdentifierType type); 62 63 /** 64 * Returns ID (either primary or secondary) for a given program selector. 65 * 66 * If the selector does not contain given type, returns default value. 67 */ 68 uint64_t getId(const ProgramSelector& sel, const IdentifierType type, uint64_t defval); 69 70 ProgramSelector make_selector(V1_0::Band band, uint32_t channel, uint32_t subChannel = 0); 71 72 bool getLegacyChannel(const ProgramSelector& sel, uint32_t* channelOut, uint32_t* subChannelOut); 73 74 bool isDigital(const ProgramSelector& sel); 75 76 } // namespace utils 77 } // namespace V1_1 78 79 namespace V1_0 { 80 81 bool operator==(const BandConfig& l, const BandConfig& r); 82 83 } // namespace V1_0 84 85 } // namespace broadcastradio 86 } // namespace hardware 87 } // namespace android 88 89 #endif // ANDROID_HARDWARE_BROADCASTRADIO_V1_1_UTILS_H 90