projects
/
project
/
usbmode.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
ae5b255
)
store message lengths
author
Felix Fietkau
<nbd@openwrt.org>
Thu, 30 May 2013 18:52:37 +0000
(20:52 +0200)
committer
Felix Fietkau
<nbd@openwrt.org>
Thu, 30 May 2013 18:52:37 +0000
(20:52 +0200)
main.c
patch
|
blob
|
history
switch.h
patch
|
blob
|
history
diff --git
a/main.c
b/main.c
index
b7461ad
..
fca2a37
100644
(file)
--- a/
main.c
+++ b/
main.c
@@
-20,6
+20,7
@@
static const char *config_file = DEFAULT_CONFIG;
static struct blob_buf conf;
struct blob_attr **messages = NULL;
static struct blob_buf conf;
struct blob_attr **messages = NULL;
+int *message_len;
int n_messages = 0;
static struct avl_tree devices;
int n_messages = 0;
static struct avl_tree devices;
@@
-73,20
+74,20
@@
static int hexstr2bin(const char *hex, char *buffer, int len)
return 0;
}
return 0;
}
-static
bool
convert_message(struct blob_attr *attr)
+static
int
convert_message(struct blob_attr *attr)
{
char *data;
int len;
{
char *data;
int len;
- if (!attr)
- return true;
-
data = blobmsg_data(attr);
len = strlen(data);
if (len % 2)
data = blobmsg_data(attr);
len = strlen(data);
if (len % 2)
- return false;
+ return -1;
+
+ if (hexstr2bin(data, data, len / 2))
+ return -1;
- return
!hexstr2bin(data, data, len / 2)
;
+ return
len / 2
;
}
static int parse_config(void)
}
static int parse_config(void)
@@
-115,12
+116,17
@@
static int parse_config(void)
n_messages++;
messages = calloc(n_messages, sizeof(*messages));
n_messages++;
messages = calloc(n_messages, sizeof(*messages));
+ message_len = calloc(n_messages, sizeof(*message_len));
n_messages = 0;
blobmsg_for_each_attr(cur, tb[CONF_MESSAGES], rem) {
n_messages = 0;
blobmsg_for_each_attr(cur, tb[CONF_MESSAGES], rem) {
- if (!convert_message(cur)) {
+ int len = convert_message(cur);
+
+ if (len < 0) {
fprintf(stderr, "Invalid data in message %d\n", n_messages);
return -1;
}
fprintf(stderr, "Invalid data in message %d\n", n_messages);
return -1;
}
+
+ message_len[n_messages] = len;
messages[n_messages++] = cur;
}
messages[n_messages++] = cur;
}
diff --git
a/switch.h
b/switch.h
index
ab09f11
..
1c964db
100644
(file)
--- a/
switch.h
+++ b/
switch.h
@@
-12,12
+12,14
@@
struct usbdev_data {
int interface;
int msg_endpoint;
int response_endpoint;
int interface;
int msg_endpoint;
int response_endpoint;
+ bool need_response;
char idstr[10];
char mfg[128], prod[128], serial[128];
};
extern struct blob_attr **messages;
char idstr[10];
char mfg[128], prod[128], serial[128];
};
extern struct blob_attr **messages;
+extern int *message_len;
extern int n_messages;
void handle_switch(struct usbdev_data *data);
extern int n_messages;
void handle_switch(struct usbdev_data *data);