All of lore.kernel.org
 help / color / mirror / Atom feed
* Handling Controllers with Acc/Gyro/Mag via HID system
@ 2015-06-08 15:41 simon
  2015-06-08 22:43 ` Frank Praznik
                   ` (2 more replies)
  0 siblings, 3 replies; 16+ messages in thread
From: simon @ 2015-06-08 15:41 UTC (permalink / raw)
  To: linux-input; +Cc: Frank Praznik

Hi all,
I'm in the process of fixing the HID descriptor for the PS3 Move
Controller. which has a particularly convoluted layout for it's
Accelormeters, Gyros and Magnetometers involving 2 sets of data per output
report.

https://github.com/nitsch/moveonpc/wiki/Input-report

The plan is/was to massage the HID descriptor so the first set of
Accels/Gyro/Mag appear in a set a axis, as a simple way of getting to this
data.

The Magnetometers are only 12 bits, and if 'we' want the HID system to be
able to process these as an axis the data needs to be shuffled. Previously
for the Sony SixAxis Accels was done in 'sony_raw_event'.

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/hid/hid-sony.c?id=refs/tags/v4.1-rc7#n1035


My reshuffle would be:
---
                /* Need to fix order and shared nibble of 12bit Temp/Mags */
                /* 8e 4. .. .. .. .. -> Temp = 0x08E4 */
                /* .. .1 51 .. .. .. -> MagX = 0x0151 */
                /* .. .. .. 02 1. .. -> MagZ = 0x0021 */
                /* .. .. .. .. .2 98 -> MagY = 0x0298 */

                __u8 tmp;
                tmp = rd[38];
                rd[38] = (((rd[37] & 0xF0) >> 4) | ((rd[39] & 0x0F) << 4));
                rd[37] = (((tmp & 0xF0) >> 4) | ((rd[37] & 0x0F) << 4));
                rd[39] = (((rd[39] & 0xF0) >> 4) | ((tmp & 0x0F) << 4));

                tmp = rd[41];
                rd[41] = (((rd[40] & 0xF0) >> 4) | ((rd[42] & 0x0F) << 4));
                rd[40] = (((tmp & 0xF0) >> 4) | ((rd[40] & 0x0F) << 4));
                rd[42] = (((rd[42] & 0xF0) >> 4) | ((tmp & 0x0F) << 4));
---

This works, however I have noticed that this affects/reshuffles the output
of '/dev/hidraw0', which would 'corrupt' the data going into the existing
user-mode drivers (such as psmoveapi).

Is there a 'better' place/way to reshuffle this data, or is this just how
it needs to be?

Given that more controllers are coming with 'motion' controls, is there a
framework in place for unifying support?

Cheers,
Simon.





^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2015-06-21 13:16 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-08 15:41 Handling Controllers with Acc/Gyro/Mag via HID system simon
2015-06-08 22:43 ` Frank Praznik
2015-06-11 14:48 ` [RFC] HID: hid-sony: Add basic iio-subsystem reading of SixAxis Accelerometers Simon Wood
     [not found] ` <195dff9bd065db7e618280cb7c6eb5a9.squirrel-wM4F9T/ekXmXDw4h08c5KA@public.gmane.org>
2015-06-11 14:54   ` Simon Wood
2015-06-11 14:54     ` Simon Wood
2015-06-11 15:07     ` Bastien Nocera
2015-06-14 14:53     ` Jonathan Cameron
2015-06-14 17:25       ` simon
     [not found]         ` <d6702f5d19d2baea80132666fcf7654a.squirrel-wM4F9T/ekXmXDw4h08c5KA@public.gmane.org>
2015-06-14 17:57           ` Jonathan Cameron
2015-06-14 17:57             ` Jonathan Cameron
2015-06-15 18:14             ` Srinivas Pandruvada
     [not found]               ` <1434392064.2353.77.camel-hINH/TbAiWqaJgj69oe+EDMJUdESFZ8XQQ4Iyu8u01E@public.gmane.org>
2015-06-21 13:16                 ` Jonathan Cameron
2015-06-21 13:16                   ` Jonathan Cameron
2015-06-18  6:15             ` simon
     [not found]               ` <a740eca098128c7a830db825d7c0288c.squirrel-wM4F9T/ekXmXDw4h08c5KA@public.gmane.org>
2015-06-21 13:12                 ` Jonathan Cameron
2015-06-21 13:12                   ` Jonathan Cameron

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.