*/
typedef struct {
uint8_t channelid; /**< channel index */
- uint8_t bypass_len; /**< attached bypass message length */
+ int bypass_len; /**< attached bypass message length */
uint8_t bypass[255]; /**< attached bypass message */
- uint8_t data_len; /**< data length (must be aligned to 16 bytes) */
+ int data_len; /**< data length (must be aligned to 16 bytes) */
uint8_t data[1472]; /**< data message */
} CLEAR_DATA_t;
memset (buffer + size - BUFMAX - 1, 0, BUFMAX + 1);
blocklen = fread (buffer + size - BUFMAX - 1, 1, BUFMAX, sd);
length += blocklen;
- VERBOSE (morep, DEBUG, PRINTF ("buffer: 0x%p 0x%p %d %d %d\n", buffer, buffer + size - BUFMAX - 1, (int)size, length, blocklen));
} while (blocklen > 0);
/* check size */
VERBOSE (morep, DEBUG, PRINTF ("work with %c[%s]\n", comm->mode ? 'T' : 'R', comm->etype));
/* get values */
- char *tmp = line;
+ char *tmp = line + offset;
TEST_CHARS (tmp, " \t", 0);
- TEST_CHARS (tmp, " \t=", 1);
if (strncmp (tmp, "MSG", 3) != 0) {
- VERBOSE (morep, WARNING, PRINTF ("can't parse line '%s'\n", line));
+ VERBOSE (morep, WARNING, PRINTF ("can't parse line '%s' (%s)\n", line, tmp));
continue;
}
+ tmp += 3;
TEST_CHARS (tmp, " \t=", 0);
uint8_t msgtype = strtol (tmp, &tmp, 0);
if ((*tmp != ' ') && (*tmp != '\t')) {
VERBOSE (morep, WARNING, PRINTF ("can't parse line '%s'\n", line));
continue;
}
+ VERBOSE (morep, TRACE, PRINTF ("payload length: %d\n", payload.data_len));
/* transmit */
if (mode == 1) {
@param str string to be parsed
@param delim list of characters to test
- @param test 0 for "contain only", 1 for "exclude"
+ @param stop 0 for "contain only", 1 for "exclude"
*/
-#define TEST_CHARS(str, delim, test) \
+#define TEST_CHARS(str, delim, stop) \
while (*str != '\0') { \
int i, stat = 0; \
for (i = 0; (delim[i] != '\0') && (!stat); i++) { \
stat = 1; \
} \
} \
- if (stat == test) { \
+ if (stat == stop) { \
break; \
} \
str++; \
#define BEGIN_PARSE(line) \
{ \
int rc = 0; \
- char *pt = (line); \
+ char *pt = line; \
while (1) { \
/* find variable */ \
TEST_CHARS (pt, " \t", 0); \
if (*var == '\0') { \
break; \
} \
+ *pt++ = '\0'; \
+ VERBOSE (morep, TRACE, PRINTF ("var: %s\n", var)); \
TEST_CHARS (pt, " \t=", 0); \
/* find value */ \
char *val = pt; \
} \
pt++; \
} \
+ VERBOSE (morep, TRACE, PRINTF ("val: %s\n", val)); \
if (*val == '\0') { \
rc = 1; \
break; \
#define PARSEA(name, buf) \
else if (strcmp (var, name) == 0) { \
- buf##_len = parse_array (val, buf, sizeof (buf)); \
+ buf##_len = parse_array (val, buf, sizeof (buf)); \
}
/**
End of parsing macro
*/
-#define END_PARSE() \
- else { \
- VERBOSE (morep, WARNING, PRINTF ("can understand '%s'\n", var)); \
- rc = 1; \
- break; \
- } \
- } \
- return rc; \
+#define END_PARSE() \
+ else { \
+ VERBOSE (morep, WARNING, PRINTF ("can't understand '%s'\n", var)); \
+ rc = 1; \
+ break; \
+ } \
+ } \
+ return rc; \
}
/**
{
BEGIN_PARSE (line)
PARSEA ("DATA", out->data)
+ PARSEA ("PAYLOAD", out->data)
END_PARSE ()
}
Raw data type
*/
typedef struct {
- uint8_t data_len; /**< data length*/
- uint8_t data[1496 * 16 - 1]; /**< data message */
+ int data_len; /**< data length*/
+ uint8_t data[1496]; /**< data message */
} RAW_DATA_t;
/**