FreeCalypso > hg > freecalypso-sw
view rvinterf/asyncshell/pktsort.c @ 884:353daaa6014d
gsm-fw/gpf/conf/gsmcomp.c: increased max partition in the voice-only config
The code we got from TCS211 had the maximum prim pool partition size set to
900 bytes in the voice-only config (no FAX_AND_DATA, no GPRS) and to 1600 bytes
in every other config. As it turns out, this "minimized" config breaks when
the AT command interface is used with %CPI enabled, as the responsible code in
ATI does an ACI_MALLOC of 1012 bytes. TI may have considered this case to be
unsupported usage (perhaps they didn't care about the combination of a
voice-only PS with AT command control), but we do want this use case to work
without crashing. Solution: I made the largest prim pool the same as it is
with FAX_AND_DATA: 3 partitions of 1600 bytes.
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Sat, 27 Jun 2015 07:31:30 +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); } }