From: Dmitry Torokhov on
On Wed, Dec 02, 2009 at 05:33:34PM -0200, Mauro Carvalho Chehab wrote:
> Dmitry Torokhov wrote:
> >> The raw interface applies only to the devices that doesn't have a hardware decoder
> >> (something between 40%-60% of the currently supported devices).
> >
> > 50% is quite a number I think. But if driver does not allow access to
> > the raw stream - it will refuse binding to lirc_dev interface.
>
> Ok.
>
> > We need to cater to the future cases as well. I don't want to redesign
> > it in 2 years. But for devices that have only hardware decoders I
> > suppose we can short-curcuit "interfaces" and have a library-like module
> > creating input devices directly.
>
> We really need only one interface for those devices. However, protocol selection
> is needed, as it is associated with the scantable on those devices.
> a sysfs entry would solve this issue.
>
> Also, we need a better schema to cleanup the keycode table. Currently, the only way
> I'm aware is to run a loop from 0 to 65535 associating a scancode to KEY_UNKNOWN or
> to KEY_RESERVED.

I guess we could entertain EVIOCSKMAPFLUSH or something...

>
> >> In the case of the cheap devices with just raw interfaces, running in-kernel
> >> decoders, while it will work if you create one interface per protocol
> >> per IR receiver, this also seems overkill. Why to do that? It sounds that it will
> >> just create additional complexity at the kernelspace and at the userspace, since
> >> now userspace programs will need to open more than one device to receive the
> >> keycodes.
> >
> > _Yes_!!! You open as many event devices as there are devices you are
> > interested in receiving data from. Multiplexing devices are bad, bad,
> > bad. Witness /dev/input/mouse and all the attempts at working around the
> > fact that if you have a special driver for one of your devices you
> > receive events from the same device through 2 interfaces and all kind of
> > "grab", "super-grab", "smart-grab" schemes are born.
>
> The only device that the driver can actually see is the IR receiver. There's no way to
> know if there is only one physical IR sending signals to it or several different models,
> especially if we consider that programmable IR's can be able even to generate more than one
> protocol at the same time, and can emulate other IR types.
>
> You might create some artificial schema to try to deal with different IR's being received
> at the same IR receiver, but, IMHO, this will just add a complex abstraction layer.
>
> Also, this won't give any real gain, as either both IR's will generate the same scancodes (and you can't distinguish what IR generated that code), or the scancode is different, and you
> can handle it differently.

No it will. User will have _an option_ of assigning a particular remote
to a particular application. Whether he or she will chose to entertain
this option is up to that user.

>
> >>> (for each remote/substream that they can recognize).
> >> I'm assuming that, by remote, you're referring to a remote receiver (and not to
> >> the remote itself), right?
> >
> > If we could separate by remote transmitter that would be the best I
> > think, but I understand that it is rarely possible?
>
> IMHO, the better is to use a separate interface for the IR transmitters,
> on the devices that support this feature. There are only a few devices
> I'm aware of that are able to transmit IR codes.

-ENOOPINION at the moment.

--
Dmitry
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Jarod Wilson on
On Dec 2, 2009, at 2:56 PM, Dmitry Torokhov wrote:

> On Wed, Dec 02, 2009 at 02:22:18PM -0500, Jarod Wilson wrote:
>> On 12/2/09 12:30 PM, Jon Smirl wrote:
>>>>>> (for each remote/substream that they can recognize).
>>>>>>>
>>>>>>> I'm assuming that, by remote, you're referring to a remote receiver (and not to
>>>>>>> the remote itself), right?
>>>>>
>>>>> If we could separate by remote transmitter that would be the best I
>>>>> think, but I understand that it is rarely possible?
>>>
>>> The code I posted using configfs did that. Instead of making apps IR
>>> aware it mapped the vendor/device/command triplets into standard Linux
>>> keycodes. Each remote was its own evdev device.
>>
>> Note, of course, that you can only do that iff each remote uses distinct
>> triplets. A good portion of mythtv users use a universal of some sort,
>> programmed to emulate another remote, such as the mce remote bundled
>> with mceusb transceivers, or the imon remote bundled with most imon
>> receivers. I do just that myself.
>>
>> Personally, I've always considered the driver/interface to be the
>> receiver, not the remote. The lirc drivers operate at the receiver
>> level, anyway, and the distinction between different remotes is made by
>> the lirc daemon.
>
> The fact that lirc does it this way does not necessarily mean it is the
> most corerct way.

No, I know that, I'm just saying that's how I've always looked at it, and that's how lirc does it right now, not that it must be that way.

> Do you expect all bluetooth input devices be presented
> as a single blob just because they happen to talk to the sane receiver
> in yoru laptop? Do you expect your USB mouse and keyboard be merged
> together just because they end up being serviced by the same host
> controller? If not why remotes should be any different?

A bluetooth remote has a specific device ID that the receiver has to pair with. Your usb mouse and keyboard each have specific device IDs. A usb IR *receiver* has a specific device ID, the remotes do not. So there's the major difference from your examples.

> Now I understand that if 2 remotes send completely identical signals we
> won't be able to separete them, but in cases when we can I think we
> should.

I don't have a problem with that, if its a truly desired feature. But for the most part, I don't see the point. Generally, you go from having multiple remotes, one per device (where "device" is your TV, amplifier, set top box, htpc, etc), to having a single universal remote that controls all of those devices. But for each device (IR receiver), *one* IR command set. The desire to use multiple distinct remotes with a single IR receiver doesn't make sense to me. Perhaps I'm just not creative enough in my use of IR. :)

