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