/* ***************************************************************************** * * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001 * R99 Version 3.3.0 * REL-4 Version 4.1.0 * ***************************************************************************** * * File : strfunc.c * Purpose : string <-> mode and string <-> traffic channel * conversion functions * ***************************************************************************** */ /* ***************************************************************************** * MODULE INCLUDE FILE AND VERSION ID ***************************************************************************** */ #include "strfunc.h" const char strfunc_id[] = "@(#)$Id $" strfunc_h; /* ***************************************************************************** * INCLUDE FILES ***************************************************************************** */ #include #include #include "mode.h" #include "frame.h" /* ***************************************************************************** * LOCAL VARIABLES AND TABLES ***************************************************************************** */ /* * generic string <-> id lookup table */ typedef struct { char *name; /* name string */ int id; /* integer id */ } conv_table; /* * mode name <-> mode id conversion table */ static const conv_table modetable[] = { {"MR475", MR475}, {"MR515", MR515}, {"MR59", MR59}, {"MR67", MR67}, {"MR74", MR74}, {"MR795", MR795}, {"MR102", MR102}, {"MR122", MR122}, {"MRDTX", MRDTX}, {NULL, -1} }; /* * frame type name <-> frame type id conversion table */ static const conv_table rxframetable[] = { {"RX_SPEECH_GOOD", RX_SPEECH_GOOD}, {"RX_SPEECH_DEGRADED", RX_SPEECH_DEGRADED}, {"RX_SPEECH_BAD", RX_SPEECH_BAD}, {"RX_SID_FIRST", RX_SID_FIRST}, {"RX_SID_UPDATE", RX_SID_UPDATE}, {"RX_SID_BAD", RX_SID_BAD}, {"RX_ONSET", RX_ONSET}, {"RX_NO_DATA", RX_NO_DATA}, {NULL, -1} }; /* * frame type name <-> frame type id conversion table */ static const conv_table txframetable[] = { {"TX_SPEECH_GOOD", TX_SPEECH_GOOD}, {"TX_SPEECH_DEGRADED", TX_SPEECH_DEGRADED}, {"TX_SPEECH_BAD", TX_SPEECH_BAD}, {"TX_SID_FIRST", TX_SID_FIRST}, {"TX_SID_UPDATE", TX_SID_UPDATE}, {"TX_SID_BAD", TX_SID_BAD}, {"TX_ONSET", TX_ONSET}, {"TX_NO_DATA", TX_NO_DATA}, {NULL, -1} }; /* ***************************************************************************** * LOCAL PROGRAM CODE ***************************************************************************** */ /************************************************************************* * * Function: search_string * Purpose: search table for string; return id if found, -1 otherwise * ************************************************************************** */ static int search_string(const conv_table *p, const char *str) { if (str == NULL) return -1; do { if (strcmp(p->name, str) == 0) return p->id; p++; } while (p->name != NULL); return -1; } /************************************************************************* * * Function: search_id * Purpose: search table for id; return string if found, NULL otherwise * ************************************************************************** */ static char *search_id(const conv_table *p, int id) { if (id == -1) return NULL; do { if (p->id == id) return p->name; p++; } while (p->name != NULL); return NULL; } /* ***************************************************************************** * PUBLIC PROGRAM CODE ***************************************************************************** */ /************************************************************************* * * Function: str2mode * Purpose: convert AMR mode string into mode id; return 0 on success, * 1 otherwise * ************************************************************************** */ int str2mode(const char* str, enum Mode *mode) { int m; if ((m = search_string(modetable, str)) == -1) return 1; *mode = (enum Mode) m; return 0; } /************************************************************************* * * Function: mode2str * Purpose: convert AMR mode id into mode name string; return 0 on success, * 1 otherwise * ************************************************************************** */ int mode2str(enum Mode mode, char** str) { return ((*str = search_id(modetable, (int) mode)) != NULL); } /************************************************************************* * * Function: frame2str * ************************************************************************** */ int rxframe2str(enum RXFrameType ft, char** str) { return ((*str = search_id(rxframetable, (int) ft)) != NULL); } /************************************************************************* * * Function: txframe2str * ************************************************************************** */ int txframe2str(enum TXFrameType ft, char** str) { return ((*str = search_id(txframetable, (int) ft)) != NULL); }