Re: Query Regarding HID input Report Descriptor

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

 



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




[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