Compare commits

...

15 Commits

Author SHA1 Message Date
ce24f7c478 Add configurable step size selector and motor velocity controls
F2 Control screen Manual mode now has a row of step-size buttons
(0.1°, 0.5°, 1°, 5°, 10°) that scale arrow key nudges, plus
AZ/EL velocity inputs with Apply button for runtime motor speed
tuning via firmware mv/ma commands.

Bridge: set_max_velocity(), set_max_acceleration() write methods.
Demo: mutable dynamics + console mv/ma write handling.
Tests: 8 Textual pilot tests covering button toggle, nudge math,
velocity population, and apply round-trip.
2026-02-14 20:05:12 -07:00
5252d1d73c Add hardware reference docs (A3981, K60, RYS352A)
Allegro A3981 stepper motor driver: datasheet, KiCad symbols/footprint,
3D model (TSSOP-28). Two per G2 board, SPI-controlled, AUTO microstep.

NXP MK60DN512VLQ10 (Kinetis K60): datasheet and 1300-page reference
manual. Cortex-M4 96MHz MCU running the G2 firmware.

Reyax RYS352A GPS module: datasheet and PAIR command guide.
GPS receiver on the G2 board (used for auto-location/satellite lookup).

All extracted as markdown + page images + vector SVGs for LLM context.
Binary assets (PDFs, PNGs, SVGs, STEP, WRL) stored via git-lfs.
2026-02-14 18:36:42 -07:00
bbdd406bca Configure git-lfs for binary assets
Track PDFs, images (PNG/JPG), SVGs, and 3D models (STEP/WRL) via
git-lfs to keep repo clone size manageable as datasheets and
extracted page images accumulate.
2026-02-14 18:36:23 -07:00
1c27a8d15d Add console-probe package for firmware console discovery
Automated deep probe of Winegard firmware console interfaces.
Discovers available commands via help parsing, submenu probing,
and wordlist brute-force. Handles prompt-terminated serial I/O
with the > character termination strategy.

Modules: serial_io (prompt-aware I/O), discovery (auto-discovery),
profile (DeviceProfile dataclass), report (JSON output), cli (argparse).
2026-02-14 18:05:15 -07:00
13a9d804c6 Add G2 bootloader and EEPROM exploration scripts
boot_baud_probe.py: Probe all standard baud rates during G2 power-on
to detect bootloader UART configuration differences.

boot_capture.py: Capture and analyze G2 boot sequence output, with
optional interrupt sequence injection to explore bootloader entry.

ee_dump.py: Dump EEPROM indices from EE> submenu, identifying
initialized vs. uninitialized (0x10101 sentinel) entries.
2026-02-14 18:05:03 -07:00
145763fcfb Rebuild TUI as 4-tab layout with 10 new widgets
Replace sidebar + 5-screen layout with horizontal tab bar (F1-F4)
and persistent StatusStrip. Consolidate Position + Scan screens into
Signal (F3) with Monitor/Sweep/Sky Map sub-modes via ModeBar.

Screens:
  - F1 Dashboard: system health, tracking panel, quick actions, presets
  - F2 Control: motor tuning, compass rose, preset management
  - F3 Signal: RSSI monitor, 1D sweep (SweepPlot), 2D sky map (heatmap)
  - F4 System: NVS editor with regex filter, EEPROM, firmware info
  - F5 Console: push/pop overlay (no longer a tab)

New widgets: StatusStrip, ModeBar, SweepPlot, QuickActions, PresetList,
ReceiverInfo, MotorTuning, NvsFilter, SystemHealth, TrackingPanel.

Removed: PositionScreen, ScanScreen, DeviceStatusBar (functionality
absorbed into new screens and StatusStrip).

App-level position poll feeds StatusStrip and active screen at ~2 Hz.
Fix shared threading.Event across instances (class-level mutable default).
2026-02-14 18:04:50 -07:00
e7e71c47d7 Wire Stop button to cancel blocked firmware sweeps
Stop handler now calls cancel_operation() on the device bridge,
which sets a threading.Event that interrupts the 2s-timeout serial
read loop in send_with_timeout(). InterruptedError is caught
separately to prevent falling back to software sweep on cancel.

disconnect() uses acquire(timeout=5) with force-close fallback
instead of blocking lock acquisition — prevents deadlock when a
stuck worker holds the serial lock during shutdown.

