FreeCalypso > hg > freecalypso-sw
diff rvinterf/g23sh/sendsp.c @ 336:922efdd65dce
g23sh written, compiles
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Tue, 22 Apr 2014 07:21:04 +0000 |
parents | rvinterf/misc/sendsp.c@5d9001f0c3aa |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rvinterf/g23sh/sendsp.c Tue Apr 22 07:21:04 2014 +0000 @@ -0,0 +1,53 @@ +/* + * 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); +}