终于完成了自己在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 收音机相关推荐

  1. 【Android项目】本地FM收音机开发及源码简析

    [Android项目]本地FM收音机开发及源码简析 目录 1.概述 2.收音机的基本原理 3.收音机其他信息 RDS功能 4.Android开发FM收音机源码解析 5.App层如何设计本地FM应用 6 ...

  2. TEA5676 + AT24C08 FM收音机 搜台 存台 mmap 实现读写

    硬件说明 TEA5767 + AT24c08 要使用耳机收听,不加功放芯片,声音非常小. 这2个芯片都支持 3.3 或 5.0 电源支持 连线比较简单,sda scl 接到 2440 对应的 排针上, ...

  3. RDA5807 FM收音机模块

    一. 简介   这是一个购自于淘宝网店的RDA5807调频接收模块,价格只有3块钱人民币.'   RDA5807是一颗调频广播单芯片接收调谐芯片.只需要外部非常少的元器件,便可以组成一个完整的调频广播 ...

  4. linux上听FM程序,安装和使用Odio在Linux上收听FM收音机的方法

    Linux平台上有一些很棒的无线电应用程序可用于在Linux上收听FM Radio(收音机),本文介绍Odio,包括安装和使用它来收听FM收音机的方法. 启用S​​nap支持和安装Odio 由于Sna ...

  5. FM收音机入门,以及Python实现FM调制解调

    FM收音机入门以及调制解调的实现 FM收音机基础知识 FM的调制和解调原理 PYthon 实现 FM调制与解调 FM调制 FM解调 FM收音机基础知识 调制分为三种:调幅(AM),调频(FM)和调相. ...

  6. gnuradio+b210实现FM收音机

    gnuradio+b210实现FM收音机 环境介绍 FM接收 1 Flow Graph 2 变量参数 FM发射 1 Flow Graph 2 变量参数 环境介绍 Name Version gnurad ...

  7. FM收音机ic FM发射模块SX6116

    原文地址::http://china.coovee.net/business1/detail/12753421.html 相关文章 1.HS6760 FM调频发射端芯片 SSOP-10封装----ht ...

  8. 基于RTL—SDR及Simulink的FM收音机仿真

    在有了一些rtl-sdr基础,并学习了一些通信系统建模与仿真原理后,便利用rtl-sdr模块在Simulink上进行FM收音机仿真. 目录 一.知识储备 SDR-Receiver模块原理 电台AM-D ...

  9. am超外差收音机matlab,超外差式AM/FM收音机的调试

    实 训(习)报 告 课程名称:超外差式AM/FM收音机的调试 专 业:通信工程 班 级:053041 学 号:02 姓 名:王 倩 指导教师:别玉霞 成 绩: 完成日期: 年 月 日 任 务 书 实训 ...

最新文章

  1. 中国在5G、AI等领域对美国紧追不舍,但设备工艺依旧落后
  2. Matlab实用程序--图形应用-轮廓图
  3. 2020身高体重标准表儿童_2020年儿童标准体重表出炉!过胖影响发育!(附身高体重标准表)...
  4. 时尚电商新赛道:揭秘 FashionAI 技术
  5. cas修改界面html,为REST API配置的CAS将v1 / ticket重定向到登录HTML
  6. 【LGP5161】WD与数列
  7. jQuery first()和last()函数示例
  8. python学习[一]
  9. 虚拟声卡实现播放铃声
  10. 煤炭行业供应链集采系统:数字化推进煤炭产业转型升级
  11. 视频教程-2020年软考网络工程师基础知识软考视频教程-软考
  12. 使用tesseract-ocr进行文字识别
  13. 盘点一份JS逆向代码转换为Python代码的教程
  14. Docker——网络
  15. 2017-2018 年终总结
  16. 汇编指令CALL的硬编码E8 和 JMP 的硬编码E9 后面参数的计算方法
  17. stm32F407控制器在驱动电机等执行机构时,ADS1256采集模块出现死机现象,问题待解决
  18. linux进阶52——pthread_cond_t
  19. jquery日期控件使用,起止时间
  20. C语言数组初始化为非0值

热门文章

  1. 选择万德L2接口需要遵循什么原则?
  2. 无所畏惧,除了畏惧本身。
  3. CMAB 强化学习中的组合多臂老虎机问题(二)
  4. php怎么创建表命令行,laravel使用命令行结合代码创建数据表的方法
  5. 蛇类高海拔环境的适应机制研究获进展
  6. 电商数据仓库系统总体需求分析
  7. 林晓老师:低水平领导的五大表现
  8. 改变窗口大小时重新设置 rem时window.onresize失效
  9. c语言 case语句用法,switch case语句的用法
  10. java.lang.IllegalArgumentException: Invalid character found in method name [0x160x030x010x020x000x01