summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristopher Peplin <chris.peplin@rhubarbtech.com>2014-01-02 15:28:52 -0500
committerChristopher Peplin <chris.peplin@rhubarbtech.com>2014-01-02 15:28:52 -0500
commite3637d97ecaef1768d3f9ef40cb0204a0e668ff2 (patch)
treea1f2db1c34cfde48fe8533877015556ba7309c30
parentfe20a273bb3979d9e806d828486633249d073ede (diff)
Only mark handle as completed when fully received.
-rw-r--r--src/isotp/isotp.c2
-rw-r--r--src/isotp/isotp.h5
-rw-r--r--src/isotp/receive.c2
-rw-r--r--tests/test_receive.c3
4 files changed, 11 insertions, 1 deletions
diff --git a/src/isotp/isotp.c b/src/isotp/isotp.c
index 9aa051bc..1605d435 100644
--- a/src/isotp/isotp.c
+++ b/src/isotp/isotp.c
@@ -76,6 +76,8 @@ IsoTpMessage isotp_receive_can_frame(IsoTpShims* shims, IsoTpHandle* handle,
message.payload = payload;
message.size = payload_length;
message.completed = true;
+ handle->success = true;
+ handle->completed = true;
isotp_handle_single_frame(handle, &message);
break;
}
diff --git a/src/isotp/isotp.h b/src/isotp/isotp.h
index 103c402d..c0db0178 100644
--- a/src/isotp/isotp.h
+++ b/src/isotp/isotp.h
@@ -101,6 +101,11 @@ IsoTpMessage isotp_receive_can_frame(IsoTpShims* shims, IsoTpHandle* handle,
const uint16_t arbitration_id, const uint8_t data[],
const uint8_t size);
+// TODO perhaps this makes more sense as 2 functions:
+// bool isotp_continue_send()
+// IsoTpMessage isotp_continue_receive()
+// but both with the same args
+
/* Public: Change the timeout for waiting on an ISO-TP response frame.
*
* If this function is not used, the conventional 100ms is used by default.
diff --git a/src/isotp/receive.c b/src/isotp/receive.c
index 1692f8d3..b07950c5 100644
--- a/src/isotp/receive.c
+++ b/src/isotp/receive.c
@@ -20,7 +20,7 @@ IsoTpHandle isotp_receive(IsoTpShims* shims,
IsoTpHandle handle = {
success: false,
- completed: true,
+ completed: false,
receive_handle: receive_handle,
type: ISOTP_HANDLE_RECEIVING
};
diff --git a/tests/test_receive.c b/tests/test_receive.c
index 2ce3feff..5c757076 100644
--- a/tests/test_receive.c
+++ b/tests/test_receive.c
@@ -28,6 +28,7 @@ extern void setup();
START_TEST (test_receive_wrong_id)
{
const uint8_t data[CAN_MESSAGE_BYTE_SIZE] = {0};
+ fail_if(HANDLE.completed);
IsoTpMessage message = isotp_receive_can_frame(&SHIMS, &HANDLE, 0x100, data, 1);
fail_if(message.completed);
fail_if(message_was_received);
@@ -47,7 +48,9 @@ END_TEST
START_TEST (test_receive_single_frame_empty_payload)
{
const uint8_t data[CAN_MESSAGE_BYTE_SIZE] = {0x00, 0x12, 0x34};
+ fail_if(HANDLE.completed);
IsoTpMessage message = isotp_receive_can_frame(&SHIMS, &HANDLE, 0x2a, data, 3);
+ fail_unless(HANDLE.completed);
fail_unless(message.completed);
fail_unless(message_was_received);
ck_assert_int_eq(last_message_received_arb_id, 0x2a);