1dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent/* 2dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent * Copyright (C) 2015 The Android Open Source Project 3dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent * 4dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 5dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent * you may not use this file except in compliance with the License. 6dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent * You may obtain a copy of the License at 7dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent * 8dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent * http://www.apache.org/licenses/LICENSE-2.0 9dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent * 10dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent * Unless required by applicable law or agreed to in writing, software 11dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 12dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent * See the License for the specific language governing permissions and 14dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent * limitations under the License. 15dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent */ 16dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 17dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent#ifndef ANDROID_HARDWARE_RADIO_H 18dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent#define ANDROID_HARDWARE_RADIO_H 19dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 20dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent#include <binder/IBinder.h> 21dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent#include <utils/threads.h> 22dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent#include <radio/RadioCallback.h> 23dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent#include <radio/IRadio.h> 24dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent#include <radio/IRadioService.h> 25dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent#include <radio/IRadioClient.h> 26dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent#include <system/radio.h> 27dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 28dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurentnamespace android { 29dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 30dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurentclass MemoryDealer; 31dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 32dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurentclass Radio : public BnRadioClient, 33dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent public IBinder::DeathRecipient 34dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent{ 35dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurentpublic: 36dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 37dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent virtual ~Radio(); 38dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 39dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent static status_t listModules(struct radio_properties *properties, 40dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent uint32_t *numModules); 41dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent static sp<Radio> attach(radio_handle_t handle, 42dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent const struct radio_band_config *config, 43dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent bool withAudio, 44dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent const sp<RadioCallback>& callback); 45dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 46dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 47dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent void detach(); 48dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 49dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent status_t setConfiguration(const struct radio_band_config *config); 50dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 51dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent status_t getConfiguration(struct radio_band_config *config); 52dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 53dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent status_t setMute(bool mute); 54dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 55dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent status_t getMute(bool *mute); 56dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 57dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent status_t step(radio_direction_t direction, bool skipSubChannel); 58dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 59dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent status_t scan(radio_direction_t direction, bool skipSubChannel); 60dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 61dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent status_t tune(unsigned int channel, unsigned int subChannel); 62dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 63dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent status_t cancel(); 64dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 65dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent status_t getProgramInformation(struct radio_program_info *info); 66dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 67dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent status_t hasControl(bool *hasControl); 68dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 69dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent // BpRadioClient 70dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent virtual void onEvent(const sp<IMemory>& eventMemory); 71dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 72dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent //IBinder::DeathRecipient 73dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent virtual void binderDied(const wp<IBinder>& who); 74dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 75dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurentprivate: 76dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent Radio(radio_handle_t handle, 77dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent const sp<RadioCallback>&); 78dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent static const sp<IRadioService>& getRadioService(); 79dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 80dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent Mutex mLock; 81dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent sp<IRadio> mIRadio; 82dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent const radio_handle_t mHandle; 83dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent sp<RadioCallback> mCallback; 84dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent}; 85dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 86dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent}; // namespace android 87dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent 88dedc86dcb6d63e93518c8974c077e50912d15e9cEric Laurent#endif //ANDROID_HARDWARE_RADIO_H 89