Avoid hitting a NULL pointer when using callbacks.
[apps/agl-service-can-low-level.git] / src / isotp / receive.c
index 9add9d5..1692f8d 100644 (file)
@@ -1,7 +1,28 @@
 #include <isotp/receive.h>
 
-void isotp_handle_single_frame(IsoTpHandler* handler,
-        const uint16_t arbitration_id, const uint8_t* data,
-        const uint8_t length) {
-    handler->message_received_callback(arbitration_id, data, length);
+bool isotp_handle_single_frame(IsoTpHandle* handle, IsoTpMessage* message) {
+    isotp_complete_receive(handle, message);
+    return true;
+}
+
+void isotp_complete_receive(IsoTpHandle* handle, IsoTpMessage* message) {
+    if(handle->receive_handle.message_received_callback != NULL) {
+        handle->receive_handle.message_received_callback(message);
+    }
+}
+
+IsoTpHandle isotp_receive(IsoTpShims* shims,
+        const uint16_t arbitration_id, IsoTpMessageReceivedHandler callback) {
+    IsoTpReceiveHandle receive_handle = {
+        arbitration_id: arbitration_id,
+        message_received_callback: callback
+    };
+
+    IsoTpHandle handle = {
+        success: false,
+        completed: true,
+        receive_handle: receive_handle,
+        type: ISOTP_HANDLE_RECEIVING
+    };
+    return handle;
 }