Skip to content

Make Task Controller work with John Deere tractors factory harness#32

Merged
gunicsba merged 7 commits intoAgOpenGPS-Official:developfrom
gunicsba:johndeere_issues
Mar 20, 2026
Merged

Make Task Controller work with John Deere tractors factory harness#32
gunicsba merged 7 commits intoAgOpenGPS-Official:developfrom
gunicsba:johndeere_issues

Conversation

@gunicsba
Copy link
Copy Markdown
Contributor

Add an extra parameter in the settings.json file under %APPDATA%/AOG-Taskcontroller to disable tecuFunction. (John Deere tractor didn't appreciate having a second TECU on the bus) and likely all the tractors with proper ISOBUS will be the same.

Our TC discovered the tractor as ISOBUS implement and resulted in a section collision...

Add an extra parameter in the settings.json file under %APPDATA%/AOG-Taskcontroller to disable tecuFunction. (John Deere tractor didn't appreciate having a second TECU on the bus) and likely all the tractors with proper ISOBUS will be the same.

Our TC discovered the tractor as ISOBUS implement and resulted in a section collision...
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds a configurable way to disable creating a Tractor ECU (TECU) control function to avoid John Deere factory harness / ISOBUS bus collisions, and adds some guardrails to avoid treating non-implement devices as section-control clients.

Changes:

  • Add tecuEnabled setting (persisted in settings.json) and gate TECU creation on it.
  • Skip section-control operations for clients that don’t support section control / have zero sections.
  • Expand logging and update build/formatting instructions + bump project version.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
src/task_controller.cpp Adds client logging and skips section-control operations for clients lacking SectionControlState DDI.
src/settings.cpp Loads/saves new tecuEnabled boolean setting and exposes getter/setter.
src/app.cpp Uses tecuEnabled to conditionally create TECU; skips UDP heartbeat payloads for clients with 0 sections.
include/settings.hpp Declares tecuEnabled API and default.
readme.md Updates CMake invocation and adds formatting/pre-commit instructions.
CMakeLists.txt Bumps project version to 1.3.1.
Comments suppressed due to low confidence (1)

src/task_controller.cpp:465

  • The new object-pool transfer log runs every time store_device_descriptor_object_pool() is called, which can be very frequent during DDOP uploads and may flood stdout / slow transfers. Consider lowering this to a debug-level log, rate-limiting it, or logging only once per transfer (e.g., when appendToPool is false / first chunk).
bool MyTCServer::store_device_descriptor_object_pool(std::shared_ptr<isobus::ControlFunction> partnerCF, const std::vector<std::uint8_t> &binaryPool, bool appendToPool)
{
	std::cout << "[TC Server] Client " << partnerCF->get_NAME().get_full_name() << " requesting object pool transfer of " << binaryPool.size() << " bytes" << std::endl;
	if (uploadedPools.find(partnerCF) == uploadedPools.end())
	{
		uploadedPools[partnerCF] = std::queue<std::vector<std::uint8_t>>();
	}
	uploadedPools[partnerCF].push(binaryPool);
	return true;

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

gunicsba and others added 3 commits March 16, 2026 23:37
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a configurable way to disable creating a local Tractor ECU (TECU) control function to avoid collisions on tractors with an existing factory TECU (e.g., John Deere), and tightens section-control handling to ignore non-implement clients.

Changes:

  • Add tecuEnabled (default true) to settings load/save and gate TECU initialization on it.
  • Avoid interacting with non-implement clients in section-control paths (skip “no sections” clients; skip clients lacking section-control DDI mapping).
  • Document the new configuration option and bump project version.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
src/task_controller.cpp Adds client logs; changes section-control update logic to skip certain clients and fixes early-return behavior.
src/settings.cpp Loads/saves tecuEnabled from settings.json with a default fallback.
src/app.cpp Gates TECU creation on settings->is_tecu_enabled() and skips heartbeat payloads for clients with zero sections.
include/settings.hpp Declares tecuEnabled setting and accessors with default value.
readme.md Documents tecuEnabled and updates the suggested CMake configure command.
CMakeLists.txt Version bump to 1.3.1.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

gunicsba and others added 2 commits March 17, 2026 00:13
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
@gunicsba gunicsba marked this pull request as ready for review March 17, 2026 08:13
@gunicsba
Copy link
Copy Markdown
Contributor Author

We have validated this on a second machine as well.

@gunicsba gunicsba merged commit 364eb1d into AgOpenGPS-Official:develop Mar 20, 2026
3 checks passed
@gunicsba gunicsba deleted the johndeere_issues branch March 20, 2026 09:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants