From 7c66927d8141cd22fc1f29bf7f1a8fb2adb2bdbd Mon Sep 17 00:00:00 2001 From: norly Date: Sun, 23 Apr 2017 14:54:26 +0200 Subject: vw-bap-frame.c: Extract frame handling functions --- Makefile | 6 +++-- vw-bap-frame.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ vw-bap.c | 54 ------------------------------------------- vw-bap.h | 9 +++++--- 4 files changed, 82 insertions(+), 59 deletions(-) create mode 100644 vw-bap-frame.c 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 +#include +#include +#include + +#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); -- cgit v1.2.3