summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornorly <ny-git@enpas.org>2017-04-23 14:54:26 +0200
committernorly <ny-git@enpas.org>2017-04-23 14:54:26 +0200
commit7c66927d8141cd22fc1f29bf7f1a8fb2adb2bdbd (patch)
tree3de180d3237b6175a58649b922742b05922ed31e
parent9875dcaa0de63d8c72ea734aa6ed342de0c078f2 (diff)
vw-bap-frame.c: Extract frame handling functions
-rw-r--r--Makefile6
-rw-r--r--vw-bap-frame.c72
-rw-r--r--vw-bap.c54
-rw-r--r--vw-bap.h9
4 files changed, 82 insertions, 59 deletions
diff --git a/Makefile b/Makefile
index 5b235d5..6a0fe71 100644
--- a/Makefile
+++ b/Makefile
@@ -1,9 +1,11 @@
CFLAGS += -Wall -g
+BAPLIB = vw-bap.c vw-bap-frame.c
+
all: vw-bap-dump vw-bap-sniffer
-vw-bap-dump: vw-bap-dump.c vw-bap.c
+vw-bap-dump: vw-bap-dump.c $(BAPLIB)
-vw-bap-sniffer: vw-bap-sniffer.c vw-bap.c
+vw-bap-sniffer: vw-bap-sniffer.c $(BAPLIB)
gcc -o $@ $^ -lncurses
diff --git a/vw-bap-frame.c b/vw-bap-frame.c
new file mode 100644
index 0000000..4fa2ec2
--- /dev/null
+++ b/vw-bap-frame.c
@@ -0,0 +1,72 @@
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "vw-bap.h"
+
+
+
+struct BAP_Frame* vw_bap_frame_alloc(void)
+{
+ struct BAP_Frame* bap_frame;
+
+ bap_frame = calloc(1, sizeof(struct BAP_Frame));
+
+ return bap_frame;
+}
+
+
+void vw_bap_frame_free(struct BAP_Frame *bap_frame)
+{
+ free(bap_frame);
+}
+
+
+int vw_bap_frame_is_valid(struct BAP_Frame *bap_frame)
+{
+ if ( 0
+ || (bap_frame->opcode > 7)
+ || (bap_frame->node > 63)
+ || (bap_frame->function > 63)
+ || (bap_frame->len > 4095)
+ || (!bap_frame->is_multiframe && bap_frame->len > 6)
+ ) {
+ return 0;
+ }
+
+ return 1;
+}
+
+
+void vw_bap_frame_dump(struct BAP_Frame *bap_frame)
+{
+ unsigned i;
+
+ printf("%u. %2i/%-2i .%02i --",
+ bap_frame->opcode,
+ bap_frame->node,
+ bap_frame->function,
+ bap_frame->len);
+
+ for (i = 0; i < bap_frame->len; i++) {
+ if (!(i % 4)) {
+ printf(" ");
+ }
+ printf("%02x", (unsigned char)(bap_frame->data[i]));
+ }
+
+ printf("\n '");
+ for (i = 0; i < bap_frame->len; i++) {
+ unsigned char c = bap_frame->data[i];
+ if (!isprint(c) || c == '\n' || c == '\r') {
+ c = '.';
+ }
+ printf("%c", c);
+ }
+ printf("'");
+
+ printf("\n");
+
+ fflush(stdout);
+}
diff --git a/vw-bap.c b/vw-bap.c
index 436bd9c..1864cea 100644
--- a/vw-bap.c
+++ b/vw-bap.c
@@ -9,60 +9,6 @@
-struct BAP_Frame* vw_bap_frame_alloc(void)
-{
- struct BAP_Frame* bap_frame;
-
- bap_frame = calloc(1, sizeof(struct BAP_Frame));
-
- return bap_frame;
-}
-
-
-void vw_bap_frame_free(struct BAP_Frame *bap_frame)
-{
- free(bap_frame);
-}
-
-
-
-
-
-void vw_bap_frame_dump(struct BAP_Frame *bap_frame)
-{
- unsigned i;
-
- printf("%u. %2i/%-2i .%02i --",
- bap_frame->opcode,
- bap_frame->node,
- bap_frame->function,
- bap_frame->len);
-
- for (i = 0; i < bap_frame->len; i++) {
- if (!(i % 4)) {
- printf(" ");
- }
- printf("%02x", (unsigned char)(bap_frame->data[i]));
- }
-
- printf("\n '");
- for (i = 0; i < bap_frame->len; i++) {
- unsigned char c = bap_frame->data[i];
- if (!isprint(c) || c == '\n' || c == '\r') {
- c = '.';
- }
- printf("%c", c);
- }
- printf("'");
-
- printf("\n");
-
- fflush(stdout);
-}
-
-
-
-
struct BAP_Frame* vw_bap_handle_can_frame(struct BAP_RXer *bap, struct can_frame *frame)
{
diff --git a/vw-bap.h b/vw-bap.h
index b7540ea..7bccdfd 100644
--- a/vw-bap.h
+++ b/vw-bap.h
@@ -62,14 +62,17 @@ struct BAP_RXer {
+/* BAP frame struct handling */
+struct BAP_Frame* vw_bap_frame_alloc(void);
+ void vw_bap_frame_free(struct BAP_Frame *bap_frame);
+int vw_bap_frame_is_valid(struct BAP_Frame *bap_frame);
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);
-
-void vw_bap_frame_free(struct BAP_Frame *bap_frame);
+/* BAP reception */
+struct BAP_Frame* vw_bap_handle_can_frame(struct BAP_RXer *bap, struct can_frame *frame);
struct BAP_RXer* vw_bap_rxer_alloc();
void vw_bap_rxer_free(struct BAP_RXer *bap);