27#ifndef DETERMINISTICESPASYNCWEBSERVER_J1939_H
28#define DETERMINISTICESPASYNCWEBSERVER_J1939_H
39#define J1939_PGN_TP_CM 0x00EC00u
40#define J1939_PGN_TP_DT 0x00EB00u
41#define J1939_PGN_ADDRESS_CLAIM 0x00EE00u
42#define J1939_PGN_REQUEST 0x00EA00u
43#define J1939_ADDR_GLOBAL 0xFFu
44#define J1939_ADDR_NULL 0xFEu
45#define J1939_PDU2_THRESHOLD 240u
48#define J1939_TP_CM_RTS 0x10u
49#define J1939_TP_CM_CTS 0x11u
50#define J1939_TP_CM_EOM_ACK 0x13u
51#define J1939_TP_CM_BAM 0x20u
52#define J1939_TP_CM_ABORT 0xFFu
54#define J1939_TP_DT_LEN 7u
69enum class J1939TpResult : uint8_t
88 uint8_t buf[DETWS_J1939_TP_MAX];
94bool j1939_encode_id(uint32_t *
id, uint8_t priority, uint32_t pgn, uint8_t sa, uint8_t da);
97bool j1939_decode_id(uint32_t
id, J1939Id *out);
102bool j1939_build_message(
CanFrame *out, uint8_t priority, uint32_t pgn, uint8_t sa, uint8_t da,
const uint8_t *data,
106bool j1939_build_request(
CanFrame *out, uint8_t sa, uint8_t da, uint32_t requested_pgn);
109bool j1939_build_address_claim(
CanFrame *out, uint8_t sa, uint64_t name);
112uint64_t j1939_build_name(
bool arbitrary_address_capable, uint8_t industry_group, uint8_t vehicle_system_instance,
113 uint8_t vehicle_system, uint8_t function, uint8_t function_instance, uint8_t ecu_instance,
114 uint16_t manufacturer_code, uint32_t identity_number);
119uint8_t j1939_tp_num_packets(uint16_t total_size);
122bool j1939_build_bam_cm(
CanFrame *out, uint8_t sa, uint32_t pgn, uint16_t total_size);
125bool j1939_build_tp_dt(
CanFrame *out, uint8_t sa, uint8_t da, uint8_t seq,
const uint8_t *chunk, uint8_t chunk_len);
128void j1939_tp_reset(J1939TpRx *rx);
131J1939TpResult j1939_tp_feed(J1939TpRx *rx,
const CanFrame *f);
User-facing configuration for DeterministicESPAsyncWebServer.
Shared CAN 2.0 frame type for the CAN-based industrial codecs (one source of truth).