diff options
author | Romain Forlot <romain.forlot@iot.bzh> | 2017-06-20 10:24:05 +0000 |
---|---|---|
committer | Romain Forlot <romain.forlot@iot.bzh> | 2017-06-20 10:24:05 +0000 |
commit | 32e25cbca210a359b09768537b6f443fe90a3070 (patch) | |
tree | 3309794c15d8a8f8e9c1c08cad072ee1378813ba /CAN-binder/libs/isotp-c/src/isotp/send.c | |
parent | 76c43dec62b2e21cd6446360c00d4fe6b437533f (diff) |
Separation Generator to a dedicated repo
Change-Id: Id94831651c3266861435272a6e36c7884bef2c45
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
Diffstat (limited to 'CAN-binder/libs/isotp-c/src/isotp/send.c')
-rw-r--r-- | CAN-binder/libs/isotp-c/src/isotp/send.c | 89 |
1 files changed, 0 insertions, 89 deletions
diff --git a/CAN-binder/libs/isotp-c/src/isotp/send.c b/CAN-binder/libs/isotp-c/src/isotp/send.c deleted file mode 100644 index e849bb2c..00000000 --- a/CAN-binder/libs/isotp-c/src/isotp/send.c +++ /dev/null @@ -1,89 +0,0 @@ -#include <isotp/send.h> -#include <bitfield/bitfield.h> -#include <string.h> - -#define PCI_NIBBLE_INDEX 0 -#define PAYLOAD_LENGTH_NIBBLE_INDEX 1 -#define PAYLOAD_BYTE_INDEX 1 - -void isotp_complete_send(IsoTpShims* shims, IsoTpMessage* message, - bool status, IsoTpMessageSentHandler callback) { - if(callback != NULL) { - callback(message, status); - } -} - -IsoTpSendHandle isotp_send_single_frame(IsoTpShims* shims, IsoTpMessage* message, - IsoTpMessageSentHandler callback) { - IsoTpSendHandle handle = { - success: false, - completed: true - }; - - uint8_t can_data[CAN_MESSAGE_BYTE_SIZE] = {0}; - if(!set_nibble(PCI_NIBBLE_INDEX, PCI_SINGLE, can_data, sizeof(can_data))) { - shims->log("Unable to set PCI in CAN data"); - return handle; - } - - if(!set_nibble(PAYLOAD_LENGTH_NIBBLE_INDEX, message->size, can_data, - sizeof(can_data))) { - shims->log("Unable to set payload length in CAN data"); - return handle; - } - - if(message->size > 0) { - memcpy(&can_data[1], message->payload, message->size); - } - - shims->send_can_message(message->arbitration_id, can_data, - shims->frame_padding ? 8 : 1 + message->size); - handle.success = true; - isotp_complete_send(shims, message, true, callback); - return handle; -} - -IsoTpSendHandle isotp_send_multi_frame(IsoTpShims* shims, IsoTpMessage* message, - IsoTpMessageSentHandler callback) { - // TODO make sure to copy message into a local buffer - shims->log("Only single frame messages are supported"); - IsoTpSendHandle handle = { - success: false, - completed: true - }; - // TODO need to set sending and receiving arbitration IDs separately if we - // can't always just add 0x8 (and I think we can't) - return handle; -} - -IsoTpSendHandle isotp_send(IsoTpShims* shims, const uint16_t arbitration_id, - const uint8_t payload[], uint16_t size, - IsoTpMessageSentHandler callback) { - IsoTpMessage message = { - arbitration_id: arbitration_id, - size: size - }; - - memcpy(message.payload, payload, size); - if(size < 8) { - return isotp_send_single_frame(shims, &message, callback); - } else { - return isotp_send_multi_frame(shims, &message, callback); - } -} - -bool isotp_continue_send(IsoTpShims* shims, IsoTpSendHandle* handle, - const uint16_t arbitration_id, const uint8_t data[], - const uint8_t size) { - // TODO this will need to be tested when we add multi-frame support, - // which is when it'll be necessary to pass in CAN messages to SENDING - // handles. - if(handle->receiving_arbitration_id != arbitration_id) { - if(shims->log != NULL) { - shims->log("The arb ID 0x%x doesn't match the expected tx continuation ID 0x%x", - arbitration_id, handle->receiving_arbitration_id); - } - return false; - } - return false; -} |