Hi All,
Recently, inspired by the progress with the camera, I started an "investigation" on how the FM radio actually works on out Tattoos. Unfortunately I am not able to continue working on that (not atleast until March), so I decided to share the information on the FM radio that I have so one of you folks can try to get it working.
The FM radio on Tattoo is handled by the BRF6350 chip. It is actually responsible mainly for the Bluetooth, but it also handles the FM radio. I've decided to search a bit more about the chip and found that TI has released a library (brflinux available here). That library is actually compiled in the bts daemon (the daemon responsible for both Bluetooth and FM radio on the official 1.6 ROMs). To function, this library also needs "an init script" that is a proprietary file called FMInit_300.bts under /system/etc/firmware/ .
The BRF6350 chip has analog audio output that is connected to a switch, controllable by the sysfs interface. That switch is accessable by the file /sys/class/htc_accessory/fm/flag . If you read from it you can see the current state, if you write to it you can change the current state. The file can handle the following strings:
"disable" - Turn off audio output by the BRF6350 chip
"fm_headset" - Turn on audio and send it to the headphones
"fm_speaker" - Turn on audio and send it to the phone speaker
When FM radio is off the switch should always be set to "disable" and when the radio is turned on the state should be set to "fm_headset" (atleast that is what is done on the official ROMs).
To detect if the headset is connected (that is your anthenna). You should read the following sysfs file /sys/class/switch/h2w/state a number is written there (in ASCII), that describes the state of the headset. The bits in that number have the following meaning:
#define BIT_HEADSET (1 << 0)
#define BIT_HEADSET_NO_MIC (1 << 1)
#define BIT_TTY_FULL (1 << 2)
#define BIT_FM_HEADSET (1 << 3)
#define BIT_FM_SPEAKER (1 << 4)
#define BIT_TTY_VCO (1 << 5)
#define BIT_TTY_HCO (1 << 6)
#define BIT_35MM_HEADSET (1 << 7)
atleast bits 0 or 1 and 7 should be set if the headset is connected.
After I had this basic info gathered, I began to search for application of all that.
In the following topic an interface is described that could be used for the FM radio on ROMs for our Tattoos. If we can connect the brflinux library to the JNI interface at the base of the new CyanogenMod FM radio application, we can have the radio up and running.
In fact the interfaces of the JNI library (at the base of the FM radio app) and the brflinux library are very similar so it would be quite possible.
Hope this was useful.
Cheers,
Rosti (a.k.a pisaro)
thank you very much!!
Why is not this topic in the Click DEVELOPMENT forum?
thanks pisaro for your work. I hope some one could continue with it.
Thanks for your effort
pisaro said:
The FM radio on Tattoo is handled by the BRF6350 chip. It is actually responsible mainly for the Bluetooth, but it also handles the FM radio. I've decided to search a bit more about the chip and found that TI has released a library (brflinux available here). That library is actually compiled in the bts daemon (the daemon responsible for both Bluetooth and FM radio on the official 1.6 ROMs). To function, this library also needs "an init script" that is a proprietary file called FMInit_300.bts under /system/etc/firmware/ .
The BRF6350 chip has analog audio output that is connected to a switch, controllable by the sysfs interface. That switch is accessable by the file /sys/class/htc_accessory/fm/flag . If you read from it you can see the current state, if you write to it you can change the current state. The file can handle the following strings:
"disable" - Turn off audio output by the BRF6350 chip
"fm_headset" - Turn on audio and send it to the headphones
"fm_speaker" - Turn on audio and send it to the phone speaker
Click to expand...
Click to collapse
Much thanks ! Just the info I was looking for.
If I can get this FM audio routing working, I think I'll have FM radio working on my HTC legend, but I'd guess it'd work for many of the phones using BRF6300/BRF6350/BL6450 aka WL1271/1273/1281/1283 etc.
I have the hcitool commands that have the FM working I'm pretty sure. RSSI responds to tuning and antenna movement as I'd expect.
Now, where can I find FMInit_300.bts ? No results on google search. I'm not really convinced I need it, I have other files such as fm_rx_init_1273.2.bts and fmc_init_1273.2.bts, AND I think I've sent all the needed commands via hcitool, except perhaps for audio routing.
thank you very much!!
Looks good mate!
mikereidis said:
Much thanks ! Just the info I was looking for.
If I can get this FM audio routing working, I think I'll have FM radio working on my HTC legend, but I'd guess it'd work for many of the phones using BRF6300/BRF6350/BL6450 aka WL1271/1273/1281/1283 etc.
I have the hcitool commands that have the FM working I'm pretty sure. RSSI responds to tuning and antenna movement as I'd expect.
Now, where can I find FMInit_300.bts ? No results on google search. I'm not really convinced I need it, I have other files such as fm_rx_init_1273.2.bts and fmc_init_1273.2.bts, AND I think I've sent all the needed commands via hcitool, except perhaps for audio routing.
Click to expand...
Click to collapse
I attach the file FMInit_300.bts extracted from a HTC 1.6 ROM. I hope it helps you with your work.
http://www.megaupload.com/?d=NRMYDZI2
Looking forward to seeing more progress!
Our phones would show, with fm radio and gingerbread.
pisaro said:
Hi All,
Recently, inspired by the progress with the camera, I started an "investigation" on how the FM radio actually works on out Tattoos. Unfortunately I am not able to continue working on that (not atleast until March), so I decided to share the information on the FM radio that I have so one of you folks can try to get it working.
The FM radio on Tattoo is handled by the BRF6350 chip. It is actually responsible mainly for the Bluetooth, but it also handles the FM radio. I've decided to search a bit more about the chip and found that TI has released a library (brflinux available here). That library is actually compiled in the bts daemon (the daemon responsible for both Bluetooth and FM radio on the official 1.6 ROMs). To function, this library also needs "an init script" that is a proprietary file called FMInit_300.bts under /system/etc/firmware/ .
The BRF6350 chip has analog audio output that is connected to a switch, controllable by the sysfs interface. That switch is accessable by the file /sys/class/htc_accessory/fm/flag . If you read from it you can see the current state, if you write to it you can change the current state. The file can handle the following strings:
"disable" - Turn off audio output by the BRF6350 chip
"fm_headset" - Turn on audio and send it to the headphones
"fm_speaker" - Turn on audio and send it to the phone speaker
When FM radio is off the switch should always be set to "disable" and when the radio is turned on the state should be set to "fm_headset" (atleast that is what is done on the official ROMs).
To detect if the headset is connected (that is your anthenna). You should read the following sysfs file /sys/class/switch/h2w/state a number is written there (in ASCII), that describes the state of the headset. The bits in that number have the following meaning:
#define BIT_HEADSET (1 << 0)
#define BIT_HEADSET_NO_MIC (1 << 1)
#define BIT_TTY_FULL (1 << 2)
#define BIT_FM_HEADSET (1 << 3)
#define BIT_FM_SPEAKER (1 << 4)
#define BIT_TTY_VCO (1 << 5)
#define BIT_TTY_HCO (1 << 6)
#define BIT_35MM_HEADSET (1 << 7)
atleast bits 0 or 1 and 7 should be set if the headset is connected.
After I had this basic info gathered, I began to search for application of all that.
In the following topic an interface is described that could be used for the FM radio on ROMs for our Tattoos. If we can connect the brflinux library to the JNI interface at the base of the new CyanogenMod FM radio application, we can have the radio up and running.
In fact the interfaces of the JNI library (at the base of the FM radio app) and the brflinux library are very similar so it would be quite possible.
Hope this was useful.
Cheers,
Rosti (a.k.a pisaro)
Click to expand...
Click to collapse
Thanks for your info. Most of the solution to the FM Radio is what you said here some time ago, so I want to congratulate you for this previous vision you gave us
THANKS
Hi,
I own a belkin bluetooth car kit ( http://www.amazon.com/Belkin-Blueto...04CLYJ2I/ref=cm_cd_t_pb_t/176-8854606-5137354 ), but I can't use it to caling as I can't control its volume. Even if I set my amplifier to the minimum, I have a very loud in-call volume.
Already tried with many roms (2.2; 2.3; 4.0.3 on Milestone) and (2.3;4.0.4 aokp based on Mytouch 4g).
I tried with 4 android phones with stock and custom roms, but only succeed on changing in-call volume with an iphone 3g.
I'm able to control media volume normally. It just happens to in-call volume which is stuck on a very loud one, not changeable by volume buttons. Actually I see the volume bar changing, but it doesn't cause any effect.
I was wondering if it has anything to audio protocol or profile.
I found the product specs https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=17157 and maybe it helps.
Today, I'm using the config below in /system/etc/bluetooth/audio.conf
Thanks in advance for any help!
# Configuration file for the audio service
# This section contains options which are not specific to any
# particular interface
# NOTE: Enable=Sink means that bluetoothd exposes Sink interface for remote
# devices, and the local device is a Source
[General]
Enable=Sink,Control
Disable=Headset,Gateway,Source
# Switch to master role for incoming connections (defaults to true)
Master=false
# If we want to disable support for specific services
# Defaults to supporting all implemented services
#Disable=Control,Source
# SCO routing. Either PCM or HCI (in which case audio is routed to/from ALSA)
# Defaults to HCI
#SCORouting=PCM
# Automatically connect both A2DP and HFP/HSP profiles for incoming
# connections. Some headsets that support both profiles will only connect the
# other one automatically so the default setting of true is usually a good
# idea.
#AutoConnect=true
# Headset interface specific options (i.e. options which affect how the audio
# service interacts with remote headset devices)
#[Headset]
# Set to true to support HFP (in addition to HSP only which is the default)
# Defaults to false
HFP=true
# Maximum number of connected HSP/HFP devices per adapter. Defaults to 1
#MaxConnections=1
# Set to true to enable use of fast connectable mode (faster page scanning)
# for HFP when incomming call starts. Default settings are restored after
# call is answered or rejected. Page scan interval is much shorter and page
# scan type changed to interlaced. Such allows faster connection initiated
# by a headset.
FastConnectable=true
# Just an example of potential config options for the other interfaces
[A2DP]
SBCSources=1
MPEG12Sources=0
[AVRCP]
InputDeviceName=AVRCP​
I have a android car stereo. The mic is built into the device, so the capture sound is very else.
It supports usb host, so I found a usb microphone and connected it. But the devices Bluetooth HFP always take the inbuilt microphone. Is there a way I can change just the default audio input to the usb mic and output to the inbuilt audio output
Code:
# cat /proc/asound/cards
0 [smdk ]: HDA-Intel - HDA ATI SB
HDA ATI smdk at 0xfe8f4000 irq 16
1 [tera ]: USB-Audio
Guillemot Corporation Dualpix tera at usb-0000:00:12.2-2, high speed
# cat /proc/asound/devices
1: [ 0] : control
2: [ 0- 1]: digital audio playback
3: [ 0- 2]: digital audio capture
4: [ 1- 0]: digital audio capture
5: [ 1] : control
any help?
Send digital audio out of headunit
Dug around a lot and found no listing for this. It might help some folks so I am posting it expecting to get dumped on for not finding the needle in the haystack nearest the moon on Rygel 7. Fire away. Most Android based head units for cars have USB connectors on them. In the world of audio it is best not to convert audio from analogue to digital and back too many times. I like many have an offboard digital based signal processor between my headunit and power amps. I would like to send digital to the processor but most head units don't offer a digital output even as an option and the few that I have found that do source that signal before the volume control in the signal's path so you can't control your listening level with the volume control on your head unit. Apparently Android Kit Kat (4.??) has some driver compatibility with certain audio devices (sound cards?). Android 5 or Lollipop has more. With that do I assume that most USB audio sound cards would be plug and play? What would a head unit developer need to do in order to maintain function of the volume control of the existing head unit assuming it was a droid device of course.
Hi!
I have JVC KD-R841BT head unit. I had a Nokia 5800 and works perfectly, but with HTC One no. I try to pair and when the pin code appear on my phone i push accept then nothing happens. On the unit shows the pin code and that's all. I tried to play music from phone and nothing.
I wrote to JVC support, and they told me that my phone do not support some bluetooth profile.
The unit support the following profiles:
Hands-Free Profile (HFP 1.5)
Object Push Profile (OPP 1.1)
Phonebook Access Profile (PBAP 1.0)
Advanced Audio Distribution Profile (A2DP 1.2)
Audio/Video Remote Control Profile (AVRCP 1.3)
Can you help me? Can i add some bluetooth profiles ?
Thanks for your reply.
We need an application that will enable an android device (a tablet for instance) to act as a Bluetooth headset and dial-er for another phone.
Is it possible to implement this by enabling bluetooth A2DP Sink profile service?
Can anyone guide me about how to enable bluetooth A2DP Sink or implement the above process.
Is there any application level api in the new version of android (Lollipop)..