Android FM 外部短天线支持(ez fm)

时间:2024-03-23 14:43:55

Android FM 外部播放功能(EZ FM),使用外部短天线搜台,默认FM是不支持外部功放播放功能的,因为硬件上需要FM天线低噪放大器的支持。

硬件原理

原理图:

Android FM 外部短天线支持(ez fm)

默认使用耳机当做天线。

如果硬件上支持天线低噪放大器,原理图:

Android FM 外部短天线支持(ez fm)

查找FM的代码,分析如何打开这个功能,因为在MTK平台只需要在projectconfig.mk中打开:MTK_FM_SHORT_ANTENNA_SUPPORT=yes就打开这个功能,在FM驱动中使能天线就可以了。

软件流程

展讯9820w配置方法肯定是不一样的,通过查找代码分析:

1、FM的APP使用到了FMPlay

Z:\project\hk811\idh.code\packages\apps\FMPlayer\src\com\thunderst\radio\FMPlay.java

Android FM 外部短天线支持(ez fm)


2、FM的APP使用到了FMplayService

Z:\project\hk811\idh.code\packages\apps\FMPlayer\src\com\thunderst\radio\FMplayService.java

Android FM 外部短天线支持(ez fm)

Android FM 外部短天线支持(ez fm)

检索ro.device.support.antenna


Android FM 外部短天线支持(ez fm)

Android FM 外部短天线支持(ez fm)

所以可以大概领悟到,ro.device.support.antenna貌似是支持短天线的配置。

检索其他项目有没有使用该功能的项目:


Android FM 外部短天线支持(ez fm)

仿照sp9820a_1c10_native.mk在sp9820w_6c10.mk增加ro.device.support.antenna=true

然后全部编译,下载开机,发现FM可以不插耳机打开,但是搜索不到电台,所以该功能已经是打开了的。下一步就是找到FM驱动在切换天线的位置增加是能操作。

在FMplayService.java中有切换天线的服务:

Android FM 外部短天线支持(ez fm)

继续寻找

Android FM 外部短天线支持(ez fm)

Android FM 外部短天线支持(ez fm)

3、framework 层

Z:\project\hk811\idh.code\frameworks\base\core\java\android\hardware\fm\FmManager.java

Android FM 外部短天线支持(ez fm)

Android FM 外部短天线支持(ez fm)


4、找到JNI层的代码。

frameworks/base/core/jni/fm/android_hardware_fm.cpp

Android FM 外部短天线支持(ez fm)

Android FM 外部短天线支持(ez fm)

Z:\project\hk811\idh.code\frameworks\base\core\jni\fm\KTFmImpl.cpp

Android FM 外部短天线支持(ez fm)

Android FM 外部短天线支持(ez fm)

Android FM 外部短天线支持(ez fm)

Z:\project\hk811\idh.code\device\sprd\scx35l\sp9820w_6c10\BoardConfig.mk


Android FM 外部短天线支持(ez fm)

5.HAL层代码:

Z:\project\hk811\idh.code\vendor\sprd\partner\trout\libfm\Android.mk

Android FM 外部短天线支持(ez fm)

Z:\project\hk811\idh.code\vendor\sprd\partner\trout\libfm\libfm_trout.c

Android FM 外部短天线支持(ez fm)

Android FM 外部短天线支持(ez fm)

Android FM 外部短天线支持(ez fm)

Android FM 外部短天线支持(ez fm)


6、下面进入内核层

Z:\project\hk811\idh.code\kernel\arch\arm\configs\sp9820w_6c10_defconfig


Android FM 外部短天线支持(ez fm)

查找dts对FM配置:

Android FM 外部短天线支持(ez fm)

在Z:\project\hk811\idh.code\kernel\drivers\media\radio\sprd2331\fmdrv_ops.c


Android FM 外部短天线支持(ez fm)

Android FM 外部短天线支持(ez fm)

在probe中申请gpio:


Android FM 外部短天线支持(ez fm)

测试成功可以控制天线使能,插拔耳机FM都可以播放正常。拔掉耳机FM搜索台正常。

可以同步查看串口log查看系统状态。