fm java,Android FM模块学习之三 FM手动调频

news/2024/10/30 22:50:27/

前一章我们学习了FM的自动调频,接下来我们就看看FM手动调频是如何进行的。如果不清楚FM自动调频的过程,请打开超链接查看FM搜索频率流程。

首先来看一下流程图:

2.滑动刻度盘HorizontalNumberPicker控件在监听事件里使用方法valueToFrequency(newVal)

1.长按左右箭头居中的频率字符串,弹出FrequencyPickerDialog调频对话框确定调用tuneRadio(frequency)调频。

获取到频率

protected int valueToFrequency(int value) {

mFrequency = mPrefs.getLowerLimit() + value *

mPrefs.getFrequencyStepSize();

return mFrequency;

}

发送一个handler 回调一个tuneRadio(frequency)调频。

Runnable mRadioChangeFrequency = new Runnable(){

public void run() {

mUpdatePickerValue = false;

tuneRadio(mFrequency);

}

};

3.手动点击按钮左右箭头, 通过监听调用:

int frequency =FmSharedPreferences.getNextTuneFrequency();

int frequency =FmSharedPreferences.getPrevTuneFrequency();

tuneRadio(frequency);进行调频

getNextTuneFrequency()方法通过判断频率最大限制范围,后加200(刻度)

getPrevTuneFrequency()方法通过判断频率最小限制范围,后减200(刻度)

调频方法分析

private void tuneRadio(int frequency)

private void tuneRadio(int frequency){

/* Issue the tune command only if tuneCommand is already not active */

if((mService != null) && (mCommandActive != CMD_TUNE) && isFmOn()) {

boolean bStatus = false;

try {

bStatus = mService.tune(frequency);

if (bStatus) {

postTimeoutHandler(CMD_TUNE);

}else {

if (isFmOn()) {

mCommandFailed = CMD_TUNE;

Log.e(LOGTAG, "mService.tune failed");

showDialog(DIALOG_CMD_FAILED);

}

}mTunedStation.setName("");

mTunedStation.setPI(0);

mTunedStation.setPty(0);

updateStationInfoToUI();

}catch (RemoteException e) {

e.printStackTrace();

}

}else {

Log.e(LOGTAG, "Delayed Tune handler stopped");

}

}

通过回调引用类调用FMRadioService类的tune()方法进行调频

bStatus = mService.tune(frequency);

发送一个广播连接是否超时

postTimeoutHandler(CMD_TUNE);

设置调频名字,更新FMRadioUI界面信息

mTunedStation.setName("");

mTunedStation.setPI(0);

mTunedStation.setPty(0);

updateStationInfoToUI()

(通过IFMRadioSrevice.aidl通信机制onbind返回的类的引用调用FMRadioService中的调频方法)

FMRadioService中的tune方法

public boolean tune(int frequency)

public boolean tune(int frequency) {

boolean bCommandSent=false;

double doubleFrequency = frequency/1000.00;

Log.d(LOGTAG, "tuneRadio:  " + doubleFrequency);

if (mReceiver != null)

{

mReceiver.setStation(frequency);

bCommandSent = true;

}

return bCommandSent;

}

调用FMReceiver类的setStation方法调频

public boolean setStation (intfrequencyKHz)

public boolean setStation (int frequencyKHz) {

int ret;

mControl.setFreq(frequencyKHz);

ret = mControl.setStation(sFd);

if(ret < 0 )

{

return false;

}

else

{

return true;

}

}

调用FMRxControls类(FM读取控制台信息)设置频率

mControl.setFreq(frequencyKHz);

设置优化调频核心指定的频率

ret = mControl.setStation(sFd);

public int setStation(int fd) {

Log.d(TAG, "** Tune Using: "+fd);

int ret = FmReceiverJNI.setFreqNative(fd, mFreq);

Log.d(TAG, "** Returned: "+ret);

return ret;

}

最后调用FmReceiverJNI类

setFreqNative(fd, mFreq); 本地方法 JNI到 cpp文件

/*native interface */

static jint android_hardware_fmradio_FmReceiverJNI_setFreqNative

