8 #define CAN_MESSAGE_BYTE_SIZE 8
14 const uint16_t MAX_ISO_TP_MESSAGE_SIZE;
15 const uint16_t MAX_CAN_FRAME_SIZE;
16 const uint8_t ISO_TP_DEFAULT_RESPONSE_TIMEOUT;
17 const bool ISO_TP_DEFAULT_FRAME_PADDING_STATUS;
20 const uint16_t arbitration_id;
26 typedef void (*LogShim)(const char* message, ...);
27 typedef bool (*SendCanMessageShim)(const uint16_t arbitration_id,
28 const uint8_t* data, const uint8_t size);
29 typedef bool (*SetTimerShim)(uint16_t time_ms, void (*callback));
31 typedef void (*IsoTpMessageReceivedHandler)(const IsoTpMessage* message);
32 typedef void (*IsoTpMessageSentHandler)(const IsoTpMessage* message,
34 typedef void (*IsoTpCanFrameSentHandler)(const IsoTpMessage* message);
38 SendCanMessageShim send_can_message;
39 SetTimerShim set_timer;
43 uint16_t arbitration_id;
44 IsoTpMessageReceivedHandler message_received_callback;
48 // timeout_ms: ISO_TP_DEFAULT_RESPONSE_TIMEOUT,
50 // frame_padding: ISO_TP_DEFAULT_FRAME_PADDING_STATUS,
51 uint8_t* receive_buffer;
52 uint16_t received_buffer_size;
53 uint16_t incoming_message_size;
54 // TODO timer callback
58 uint16_t sending_arbitration_id;
59 uint16_t receiving_arbitration_id;
60 IsoTpMessageSentHandler message_sent_callback;
61 IsoTpCanFrameSentHandler can_frame_sent_callback;
63 // TODO going to need some state here for multi frame messages
68 ISOTP_HANDLE_RECEIVING
75 IsoTpReceiveHandle receive_handle;
76 IsoTpSendHandle send_handle;
82 PCI_FIRST_FRAME = 0x1,
83 PCI_CONSECUTIVE_FRAME = 0x2,
84 PCI_FLOW_CONTROL_FRAME = 0x3
85 } IsoTpProtocolControlInformation;
88 PCI_FLOW_STATUS_CONTINUE = 0x0,
89 PCI_FLOW_STATUS_WAIT = 0x1,
90 PCI_FLOW_STATUS_OVERFLOW = 0x2
93 IsoTpShims isotp_init_shims(LogShim log,
94 SendCanMessageShim send_can_message,
95 SetTimerShim set_timer);
100 IsoTpMessage isotp_receive_can_frame(IsoTpShims* shims, IsoTpHandle* handle,
101 const uint16_t arbitration_id, const uint8_t data[],
104 /* Public: Change the timeout for waiting on an ISO-TP response frame.
106 * If this function is not used, the conventional 100ms is used by default.
108 * handler - the ISO-TP handler to modify.
109 * timeout - the new timeout in milliseconds.
111 // void isotp_set_timeout(IsoTpHandler* handler, uint16_t timeout_ms);
113 // void isotp_destroy(IsoTpHandler* handler);
115 void isotp_message_to_string(const IsoTpMessage* message, char* destination,
116 size_t destination_length);
118 IsoTpHandle isotp_send(IsoTpShims* shims, const uint16_t arbitration_id,
119 const uint8_t* payload, uint16_t size,
120 IsoTpMessageSentHandler callback);
122 IsoTpHandle isotp_receive(IsoTpShims* shims,
123 const uint16_t arbitration_id, IsoTpMessageReceivedHandler callback);
129 #endif // __ISOTP_H__