Command Reference
pcu-cli is the command-line tool for reading and configuring In-CarPC vehicle PCs. This page lists every command that ships in the release build, with the exact output each one produces. For flags, JSON output, and scripting, see Scripting and Automation.
Running pcu-cli
Section titled “Running pcu-cli”Run a command as pcu-cli <command>. Hardware commands need elevated access:
-
Windows: run
status,ign, anddiofrom an elevated (Administrator) terminal.help,version, anddriverwork without elevation. Without Administrator rights, a hardware command stops with a terse error:Terminal window ERROR: This program must be run as Administrator.Hardware access requires elevated privileges (PawnIO kernel driver). -
Linux: run with
sudo, or set up unprivileged access once withpcu-setup.sh. See Install on Linux. SMBus platforms (CQ20, CQ40N series, and CQ50S series) use thei2cgroup; digital I/O on the CQ40 series needsCAP_SYS_RAWIO. The CQ40 series uses both: its ignition timers go over SMBus and its digital I/O over port I/O.
Run with no arguments to open an interactive numbered menu, which is handy when launching by double-click:
$ pcu-cliCommands: [1] Status All available readings [2] Ignition Timer configuration [3] Digital I/O DI/DO read and control [4] Driver PawnIO driver management [h] Help Show CLI usage [0] Exit
Select:A short banner is printed above the menu. The [4] Driver entry appears on Windows only. Passing flags but no command (for example pcu-cli --json) runs status.
The [2] Ignition sub-menu offers viewing the timer summary, setting a timer, and [3] Delay unit (minutes or seconds, where supported).
Help and the menu match your machine
Section titled “Help and the menu match your machine”pcu-cli help and the interactive menu adapt to the machine they are run on. On hardware pcu recognises, they list only what that platform actually has:
helpprints aDetected platform:line naming the machine, then only that platform’s commands and only its timer table.- The menu hides the entries that do not apply.
[3] Digital I/Odoes not appear on a CQ20, CQ40N series, or CQ50S series machine. A CQ40 series machine shows both[2] Ignitionand[3] Digital I/O. - On Linux, the
Requires:footer prints only the line that applies: thei2cgroup note on an SMBus machine, theCAP_SYS_RAWIOnote on a machine with digital I/O. A CQ40 series machine gets both lines.
The menu numbers do not shift when an entry is hidden, so you will see gaps. That is deliberate: a number means the same thing on every machine, and any guide or note that refers to [3] stays correct.
Detection reads the board identity the BIOS reports. It needs no driver, no elevation, and no hardware access, so pcu-cli help gives you the tailored list even from an ordinary terminal.
On a machine pcu does not recognise, such as a development PC, nothing is hidden and the full command list and every platform’s timer table are shown. That is also what the examples on this page show, so you can see the whole surface in one place.
status
Section titled “status”Read-only overview of the connected hardware. On a platform with ignition timers this includes the MCU identity and the timer summary.
| Command | Description |
|---|---|
pcu-cli status | Show platform, MCU identity, and all current hardware readings. |
$ pcu-cli statuspcu v1.2.1 - In-CarPC CQ20 Status---------------------------------------- Platform : In-CarPC CQ20 (Intel Atom x6425E) MCU Identity : CQ20 MCU Hardware Rev : DTB-IGN-MCU VER:10 Firmware : 12
MCU Firmware : 12 Ignition Mode : On Anti-Crank Delay : 6s anti-crank filter before DC power Boot Delay : 3s DC rails stable before power button Shutdown Delay : 3s IGN off to ACPI shutdown command Force Off Timeout : 15m hard power cut if OS hangs Timers Stored : Yes, kept when DC power is removedThe firmware version appears twice: once in the platform block and again in the MCU readings. That is expected.
On a CQ50S series machine the MCU readings also include the ignition input and two UPS lines:
$ pcu-cli statuspcu v1.2.1 - In-CarPC CQ50S series Status---------------------------------------- Platform : In-CarPC CQ50S series (Intel Core (CQ53S/CQ55S/CQ57S)) MCU Identity : CQ50S Ignition MCU Hardware Rev : n/a Firmware : V0.5.0-0.4
MCU Firmware : V0.5.0-0.4 Ignition : On UPS Mode : Normal UPS Voltage : 12.29 V Ignition On Delay : 3s Wait after the ignition switches on before the system starts Ignition Off Delay : 3s Wait after the ignition switches off before the shutdown starts Force Off Timeout : 15m Time after the shutdown starts before the MCU cuts power anyway UPS Off Delay : 1m Time on the UPS battery after the supply is lost before the shutdown starts Timers Stored : Yes, kept when DC power is removedUPS Mode is Normal or On. UPS Voltage is the voltage the MCU reports, shown as Unknown when the reading is out of range. Both are read-only. If a timer holds a delay longer than pcu can set (18h 12m 15s), an extra line such as Ignition Off Delay On Unit shows the real value; see Ignition Timers.
On a platform with ignition timers, the last line, Timers Stored, says that timer writes are kept when DC power is removed. On a CQ20 this needs pcu 1.1.1 or later; see Ignition Timers. It describes the platform and is not a live check. --quiet leaves it out, and a platform without ignition timers does not print it.
Read and write the ignition power-sequencing timers. Available on the CQ20, the CQ40 series, the CQ40N series, and the CQ50S series. The timer names, how many there are, and the unit they are counted in all come from the connected platform, so ign on a CQ20 lists four seconds-based timers, on a CQ40 series or CQ40N series machine lists five, and on a CQ50S lists four seconds-based timers.
| Command | Description |
|---|---|
pcu-cli ign | Show all ignition timer values. |
pcu-cli ign get <timer> | Read one timer. Shorthand: pcu-cli ign <timer>. |
pcu-cli ign set <timer> <value> | Write one timer in the platform’s unit (asks to confirm). On a CQ20 and a CQ50S the value is also stored in the MCU. |
pcu-cli ign unit | Show the delay unit the timers are counted in (platforms with a selectable unit). |
pcu-cli ign unit <minutes|seconds> | Change the delay unit (asks to confirm). Stored timer values are plain counts and are not converted. |
The timer names differ by platform:
| Platform | Timer names |
|---|---|
| In-CarPC CQ20 | ign-on-delay, sw-on-delay, sw-off-delay, pw-off-delay |
| In-CarPC CQ40 series | ign-on-delay, ign-off-delay, pw-off-delay, ups-off-delay, ups-pw-off-delay |
| In-CarPC CQ40N series | ign-on-delay, ign-off-delay, pw-off-delay, ups-off-delay, ups-pw-off-delay |
| In-CarPC CQ50S series | ign-on-delay, ign-off-delay, pw-off-delay, ups-off-delay |
See Ignition Timers for each timer’s range, default, and what it controls.
$ pcu-cli ignpcu v1.2.1 - In-CarPC CQ20 Ignition---------------------------------------- MCU Firmware : 12 Ignition Mode : On Anti-Crank Delay : 6s IGN on to DC power Boot Delay : 3s DC on to power button Shutdown Delay : 3s IGN off to ACPI shutdown Force Off Timeout : 900s (15m) Hard power cut if OS hangsOn a CQ40 series or CQ40N series machine the same command lists that platform’s five timers instead, and adds a Delay Unit line showing whether they are currently being counted in minutes or seconds. On a CQ50S it lists four timers, all counted in seconds:
$ pcu-cli ignpcu v1.2.1 - In-CarPC CQ50S series Ignition---------------------------------------- MCU Firmware : V0.5.0-0.4 Ignition On Delay : 3s Wait after the ignition switches on before the system starts Ignition Off Delay : 3s Wait after the ignition switches off before the shutdown starts Force Off Timeout : 900s (15m) Time after the shutdown starts before the MCU cuts power anyway UPS Off Delay : 60s (1m) Time on the UPS battery after the supply is lost before the shutdown startsRead one timer. The get keyword is optional, so pcu-cli ign sw-off-delay reads the same value:
$ pcu-cli ign get sw-off-delay Shutdown Delay: 3sWriting a timer asks for confirmation, writes the value, then reads it back. On a CQ20 and a CQ50S the write also stores the value in the MCU, before the readback. A good result reads “verified and stored”:
$ pcu-cli ign set sw-on-delay 3Write Boot Delay = 3s? [y/N] y Boot Delay: 3s - verified and storedOn a CQ40 series or CQ40N series machine the same command reports Ignition Off Delay: 2m - verified and stored, with the value in the unit the timers are currently counted in. Those MCUs save timers by themselves, so they have no separate store step.
If a CQ20 does not confirm the store within 5 seconds, or a CQ50S does not accept the save command, pcu warns and exits with code 1. The value is in place but will be lost when DC power is removed, so run the command again. See A timer was set but not stored.
WARNING: Boot Delay was set to 3s but was not stored. The MCU did not confirm the store within 5 seconds. The value will be lost when DC power is removed. Run the command again.A value outside the timer’s range is rejected before anything is written, and the tool shows the default (exit code 1):
$ pcu-cli ign set sw-on-delay 99ERROR: Boot Delay must be 1-60s. Got: 99 Default: 3sEvery supported platform has ignition timers. A CQ40 series machine whose ignition half cannot be reached exits with code 1; see A CQ40 with only one half connected.
ign unit
Section titled “ign unit”The CQ40 series and the CQ40N series count four of their five timers in a unit you can change between minutes and seconds. pcu-cli ign unit reads that setting, and pcu-cli ign unit minutes or pcu-cli ign unit seconds changes it. The value words are flexible: m, min, mins, minute, and minutes are all accepted, as are s, sec, secs, second, and seconds.
Reading it prints one indented line, Delay unit: minutes or Delay unit: seconds. With --quiet you get the bare word on its own line, which is the form to parse in a script.
The confirmation prompt spells out the consequence before asking, and the prompt is printed to stderr like every other pcu confirmation. After a successful change pcu reads the setting back and reports it as verified, then prints a reminder that the timer values were not converted.
On a platform with no such setting (the CQ20 and the CQ50S series), the command reports that and exits with code 2:
ERROR: This platform has no delay unit setting. Its timers are always counted in seconds.Monitor digital inputs and the ignition line, and switch digital outputs. Available on the CQ40 series only. A CQ40 can connect with only one of its two halves; see A CQ40 with only one half connected.
| Channel | Direction | Description |
|---|---|---|
di1, di2 | Input (read-only) | Digital inputs. |
do1, do2 | Output (read/write) | Digital outputs. |
ign | Input (read-only) | Ignition / accessory sense line. |
| Command | Description |
|---|---|
pcu-cli dio | Show all digital inputs, outputs, and the ignition line. |
pcu-cli dio get <channel> | Read one channel. Shorthand: pcu-cli dio di1. |
| `pcu-cli dio set <do#> <0 | 1>` |
$ pcu-cli diopcu v1.2.1 - In-CarPC CQ40 series Digital I/O---------------------------------------- DI1 : High DI2 : Low DO1 : Low DO2 : Low Ignition (IGN) : On
Note: outputs reset to off on reboot or power loss; the state is not saved.Read one channel. The channel keyword is optional, so pcu-cli dio di1 reads the same value:
$ pcu-cli dio get di1 DI1: HighSetting an output warns that outputs drive real hardware, asks to confirm, then reads the state back:
$ pcu-cli dio set do1 1WARNING: digital outputs drive connected hardware (relays / switches / lamps).Set DO1 = High? [y/N] y DO1: High - verifiedOn a platform without digital I/O (the CQ20, the CQ40N series, and the CQ50S series), the command reports that the feature is unavailable and exits with code 2:
$ pcu-cli dioERROR: Digital I/O is not available on In-CarPC CQ20.A CQ40 with only one half connected
Section titled “A CQ40 with only one half connected”A CQ40 series machine has two halves: ignition timers over SMBus and digital I/O over port I/O. If only one half opens, the commands for the other half print the reason to stderr and exit with code 1, not 2, because the hardware has the feature but this connection cannot reach it. status shows the reason on an Ignition Timers or Digital I/O line. For example, with the i2c-dev module not loaded, ign and ign unit print:
ERROR: The ignition timers are unavailable because the i2c-dev kernel module is not loaded; load it with 'sudo modprobe i2c-dev', or run 'pcu-setup.sh install' to load it at every boot.driver
Section titled “driver”Manage the PawnIO kernel driver. Windows only. See Install on Windows for the full driver setup.
| Command | Description |
|---|---|
pcu-cli driver [status|install|uninstall] | Check, install, or remove the PawnIO driver. |
With no sub-command, pcu-cli driver shows status:
$ pcu-cli driver status PawnIO driver: v2.2.0 (2026-03-15) SmbusI801 module: 2025-05-05 Status: InstalledOn Linux there is no PawnIO driver; the kernel i2c-dev module is used instead, so the command exits with code 2:
$ pcu-cli driver statusPawnIO is a Windows-only driver. Linux uses the kernel i2c-dev module.The --json and --quiet flags have no effect on driver; its output is always the text form shown above.
version and help
Section titled “version and help”| Command | Description |
|---|---|
pcu-cli version | Show version, driver, and supported platforms. |
pcu-cli --version, pcu-cli -V | Same as version. Runs without elevation. |
pcu-cli help | Show command help, timer ranges, flags, and exit codes. |
version prints the tool version and build stamp, the driver and module versions (Windows), and the supported-platform list with validated configurations. Add --json for a machine-readable form; see Scripting and Automation. help prints the command reference, including each timer’s range and default. On recognised hardware it covers just that platform; on an unrecognised machine it lists every platform’s timers under a model heading. See Help and the menu match your machine. Timers whose unit is selectable are listed without a unit, because a printed reference cannot know what ign unit is currently set to.
Confirmation prompts
Section titled “Confirmation prompts”Commands that change hardware ask before writing:
pcu-cli ign set <timer> <value>promptsWrite <timer> = <value>? [y/N].pcu-cli ign unit <minutes|seconds>explains that the stored values are not converted, then promptsSet the delay unit to <unit>? [y/N].pcu-cli dio set <do#> <0|1>warns about connected hardware, then promptsSet <channel> = <High|Low>? [y/N].pcu-cli driver install/uninstallprompt before running the installer.
Answering anything other than y aborts with exit code 1. If the delay unit changes while ign set waits for your answer, pcu prints The delay unit changed to <unit> while waiting. Nothing was written. and exits with code 1. Prompts are printed to stderr, so they never mix into piped output. For ign set, ign unit, and dio set, a prompt is skipped when you pass --yes (or -y), when you pass --quiet, or when input is redirected from a pipe or file. For driver install / uninstall, only --yes (or -y) or redirected input skips the prompt; --quiet has no effect on driver. See the redirected-input caution on the scripting page before automating writes.
Exit codes
Section titled “Exit codes”| Code | Meaning |
|---|---|
| 0 | Success. |
| 1 | Error, including a rejected value, an aborted confirmation, a write that did not read back as expected, or a CQ20 or CQ50S timer that was written but not confirmed as stored, or a CQ40 half that could not be reached. |
| 2 | Feature not available on this platform or build. |
