X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fisotp%2Freceive.c;h=1692f8d39bc1aa61b0726a1e956563b1d80a87f2;hb=fe20a273bb3979d9e806d828486633249d073ede;hp=b4978097859ae663272de53b1e4b2eae1ca03a0e;hpb=fd2f9c3b0d869e8243c871e66d31da62bc65887a;p=apps%2Fagl-service-can-low-level.git diff --git a/src/isotp/receive.c b/src/isotp/receive.c index b4978097..1692f8d3 100644 --- a/src/isotp/receive.c +++ b/src/isotp/receive.c @@ -1,47 +1,28 @@ #include -void isotp_handle_single_frame(IsoTpHandler* handler, IsoTpMessage* message) { - isotp_complete_receive(handler, message); +bool isotp_handle_single_frame(IsoTpHandle* handle, IsoTpMessage* message) { + isotp_complete_receive(handle, message); + return true; } -void isotp_complete_receive(IsoTpHandler* handler, IsoTpMessage* message) { - handler->message_received_callback(message); -} - -void isotp_receive_can_frame(IsoTpHandler* handler, - const uint16_t arbitration_id, const uint64_t data, - const uint8_t length) { - if(arbitration_id != handler->arbitration_id){ - return; - } - - // TODO use CanMessage struct from canutil library - allocate payload buffer - // on stack, 8 bytes - // TODO this function should receive uint64_t... - IsoTpProtocolControlInformation pci = (IsoTpProtocolControlInformation) - getBitField(data, 0, 4, false); - - // TODO this is messed up! need a better API for grabbing bytes - uint8_t payload_length = getBitField(data, 4, 4, false); - uint8_t payload[payload_length]; - uint64_t flipped_data = __builtin_bswap64(data); - if(payload_length > 0) { - memcpy(payload, &(((uint8_t*)&flipped_data)[1]), payload_length); +void isotp_complete_receive(IsoTpHandle* handle, IsoTpMessage* message) { + if(handle->receive_handle.message_received_callback != NULL) { + handle->receive_handle.message_received_callback(message); } +} - IsoTpMessage message = { +IsoTpHandle isotp_receive(IsoTpShims* shims, + const uint16_t arbitration_id, IsoTpMessageReceivedHandler callback) { + IsoTpReceiveHandle receive_handle = { arbitration_id: arbitration_id, - payload: payload, - size: payload_length + message_received_callback: callback }; - switch(pci) { - case PCI_SINGLE: - isotp_handle_single_frame(handler, &message); - break; - default: - handler->shims->log("Only single frame messages are supported"); - break; - } + IsoTpHandle handle = { + success: false, + completed: true, + receive_handle: receive_handle, + type: ISOTP_HANDLE_RECEIVING + }; + return handle; } -