diff options
author | Nicolas Norvez <norvez@chromium.org> | 2018-09-21 14:07:04 -0700 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2018-12-08 02:41:01 +0000 |
commit | 9e8d13b5217c3d2818fcaa8e3be4c360bc2b5bc9 (patch) | |
tree | b61d00145396a9919d55f14f76d94522c7c82f1f | |
parent | 109bdfe1c8c49119944775072060e21c05334a7d (diff) | |
download | chrome-ec-9e8d13b5217c3d2818fcaa8e3be4c360bc2b5bc9.tar.gz |
fpsensor: validate args of EC_CMD_FP* commands
- More thorough validation of the arguments passed to host commands.
- Remove obsolete EC_CMD_FP_SENSOR_CONFIG host command.
- Some console commands can't be used on locked systems.
BRANCH=nocturne
BUG=b:116065496
TEST=enroll finger
TEST=unlock with finger
TEST=Capture
ectool --name=cros_fp fpmode capture vendor;
ectool --name=cros_fp waitevent 5 10000;
ectool --name=cros_fp fpframe raw > /tmp/fp.raw
/usr/local/opt/fpc/fputils.py --png /tmp/fp.raw
TEST=MQT
ectool --name=cros_fp fpmode capture qual;
ectool --name=cros_fp waitevent 5 10000;
ectool --name=cros_fp fpframe raw > /tmp/fp.raw;
/usr/local/opt/fpc/fputils.py --mqt /tmp/fp.raw
TEST=Reset_pixel
ectool --name=cros_fp fpmode capture test_reset;
ectool --name=cros_fp fpframe > /tmp/test_reset.pnm
TEST=Checkerboard
ectool --name=cros_fp fpmode capture pattern0;
ectool --name=cros_fp waitevent 5 500;
ectool --name=cros_fp fpframe > /tmp/pattern0.pnm
ectool --name=cros_fp fpmode capture pattern1;
ectool --name=cros_fp waitevent 5 500;
ectool --name=cros_fp fpframe > /tmp/pattern1.pnm
Change-Id: I3c9aa4749ffd77c73f8ca52cddbcc0e8ca6ae48c
Signed-off-by: Nicolas Norvez <norvez@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1239247
Commit-Ready: Nicolas Boichat <drinkcat@chromium.org>
Tested-by: Nicolas Boichat <drinkcat@chromium.org>
Reviewed-by: Nicolas Boichat <drinkcat@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/1364320
Reviewed-by: YH Lin <yueherngl@chromium.org>
Commit-Queue: YH Lin <yueherngl@chromium.org>
Tested-by: YH Lin <yueherngl@chromium.org>
-rw-r--r-- | include/ec_commands.h | 77 |
1 files changed, 39 insertions, 38 deletions
diff --git a/include/ec_commands.h b/include/ec_commands.h index b008b636d7..57e2c0d5de 100644 --- a/include/ec_commands.h +++ b/include/ec_commands.h @@ -4869,51 +4869,17 @@ struct __ec_align2 ec_params_fp_passthru { uint8_t data[]; /* Data to send */ }; -/* Fingerprint sensor configuration command: prototyping ONLY */ -#define EC_CMD_FP_SENSOR_CONFIG 0x0401 - -#define EC_FP_SENSOR_CONFIG_MAX_REGS 16 - -struct __ec_align2 ec_params_fp_sensor_config { - uint8_t count; /* Number of setup registers */ - /* - * the value to send to each of the 'count' setup registers - * is stored in the 'data' array for 'len' bytes just after - * the previous one. - */ - uint8_t len[EC_FP_SENSOR_CONFIG_MAX_REGS]; - uint8_t data[]; -}; - /* Configure the Fingerprint MCU behavior */ #define EC_CMD_FP_MODE 0x0402 /* Put the sensor in its lowest power mode */ -#define FP_MODE_DEEPSLEEP (1<<0) +#define FP_MODE_DEEPSLEEP (1<<0) /* Wait to see a finger on the sensor */ -#define FP_MODE_FINGER_DOWN (1<<1) +#define FP_MODE_FINGER_DOWN (1<<1) /* Poll until the finger has left the sensor */ -#define FP_MODE_FINGER_UP (1<<2) +#define FP_MODE_FINGER_UP (1<<2) /* Capture the current finger image */ -#define FP_MODE_CAPTURE (1<<3) -/* Capture types defined in bits [30..28] */ -#define FP_MODE_CAPTURE_TYPE_SHIFT 28 -#define FP_MODE_CAPTURE_TYPE_MASK 0x7 -/* Full blown vendor-defined capture (produces 'frame_size' bytes) */ -#define FP_CAPTURE_VENDOR_FORMAT 0 -/* Simple raw image capture (produces width x height x bpp bits) */ -#define FP_CAPTURE_SIMPLE_IMAGE 1 -/* Self test pattern (e.g. checkerboard) */ -#define FP_CAPTURE_PATTERN0 2 -/* Self test pattern (e.g. inverted checkerboard) */ -#define FP_CAPTURE_PATTERN1 3 -/* Capture for Quality test with fixed contrast */ -#define FP_CAPTURE_QUALITY_TEST 4 -/* Capture for pixel reset value test */ -#define FP_CAPTURE_RESET_TEST 5 -/* Extracts the capture type from the sensor 'mode' word */ -#define FP_CAPTURE_TYPE(mode) (((mode) >> FP_MODE_CAPTURE_TYPE_SHIFT) \ - & FP_MODE_CAPTURE_TYPE_MASK) +#define FP_MODE_CAPTURE (1<<3) /* Finger enrollment session on-going */ #define FP_MODE_ENROLL_SESSION (1<<4) /* Enroll the current finger image */ @@ -4923,6 +4889,41 @@ struct __ec_align2 ec_params_fp_sensor_config { /* special value: don't change anything just read back current mode */ #define FP_MODE_DONT_CHANGE (1<<31) +#define FP_VALID_MODES (FP_MODE_DEEPSLEEP | \ + FP_MODE_FINGER_DOWN | \ + FP_MODE_FINGER_UP | \ + FP_MODE_CAPTURE | \ + FP_MODE_ENROLL_SESSION | \ + FP_MODE_ENROLL_IMAGE | \ + FP_MODE_MATCH | \ + FP_MODE_DONT_CHANGE) + +/* Capture types defined in bits [30..28] */ +#define FP_MODE_CAPTURE_TYPE_SHIFT 28 +#define FP_MODE_CAPTURE_TYPE_MASK (0x7 << FP_MODE_CAPTURE_TYPE_SHIFT) +/* + * This enum must remain ordered, if you add new values you must ensure that + * FP_CAPTURE_TYPE_MAX is still the last one. + */ +enum fp_capture_type { + /* Full blown vendor-defined capture (produces 'frame_size' bytes) */ + FP_CAPTURE_VENDOR_FORMAT = 0, + /* Simple raw image capture (produces width x height x bpp bits) */ + FP_CAPTURE_SIMPLE_IMAGE = 1, + /* Self test pattern (e.g. checkerboard) */ + FP_CAPTURE_PATTERN0 = 2, + /* Self test pattern (e.g. inverted checkerboard) */ + FP_CAPTURE_PATTERN1 = 3, + /* Capture for Quality test with fixed contrast */ + FP_CAPTURE_QUALITY_TEST = 4, + /* Capture for pixel reset value test */ + FP_CAPTURE_RESET_TEST = 5, + FP_CAPTURE_TYPE_MAX, +}; +/* Extracts the capture type from the sensor 'mode' word */ +#define FP_CAPTURE_TYPE(mode) (((mode) & FP_MODE_CAPTURE_TYPE_MASK) \ + >> FP_MODE_CAPTURE_TYPE_SHIFT) + struct __ec_align4 ec_params_fp_mode { uint32_t mode; /* as defined by FP_MODE_ constants */ }; |