Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
22dcccc
Widen GuidanceSource calibration banner separator to match header width
Arjan-Woltjer Aug 8, 2026
0b371ab
Fix CANNetworkManager::CANNetwork() calls -- it's a static member, no…
Arjan-Woltjer Aug 8, 2026
5716b20
Restore NanoLibcCompat.cpp swprintf shim -- confirmed load-bearing, n…
Arjan-Woltjer Aug 8, 2026
dc31730
Fix legacy PGN source-address resolution, speed sentinel, and add ret…
Arjan-Woltjer Aug 9, 2026
e399100
Add hardware test notes for ISOBUS sessions 1-2
Arjan-Woltjer Aug 9, 2026
88071b5
minor changes to the layout added stubs in main to guide Claude in im…
Arjan-Woltjer Aug 9, 2026
77ed37c
Fix P1-P5 guidance-channel prerequisites from TC client design doc
Arjan-Woltjer Aug 9, 2026
73a8f32
Add IsobusTcInterface -- ISOBUS Task Controller client
Arjan-Woltjer Aug 9, 2026
cc642d8
Wire IsobusTcInterface diagnostics into IsobusDebugMenu
Arjan-Woltjer Aug 9, 2026
d7461bc
Correct overstated VT claim in hardware test notes
Arjan-Woltjer Aug 9, 2026
a1e241c
Add VT connect/upload progress to IsobusDebugMenu
Arjan-Woltjer Aug 9, 2026
924fd6b
Fix VT/TC partner registration and TC DDOP tree; add TC/VT diagnostics
Arjan-Woltjer Aug 10, 2026
086d5d6
Add TC-GEO connected-server capability query to IsobusTcInterface
Arjan-Woltjer Aug 10, 2026
0ef0771
Add TC-GEO manufacturer licensing research and field test log; note o…
Arjan-Woltjer Aug 10, 2026
95df65c
Fold TCGEO_Field_Test_Log.md into HardwareTestNotes.md
Arjan-Woltjer Aug 10, 2026
4dd6686
Decode the Session 3 VT rejection's error bitmask against ISO 11783-6
Arjan-Woltjer Aug 10, 2026
66a3fe1
Add WorkingSet-attribute bisection scaffold; patch AgIsoStack to deco…
Arjan-Woltjer Aug 10, 2026
7fbdcec
Fix VT object pool rejection: WorkingSet needs a child, and a field-o…
Arjan-Woltjer Aug 10, 2026
2dbcb8e
Stop flooding the VT with unconditional numeric-value updates
Arjan-Woltjer Aug 10, 2026
2e84b56
Add an app-switcher icon for the plough working set
Arjan-Woltjer Aug 10, 2026
990e23b
Wire VT Wider/Narrower soft keys into the button arbitration ladder
Arjan-Woltjer Aug 10, 2026
e0ca13f
Add ISO 11783-6:2004 standard PDF as reference
Arjan-Woltjer Aug 11, 2026
3554a2a
Add VT object pool import/export tooling for AgIsoTerminalDesigner
Arjan-Woltjer Aug 11, 2026
a083b53
Link the two upstream AgIsoStack PRs from the vendor-patch TODO list
Arjan-Woltjer Aug 11, 2026
22ba5b0
Drop unwantedRecommendations from .vscode/extensions.json
Arjan-Woltjer Aug 13, 2026
8ee3ae0
Recommend C++ tooling extensions for Ploegbesturing Isobus
Arjan-Woltjer Aug 18, 2026
d57ae30
Reorganize Ploegbesturing Isobus into calibration/config/implement/is…
Arjan-Woltjer Aug 18, 2026
d367b87
Drop unused AUnit/test_framework from Ploegbesturing Isobus's real-bo…
Arjan-Woltjer Aug 18, 2026
77b926b
Move Ploegbesturing Isobus's IMXRT1062 size-check fix to the shared t…
Arjan-Woltjer Aug 18, 2026
cc48048
Rename cryptic single-letter parser params, add GN* NMEA talker ID su…
Arjan-Woltjer Aug 18, 2026
a5db807
Document Trimble's mixed-checksum handling in SerialGuidanceChannel, …
Arjan-Woltjer Aug 18, 2026
0db54f4
Log Session 5 field test (Ag Leader InCommand 1200): VT status timeou…
Arjan-Woltjer Sep 5, 2026
590f2fa
Root-cause #17's VT Status Timeout to an AgIsoStack CF-eviction bug, …
Arjan-Woltjer Sep 5, 2026
935de81
Extend #17's root-cause analysis to cover #19 (TC never connects)
Arjan-Woltjer Sep 5, 2026
f2fc069
Log Session 6: #17/#19 fixed and verified, plus a second eviction bug…
Arjan-Woltjer Sep 5, 2026
74801af
Stop decoding Ag Leader payloads with John Deere's layout (#20)
Arjan-Woltjer Sep 5, 2026
85e1bd1
Add a Tramline Control probe to the DDOP (#21)
Arjan-Woltjer Sep 5, 2026
ee00c37
Research which Task Controllers implement Tramline Control (#21)
Arjan-Woltjer Sep 5, 2026
f4d09c9
Fix a miscited (and incorrect) TC-GEO naming claim
Arjan-Woltjer Sep 5, 2026
1b53c71
Record that vendor patch #4 diverges from upstream design intent (#22)
Arjan-Woltjer Sep 5, 2026
6d6beef
Apply the restored-CF liveness fix locally as vendor patch #5 (#22)
Arjan-Woltjer Sep 5, 2026
512d5c1
Log the full 8-byte PGN 65535 payload for the Ag Leader capture (#20)
Arjan-Woltjer Sep 5, 2026
308ce98
Add VT/TC reconnect watchdogs and partner-address visibility (#18)
Arjan-Woltjer Sep 5, 2026
029df41
Clamp the VT's XTE variable, and give the TC client our VT for langua…
Arjan-Woltjer Sep 5, 2026
6403897
Decode lat/lon from both position PGNs (Session 1 bug #6)
Arjan-Woltjer Sep 5, 2026
b69d8af
Field-test the DDI 505/506 Tramline Control handshake on an Ag Leader…
Arjan-Woltjer Sep 8, 2026
477f11d
Merge main into isobus-tc-client for the MF4 tooling
Arjan-Woltjer Sep 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Ploegbesturing Isobus/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
.vscode/c_cpp_properties.json
.vscode/launch.json
.vscode/ipch
tools/vt_pool/generated
7 changes: 4 additions & 3 deletions Ploegbesturing Isobus/.vscode/extensions.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@
// See http://go.microsoft.com/fwlink/?LinkId=827846
// for the documentation about the extensions.json format
"recommendations": [
"ms-vscode.cpp-devtools",
"ms-vscode.cpptools",
"ms-vscode.cpptools-extension-pack",
"ms-vscode.cpptools-themes",
"platformio.platformio-ide"
],
"unwantedRecommendations": [
"ms-vscode.cpptools-extension-pack"
]
}
481 changes: 481 additions & 0 deletions Ploegbesturing Isobus/Documentation/AgIsoStackVendorPatches.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
# End of Object Pool Response — Decoding "Pool Error Bitmask Value 9"

**Date compiled:** 10 August 2026
**Purpose:** Reference research resolving the Fendt Universal Terminal's rejection of Triton's VT object pool, logged in Session 3 (`HardwareTestNotes.md`, Bos). Follow-up to the same day's off-tractor reference-parser verification.

---

## 1. Background

Session 3 (Bos, Fendt tractor/UT) got the VT handshake all the way to object pool upload, then received:

> `Error in end of object pool message. Faulty Object 0 Faulty Object Parent 65535 Pool error bitmask value 9`

Two dead ends were ruled out the same day, off-tractor:

- **Not a bug in the pool bytes.** `Open-Agriculture/AgIsoStack-plus-plus`'s own IOP parser (`parse_iop_into_objects()`, fetched fresh from `main`) accepted the real 445-byte, 23-object pool outright — all objects parsed, zero errors, byte-for-byte match confirmed against the `append*()` encoding used in `VTObjectPool.cpp`.
- **Not decodable from AgIsoStack alone.** AgIsoStack's own reference VT server (`AgIsoVirtualTerminal`, via `VirtualTerminalServer::update()`) hardcodes the error-code byte to `0` on every response it sends — `/// @todo Get the parent object ID of the faulting object` sits next to it, unimplemented. So the value `9` genuinely isn't decodable from anything in the Open-Agriculture codebase.

This left the leading theory as "Fendt-proprietary code, opaque without a bench CAN test." That turned out to be wrong — the value is standard, just not implemented on the sending side by AgIsoStack's own reference server.

---

## 2. The message structure (ISO 11783-6, §C.2.5)

The End of Object Pool Response message (VT → ECU, PGN 1810, 8 bytes) carries **two separate error-code bytes**, confirmed directly from the standard text:

**Byte 2 — Error Codes** (coarse pass/fail flag):

| Bit | Meaning |
|---|---|
| 0 | Errors in the Object Pool (see remaining bytes) |
| 1 | VT ran out of memory during transfer |
| 2–3 | Reserved |
| 4 | Any other error |

**Bytes 3–4 / 5–6** — Parent Object ID / Object ID of the faulty object (transmitted as NULL Object ID, `0xFFFF`/65535, if there are no errors).

**Byte 7 — Object Pool Error Codes** (the byte behind "bitmask value 9"):

| Bit | Value | Meaning |
|---|---|---|
| 0 | 1 | Method or attribute not supported by the VT |
| 1 | 2 | Unknown object reference (missing object) |
| 2 | 4 | Any other error |
| 3 | 8 | Object pool was deleted from volatile memory |
| 4–7 | — | Reserved |

Byte 8 is reserved.

Critically, the standard also states directly: when the VT replies with an error of any type, it **should delete the object pool from volatile memory** and inform the operator. That means bit 3 is not case-specific diagnostic information — it rides along with essentially any rejection as a matter of course. **Only bits 0, 1, and 2 actually carry a diagnosis.**

---

## 3. Decoding this session's value

`9` (decimal) = `0b1001` = **bit 0 + bit 3**.

| Field | Value | Meaning |
|---|---|---|
| Faulty Object ID | `0` | The WorkingSet (root object — correct, it's object 0 in the pool) |
| Faulty Parent Object ID | `65535` (`0xFFFF`) | NULL — correct, the WorkingSet has no parent |
| Object Pool Error Codes | `9` = bit 0 + bit 3 | Bit 0: **method or attribute not supported by the VT**. Bit 3: pool deleted from volatile memory (standard boilerplate on any error — see §2) |

**Net result:** stripping the boilerplate bit, the Fendt UT is reporting a single, specific complaint — **some method or attribute value on the WorkingSet object itself is not supported by this VT** — not a structural or encoding error. That's consistent with, and now explains, the earlier finding that AgIsoStack's own reference parser accepts the exact same bytes without complaint: the pool is spec-legal, but this particular VT doesn't support something about it anyway.

---

## 4. Implications for the next bisection round

Session 3's live bisection already varied and cleared:
- Bare WorkingSet + empty DataMask, `softKeyMask = NULL_OBJECT_ID`
- DataMask referencing a real SoftKeyMask instead of NULL
- Background colour `1` + one real visible child, matching AgIsoStack's reference pool byte-for-byte

All three failed identically — which, read against §3, makes sense: none of those changes touched the WorkingSet object's *own* attribute fields, only its children or referenced masks. The next bisection round should vary the WorkingSet object's own fields specifically, for example:

- Any macro attached directly to the WorkingSet
- The `Selectable` attribute (present on newer WorkingSet encodings)
- The Active Mask object ID reference
- Anything version-gated that the reference parser accepts leniently but a production VT enforces strictly

This is a cheaper next step than the full `AgIsoVirtualTerminal` GUI / CAN-adapter bench test, and narrows Session 4 (van Mastwijk) to a sharper question: does the InCommand 1200 accept the same WorkingSet encoding that Fendt rejects?

---

## 5. Caveats

- The uploaded standard is **ISO/FDIS 11783-6:2004(E)**, and the connected terminal negotiated **VT version 6** (ISO 11783-6:2018). The End of Object Pool error-code table is foundational, low-level protocol structure that has not needed revision across VT version bumps in any implementation checked here (Wireshark's current dissector, tracking the modern standard, defines the identical bit layout — see reference 2). Treated as reliable, but not verified against a 2018 copy of the text directly.
- This decodes *what* the VT is telling you, not *which* WorkingSet attribute it objects to. That still requires either the bisection round in §4 or the deferred `AgIsoVirtualTerminal` GUI / real-CAN test.
- Not yet field-verified against the actual Fendt terminal — this is a paper analysis pending the next Bos or bench session.

---

## 6. References

1. ISO/FDIS 11783-6:2004(E), *Tractors and machinery for agriculture and forestry — Serial control and communications data network — Part 6: Virtual terminal*, §C.2.4–C.2.5 "End of Object Pool message" / "End of Object Pool Response message", pp. 87–88 — user-provided copy, primary source for the byte tables in §2.
2. Wireshark — `packet-isobus-vt.c` ISOBUS VT dissector (independent cross-check of the same bit layout, current `main`) — https://github.com/wireshark/wireshark/blob/master/epan/dissectors/packet-isobus-vt.c
3. Wireshark 4.4.0 source mirror (Fossies) — used to confirm the Byte 2 `errorCodes` field labels — https://fossies.org/linux/misc/wireshark-4.4.0.tar.xz/wireshark-4.4.0/epan/dissectors/packet-isobus-vt.c
4. Open-Agriculture/AgIsoStack-plus-plus — reference IOP parser (`parse_iop_into_objects()`) used for the same-day offline pool-acceptance test — https://github.com/Open-Agriculture/AgIsoStack-plus-plus
5. Open-Agriculture/AgIsoVirtualTerminal — reference VT server; confirms the error-code byte is hardcoded to `0` on send (unimplemented `@todo`) — https://github.com/Open-Agriculture/AgIsoVirtualTerminal
6. `HardwareTestNotes.md`, Session 3 (Bos, 2026-08-10) and same-day "Follow-up (off-tractor)" section — internal project log this research follows up on.

---

*This document is a companion to `HardwareTestNotes.md` (Session 3 / Session 4 field log) and `ISOBUS_TC_Manufacturer_Comparison.md` (TC-GEO licensing research) — both referenced above.*
Loading
Loading