BOROSOFTWAREAll work →
scantool/diag_l0.c 103 lines
1 finding in this fileD1L33
1/* freediag
2 * (c) fenugrec 2015
3 * GPLv3
4 */
5
6/* common L0 code */
7
8#include <assert.h>
9#include <stdlib.h>
10#include <string.h>
11
12#include "diag.h"
13#include "diag_l0.h"
14
15int diag_l0_debug; //debug flags for l0
16
17int diag_l0_open(struct diag_l0_device *dl0d, int l1proto) {
18 return dl0d->dl0->_open(dl0d, l1proto);
19}
20
21void diag_l0_close(struct diag_l0_device *dl0d) {
22 dl0d->dl0->_close(dl0d);
23}
24
25struct diag_l0_device *diag_l0_new(const char *shortname) {
26 struct diag_l0_device *dl0d;
27 int rv;
28 const struct diag_l0 *l0dev;
29 int i;
30
31 for (i=0; l0dev_list[i]; i++) {
32 l0dev = l0dev_list[i];
33 if (strcmp(shortname, l0dev->shortname) == 0) {
34 /* Found it */
35 break;
36 }
37 }
38
39 if (!l0dev_list[i]) {
40 //not found !
41 return NULL;
42 }
43
44 rv=diag_calloc(&dl0d, 1);
45 if (rv) {
46 return diag_pfwderr(rv);
47 }
48
49 dl0d->dl0 = l0dev;
50 rv = l0dev->_new(dl0d);
51 if (rv != 0) {
52 free(dl0d);
53 return diag_pfwderr(rv);
54 }
55
56 return dl0d;
57}
58
59
60void diag_l0_del(struct diag_l0_device *dl0d) {
61 if (!dl0d) {
62 return;
63 }
64
65 assert(!dl0d->opened);
66
67 dl0d->dl0->_del(dl0d);
68 free(dl0d);
69 return;
70}
71
72struct cfgi *diag_l0_getcfg(struct diag_l0_device *dl0d) {
73 if (!dl0d) {
74 return NULL;
75 }
76
77 if (dl0d->dl0->_getcfg) {
78 return dl0d->dl0->_getcfg(dl0d);
79 }
80 return NULL;
81}
82
83uint32_t diag_l0_getflags(struct diag_l0_device *dl0d) {
84 assert(dl0d);
85 return dl0d->dl0->_getflags(dl0d);
86}
87
88int diag_l0_recv(struct diag_l0_device *dl0d, void *data, size_t len, unsigned int timeout) {
89 assert(dl0d);
90 return dl0d->dl0->_recv(dl0d, data, len, timeout);
91}
92
93int diag_l0_send(struct diag_l0_device *dl0d, const void *data, size_t len) {
94 assert(dl0d);
95 return dl0d->dl0->_send(dl0d, data, len);
96}
97
98int diag_l0_ioctl(struct diag_l0_device *dl0d, unsigned cmd, void *data) {
99 assert(dl0d);
100
101 return dl0d->dl0->_ioctl(dl0d, cmd, data);
102}
103