view rvinterf/lowlevel/packettx.c @ 752:c79aaed75bd8

compile-fc-batt: allow possible third field in source lines Battery tables maintained in the fc-battery-conf repository will now have a third field added, defining thresholds for the battery bars icon, and there will be a new utility to compile them into the new /etc/batterytab2 file read by the FC Tourmaline version of our FCHG driver. For backward compatibility with the original Magnetite version of FCHG, compile-fc-batt remains the tool for compiling the original /etc/batterytab file format, and it needs to ignore the newly added third field in battery table sources.
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 05 Nov 2020 20:37:55 +0000
parents e7502631a0f9
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));
}