view rvinterf/asyncshell/keypress.c @ 398:8c7e86bc137e

fc-shell: added key commands for sending keystrokes via MMI CONFIG sysprims
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Mar 2018 00:52:40 +0000
parents
children
line wrap: on
line source

/*
 * Functions for sending simulated keystrokes via GPF MMI CONFIG sysprims.
 */

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

send_mmi_config_pair(key, value)
	char *key, *value;
{
	unsigned intlen;
	u_char sendpkt[MAX_PKT_TO_TARGET+1];
	unsigned pktlen;

	intlen = 12 + 7 + strlen(key) + 1 + strlen(value);
	pktlen = intlen + 4;
	if (pktlen > MAX_PKT_TO_TARGET) {
		printf("error: max pkt to target limit exceeded\n");
		return(ERROR_USAGE);
	}
	/* 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 */
	sprintf(sendpkt + 8, "PCO MMI CONFIG %s=%s", key, value);
	/* send it! */
	send_pkt_to_target(sendpkt, pktlen);
	return(0);
}

void
cmd_key_interactive(arg)
	char *arg;
{
	while (isspace(*arg))
		arg++;
	if (!*arg) {
		printf("error: missing string argument\n");
		return;
	}
	send_mmi_config_pair("KEY_SEQUENCE", arg);
}

cmd_key_oneshot(argc, argv)
	char **argv;
{
	return send_mmi_config_pair("KEY_SEQUENCE", argv[1]);
}

void
cmd_keydown_interactive(arg)
	char *arg;
{
	while (isspace(*arg))
		arg++;
	if (!*arg) {
		printf("error: missing string argument\n");
		return;
	}
	send_mmi_config_pair("KEY_PRESS", arg);
}

cmd_keydown_oneshot(argc, argv)
	char **argv;
{
	return send_mmi_config_pair("KEY_PRESS", argv[1]);
}

void
cmd_keyup_interactive(arg)
	char *arg;
{
	while (isspace(*arg))
		arg++;
	if (!*arg) {
		printf("error: missing string argument\n");
		return;
	}
	send_mmi_config_pair("KEY_RELEASE", arg);
}

cmd_keyup_oneshot(argc, argv)
	char **argv;
{
	return send_mmi_config_pair("KEY_RELEASE", argv[1]);
}