X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fisotp%2Fisotp.c;h=f115810e92374485d1de4433e5dd14284a1a6f33;hb=ef06cb3a05d45df7a04cf91ab5c0b233fdf2bd48;hp=9aa051bc02dc00f7bf694191898093140c4d17ae;hpb=482c7eafcb35a4031ab6f2241b14ac495735b7cd;p=apps%2Flow-level-can-service.git diff --git a/src/isotp/isotp.c b/src/isotp/isotp.c index 9aa051b..f115810 100644 --- a/src/isotp/isotp.c +++ b/src/isotp/isotp.c @@ -1,12 +1,6 @@ #include -#include #include -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; - /* void isotp_set_timeout(IsoTpHandler* handler, uint16_t timeout_ms) { */ /* handler->timeout_ms = timeout_ms; */ /* } */ @@ -23,65 +17,14 @@ IsoTpShims isotp_init_shims(LogShim log, SendCanMessageShim send_can_message, void isotp_message_to_string(const IsoTpMessage* message, char* destination, size_t destination_length) { - char payload_string[message->size * 2 + 1]; - for(int i = 0; i < message->size; i++) { - // TODO, bah this isn't working because snprintf hits the NULL char that - // it wrote the last time and stops cold - snprintf(&payload_string[i * 2], 2, "%02x", message->payload[i]); - } - snprintf(destination, destination_length, "ID: 0x%02x, Payload: 0x%s", - message->arbitration_id, payload_string); -} - -IsoTpMessage isotp_receive_can_frame(IsoTpShims* shims, IsoTpHandle* handle, - const uint16_t arbitration_id, const uint8_t data[], - const uint8_t data_length) { - IsoTpMessage message = { - arbitration_id: arbitration_id, - completed: false - }; - - if(data_length < 1) { - return message; - } - - if(handle->type == ISOTP_HANDLE_RECEIVING) { - if(handle->receive_handle.arbitration_id != arbitration_id) { - return message; - } - } else if(handle->type == ISOTP_HANDLE_SENDING) { - if(handle->send_handle.receiving_arbitration_id != arbitration_id) { - return message; - } - } else { - shims->log("The ISO-TP handle is corrupt"); - return message; - } - - IsoTpProtocolControlInformation pci = (IsoTpProtocolControlInformation) - get_nibble(data, data_length, 0); - - uint8_t payload_length = get_nibble(data, data_length, 1); - uint8_t payload[payload_length]; - if(payload_length > 0 && data_length > 0) { - memcpy(payload, &data[1], payload_length); - } - - // TODO this is set up to handle rx a response with a payload, but not to - // handle flow control responses for multi frame messages that we're in the - // process of sending - - switch(pci) { - case PCI_SINGLE: { - message.payload = payload; - message.size = payload_length; - message.completed = true; - isotp_handle_single_frame(handle, &message); - break; - } - default: - shims->log("Only single frame messages are supported"); - break; - } - return message; + snprintf(destination, destination_length, "ID: 0x%02x, Payload: 0x%02x%02x%02x%02x%02x%02x%02x%02x", + message->arbitration_id, + message->payload[0], + message->payload[1], + message->payload[2], + message->payload[3], + message->payload[4], + message->payload[5], + message->payload[6], + message->payload[7]); }