• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 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 #ifndef ANDROID_HARDWARE_RADIO_HAL_HIDL_H
18 #define ANDROID_HARDWARE_RADIO_HAL_HIDL_H
19 
20 #include <utils/RefBase.h>
21 #include <utils/threads.h>
22 #include "RadioInterface.h"
23 #include "TunerInterface.h"
24 #include "TunerCallbackInterface.h"
25 #include <android/hardware/broadcastradio/1.0/types.h>
26 #include <android/hardware/broadcastradio/1.0/IBroadcastRadio.h>
27 #include <android/hardware/broadcastradio/1.0/ITuner.h>
28 #include <android/hardware/broadcastradio/1.0/ITunerCallback.h>
29 
30 namespace android {
31 
32 using android::hardware::Return;
33 using android::hardware::broadcastradio::V1_0::Result;
34 using android::hardware::broadcastradio::V1_0::IBroadcastRadio;
35 using android::hardware::broadcastradio::V1_0::ITuner;
36 using android::hardware::broadcastradio::V1_0::ITunerCallback;
37 
38 using android::hardware::broadcastradio::V1_0::BandConfig;
39 using android::hardware::broadcastradio::V1_0::ProgramInfo;
40 using android::hardware::broadcastradio::V1_0::MetaData;
41 
42 class RadioHalHidl : public RadioInterface
43 {
44 public:
45                     RadioHalHidl(radio_class_t classId);
46 
47                     // RadioInterface
48         virtual int getProperties(radio_hal_properties_t *properties);
49         virtual int openTuner(const radio_hal_band_config_t *config,
50                               bool audio,
51                               sp<TunerCallbackInterface> callback,
52                               sp<TunerInterface>& tuner);
53         virtual int closeTuner(sp<TunerInterface>& tuner);
54 
55         class Tuner  : public TunerInterface, public virtual ITunerCallback
56         {
57         public:
58                         Tuner(sp<TunerCallbackInterface> callback, sp<RadioHalHidl> module);
59 
60                         // TunerInterface
61             virtual int setConfiguration(const radio_hal_band_config_t *config);
62             virtual int getConfiguration(radio_hal_band_config_t *config);
63             virtual int scan(radio_direction_t direction, bool skip_sub_channel);
64             virtual int step(radio_direction_t direction, bool skip_sub_channel);
65             virtual int tune(unsigned int channel, unsigned int sub_channel);
66             virtual int cancel();
67             virtual int getProgramInformation(radio_program_info_t *info);
68 
69                         // ITunerCallback
70             virtual Return<void> hardwareFailure();
71             virtual Return<void> configChange(Result result, const BandConfig& config);
72             virtual Return<void> tuneComplete(Result result, const ProgramInfo& info);
73             virtual Return<void> afSwitch(const ProgramInfo& info);
74             virtual Return<void> antennaStateChange(bool connected);
75             virtual Return<void> trafficAnnouncement(bool active);
76             virtual Return<void> emergencyAnnouncement(bool active);
77             virtual Return<void> newMetadata(uint32_t channel, uint32_t subChannel,
78                                          const ::android::hardware::hidl_vec<MetaData>& metadata);
79 
80             void setHalTuner(sp<ITuner>& halTuner);
getHalTuner()81             sp<ITuner> getHalTuner() { return mHalTuner; }
82 
83         private:
84             virtual          ~Tuner();
85 
86                     void     onCallback(radio_hal_event_t *halEvent) const;
87                     void     handleHwFailure();
88                     void     sendHwFailureEvent() const;
89 
90             sp<ITuner> mHalTuner;
91             const sp<TunerCallbackInterface> mCallback;
92             wp<RadioHalHidl> mParentModule;
93         };
94 
95         sp<IBroadcastRadio> getService();
96         void clearService();
97 
98 private:
99         virtual         ~RadioHalHidl();
100 
101                 radio_class_t mClassId;
102                 sp<IBroadcastRadio> mHalModule;
103 };
104 
105 } // namespace android
106 
107 #endif // ANDROID_HARDWARE_RADIO_HAL_HIDL_H
108