return payload;
}
+void print_message (FILE *fd, char *etype, int mode, uint8_t msg, int seqnum, uint8_t *payload, int len)
+{
+ fprintf (fd ? fd : stdout, "%c%s SEG=%d MSG=%d LEN=%d", mode ? 'T' : 'R', etype, seqnum, msg, len);
+ if (len > 0) {
+ int i;
+ fprintf (fd ? fd : stdout, " PAYLOAD=");
+ for (i = 0; i < len; i++) {
+ fprintf (fd ? fd : stdout, "%02x", payload[i]);
+ }
+ }
+ fprintf (fd ? fd : stdout, "\n");
+}
+
typedef struct {
int morep;
int mode;
int main (int argc, char **argv)
{
char *filename = NULL;
+ char *logname = NULL;
char *url = NULL;
int mode = -1;
int nbcomms = 0;
}
char c = arg[1];
switch (c) {
+ case 'l':
+ arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
+ if (arg == NULL) {
+ VERBOSE (morep, ERROR, PRINTF ("%s: log file not specified\n", progname));
+ return 1;
+ }
+ logname = arg;
+ mode = 0;
+ break;
case 'r':
arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
if (arg == NULL) {
return -1;
}
- /* read file */
+ /* open log file */
+ FILE *log = NULL;
+ if (logname != NULL) {
+ log = fopen (logname, "r");
+ if (log == NULL) {
+ VERBOSE (morep, ERROR, PRINTF ("can't open log file '%s' for reading\n", logname));
+ return -1;
+ }
+ }
+
+ /* open script file */
FILE *fid = stdin;
if (filename != NULL) {
fid = fopen (filename, "r");
if (fid == NULL) {
- VERBOSE (morep, ERROR, PRINTF ("can't open file '%s' for reading\n", filename));
+ VERBOSE (morep, ERROR, PRINTF ("can't open script file '%s' for reading\n", filename));
return -1;
}
}
/* transmit */
if (mode == 1) {
int seqnum = MOREP_Send (comm->morep, msgtype, payload, len);
- VERBOSE (morep, INFO, PRINTF ("T%s seqnum=%d msg=%d length=%d\n", comm->etype, seqnum, msgtype, len));
+ print_message (log, comm->etype, 1, msgtype, seqnum, payload, len);
} else { /* receive */
uint8_t rxmsgtype = 0;
uint8_t rxpayload[1496 * 16 - 1] = {0};
- int rxlen = 0;
+ int rxlen = -1;
int seqnum = MOREP_Receive (comm->morep, &rxmsgtype, rxpayload, &rxlen);
/* check msg type */
if (rxmsgtype != msgtype) {
- VERBOSE (morep, WARNING, PRINTF ("R%04x seqnum=%d msg=%d: expected msgtype %04x\n", rxmsgtype, seqnum, rxmsgtype, msgtype));
+ VERBOSE (morep, WARNING, PRINTF ("R%04x SEQ=%d MSG=%d: expected msgtype %04x\n", rxmsgtype, seqnum, rxmsgtype, msgtype));
}
/* check payload */
else {
ok = (rxpayload[i] == payload[i]);
}
if (!ok) {
- VERBOSE (morep, WARNING, PRINTF ("R%04x seqnum=%d msg=%d: payloads differed at %d/%d\n", rxmsgtype, seqnum, rxmsgtype, i, rxlen));
- } else {
- VERBOSE (morep, INFO, PRINTF ("R%04x seqnum=%d msg=%d length=%d\n", rxmsgtype, seqnum, rxmsgtype, rxlen));
+ VERBOSE (morep, WARNING, PRINTF ("R%04x SEQ=%d MSG=%d: payloads differed at %d/%d\n", rxmsgtype, seqnum, rxmsgtype, i, rxlen));
}
}
+ print_message (log, comm->etype, 0, rxmsgtype, seqnum, rxpayload, rxlen);
}
free (payload);
}