view rvinterf/old/g23sh/sendsp.c @ 786:b761029f9c03

simagent: spenh command implemented
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 13 Mar 2021 22:41:33 +0000
parents e7502631a0f9
children
line wrap: on
line source

/*
 * g23sh system primitive sending command
 */

#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include "pktmux.h"
#include "limits.h"

void
cmd_sendsp(argc, argv)
	char **argv;
{
	char *stackdest, *primarg;
	unsigned intlen;
	u_char sendpkt[MAX_PKT_TO_TARGET+1];
	unsigned pktlen;

	stackdest = argv[1];
	primarg = argv[2];
	if (strlen(stackdest) > 4) {
		printf(
		  "error: stack destination arg may not exceed 4 characters\n");
		return;
	}
	intlen = 12 + strlen(primarg);
	pktlen = intlen + 4;
	if (pktlen > MAX_PKT_TO_TARGET) {
		printf("error: max pkt to target limit exceeded\n");
		return;
	}
	/* fill out the packet */
	sendpkt[0] = RVT_L23_HEADER;
	sendpkt[1] = 0xB7;	/* system prim */
	sendpkt[2] = intlen;
	sendpkt[3] = intlen >> 8;
	/* send zeros for the timestamp */
	sendpkt[4] = 0;
	sendpkt[5] = 0;
	sendpkt[6] = 0;
	sendpkt[7] = 0;
	/* as far as TI's sw is concerned, we are PCO */
	sendpkt[8] = 'P';
	sendpkt[9] = 'C';
	sendpkt[10] = 'O';
	sendpkt[11] = ' ';
	sprintf(sendpkt + 12, "%-4s%s", stackdest, primarg);
	/* send it! */
	send_pkt_to_target(sendpkt, pktlen);
}