FreeCalypso > hg > freecalypso-sw
view rvinterf/lowlevel/packettx.c @ 871:a5c8f48003cd
rvinterf: client programs can now selectively stop receiving packets of a
particular RVTMUX type
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Fri, 29 May 2015 06:29:38 +0000 |
parents | 2f285f20d617 |
children |
line wrap: on
line source
/* * 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)); }