On 29/12/14 18:13, Tirdea, Irina wrote: > > >> -----Original Message----- >> From: Jonathan Cameron [mailto:jic23@xxxxxxxxxx] >> Sent: 26 December, 2014 15:28 >> To: Tirdea, Irina; linux-iio@xxxxxxxxxxxxxxx >> Cc: linux-kernel@xxxxxxxxxxxxxxx; Dogaru, Vlad; Baluta, Daniel; Hartmut Knaack; Lars-Peter Clausen; Peter Meerwald >> Subject: Re: [PATCH 3/8] iio: core: Introduce SPEED channel type >> >> On 19/12/14 22:57, Irina Tirdea wrote: >>> Some devices export the current speed value of the user. >>> >>> One of this devices is Freescale's MMA9553L >>> (http://www.freescale.com/files/sensors/doc/ref_manual/MMA9553LSWRM.pdf) >>> that computes the speed of the user based on the number of steps and >>> stride length. >>> >>> Introduce a new channel type SPEED to export these values. >>> >> A fun question raised by this is whether we are going to end up with >> both speed and velocity (depending on whether it is signed or not). >> I suppose there isn't much to be done about that though and this looks fine >> to me (as does the previous one). > > We might be able to unify speed and velocity if we use modifiers. > > I am not sure how a device would export velocity information, but I > assume it would be similar to acceleration (since we are talking > about a vector as well). In this case we would need one channel type > IIO_VELOCITY with modifiers for the 3 axes (IIO_MOD_X, IIO_MOD_Y, > IIO_MOD_Z). We can further compute speed as the magnitude or the norm > of the velocity vector (root of the sum squared values for x, y, z), > so we can export it as an additional modifier IIO_MOD_NORM. Good, except for the last bit. We already have IIO_MOD_ROOT_SUM_SQUARED_X_Y so should add IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z for 3D devices and use that. A little confusing perhaps for people just looking for a speed though. Meh. Most people will use this through a library anyway so that can wrap up the measurement as speed if it wants to. Note resulting attribute names will end up as the somewhat convoluted in_velocity_sqrt(x^2+y^2+z^2)_* I suppose that's clear enough... > > The pedometer only gives speed information without keeping track of > the direction, so in this case we will have one channel IIO_VELOCITY > with one modifier IIO_MOD_NORM. > > Would this be a better approach than just exporting IIO_SPEED?> Saves us some confusion later, so yes I prefer this. > Thanks, > Irina > >>> Signed-off-by: Irina Tirdea <irina.tirdea@xxxxxxxxx> >>> --- >>> Documentation/ABI/testing/sysfs-bus-iio | 9 +++++++++ >>> drivers/iio/industrialio-core.c | 1 + >>> include/linux/iio/types.h | 1 + >>> 3 files changed, 11 insertions(+) >>> >>> diff --git a/Documentation/ABI/testing/sysfs-bus-iio b/Documentation/ABI/testing/sysfs-bus-iio >>> index a5c1dcc..07acef7 100644 >>> --- a/Documentation/ABI/testing/sysfs-bus-iio >>> +++ b/Documentation/ABI/testing/sysfs-bus-iio >>> @@ -295,6 +295,7 @@ What: /sys/bus/iio/devices/iio:deviceX/in_rot_from_north_true_tilt_comp_scale >>> What: /sys/bus/iio/devices/iio:deviceX/in_pressureY_scale >>> What: /sys/bus/iio/devices/iio:deviceX/in_pressure_scale >>> What: /sys/bus/iio/devices/iio:deviceX/in_humidityrelative_scale >>> +What: /sys/bus/iio/devices/iio:deviceX/in_speed_scale >>> KernelVersion: 2.6.35 >>> Contact: linux-iio@xxxxxxxxxxxxxxx >>> Description: >>> @@ -1146,6 +1147,14 @@ Description: >>> present, output should be considered as processed with the >>> unit in milliamps. >>> >>> +What: /sys/.../iio:deviceX/in_speed_input >>> +What: /sys/.../iio:deviceX/in_speed_raw >>> +KernelVersion: 3.19 >>> +Contact: linux-iio@xxxxxxxxxxxxxxx >>> +Description: >>> + This attribute is used to read the current speed value of the user. >>> + Units after application of scale are m/s. >>> + >>> What: /sys/.../iio:deviceX/in_steps_en >>> KernelVersion: 3.19 >>> Contact: linux-iio@xxxxxxxxxxxxxxx >>> diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c >>> index 4a10d31..5e50aca 100644 >>> --- a/drivers/iio/industrialio-core.c >>> +++ b/drivers/iio/industrialio-core.c >>> @@ -74,6 +74,7 @@ static const char * const iio_chan_type_name_spec[] = { >>> [IIO_STEPS] = "steps", >>> [IIO_CALORIES] = "calories", >>> [IIO_DISTANCE] = "distance", >>> + [IIO_SPEED] = "speed", >>> }; >>> >>> static const char * const iio_modifier_names[] = { >>> diff --git a/include/linux/iio/types.h b/include/linux/iio/types.h >>> index b98f751..c848f45 100644 >>> --- a/include/linux/iio/types.h >>> +++ b/include/linux/iio/types.h >>> @@ -34,6 +34,7 @@ enum iio_chan_type { >>> IIO_STEPS, >>> IIO_CALORIES, >>> IIO_DISTANCE, >>> + IIO_SPEED, >>> }; >>> >>> enum iio_modifier { >>> > -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html