(JNIEnv * env, jobject thiz, jint fd, jint freq)

{

int err;

double tune;

struct v4l2_frequency freq_struct;

freq_struct.type = V4L2_TUNER_RADIO;

freq_struct.frequency = (freq*TUNE_MULT/1000);

err = ioctl(fd, VIDIOC_S_FREQUENCY, &freq_struct);

if(err < 0){

return FM_JNI_FAILURE;

}

return FM_JNI_SUCCESS;

}

---------------------

作者:护士leo

来源:CSDN

原文:

版权声明:本文为博主原创文章,转载请附上博文链接!


http://www.ppmy.cn/news/470719.html

相关文章

用树莓派制作FM调频无线电发射器

最近发现一个好玩的项目&#xff0c;用树莓派制作FM调频无线电发射器 github地址 https://github.com/ChristopheJacquet/PiFmRds FM-RDS transmitter using the Raspberry Pi This program generates an FM modulation, with RDS (Radio Data System) data generated in real …

FAQ-按耳机hook键控制FM调频功能

耳机检测方式为ACCDET_SUPPORT TRUE,要实现按耳机hook键控制FM调频功能 [SOLUTION] 实现步骤&#xff1a; 1&#xff0c;在uem_msg_hdlr.c&#xff08;ps\l4\uem\src&#xff09;文件中先extern void mmi_fmrdo_main_goto_next_channel(void); 2&#xff0c;再定义static void…

收音机c语言程序,基于51单片机的数字FM调频收音机的设计(附接线图,主程序代码)...

基于51单片机的数字FM调频收音机的设计(附接线图,主程序代码)(任务书,开题报告,论文15000字) 摘要 在当今的社会时代中,信息的传输扮演着极其重要的地位。随着科学技术的不断发展与进步,人类的生活已早已不能离开通信。收音机从其诞生以来,一直是一种信息传递的重要工具。由…

【GNURadio RTL-SDR】双RTL-SDR信号源的FM调频广播接收机

文章目录 1. 前言2. 实验过程2.1 制作流图2.2 RTL-SDR的设备参数 1. 前言 两个RTL-SDR的dongle“电视棒”&#xff0c;芯片 RTL2832U R820T &#xff0c;淘宝50左右那种能收FM和我国DTMB频段&#xff0c;想都接到同一台电脑去用软件无线电&#xff08;GNURadio&#xff09;的…

FM信号测试软件,手机中FM调频性能测试方法简介

原标题:手机中FM调频性能测试方法简介 手机已经成为人们非常重要的通讯工具,相应手机整合的功能也愈来愈多。目前市面上的手机基本上都支持FM收音机功能,而FM收音机性能则主要是通过 、接收频带宽度、解调输出信噪比、解调输出失真度、接收解调输出幅度等指标来给予衡量,摩…

隧道FM调频广播覆盖技术方案

隧道FM调频广播覆盖解决方案详细描述了隧道广播覆盖的技术原理&#xff0c;主要从隧道FM调频广播覆盖的设备组成、信号流程、关键技术等几方面进行描述。 隧道FM调频广播覆盖系统主要由信号选频单元、光纤传输单元、直放站&#xff08;远端机&#xff09;、泄/露电缆与天馈系统…

FIR 基础应用 - FM 调频波调制解调(FIR 低通滤波)

本文链接&#xff1a;https://blog.csdn.net/qq_46621272/article/details/125337119 FIR 基础应用 - FM 调频波调制解调(FIR 低通滤波) 文章目录 前言一、 调频波调制1. fm_modulation_dds 模块逻辑框图2. fm_modulation_dds.v verilog 代码 二、 调频波解调1. fm_demodulatio…

地下停车场FM调频广播覆盖方案

地下停车场FM调频广播覆盖方案 北京海特伟业科技有限公司 文/任洪卓 发布时间&#xff1a;2022-06-05 一、项目需求 我国的调频广播传输采用88-108MHz频段&#xff0c;只能在直视和无阻挡的情况下传播&#xff0c;因此地下停车场接收调频广播信号很差&#xff0c;有些甚至…