summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorGwendal Grignou <gwendal@chromium.org>2015-08-30 21:07:03 -0700
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2016-11-12 19:20:58 +0000
commita06e663e35c34319847660e3ef9f52fe56c9f1a0 (patch)
treeefffdef635c342a291b30988a08b50ac013135d3 /util
parent2db2816ae61c0d62d191ceffa34b5ec22ab31932 (diff)
downloadchrome-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.c54
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,
+ &param, 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,
+ &param, 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]);
}