--
Jarod Wilson
jarod(a)wilsonet.com



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Mauro Carvalho Chehab on
Dmitry Torokhov wrote:
> On Wed, Dec 02, 2009 at 03:04:30PM -0500, Jarod Wilson wrote:
>> On Dec 2, 2009, at 2:56 PM, Dmitry Torokhov wrote:
>>
>>> On Wed, Dec 02, 2009 at 02:22:18PM -0500, Jarod Wilson wrote:
>>>> On 12/2/09 12:30 PM, Jon Smirl wrote:
>>>>>>>> (for each remote/substream that they can recognize).
>>>>>>>>> I'm assuming that, by remote, you're referring to a remote receiver (and not to
>>>>>>>>> the remote itself), right?
>>>>>>> If we could separate by remote transmitter that would be the best I
>>>>>>> think, but I understand that it is rarely possible?
>>>>> The code I posted using configfs did that. Instead of making apps IR
>>>>> aware it mapped the vendor/device/command triplets into standard Linux
>>>>> keycodes. Each remote was its own evdev device.
>>>> Note, of course, that you can only do that iff each remote uses distinct
>>>> triplets. A good portion of mythtv users use a universal of some sort,
>>>> programmed to emulate another remote, such as the mce remote bundled
>>>> with mceusb transceivers, or the imon remote bundled with most imon
>>>> receivers. I do just that myself.
>>>>
>>>> Personally, I've always considered the driver/interface to be the
>>>> receiver, not the remote. The lirc drivers operate at the receiver
>>>> level, anyway, and the distinction between different remotes is made by
>>>> the lirc daemon.
>>> The fact that lirc does it this way does not necessarily mean it is the
>>> most corerct way.
>> No, I know that, I'm just saying that's how I've always looked at it, and that's how lirc does it right now, not that it must be that way.
>>
>>> Do you expect all bluetooth input devices be presented
>>> as a single blob just because they happen to talk to the sane receiver
>>> in yoru laptop? Do you expect your USB mouse and keyboard be merged
>>> together just because they end up being serviced by the same host
>>> controller? If not why remotes should be any different?
>> A bluetooth remote has a specific device ID that the receiver has to
>> pair with. Your usb mouse and keyboard each have specific device IDs.
>> A usb IR *receiver* has a specific device ID, the remotes do not. So
>> there's the major difference from your examples.
>>
>
> Not exactly... I can have 2 identical USB keyboadrs form the same
> manufacturer and they will still be treated separately. BT has session
> ID to help distinguish between devices.
>
>>> Now I understand that if 2 remotes send completely identical signals we
>>> won't be able to separete them, but in cases when we can I think we
>>> should.
>> I don't have a problem with that, if its a truly desired feature. But
>> for the most part, I don't see the point. Generally, you go from
>> having multiple remotes, one per device (where "device" is your TV,
>> amplifier, set top box, htpc, etc), to having a single universal
>> remote that controls all of those devices. But for each device (IR
>> receiver), *one* IR command set. The desire to use multiple distinct
>> remotes with a single IR receiver doesn't make sense to me. Perhaps
>> I'm just not creative enough in my use of IR. :)
>
> Didn't Jon posted his example whith programmable remote pretending to be
> several separate remotes (depending on the mode of operation) so that
> several devices/applications can be controlled without interfering with
> each other?
>
From what I understood, he is using the same physical remote, but creating different
IR groups of keys on it, each group meant to be used by a different application.

