FreeCalypso > hg > freecalypso-tools
view rvinterf/ctracedec/processlog.c @ 497:74610c4f10f7
target-utils: added 10 ms delay at the end of abb_power_off()
The deosmification of the ABB access code (replacement of osmo_delay_ms()
bogus delays with correctly-timed ones, which are significantly shorter)
had one annoying side effect: when executing the poweroff command from
any of the programs, one last '=' prompt character was being sent (and
received by the x86 host) as the Calypso board powers off. With delays
being shorter now, the abb_power_off() function was returning and the
standalone program's main loop was printing its prompt before the Iota chip
fully executed the switch-off sequence!
I thought about inserting an endless tight loop at the end of the
abb_power_off() function, but the implemented solution of a 10 ms delay
is a little nicer IMO because if the DEVOFF operation doesn't happen for
some reason in a manual hacking scenario, there won't be an artificial
blocker in the form of a tight loop keeping us from further poking around.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 25 May 2019 20:44:05 +0000 |
parents | e7502631a0f9 |
children |
line wrap: on
line source
/* * This module contains the code that processes rvtdump/rvinterf log files * at the high level and identifies which lines are compressed traces. */ #include <stdio.h> #include <ctype.h> #include <string.h> #include <strings.h> #include <stdlib.h> is_logline_ctrace(line) char *line; { char *cp = line; if (*cp++ != '[') return(0); if (!isdigit(*cp++)) return(0); if (!isdigit(*cp++)) return(0); if (*cp++ != ':') return(0); if (!isdigit(*cp++)) return(0); if (!isdigit(*cp++)) return(0); if (*cp++ != ':') return(0); if (!isdigit(*cp++)) return(0); if (!isdigit(*cp++)) return(0); if (strncmp(cp, "] GPF trace ", 12)) return(0); cp += 12; while (isalpha(*cp)) { while (*cp && !isspace(*cp)) cp++; if (isspace(*cp)) cp++; else return(0); } if (isdigit(*cp)) return(cp - line); else return(0); } process_log_file(filename) char *filename; { FILE *f; char linebuf[512], *cp; int lineno, i; f = fopen(filename, "r"); if (!f) { perror(filename); exit(1); } for (lineno = 1; fgets(linebuf, sizeof linebuf, f); lineno++) { cp = index(linebuf, '\n'); if (!cp) { fprintf(stderr, "error: %s line %d is too long or unterminated\n", filename, lineno); exit(1); } *cp = '\0'; i = is_logline_ctrace(linebuf); if (i) process_ctrace_line(linebuf, i, filename, lineno); else puts(linebuf); } fclose(f); return(0); }