brew开发--FM 收音机
终于完成了自己在brew平台上的第一个项目--FM收音机。由于之前项目硬件的原因,项目组之前没有开发FM收音机模块。所以我得从最原始的需求开始,编写概要设计文档,接下来是详细设计,不过公司不用写详细设计,这一步就省了。还好需求和UI不是我做的,我只需要和需求工程师和UI工程师以及SPDM一起确定需求和UI。
FM收音机包括调节频率,调节音量,频道管理,保存频道,制式选择,自动扫描,灵敏度调节,收听方式选择,立体声和单声道以及最小化收音机功能。收音机的实现通过com + app来实现。com主要实现与收音机功能相关的部分,而app主要是处理界面相关的部分。
主界面:
主界面显示当前播放的制式、频率,频道号、频道名称、收听方式及保真度(立体声或单声道)
注:这里音量是不显示的,只有调节音量时才显示音量图标,调节完成后音量图标消失。
主菜单界面:
1.调节频率:
调节频率可以通过三个方式:
1.通过左右键调节频道,每按一个左/右键,频率-/+0.1MHz,当频率调节到最小时,再按左键没有反应,同样的,频率调节到最大时,再按右键也没有反应。
2.通过选项选择调节频率,直接输入频率值,点击确定,如果频率在合法的范围内,刚可直接跳到该频率; 如果频率不合法,则弹出提示对话框。
3.通过上下键调节频率,点击上下键,可以在已保存的频道之前切换。如果当前播放频率不是已保存的频道,按上键,则跳到已保存的最大频率,按下键则跳到已保存的最小频率,如果当前播放的频率是已保存的频道,按上键则跳到该频道的上一频道,按下键则跳到该频道的下一频道。如果当前没有已保存的频道则按上下键没有反应,如果当前只有一个已保存的频道,则按上下键一直播放这个频道(前提是满足频率在当前制式的频率范围内,因为不同制式频率围不一样,但是有一部分交叉,而保存的频道是不区分制式的,可以参看制式先择功能)。
2.调节音量
当按侧边上下键时,可以调节音量,按上侧边键时音量增加一个单位,按下侧边键时音量减少一个单位。当音量为最大音量时,再按上侧边键没有反应当音量为最小音量时,按下侧边键也没有反应,音量调节完成后,音量图标消失。
3.频道管理
通过选项菜单出入频道列表界面,可以对频道进行管理。包括删除频道,编辑频道,标记频道。频道列表界面如图:
频道列表界面菜单:
点击编辑进入频道编辑界面:
点击删除可删除频道列表中当前选中的频道,点击删除所有可以删除所有频道,点击标记进入标记界面:
3.制式选择
制式选择包括日本制式和欧洲制式,日本制式的频率范围是70.0-90.0MHz,欧洲制式的频率范围为87.5-108.0MHz。
4.自动扫描
选择自动扫描,将清除所有保存的频道,并进行自动扫描,扫描结束后,当扫描成功时,自动播放扫描到的第一个频道,如果扫描失败,则播放扫描之前的那个频道。
5.灵敏度调节
选择灵敏度后,可按当前的灵敏度进行自动扫描,扫描后的处理和自动扫描相同。灵敏度越高,扫描到的频道越少,频道也越清晰,灵敏度越低,扫描到的频道越多,频道也越不清晰。
6.收听方式选择
可以在耳机和者扬声器之间切换收听。以下是切换为扬声器模式收听:
7.立体声和单声道
可以切换通过立体声或单声道进行收听。以下是切换为单声道模式收听:
8.最小化收音机
最小化收音机,可以使收音机在后台播放。
几个需要注意的地方:
1.最小化收音机,使收音机在后台播放。brew的App分为几种状态,激活的,挂起的,后台的,激活和挂起的App在应用程序栈里,brew通过这个栈来管理App.栈最上面的App是激活的状态,只有激活的App可以通过屏幕和用户来交互。当前运行的APP就是激活的状态,当APP收到EVT_APP_SUSPEND消息,处理完之后App就成了挂起的状态,挂起的App收到EVT_APP_RESUME消息,处理完之后成为active状态。所以可以通过suspend和resume来挂起和激活App.而后台的App不在这个栈里,所以它不会收到suspend和resume消息,也收不到按键消息。那么如何将一个app变成后台运行的?
要将一个App放入后台运行,则应该在处理EVT_APP_STOP事件时,将dwParam的值设为false;在处理完EVT_APP_STOP事件后,这个App将进入后台运行。
代码示例:
boolean bGoMinimize;
case EVT_APP_STOP:
if (bGoMinimize)
{
*((boolean*)dwParam) = false;
return true;
}
后台的App怎么和用户和其他app交互呢?
后台的APP没有办法和用户和其他app交互,我们只有通过ISHELL_StartApplet();来将App变成激活的才可以进行交互。可以定义一个用户自己的事件,将App激活,或者是通过某种条件激活。
2.冲突处理
在收音机播放的过程中,如果有其他需要播放声音的app要启动,这时就会产生冲突。如来电,短信,音乐播放,视频播放等等,根据不同App进行不同的处理,这里根据产生冲突的App运行的时间进行处理,主要是考虑省电,如果时间较长,则关闭收音机,如果时间较短,将收音机置为无声,等产生冲突的App关闭后,再继续播放收音机。
3.信息保存
收音机关闭之后再打开,应该播放上一次播放的频率,声音大小也应该和上一次一样。这里通过一个配置文件保存这些信息,当收音机关闭时,将这些信息保存在配置文件中,下一次打开时,读配置文件信息,再进行播放,第一次打开时,配置文件中没有上一次播放的信息,所以收音机播放默认的频率和声音。
转载于:https://www.cnblogs.com/rager/archive/2010/06/22/1762332.html
brew开发--FM 收音机相关推荐
- 【Android项目】本地FM收音机开发及源码简析
[Android项目]本地FM收音机开发及源码简析 目录 1.概述 2.收音机的基本原理 3.收音机其他信息 RDS功能 4.Android开发FM收音机源码解析 5.App层如何设计本地FM应用 6 ...
- TEA5676 + AT24C08 FM收音机 搜台 存台 mmap 实现读写
硬件说明 TEA5767 + AT24c08 要使用耳机收听,不加功放芯片,声音非常小. 这2个芯片都支持 3.3 或 5.0 电源支持 连线比较简单,sda scl 接到 2440 对应的 排针上, ...
- RDA5807 FM收音机模块
一. 简介 这是一个购自于淘宝网店的RDA5807调频接收模块,价格只有3块钱人民币.' RDA5807是一颗调频广播单芯片接收调谐芯片.只需要外部非常少的元器件,便可以组成一个完整的调频广播 ...
- linux上听FM程序,安装和使用Odio在Linux上收听FM收音机的方法
Linux平台上有一些很棒的无线电应用程序可用于在Linux上收听FM Radio(收音机),本文介绍Odio,包括安装和使用它来收听FM收音机的方法. 启用Snap支持和安装Odio 由于Sna ...
- FM收音机入门,以及Python实现FM调制解调
FM收音机入门以及调制解调的实现 FM收音机基础知识 FM的调制和解调原理 PYthon 实现 FM调制与解调 FM调制 FM解调 FM收音机基础知识 调制分为三种:调幅(AM),调频(FM)和调相. ...
- gnuradio+b210实现FM收音机
gnuradio+b210实现FM收音机 环境介绍 FM接收 1 Flow Graph 2 变量参数 FM发射 1 Flow Graph 2 变量参数 环境介绍 Name Version gnurad ...
- FM收音机ic FM发射模块SX6116
原文地址::http://china.coovee.net/business1/detail/12753421.html 相关文章 1.HS6760 FM调频发射端芯片 SSOP-10封装----ht ...
- 基于RTL—SDR及Simulink的FM收音机仿真
在有了一些rtl-sdr基础,并学习了一些通信系统建模与仿真原理后,便利用rtl-sdr模块在Simulink上进行FM收音机仿真. 目录 一.知识储备 SDR-Receiver模块原理 电台AM-D ...
- am超外差收音机matlab,超外差式AM/FM收音机的调试
实 训(习)报 告 课程名称:超外差式AM/FM收音机的调试 专 业:通信工程 班 级:053041 学 号:02 姓 名:王 倩 指导教师:别玉霞 成 绩: 完成日期: 年 月 日 任 务 书 实训 ...
最新文章
- 中国在5G、AI等领域对美国紧追不舍,但设备工艺依旧落后
- Matlab实用程序--图形应用-轮廓图
- 2020身高体重标准表儿童_2020年儿童标准体重表出炉!过胖影响发育!(附身高体重标准表)...
- 时尚电商新赛道:揭秘 FashionAI 技术
- cas修改界面html,为REST API配置的CAS将v1 / ticket重定向到登录HTML
- 【LGP5161】WD与数列
- jQuery first()和last()函数示例
- python学习[一]
- 虚拟声卡实现播放铃声
- 煤炭行业供应链集采系统:数字化推进煤炭产业转型升级
- 视频教程-2020年软考网络工程师基础知识软考视频教程-软考
- 使用tesseract-ocr进行文字识别
- 盘点一份JS逆向代码转换为Python代码的教程
- Docker——网络
- 2017-2018 年终总结
- 汇编指令CALL的硬编码E8 和 JMP 的硬编码E9 后面参数的计算方法
- stm32F407控制器在驱动电机等执行机构时,ADS1256采集模块出现死机现象,问题待解决
- linux进阶52——pthread_cond_t
- jquery日期控件使用,起止时间
- C语言数组初始化为非0值
热门文章
- 选择万德L2接口需要遵循什么原则?
- 无所畏惧,除了畏惧本身。
- CMAB 强化学习中的组合多臂老虎机问题(二)
- php怎么创建表命令行,laravel使用命令行结合代码创建数据表的方法
- 蛇类高海拔环境的适应机制研究获进展
- 电商数据仓库系统总体需求分析
- 林晓老师:低水平领导的五大表现
- 改变窗口大小时重新设置 rem时window.onresize失效
- c语言 case语句用法,switch case语句的用法
- java.lang.IllegalArgumentException: Invalid character found in method name [0x160x030x010x020x000x01