Wilink FMRadio
From OMAPpedia
Contents |
[edit] OMAP WiLink FM Radio Home
Wilink FM Radio solutions help enable FM Radio playback and FM Transmit capabilities for different OMAP Platforms with TI Connectivity chipsets.
Note that the features and capabilities enabled on various platforms may differ with the software distributions.
[edit] Features
Current Android solution supports the following features:
- FM Radio Playback:
- Turn On/Off
- Tune
- Seek Up/Down, Full station Scan, Stop Scan and Band Wrap Seek
- RDS (Radio Text, PS name, PI, PTY), Raw RDS/RDBS data
- Bands supported: Europe/USA, Japan, Russian and Weather Band
- Alternate Frequency Switch
- Mute/UnMute Audio
- Switch between audio modes(Mono/Stereo)
- Set/Get RSSI threshold value
- De-emphasis filter set/get
- Channel space set/get
- Audio rendering via OMAP on board speaker or wired headset
- Volume gain set/get
- GUI and CLI applications supporting all the features listed above
- FM Radio Transmit:
- ON/OFF
- Select Transmit Frequency
- Start/Stop transmission
- RDS (Radio text, PS name, PI code, PTY)
- RDS Alternate Frequency
- Power level
- Audio Mode (Mono/Stereo)
- Pre-Emphasis filter value set
- Mute/UnMute
- GUI support
[edit] Architecture
The high level architecture for both V4L2 and FM stack based FM solutions can be found below.
[edit] FM Functional Components & Solutions
Three main FM functional components:
- Android FM framework (GUI solution) - This includes the FM service layer which exposes the FM API's and FM GUI application which uses the FM API's and implements the GUI use cases
- Android JNI Layer - Two independent flavours of FM JNI implementations are supported:
- TI proprietary FM stack - TI proprietary interface component. In user space. Direct interface to FM Character Device. Non open source.
- V4L2 FM stack - Open source V4L2 standard interface driver. In kernel space. Fully open sourced.
- Kernel Drivers - There are two kernel drivers are present depending on which JNI part used.
- FM Character Driver(/dev/tifm) - Exists only for TI proprietary FM stack implementation as a translation of commands/events between user space proprietary FM stack and Shared Transport driver component.
- FM V4L2 Driver(/dev/radio0) - An V4L2 compliant FM driver to send the FM commands/events to ST driver
Two FM Solutions:
Solution 1: FM GUI solution with TI proprietary FM stack & FM Character device
Enables user space TI FM stack and FM application to use FM functionality provided by FM core of TI Connectivity chip. The FM character driver expose a character device "/dev/tifm", via character device sub-system, for user space TI FM stack. When char device is opened, FM driver will register with ST driver and, when char device is closed, FM driver will de-register with ST driver.
When the user-space FM stack sends the Channel 1 FM commands, this sub-module will convert the Channel 1 commands to Channel-8 commands and will forward the commands to FM ST interface sub-module. Similarly, whenever a response is received from the ST driver, the Channel 8 response is converted to Channel 4 FM response packet and is forwarded to the user-space FM stack.
This solution is used in Gingerbread flavour of Android (L27.G Anchor)
Solution 2: FM GUI Solution with FM V4L2 driver
The FM driver, via V4L2 sub-system, enables user space FM application to use FM functionality provided by FM core of TI Connectivity chip. FM driver will expose "/dev/radio0" device via V4L2 sub-system for FM application. When "/dev/radio0" device is opened, FM driver will register with ST driver and then download any FM initialization script commands via ST interface. When "/dev/radio0" device is closed, FM driver will de-register with ST driver. This driver frames FM packets as Channel 8 packets and use ST interface to send them to FM core. FM driver will handle FM Channel 8 packets (received from FM core) provided by ST driver.
Any V4L2 complaint FM application can access FM driver by performing standard V4L2 IOCTL calls on "/dev/radio". The IOCTL handlers, which are defined in this module, will be invoked from V4L2 subsystem when there is request from FM application. Later, this request will be given to FM Common sub-module in the FM V4L2 driver to be passed on to the ST driver.
This solution is used in Ice-cream Sandwich flavour of Android (L27.I Anchor and onwards).
[edit] Gits & Code Locations
SOLUTION 1:
Kernel Driver: FM Character Driver: /drivers/staging/ti-st/fmdrv_chr.c in p-android-omap-2.6.35 {not available in K3.0 kernel and onwards}
User space Init Manager (common across all Shared Transport Technology drivers Bluetooth, FM, GPS): UIMD (uim-sysfs)
User space: TI FM Radio Stack
User space: TI FM Library (interface to communicate to /dev/tifm)
User space: FM Android Framework, Android GUI Application
SOLUTION 2:
Kernel Driver: FM V4L2 Driver: /drivers/media/radio/wl128x/* in p-android-omap-3.0
User space: kfmapp (FM Command Line Application for FM V4L2 driver). Test procedure for kfmapp (kfmapp tesing)
User space: FM Framework. How to use GUI(FM GUI testing)
L27.IS.4 onwards V4L2 based solution is supported from FM GUI(DB 250 onwards).
FM support from CLI (kfmapp) is not tested from DB 250 onwards but it should work.
Testing FM V4L2 Driver: TI's V4L2 based FM driver Test Procedure
Back to Connectivity Home Page
[Category:Wilink]