Sketch out the API and add some notes.

This commit is contained in:
Christopher Peplin 2013-12-27 14:02:14 -05:00
parent 9dafed6b7f
commit e6d46d95d3
3 changed files with 89 additions and 2 deletions

View File

@ -1,5 +1,16 @@
ISO 15765-2 Support Library in C
============
ISO-TP (ISO 15765-2) Support Library in C
================================
## API
IspTpHandler handler = isotp_init(42, NULL, NULL, NULL);
isotp_send(const uint8_t* payload, uint16_t payload_size);
while(true) {
isotp_handle_can_frame(42, data, 8);
}
isotp_destroy(&handler);
// TODO should handlers take a context? depends on how we want to use this
## Testing

14
src/isotp/isotp.c Normal file
View File

@ -0,0 +1,14 @@
void isotp_receive_can_frame(const uint16_t arbitration_id, const uint8_t* data,
const uint8_t length) {
//match with any request we made
//handle flow control if necessary
//call callback if message completed
}
bool isotp_send(const uint8_t* payload, uint16_t payload_size) {
// we determine if it's single/multi frame and start the send
}
void isotp_set_timeout(uint16_t timeout) {
}

62
src/isotp/isotp.h Normal file
View File

@ -0,0 +1,62 @@
#ifndef __ISOTP_H__
#define __ISOTP_H__
#ifdef __cplusplus
extern "C" {
#endif
struct {
uint16_t arb_id;
void* message_received_callback;
void* message_sent_callback;
void* can_frame_sent_callback;
// Private
uint16_t timeout_ms;
bool framePadding;
uint8_t* receive_buffer;
uint16_t received_buffer_size;
uint16_t incoming_message_size;
bool sending;
// TODO timer
} IsoTpHandler;
enum {
PCI_SINGLE,
PCI_FIRST_FRAME,
PCI_CONSECUTIVE_FRAME,
PCI_FLOW_CONTROL_FRAME
} IsoTpProtocolControlInformation;
enum {
PCI_FLOW_STATUS_CONTINUE,
PCI_FLOW_STATUS_WAIT,
PCI_FLOW_STATUS_OVERFLOW
} IsoTpFlowStatus;
const uint16_t MAX_ISO_TP_MESSAGE_SIZE = 4096;
const uint16_t MAX_CAN_FRAME_SIZE = 8;
const uint8_t ISO_TP_DEFAULT_RESPONSE_TIMEOUT = 100;
const bool ISO_TP_DEFAULT_FRAME_PADDING_STATUS = true;
IsoTpHandler isotp_init(uint16_t arbitration_id,
IsoTpMessageReceivedHandler* message_received_callback,
IsoTpMessageSentHandler* message_sent_callback,
IsoTpCanFrameSentHandler* can_frame_sent_callback);
void isotp_set_timeout(uint16_t timeout);
// TODO we have to make sure to copy the payload internall if it's more than 1
// frame, the soure could go out of scope
bool isotp_send(const uint8_t* payload, uint16_t payload_size);
void isotp_receive_can_frame(const uint16_t arbitration_id, const uint8_t* data,
const uint8_t length);
void isotp_destroy(IsoTpHandler* handler);
#ifdef __cplusplus
}
#endif
#endif // __ISOTP_H__