For such usage, some software will need to filter the scancode group and send
them only for a certain application. This can be done easily by using lirc,
purely in userspace.

Another alternative (that will also work for multimedia keys on a keyboard) is
to add a filtering subsystem at evdev that will send certain events for just certain
PID's.

Of course, it is feasible to do it in kernel, but, IMHO, it would be better to let
userspace to take care of this.

Cheers,
Mauro.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Dmitry Torokhov on
On Wed, Dec 02, 2009 at 03:04:30PM -0500, Jarod Wilson wrote:
> On Dec 2, 2009, at 2:56 PM, Dmitry Torokhov wrote:
>
> > On Wed, Dec 02, 2009 at 02:22:18PM -0500, Jarod Wilson wrote:
> >> On 12/2/09 12:30 PM, Jon Smirl wrote:
> >>>>>> (for each remote/substream that they can recognize).
> >>>>>>>
> >>>>>>> I'm assuming that, by remote, you're referring to a remote receiver (and not to
> >>>>>>> the remote itself), right?
> >>>>>
> >>>>> If we could separate by remote transmitter that would be the best I
> >>>>> think, but I understand that it is rarely possible?
> >>>
> >>> The code I posted using configfs did that. Instead of making apps IR
> >>> aware it mapped the vendor/device/command triplets into standard Linux
> >>> keycodes. Each remote was its own evdev device.
> >>
> >> Note, of course, that you can only do that iff each remote uses distinct
> >> triplets. A good portion of mythtv users use a universal of some sort,
> >> programmed to emulate another remote, such as the mce remote bundled
> >> with mceusb transceivers, or the imon remote bundled with most imon
> >> receivers. I do just that myself.
> >>
> >> Personally, I've always considered the driver/interface to be the
> >> receiver, not the remote. The lirc drivers operate at the receiver
> >> level, anyway, and the distinction between different remotes is made by
> >> the lirc daemon.
> >
> > The fact that lirc does it this way does not necessarily mean it is the
> > most corerct way.
>
> No, I know that, I'm just saying that's how I've always looked at it, and that's how lirc does it right now, not that it must be that way.
>
> > Do you expect all bluetooth input devices be presented
> > as a single blob just because they happen to talk to the sane receiver
> > in yoru laptop? Do you expect your USB mouse and keyboard be merged
> > together just because they end up being serviced by the same host
> > controller? If not why remotes should be any different?
>
> A bluetooth remote has a specific device ID that the receiver has to
> pair with. Your usb mouse and keyboard each have specific device IDs.
> A usb IR *receiver* has a specific device ID, the remotes do not. So
> there's the major difference from your examples.
>

Not exactly... I can have 2 identical USB keyboadrs form the same
manufacturer and they will still be treated separately. BT has session
ID to help distinguish between devices.

