Home | History | Annotate | Download | only in broadcastradio-utils
      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