Eagle 754 Service Toolkit
Open-source RS-232 service software for the Impact Instrumentation Uni-Vent™ Eagle™ 754 / 754M
portable ventilator, built to keep training-only units in service when the
PREVENTATIVE MAINTENANCE DUE - CONTACT CUSTOMER SERVICE advisory blocks classroom use and no
OEM service channel is available.
Scope and safety. This toolkit is for ventilators that are permanently retired from patient care and used only for education. Resetting the maintenance clock does not perform the 2000-hour PM (filters, O-rings, leaf valves, battery, flow/pressure calibration). A unit that could ever reach a patient must receive full OEM calibration and performance verification. See docs/SAFETY.md.
What the problem actually is (from the OEM service manual)
| Fact | Source |
|---|---|
The PM alarm fires after 2000 hours of cumulative use or 12 months, whichever first. Text: PREVENTATIVE MAINTENANCE DUE - CONTACT CUSTOMER SERVICE. MUTE silences only the audible part. |
Operation & Service Manual, Alarms |
| The hour/day counters live in a battery-backed Dallas DS1202 real-time clock (U10) on the CPU board; the "maintenance clocks ... hours of use since the unit has had its last periodic maintenance, as well as duration of non-use". | Manual, Theory of Operation, CPU PCB |
Counters are visible on the bottom line of the hidden USER PROGRAMS menu: #### Hrs, ### Dys, Version #.##. |
Manual, USER PROGRAMS |
The only OEM reset path is the PC program CAL.EXE / "CAL V2.7" over the 9-pin RS-232 port on the AC power supply module: F5 Hold → F3 Initialize EEPROM / Reset Real Time Clock → F5 Release. The analyzer is not needed for that step (manual §4.0). |
Manual §14, Computer Calibration |
| Ventilator serial parameters: 2400 (or 1200) baud, 8 data bits, 1 stop, no parity, no handshaking. Pins 2 = Send, 3 = Receive, 5 = Ground. | Manual §14 and Communications Port |
| The ventilator streams switch/control/alarm status every second and pressure every 100 ms; "control signals allow servicing personnel to perform factory-level calibrations". The byte-level protocol is not published ("requests ... must be made in writing"). | Manual, Communications Port |
So the software must do three things: talk to the port, recover the unpublished command bytes, and replay the Hold / RTC-reset / Release sequence with a service log. That is what this toolkit does, with three independent routes to the command bytes.
Install (Windows 10/11, macOS, Linux)
Two ways to run it:
- Browser dashboard, no install: open https://eagle754.msk-dev-project.org/app/ in Chrome or Edge (Web Serial). Connect wizard, monitor, analysis, OEM-session learning, PM reset, probe, emulator and self-tests all run in the page; nothing is uploaded anywhere. See docs/DASHBOARD.md.
-
Python toolkit (any OS, plus the DOSBox-X bridge for running the OEM CAL.EXE):
-
Get the code: on GitHub click Code → Download ZIP and extract it (for example to
C:\Eagle754), orgit clone https://github.com/kochmatthew462-collab/Eagle-UniVent-Software. All commands below run from inside that folder. Windows: open the folder in Explorer, click the address bar, typecmdand press Enter to get a prompt there. - Windows: install Python 3.9 or newer from https://www.python.org/downloads/windows/ and tick
Add python.exe to PATH (keep tcl/tk and IDLE selected for the GUI). Then double-click
tools\windows\install.bat; it installs the tool and runs the simulator self-test, which must end withSELFTEST PASSED. macOS/Linux:
bash
python3 -m pip install .
eagle754 selftest
3. If eagle754 is not found afterwards (per-user installs on Windows), use
python -m eagle754 <command> or the launchers in tools\windows\ (Eagle754-Connect.bat,
Eagle754-GUI.bat); they work regardless of PATH.
Only one dependency (pyserial) is required, so the package also installs from a USB stick on an
air-gapped bench laptop (tools\windows\offline-bundle.ps1 builds the bundle).
Hardware: a USB-to-RS232 adapter (genuine FTDI FT232 chips are the most reliable) and a straight-through DB9 male-to-female cable to the ventilator's 9-pin female port on the AC power supply module. Most adapters end in a DB9 male plug that fits the port directly. Wiring and what to do if nothing arrives: docs/HARDWARE.md.
Quick start
eagle754 connect # guided link check: adapter, cable, power, baud, stream (listens only)
eagle754 ports # find the adapter (COM5, /dev/ttyUSB0 ...)
eagle754 monitor COM5 # live hex + automatic frame analysis + pressure sparkline
eagle754 capture COM5 --out captures/stream.jsonl --seconds 90
eagle754 analyze captures/stream.jsonl # frame classes, 100 ms / 1 s periods, checksum algorithm
eagle754 baudsweep COM5 # if the stream looks like noise
If monitor shows two repeating frame classes at ~100 ms and ~1 s, the cable, adapter and baud rate
are right and the ventilator is talking to you.
Clearing the PM advisory: the three routes
Route A - sniff one OEM session, then replay forever (preferred)
If you can run the OEM program once (a bench PC that still has it, a copy from another service
shop, or a surplus "Remote Calibration System" kit), put eagle754 bridge between the OEM program
and the ventilator and press the keys while marking them:
# OEM program talks to COM7 (a com0com virtual pair, or DOSBox-X TCP nullmodem, see docs)
eagle754 bridge --pc COM7 --vent COM5 --out captures/oem_session.jsonl
# type: init <Enter> then launch / connect the OEM program
# type: hold <Enter> then press F5 in CAL.EXE (LCD shows FACTORY CALIBRATION)
# type: rtc_reset <Enter> then press F3
# type: release <Enter> then press F5
# type: quit
eagle754 learn captures/oem_session.jsonl -o commands.json
eagle754 pm-reset COM5 --commands commands.json
learn separates the OEM program's periodic polls from the key-press bursts, names the bursts after
your markers, records the ventilator's replies and whether the stream stopped (Hold). From then on
pm-reset performs the reset natively, on any training unit, with a timestamped service log.
Full walk-through, including how to run the 16-bit CAL.EXE under DOSBox-X on Windows 11 without
any virtual COM drivers: docs/OEM_SOFTWARE_CAPTURE.md.
The OEM program also insists on a second serial port with a Timeter RT-200 or Impact Model 100
analyzer. Both are obsolete; eagle754 emulate --profile rt200 COM8 answers for them.
Route B - discover the commands by probing (no OEM software at all)
eagle754 probe COM5 --set bytes # 256 single bytes, watching the stream after each
eagle754 probe COM5 --set esc --set ascii-cr
The probe measures the live stream before each candidate and flags candidates that produce a
reply, a new frame type, or stop the stream (the Hold state). When the stream stops it re-sends the
same bytes (the OEM Hold key toggles) and, if that fails, pauses for you to power-cycle. Candidates
found this way are written into commands.json by hand and verified against the LCD and the
#### Hrs counter in USER PROGRAMS. Detailed method and safety rails:
docs/SERVICE_PROCEDURE.md.
Route C - hardware: the memory battery
The counters are kept alive by the 3.0 V lithium cell on the CPU board that powers the DS1202 when the unit is off. Removing it (with the main battery disconnected) clears the clock chip. This is the fallback when no software route is possible; its consequences and procedure are in docs/HARDWARE.md.
After any reset
- The unit reboots and raises a TRANSDUCER CALIBRATION alarm. Turn MODE to CAL, wait for calibration complete, return to the training mode.
- Enter USER PROGRAMS (hold MUTE + MANUAL BREATH while turning MODE from OFF) and confirm the
bottom line reads
0 Hrs/0 Dys. - Record the event (date, serial number, log file in
captures/) on the calibration label and in your training-equipment log.
All commands
| Command | Purpose |
|---|---|
connect |
guided, listen-only link check that walks through adapter, cable, power, baud rate and stream |
ports |
list serial adapters |
monitor, capture, baudsweep |
see / log the ventilator stream; find the baud rate |
analyze |
offline protocol discovery (frame classes, periods, checksums, --draft-protocol) |
bridge, tap |
sniff an OEM session (two ports, or a receive-only Y-cable) |
learn, show-commands |
turn an annotated sniff into commands.json |
pm-reset |
replay Hold / RTC reset / Release with confirmations and a log (--dry-run, --yes) |
send, probe |
manual and guided command discovery |
emulate |
RT-200 / Model 100 analyzer stand-in for the OEM program |
sim, selftest |
ventilator simulator for rehearsal and CI |
gui |
Tk front end for all of the above |
Repository layout
eagle754/ Python package (CLI: eagle754)
eagle754/data/ protocol & command templates, analyzer rule files (edit copies, not originals)
docs/ service procedure, OEM capture, hardware, front panel, protocol notes, safety, dashboard, hosting, sources
tools/dosbox-x/ DOSBox-X configuration for running CAL.EXE against the bridge
tools/windows/ one-click install, connect-wizard and GUI launchers
tools/scan_exe.py extract candidate command strings from a CAL.EXE binary
captures/ your session logs (git-ignored except README)
site/ project web page and the browser dashboard (site/app), published at eagle754.msk-dev-project.org
tests/ pytest suite, runs the whole pipeline against the simulator
Contributing protocol knowledge
Once a real Eagle 754 session has been captured, please open a pull request adding the anonymised
commands.json and the analyze --json report under protocols/. Serial numbers and operator
names are the only identifying data in those files; remove them. The first confirmed capture turns
Route A into a one-command fix for every training program that owns one of these ventilators.
Sources
Primary: Impact Instrumentation Uni-Vent™ Model 754/754M Operation & Service Manual (P/N 906-0754-02 rev 1.85N and the 754M edition), sections Communications Port, USER PROGRAMS, Alarms, Calibration Procedure / Computer Calibration and Circuit Descriptions. Public copies and forum evidence are listed in docs/SOURCES.md.
License: MIT. Uni-Vent, Eagle and Impact are trademarks of their owners; this project is not affiliated with Impact Instrumentation or ZOLL Medical.