Add unit tests for common PPM

The PPM unit test will be used to make sure the PPM state machine
behaves correctly. This commit adds all the state machine test methods,
fixtures, etc. but only implements the tests for the Idle state to
start.

BUG=b:303919041
TEST=make local_tests

Change-Id: I6a0e7d6abd37f7761bd4264c7dda236069d571aa
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/usb/um_ppm/+/5174020
Reviewed-by: Jameson Thies <jthies@google.com>
Tested-by: Abhishek Pandit-Subedi <abhishekpandit@google.com>
7 files changed
tree: eb4ce36097f1adbe5c63537f7966f43587e2f646
  1. include/
  2. test/
  3. .gitignore
  4. LICENSE
  5. main.c
  6. Makefile
  7. platform_usermode.c
  8. ppm_common.c
  9. ppm_common.h
  10. README.md
  11. rts5453.c
  12. rts5453.h
  13. smbus_usermode.c
  14. smbus_usermode.h
  15. um_ppm_chardev.c
  16. um_ppm_chardev.h
README.md

Usermode PPM implementation

Usermode UCSI PPM implementation for evaluation and testing usage. Try using this with the ucsi_um_test kernel driver.

Setup

For usermode implementations, we use libi2c and libgpiod to provide an smbus implementation. You will need the right libraries to build:

sudo apt-get install libi2c-dev libgpiod-dev

Architecture

┌─────────┐
│OPM      │
│kernel or│
│cli      │
└────┬────┘
     │
     │
     ▼          ┌───────────┐
 ┌────────┐     │ PD Driver │
 │        ├────►│           │
 │  PPM   │     ├───────────┤
 │        │     │           │
 └────────┘     │ I2C Driver│
                └───────────┘

The usermode ppm implementation consists of the PPM task, the PD driver and the I2C driver backing it. The OPM will either be a CLI (for locally triggering some functionality) or the ucsi_um_test kernel module.