> > Now I understand that if 2 remotes send completely identical signals we
> > won't be able to separete them, but in cases when we can I think we
> > should.
>
> I don't have a problem with that, if its a truly desired feature. But
> for the most part, I don't see the point. Generally, you go from
> having multiple remotes, one per device (where "device" is your TV,
> amplifier, set top box, htpc, etc), to having a single universal
> remote that controls all of those devices. But for each device (IR
> receiver), *one* IR command set. The desire to use multiple distinct
> remotes with a single IR receiver doesn't make sense to me. Perhaps
> I'm just not creative enough in my use of IR. :)

Didn't Jon posted his example whith programmable remote pretending to be
several separate remotes (depending on the mode of operation) so that
several devices/applications can be controlled without interfering with
each other?

--
Dmitry
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Dmitry Torokhov on
On Wed, Dec 02, 2009 at 03:42:13PM -0500, Jarod Wilson wrote:
> On Dec 2, 2009, at 3:14 PM, Dmitry Torokhov wrote:
>
> > On Wed, Dec 02, 2009 at 03:04:30PM -0500, Jarod Wilson wrote:
> >> On Dec 2, 2009, at 2:56 PM, Dmitry Torokhov wrote:
> >>
> >>> On Wed, Dec 02, 2009 at 02:22:18PM -0500, Jarod Wilson wrote:
> >>>> On 12/2/09 12:30 PM, Jon Smirl wrote:
> >>>>>>>> (for each remote/substream that they can recognize).
> >>>>>>>>>
> >>>>>>>>> I'm assuming that, by remote, you're referring to a remote receiver (and not to
> >>>>>>>>> the remote itself), right?
> >>>>>>>
> >>>>>>> If we could separate by remote transmitter that would be the best I
> >>>>>>> think, but I understand that it is rarely possible?
> >>>>>
> >>>>> The code I posted using configfs did that. Instead of making apps IR
> >>>>> aware it mapped the vendor/device/command triplets into standard Linux
> >>>>> keycodes. Each remote was its own evdev device.
> >>>>
> >>>> Note, of course, that you can only do that iff each remote uses distinct
> >>>> triplets. A good portion of mythtv users use a universal of some sort,
> >>>> programmed to emulate another remote, such as the mce remote bundled
> >>>> with mceusb transceivers, or the imon remote bundled with most imon
> >>>> receivers. I do just that myself.
> >>>>
> >>>> Personally, I've always considered the driver/interface to be the
> >>>> receiver, not the remote. The lirc drivers operate at the receiver
> >>>> level, anyway, and the distinction between different remotes is made by
> >>>> the lirc daemon.
> >>>
> >>> The fact that lirc does it this way does not necessarily mean it is the
> >>> most corerct way.
> >>
> >> No, I know that, I'm just saying that's how I've always looked at it, and that's how lirc does it right now, not that it must be that way.
> >>
> >>> Do you expect all bluetooth input devices be presented
> >>> as a single blob just because they happen to talk to the sane receiver
> >>> in yoru laptop? Do you expect your USB mouse and keyboard be merged
> >>> together just because they end up being serviced by the same host
> >>> controller? If not why remotes should be any different?
> >>
> >> A bluetooth remote has a specific device ID that the receiver has to
> >> pair with. Your usb mouse and keyboard each have specific device IDs.
> >> A usb IR *receiver* has a specific device ID, the remotes do not. So
> >> there's the major difference from your examples.
> >>
> >
> > Not exactly... I can have 2 identical USB keyboadrs form the same
> > manufacturer and they will still be treated separately. BT has session
> > ID to help distinguish between devices.
>
> Semantics. :)
>
> My main point is that each of these devices has device ID that can be determined without having to first do some protocol analysis and table lookups to figure out which "device" some random IR input is actually coming from.
>

Heh, right back at ya ;) The fact that you need to do some more work
to separate 2 physical devices does not mean it should not be done.

--
Dmitry
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/