Add 3 Textual async tests (pytest-asyncio) to verify Stop behavior:
firmware sweep stop, software sweep stop, and sweep restart.
2026-02-14 17:12:11 -07:00
972c26b22f Guard finally blocks against app teardown during Ctrl+C
The sweep/scan finally blocks call self.app.call_from_thread() to
reset button state, but self.app raises NoActiveAppError if the
Textual context is already torn down during Ctrl+C shutdown.
Wrap with contextlib.suppress so the flag reset still happens.
2026-02-14 16:58:21 -07:00
c6ac958ee8 Make firmware sweep cancellable to prevent shutdown deadlock
send_with_timeout now uses a 2s per-byte timeout with a deadline
loop instead of one long blocking read, checking a cancel event
between reads. SerialBridge.disconnect() sets the cancel event
before acquiring the lock, so a blocked firmware sweep aborts
within ~2s and releases the lock for clean port shutdown.
2026-02-14 16:56:14 -07:00
2ee2f47275 Fix sweep/scan Stop button and state cleanup
_sweeping/_scanning flags were never reset when workers finished,
leaving the UI stuck in "Stopping..." forever. Both _do_sweep and
_do_scan now use try/finally to always clear state and reset button
styles. Firmware sweep checks the flag after the blocking serial
call returns and discards results if Stop was pressed mid-execution.
2026-02-14 16:50:08 -07:00
3cd6424168 Wire firmware-accelerated AZ sweep via azscanwxp
Adds send_with_timeout() to CarryoutG2Protocol for long-running
commands, and az_sweep_firmware() to both SerialBridge and DemoDevice.
Sweep and Sky Map modes now try the firmware path first (single
azscanwxp command, streaming results) and fall back to software
step-dwell-measure on error or when "Software mode" checkbox is
checked. Software sweep fixed to set EL once and move AZ only.
2026-02-14 16:40:53 -07:00
ba8859cc31 Fix 300s executor shutdown with threading.Event
Replace time.sleep() with threading.Event.wait() in all poll
loops so worker threads exit immediately on shutdown instead of
blocking for up to 500ms per iteration. Fixes the on_unmount
crash (NoMatches from querying removed DOM nodes) by signaling
the event directly rather than iterating child widgets.

Three shutdown paths covered: q key (on_unmount), Ctrl+C
(try/finally in main), and Textual internal shutdown.
2026-02-14 10:21:42 -07:00
48746937a7 Fix executor shutdown warning on TUI exit
Poll threads (position at 2 Hz, signal when monitoring) run
while-loops with time.sleep() that never exit on app quit.
Add on_unmount() to PositionScreen, SignalScreen, and BirdcageApp
to clear polling flags and disconnect the device, so worker threads
exit within the sleep interval instead of hitting the 300s timeout.
2026-02-14 09:41:47 -07:00
83c1f79caf Document birdcage.warehack.ing deployment in CLAUDE.md
Repo, domain, server path, make targets, and deploy workflow for
the Astro/Starlight docs site hosted via caddy-docker-proxy.
2026-02-13 15:17:00 -07:00
7271b53c63 Add Birdcage TUI: 5-screen Textual interface for Carryout G2
F1 Position (compass rose, motor control, sparklines),
F2 Signal (RSSI gauge with sub-char precision, DVB/ADC sparklines, LNA toggle),
F3 Scan (AZ/EL grid sweep with heatmap and CSV export),
F4 System (NVS table, A3981 diagnostics, motor dynamics),
F5 Console (raw serial terminal with prompt detection and safety gates).

Includes SerialBridge (thread-safe protocol wrapper), DemoDevice
(synthetic simulation for --demo mode), dark RF theme with rounded
borders and teal accents, and send_raw() on CarryoutG2Protocol.
2026-02-13 08:53:03 -07:00
3035 changed files with 100703 additions and 7 deletions

7
.gitattributes vendored Normal file
View File

@ -0,0 +1,7 @@
*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.svg filter=lfs diff=lfs merge=lfs -text
*.step filter=lfs diff=lfs merge=lfs -text
*.wrl filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text

View File

@ -688,3 +688,54 @@ Last resort only. 5/16" socket + 6" extension into auxiliary drive hole. Turn cl
## Testing
No hardware-in-the-loop tests yet. Protocol implementations can be mocked for unit testing — `FirmwareProtocol` is an ABC with clear method contracts.
## Documentation Site
| Property | Value |
|----------|-------|
| Repo | `git@git.supported.systems:warehack.ing/birdcage-docs.git` |
| Local path | `site/` (separate git repo, not a subtree) |
| Framework | Astro + Starlight |
| Domain | `birdcage.warehack.ing` |
| Server | `warehack-ing@warehack.ing:~/birdcage-docs/` |
| Container | `birdcage-docs` (caddy:2-alpine serving static files) |
### Workflow
```bash
cd site/
# Local development with HMR
make dev # Sets APP_ENV=dev, starts Astro dev server on :4321
# Production build + deploy
make prod # Sets APP_ENV=prod, builds static site, serves via Caddy on :80
# Other commands
make logs # Tail container logs
make rebuild # Down + up with fresh build
make clean # Remove containers + images
```
### Make Targets
| Target | Description |
|--------|-------------|
| `up` | Build and start container |
| `down` | Stop container |
| `logs` | Tail container logs |
| `rebuild` | Down + up with fresh build |
| `dev` | Switch to dev mode (Astro dev server + HMR) |
| `prod` | Switch to prod mode (static build + Caddy) |
| `clean` | Remove containers, images, and volumes |
### Deploying Updates
```bash
cd site/
git add . && git commit -m "description"
git push origin main
ssh -A warehack-ing@warehack.ing "cd birdcage-docs && git pull && make prod"
```
TLS is automatic via caddy-docker-proxy (ACME + Vultr DNS challenge). New subdomains take ~2 minutes for certificate issuance.

