Skip to content

Feature Request: Allow RTS/CTS Transport for PDU2 PGNs #37

Description

@drewr95

Summary

The current implementation appears to force Transport Protocol transfers of PDU2 PGNs (PF 240-255) to use BAM (Broadcast Announce Message), even when a specific destination address is supplied.

I would like to request support for RTS/CTS transport of PDU2 PGNs when a non-global destination address is provided.

Background

In J1939, the PGN being transported and the Transport Protocol session addressing are separate concepts:

PDU2 PGNs are normally broadcast when transmitted as a single-frame J1939 message.
TP.CM and TP.DT messages themselves are PDU1 messages and may be either:
Global (BAM), or
Destination-specific (RTS/CTS).

Because of this separation, some J1939 implementations support transporting a PDU2 PGN using a destination-specific RTS/CTS session.

For example, a proprietary message using PGN 0x00FF02 may need to transfer more than 8 bytes to a single target ECU. In this case, an RTS/CTS session addressed to a specific destination can be desirable to:

Reduce network traffic versus BAM
Ensure flow control from the receiver
Avoid unnecessary processing by other nodes
Match the behavior of existing embedded J1939 implementations
Current Behavior

When calling send_pgn() with:

A PDU2 PGN (PF 240-255)
Payload length > 8 bytes
A specific destination address

the library appears to force the destination to global and initiates a BAM transfer instead of RTS/CTS.

Requested Behavior

Allow RTS/CTS transport when:

Payload length requires TP
A non-global destination address is supplied

The transport mode could be selected based on the destination address rather than solely on the PGN type:

Global destination → BAM
Specific destination → RTS/CTS

This would preserve existing behavior while enabling additional valid use cases.

Example Use Case

Transferring a multi-packet proprietary B message:

PGN: 0x00FF02
Length: > 8 bytes
Destination: ECU at address 0x80

Desired TP sequence:

TP.CM_RTS sent to DA=0x80
CTS exchange
TP.DT packets
EOM ACK

instead of forcing:

TP.CM_BAM
Broadcast TP.DT packets

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions