summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorChing-Kang Yen <chingkang@chromium.org>2020-10-14 15:57:21 +0800
committerCommit Bot <commit-bot@chromium.org>2020-11-13 06:29:13 +0000
commitb0f1017dd711f095efdac3db4c743e128c499056 (patch)
treef9c4218183062a4f37ddaf64b0ac6c4cd4ba2c83 /util
parent412ace563010211981c83f9063fb2e0ed9c6df3b (diff)
downloadchrome-ec-b0f1017dd711f095efdac3db4c743e128c499056.tar.gz
common: motion_sense: Add spoofing activity
make spoof command able to spoof activity state: ectool motionsense spoof -- NUM activity ACT [EN] [0/1] This commit also remove unused parameter |sensor_num| from list_activities, set_activity, get_activity in ectool. BRANCH=None BUG=b:123434029 TEST=buildall TEST=ectool motionsense spoof 4 activity 4 1 0 ectool motionsense spoof 4 activity 4 ectool motionsense get_activity 4 ectool motionsense spoof 4 activity 4 1 1 ectool motionsense get_activity 4 ectool motionsense spoof 4 activity 4 0 ectool motionsense get_activity 4 ectool motionsense spoof 4 activity 4 1 ectool motionsense get_activity 4 Signed-off-by: Ching-Kang Yen <chingkang@chromium.org> Change-Id: I819c156ae7fe50c5cf6216d0f44012d192fb528e Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2477393 Reviewed-by: Gwendal Grignou <gwendal@chromium.org>
Diffstat (limited to 'util')
-rw-r--r--util/ectool.c101
1 files changed, 76 insertions, 25 deletions
diff --git a/util/ectool.c b/util/ectool.c
index 2cd71eb3d4..f34a7c88c6 100644
--- a/util/ectool.c
+++ b/util/ectool.c
@@ -4972,25 +4972,41 @@ BUILD_ASSERT(ARRAY_SIZE(ms_command_sizes) == MOTIONSENSE_NUM_CMDS);
static int ms_help(const char *cmd)
{
printf("Usage:\n");
- printf(" %s - dump all motion data\n", cmd);
+ printf(" %s - dump all motion data\n",
+ cmd);
printf(" %s active - print active flag\n", cmd);
printf(" %s info NUM - print sensor info\n", cmd);
- printf(" %s ec_rate [RATE_MS] - set/get sample rate\n", cmd);
- printf(" %s odr NUM [ODR [ROUNDUP]] - set/get sensor ODR\n", cmd);
- printf(" %s range NUM [RANGE [ROUNDUP]] - set/get sensor range\n", cmd);
- printf(" %s offset NUM [-- X Y Z [TEMP]] - set/get sensor offset\n", cmd);
- printf(" %s kb_wake NUM - set/get KB wake ang\n", cmd);
+ printf(" %s ec_rate [RATE_MS] - set/get sample rate\n",
+ cmd);
+ printf(" %s odr NUM [ODR [ROUNDUP]] - set/get sensor ODR\n",
+ cmd);
+ printf(" %s range NUM [RANGE [ROUNDUP]] - set/get sensor range\n",
+ cmd);
+ printf(" %s offset NUM [-- X Y Z [TEMP]] - set/get sensor offset\n",
+ cmd);
+ printf(" %s kb_wake NUM - set/get KB wake ang\n",
+ cmd);
printf(" %s fifo_info - print fifo info\n", cmd);
- printf(" %s fifo_int_enable [0/1] - enable/disable/get fifo interrupt "
- "status\n", cmd);
+ printf(" %s fifo_int_enable [0/1] - enable/disable/get fifo "
+ "interrupt status\n", 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);
+ printf(" %s fifo_flush NUM - trigger fifo interrupt\n",
+ cmd);
+ printf(" %s list_activities - list supported "
+ "activities\n", cmd);
+ printf(" %s set_activity ACT EN - enable/disable activity\n",
+ cmd);
+ printf(" %s get_activity ACT - get activity status\n",
+ cmd);
printf(" %s lid_angle - print lid angle\n", cmd);
- printf(" %s spoof -- NUM [0/1] [X Y Z] - enable/disable spoofing\n", cmd);
- printf(" %s tablet_mode_angle ANG HYS - set/get tablet mode angle\n", cmd);
- printf(" %s calibrate NUM - run sensor calibration\n", cmd);
+ printf(" %s spoof -- NUM [0/1] [X Y Z] - enable/disable spoofing\n",
+ cmd);
+ printf(" %s spoof -- NUM activity ACT [0/1] [STATE] - enable/disable "
+ "activity spoofing\n", cmd);
+ printf(" %s tablet_mode_angle ANG HYS - set/get tablet mode "
+ "angle\n", cmd);
+ printf(" %s calibrate NUM - run sensor calibration\n",
+ cmd);
return 0;
}
@@ -5612,9 +5628,8 @@ static int cmd_motionsense(int argc, char **argv)
return 0;
}
- if (argc == 3 && !strcasecmp(argv[1], "list_activities")) {
+ if (argc == 2 && !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);
@@ -5627,11 +5642,10 @@ static int cmd_motionsense(int argc, char **argv)
motionsense_display_activities(resp->list_activities.disabled);
return 0;
}
- if (argc == 5 && !strcasecmp(argv[1], "set_activity")) {
+ if (argc == 4 && !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);
+ param.set_activity.activity = strtol(argv[2], &e, 0);
+ param.set_activity.enable = strtol(argv[3], &e, 0);
rv = ec_command(EC_CMD_MOTION_SENSE_CMD, 2,
&param, ms_command_sizes[param.cmd].outsize,
@@ -5640,10 +5654,9 @@ static int cmd_motionsense(int argc, char **argv)
return rv;
return 0;
}
- if (argc == 4 && !strcasecmp(argv[1], "get_activity")) {
+ if (argc == 3 && !strcasecmp(argv[1], "get_activity")) {
param.cmd = MOTIONSENSE_CMD_GET_ACTIVITY;
- param.get_activity.sensor_num = strtol(argv[2], &e, 0);
- param.get_activity.activity = strtol(argv[3], &e, 0);
+ param.get_activity.activity = strtol(argv[2], &e, 0);
rv = ec_command(EC_CMD_MOTION_SENSE_CMD, 2,
&param, ms_command_sizes[param.cmd].outsize,
@@ -5653,7 +5666,6 @@ static int cmd_motionsense(int argc, char **argv)
printf("State: %d\n", resp->get_activity.state);
return 0;
}
-
if (argc == 2 && !strcasecmp(argv[1], "lid_angle")) {
param.cmd = MOTIONSENSE_CMD_LID_ANGLE;
rv = ec_command(EC_CMD_MOTION_SENSE_CMD, 2,
@@ -5680,8 +5692,47 @@ static int cmd_motionsense(int argc, char **argv)
fprintf(stderr, "Bad %s arg.\n", argv[2]);
return -1;
}
+ /* spoof activity state */
+ if (argc >= 5 && !strcasecmp(argv[3], "activity")) {
+ int enable = 0;
- if (argc >= 4) {
+ param.spoof.activity_num = strtol(argv[4], &e, 0);
+ if (e && *e) {
+ fprintf(stderr, "Base %s arg.\n", argv[4]);
+ return -1;
+ }
+ if (argc >= 6) {
+ enable = strtol(argv[5], &e, 0);
+ if ((e && *e) || (enable != 0 && enable != 1)) {
+ fprintf(stderr, "Bad %s arg.\n",
+ argv[5]);
+ return -1;
+ }
+ }
+ if ((enable == 1) && (argc == 6)) {
+ /* Enable spoofing, but lock to current state */
+ param.spoof.spoof_enable =
+ MOTIONSENSE_SPOOF_MODE_LOCK_CURRENT;
+ } else if ((enable == 1) && (argc == 7)) {
+ /* Enable spoofing, but use provided state */
+ int state = strtol(argv[6], &e, 0);
+
+ if ((e && *e) || (state != 0 && state != 1)) {
+ fprintf(stderr, "Bad %s arg.\n",
+ argv[6]);
+ return -1;
+ }
+ param.spoof.activity_state = state;
+ param.spoof.spoof_enable =
+ MOTIONSENSE_SPOOF_MODE_CUSTOM;
+ } else if ((enable == 0) && (argc == 6)) {
+ param.spoof.spoof_enable =
+ MOTIONSENSE_SPOOF_MODE_DISABLE;
+ } else if (argc != 5) {
+ return ms_help(argv[0]);
+ }
+ /* spoof accel data */
+ } else if (argc >= 4) {
int enable, i;
int16_t val;