diff options
author | Gwendal Grignou <gwendal@chromium.org> | 2015-08-30 21:07:03 -0700 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2016-11-12 19:20:58 +0000 |
commit | a06e663e35c34319847660e3ef9f52fe56c9f1a0 (patch) | |
tree | efffdef635c342a291b30988a08b50ac013135d3 /util | |
parent | 2db2816ae61c0d62d191ceffa34b5ec22ab31932 (diff) | |
download | chrome-ec-a06e663e35c34319847660e3ef9f52fe56c9f1a0.tar.gz |
BACKPORT: motion: Add Gesture Interface
Add an interface with the host to set up gesture recognition.
Today, only significant motion is supported.
Add a virtual sensor for concentrating gesture support from host.
BRANCH=smaug, cyan
BUG=b:23570481, b:27849483
TEST=On ryu, enable significant motion from host.
Change-Id: I906fa2d2d7b4ca2771ea2f58b91de8d97bf4e2e3
Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/296213
(cherry picked from commit 6b5a49ef15354c5b31be51f32006dbb4d7dc7c62)
Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/359375
Reviewed-on: https://chromium-review.googlesource.com/409462
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Diffstat (limited to 'util')
-rw-r--r-- | util/ectool.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/util/ectool.c b/util/ectool.c index edd6463d12..2d227a80fd 100644 --- a/util/ectool.c +++ b/util/ectool.c @@ -3265,6 +3265,8 @@ static const struct { MS_SIZES(fifo_read), MS_SIZES(perform_calib), MS_SIZES(sensor_offset), + MS_SIZES(list_activities), + MS_SIZES(set_activity), }; BUILD_ASSERT(ARRAY_SIZE(ms_command_sizes) == MOTIONSENSE_NUM_CMDS); #undef MS_SIZES @@ -3286,10 +3288,21 @@ static int ms_help(const char *cmd) printf(" %s fifo_read MAX_DATA - read fifo data\n", cmd); printf(" %s fifo_flush NUM - trigger fifo interrupt\n", cmd); + printf(" %s list_activities NUM - list supported activities\n", + cmd); + printf(" %s set_activity NUM ACT EN - enable/disable activity\n", + cmd); return 0; } +static void motionsense_display_activities(uint32_t activities) +{ + if (activities & (1 << MOTIONSENSE_ACTIVITY_SIG_MOTION)) + printf("%d: Significant motion\n", + MOTIONSENSE_ACTIVITY_SIG_MOTION); +} + static int cmd_motionsense(int argc, char **argv) { int i, rv, status_only = (argc == 2); @@ -3381,6 +3394,18 @@ static int cmd_motionsense(int argc, char **argv) case MOTIONSENSE_TYPE_GYRO: printf("gyro\n"); break; + case MOTIONSENSE_TYPE_MAG: + printf("magnetometer\n"); + break; + case MOTIONSENSE_TYPE_LIGHT: + printf("light\n"); + break; + case MOTIONSENSE_TYPE_PROX: + printf("proximity\n"); + break; + case MOTIONSENSE_TYPE_ACTIVITY: + printf("activity\n"); + break; default: printf("unknown\n"); } @@ -3659,6 +3684,35 @@ static int cmd_motionsense(int argc, char **argv) resp->sensor_offset.temp % 100); return 0; } + + if (argc == 3 && !strcasecmp(argv[1], "list_activities")) { + param.cmd = MOTIONSENSE_CMD_LIST_ACTIVITIES; + param.list_activities.sensor_num = strtol(argv[2], &e, 0); + rv = ec_command(EC_CMD_MOTION_SENSE_CMD, 2, + ¶m, ms_command_sizes[param.cmd].outsize, + resp, ms_command_sizes[param.cmd].insize); + if (rv < 0) + return rv; + + printf("Enabled:\n"); + motionsense_display_activities(resp->list_activities.enabled); + printf("Disabled:\n"); + motionsense_display_activities(resp->list_activities.disabled); + return 0; + } + if (argc == 5 && !strcasecmp(argv[1], "set_activity")) { + param.cmd = MOTIONSENSE_CMD_SET_ACTIVITY; + param.set_activity.sensor_num = strtol(argv[2], &e, 0); + param.set_activity.activity = strtol(argv[3], &e, 0); + param.set_activity.enable = strtol(argv[4], &e, 0); + + rv = ec_command(EC_CMD_MOTION_SENSE_CMD, 2, + ¶m, ms_command_sizes[param.cmd].outsize, + resp, ms_command_sizes[param.cmd].insize); + if (rv < 0) + return rv; + return 0; + } return ms_help(argv[0]); } |