Test rx an empty CAN messages.
[apps/low-level-can-service.git] / src / isotp / send.c
index 6cce5c9..b87c560 100644 (file)
@@ -6,7 +6,9 @@
 
 void isotp_complete_send(IsoTpShims* shims, IsoTpMessage* message,
         bool status, IsoTpMessageSentHandler callback) {
-    callback(message, status);
+    if(callback != NULL) {
+        callback(message, status);
+    }
 }
 
 IsoTpHandle isotp_send_single_frame(IsoTpShims* shims, IsoTpMessage* message,
@@ -42,7 +44,7 @@ IsoTpHandle isotp_send_single_frame(IsoTpShims* shims, IsoTpMessage* message,
 
 IsoTpHandle isotp_send_multi_frame(IsoTpShims* shims, IsoTpMessage* message,
         IsoTpMessageSentHandler callback) {
-    // TODO make sure to copy payload into a local buffer
+    // TODO make sure to copy message into a local buffer
     shims->log("Only single frame messages are supported");
     IsoTpHandle handle = {
         success: false,
@@ -55,14 +57,14 @@ IsoTpHandle isotp_send_multi_frame(IsoTpShims* shims, IsoTpMessage* message,
 }
 
 IsoTpHandle isotp_send(IsoTpShims* shims, const uint16_t arbitration_id,
-        const uint8_t* payload, uint16_t size,
+        const uint8_t payload[], uint16_t size,
         IsoTpMessageSentHandler callback) {
     IsoTpMessage message = {
         arbitration_id: arbitration_id,
-        payload: payload,
         size: size
     };
 
+    memcpy(message.payload, payload, size);
     if(size < 8) {
         return isotp_send_single_frame(shims, &message, callback);
     } else {