FM framework:
1、适配层调用的最外面接口是Radiomanager
frameworks/base/core/java/android/hardware/radio/RadioManager.java
frameworks/base/core/java/android/hardware/radio/TunerCallbackAdapter.java
下面是向上外层适配层回调的主要是三个接口, 都在TunerCallbackAdapter.java
onTuneFailed, onCurrentProgramInfoChanged, onProgramListUpdated
RadioManager.java→构造函数里获取radioservice
public RadioManager(@NonNull Context context) throws ServiceNotFoundException {
mService = IRadioService.Stub.asInterface(
ServiceManager.getServiceOrThrow(Context.RADIO_SERVICE));
}
frameworks/base/core/java/android/hardware/radio/RadioManager.java
打开tuner设备,并设置callback
public RadioTuner openTuner(int moduleId){
TunerCallbackAdapter halCallback = new TunerCallbackAdapter(callback, handler);
ITuner tuner = mService.openTuner(moduleId, config, withAudio, halCallback);
return new TunerAdapter(tuner, halCallback, config != null ? config.getType() : BAND_INVALID);
}
接下来在frameworks/base/core/java/android/hardware/radio/TunerAdapter.java里做接口调用,比如
scan, step, tune, startBackgroundScan(没用到)
在frameworks/base/core/java/android/hardware/radio/TunerCallbackAdapter.java接收回调
2、再往下, 是hal service的代码,分为hal和hal2
frameworks/base/services/core/java/com/android/server/broadcastradio
注意一下, hal1和hal2是而选一的
hal1会调用native函数, native函数是在frameworks/base/services/core/jni/BroadcastRadio, 但是android11并不走hal1,
所以也不通过native访问radio hal层
hal是直接通过IServiceManager manager = IServiceManager.getService();
frameworks/base/services/core/java/com/android/server/broadcastradio/BroadcastRadioService.java
public class Broad

本文详细解析了Android硬件广播Radio框架的结构,从RadioManager通过TunerCallbackAdapter回调接口,到HAL层的RadioModule和服务交互,展示了如何打开Tuner设备、设置回调并操作hal层。重点介绍了ProgramSelector和ProgramInfo结构,揭示了调用链中关键数据的传递过程。
最低0.47元/天 解锁文章
1539

被折叠的 条评论
为什么被折叠?



