diff options
author | norly <ny-git@enpas.org> | 2017-04-23 14:54:26 +0200 |
---|---|---|
committer | norly <ny-git@enpas.org> | 2017-04-23 14:54:26 +0200 |
commit | 7c66927d8141cd22fc1f29bf7f1a8fb2adb2bdbd (patch) | |
tree | 3de180d3237b6175a58649b922742b05922ed31e | |
parent | 9875dcaa0de63d8c72ea734aa6ed342de0c078f2 (diff) |
vw-bap-frame.c: Extract frame handling functions
-rw-r--r-- | Makefile | 6 | ||||
-rw-r--r-- | vw-bap-frame.c | 72 | ||||
-rw-r--r-- | vw-bap.c | 54 | ||||
-rw-r--r-- | vw-bap.h | 9 |
4 files changed, 82 insertions, 59 deletions
@@ -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); +} @@ -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) { @@ -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); |