view rvinterf/asyncshell/pktsort.c @ 937:631fb20ff8d4

gsm-fw/cfgmagic: beginning of support for Intel single bank flash (Compal) in addition to the currently supported AMD multibank (Openmoko and Pirelli)
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Sat, 31 Oct 2015 21:50:43 +0000
parents 4661b84260a0
children 820d34f3f3d7
line wrap: on
line source

/*
 * Here we sort out incoming packets from the target relayed via rvinterf.
 */

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

extern u_char rvi_msg[];
extern int rvi_msg_len;

static void
process_rvt()
{
	u32 useid;

	if (rvi_msg_len < 7) {
		tty_cleanup();
		fprintf(stderr, "Error: rvinterf sent us an invalid RVT msg\n");
		exit(1);
	}
	useid = rvi_msg[2] << 24 | rvi_msg[3] << 16 | rvi_msg[4] << 8
		| rvi_msg[5];
	switch (useid) {
	case 0:
		handle_useid_0();
		return;
	default:
		tty_cleanup();
		fprintf(stderr, "unexpected fwd of USEID %08X from rvinterf\n",
			useid);
		exit(1);
	}
}

void
gpf_packet_rx()
{
	char fmtbuf[MAX_PKT_FROM_TARGET*8];	/* size it generously */

	format_g23_packet(rvi_msg + 1, rvi_msg_len - 1, fmtbuf);
	async_msg_output(fmtbuf);
}

void
response_from_ati()
{
	char buf[MAX_PKT_FROM_TARGET*4+2];

	strcpy(buf, "ATI: ");
	safe_print_trace(rvi_msg + 2, rvi_msg_len - 2, buf + 5);
	async_msg_output(buf);
}

void
process_pkt_from_target()
{
	switch (rvi_msg[1]) {
	case RVT_RV_HEADER:
		process_rvt();
		return;
	case RVT_L23_HEADER:
		gpf_packet_rx();
		return;
	case RVT_AT_HEADER:
		response_from_ati();
		return;
	default:
		tty_cleanup();
		fprintf(stderr, "unexpected fwd of MUX %02X from rvinterf\n",
			rvi_msg[1]);
		exit(1);
	}
}