Message ID | 1372337366-9286-38-git-send-email-nick.dyer@itdev.co.uk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Jun 27, 2013 at 01:49:12PM +0100, Nick Dyer wrote: > The atmel touch messages contain orientation information as a byte in a packed > format which can be passed straight on to Android if the input device > configuration is correct, see > http://source.android.com/tech/input/touch-devices.html#touchorientationcalibration > > This requires vector reports to be enabled in maXTouch config (zero DISVECT > bit in T9 CTRL field) > > Android converts the format in frameworks/base/services/input/Input.cpp, > search for ORIENTATION_CALIBRATION_VECTOR. How does this compare to the input mt documentation? > > Signed-off-by: Nick Dyer <nick.dyer@itdev.co.uk> > Acked-by: Benson Leung <bleung@chromium.org> > --- > drivers/input/touchscreen/atmel_mxt_ts.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c > index 1c5e640..9188cf7 100644 > --- a/drivers/input/touchscreen/atmel_mxt_ts.c > +++ b/drivers/input/touchscreen/atmel_mxt_ts.c > @@ -716,6 +716,7 @@ static void mxt_proc_t9_message(struct mxt_data *data, u8 *message) > int y; > int area; > int amplitude; > + u8 vector; > > /* do not report events if input device not yet registered */ > if (!data->enable_reporting) > @@ -734,9 +735,10 @@ static void mxt_proc_t9_message(struct mxt_data *data, u8 *message) > > area = message[5]; > amplitude = message[6]; > + vector = message[7]; > > dev_dbg(dev, > - "[%u] %c%c%c%c%c%c%c%c x: %5u y: %5u area: %3u amp: %3u\n", > + "[%u] %c%c%c%c%c%c%c%c x: %5u y: %5u area: %3u amp: %3u vector: %02X\n", > id, > (status & MXT_T9_DETECT) ? 'D' : '.', > (status & MXT_T9_PRESS) ? 'P' : '.', > @@ -746,7 +748,7 @@ static void mxt_proc_t9_message(struct mxt_data *data, u8 *message) > (status & MXT_T9_AMP) ? 'A' : '.', > (status & MXT_T9_SUPPRESS) ? 'S' : '.', > (status & MXT_T9_UNGRIP) ? 'U' : '.', > - x, y, area, amplitude); > + x, y, area, amplitude, vector); > > input_mt_slot(input_dev, id); > > @@ -766,6 +768,7 @@ static void mxt_proc_t9_message(struct mxt_data *data, u8 *message) > input_report_abs(input_dev, ABS_MT_POSITION_Y, y); > input_report_abs(input_dev, ABS_MT_PRESSURE, amplitude); > input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, area); > + input_report_abs(input_dev, ABS_MT_ORIENTATION, vector); > } else { > /* Touch no longer active, close out slot */ > input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 0); > @@ -2100,6 +2103,8 @@ static int mxt_initialize_t9_input_device(struct mxt_data *data) > 0, data->max_y, 0, 0); > input_set_abs_params(input_dev, ABS_MT_PRESSURE, > 0, 255, 0, 0); > + input_set_abs_params(input_dev, ABS_MT_ORIENTATION, > + 0, 255, 0, 0); > > input_set_drvdata(input_dev, data); > > -- > 1.7.10.4 > Thanks, Henrik -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
rydberg@euromail.se wrote: > On Thu, Jun 27, 2013 at 01:49:12PM +0100, Nick Dyer wrote: >> The atmel touch messages contain orientation information as a byte in a packed >> format which can be passed straight on to Android if the input device >> configuration is correct, see >> http://source.android.com/tech/input/touch-devices.html#touchorientationcalibration Except they've changed the URL, should be: https://source.android.com/devices/tech/input/touch-devices.html#touchorientationcalibration The Atmel format is two 4-bit signed values packed into 1 byte, you use inverse tan to work out the angle, and pythagoras theorem to work out the magnitude of the vector (giving a confidence level) >> This requires vector reports to be enabled in maXTouch config (zero DISVECT >> bit in T9 CTRL field) >> >> Android converts the format in frameworks/base/services/input/Input.cpp, >> search for ORIENTATION_CALIBRATION_VECTOR. > > How does this compare to the input mt documentation? http://lxr.free-electrons.com/source/Documentation/input/multi-touch-protocol.txt#L263 So yes, we don't meet the documented format. Options: 1. Leave out this patch entirely and support out of tree 2. Update multi-touch-protocol.txt to include the Atmel format 3. Convert in driver to match documented protocol. Presumably via a LUT of the 256 possible values. Although this loses the confidence level that is implied. 4. Getting the firmware changed is not a valid option I'm afraid (too many devices already out there). Which do you prefer (I suspect 3) ? -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c index 1c5e640..9188cf7 100644 --- a/drivers/input/touchscreen/atmel_mxt_ts.c +++ b/drivers/input/touchscreen/atmel_mxt_ts.c @@ -716,6 +716,7 @@ static void mxt_proc_t9_message(struct mxt_data *data, u8 *message) int y; int area; int amplitude; + u8 vector; /* do not report events if input device not yet registered */ if (!data->enable_reporting) @@ -734,9 +735,10 @@ static void mxt_proc_t9_message(struct mxt_data *data, u8 *message) area = message[5]; amplitude = message[6]; + vector = message[7]; dev_dbg(dev, - "[%u] %c%c%c%c%c%c%c%c x: %5u y: %5u area: %3u amp: %3u\n", + "[%u] %c%c%c%c%c%c%c%c x: %5u y: %5u area: %3u amp: %3u vector: %02X\n", id, (status & MXT_T9_DETECT) ? 'D' : '.', (status & MXT_T9_PRESS) ? 'P' : '.', @@ -746,7 +748,7 @@ static void mxt_proc_t9_message(struct mxt_data *data, u8 *message) (status & MXT_T9_AMP) ? 'A' : '.', (status & MXT_T9_SUPPRESS) ? 'S' : '.', (status & MXT_T9_UNGRIP) ? 'U' : '.', - x, y, area, amplitude); + x, y, area, amplitude, vector); input_mt_slot(input_dev, id); @@ -766,6 +768,7 @@ static void mxt_proc_t9_message(struct mxt_data *data, u8 *message) input_report_abs(input_dev, ABS_MT_POSITION_Y, y); input_report_abs(input_dev, ABS_MT_PRESSURE, amplitude); input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, area); + input_report_abs(input_dev, ABS_MT_ORIENTATION, vector); } else { /* Touch no longer active, close out slot */ input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 0); @@ -2100,6 +2103,8 @@ static int mxt_initialize_t9_input_device(struct mxt_data *data) 0, data->max_y, 0, 0); input_set_abs_params(input_dev, ABS_MT_PRESSURE, 0, 255, 0, 0); + input_set_abs_params(input_dev, ABS_MT_ORIENTATION, + 0, 255, 0, 0); input_set_drvdata(input_dev, data);