/*
 * (C) 2019-2022 by sysmocom s.f.m.c. GmbH <info@sysmocom.de>
 * All rights reserved.
 *
 * Author: Pau Espin Pedrol <pespin@sysmocom.de>
 *
 * Released under the terms of GNU General Public License, Version 2 or
 * (at your option) any later version.
 */

module AMR_Types {

import from General_Types all;

/* AMR voice frame type identifiers
 * See also 3GPP TS 26.101, Table 1a: Interpretation of Frame Type, Mode
 * Indication and Mode Request fields */
type enumerated AMRFT {
  AMR_FT_0,	/* 4.75 */
  AMR_FT_1,	/* 5.15 */
  AMR_FT_2,	/* 5.90 */
  AMR_FT_3,	/* 6.70 */
  AMR_FT_4,	/* 7.40 */
  AMR_FT_5,	/* 7.95 */
  AMR_FT_6,	/* 10.2 */
  AMR_FT_7,	/* 12.2 */
  AMR_FT_SID	/* SID */
};

/* AMR voice frame length (in bytes, rounded),
 * See also RFC 3267, chapter 3.6 */
const integer c_AMRFT_len[9] := {12, 13, 15, 17, 19, 20, 26, 31, 5};

function f_amrft_payload_len(INT4b amr_ft) return integer {
        return c_AMRFT_len[amr_ft];
}

} with { encode "RAW"}
