Mercurial > hg > audiostuff
diff spandsp-0.0.3/spandsp-0.0.3/src/at_dictionary_gen.c @ 5:f762bf195c4b
import spandsp-0.0.3
author | Peter Meerwald <pmeerw@cosy.sbg.ac.at> |
---|---|
date | Fri, 25 Jun 2010 16:00:21 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/spandsp-0.0.3/spandsp-0.0.3/src/at_dictionary_gen.c Fri Jun 25 16:00:21 2010 +0200 @@ -0,0 +1,634 @@ +/* + * SpanDSP - a series of DSP components for telephony + * + * at_dictionary_gen.c - Generate a trie based dictionary for the AT + * commands supported by the AT interpreter. + * + * Written by Steve Underwood <steveu@coppice.org> + * + * Copyright (C) 2006 Steve Underwood + * + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * $Id: at_dictionary_gen.c,v 1.7 2006/11/30 15:41:47 steveu Exp $ + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define _GNU_SOURCE + +#include <inttypes.h> +#include <stdlib.h> +#include <unistd.h> +#include <stdio.h> +#include <fcntl.h> +#include <string.h> +#include <assert.h> + +const char *wordlist[] = +{ + " ", /* Dummy to absorb spaces in commands */ + "&C", /* V.250 6.2.8 - Circuit 109 (received line signal detector), behaviour */ + "&D", /* V.250 6.2.9 - Circuit 108 (data terminal ready) behaviour */ + "&F", /* V.250 6.1.2 - Set to factory-defined configuration */ + "+A8A", /* V.251 6.3 - V.8 calling tone indication */ + "+A8C", /* V.251 6.2 - V.8 answer signal indication */ + "+A8E", /* V.251 5.1 - V.8 and V.8bis operation controls */ + "+A8I", /* V.251 6.1 - V.8 CI signal indication */ + "+A8J", /* V.251 6.4 - V.8 negotiation complete */ + "+A8M", /* V.251 5.2 - Send V.8 menu signals */ + "+A8R", /* V.251 6.6 - V.8bis signal and message reporting */ + "+A8T", /* V.251 5.3 - Send V.8bis signal and/or message(s) */ + "+ASTO", /* V.250 6.3.15 - Store telephone number */ + "+CAAP", /* 3GPP TS 27.007 7.25 - Automatic answer for eMLPP Service */ + "+CACM", /* 3GPP TS 27.007 8.25 - Accumulated call meter */ + "+CACSP", /* 3GPP TS 27.007 11.1.7 - Voice Group or Voice Broadcast Call State Attribute Presentation */ + "+CAD", /* IS-99 5.6.3 - Query analogue or digital service */ + "+CAEMLPP", /* 3GPP TS 27.007 7.22 - eMLPP Priority Registration and Interrogation */ + "+CAHLD", /* 3GPP TS 27.007 11.1.3 - Leave an ongoing Voice Group or Voice Broadcast Call */ + "+CAJOIN", /* 3GPP TS 27.007 11.1.1 - Accept an incoming Voice Group or Voice Broadcast Call */ + "+CALA", /* 3GPP TS 27.007 8.16 - Alarm */ + "+CALCC", /* 3GPP TS 27.007 11.1.6 - List current Voice Group and Voice Broadcast Calls */ + "+CALD", /* 3GPP TS 27.007 8.38 - Delete alar m */ + "+CALM", /* 3GPP TS 27.007 8.20 - Alert sound mode */ + "+CAMM", /* 3GPP TS 27.007 8.26 - Accumulated call meter maximum */ + "+CANCHEV", /* 3GPP TS 27.007 11.1.8 - NCH Support Indication */ + "+CAOC", /* 3GPP TS 27.007 7.16 - Advice of Charge */ + "+CAPD", /* 3GPP TS 27.007 8.39 - Postpone or dismiss an alarm */ + "+CAPTT", /* 3GPP TS 27.007 11.1.4 - Talker Access for Voice Group Call */ + "+CAREJ", /* 3GPP TS 27.007 11.1.2 - Reject an incoming Voice Group or Voice Broadcast Call */ + "+CAULEV", /* 3GPP TS 27.007 11.1.5 - Voice Group Call Uplink Status Presentation */ + "+CBC", /* 3GPP TS 27.007 8.4 - Battery charge */ + "+CBCS", /* 3GPP TS 27.007 11.3.2 - VBS subscriptions and GId status */ + "+CBIP", /* IS-99 5.6 - Base station IP address */ + "+CBST", /* 3GPP TS 27.007 6.7 - Select bearer service type */ + "+CCFC", /* 3GPP TS 27.007 7.11 - Call forwarding number and conditions */ + "+CCLK", /* 3GPP TS 27.007 8.15 - Clock */ + "+CCS", /* IS-135 4.1.22 - Compression status */ + "+CCUG", /* 3GPP TS 27.007 7.10 - Closed user group */ + "+CCWA", /* 3GPP TS 27.007 7.12 - Call waiting */ + "+CCWE", /* 3GPP TS 27.007 8.28 - Call Meter maximum event */ + "+CDIP", /* 3GPP TS 27.007 7.9 - Called line identification presentation */ + "+CDIS", /* 3GPP TS 27.007 8.8 - Display control */ + "+CDV", /* IS-99 5.6 - Dial command for voice call */ + "+CEER", /* 3GPP TS 27.007 6.10 - Extended error report */ + "+CESP", /* GSM07.05 3.2.4 - Enter SMS block mode protocol */ + "+CFCS", /* 3GPP TS 27.007 7.24 - Fast call setup conditions */ + "+CFG", /* IS-99 5.6 - Configuration string */ + "+CFUN", /* 3GPP TS 27.007 8.2 - Set phone functionality */ + "+CGACT", /* 3GPP TS 27.007 10.1.10 - PDP context activate or deactivate */ + "+CGANS", /* 3GPP TS 27.007 10.1.16 - Manual response to a network request for PDP context activation */ + "+CGATT", /* 3GPP TS 27.007 10.1.9 - PS attach or detach */ + "+CGAUTO", /* 3GPP TS 27.007 10.1.15 - Automatic response to a network request for PDP context activation */ + "+CGCAP", /* IS-99 5.6 - Request complete capabilities list */ + "+CGCLASS", /* 3GPP TS 27.007 10.1.17 - GPRS mobile station class (GPRS only) */ + "+CGCLOSP", /* 3GPP TS 27.007 10.1.13 - Configure local octet stream PAD parameters (Obsolete) */ + "+CGCLPAD", /* 3GPP TS 27.007 10.1.12 - Configure local triple-X PAD parameters (GPRS only) (Obsolete) */ + "+CGCMOD", /* 3GPP TS 27.007 10.1.11 - PDP Context Modify */ + "+CGCS", /* 3GPP TS 27.007 11.3.1 - VGCS subscriptions and GId status */ + "+CGDATA", /* 3GPP TS 27.007 10.1.12 - Enter data state */ + "+CGDCONT", /* 3GPP TS 27.007 10.1.1 - Define PDP Context */ + "+CGDSCONT",/* 3GPP TS 27.007 10.1.2 - Define Secondary PDP Context */ + "+CGEQMIN", /* 3GPP TS 27.007 10.1.7 - 3G Quality of Service Profile (Minimum acceptable) */ + "+CGEQNEG", /* 3GPP TS 27.007 10.1.8 - 3G Quality of Service Profile (Negotiated) */ + "+CGEQREQ", /* 3GPP TS 27.007 10.1.6 - 3G Quality of Service Profile (Requested) */ + "+CGEREP", /* 3GPP TS 27.007 10.1.18 - Packet Domain event reporting */ + "+CGMI", /* 3GPP TS 27.007 5.1 - Request manufacturer identification */ + "+CGMM", /* 3GPP TS 27.007 5.2 - Request model identification */ + "+CGMR", /* 3GPP TS 27.007 5.3 - Request revision identification */ + "+CGOI", /* IS-99 5.6 - Request global object identification */ + "+CGPADDR", /* 3GPP TS 27.007 10.1.14 - Show PDP address */ + "+CGQMIN", /* 3GPP TS 27.007 10.1.5 - Quality of Service Profile (Minimum acceptable) */ + "+CGQREQ", /* 3GPP TS 27.007 10.1.4 - Quality of Service Profile (Requested) */ + "+CGREG", /* 3GPP TS 27.007 10.1.19 - GPRS network registration status */ + "+CGSMS", /* 3GPP TS 27.007 10.1.20 - Select service for MO SMS messages */ + "+CGSN", /* 3GPP TS 27.007 5.4 - Request product serial number identification */ + "+CGTFT", /* 3GPP TS 27.007 10.1.3 - Traffic Flow Template */ + "+CHLD", /* 3GPP TS 27.007 7.13 - Call related supplementary services */ + "+CHSA", /* 3GPP TS 27.007 6.18 - HSCSD non-transparent asymmetry configuration */ + "+CHSC", /* 3GPP TS 27.007 6.15 - HSCSD current call parameters */ + "+CHSD", /* 3GPP TS 27.007 6.12 - HSCSD device parameters */ + "+CHSN", /* 3GPP TS 27.007 6.14 - HSCSD non-transparent call configuration */ + "+CHSR", /* 3GPP TS 27.007 6.16 - HSCSD parameters report */ + "+CHST", /* 3GPP TS 27.007 6.13 - HSCSD transparent call configuration */ + "+CHSU", /* 3GPP TS 27.007 6.17 - HSCSD automatic user initiated upgrading */ + "+CHUP", /* 3GPP TS 27.007 6.5 - Hangup call */ + "+CHV", /* IS-99 5.6 - Hang-up voice */ + "+CIMI", /* 3GPP TS 27.007 5.6 - Request international mobile subscriber identity */ + "+CIND", /* 3GPP TS 27.007 8.9 - Indicator control */ + "+CIT", /* IS-99 5.6 - Command state inactivity timer */ + "+CKPD", /* 3GPP TS 27.007 8.7 - Keypad control */ + "+CLAC", /* 3GPP TS 27.007 8.37 - List all available AT commands */ + "+CLAE", /* 3GPP TS 27.007 8.31 - Language Event */ + "+CLAN", /* 3GPP TS 27.007 8.30 - Set Language */ + "+CLCC", /* 3GPP TS 27.007 7.18 - List current calls */ + "+CLCK", /* 3GPP TS 27.007 7.4 - Facility lock */ + "+CLIP", /* 3GPP TS 27.007 7.6 - Calling line identification presentation */ + "+CLIR", /* 3GPP TS 27.007 7.7 - Calling line identification restriction */ + "+CLVL", /* 3GPP TS 27.007 8.23 - Loudspeaker volume level */ + "+CMAR", /* 3GPP TS 27.007 8.36 - Master reset */ + "+CMEC", /* 3GPP TS 27.007 8.6 - Mobile termination control mode */ + "+CMEE", /* GSM07.07 9.1 - Report mobile equipment error */ + "+CMER", /* 3GPP TS 27.007 8.10 - Mobile termination event reporting */ + "+CMGC", /* GSM07.05 3.5.5/4.5 - Send command */ + "+CMGD", /* GSM07.05 3.5.4 - Delete message */ + "+CMGF", /* GSM07.05 3.2.3 - Message Format */ + "+CMGL", /* GSM07.05 3.4.2/4.1 - List messages */ + "+CMGR", /* GSM07.05 3.4.3/4.2 - Read message */ + "+CMGS", /* GSM07.05 3.5.1/4.3 - Send message */ + "+CMGW", /* GSM07.05 3.5.3/4.4 - Write message to memory */ + "+CMIP", /* IS-99 5.6 - Mobile station IP address */ + "+CMM", /* IS-135 4.1.23 - Menu map */ + "+CMMS", /* GSM07.05 3.5.6 - More messages to send */ + "+CMOD", /* 3GPP TS 27.007 6.4 - Call mode */ + "+CMSS", /* GSM07.05 3.5.2/4.7 - Send message from storage */ + "+CMUT", /* 3GPP TS 27.007 8.24 - Mute control */ + "+CMUX", /* 3GPP TS 27.007 5.7 - Multiplexing mode */ + "+CNMA", /* GSM07.05 3.4.4/4.6 - New message acknowledgement to terminal adapter */ + "+CNMI", /* GSM07.05 3.4.1 - New message indications to terminal equipment */ + "+CNUM", /* 3GPP TS 27.007 7.1 - Subscriber number */ + "+COLP", /* 3GPP TS 27.007 7.8 - Connected line identification presentation */ + "+COPN", /* 3GPP TS 27.007 7.21 - Read operator names */ + "+COPS", /* 3GPP TS 27.007 7.3 - PLMN selection */ + "+COS", /* IS-135 4.1.24 - Originating service */ + "+COTDI", /* 3GPP TS 27.007 11.1.9 - Originator to Dispatcher Information */ + "+CPAS", /* 3GPP TS 27.007 8.1 - Phone activity status */ + "+CPBF", /* 3GPP TS 27.007 8.13 - Find phonebook entries */ + "+CPBR", /* 3GPP TS 27.007 8.12 - Read phonebook entries */ + "+CPBS", /* 3GPP TS 27.007 8.11 - Select phonebook memory storage */ + "+CPBW", /* 3GPP TS 27.007 8.14 - Write phonebook entry */ + "+CPIN", /* 3GPP TS 27.007 8.3 - Enter PIN */ + "+CPLS", /* 3GPP TS 27.007 7.20 - Selection of preferred PLMN list */ + "+CPMS", /* GSM07.05 3.2.2 - Preferred message storage */ + "+CPOL", /* 3GPP TS 27.007 7.19 - Preferred PLMN list */ + "+CPPS", /* 3GPP TS 27.007 7.23 - eMLPP subscriptions */ + "+CPROT", /* 3GPP TS 27.007 8.42 - Enter protocol mode */ + "+CPUC", /* 3GPP TS 27.007 8.27 - Price per unit and currency table */ + "+CPWC", /* 3GPP TS 27.007 8.29 - Power class */ + "+CPWD", /* 3GPP TS 27.007 7.5 - Change password */ + "+CQD", /* IS-135 4.1.25 - Query disconnect timer */ + "+CR", /* 3GPP TS 27.007 6.9 - Service reporting control */ + "+CRC", /* 3GPP TS 27.007 6.11 - Cellular result codes */ + "+CREG", /* 3GPP TS 27.007 7.2 - Network registration */ + "+CRES", /* GSM07.05 3.3.6 - Restore Settings */ + "+CRLP", /* 3GPP TS 27.007 6.8 - Radio link protocol */ + "+CRM", /* IS-99 5.6 - Set rm interface protocol */ + "+CRMC", /* 3GPP TS 27.007 8.34 - Ring Melody Control */ + "+CRMP", /* 3GPP TS 27.007 8.35 - Ring Melody Playback */ + "+CRSL", /* 3GPP TS 27.007 8.21 - Ringer sound level */ + "+CRSM", /* 3GPP TS 27.007 8.18 - Restricted SIM access */ + "+CSAS", /* GSM07.05 3.3.5 - Save settings */ + "+CSCA", /* GSM07.05 3.3.1 - Service centre address */ + "+CSCB", /* GSM07.05 3.3.4 - Select cell broadcast message types */ + "+CSCC", /* 3GPP TS 27.007 8.19 - Secure control command */ + "+CSCS", /* 3GPP TS 27.007 5.5 - Select TE character set */ + "+CSDF", /* 3GPP TS 27.007 6.22 - Settings date format */ + "+CSDH", /* GSM07.05 3.3.3 - Show text mode parameters */ + "+CSGT", /* 3GPP TS 27.007 8.32 - Set Greeting Text */ + "+CSIL", /* 3GPP TS 27.007 6.23 - Silence Command */ + "+CSIM", /* 3GPP TS 27.007 8.17 - Generic SIM access */ + "+CSMP", /* GSM07.05 3.3.2 - Set text mode parameters */ + "+CSMS", /* GSM07.05 3.2.1 - Select Message Service */ + "+CSNS", /* 3GPP TS 27.007 6.19 - Single numbering scheme */ + "+CSQ", /* 3GPP TS 27.007 8.5 - Signal quality */ + "+CSS", /* IS-135 4.1.28 - Serving system identification */ + "+CSSN", /* 3GPP TS 27.007 7.17 - Supplementary service notifications */ + "+CSTA", /* 3GPP TS 27.007 6.1 - Select type of address */ + "+CSTF", /* 3GPP TS 27.007 6.24 - Settings time format */ + "+CSVM", /* 3GPP TS 27.007 8.33 - Set Voice Mail Number */ + "+CTA", /* IS-135 4.1.29 - MT-Terminated async. Data calls */ + "+CTF", /* IS-135 4.1.30 - MT-Terminated FAX calls */ + "+CTFR", /* 3GPP TS 27.007 7.14 - Call deflection */ + "+CTZR", /* 3GPP TS 27.007 8.41 - Time Zone Reporting */ + "+CTZU", /* 3GPP TS 27.007 8.40 - Automatic Time Zone Update */ + "+CUSD", /* 3GPP TS 27.007 7.15 - Unstructured supplementary service data */ + "+CUUS1", /* 3GPP TS 27.007 7.26 - User to User Signalling Service 1 */ + "+CV120", /* 3GPP TS 27.007 6.21 - V.120 rate adaption protocol */ + "+CVHU", /* 3GPP TS 27.007 6.20 - Voice Hangup Control */ + "+CVIB", /* 3GPP TS 27.007 8.22 - Vibrator mode */ + "+CXT", /* IS-99 5.6 - Cellular extension */ + "+DR", /* V.250 6.6.2 - Data compression reporting */ + "+DS", /* V.250 6.6.1 - Data compression */ + "+DS44", /* V.250 6.6.2 - V.44 data compression */ + "+EB", /* V.250 6.5.2 - Break handling in error control operation */ + "+EFCS", /* V.250 6.5.4 - 32-bit frame check sequence */ + "+EFRAM", /* V.250 6.5.8 - Frame length */ + "+ER", /* V.250 6.5.5 - Error control reporting */ + "+ES", /* V.250 6.5.1 - Error control selection */ + "+ESR", /* V.250 6.5.3 - Selective repeat */ + "+ETBM", /* V.250 6.5.6 - Call termination buffer management */ + "+EWIND", /* V.250 6.5.7 - Window size */ + "+FAA", /* T.32 8.5.2.5 - Adaptive Answer parameter */ + "+FAP", /* T.32 8.5.1.12 - Addressing and polling capabilities parameter */ + "+FAR", /* T.31 8.5.1 - Adaptive reception control */ + "+FBO", /* T.32 8.5.3.4 - Phase C data bit order */ + "+FBS", /* T.32 8.5.3.2 - Buffer Size, read only parameter */ + "+FBU", /* T.32 8.5.1.10 - HDLC Frame Reporting parameter */ + "+FCC", /* T.32 8.5.1.1 - DCE capabilities parameters */ + "+FCL", /* T.31 8.5.2 - Carrier loss timeout */ + "+FCLASS", /* T.31 8.2 - Capabilities identification and control */ + "+FCQ", /* T.32 8.5.2.3 - Copy quality checking parameter */ + "+FCR", /* T.32 8.5.1.9 - Capability to receive parameter */ + "+FCS", /* T.32 8.5.1.3 - Current Session Results parameters */ + "+FCT", /* T.32 8.5.2.6 - DTE phase C timeout parameter */ + "+FDD", /* T.31 8.5.3 - Double escape character replacement */ + "+FDR", /* T.32 8.3.4 - Data reception command */ + "+FDT", /* T.32 8.3.3 - Data transmission command */ + "+FEA", /* T.32 8.5.3.5 - Phase C received EOL alignment parameter */ + "+FFC", /* T.32 8.5.3.6 - Format conversion parameter */ + "+FFD", /* T.32 8.5.1.14 - File diagnostic message parameter */ + "+FHS", /* T.32 8.5.2.7 - Call termination status parameter */ + "+FIE", /* T.32 8.5.2.1 - Procedure interrupt enable parameter */ + "+FIP", /* T.32 8.3.6 - Initialize facsimile parameters */ + "+FIS", /* T.32 8.5.1.2 - Current session parameters */ + "+FIT", /* T.31 8.5.4 - DTE inactivity timeout */ + "+FKS", /* T.32 8.3.5 - Session termination command */ + "+FLI", /* T.32 8.5.1.5 - Local ID string parameter, TSI or CSI */ + "+FLO", /* T.31 says to implement something similar to +IFC */ + "+FLP", /* T.32 8.5.1.7 - Indicate document to poll parameter */ + "+FMI", /* T.31 says to duplicate +GMI */ + "+FMM", /* T.31 says to duplicate +GMM */ + "+FMR", /* T.31 says to duplicate +GMR */ + "+FMS", /* T.32 8.5.2.9 - Minimum phase C speed parameter */ + "+FND", /* T.32 8.5.2.10 - Non-Standard Message Data Indication parameter */ + "+FNR", /* T.32 8.5.1.11 - Negotiation message reporting control parameters */ + "+FNS", /* T.32 8.5.1.6 - Non-Standard Frame FIF parameter */ + "+FPA", /* T.32 8.5.1.13 - Selective polling address parameter */ + "+FPI", /* T.32 8.5.1.5 - Local Polling ID String parameter */ + "+FPP", /* T.32 8.5.3 - Facsimile packet protocol */ + "+FPR", /* T.31 says to implement something similar to +IPR */ + "+FPS", /* T.32 8.5.2.2 - Page Status parameter */ + "+FPW", /* T.32 8.5.1.13 - PassWord parameter (Sending or Polling) */ + "+FRH", /* T.31 8.3.6 - HDLC receive */ + "+FRM", /* T.31 8.3.4 - Facsimile receive */ + "+FRQ", /* T.32 8.5.2.4 - Receive Quality Thresholds parameters */ + "+FRS", /* T.31 8.3.2 - Receive silence */ + "+FRY", /* T.32 8.5.2.8 - ECM Retry Value parameter */ + "+FSA", /* T.32 8.5.1.13 - Subaddress parameter */ + "+FSP", /* T.32 8.5.1.8 - Request to poll parameter */ + "+FTH", /* T.31 8.3.5 - HDLC transmit */ + "+FTM", /* T.31 8.3.3 - Facsimile transmit */ + "+FTS", /* T.31 8.3.1 - Transmit silence */ + "+GCAP", /* V.250 6.1.9 - Request complete capabilities list */ + "+GCI", /* V.250 6.1.10 - Country of installation, */ + "+GMI", /* V.250 6.1.4 - Request manufacturer identification */ + "+GMM", /* V.250 6.1.5 - Request model identification */ + "+GMR", /* V.250 6.1.6 - Request revision identification */ + "+GOI", /* V.250 6.1.8 - Request global object identification */ + "+GSN", /* V.250 6.1.7 - Request product serial number identification */ + "+IBC", /* TIA-617 8.3 - Control of in-band control */ + "+IBM", /* TIA-617 8.4 - In-Band MARK idle reporting control */ + "+ICF", /* V.250 6.2.11 - DTE-DCE character framing */ + "+ICLOK", /* V.250 6.2.14 - Select sync transmit clock source */ + "+IDSR", /* V.250 6.2.16 - Select data set ready option */ + "+IFC", /* V.250 6.2.12 - DTE-DCE local flow control */ + "+ILRR", /* V.250 6.2.13 - DTE-DCE local rate reporting */ + "+ILSD", /* V.250 6.2.15 - Select long space disconnect option */ + "+IPR", /* V.250 6.2.10 - Fixed DTE rate */ + "+IRTS", /* V.250 6.2.17 - Select synchronous mode RTS option */ + "+MA", /* V.250 6.4.2 - Modulation automode control */ + "+MR", /* V.250 6.4.3 - Modulation reporting control */ + "+MS", /* V.250 6.4.1 - Modulation selection */ + "+MSC", /* V.250 6.4.8 - Seamless rate change enable */ + "+MV18AM", /* V.250 6.4.6 - V.18 answering message editing */ + "+MV18P", /* V.250 6.4.7 - Order of probes */ + "+MV18R", /* V.250 6.4.5 - V.18 reporting control */ + "+MV18S", /* V.250 6.4.4 - V.18 selection */ + "+PCW", /* V.250 6.8.1 - Call waiting enable (V.92 DCE) */ + "+PIG", /* V.250 6.8.5 - PCM upstream ignore */ + "+PMH", /* V.250 6.8.2 - Modem on hold enable */ + "+PMHF", /* V.250 6.8.6 - V.92 Modem on hold hook flash */ + "+PMHR", /* V.250 6.8.4 - Initiate modem on hold */ + "+PMHT", /* V.250 6.8.3 - Modem on hold timer */ + "+PQC", /* V.250 6.8.7 - V.92 Phase 1 and Phase 2 Control */ + "+PSS", /* V.250 6.8.8 - V.92 Use Short Sequence */ + "+SAC", /* V.252 3.4 - Audio transmit configuration */ + "+SAM", /* V.252 3.5 - Audio receive mode */ + "+SAR", /* V.252 5.3 - Audio receive channel indication */ + "+SARR", /* V.252 3.9 - Audio indication reporting */ + "+SAT", /* V.252 5.4 - Audio transmit channel indication */ + "+SCRR", /* V.252 3.11 - Capabilities indication reporting */ + "+SDC", /* V.252 3.3 - Data configuration */ + "+SDI", /* V.252 5.2 - Data channel identification */ + "+SDR", /* V.252 3.8 - Data indication reporting */ + "+SRSC", /* V.252 5.1.2 - Remote terminal simultaneous capability indication */ + "+STC", /* V.252 3.1 - Terminal configuration */ + "+STH", /* V.252 3.2 - Close logical channel */ + "+SVC", /* V.252 3.6 - Video transmit configuration */ + "+SVM", /* V.252 3.7 - Video receive mode */ + "+SVR", /* V.252 5.5 - Video receive channel indication */ + "+SVRR", /* V.252 3.10 - Video indication reporting */ + "+SVT", /* V.252 5.6 - Video transmit channel indication */ + "+TADR", /* V.250 6.7.2.9 - Local V.54 address */ + "+TAL", /* V.250 6.7.2.15 - Local analogue loop */ + "+TALS", /* V.250 6.7.2.6 - Analogue loop status */ + "+TDLS", /* V.250 6.7.2.7 - Local digital loop status */ + "+TE140", /* V.250 6.7.2.1 - Enable ckt 140 */ + "+TE141", /* V.250 6.7.2.2 - Enable ckt 141 */ + "+TEPAL", /* V.250 6.7.2.5 - Enable front panel analogue loop */ + "+TEPDL", /* V.250 6.7.2.4 - Enable front panel RDL */ + "+TERDL", /* V.250 6.7.2.3 - Enable RDL from remote */ + "+TLDL", /* V.250 6.7.2.13 - Local digital loop */ + "+TMO", /* V.250 6.9 - V.59 command */ + "+TMODE", /* V.250 6.7.2.10 - Set V.54 mode */ + "+TNUM", /* V.250 6.7.2.12 - Errored bit and block counts */ + "+TRDL", /* V.250 6.7.2.14 - Request remote digital loop */ + "+TRDLS", /* V.250 6.7.2.8 - Remote digital loop status */ + "+TRES", /* V.250 6.7.2.17 - Self test result */ + "+TSELF", /* V.250 6.7.2.16 - Self test */ + "+TTER", /* V.250 6.7.2.11 - Test error rate */ + "+VAC", /* V.252 4.1 - Set audio code */ + "+VACR", /* V.252 6.1 - Audio code report */ + "+VBT", /* 3GPP TS 27.007 C.2.2 - Buffer threshold setting */ + "+VCID", /* V.253 9.2.3 - Caller ID service */ + "+VCIDR", /* V.252 6.2 - Caller ID report */ + "+VDID", /* V.253 9.2.4 - DID service */ + "+VDIDR", /* V.252 6.2 - DID report */ + "+VDR", /* V.253 10.3.1 - Distinctive ring (ring cadence reporting) */ + "+VDT", /* V.253 10.3.2 - Control tone cadence reporting */ + "+VDX", /* V.253 10.5.6 - Speakerphone duplex mode */ + "+VEM", /* V.253 10.5.7 - Deliver event reports */ + "+VGM", /* V.253 10.5.2 - Microphone gain */ + "+VGR", /* V.253 10.2.1 - Receive gain selection */ + "+VGS", /* V.253 10.5.3 - Speaker gain */ + "+VGT", /* V.253 10.2.2 - Volume selection */ + "+VHC", /* V.252 4.12 - Telephony port hook control */ + "+VIP", /* V.253 10.1.1 - Initialize voice parameters */ + "+VIT", /* V.253 10.2.3 - DTE/DCE inactivity timer */ + "+VLS", /* V.253 10.2.4 - Analogue source/destination selection */ + "+VNH", /* V.253 9.2.5 - Automatic hangup control */ + "+VPH", /* V.252 4.11 - Phone hookswitch status */ + "+VPP", /* V.253 10.4.2 - Voice packet protocol */ + "+VPR", /* IS-101 10.4.3 - Select DTE/DCE interface rate */ + "+VRA", /* V.253 10.2.5 - Ringing tone goes away timer */ + "+VRID", /* Extension - Find the originating and destination numbers */ + "+VRL", /* V.253 10.1.2 - Ring local phone */ + "+VRN", /* V.253 10.2.6 - Ringing tone never appeared timer */ + "+VRX", /* V.253 10.1.3 - Voice receive state */ + "+VSD", /* V.253 10.2.7 - Silence detection (QUIET and SILENCE) */ + "+VSID", /* Extension - Set the originating number */ + "+VSM", /* V.253 10.2.8 - Compression method selection */ + "+VSP", /* V.253 10.5.1 - Voice speakerphone state */ + "+VTA", /* V.253 10.5.4 - Train acoustic echo-canceller */ + "+VTD", /* V.253 10.2.9 - Beep tone duration timer */ + "+VTER", /* V.252 6.4 - Simple telephony event report */ + "+VTH", /* V.253 10.5.5 - Train line echo-canceller */ + "+VTR", /* V.253 10.1.4 - Voice duplex state */ + "+VTS", /* V.253 10.1.5 - DTMF and tone generation in voice */ + "+VTX", /* V.253 10.1.6 - Transmit data state */ + "+VXT", /* IS-101 10.1.5 - Translate voice data */ + "+W", /* TIA-678 5.2.4.1 - Compliance indication */ + "+WBAG", /* TIA-678 C.5.6 Bias modem audio gain */ + "+WCDA", /* TIA-678 B.3.2.5 Display data link address */ + "+WCHG", /* TIA-678 B.3.2.4 Display battery charging status */ + "+WCID", /* TIA-678 B.3.2.1 Display system ID (operator) */ + "+WCLK", /* TIA-678 B.3.2.3 Lock/unlock DCE */ + "+WCPN", /* TIA-678 B.3.2.2 Set personal identification number */ + "+WCXF", /* TIA-678 B.3.2.6 Display supported annex B commands */ + "+WDAC", /* TIA-678 C.5.1 Data over analogue cellular command query */ + "+WDIR", /* TIA-678 C.5.8 Phone number directory selection */ + "+WECR", /* TIA-678 C.5.3 Enable cellular result codes */ + "+WFON", /* TIA-678 C.5.5 Phone specification */ + "+WKPD", /* TIA-678 C.5.7 Keypad emulation */ + "+WPBA", /* TIA-678 C.5.9 Phone battery query */ + "+WPTH", /* TIA-678 C.5.10 Call path */ + "+WRLK", /* TIA-678 C.5.4 Roam lockout */ + "+WS45", /* TIA-678 5.2.4.2 DTE-side stack selection */ + "+WS46", /* 3GPP TS 27.007 5.9 - PCCA STD-101 [17] select wireless network */ + "+WS50", /* TIA-678 B.3.1.1 Normalized signal strength */ + "+WS51", /* TIA-678 B.3.1.2 Carrier detect signal threshold */ + "+WS52", /* TIA-678 B.3.1.3 Normalized battery level */ + "+WS53", /* TIA-678 B.3.1.4 Normalized channel quality */ + "+WS54", /* TIA-678 B.3.1.5 Carrier detect channel quality threshold */ + "+WS57", /* TIA-678 B.3.1.7 Antenna preference */ + "+WS58", /* TIA-678 B.3.1.8 Idle time-out value */ + "+WSTL", /* TIA-678 C.5.2 Call session time limit */ + ";", /* Dummy to absorb semi-colon delimiters in commands */ + "A", /* V.250 6.3.5 - Answer */ + "D", /* V.250 6.3.1 - Dial */ + "E", /* V.250 6.2.4 - Command echo */ + "H", /* V.250 6.3.6 - Hook control */ + "I", /* V.250 6.1.3 - Request identification information */ + "L", /* V.250 6.3.13 - Monitor speaker loudness */ + "M", /* V.250 6.3.14 - Monitor speaker mode */ + "O", /* V.250 6.3.7 - Return to online data state */ + "P", /* V.250 6.3.3 - Select pulse dialling (command) */ + "Q", /* V.250 6.2.5 - Result code suppression */ + "S0", /* V.250 6.3.8 - Automatic answer */ + "S10", /* V.250 6.3.12 - Automatic disconnect delay */ + "S3", /* V.250 6.2.1 - Command line termination character */ + "S4", /* V.250 6.2.2 - Response formatting character */ + "S5", /* V.250 6.2.3 - Command line editing character */ + "S6", /* V.250 6.3.9 - Pause before blind dialling */ + "S7", /* V.250 6.3.10 - Connection completion timeout */ + "S8", /* V.250 6.3.11 - Comma dial modifier time */ + "T", /* V.250 6.3.2 - Select tone dialling (command) */ + "V", /* V.250 6.2.6 - DCE response format */ + "X", /* V.250 6.2.7 - Result code selection and call progress monitoring control */ + "Z", /* V.250 6.1.1 - Reset to default configuration */ + NULL +}; + +int packed_ptr = 0; + +short int packed_trie[30000]; + +#define ALPHABET_SIZE 128 + +typedef struct trie_node_s +{ + int first; + int last; + int node_no; + int entry; + /* Array of pointers to children */ + struct trie_node_s *child_list[ALPHABET_SIZE]; +} trie_node_t; + +typedef struct +{ + int entries; + /* The root of the trie */ + trie_node_t *root; +} trie_t; + +static trie_node_t *trie_node_create(void) +{ + trie_node_t *s; + + if ((s = malloc(sizeof(trie_node_t)))) + { + memset(s, 0, sizeof(*s)); + s->first = ALPHABET_SIZE - 1; + } + return s; +} +/*- End of function --------------------------------------------------------*/ + +static trie_t *trie_create(void) +{ + trie_t *s; + + if ((s = malloc(sizeof(trie_t)))) + { + memset(s, 0, sizeof(*s)); + s->root = trie_node_create(); + } + return s; +} +/*- End of function --------------------------------------------------------*/ + +static void trie_recursive_add_node_numbers(trie_node_t *t) +{ + int index; + + if (t) + { + if (t->first <= t->last) + { + t->node_no = packed_ptr + 1; + packed_ptr += (t->last - t->first + 1 + 3); + for (index = 0; index < ALPHABET_SIZE; index++) + trie_recursive_add_node_numbers(t->child_list[index]); + } + else + { + t->node_no = packed_ptr + 1; + packed_ptr += 3; + } + } +} +/*- End of function --------------------------------------------------------*/ + +static void trie_recursive_build_packed_trie(trie_node_t *t) +{ + int i; + + if (t) + { + if (t->first <= t->last) + { + packed_trie[packed_ptr++] = t->first; + packed_trie[packed_ptr++] = t->last; + packed_trie[packed_ptr++] = t->entry; + for (i = t->first; i <= t->last; i++) + packed_trie[packed_ptr++] = (t->child_list[i]) ? t->child_list[i]->node_no : 0; + for (i = t->first; i <= t->last; i++) + trie_recursive_build_packed_trie(t->child_list[i]); + } + else + { + packed_trie[packed_ptr++] = 1; + packed_trie[packed_ptr++] = 0; + packed_trie[packed_ptr++] = t->entry; + } + } +} +/*- End of function --------------------------------------------------------*/ + +static void trie_add(trie_t *s, const char *u, size_t len) +{ + int i; + int index; + trie_node_t *t; + + s->entries++; + /* Loop over the length of the string to add and traverse the trie... */ + for (t = s->root, i = 0; i < len; i++) + { + /* The character in u we are processing... */ + index = (unsigned char) u[i]; + + /* Is there a child node for this character? */ + if (t->child_list[index] == NULL) + { + t->child_list[index] = trie_node_create(); + if (index < t->first) + t->first = index; + if (index > t->last) + t->last = index; + } + + /* Move to the new node... and loop */ + t = t->child_list[index]; + } + t->entry = s->entries; +} +/*- End of function --------------------------------------------------------*/ + +static void dump_trie(void) +{ + int i; + + printf("\nstatic const at_cmd_service_t at_commands[] =\n{\n"); + for (i = 0; wordlist[i]; i++) + { + switch (wordlist[i][0]) + { + case ' ': + case ';': + printf(" at_cmd_dummy,\n"); + break; + case '+': + printf(" at_cmd_plus_%s,\n", wordlist[i] + 1); + break; + case '&': + printf(" at_cmd_amp_%s,\n", wordlist[i] + 1); + break; + default: + printf(" at_cmd_%s,\n", wordlist[i]); + break; + } + } + printf("};\n"); + + printf("\nstatic const uint16_t command_trie[] =\n{"); + for (i = 0; i < packed_ptr; i++) + { + if ((i & 7) == 0) + printf("\n "); + printf("0x%04X, ", packed_trie[i]); + } + printf("\n};\n"); + printf("\n#define COMMAND_TRIE_LEN %d\n", packed_ptr); + +} +/*- End of function --------------------------------------------------------*/ + +int main(int argc, char *argv[]) +{ + trie_t *s; + int i; + + s = trie_create(); + + for (i = 0; wordlist[i]; i++) + trie_add(s, wordlist[i], strlen(wordlist[i])); + printf("// The trie contains %d entries\n", i); + + packed_ptr = 0; + trie_recursive_add_node_numbers(s->root); + packed_ptr = 0; + trie_recursive_build_packed_trie(s->root); + + dump_trie(); + + return 0; +} +/*- End of function --------------------------------------------------------*/ +/*- End of file ------------------------------------------------------------*/