Add multiframe flag, finish memory management
authornorly <ny-git@enpas.org>
Wed, 22 Mar 2017 21:53:40 +0000 (22:53 +0100)
committernorly <ny-git@enpas.org>
Wed, 22 Mar 2017 21:53:40 +0000 (22:53 +0100)
vw-bap.c
vw-bap.h

index 52c37e853a82b664a05a768b4a87a12873d5d076..5e815246a03bd8c40ebd0c2b93107f39495ee189 100644 (file)
--- a/vw-bap.c
+++ b/vw-bap.c
@@ -81,6 +81,8 @@ struct BAP_Frame* vw_bap_handle_can_frame(struct BAP_RXer *bap, struct can_frame
                                return NULL;
                        }
 
+                       bap_frame->is_multiframe = 1;
+
                        header = (frame->data[2] << 8) | frame->data[3];
                        bap_frame->opcode = (header >> 12) & 0x7;
                        bap_frame->subnode = (header >> 6) & 0x3F;
@@ -155,6 +157,8 @@ struct BAP_Frame* vw_bap_handle_can_frame(struct BAP_RXer *bap, struct can_frame
                        return NULL;
                }
 
+               bap_frame->is_multiframe = 0;
+
                header = (frame->data[0] << 8) | frame->data[1];
                bap_frame->opcode = (header >> 12) & 0x7;
                bap_frame->subnode = (header >> 6) & 0x3F;
@@ -174,6 +178,17 @@ struct BAP_Frame* vw_bap_handle_can_frame(struct BAP_RXer *bap, struct can_frame
 
 
 
+void vw_bap_frame_free(struct BAP_Frame *bap_frame)
+{
+       if (bap_frame->data) {
+               free(bap_frame->data);
+       }
+
+       free(bap_frame);
+}
+
+
+
 struct BAP_RXer* vw_bap_alloc()
 {
        struct BAP_RXer *bap;
@@ -191,14 +206,13 @@ struct BAP_RXer* vw_bap_alloc()
 
 void vw_bap_free(struct BAP_RXer *bap)
 {
-       /* TODO */
-       free(bap);
-}
-
+       int i;
 
+       for (i = 0; i < 8; i++) {
+               if (bap->mfchannel[i]) {
+                       vw_bap_frame_free(bap->mfchannel[i]);
+               }
+       }
 
-void vw_bap_frame_free(struct BAP_Frame *bap_frame)
-{
-       /* TODO */
-       free(bap_frame);
+       free(bap);
 }
index 02101048a3f8b03e905ce5b1441e802ba29c7435..00c9b75b9a4fb16e252853e8d016275cc8d54b6f 100644 (file)
--- a/vw-bap.h
+++ b/vw-bap.h
@@ -11,6 +11,8 @@ typedef unsigned short BAP_FrameLen;
 
 
 struct BAP_Frame {
+       int is_multiframe;
+
        BAP_OpCode opcode;
        BAP_SubNode subnode;
        BAP_SubFunction function;
@@ -33,10 +35,10 @@ void vw_bap_frame_dump(struct BAP_Frame *bap_frame);
 
 struct BAP_Frame* vw_bap_handle_can_frame(struct BAP_RXer *bap, struct can_frame *frame);
 
-struct BAP_RXer* vw_bap_alloc();
-void vw_bap_free(struct BAP_RXer *bap);
 void vw_bap_frame_free(struct BAP_Frame *bap_frame);
 
+struct BAP_RXer* vw_bap_alloc();
+void vw_bap_free(struct BAP_RXer *bap);
 
 
 #endif