Re: Query Regarding HID input Report Descriptor

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Srinivias

On 5/18/2019 12:23 AM, Srinivas Pandruvada wrote:
> [CAUTION: External Email]
> 
> Hi Nehal,
> 
> On Fri, 2019-05-17 at 17:46 +0000, Shah, Nehal-bakulchandra wrote:
>> Hi Srinivas,
>>
>> On 5/17/2019 11:09 PM, Srinivas Pandruvada wrote:
>>> [CAUTION: External Email]
>>>
>>> On Wed, 2019-05-15 at 16:28 +0000, Shah, Nehal-bakulchandra wrote:
>>>> Hi All,
>>>>
>>>>
>>>> I am working on sensor driver for AMD platform and in our
>>>> platform,
>>>> firmware doesn't give data in HID format. So i am writing
>>>> interface
>>>> driver which makes
>>>> firmware data into HID Report format.Now i have taken reference
>>>> from
>>>> HID Usage document and i have created sample descriptor like this
>>>> for
>>>> accel 3d.
>>>>
>>>> static const u8 HID_Sensor_ReportDesc_acc[]=
>>>> {
>>>>       HID_USAGE_PAGE_SENSOR,
>>>>       HID_USAGE_SENSOR_TYPE_MOTION_ACCELEROMETER_3D,
>>>>       HID_COLLECTION(Physical),
>>>>
>>>>       //feature reports (xmit/receive)
>>>>       HID_REPORT_ID(1),
>>>>       HID_USAGE_PAGE_SENSOR,
>>>>       HID_USAGE_SENSOR_PROPERTY_SENSOR_CONNECTION_TYPE,  // NAry
>>>>       HID_LOGICAL_MIN_8(0),
>>>>       HID_LOGICAL_MAX_8(2),
>>>>       HID_REPORT_SIZE(8),
>>>>       HID_REPORT_COUNT(1),
>>>>       HID_COLLECTION(Logical),
>>>>       HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_INTEGRATED_SEL
>>>> ,
>>>>       HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_ATTACHED_SEL,
>>>>       HID_USAGE_SENSOR_PROPERTY_CONNECTION_TYPE_PC_EXTERNAL_SEL,
>>>>       HID_FEATURE(Data_Arr_Abs),
>>>>       HID_END_COLLECTION,
>>>>       HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE,
>>>>       HID_LOGICAL_MIN_8(0),
>>>>       HID_LOGICAL_MAX_8(5),
>>>>       HID_REPORT_SIZE(8),
>>>>       HID_REPORT_COUNT(1),
>>>>       HID_COLLECTION(Logical),
>>>>       HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_SEL,
>>>>       HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_SEL,
>>>>       HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_
>>>> SEL,
>>>>       HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_WAKE_SE
>>>> L,
>>>>       HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_WAKE_S
>>>> EL,
>>>>       HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_
>>>> WAKE
>>>> _SEL,
>>>>       HID_FEATURE(Data_Arr_Abs),
>>>>       HID_END_COLLECTION,
>>>>       HID_USAGE_SENSOR_PROPERTY_POWER_STATE,
>>>>       HID_LOGICAL_MIN_8(0),
>>>>       HID_LOGICAL_MAX_8(5),
>>>>       HID_REPORT_SIZE(8),
>>>>       HID_REPORT_COUNT(1),
>>>>       HID_COLLECTION(Logical),
>>>>       HID_USAGE_SENSOR_PROPERTY_POWER_STATE_UNDEFINED_SEL,
>>>>       HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D0_FULL_POWER_SEL,
>>>>       HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D1_LOW_POWER_SEL,
>>>>       HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D2_STANDBY_WITH_WAKE_
>>>> SEL,
>>>>       HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D3_SLEEP_WITH_WAKE_SE
>>>> L,
>>>>       HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D4_POWER_OFF_SEL,
>>>>       HID_FEATURE(Data_Arr_Abs),
>>>>       HID_END_COLLECTION,
>>>>       HID_USAGE_SENSOR_STATE,
>>>>       HID_LOGICAL_MIN_8(0),
>>>>       HID_LOGICAL_MAX_8(6),
>>>>       HID_REPORT_SIZE(8),
>>>>       HID_REPORT_COUNT(1),
>>>>       HID_COLLECTION(Logical),
>>>>       HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
>>>>       HID_USAGE_SENSOR_STATE_READY_SEL,
>>>>       HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
>>>>       HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
>>>>       HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
>>>>       HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
>>>>       HID_USAGE_SENSOR_STATE_ERROR_SEL,
>>>>       HID_FEATURE(Data_Arr_Abs),
>>>>       HID_END_COLLECTION,
>>>>       HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL,
>>>>       HID_LOGICAL_MIN_8(0),
>>>>       HID_LOGICAL_MAX_32(0xFF,0xFF,0xFF,0xFF),
>>>>       HID_REPORT_SIZE(32),
>>>>       HID_REPORT_COUNT(1),
>>>>       HID_UNIT_EXPONENT(0),
>>>>       HID_FEATURE(Data_Var_Abs),
>>>>       HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_MOTION_ACCELERA
>>>> TION
>>>> ,HID_USAGE_SENSOR_DATA_MOD_CHANGE_SENSITIVITY_ABS),
>>>>       HID_LOGICAL_MIN_8(0),
>>>>       HID_LOGICAL_MAX_16(0xFF,0xFF),
>>>>       HID_REPORT_SIZE(16),
>>>>       HID_REPORT_COUNT(1),
>>>>       HID_UNIT_EXPONENT(0x0E),  // scale default unit "G" to
>>>> provide
>>>> 2 digits past the decimal point
>>>>       HID_FEATURE(Data_Var_Abs),
>>>>       HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_MOTION_ACCELERA
>>>> TION
>>>> ,HID_USAGE_SENSOR_DATA_MOD_MAX),
>>>>       HID_LOGICAL_MIN_16(0x01,0x80), //    LOGICAL_MINIMUM (-
>>>> 32767)
>>>>       HID_LOGICAL_MAX_16(0xFF,0x7F), //    LOGICAL_MAXIMUM
>>>> (32767)
>>>>       HID_REPORT_SIZE(16),
>>>>       HID_REPORT_COUNT(1),
>>>>       HID_UNIT_EXPONENT(0x0E),  // scale default unit "G" to
>>>> provide
>>>> 2 digits past the decimal point
>>>>       HID_FEATURE(Data_Var_Abs),
>>>>       HID_USAGE_SENSOR_DATA(HID_USAGE_SENSOR_DATA_MOTION_ACCELERA
>>>> TION
>>>> ,HID_USAGE_SENSOR_DATA_MOD_MIN),
>>>>       HID_LOGICAL_MIN_16(0x01,0x80), //    LOGICAL_MINIMUM (-
>>>> 32767)
>>>>       HID_LOGICAL_MAX_16(0xFF,0x7F), //    LOGICAL_MAXIMUM
>>>> (32767)
>>>>       HID_REPORT_SIZE(16),
>>>>       HID_REPORT_COUNT(1),
>>>>       HID_UNIT_EXPONENT(0x0E),  // scale default unit "G" to
>>>> provide
>>>> 2 digits past the decimal point
>>>>       HID_FEATURE(Data_Var_Abs),
>>>>
>>>>       //input reports (transmit)
>>>>       HID_USAGE_PAGE_SENSOR,
>>>>       HID_USAGE_SENSOR_STATE,
>>>>       HID_LOGICAL_MIN_8(0),
>>>>       HID_LOGICAL_MAX_8(6),
>>>>       HID_REPORT_SIZE(8),
>>>>       HID_REPORT_COUNT(1),
>>>>       HID_COLLECTION(Logical),
>>>>       HID_USAGE_SENSOR_STATE_UNKNOWN_SEL,
>>>>       HID_USAGE_SENSOR_STATE_READY_SEL,
>>>>       HID_USAGE_SENSOR_STATE_NOT_AVAILABLE_SEL,
>>>>       HID_USAGE_SENSOR_STATE_NO_DATA_SEL,
>>>>       HID_USAGE_SENSOR_STATE_INITIALIZING_SEL,
>>>>       HID_USAGE_SENSOR_STATE_ACCESS_DENIED_SEL,
>>>>       HID_USAGE_SENSOR_STATE_ERROR_SEL,
>>>>       HID_INPUT(Data_Arr_Abs),
>>>>       HID_END_COLLECTION,
>>>>       HID_USAGE_SENSOR_EVENT,
>>>>       HID_LOGICAL_MIN_8(0),
>>>>       HID_LOGICAL_MAX_8(5),
>>>>       HID_REPORT_SIZE(8),
>>>>       HID_REPORT_COUNT(1),
>>>>       HID_COLLECTION(Logical),
>>>>       HID_USAGE_SENSOR_EVENT_UNKNOWN_SEL,
>>>>       HID_USAGE_SENSOR_EVENT_STATE_CHANGED_SEL,
>>>>       HID_USAGE_SENSOR_EVENT_PROPERTY_CHANGED_SEL,
>>>>       HID_USAGE_SENSOR_EVENT_DATA_UPDATED_SEL,
>>>>       HID_USAGE_SENSOR_EVENT_POLL_RESPONSE_SEL,
>>>>       HID_USAGE_SENSOR_EVENT_CHANGE_SENSITIVITY_SEL,
>>>>       HID_INPUT(Data_Arr_Abs),
>>>>       HID_END_COLLECTION,
>>>>       HID_USAGE_SENSOR_DATA_MOTION_ACCELERATION_X_AXIS,
>>>>       HID_LOGICAL_MIN_16(0x01,0x80), //    LOGICAL_MINIMUM (-
>>>> 32767)
>>>>       HID_LOGICAL_MAX_16(0xFF,0x7F), //    LOGICAL_MAXIMUM
>>>> (32767)
>>>>       HID_REPORT_SIZE(16),
>>>>       HID_REPORT_COUNT(1),
>>>>       HID_UNIT_EXPONENT(0x0E),  // scale default unit "G" to
>>>> provide
>>>> 2 digits past the decimal point
>>>>       HID_INPUT(Data_Var_Abs),
>>>>       HID_USAGE_SENSOR_DATA_MOTION_ACCELERATION_Y_AXIS,
>>>>       HID_LOGICAL_MIN_16(0x01,0x80), //    LOGICAL_MINIMUM (-
>>>> 32767)
>>>>       HID_LOGICAL_MAX_16(0xFF,0x7F), //    LOGICAL_MAXIMUM
>>>> (32767)
>>>>       HID_REPORT_SIZE(16),
>>>>       HID_REPORT_COUNT(1),
>>>>       HID_UNIT_EXPONENT(0x0E),  // scale default unit "G" to
>>>> provide
>>>> 2 digits past the decimal point
>>>>       HID_INPUT(Data_Var_Abs),
>>>>       HID_USAGE_SENSOR_DATA_MOTION_ACCELERATION_Z_AXIS,
>>>>       HID_LOGICAL_MIN_16(0x01,0x80), //    LOGICAL_MINIMUM (-
>>>> 32767)
>>>>       HID_LOGICAL_MAX_16(0xFF,0x7F), //    LOGICAL_MAXIMUM
>>>> (32767)
>>>>       HID_REPORT_SIZE(16),
>>>>       HID_REPORT_COUNT(1),
>>>>       HID_UNIT_EXPONENT(0x0E),  // scale default unit "G" to
>>>> provide
>>>> 2 digits past the decimal point
>>>>       HID_INPUT(Data_Var_Abs),
>>>>
>>>>       //include the following datafield if required to support
>>>> the
>>>> shake event
>>>>       HID_USAGE_SENSOR_DATA_MOTION_STATE,
>>>>       HID_LOGICAL_MIN_8(0), // False = Still
>>>>       HID_LOGICAL_MAX_8(1), // True = In Motion
>>>>       HID_REPORT_SIZE(8),
>>>>       HID_REPORT_COUNT(1),
>>>>       HID_INPUT(Data_Var_Abs),
>>>>
>>>>       HID_END_COLLECTION
>>>> };
>>>>
>>>> for Feature report i have created following structure
>>>>
>>>> struct accel3_feature_report
>>>> {
>>>>       //common properties
>>>>       u8          reportid;
>>>>
>>>>       u8          connectiontype;
>>>>       u8          reportstate;
>>>>       u8          powerstate;
>>>>       u8          sensorstate;
>>>>       u32         reportinterval;
>>>>
>>>>       //properties specific to this sensor
>>>>       u16         accelsensitiity;
>>>>       u16        accelmax;
>>>>       u16         accelmin;
>>>>
>>>> } ;
>>>>
>>>> Can some one help me is this the correct way of going forward?
>>>> With
>>>> this i am getting request for feature report and i can see device
>>>> in
>>>> iio bus also but i am not getting call for input report. Please
>>>> help
>>>> me in this regards.
>>>
>>> You will get call for input report when you try to read.
>>>
>>> For example:
>>> #cat in_accel_*_raw
>>>
>>> Thanks,
>>> Srinivas
>>>
>>>
>>
>> Yes today i could get the input report after running above command.
>> So i have question, like in some external sensor hub i have observed
>> that sensor is pushing data to HID Framework and iio-proxy keeps
>> getting updated. But here we need to run the above command and after
>> that iio-proxy is getting updated. Is it the same case in ISH and
>> other design?
> There are two modes in IIO:
> - The raw mode: which is by user doing "cat"
> - The other is read via buffers. In this mode, you enable some channels
> from iio. Here the ISH or usb/i2c-sensor-hub will push the data via
> hid, so that user mode can read data via iio buffers. In this case your
> hub should be able to process the report_interval, report/power state,
> sensitivity etc. Basically when hub notice change in the data it can
> push the data to hid. Here hid core will cause notify function to be
> called with data.
> 
> Thanks,
> Srinivas
> 
> 
>>>>
>>>> Thanks
>>>> Nehal Shah
>>>>
>>>>
>>
>> Regards
>> Nehal Shah
> 
Thanks for all help.Now i am able to get data
properly. Howerver as i understood none of the
data is coming in float and there is no support of
float but my understand says that most of the
sensor data should be in float . can you explain
this please?

regards
Nehal Shah




[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux