FreeCalypso > hg > freecalypso-tools
diff rvinterf/lowlevel/packettx.c @ 0:e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 11 Jun 2016 00:13:35 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rvinterf/lowlevel/packettx.c Sat Jun 11 00:13:35 2016 +0000 @@ -0,0 +1,49 @@ +/* + * This module handles the lowest level of serial packet Tx + */ + +#include <sys/types.h> +#include <sys/time.h> +#include <stdio.h> +#include <string.h> +#include <strings.h> +#include <stdlib.h> +#include <unistd.h> +#include "../include/pktmux.h" +#include "../include/limits.h" + +extern int target_fd; +extern int wakeup_after_sec; + +static u_char wakeup_shot[64]; +static struct timeval last_tx; + +send_pkt_to_target(pkt, pktlen) + u_char *pkt; +{ + u_char buf[MAX_PKT_TO_TARGET*2+2]; + u_char *cp, *dp, *endp; + int c; + struct timeval curtime, timediff; + + gettimeofday(&curtime, 0); + if (wakeup_after_sec) { + timersub(&curtime, &last_tx, &timediff); + if (timediff.tv_sec >= wakeup_after_sec) { + write(target_fd, wakeup_shot, sizeof wakeup_shot); + usleep(100000); + } + } + endp = pkt + pktlen; + dp = buf; + *dp++ = STX; + for (cp = pkt; cp < endp; cp++) { + c = *cp; + if (c == STX || c == DLE) + *dp++ = DLE; + *dp++ = c; + } + *dp++ = STX; + write(target_fd, buf, dp - buf); + bcopy(&curtime, &last_tx, sizeof(struct timeval)); +}