view rvinterf/lowlevel/packettx.c @ 736:7d1df6d831e4
libpwon: added -Pdtr and -Prts support for DUART28C
author |
Mychaela Falconia <falcon@freecalypso.org> |
date |
Wed, 16 Sep 2020 03:40:51 +0000 (2020-09-16) |
parents |
e7502631a0f9 |
children |
|
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));
}