From: Angela Yan on
Hi All,

I have some queries here regarding the DDK's firefly example.

In its vfeature.cpp, it sends

IOCTL_HID_GET_COLLECTION_INFORMATION
IOCTL_HID_GET_COLLECTION_DESCRIPTOR
IOCTL_HID_SET_FEATURE

to the Top most driver of the driver stack instead of the one just below the
firefily filter.

I just wonder why it wants to send the top most driver of the driver stack?

Is it compulsory, or is it a norm to do so for these calls? Else, in what
situation would a filter driver send these IRPs all the way up? Because some
driver in the stack above the filter driver will handle these calls?

And, the TAILLIGHT_PAGE and TAILLIGHT_FEATURE are custom usage page ID and
usage ID. What are the vedor specific range for them?

Why the firefly doesn't need to set the usage of the page ID and usage ID
beforehand if the taillight is turning off?

Last question, will HidClass block custom IOCTL call?

Thanks in advance.

Angela



From: Doron Holan [MS] on
it sends them to the top of the stack because all i/o goes through the top
of the stack. IIRC, it sends it to the devobj that it got from
IoGetDeviceObjectPointer. you should follow the rules and do the same

> And, the TAILLIGHT_PAGE and TAILLIGHT_FEATURE are custom usage page ID and
> usage ID. What are the vedor specific range for them?
>
i don't understand the question about vendor ranges with usage pages. there
are defined pages by the spec and those left up to the particular device
manufacturer.

> Why the firefly doesn't need to set the usage of the page ID and usage ID
> beforehand if the taillight is turning off?
probably b/c the the buffer contains the report ID already and if everything
else is zero, it is turned off

> Last question, will HidClass block custom IOCTL call?
do you mean will hidclas block a custom IOCTL sent by a driver to the hid
miniport? if so, yes, it will fail. the HID PDO will fail all IOCTLs it
does not know about.

d

--
Please do not send e-mail directly to this alias. this alias is for
newsgroup purposes only.
This posting is provided "AS IS" with no warranties, and confers no rights.


"Angela Yan" <yanyan9(a)hotmail.com> wrote in message
news:uYBMBSwpFHA.3316(a)TK2MSFTNGP14.phx.gbl...
> Hi All,
>
> I have some queries here regarding the DDK's firefly example.
>
> In its vfeature.cpp, it sends
>
> IOCTL_HID_GET_COLLECTION_INFORMATION
> IOCTL_HID_GET_COLLECTION_DESCRIPTOR
> IOCTL_HID_SET_FEATURE
>
> to the Top most driver of the driver stack instead of the one just below
> the firefily filter.
>
> I just wonder why it wants to send the top most driver of the driver
> stack?
>
> Is it compulsory, or is it a norm to do so for these calls? Else, in what
> situation would a filter driver send these IRPs all the way up? Because
> some driver in the stack above the filter driver will handle these calls?
>
> And, the TAILLIGHT_PAGE and TAILLIGHT_FEATURE are custom usage page ID and
> usage ID. What are the vedor specific range for them?
>
> Why the firefly doesn't need to set the usage of the page ID and usage ID
> beforehand if the taillight is turning off?
>
> Last question, will HidClass block custom IOCTL call?
>
> Thanks in advance.
>
> Angela
>
>
>


From: Angela Yan on
Hi,

Thank you, Doron. You are very helpful. :) I still have some doubts on
HidClass
and its mini driver behavior. Forgive me if I ask silly questions.

>> Last question, will HidClass block custom IOCTL call?
> do you mean will hidclas block a custom IOCTL sent by a driver to the hid
> miniport? if so, yes, it will fail. the HID PDO will fail all IOCTLs it
> does not know about.

This behavior of HidClass would make me have some silly thoughts. Eg. how
can
the Hid minidriver inform the upper filter, such as firefly, of an occurance
of
a user input event. Currently for mouse devices, firefly can access the user
input event through MouFilter_ServiceCallback(). But what if it has a custom
user input event that is not included in the PMOUSE_INPUT_DATA struct?

Since HidClass blocks custom IOCTL call, firefly cannot send a custom IOCTL
to the mini driver, mini driver just marks it pending and complete it upon
receiving
a user input event from bus driver.

Or, is it possible for firefly to send an asynch IRP for
IOCTL_HID_GET_FEATURE call
then the mini driver just marks it pending and retun it upon receiving an
event??
In this case, will HidClass have some timeout scheme for
IOCTL_HID_GET_FEATURE call?

Or, is there any other strategy can be used for this kind of situation? From
Oney's
book, I think probably an EDO (Control device object) from the Hid
minidriver can
accomplish that. But, is there any 'normal' way to do this?

Thanks in advance.

Regards,
Angela






"Doron Holan [MS]" <doronh(a)nospam.microsoft.com> wrote in message
news:u7IlQqypFHA.3180(a)TK2MSFTNGP15.phx.gbl...
> it sends them to the top of the stack because all i/o goes through the top
> of the stack. IIRC, it sends it to the devobj that it got from
> IoGetDeviceObjectPointer. you should follow the rules and do the same
>
>> And, the TAILLIGHT_PAGE and TAILLIGHT_FEATURE are custom usage page ID
>> and usage ID. What are the vedor specific range for them?
>>
> i don't understand the question about vendor ranges with usage pages.
> there are defined pages by the spec and those left up to the particular
> device manufacturer.
>
>> Why the firefly doesn't need to set the usage of the page ID and usage ID
>> beforehand if the taillight is turning off?
> probably b/c the the buffer contains the report ID already and if
> everything else is zero, it is turned off
>
>> Last question, will HidClass block custom IOCTL call?
> do you mean will hidclas block a custom IOCTL sent by a driver to the hid
> miniport? if so, yes, it will fail. the HID PDO will fail all IOCTLs it
> does not know about.
>
> d
>
> --
> Please do not send e-mail directly to this alias. this alias is for
> newsgroup purposes only.
> This posting is provided "AS IS" with no warranties, and confers no
> rights.
>

From: Doron Holan [MS] on
are you writing the HID miniport driver? a control devobj will not work
with a HID miniport, HIDclass owns the dispatch table and the devobj and it
does not support control devices. you talk to your hid miniport through HID
reports or features. if you have custom functionality/settings in your hid
miniport that you want to manipulate, report another top level collection
(TLC) and talk to that 2nd TLC.

IOCTL_HID_GET_FEATURE will not timeout, you must implement your own time
out.

how does spontaneous async data get from the device to the driver? hidclass
continuously sends reads dwon the device and queues up the data returned to
each TLC. the client can then open the TLC and read that data. mouhid
continuously sends read reports to the HIDClass PDO for its TLC.

d
--
Please do not send e-mail directly to this alias. this alias is for
newsgroup purposes only.
This posting is provided "AS IS" with no warranties, and confers no rights.


"Angela Yan" <yanyan9(a)hotmail.com> wrote in message
news:ekSFt2FqFHA.3112(a)TK2MSFTNGP12.phx.gbl...
> Hi,
>
> Thank you, Doron. You are very helpful. :) I still have some doubts on
> HidClass
> and its mini driver behavior. Forgive me if I ask silly questions.
>
>>> Last question, will HidClass block custom IOCTL call?
>> do you mean will hidclas block a custom IOCTL sent by a driver to the hid
>> miniport? if so, yes, it will fail. the HID PDO will fail all IOCTLs it
>> does not know about.
>
> This behavior of HidClass would make me have some silly thoughts. Eg. how
> can
> the Hid minidriver inform the upper filter, such as firefly, of an
> occurance of
> a user input event. Currently for mouse devices, firefly can access the
> user
> input event through MouFilter_ServiceCallback(). But what if it has a
> custom
> user input event that is not included in the PMOUSE_INPUT_DATA struct?
>
> Since HidClass blocks custom IOCTL call, firefly cannot send a custom
> IOCTL
> to the mini driver, mini driver just marks it pending and complete it upon
> receiving
> a user input event from bus driver.
>
> Or, is it possible for firefly to send an asynch IRP for
> IOCTL_HID_GET_FEATURE call
> then the mini driver just marks it pending and retun it upon receiving an
> event??
> In this case, will HidClass have some timeout scheme for
> IOCTL_HID_GET_FEATURE call?
>
> Or, is there any other strategy can be used for this kind of situation?
> From Oney's
> book, I think probably an EDO (Control device object) from the Hid
> minidriver can
> accomplish that. But, is there any 'normal' way to do this?
>
> Thanks in advance.
>
> Regards,
> Angela
>
>
>
>
>
>
> "Doron Holan [MS]" <doronh(a)nospam.microsoft.com> wrote in message
> news:u7IlQqypFHA.3180(a)TK2MSFTNGP15.phx.gbl...
>> it sends them to the top of the stack because all i/o goes through the
>> top of the stack. IIRC, it sends it to the devobj that it got from
>> IoGetDeviceObjectPointer. you should follow the rules and do the same
>>
>>> And, the TAILLIGHT_PAGE and TAILLIGHT_FEATURE are custom usage page ID
>>> and usage ID. What are the vedor specific range for them?
>>>
>> i don't understand the question about vendor ranges with usage pages.
>> there are defined pages by the spec and those left up to the particular
>> device manufacturer.
>>
>>> Why the firefly doesn't need to set the usage of the page ID and usage
>>> ID beforehand if the taillight is turning off?
>> probably b/c the the buffer contains the report ID already and if
>> everything else is zero, it is turned off
>>
>>> Last question, will HidClass block custom IOCTL call?
>> do you mean will hidclas block a custom IOCTL sent by a driver to the hid
>> miniport? if so, yes, it will fail. the HID PDO will fail all IOCTLs it
>> does not know about.
>>
>> d
>>
>> --
>> Please do not send e-mail directly to this alias. this alias is for
>> newsgroup purposes only.
>> This posting is provided "AS IS" with no warranties, and confers no
>> rights.
>>
>


From: Angela Yan on
Thanks, Doron. You're very helpful. :)

Angela


"Doron Holan [MS]" <doronh(a)nospam.microsoft.com> wrote in message
news:uQvoXCUqFHA.3136(a)TK2MSFTNGP11.phx.gbl...
> are you writing the HID miniport driver? a control devobj will not work
> with a HID miniport, HIDclass owns the dispatch table and the devobj and
> it does not support control devices. you talk to your hid miniport
> through HID reports or features. if you have custom
> functionality/settings in your hid miniport that you want to manipulate,
> report another top level collection (TLC) and talk to that 2nd TLC.
>
> IOCTL_HID_GET_FEATURE will not timeout, you must implement your own time
> out.
>
> how does spontaneous async data get from the device to the driver?
> hidclass continuously sends reads dwon the device and queues up the data
> returned to each TLC. the client can then open the TLC and read that
> data. mouhid continuously sends read reports to the HIDClass PDO for its
> TLC.
>
> d
> --
> Please do not send e-mail directly to this alias. this alias is for
> newsgroup purposes only.
> This posting is provided "AS IS" with no warranties, and confers no
> rights.
>
>
> "Angela Yan" <yanyan9(a)hotmail.com> wrote in message
> news:ekSFt2FqFHA.3112(a)TK2MSFTNGP12.phx.gbl...
>> Hi,
>>
>> Thank you, Doron. You are very helpful. :) I still have some doubts on
>> HidClass
>> and its mini driver behavior. Forgive me if I ask silly questions.
>>
>>>> Last question, will HidClass block custom IOCTL call?
>>> do you mean will hidclas block a custom IOCTL sent by a driver to the
>>> hid miniport? if so, yes, it will fail. the HID PDO will fail all
>>> IOCTLs it does not know about.
>>
>> This behavior of HidClass would make me have some silly thoughts. Eg. how
>> can
>> the Hid minidriver inform the upper filter, such as firefly, of an
>> occurance of
>> a user input event. Currently for mouse devices, firefly can access the
>> user
>> input event through MouFilter_ServiceCallback(). But what if it has a
>> custom
>> user input event that is not included in the PMOUSE_INPUT_DATA struct?
>>
>> Since HidClass blocks custom IOCTL call, firefly cannot send a custom
>> IOCTL
>> to the mini driver, mini driver just marks it pending and complete it
>> upon receiving
>> a user input event from bus driver.
>>
>> Or, is it possible for firefly to send an asynch IRP for
>> IOCTL_HID_GET_FEATURE call
>> then the mini driver just marks it pending and retun it upon receiving an
>> event??
>> In this case, will HidClass have some timeout scheme for
>> IOCTL_HID_GET_FEATURE call?
>>
>> Or, is there any other strategy can be used for this kind of situation?
>> From Oney's
>> book, I think probably an EDO (Control device object) from the Hid
>> minidriver can
>> accomplish that. But, is there any 'normal' way to do this?
>>
>> Thanks in advance.
>>
>> Regards,
>> Angela
>>
>>
>>
>>
>>
>>
>> "Doron Holan [MS]" <doronh(a)nospam.microsoft.com> wrote in message
>> news:u7IlQqypFHA.3180(a)TK2MSFTNGP15.phx.gbl...
>>> it sends them to the top of the stack because all i/o goes through the
>>> top of the stack. IIRC, it sends it to the devobj that it got from
>>> IoGetDeviceObjectPointer. you should follow the rules and do the same
>>>
>>>> And, the TAILLIGHT_PAGE and TAILLIGHT_FEATURE are custom usage page ID
>>>> and usage ID. What are the vedor specific range for them?
>>>>
>>> i don't understand the question about vendor ranges with usage pages.
>>> there are defined pages by the spec and those left up to the particular
>>> device manufacturer.
>>>
>>>> Why the firefly doesn't need to set the usage of the page ID and usage
>>>> ID beforehand if the taillight is turning off?
>>> probably b/c the the buffer contains the report ID already and if
>>> everything else is zero, it is turned off
>>>
>>>> Last question, will HidClass block custom IOCTL call?
>>> do you mean will hidclas block a custom IOCTL sent by a driver to the
>>> hid miniport? if so, yes, it will fail. the HID PDO will fail all
>>> IOCTLs it does not know about.
>>>
>>> d
>>>
>>> --
>>> Please do not send e-mail directly to this alias. this alias is for
>>> newsgroup purposes only.
>>> This posting is provided "AS IS" with no warranties, and confers no
>>> rights.
>>>
>>
>
>