6095
docs/A3981-datasheet.md Normal file

File diff suppressed because it is too large Load Diff

BIN
docs/A3981-datasheet.pdf (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

231
docs/A3981-ecad.kicad_sym Normal file
View File

@ -0,0 +1,231 @@
(kicad_symbol_lib
(version 20211014)
(generator https://github.com/uPesy/easyeda2kicad.py)
(symbol "A3981KLPTR-T"
(in_bom yes)
(on_board yes)
(property
"Reference"
"U"
(id 0)
(at 0 24.13 0)
(effects (font (size 1.27 1.27) ) )
)
(property
"Value"
"A3981KLPTR-T"
(id 1)
(at 0 -21.59 0)
(effects (font (size 1.27 1.27) ) )
)
(property
"Footprint"
"A3981-ecad:TSSOP-28_L9.7-W4.4-P0.65-LS6.4-BL-EP-1"
(id 2)
(at 0 -24.13 0)
(effects (font (size 1.27 1.27) ) hide)
)
(property
"Datasheet"
"https://lcsc.com/product-detail/Motor-Drivers_ALLEGRO_A3981KLPTR-T_A3981KLPTR-T_C163315.html"
(id 3)
(at 0 -26.67 0)
(effects (font (size 1.27 1.27) ) hide)
)
(property
"LCSC Part"
"C163315"
(id 5)
(at 0 -29.21 0)
(effects (font (size 1.27 1.27) ) hide)
)
(symbol "A3981KLPTR-T_0_1"
(rectangle
(start -12.70 21.59)
(end 12.70 -19.05)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type background))
)
(circle
(center -11.43 20.32)
(radius 0.38)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(pin unspecified line
(at -15.24 16.51 0)
(length 2.54)
(name "SENSA" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 13.97 0)
(length 2.54)
(name "STRn" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 11.43 0)
(length 2.54)
(name "DIR" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 8.89 0)
(length 2.54)
(name "OAP" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 6.35 0)
(length 2.54)
(name "OSC" (effects (font (size 1.27 1.27))))
(number "5" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 3.81 0)
(length 2.54)
(name "SDI" (effects (font (size 1.27 1.27))))
(number "6" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 1.27 0)
(length 2.54)
(name "AGND" (effects (font (size 1.27 1.27))))
(number "7" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 -1.27 0)
(length 2.54)
(name "REF" (effects (font (size 1.27 1.27))))
(number "8" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 -3.81 0)
(length 2.54)
(name "SCK" (effects (font (size 1.27 1.27))))
(number "9" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 -6.35 0)
(length 2.54)
(name "VDD" (effects (font (size 1.27 1.27))))
(number "10" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 -8.89 0)
(length 2.54)
(name "OBP" (effects (font (size 1.27 1.27))))
(number "11" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 -11.43 0)
(length 2.54)
(name "MS1" (effects (font (size 1.27 1.27))))
(number "12" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 -13.97 0)
(length 2.54)
(name "MS0" (effects (font (size 1.27 1.27))))
(number "13" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 -16.51 0)
(length 2.54)
(name "SENSB" (effects (font (size 1.27 1.27))))
(number "14" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 -16.51 180)
(length 2.54)
(name "VBBB" (effects (font (size 1.27 1.27))))
(number "15" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 -13.97 180)
(length 2.54)
(name "DIAG" (effects (font (size 1.27 1.27))))
(number "16" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 -11.43 180)
(length 2.54)
(name "SDO" (effects (font (size 1.27 1.27))))
(number "17" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 -8.89 180)
(length 2.54)
(name "OBM" (effects (font (size 1.27 1.27))))
(number "18" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 -6.35 180)
(length 2.54)
(name "STEP" (effects (font (size 1.27 1.27))))
(number "19" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 -3.81 180)
(length 2.54)
(name "VREG" (effects (font (size 1.27 1.27))))
(number "20" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 -1.27 180)
(length 2.54)
(name "PGND" (effects (font (size 1.27 1.27))))
(number "21" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 1.27 180)
(length 2.54)
(name "VCP" (effects (font (size 1.27 1.27))))
(number "22" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 3.81 180)
(length 2.54)
(name "CP1" (effects (font (size 1.27 1.27))))
(number "23" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 6.35 180)
(length 2.54)
(name "CP2" (effects (font (size 1.27 1.27))))
(number "24" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 8.89 180)
(length 2.54)
(name "OAM" (effects (font (size 1.27 1.27))))
(number "25" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 11.43 180)
(length 2.54)
(name "ENABLE" (effects (font (size 1.27 1.27))))
(number "26" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 13.97 180)
(length 2.54)
(name "RESETn" (effects (font (size 1.27 1.27))))
(number "27" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 16.51 180)
(length 2.54)
(name "VBBA" (effects (font (size 1.27 1.27))))
(number "28" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 19.05 180)
(length 2.54)
(name "EP" (effects (font (size 1.27 1.27))))
(number "29" (effects (font (size 1.27 1.27))))
)
)
)
)

View File

@ -0,0 +1,54 @@
(module easyeda2kicad:TSSOP-28_L9.7-W4.4-P0.65-LS6.4-BL-EP-1 (layer F.Cu) (tedit 5DC5F6A4)
(attr smd)
(fp_text reference REF** (at 0 -6.87) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value TSSOP-28_L9.7-W4.4-P0.65-LS6.4-BL-EP-1 (at 0 6.87) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -4.92 1.77) (end -4.92 -1.77) (layer F.SilkS) (width 0.15))
(fp_line (start -4.92 -1.77) (end 4.93 -1.77) (layer F.SilkS) (width 0.15))
(fp_line (start 4.93 -1.77) (end 4.93 1.77) (layer F.SilkS) (width 0.15))
(fp_line (start 4.93 1.77) (end -4.92 1.77) (layer F.SilkS) (width 0.15))
(pad 15 smd oval (at 4.23 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 16 smd oval (at 3.58 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 17 smd oval (at 2.93 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 18 smd oval (at 2.28 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 19 smd oval (at 1.63 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 20 smd oval (at 0.98 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 21 smd oval (at 0.33 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 22 smd oval (at -0.32 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 23 smd oval (at -0.98 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 24 smd oval (at -1.63 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 25 smd oval (at -2.28 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 26 smd oval (at -2.93 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 27 smd oval (at -3.58 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 28 smd oval (at -4.23 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 14 smd oval (at 4.23 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 13 smd oval (at 3.58 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 12 smd oval (at 2.93 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 11 smd oval (at 2.28 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 10 smd oval (at 1.63 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 9 smd oval (at 0.98 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 8 smd oval (at 0.33 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 7 smd oval (at -0.32 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 6 smd oval (at -0.98 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 5 smd oval (at -1.63 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 4 smd oval (at -2.28 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 3 smd oval (at -2.93 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 2 smd oval (at -3.58 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 1 smd oval (at -4.23 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 29 smd rect (at 0.00 0.00 0.00) (size 5.50 3.00) (layers F.Cu F.Paste F.Mask))
(fp_circle (center -4.85 3.20) (end -4.82 3.20) (layer F.Fab) (width 0.06))
(fp_circle (center -4.23 3.60) (end -4.08 3.60) (layer Cmts.User) (width 0.30))
(fp_circle (center -4.85 2.87) (end -4.70 2.87) (layer F.SilkS) (width 0.30))
(fp_circle (center -4.23 1.02) (end -4.08 1.02) (layer F.SilkS) (width 0.30))
(model "/A3981-ecad.3dshapes/TSSOP-28_L9.7-W4.4-P0.65-LS6.4-BL-EP-1.wrl"
(offset (xyz 0.000 -0.000 -0.000))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

BIN
docs/A3981-images/A3981-datasheet_page_10_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_11_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_12_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_13_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_14_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_14_img_2.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_15_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_15_img_2.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_16_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_16_img_2.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_17_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_18_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_19_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_1_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_1_img_2.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_20_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_21_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_22_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_23_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_24_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_25_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_26_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_27_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_28_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_29_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_2_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_30_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_30_img_2.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_30_img_3.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_31_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_31_img_2.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_32_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_33_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_34_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_35_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_36_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_37_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_38_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_39_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_3_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_40_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_41_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_42_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_42_img_2.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_43_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_44_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_45_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_4_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_5_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_6_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_7_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_8_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-images/A3981-datasheet_page_9_img_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_1.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_10.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_11.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_12.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_13.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_14.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_15.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_16.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_17.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_18.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_19.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_2.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_20.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_21.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_22.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_23.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_24.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_25.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_26.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_27.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_28.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_29.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_3.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_30.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_31.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_32.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_33.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_34.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_35.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_36.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_37.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_38.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_39.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_4.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_40.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_41.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_42.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_43.svg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
docs/A3981-vectors/A3981-datasheet_page_44.svg (Stored with Git LFS) Normal file

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More