[pulseaudio-discuss] Headset-detection
David Henningsson
david.henningsson at canonical.com
Wed Aug 3 11:08:12 PDT 2011
On 2011-08-03 15:05, Himanshu Chug wrote:
> Hi Colin, David
>
> I can see David posts on the group recently and assuming David is back
> from vacations :)
Your assumption is correct :-) Btw I don't mind being cc:ed if you need
to reach me in person as I don't read all of pulseaudio-discuss normally.
> unfortunately we don't access to IRC chat due to some security
> restriction (thou we are working to get this sorted, if possible) so
> currently I can discuss only over group emails.
>
> On Fri, Jul 22, 2011 at 1:42 AM, Colin Guthrie <gmane at colin.guthr.ie
> <mailto:gmane at colin.guthr.ie>> wrote:
>
> 'Twas brillig, and Himanshu Chug at 21/07/11 08:24 did gyre and gimble:
> > Thanks Colin and Spidey for making this clarification.
> >
> > So regarding JACK detection and routing:
> >
> > 1. module-udev-detect currently can detect JACK physical hot-plugging
> > but it can't decode the information about what type of JACK device (
> > input or output ) is connected to the sound-card, and for that
> one need
> > to write an JACK detection module to handle that.
> > is my understanding correct ?
>
> Not quite. Udev detect does absolutely nothing with JACKs. It detects
> totally new devices in a hotplug way. These devices are e.g. USB
> speakers or headsets.
Although as of now, and the preliminary implementation the UCM folks
did, the jack input devices are being detected by udev.
> one colleague of mine from ALSA /kernel team have wrote the Jack
> detection app using udev API from libudev,
> so the Jack plug in/plug Out state can be read at
> sys/devices/virtual/switch/h2w/state
> State Meaning
> 0 No Headset Connected
> 1 Headset with MIC connected
> 2 Headset without MIC connected
This is a non-standard way of doing it, so once we have the
infrastructure in place you'd still have to write your own module for that.
> here we are monitoring in a loop using udev monitor fd and based on the
> "state" we are calling kcontrols for loudspeaker and headset
> something like here...
>
> fd = udev_monitor_get_fd(mon);
>
> while (1) {
> ............
> r = select(fd, ...);
>
> dev = udev_monitor_receive_device(mon);
> if (dev) {
> // Jack Inserted/Removed
> Jack_Report(state); // this function will call kcontrols for
> headset/loudspeaker based on "state"
> }
> ............
> }
>
> I am trying to understand if this approach of Jack detection is fine?
> at-least I need to know if I am going in right direction?
If you do your own program as listed above and nothing inside
PulseAudio, Jack_Report could call "pacmd set-sink-port", at least if
you got your PulseAudio profiles and paths set up correctly (see
WritingProfiles on the wiki).
> The actual HP Jack detection stuff is not present at all in PA as the
> underlying layers in ALSA are in flux. These need to settle before we
> can write anything to deal with them.
>
>
> As Colin comments about ALSA layers are in flux, I need to understand
> this bit more some brief information about this problem with ALSA ?
> if you can point to some link or so is also fine :)
http://comments.gmane.org/gmane.linux.alsa.devel/86315
> There are active discussions on this topic just now on the alsa-devel
> mailing list.
None that I have missed I hope? :-)
> > 2 Currently our Kernel/ALSA team support for providing seperate
> kcontrol
> > (amixer scripts) for enabling/disabling loudspeaker and headset
> to PA,
> > so it might be an good idea to handle Jack detection and routing
> in one
> > of the existing module or write up an new jack detection module for
> > this, as Colin suggested, provided that we are able to recognize Jack
> > device type (input/mic or output/headset or both) from point 1, ( i
> > will take further help from kernel team here about detecting jack
> device
> > type, but any suggestions are welcome :-) )
>
> Kinda. PA should be able to display to you the different "ports" for
> each sink. These ports represent the Speakers or the Headphones
> kcontrols that are on your device and you can change ports at runtime
> (just run pavucontrol and if your sinks actually have ports, there will
> be a drop downo n the "Output Devices" pane).
>
>
> I am not able to get pavucontrol installed and working on my rootstrap,
> due to some other issues, but I need to test this out also soon.
"pacmd list" should - among many other things - give you a list of ports
and profiles for a card.
> but I tried on UBUNTU 10.10 desktop, pavucontrol app showing me the
> dropdown for Output Devices,
>
> At present you have to
> change ports manually but the plan is to hook this up to jack detection,
> such that the port is simply flipped accordingly.
>
>
> I need to know where (or how) in code we can do "flipping of ports from
> headphones to loudspeaker"
> if I use our udev API for jack detection from above ?
>
>
> Multifunction jacks (i.e. those that can be input or output, analog or
> digital) are even more interesting :)
>
>
> I very strongly suggest you discuss this with David Henningsson. He's on
> this list but is away on vacation for (I think) another week. He's is
> actively working on JACK support for ALSA and PA layers so it will
> likely be the most productive for you if you wait and speak with him.
> He's employed by Canonical and is diwic on IRC.
Nitpick: JACK with all caps usually refers to "Jack Audio Connection
Kit", which is a low-latency (rather than low-power) sound server, i e
something completely different.
--
David Henningsson, Canonical Ltd.
http://launchpad.net/~diwic
More information about the pulseaudio-discuss
mailing list