From 135eb6065d2b63d3b6ea3f1be0d633bac18b0995 Mon Sep 17 00:00:00 2001 From: Kizarm Date: Wed, 8 May 2024 12:54:33 +0200 Subject: [PATCH] add gsm --- .gitignore | 2 + README.md | 9 + V203/gsm/GsmDecoder.cpp | 36 + V203/gsm/GsmDecoder.h | 16 + V203/gsm/Makefile | 56 ++ V203/gsm/ch32v203 | 1 + V203/gsm/common | 1 + V203/gsm/gsmdata.c | 1368 ++++++++++++++++++++++++++++ V203/gsm/gsmdata.h | 62 ++ V203/gsm/lib/gsm/inc/config.h | 39 + V203/gsm/lib/gsm/inc/gsm.h | 100 ++ V203/gsm/lib/gsm/inc/private.h | 269 ++++++ V203/gsm/lib/gsm/inc/proto.h | 65 ++ V203/gsm/lib/gsm/inc/unproto.h | 23 + V203/gsm/lib/gsm/src/Makefile | 42 + V203/gsm/lib/gsm/src/add.c | 235 +++++ V203/gsm/lib/gsm/src/code.c | 97 ++ V203/gsm/lib/gsm/src/debug.c | 76 ++ V203/gsm/lib/gsm/src/decode.c | 63 ++ V203/gsm/lib/gsm/src/gsm_create.c | 45 + V203/gsm/lib/gsm/src/gsm_decode.c | 361 ++++++++ V203/gsm/lib/gsm/src/gsm_destroy.c | 26 + V203/gsm/lib/gsm/src/gsm_encode.c | 451 +++++++++ V203/gsm/lib/gsm/src/gsm_explode.c | 417 +++++++++ V203/gsm/lib/gsm/src/gsm_implode.c | 521 +++++++++++ V203/gsm/lib/gsm/src/gsm_option.c | 69 ++ V203/gsm/lib/gsm/src/gsm_print.c | 167 ++++ V203/gsm/lib/gsm/src/long_term.c | 949 +++++++++++++++++++ V203/gsm/lib/gsm/src/lpc.c | 341 +++++++ V203/gsm/lib/gsm/src/preprocess.c | 113 +++ V203/gsm/lib/gsm/src/rpe.c | 488 ++++++++++ V203/gsm/lib/gsm/src/short_term.c | 429 +++++++++ V203/gsm/lib/gsm/src/table.c | 63 ++ V203/gsm/main.cpp | 25 + V203/gsm/player.cpp | 154 ++++ V203/gsm/player.h | 44 + V203/gsm/pwmclass.cpp | 111 +++ V203/gsm/pwmclass.h | 32 + V203/gsm/wrap.c | 22 + 39 files changed, 7388 insertions(+) create mode 100644 V203/gsm/GsmDecoder.cpp create mode 100644 V203/gsm/GsmDecoder.h create mode 100644 V203/gsm/Makefile create mode 120000 V203/gsm/ch32v203 create mode 120000 V203/gsm/common create mode 100644 V203/gsm/gsmdata.c create mode 100644 V203/gsm/gsmdata.h create mode 100644 V203/gsm/lib/gsm/inc/config.h create mode 100644 V203/gsm/lib/gsm/inc/gsm.h create mode 100644 V203/gsm/lib/gsm/inc/private.h create mode 100644 V203/gsm/lib/gsm/inc/proto.h create mode 100644 V203/gsm/lib/gsm/inc/unproto.h create mode 100644 V203/gsm/lib/gsm/src/Makefile create mode 100644 V203/gsm/lib/gsm/src/add.c create mode 100644 V203/gsm/lib/gsm/src/code.c create mode 100644 V203/gsm/lib/gsm/src/debug.c create mode 100644 V203/gsm/lib/gsm/src/decode.c create mode 100644 V203/gsm/lib/gsm/src/gsm_create.c create mode 100644 V203/gsm/lib/gsm/src/gsm_decode.c create mode 100644 V203/gsm/lib/gsm/src/gsm_destroy.c create mode 100644 V203/gsm/lib/gsm/src/gsm_encode.c create mode 100644 V203/gsm/lib/gsm/src/gsm_explode.c create mode 100644 V203/gsm/lib/gsm/src/gsm_implode.c create mode 100644 V203/gsm/lib/gsm/src/gsm_option.c create mode 100644 V203/gsm/lib/gsm/src/gsm_print.c create mode 100644 V203/gsm/lib/gsm/src/long_term.c create mode 100644 V203/gsm/lib/gsm/src/lpc.c create mode 100644 V203/gsm/lib/gsm/src/preprocess.c create mode 100644 V203/gsm/lib/gsm/src/rpe.c create mode 100644 V203/gsm/lib/gsm/src/short_term.c create mode 100644 V203/gsm/lib/gsm/src/table.c create mode 100644 V203/gsm/main.cpp create mode 100644 V203/gsm/player.cpp create mode 100644 V203/gsm/player.h create mode 100644 V203/gsm/pwmclass.cpp create mode 100644 V203/gsm/pwmclass.h create mode 100644 V203/gsm/wrap.c diff --git a/.gitignore b/.gitignore index 9e20b96..e568083 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,6 @@ midi/melody.c midi/miditone.c midi/ton/gen midi/ton/miditones +V203/pwm/sin.c +V203/gsm/lib/libgsm.a diff --git a/README.md b/README.md index 63e7270..f784cdc 100644 --- a/README.md +++ b/README.md @@ -61,3 +61,12 @@ linkování projektu. Cena také není nijak vysoká, proti podobnému Cortex-M3 ## test Jen základní test. + +## gsm +A tohle je právě důvod použití ch32v203. Do té v003 se tohle prostě nevejde. A ani není +jasné proč. Pravda, flash obsahuje hodně dat, ale ta by šla umístit do nějaké SPI. +Samotný kód se vejde, RAM to žere cca 3KiB, takže kde je problém. Ukazuje se, že na +zásobníku. Ta gsm knihovna toho sežere asi moc. Nebo, a to je pravděpodobnější, překladač +u tohoto ořezaného jádra neumí se zásobníkem správně pracovat. To se ukazuje i v jiných +přikladech (viz pwm). Prostě ta v003 je divná, podivně funguje i optimalizace LTO, vynechává +některé potřebné funkce. diff --git a/V203/gsm/GsmDecoder.cpp b/V203/gsm/GsmDecoder.cpp new file mode 100644 index 0000000..fae2167 --- /dev/null +++ b/V203/gsm/GsmDecoder.cpp @@ -0,0 +1,36 @@ +#include "pwmclass.h" +#include "GsmDecoder.h" + +GsmDecoder::GsmDecoder(FIFO & f) noexcept : OneWay(), fifo(f), gsm() { +} +static constexpr int INPUT_BIT_RANGE = 16; +static constexpr unsigned SIGMA_MASK = (1u << (INPUT_BIT_RANGE + 0)) - 1u; +static constexpr unsigned SIGNED_OFFEST = (1u << (INPUT_BIT_RANGE - 1)); + // Předpokládá se na vstupu signed int o šířce INPUT_BIT_RANGE + // přičemž 0 na vstupu odpovídá MAXPWM / 2 na výstupu. Vypadá to divně, ale funguje. +static unsigned pwm_sd (const int input) { + static unsigned sigma = 0; // podstatné je, že proměnná je statická + const unsigned sample = (input + SIGNED_OFFEST) * MAXPWM; + sigma &= SIGMA_MASK; // v podstatě se odečte hodnota PWM + sigma += sample; // integrace prostým součtem + return sigma >> INPUT_BIT_RANGE; +} +unsigned GsmDecoder::Send(uint16_t * dptr, const unsigned len) { + PText source; + if (fifo.Read(source)) { + gsm_frame tmp; + memcpy (tmp, source.get(), sizeof(gsm_frame)); + gsm.decode(tmp, tmpbuf); + for (unsigned n=0u, k=0u; k> 1; + } + return 0; +} diff --git a/V203/gsm/GsmDecoder.h b/V203/gsm/GsmDecoder.h new file mode 100644 index 0000000..5de4a48 --- /dev/null +++ b/V203/gsm/GsmDecoder.h @@ -0,0 +1,16 @@ +#ifndef GSMDECODER_H +#define GSMDECODER_H +#include "player.h" +#include "oneway.h" +#include "gsm.h" + +class GsmDecoder : public OneWay { + FIFO & fifo; + GsmStatic gsm; + gsm_signal tmpbuf [GSMLEN]; + public: + explicit GsmDecoder(FIFO & f) noexcept; + unsigned Send (uint16_t * ptr, const unsigned len) override; +}; + +#endif // GSMDECODER_H diff --git a/V203/gsm/Makefile b/V203/gsm/Makefile new file mode 100644 index 0000000..d3538d6 --- /dev/null +++ b/V203/gsm/Makefile @@ -0,0 +1,56 @@ +TARGET?= ch32v203 + +#TOOL ?= gcc +TOOL ?= clang + +PRJ = example + +VPATH = . ./$(TARGET) +BLD = ./build/ +DFLAGS = -d +LFLAGS = -g +LDLIBS = +BFLAGS = --strip-unneeded + +CFLAGS = -MMD -Wall -Wno-parentheses -ggdb -fno-exceptions -ffunction-sections -fdata-sections +CFLAGS+= -I. -I./$(TARGET) -I./common -I./lib/gsm/inc +DEL = rm -f + +# zdrojaky +OBJS = main.o pwmclass.o +OBJS += player.o GsmDecoder.o gsmdata.o wrap.o + +include $(TARGET)/$(TOOL).mk +BOBJS = $(addprefix $(BLD),$(OBJS)) + +all: $(BLD) $(PRJ).elf +# ... atd. +-include $(BLD)*.d +LDLIBS += -L./lib -lgsm +# linker +$(PRJ).elf: $(BOBJS) ./lib/libgsm.a + -@echo [LD $(TOOL),$(TARGET)] $@ + @$(LD) $(LFLAGS) -o $(PRJ).elf $(BOBJS) $(LDLIBS) + -@echo "size:" + @$(SIZE) $(PRJ).elf + -@echo "listing:" + $(DUMP) $(DFLAGS) $(PRJ).elf > $(PRJ).lst + -@echo "OK." + $(COPY) $(BFLAGS) -O binary $(PRJ).elf $(PRJ).bin +# preloz co je potreba +$(BLD)%.o: %.c + -@echo [CC $(TOOL),$(TARGET)] $@ + @$(CC) -std=gnu99 -c $(CFLAGS) $< -o $@ +$(BLD)%.o: %.cpp + -@echo [CX $(TOOL),$(TARGET)] $@ + @$(CXX) -std=c++17 -fno-rtti -c $(CFLAGS) $< -o $@ +$(BLD): + mkdir $(BLD) +./lib/libgsm.a: + cd ./lib/gsm/src && $(MAKE) all +flash: $(PRJ).elf + minichlink -w $(PRJ).bin flash -b +# vycisti +clean: + $(DEL) $(BLD)* *.lst *.bin *.elf *.map *~ +.PHONY: all clean flash run diff --git a/V203/gsm/ch32v203 b/V203/gsm/ch32v203 new file mode 120000 index 0000000..7650c85 --- /dev/null +++ b/V203/gsm/ch32v203 @@ -0,0 +1 @@ +../ch32v203/ \ No newline at end of file diff --git a/V203/gsm/common b/V203/gsm/common new file mode 120000 index 0000000..8332399 --- /dev/null +++ b/V203/gsm/common @@ -0,0 +1 @@ +../common/ \ No newline at end of file diff --git a/V203/gsm/gsmdata.c b/V203/gsm/gsmdata.c new file mode 100644 index 0000000..8094c47 --- /dev/null +++ b/V203/gsm/gsmdata.c @@ -0,0 +1,1368 @@ +/* GENERATED FILE DO NOT EDIT !!! */ +#include "gsmdata.h" +static const gsm_frame gsm_data_nula[] = { + {0xd2,0x9a,0x93,0xea,0x19,0x50,0x61,0x49,0x2d,0xb7,0x6b,0x2c,0x67,0x60,0xe9,0x1b,0x8d,0xb4,0x9a,0x78,0xc0,0xa7,0x1c,0x6c,0xb6,0xea,0xcc,0x81,0x6a,0xf4,0x4c,0xa2,0x49,}, + {0xd0,0xeb,0xd4,0x6d,0xe3,0x57,0x41,0xb8,0xf5,0xdf,0x5b,0x09,0x65,0x62,0x83,0x15,0xd2,0xed,0x1a,0x69,0xc9,0x24,0x9f,0xae,0x39,0x74,0x53,0x26,0x8a,0xcd,0xca,0x25,0xa5,}, + {0xd1,0x2c,0xc3,0xe6,0x23,0xa5,0xc5,0x09,0x03,0x8e,0x21,0x9c,0x57,0x07,0x58,0x99,0x3c,0x38,0xae,0xa9,0xca,0x5a,0xe3,0x58,0x4a,0xd5,0x55,0xa4,0x59,0x93,0xc2,0x8d,0x9a,}, + {0xd1,0x2d,0x93,0x65,0xac,0x55,0x25,0xe9,0xa1,0x09,0x69,0x3a,0xa8,0x88,0xad,0x34,0x28,0x9e,0xa7,0x55,0xa6,0xc3,0x5c,0x8a,0x2e,0xcd,0x55,0x09,0x45,0x2c,0xad,0x33,0xdb,}, + {0xd2,0x28,0x9b,0x29,0xa2,0x57,0xa8,0xd1,0xe4,0xc5,0xa2,0x81,0x55,0xab,0x7d,0x34,0x96,0xb6,0x5b,0x57,0x8e,0xb8,0xe3,0x91,0xda,0x2c,0x55,0x6c,0xb9,0x0b,0xd5,0x43,0x18,}, + {0xd2,0x27,0xc3,0x2a,0x9a,0xaa,0x8c,0xf5,0xa3,0x37,0xf7,0x0b,0x57,0x4b,0xc3,0x0d,0x3b,0xc9,0x13,0xab,0x2c,0xc4,0xa1,0xad,0xf7,0x9a,0x57,0xcc,0x45,0x5c,0x91,0x76,0xda,}, + {0xd2,0x29,0xa2,0x22,0x2b,0x55,0x09,0x32,0xa9,0xed,0xa5,0x7b,0xa6,0xcb,0x02,0xa2,0xe6,0xb1,0x9c,0xb8,0xed,0x36,0xd4,0x3b,0x8a,0xde,0x61,0x6b,0xa9,0x13,0x4d,0x4e,0x1e,}, + {0xd3,0x2f,0x81,0x89,0xf3,0x5f,0x69,0x39,0x94,0xb1,0xb0,0x22,0x5e,0xc9,0xd6,0xe3,0xce,0xd6,0x90,0xbc,0xaa,0x8f,0x1b,0x71,0xe7,0x63,0x5f,0x48,0xb2,0x7b,0x71,0xc9,0x5b,}, + {0xd3,0x30,0x59,0xd9,0xac,0x5f,0x29,0x46,0x61,0x3d,0xba,0xe4,0xbf,0x28,0x39,0x92,0x48,0x68,0xac,0x5f,0xa4,0xa8,0xa4,0x5c,0x39,0x24,0x5f,0xc5,0x98,0xdd,0x55,0x55,0xd8,}, + {0xd3,0xee,0x81,0x86,0xb2,0x5f,0x88,0xf5,0x5c,0x75,0xc9,0x1c,0x5f,0x29,0x01,0xe9,0xad,0xd9,0x24,0x61,0x4b,0x26,0x4f,0x6e,0x47,0x24,0x5f,0xa4,0x47,0x97,0x9e,0xa5,0xa5,}, + {0xd4,0xeb,0xe8,0xca,0x70,0xbf,0xa8,0xb7,0x5b,0x4c,0x18,0xaf,0x5f,0xea,0xc7,0x34,0xb6,0x36,0x8f,0x59,0x4c,0xbc,0xd5,0xa7,0xda,0x79,0x5f,0xaf,0xbe,0x0d,0xaa,0x36,0xe3,}, + {0xd4,0xeb,0xf9,0x96,0x28,0x61,0x4c,0x42,0x3b,0x8f,0x38,0xf5,0xbf,0x2e,0xc7,0x11,0x16,0x57,0x5c,0x5f,0x6c,0xdd,0x64,0x80,0x64,0xec,0xbf,0x6d,0x37,0xdd,0x89,0x89,0xcd,}, + {0xd4,0xea,0xcb,0x4e,0x18,0xbd,0x6d,0xd7,0x1d,0x91,0x40,0xe1,0x5f,0x0f,0x76,0xdc,0x75,0xc7,0x5c,0x63,0xac,0x43,0xc5,0x76,0x23,0xa2,0xbf,0x6c,0x42,0x15,0x72,0x58,0x6c,}, + {0xd5,0x26,0xd3,0x4a,0x20,0x5f,0x8c,0x56,0x5b,0x8b,0x97,0x63,0xbd,0xac,0x3a,0xe1,0x72,0x3e,0x1d,0xbd,0x88,0xa7,0x2c,0x1c,0xc9,0x29,0xbd,0x48,0xce,0x6c,0x95,0xe4,0x90,}, + {0xd4,0xe9,0xca,0x4a,0x98,0xbd,0x2a,0x8e,0xe6,0x72,0x37,0x5d,0xbd,0x6a,0x36,0x32,0x7d,0xc7,0x1d,0xbf,0x65,0xa4,0xc8,0x91,0xf5,0xea,0x5f,0x89,0x1b,0x4f,0x71,0x8a,0x97,}, + {0xd3,0x2a,0xa1,0x99,0x90,0x5e,0xa9,0xc7,0x65,0x2d,0x87,0x2b,0xba,0xc7,0xe9,0x5b,0x54,0xb7,0x08,0xc0,0xc8,0x37,0xdb,0xb5,0x48,0xcf,0x60,0xaa,0x06,0x95,0x97,0x49,0x1a,}, + {0xd2,0xe5,0x90,0xda,0x62,0xb0,0x88,0xd4,0x84,0x6e,0x4a,0xec,0xaa,0xe5,0xd7,0x4b,0x11,0x1b,0x26,0xd4,0xe5,0x36,0x60,0x84,0x5d,0x5f,0x5e,0xc7,0x43,0xa2,0xac,0xc8,0x26,}, + {0xd5,0x64,0xb0,0x65,0x22,0xd7,0x43,0x9f,0x9d,0x92,0x02,0x18,0xac,0x87,0x08,0xd4,0x8e,0x49,0x54,0xce,0x84,0x04,0xce,0x74,0x64,0xa1,0xce,0x83,0xa4,0x32,0x1e,0x1d,0x0d,}, + {0xd5,0xda,0xd9,0xe0,0xc2,0x6c,0x01,0x9a,0x94,0x03,0xa3,0xa9,0xc6,0x41,0xc8,0x5d,0x82,0x43,0x8d,0xdc,0x20,0xa5,0xa4,0x76,0x37,0x1c,0xd8,0x00,0x49,0x54,0x89,0x48,0xdc,}, + {0xd0,0x5d,0x9a,0xe1,0x5a,0xca,0x20,0x56,0xe3,0xae,0x46,0xe4,0xe4,0x20,0x37,0x23,0x92,0x39,0x24,0x50,0x00,0x49,0x24,0x92,0x48,0xdc,0x88,0x00,0x49,0x24,0x8d,0xc9,0x24,}, + {0xd0,0x5d,0x9a,0xe1,0x5a,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xda,0xa6,0xc3,0xa5,0x5a,0x50,0x60,0x49,0x1b,0x6d,0xb6,0xdb,0x50,0x20,0x22,0x4a,0x6d,0xb6,0xdb,0x52,0x00,0x36,0xdb,0x6d,0xb6,0xdb,0xd9,0xc2,0xc9,0x24,0x92,0x49,0x20,}, +}; +static const gsm_frame gsm_data_jedna[] = { + {0xd5,0x53,0x69,0x50,0x22,0x50,0x60,0x34,0x8a,0x91,0x38,0x9f,0x50,0xc0,0x84,0xd4,0x8d,0xba,0x94,0x56,0xa0,0x55,0xd9,0xa5,0xc9,0x8c,0x93,0x40,0x71,0x76,0x6c,0xf8,0x5e,}, + {0xd6,0x90,0x84,0x21,0xe2,0xd1,0x60,0x2a,0x91,0xb1,0x48,0x23,0x8c,0xc0,0xa8,0x62,0x6d,0xa6,0xa3,0xc7,0xa0,0xb9,0x15,0xad,0xa6,0x63,0x61,0x41,0xc9,0x6d,0xd1,0xb4,0x41,}, + {0xd5,0x53,0x65,0x3e,0x91,0x59,0xc4,0x26,0xed,0xdb,0x58,0x88,0x53,0x27,0x01,0xdf,0xe8,0xcd,0x72,0x59,0x6a,0x0e,0xbd,0x46,0x5b,0x19,0x53,0x0c,0x31,0x5b,0xb2,0x49,0x24,}, + {0xd6,0x15,0x45,0x3e,0x58,0x59,0xa9,0x97,0x30,0xf5,0xa9,0x5c,0x53,0x4b,0x32,0x3a,0xb5,0xc9,0x23,0x55,0x6c,0xa4,0x3a,0xd9,0x29,0x24,0x53,0x8b,0x44,0xcf,0x36,0x9b,0x24,}, + {0xd7,0x5b,0x43,0xfa,0xa9,0x53,0xb0,0x38,0xd8,0xae,0x5b,0x25,0x53,0xed,0xb6,0x85,0x4a,0x4f,0x9a,0x59,0xb1,0xaa,0x9b,0x5e,0xa7,0x13,0x53,0xb1,0x66,0xda,0x7d,0x27,0x14,}, + {0xd6,0x5e,0x6b,0x22,0x70,0x53,0x8c,0x4a,0x25,0x3e,0xf9,0x94,0x53,0x4e,0x68,0x52,0x1a,0x0d,0x94,0xb1,0x10,0x6a,0xeb,0x0d,0x23,0xe1,0x5f,0xce,0x67,0x36,0x12,0x97,0xc2,}, + {0xd6,0x20,0x88,0x2a,0xf1,0x5f,0x6c,0x1a,0xe6,0xda,0xc4,0xa0,0x5f,0x4e,0x1e,0xd5,0x6e,0x39,0x1a,0x60,0x8c,0xd8,0x23,0x0e,0xdc,0xeb,0xbe,0x4c,0xb6,0x91,0x4e,0xeb,0xfe,}, + {0xd0,0xe5,0xcc,0x32,0x21,0xc0,0x8a,0x4a,0x94,0x21,0x23,0x34,0xac,0x03,0xfc,0xc3,0xcc,0xd2,0xfd,0xae,0x22,0xa5,0xaa,0x13,0x47,0x18,0xf0,0x03,0x5f,0x65,0xde,0xa7,0x10,}, + {0xd0,0xe9,0xac,0x3a,0x19,0xc4,0xc2,0x21,0xfb,0x53,0x40,0xab,0x5e,0xa1,0xc2,0x83,0xda,0x49,0xd8,0xbc,0xc2,0x48,0xd1,0x52,0x59,0x27,0xbc,0xa1,0xb0,0xeb,0x48,0xa8,0xee,}, + {0xd9,0x15,0x7a,0x0e,0x7c,0x93,0xf2,0x69,0x92,0xa8,0x90,0x21,0x54,0xd1,0x3a,0xe5,0xd6,0xd6,0xd0,0x56,0xb4,0x2f,0x1b,0x52,0x5b,0x12,0x5f,0x53,0x34,0xfc,0x2e,0xdb,0x23,}, + {0xd3,0x9e,0x82,0xa3,0x20,0x5e,0xaf,0xb2,0x02,0x1e,0x28,0xf4,0xbc,0xb0,0x39,0x9a,0xa1,0xe2,0xfb,0xc6,0x0d,0xb9,0xa3,0xb4,0x06,0xdc,0xb4,0x4f,0xc9,0x6d,0xb5,0xb2,0x13,}, + {0xd1,0x2c,0x9b,0xb5,0xd2,0x5e,0xa8,0x1f,0x9f,0x9b,0x58,0xda,0x6e,0x48,0x7a,0xfb,0x56,0x6d,0x1a,0xba,0x67,0x01,0xe9,0xc5,0x67,0xac,0xbf,0x03,0xb4,0x9a,0x1d,0xbc,0x56,}, + {0xd1,0xe6,0x93,0x7a,0x61,0xbf,0xc4,0xbb,0x13,0x29,0xc6,0xf9,0x61,0xc7,0xd9,0xa3,0x8d,0xa9,0xc5,0x5f,0x49,0x55,0x24,0xd5,0x38,0x1e,0x5f,0xc8,0xaa,0xd4,0x71,0xb6,0xe0,}, + {0xd5,0x29,0x81,0x3d,0xd0,0x71,0xf0,0x36,0xac,0x72,0xf9,0x2f,0x59,0x11,0x27,0x20,0x15,0x39,0x23,0x5d,0x2d,0xeb,0x6b,0x20,0xf2,0xf3,0x5f,0x4d,0xc9,0xa3,0xad,0x13,0xc4,}, + {0xd5,0x2a,0x82,0x32,0x08,0x5f,0x2f,0x49,0x1c,0xb5,0xc4,0x80,0x61,0x0d,0x05,0x6d,0x6f,0x69,0x1b,0xbf,0x4f,0x89,0x16,0x8e,0xba,0xe3,0xc1,0x31,0x25,0x1f,0x8f,0x19,0x23,}, + {0xd4,0xab,0xc2,0xd2,0x18,0xbf,0x2f,0x28,0xd3,0xaf,0xb6,0xda,0x61,0xaa,0x57,0xab,0xab,0xa0,0xf9,0x5f,0x2b,0xf8,0x9e,0xce,0x52,0x1e,0x5d,0x6a,0x39,0xd3,0x99,0xd8,0x10,}, + {0xd5,0x28,0xdb,0x4a,0x20,0xbb,0xe8,0xa9,0x65,0x76,0x43,0xcd,0x5f,0xe8,0xaa,0x2b,0x52,0x3c,0x6c,0x5f,0xa9,0x9e,0xa4,0x71,0x56,0xea,0x61,0x0a,0x69,0x62,0x24,0x73,0x2d,}, + {0xd4,0xe9,0xba,0x4a,0x58,0xbf,0x48,0xe5,0xd5,0x65,0x89,0xa3,0x5f,0x49,0x65,0x1d,0x72,0x35,0x01,0x61,0x09,0x07,0x72,0xb2,0x4a,0xa2,0xbf,0x28,0x91,0x55,0xb2,0xc8,0xb8,}, + {0xd3,0xa8,0xb1,0x9d,0xc8,0xbf,0x49,0xaa,0x0d,0x59,0xe8,0xa3,0xba,0xaa,0x45,0x11,0x47,0xad,0x9c,0xbc,0xc9,0x57,0x22,0x74,0xb1,0x25,0xc0,0xa8,0xdf,0x63,0x4d,0x86,0xaa,}, + {0xd3,0x63,0x91,0x19,0xaa,0xb6,0xa7,0x59,0xec,0xad,0xe3,0x1b,0xb6,0x83,0x2e,0x4d,0x4f,0xce,0xf3,0xca,0xc6,0xa3,0x74,0x5d,0x9b,0x4c,0xd5,0x28,0x31,0x19,0x9d,0xcc,0xe3,}, + {0xd5,0x27,0x98,0xa4,0xd9,0xbe,0xa4,0x48,0x9a,0x88,0x7a,0xb3,0xb4,0x63,0x3a,0xe1,0x61,0x83,0x8e,0x65,0x43,0x44,0xd4,0x6b,0x33,0xc4,0xd2,0xc2,0xe5,0xd0,0xe1,0xb4,0xd9,}, + {0xd6,0x5a,0xd9,0xe8,0x92,0x6c,0x82,0x3e,0xa6,0x65,0x48,0x5c,0xca,0x41,0x86,0xc6,0x51,0x2a,0xdc,0xee,0x20,0x44,0xdd,0x56,0x4b,0x26,0x66,0x00,0x39,0x24,0x92,0x49,0x24,}, + {0xd0,0x9b,0x6b,0x65,0x9a,0xf0,0x40,0x59,0x2a,0x8e,0x47,0x23,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x60,0xa2,0xe1,0x5a,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x23,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xda,0xa6,0xcb,0xe9,0xa3,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x85,0xa9,0xb6,0xdb,0x7d,0xb6,0xdb,}, +}; +static const gsm_frame gsm_data_dva[] = { + {0xd2,0x99,0xc2,0xad,0xa2,0x50,0x60,0x49,0x6d,0x96,0x3b,0x27,0x51,0x40,0x39,0x28,0xa6,0xb2,0xb3,0x57,0x40,0xba,0xdb,0x89,0x95,0x1b,0x61,0xa0,0xc9,0x5b,0xa8,0xb0,0x81,}, + {0xd0,0xeb,0xdc,0xae,0x22,0x54,0xc1,0x2b,0xbe,0xd1,0xb6,0x49,0x55,0x62,0x3b,0x61,0x7d,0xcc,0x65,0x58,0xc2,0x19,0xd2,0x75,0xe6,0x62,0x8a,0xc2,0x46,0xbb,0x13,0x4b,0x12,}, + {0xd1,0x27,0xd4,0x6d,0xea,0xde,0x60,0x90,0xff,0xb6,0xcc,0xd9,0x96,0xe1,0x22,0xd5,0xd5,0x55,0x2b,0x54,0xa0,0xc5,0x53,0x7b,0xd4,0x92,0xa4,0xe0,0xc5,0x1b,0x52,0xe4,0x92,}, + {0xd7,0xab,0xd1,0xca,0x11,0xaf,0xa3,0xa2,0x9a,0x72,0xef,0xe1,0x54,0xa6,0x00,0xe5,0xb6,0x47,0x24,0x79,0xb0,0xb6,0xdc,0xbd,0x48,0xdc,0x6c,0x48,0x42,0xd2,0x71,0x3b,0x7e,}, + {0xd5,0xa7,0x6a,0x6b,0x20,0xb2,0xd2,0xb6,0x41,0x7b,0x5b,0x64,0x52,0xd5,0x34,0x97,0x6e,0x39,0x2c,0x53,0x51,0xb8,0x4f,0x4e,0x46,0xe5,0xa3,0x10,0xd7,0x48,0xf1,0x4a,0x9c,}, + {0xd5,0x26,0x7a,0xa2,0x9a,0x53,0xe9,0xc1,0x0b,0x94,0xc9,0x62,0x53,0x0d,0xc7,0x03,0xb4,0xcc,0xad,0xa2,0xec,0xc6,0x41,0xe3,0x48,0xbd,0xa2,0xcc,0x3b,0x08,0x12,0x65,0x6d,}, + {0xd2,0x27,0xaa,0xed,0xea,0xa2,0xca,0xc9,0x53,0x09,0xb7,0x2c,0xa2,0x26,0xbb,0x09,0x7d,0x28,0xe5,0xf0,0x43,0x58,0xc2,0x3c,0x38,0x76,0xea,0x64,0x59,0x08,0x3c,0xb8,0xed,}, + {0xd1,0xa7,0xca,0xee,0x6b,0x53,0x62,0x5a,0x53,0x3e,0x8a,0x9d,0x53,0xc1,0xd8,0xb4,0x9b,0x09,0x23,0xa1,0x23,0x77,0x30,0x8e,0x46,0xe3,0xa3,0x03,0x67,0x63,0x68,0xf8,0x63,}, + {0xd2,0xe9,0xb2,0x99,0xa0,0x53,0x44,0xc9,0x14,0x06,0x19,0xb5,0xa5,0xc8,0x59,0x1b,0x20,0x47,0xe5,0x53,0x48,0xcb,0x22,0x80,0xf7,0x24,0x53,0xed,0x3a,0xa3,0x6a,0x75,0x1d,}, + {0xd3,0xee,0xc2,0xe1,0xa0,0x53,0xec,0x3b,0x24,0x80,0x49,0x1d,0x53,0xcc,0xe9,0x35,0x54,0x0e,0xa2,0x51,0xab,0xd6,0x3d,0xa6,0x31,0x5c,0x53,0x2e,0x57,0x25,0x6d,0x95,0xcd,}, + {0xd4,0x6f,0xa3,0x6e,0x10,0xa5,0xca,0xd3,0x5d,0x52,0x21,0xd4,0x55,0xcf,0xd8,0xec,0x71,0xa9,0x85,0xa3,0xad,0xe7,0x24,0x7c,0xc6,0x83,0x53,0xcc,0xc8,0xe7,0x4a,0x95,0xcd,}, + {0xd4,0x2c,0xc3,0x19,0xd9,0x52,0xce,0x5b,0x2d,0xac,0xb2,0xfa,0xa4,0xec,0xd6,0xb3,0x8c,0xc3,0x39,0xa3,0xab,0xd6,0x54,0x12,0xae,0xcf,0xa5,0xaa,0xf7,0x4d,0x75,0xf1,0x8b,}, + {0xd4,0xab,0xd3,0x55,0xa0,0xa7,0x4d,0xbb,0x14,0x92,0x44,0x17,0x51,0x6c,0x39,0x64,0xb6,0x44,0x17,0xa1,0xc9,0xa5,0x39,0xae,0xd7,0xcb,0xa1,0xcc,0x19,0x23,0x72,0x47,0xc8,}, + {0xd4,0xab,0xca,0x59,0xd8,0xa3,0x0e,0x07,0x2b,0x92,0x38,0x92,0x53,0xe7,0xcd,0x54,0x8f,0x8f,0x59,0x53,0xc8,0x0c,0xcd,0xa7,0x1a,0x9e,0x53,0x49,0xb7,0x33,0x93,0x3a,0x48,}, + {0xd4,0x6c,0xb2,0x56,0x10,0xa3,0x68,0xf6,0xfa,0x8e,0xd4,0xe2,0xa3,0xa9,0x8f,0x14,0x85,0xb7,0x2f,0xa5,0x48,0x8c,0xb5,0xca,0xd3,0x20,0x53,0x48,0xaa,0xe4,0xd2,0x55,0x18,}, + {0xd3,0x29,0xb2,0x19,0x89,0xa2,0xa7,0x13,0xd7,0xf2,0xe6,0xc5,0xa4,0xc6,0x8b,0x57,0xd6,0x56,0x8f,0xf0,0xa8,0x80,0x9d,0x9b,0x36,0xa1,0xa4,0xe8,0x28,0xbc,0xd6,0x46,0x68,}, + {0xd3,0x25,0x89,0xa1,0xe2,0xe4,0xa7,0x20,0xc3,0x9a,0x6d,0x25,0xa8,0xa5,0xb1,0x64,0x3c,0xba,0xe2,0xa2,0xc6,0x42,0xba,0x75,0xc5,0x61,0x52,0xa5,0xc6,0x2c,0x36,0xbb,0x53,}, + {0xd5,0x68,0xa8,0x65,0x1a,0xa1,0x63,0xc8,0x2d,0x19,0x4a,0x65,0x94,0xa3,0xb2,0x14,0x19,0x47,0x24,0x65,0x63,0x0c,0x66,0x93,0x35,0x0c,0x52,0xc3,0x1c,0x4f,0x62,0xd1,0x5b,}, + {0xd6,0x9a,0xd9,0xe4,0xd2,0x6e,0xa1,0xe0,0x3b,0x56,0xb0,0xea,0xbe,0x01,0xc2,0xd8,0xc6,0x45,0x63,0xc2,0x00,0x5b,0x6d,0xd3,0x67,0x74,0x66,0x20,0x4b,0x64,0xb6,0x59,0x24,}, + {0xd0,0x5f,0xa2,0xe1,0x59,0xa6,0x20,0x49,0x2c,0x92,0x47,0x1b,0xf0,0x00,0x37,0x1b,0x6d,0xb7,0x1b,0xe2,0x00,0x38,0xdb,0x8e,0x49,0x1c,0x6c,0x00,0x47,0x1c,0x92,0x49,0x24,}, + {0xd0,0x5e,0x9b,0x21,0x5a,0x76,0x00,0x49,0x24,0x92,0x49,0x24,0xc0,0x00,0x49,0x24,0x92,0x49,0x24,0x52,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x23,0x92,0x49,0x24,}, + {0xd9,0xe1,0x91,0xd4,0x50,0xa7,0x80,0x46,0xdc,0x92,0x49,0x24,0xb7,0xc1,0xc9,0x24,0x8c,0x78,0xe4,0x60,0x20,0x49,0x24,0x92,0x49,0x9c,0x9c,0x00,0x49,0x24,0x93,0x39,0x24,}, +}; +static const gsm_frame gsm_data_dve[] = { + {0xd2,0x99,0xc2,0xad,0xa2,0x50,0x60,0x49,0x6d,0x96,0x3b,0x27,0x51,0x40,0x39,0x28,0xa6,0xb2,0xb3,0x57,0x40,0xba,0xdb,0x89,0x95,0x1b,0x61,0xa0,0xc9,0x5b,0xa8,0xb0,0x81,}, + {0xd0,0xeb,0xdc,0xae,0x22,0x54,0xc1,0x2b,0xbe,0xd1,0xb6,0x49,0x55,0x62,0x3b,0x61,0x7d,0xcc,0x65,0x58,0xc2,0x19,0xd2,0x75,0xe6,0x62,0x8a,0xc2,0x46,0xbb,0x13,0x4b,0x12,}, + {0xd1,0x26,0xd4,0xe9,0xeb,0xde,0x60,0x90,0xff,0xb6,0x3c,0xd9,0x96,0x81,0x54,0x62,0xbe,0xa7,0x53,0xe6,0xa1,0x42,0xa1,0xbe,0x28,0xe5,0x54,0xc0,0xb7,0x53,0x77,0xc4,0x92,}, + {0xd7,0x2b,0xa8,0xd2,0x4a,0xb3,0x44,0x24,0x93,0x97,0x6f,0xa2,0x50,0xa5,0x00,0x5c,0x92,0xed,0x59,0x50,0xa2,0x82,0xee,0xd6,0x25,0x2e,0xcb,0xcf,0x36,0xdc,0x9d,0x58,0xdc,}, + {0xd5,0xa8,0x5a,0x2b,0x20,0x70,0x64,0xd0,0xda,0x50,0x65,0xa6,0xbe,0xed,0xc6,0x01,0x7a,0xed,0x66,0xe5,0xd3,0x34,0x07,0xaa,0xc8,0xed,0x53,0x0f,0x97,0x09,0xe5,0xbb,0x1d,}, + {0xd5,0x23,0x83,0x27,0x18,0xa5,0x10,0xd4,0xd0,0xe9,0x48,0xe5,0xa5,0x2f,0xe6,0x90,0xe6,0xe8,0x9d,0x52,0x8f,0xca,0xd8,0x0a,0x77,0x15,0xa6,0xcd,0xd8,0xc8,0x82,0xf6,0xde,}, + {0xd2,0x26,0xdb,0x25,0x72,0xa4,0xeb,0x58,0xc0,0x8d,0xb9,0x35,0xa0,0xc8,0x14,0xed,0x7c,0x92,0xed,0xf0,0x45,0x4a,0xda,0x1c,0xb8,0x3d,0xf0,0x23,0xfa,0xd8,0x11,0x58,0x37,}, + {0xd1,0x68,0xd2,0xea,0x2b,0xf0,0xe3,0xfc,0xd3,0x55,0xe5,0x1b,0xea,0xc2,0xd3,0x51,0xcf,0xba,0x1e,0xa3,0x61,0xd8,0x73,0x3a,0x3b,0x18,0xa4,0xe3,0xea,0xe3,0x13,0xb7,0x22,}, + {0xd2,0xe2,0x9a,0xae,0x69,0xa5,0xe5,0xd8,0xdb,0x63,0xc5,0x65,0x53,0xc4,0xfd,0x24,0x40,0x51,0x65,0x55,0xcb,0xda,0xa3,0x69,0xf6,0xdb,0x53,0xec,0x49,0x13,0x6d,0xf6,0xa3,}, + {0xd4,0xa2,0x69,0xe7,0x71,0x53,0xed,0xcb,0x12,0x88,0xf6,0x9d,0x53,0xcb,0x4e,0xd5,0x6a,0x3c,0x54,0xa0,0xad,0x49,0x63,0x4a,0x21,0x2d,0xa8,0x4c,0xed,0x64,0x68,0x16,0x66,}, + {0xd5,0x16,0x65,0x7d,0x59,0x53,0x0a,0x22,0xee,0x88,0x17,0x3d,0xa4,0xe9,0xc9,0x2d,0x68,0x07,0x2f,0xa9,0x4b,0x29,0x2c,0x40,0x5b,0xac,0x53,0x28,0x99,0xac,0x48,0x88,0xe6,}, + {0xd5,0x16,0x75,0xbd,0x58,0xab,0x49,0x37,0xad,0x85,0x10,0xdc,0xf1,0x0c,0x5b,0x24,0x9a,0xc0,0x0b,0x53,0x0b,0x68,0xe4,0xb5,0xb2,0x2c,0x53,0x87,0x8c,0x9c,0x95,0x92,0x7c,}, + {0xd4,0x59,0x95,0x3d,0x69,0x53,0xe9,0xb6,0xe6,0xa8,0xb4,0xe8,0x51,0xc9,0x25,0x26,0xd2,0x48,0x7f,0x57,0xcc,0x58,0xee,0xa9,0x37,0x27,0x53,0xf0,0x34,0xec,0x6d,0x5a,0x9f,}, + {0xd4,0x5b,0xa4,0x31,0x58,0x50,0xb0,0x13,0x24,0xb6,0xd6,0x88,0x53,0x6e,0xd9,0x5c,0xb2,0xc4,0x42,0xa5,0x10,0x78,0xed,0x71,0xd8,0x51,0x53,0x10,0x74,0x75,0x72,0xd8,0x9a,}, + {0xd5,0x1f,0x83,0xb1,0x50,0xa3,0xcc,0xf2,0x7b,0x6b,0x66,0xc8,0x53,0x10,0x0d,0x63,0x92,0xc5,0x1c,0x52,0xcc,0x9b,0xe3,0x77,0x46,0x49,0xa2,0xcc,0x0d,0xe3,0x77,0x46,0xc1,}, + {0xd4,0xda,0xab,0xb4,0xd8,0x53,0x49,0x8f,0x6b,0x8e,0xe9,0x0c,0xa5,0x2b,0xa5,0xcb,0xb5,0xc9,0x0c,0xa3,0xca,0xaa,0xc4,0xcd,0xa9,0x22,0x55,0x4c,0x17,0xc4,0xae,0x48,0xd2,}, + {0xd3,0x5f,0xb3,0xe9,0x59,0xa5,0x68,0x25,0xd1,0xd1,0xcb,0x12,0xa3,0x08,0x3a,0xe6,0x12,0xa9,0x2d,0xa5,0x25,0x36,0xb4,0x1b,0xa5,0xf0,0x53,0x28,0x26,0x3b,0x7a,0x39,0x64,}, + {0xd2,0xa6,0xba,0xf1,0x11,0xa5,0x46,0x32,0x78,0xd9,0xb9,0x13,0x51,0xaa,0x59,0x1a,0xe2,0x64,0xab,0xa4,0xe7,0x20,0x6b,0x57,0xb9,0xa5,0xa4,0xe8,0x22,0x5d,0x1b,0x2b,0xa5,}, + {0xd2,0x22,0xe1,0xed,0x59,0x53,0x44,0xa1,0x07,0x67,0x55,0x5b,0xa0,0xe5,0x85,0x0f,0x6b,0xc7,0x5c,0xf0,0xc3,0xa3,0x04,0xcd,0x6b,0x61,0xf0,0xc4,0x2c,0x1a,0x79,0xdd,0x21,}, + {0xd1,0x69,0x8b,0x3e,0xa8,0xea,0x43,0xc2,0x29,0x6e,0xcd,0x1b,0xd2,0xa2,0x60,0x9b,0x05,0x3f,0xbd,0xe2,0x20,0x8c,0x65,0x04,0x8b,0x3f,0x98,0xc1,0x26,0xa4,0xac,0x44,0xeb,}, + {0xd4,0x67,0x50,0x5d,0x73,0xe4,0xc1,0x34,0x9b,0x54,0x8c,0x5b,0xba,0xc0,0x94,0x21,0x96,0xc7,0x21,0xd4,0xe0,0xe6,0xa4,0x17,0xa9,0xe2,0xf0,0xa0,0xba,0xe6,0x75,0xba,0xdf,}, + {0xd4,0xa2,0x70,0x50,0xaa,0xb2,0xa1,0x2b,0x0d,0x8e,0x4c,0xd3,0xee,0xa0,0xa7,0x65,0xab,0x34,0xe3,0x86,0xe0,0xdb,0x1d,0xb9,0xd6,0x9a,0x53,0x60,0xc9,0x24,0x92,0xc6,0xa2,}, + {0xd5,0xa0,0x70,0xd1,0xa1,0x9f,0x40,0xa8,0xec,0x6c,0x9d,0x5c,0x6a,0x00,0x78,0x6a,0x8d,0xb7,0x1c,0x72,0x40,0x46,0xdb,0x6d,0xb6,0xdb,0xc6,0x20,0x48,0xdb,0x6d,0xb6,0xdb,}, + {0xd0,0x5e,0xa2,0xe1,0x5a,0x8a,0x00,0x46,0xdb,0x6d,0xb7,0x24,0xce,0x00,0x49,0x24,0x92,0x49,0x24,0xe4,0x00,0x49,0x24,0x92,0x49,0x24,0x58,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5e,0xa2,0x65,0x5a,0xc6,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,0x52,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xda,0xa6,0xcb,0xe9,0xa2,0x55,0xef,0x36,0xdb,0x6d,0xb8,0x24,0x5c,0x44,0x76,0xdb,0x6d,0xb6,0xdd,0xaa,0x42,0x36,0xdb,0x6d,0xb6,0xd7,0xec,0x22,0x46,0xdb,0x6d,0xb5,0xd2,}, +}; +static const gsm_frame gsm_data_tri[] = { + {0xd8,0x5e,0x91,0xd8,0xd1,0x50,0x20,0xb6,0xdb,0x6d,0x36,0xd9,0x52,0xc0,0x37,0x85,0x92,0x77,0x1b,0x52,0x80,0x33,0xa3,0xb9,0xaa,0xa2,0x50,0xe0,0x3d,0x1b,0x2a,0xd6,0x77,}, + {0xd5,0x16,0x62,0x1d,0x19,0x58,0xc0,0x30,0x1c,0x69,0xaa,0x9a,0x6c,0x40,0x64,0xf3,0x8d,0xc4,0xab,0x9e,0xa0,0x66,0xb3,0x8a,0x29,0x14,0x7c,0x80,0xb9,0x19,0x71,0xa7,0x1b,}, + {0xd5,0x16,0x71,0xd8,0xd9,0x50,0x80,0x26,0x63,0xd1,0x3a,0xda,0x9e,0x80,0x35,0x2c,0x9e,0x29,0x33,0xd8,0xc0,0x5c,0xa1,0xaf,0x4e,0x5c,0x7a,0xa0,0x4a,0x2f,0x9c,0xa9,0x6a,}, + {0xd7,0xaa,0xea,0xdd,0x12,0x9e,0xc0,0xb8,0xe2,0x51,0x94,0xd3,0xb3,0xaf,0x49,0x26,0x7f,0x48,0xec,0x51,0x33,0x48,0xe6,0x8d,0x2b,0xd1,0x58,0xd0,0x7f,0x06,0x78,0xa4,0x8a,}, + {0xd5,0xa9,0x50,0x10,0x18,0x5c,0x50,0x12,0x12,0x4d,0x2a,0xe3,0xc0,0x4a,0x3d,0x22,0xb2,0xf0,0xf6,0xf0,0x26,0xf5,0x60,0xfa,0xeb,0x64,0xf0,0x44,0xef,0xdb,0xb2,0xc5,0x1b,}, + {0xd8,0xa5,0x69,0xc9,0x21,0xea,0x01,0xa7,0xf3,0xb5,0xc9,0xe5,0xee,0x42,0x3b,0xbb,0x96,0xe9,0xe5,0x7c,0xa1,0xd7,0xf4,0x93,0x57,0x27,0xd9,0xe8,0xb7,0x24,0x6d,0x36,0x17,}, + {0xdc,0xaa,0x69,0x9c,0x49,0x61,0xb1,0x38,0x6b,0x12,0xb9,0x2d,0x60,0xcd,0xd7,0xec,0xfe,0x77,0x2d,0x66,0xcd,0xa9,0x65,0x8d,0x5c,0x27,0xf0,0x8f,0x27,0x9c,0x8f,0x38,0x3c,}, + {0xdd,0xae,0xbc,0x21,0x12,0x59,0x6f,0x57,0x15,0xbc,0xbd,0xe9,0x58,0xae,0xeb,0x67,0xcb,0xdd,0x6c,0x76,0xcc,0x5f,0x1d,0xaa,0xbc,0x2d,0xc6,0x8d,0x5a,0xe3,0x8a,0x9a,0x2b,}, + {0xdd,0x6d,0xec,0xa5,0x4b,0xc0,0xcd,0x24,0xd8,0x88,0x61,0x0a,0x58,0x8c,0x24,0x81,0x86,0x28,0x4c,0x7a,0xab,0x84,0xdd,0x08,0xb5,0x4c,0xf0,0xcb,0x0e,0x0c,0x88,0x94,0x64,}, + {0xd7,0x58,0x70,0xea,0xba,0xd5,0x4b,0x3a,0x6c,0x8c,0x58,0xea,0x52,0xe6,0x5d,0x54,0x60,0x0a,0xdf,0xad,0x4f,0xc9,0x64,0x69,0x17,0xe4,0x51,0x10,0xc8,0xe4,0x8d,0x23,0xdc,}, + {0xd6,0x1c,0x53,0x6f,0xb0,0x53,0x0b,0xb7,0x36,0xd4,0x15,0x0b,0xa3,0x4e,0xc9,0x6d,0x8e,0x31,0x13,0xa3,0x8e,0xe9,0x24,0x6e,0x58,0x34,0x53,0x4d,0xb5,0x37,0x49,0xb4,0xa8,}, + {0xd3,0x9b,0xa4,0x3e,0x58,0x51,0x0a,0x0f,0x63,0xf5,0xc4,0x6a,0xa3,0x0b,0x99,0x1a,0x92,0x36,0xb9,0x53,0x8a,0xf7,0x23,0x8a,0x2a,0xe4,0xa3,0x6a,0x2b,0x25,0xb1,0x46,0x3b,}, + {0xd3,0x9c,0x84,0xfe,0x10,0xa2,0xab,0x37,0x24,0xd5,0xa6,0x47,0xa5,0x4a,0x39,0x1c,0x8d,0xb4,0x97,0x51,0x87,0x0a,0xe3,0x73,0x47,0x31,0xa3,0x47,0x39,0x1c,0x99,0xc1,0x0e,}, + {0xd3,0x5d,0x94,0xfd,0xd8,0xa3,0x49,0xc8,0xe3,0x76,0x46,0xd8,0xa5,0x09,0x07,0x24,0x96,0x56,0xd2,0x53,0x44,0x09,0x65,0x96,0x34,0x91,0xa5,0x04,0xe1,0x34,0xb1,0xc6,0x92,}, + {0xd2,0xde,0xb4,0xb1,0x21,0xa5,0x42,0xc9,0x2b,0x5a,0xc6,0x10,0xa2,0xc3,0xbb,0x24,0x96,0xc6,0x50,0xa0,0xe2,0xbb,0x36,0xb2,0x31,0xc1,0xf0,0x82,0x85,0x16,0xf5,0xa2,0xb1,}, + {0xd3,0xe6,0x63,0x28,0x22,0x96,0xe8,0xb6,0xe4,0x9c,0x5a,0xdc,0xa4,0xa1,0x95,0xe3,0xeb,0xeb,0x0a,0xb0,0x42,0x05,0x1b,0xb6,0xd5,0x11,0xea,0x01,0xa4,0x93,0x6f,0xc9,0x5a,}, + {0xd2,0xd9,0x9b,0x6d,0xe3,0xa4,0xa0,0x1e,0x81,0xaa,0xa4,0xa2,0xe8,0x40,0x1b,0x01,0x8e,0x39,0x25,0xbe,0x20,0x47,0x24,0x92,0x49,0x1b,0xd2,0x00,0x46,0xdb,0x92,0x48,0xe4,}, + {0xd0,0x5d,0x9a,0xe1,0x5a,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0xb0,0x00,0x49,0x24,0x92,0x49,0x24,0xea,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5d,0x9a,0xe1,0x5a,0x54,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xda,0xa6,0xcb,0xe9,0xa3,0x57,0xa0,0x36,0xdb,0x6d,0xb9,0x24,0x53,0xd0,0xc9,0x24,0x12,0x49,0x24,0x7e,0x20,0x7f,0xff,0xff,0xb6,0xdb,0x78,0x00,0x26,0xdb,0x6f,0xff,0xff,}, +}; +static const gsm_frame gsm_data_ctyri[] = { + {0xd8,0x4e,0x68,0xd8,0xdb,0x50,0x60,0x34,0x9a,0x68,0xce,0x56,0x54,0x00,0xb6,0x74,0x71,0xb7,0x25,0x5a,0xa0,0xbc,0x89,0x8d,0xc8,0xda,0x96,0xa0,0xb8,0xd6,0x91,0xb8,0xdc,}, + {0xd4,0x97,0x69,0x19,0x12,0x72,0xe0,0x3e,0x92,0x7d,0xb6,0xdd,0xc0,0x80,0xb7,0x1b,0xb2,0xb8,0xa6,0xba,0xc0,0x36,0xf1,0xef,0x3e,0x9d,0x7c,0xa0,0x3b,0x67,0x67,0x44,0xe5,}, + {0xd2,0x95,0x61,0xe1,0x91,0x90,0xc0,0x26,0xd9,0x94,0xab,0x52,0xe6,0xc0,0x5d,0xa4,0x8d,0xad,0x28,0x8a,0xe0,0x3b,0x2b,0x6e,0x37,0x15,0x72,0xe0,0xc7,0x24,0x92,0x38,0xf3,}, + {0xdc,0x23,0x7b,0x0c,0x89,0x57,0x01,0xc9,0x1c,0xb6,0x4b,0xec,0x5d,0x21,0x7f,0x65,0xda,0xdb,0x6c,0x7b,0xac,0x49,0x1b,0x93,0x87,0x54,0x50,0x05,0xfc,0xdc,0x72,0xc9,0x23,}, + {0xdc,0xef,0xd5,0x24,0x9b,0xb0,0x88,0xc9,0x5c,0x92,0xee,0xe7,0x51,0x49,0xfd,0xbb,0x67,0xbb,0x6c,0x6f,0x2d,0x99,0x65,0x7d,0x1f,0x5e,0x7d,0xaf,0x35,0x22,0x51,0x71,0x4b,}, + {0xdc,0x29,0xcc,0x69,0x24,0x5d,0x6f,0x51,0x84,0x70,0x26,0x9f,0x59,0x4d,0xb5,0x03,0x30,0xae,0x81,0xcf,0x34,0x37,0xce,0x73,0xe8,0x64,0x54,0x94,0x4f,0x12,0x2d,0xa9,0x5a,}, + {0xdb,0x21,0xfb,0x90,0x18,0x98,0x4e,0x67,0xe4,0x96,0xd9,0x64,0xcc,0x26,0xc4,0xe7,0x92,0xad,0x7e,0x98,0x23,0x57,0x7f,0xad,0x57,0x2c,0xca,0x21,0x26,0xe2,0x65,0x12,0xe2,}, + {0xd7,0x55,0x62,0x0c,0xca,0xea,0x20,0x86,0xca,0x65,0x16,0xc8,0xc0,0x60,0x06,0x9d,0x6d,0x3d,0xb9,0xd8,0xc0,0xc6,0x5d,0x91,0xb8,0xe3,0xee,0xc0,0x2a,0xea,0xa9,0xa3,0x5b,}, + {0xd8,0xa5,0x80,0x95,0xab,0x63,0x00,0x95,0x12,0x0e,0x40,0x09,0x53,0x8c,0xb6,0xdb,0x73,0xe1,0x63,0x50,0xaa,0xdd,0x70,0x5d,0x0a,0x83,0x76,0x4a,0x12,0x92,0x11,0x49,0x6c,}, + {0xd4,0x1d,0x5c,0x3d,0xd9,0x5b,0xce,0x46,0xc9,0x06,0x5b,0xa5,0x5e,0xcf,0x56,0xdb,0x89,0x7b,0x23,0xb5,0x30,0xb9,0x24,0x71,0xbf,0x64,0x56,0xcd,0x39,0x2d,0x8d,0x03,0xe5,}, + {0xd5,0x18,0x73,0xba,0xf0,0x57,0xea,0x28,0xb6,0x8d,0x11,0x8a,0x57,0x6c,0x39,0x35,0xb1,0xa4,0x4f,0xa7,0x72,0xc8,0xdb,0x97,0xc8,0xd2,0xb9,0xb3,0x55,0x28,0xb2,0x4b,0x2c,}, + {0xd5,0x59,0x5a,0xba,0xa8,0x63,0x6e,0xd0,0x5d,0xc2,0x39,0xb7,0xc1,0x51,0x34,0xda,0x53,0xa6,0xdc,0x61,0x32,0x4c,0x1c,0x51,0x43,0x9b,0x60,0x90,0x49,0x3b,0xb1,0xb4,0x91,}, + {0xd4,0xd2,0x6a,0xba,0xb0,0xbe,0xac,0xe2,0xbc,0xcb,0x40,0xe3,0xc2,0xad,0xc9,0x78,0xb2,0xb7,0x09,0xd6,0xb1,0x34,0xdb,0xf5,0xd5,0x1b,0x62,0x88,0x18,0xc1,0x3d,0x73,0x54,}, + {0xdd,0x27,0xcb,0x10,0x0a,0xab,0xd3,0xd9,0x1b,0x80,0x32,0x34,0xde,0xb1,0x39,0x26,0xdf,0xeb,0x24,0xa6,0xd2,0x5b,0x26,0xaf,0x7e,0x3b,0xd4,0xd2,0x68,0x7b,0x91,0x63,0x95,}, + {0xde,0xa7,0xe4,0x18,0x5a,0x55,0x72,0x2e,0x0d,0x4d,0x20,0x98,0x5c,0xf1,0x30,0xa1,0x8a,0x24,0xe7,0xc4,0xcd,0x8c,0x28,0xc6,0x8e,0xbb,0x56,0xcc,0xb7,0x73,0xb2,0x38,0x7f,}, + {0xdd,0xde,0x90,0xcc,0xe2,0xbb,0x4c,0xe3,0xc3,0xb4,0xe2,0xe5,0x68,0xcc,0x39,0x0a,0xed,0xd2,0xd6,0xba,0xcf,0x38,0x24,0x72,0x5b,0x6c,0x59,0x30,0xb4,0x93,0x05,0x17,0xbf,}, + {0xd4,0x54,0x63,0xfe,0x29,0x5a,0xd0,0x7f,0xed,0x69,0x04,0x0a,0xce,0xac,0x2d,0x94,0x8e,0x8b,0x12,0xb8,0x4d,0x7a,0xa3,0x76,0xd9,0x4b,0xc4,0xd1,0xb6,0xfd,0x6d,0xbb,0x24,}, + {0xd3,0x99,0x84,0x3a,0x60,0x62,0xcd,0x32,0x4b,0x5d,0x9c,0xef,0xc1,0x0c,0xbd,0x64,0x49,0x1c,0x1e,0x62,0xcc,0xcb,0x8d,0xf1,0x16,0x7c,0xb0,0x8c,0xa4,0x9c,0x96,0x7a,0xc1,}, + {0xd4,0x9a,0x83,0x7a,0x91,0xc3,0x09,0xaf,0x11,0xb2,0x2b,0x2d,0x61,0x6b,0x90,0x24,0x92,0x47,0x5a,0xc3,0x2c,0xda,0xd2,0x11,0x4a,0xe4,0x61,0x48,0x5b,0x9e,0x28,0x8f,0x14,}, + {0xd4,0x9b,0x5b,0x7e,0xd0,0x61,0xe7,0x34,0x62,0xaa,0x9f,0x26,0xb2,0xaa,0xa5,0x1c,0x91,0xfd,0x48,0xc1,0x49,0xaf,0x1c,0x6e,0x38,0xeb,0x61,0x28,0x40,0xcf,0x51,0xd7,0x63,}, + {0xd3,0x5b,0x84,0x7e,0x18,0xc2,0x89,0x5c,0xd8,0x47,0xa8,0xe4,0xc2,0xc8,0x47,0x24,0x65,0x1e,0x9a,0xc3,0x03,0xf9,0xa4,0x92,0xb2,0xc5,0x62,0x84,0xa7,0x5d,0xb6,0x48,0xd0,}, + {0xd2,0x9a,0xd4,0x2d,0x58,0xc0,0xa4,0x85,0x25,0x92,0xca,0xdb,0xbe,0x82,0x12,0xc0,0xbb,0x79,0x24,0xae,0x84,0xbd,0x13,0x02,0xb5,0x6b,0x70,0xa3,0x58,0xa1,0x30,0x39,0x2c,}, + {0xd4,0xa6,0x6b,0x28,0x09,0xb3,0x28,0x49,0xc7,0xaa,0xc5,0x13,0x56,0x61,0xd9,0xa5,0x9e,0x36,0x4a,0xc0,0x41,0x82,0xdb,0x76,0x77,0x2a,0xce,0x01,0x44,0x0a,0x51,0xc9,0x65,}, + {0xd3,0x19,0x7b,0x2e,0x62,0xc8,0xc0,0x37,0x13,0x5b,0xd5,0x6e,0xea,0x20,0x4a,0xd4,0xad,0xb7,0x1c,0xd0,0x40,0x49,0x23,0x92,0x49,0x24,0x58,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5e,0xa2,0xe1,0x5a,0xee,0x00,0x47,0x24,0x6e,0x49,0x23,0xca,0x20,0x37,0x1b,0x92,0x46,0xdb,0xae,0x00,0x37,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5e,0xa2,0xe1,0x5a,0x52,0x00,0x49,0x24,0x92,0x49,0x24,0x52,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x1c,0x92,0x49,0x24,}, + {0xda,0xa6,0xcb,0xe9,0xa3,0xa7,0xa0,0x46,0xdc,0x92,0x4b,0xbf,0x51,0xc0,0xef,0xfe,0xdb,0x6d,0x6d,0x50,0xa0,0xed,0xb6,0xdb,0x6d,0xb6,0x9d,0xcf,0x89,0x24,0x92,0x36,0xdc,}, +}; +static const gsm_frame gsm_data_pet[] = { + {0xd5,0x96,0x89,0xd8,0x51,0x50,0x40,0x49,0x24,0xb2,0x39,0x6c,0x59,0xc0,0xe6,0xe3,0x4d,0xb9,0x1b,0x63,0x00,0x73,0x21,0x97,0xa7,0xa7,0xa8,0x80,0x3a,0x9b,0xf1,0x0b,0xa0,}, + {0xd7,0x5b,0x72,0x98,0xd9,0x8e,0xe0,0x3d,0x0d,0x72,0xb9,0x59,0xba,0xc0,0x39,0x18,0x69,0x9d,0x15,0xdc,0x40,0x54,0xeb,0x96,0xd5,0x1e,0xc2,0xc0,0x76,0xe2,0xaa,0x54,0x66,}, + {0xd5,0x67,0xc2,0xa5,0x88,0xad,0xc0,0xdb,0x2c,0xae,0xcb,0x35,0x5d,0x40,0x7f,0xe5,0xda,0x79,0xa7,0x91,0xd2,0x49,0x24,0x92,0x4e,0xe6,0x8c,0xac,0x83,0xf5,0x70,0x94,0xd1,}, + {0xd2,0xe8,0x82,0x9d,0xaa,0x54,0x69,0x82,0x01,0x21,0x34,0x52,0xc2,0x67,0x00,0x51,0x51,0x29,0x0b,0xa4,0x0a,0xb4,0x12,0x7f,0xcb,0xa1,0x53,0x13,0xb6,0xdf,0x6d,0xc8,0xe4,}, + {0xd5,0x97,0x63,0xfe,0x60,0x51,0x50,0x22,0x44,0xd5,0xb9,0x63,0x9f,0x4f,0xa2,0x0c,0xb9,0xab,0x6d,0xa5,0x70,0x32,0xbb,0xb1,0xb9,0x6d,0x53,0x8a,0xa3,0x17,0x76,0x35,0x34,}, + {0xd4,0xda,0x75,0x7e,0x20,0x53,0xcb,0xa7,0x23,0x09,0xdd,0x9a,0xa3,0x4d,0xc6,0xc5,0x2e,0x59,0x2c,0xa7,0xee,0xb9,0x1d,0x18,0x47,0x34,0x53,0x6e,0xb6,0xd1,0xf4,0xd6,0xed,}, + {0xd5,0x9a,0x64,0xbe,0x60,0xa9,0xb0,0x32,0xa2,0x7e,0x08,0xf6,0xa5,0x32,0xc6,0xe2,0x5c,0xb8,0xe5,0x51,0x50,0xb9,0x1a,0x3d,0x49,0x25,0x53,0xab,0xe5,0x1c,0x43,0x85,0x63,}, + {0xd5,0xdb,0x93,0xfd,0x60,0xa5,0xcd,0xb9,0x5a,0x14,0xcb,0x1c,0x53,0xce,0x4c,0xd9,0x6d,0x76,0xdc,0x53,0xb0,0xa9,0x23,0x6b,0xb5,0x24,0x55,0xca,0xb6,0x73,0x5d,0xf4,0x64,}, + {0xd4,0x9d,0x7b,0xf6,0x98,0xa2,0xcc,0xbf,0x9b,0x68,0x75,0x2b,0xa0,0xc9,0xec,0x0a,0xa9,0xf6,0xf3,0xf0,0x8e,0xb9,0x52,0x91,0x9e,0x9d,0xa3,0xac,0xa7,0x24,0x8e,0x8a,0xdc,}, + {0xd2,0xe0,0xba,0xfd,0xd8,0x53,0x07,0x2b,0xec,0x68,0x38,0x74,0xa2,0x88,0x29,0xa3,0x2a,0x31,0x22,0xd6,0x23,0xbb,0x75,0xc7,0x13,0x43,0xd6,0x23,0x4d,0x7d,0xc7,0x24,0x92,}, + {0xd2,0x56,0x9a,0xfa,0x18,0xec,0x02,0x2b,0xbd,0xde,0xa9,0x6a,0xa4,0x40,0xcd,0xe1,0x6a,0xa9,0xe9,0xe4,0x40,0xec,0xaa,0x6e,0x59,0x32,0xe6,0x41,0x2a,0xdb,0x8d,0x78,0xe2,}, + {0xd5,0xe9,0xc3,0x31,0x99,0x66,0xa0,0x44,0xae,0x75,0x92,0xa1,0xa6,0xe1,0x22,0x51,0x28,0x80,0x9b,0x52,0xc1,0x10,0x01,0x49,0x24,0x91,0x99,0xad,0x36,0xe4,0x92,0x76,0xdc,}, + {0xd8,0x25,0xa1,0xa1,0xe2,0x62,0x4c,0xcd,0xf2,0x4e,0x4d,0x1a,0x84,0xa8,0x18,0x72,0x91,0x48,0x18,0xc6,0x8a,0xc2,0xca,0x44,0x9c,0x03,0x50,0xc9,0x86,0xce,0x49,0x4a,0x7a,}, + {0xd9,0x28,0x9a,0x94,0x61,0xcf,0x28,0xab,0x03,0x68,0xb7,0x17,0xc4,0xa7,0x94,0x6b,0xfc,0x3b,0x55,0xae,0xe6,0xca,0xee,0x95,0xde,0xb6,0xe4,0x28,0xc7,0xea,0xba,0xc9,0xe7,}, + {0xd5,0x55,0x58,0x90,0xe1,0xe4,0x83,0xaf,0xe6,0xba,0xb8,0xfb,0x8e,0x42,0x89,0x1d,0x69,0xb5,0x9c,0xc6,0x21,0x61,0x23,0x2d,0xab,0xa2,0xe6,0x01,0x32,0x6c,0x8d,0x16,0xa4,}, + {0xd3,0xd9,0x69,0xdd,0x8b,0xe8,0x00,0x98,0xa3,0x6e,0x35,0x1d,0xa0,0x40,0x28,0xca,0xa9,0xc4,0xe3,0xee,0x00,0x48,0xdb,0x72,0x46,0xdb,0xd2,0x20,0x36,0xdb,0x6d,0xb6,0xdb,}, + {0xd0,0x5f,0xaa,0xe1,0x5a,0xf0,0x00,0x48,0xdb,0x6d,0xb7,0x24,0x60,0x00,0x49,0x24,0x92,0x49,0x24,0x9c,0x00,0x49,0x24,0x92,0x49,0x24,0xd2,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5f,0xa2,0xe1,0x5a,0xaa,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x62,0x00,0x49,0x24,0x92,0x49,0x24,0x70,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xda,0xa6,0xcb,0xe9,0xa2,0x50,0x40,0xb6,0xdb,0x6d,0xa2,0x49,0x51,0xd6,0xb6,0xd8,0x92,0x36,0xdb,0x52,0x08,0x36,0xdc,0xe9,0x29,0x24,0x9e,0x28,0x46,0xdf,0x4d,0xc9,0x24,}, +}; +static const gsm_frame gsm_data_sest[] = { + {0xd3,0xd5,0x61,0xcc,0xdb,0x50,0x40,0x49,0x6d,0xb2,0xc5,0xe1,0x59,0x40,0x4c,0xe9,0x6e,0x47,0x92,0x82,0xc0,0x46,0x72,0xaf,0x4a,0x65,0xa6,0xa0,0x57,0x2b,0x92,0x2a,0xab,}, + {0xd4,0x5f,0x58,0x0c,0xd2,0xb3,0x00,0x3b,0x59,0x59,0x44,0xe6,0x67,0x60,0x49,0x35,0xd3,0xc5,0x0d,0x7c,0x80,0xe7,0x63,0x6c,0xc4,0xda,0x6d,0x21,0x64,0xa2,0x6e,0x28,0x5e,}, + {0xd9,0xab,0xd3,0x24,0xc8,0x7b,0x82,0x39,0xd6,0xca,0x3e,0xdb,0x53,0xc8,0x3d,0xf6,0x2d,0xd9,0x65,0x54,0xe8,0xa2,0x9b,0x50,0x12,0xd6,0x51,0x29,0x84,0xfd,0x62,0x3b,0x1a,}, + {0xd9,0xf5,0xf1,0x5c,0x49,0x58,0x8a,0x95,0x58,0x7d,0x36,0x8b,0x5f,0xec,0xa8,0xfd,0x24,0xd9,0x86,0x69,0x4e,0x9a,0xdc,0x80,0x59,0x23,0x54,0xcd,0x90,0x24,0xf0,0xa7,0x24,}, + {0xdb,0x2b,0xdb,0x50,0x08,0xe1,0x6d,0x10,0xa2,0x67,0x1a,0x60,0xda,0xeb,0xd9,0xd0,0x47,0x8d,0x1b,0xa2,0xef,0xc8,0xe4,0x0e,0x26,0xa2,0x75,0x0f,0xc6,0x23,0x56,0x91,0x66,}, + {0xda,0xb0,0xec,0x18,0x00,0x5a,0x8c,0x2a,0x1c,0x51,0x81,0x4b,0xb0,0xf2,0x57,0x13,0xc2,0xaa,0x9a,0xf1,0x30,0x3b,0x4b,0x70,0x2f,0x0b,0x7c,0x8f,0x9a,0x9b,0x82,0x31,0x51,}, + {0xdb,0xad,0xd4,0x5d,0x08,0xce,0x8f,0xaa,0xc9,0x47,0x86,0xc5,0x57,0x0f,0xd1,0x1e,0x09,0xe8,0x6d,0xd5,0x0f,0x98,0xe3,0x91,0x68,0xc7,0xe0,0xb1,0x46,0xeb,0x16,0x4a,0xec,}, + {0xdb,0x6d,0xf3,0x58,0x08,0x87,0x30,0x47,0xea,0x73,0xcd,0x65,0x67,0x4f,0x7b,0xb4,0xa6,0x63,0xbb,0xd2,0xae,0xeb,0x6b,0xbe,0x8b,0x37,0xa6,0xcd,0xb5,0x5b,0x35,0xf4,0xa9,}, + {0xd9,0xe1,0x80,0x4c,0x2c,0x88,0x8b,0x58,0xa6,0x4c,0x3a,0xdb,0xee,0x0c,0x37,0x1c,0xae,0x97,0xdc,0xdc,0x4b,0x39,0x2d,0xb1,0x59,0xe9,0x78,0xea,0xc8,0xdc,0x72,0xff,0xfc,}, + {0xd6,0x1c,0x72,0xf1,0xe8,0x57,0x92,0x5b,0x23,0x44,0x15,0xec,0x63,0x58,0x49,0x23,0x69,0xbf,0x1b,0x51,0x4f,0xbf,0x57,0x9c,0x0f,0x25,0xa3,0x72,0x3d,0x56,0x94,0x9e,0xde,}, + {0xd6,0x1d,0x8b,0x35,0xb0,0x53,0x8d,0x88,0x75,0x7e,0x01,0x54,0x53,0x32,0x59,0x6d,0xb1,0xa1,0xd2,0xa3,0xf0,0xd8,0xa5,0xa9,0xc1,0x22,0x52,0xb1,0xe8,0xe6,0xad,0xb0,0x24,}, + {0xd5,0x20,0x7b,0x2e,0x20,0xa4,0xf0,0x46,0xe7,0x66,0x01,0x9a,0xe4,0xd1,0x36,0xdd,0xf6,0x00,0x3c,0xa3,0x0e,0x17,0x63,0x59,0x8a,0x4f,0x53,0x6d,0x48,0xde,0xa9,0xc2,0x39,}, + {0xd4,0xdf,0x8a,0xae,0x20,0x53,0x89,0x77,0x15,0x6a,0x4a,0xac,0xa5,0x6b,0x1b,0x24,0xed,0xb4,0x2a,0xa2,0xae,0x47,0x2b,0x9a,0x28,0x44,0xf0,0x8b,0x55,0x32,0xbd,0xaa,0x40,}, + {0xd5,0x19,0x7a,0x22,0xb1,0xee,0x8c,0xb8,0xe3,0xb6,0x39,0x10,0xf0,0xe8,0x29,0x17,0xa5,0xd7,0x51,0xf0,0xe8,0x8b,0x2b,0x71,0x4e,0xd4,0xaa,0xaa,0xd1,0x54,0x8e,0x28,0xeb,}, + {0xda,0x2a,0xcb,0x2c,0xe2,0xe1,0x4c,0x08,0x5a,0x8f,0x3d,0x22,0xdb,0xcd,0x30,0x93,0x92,0x53,0x9b,0xeb,0xae,0xbd,0x03,0x76,0x55,0xa4,0x52,0xad,0x3e,0xab,0x75,0xa7,0x65,}, + {0xdb,0x2b,0xd3,0xb5,0x22,0xd2,0xcd,0x09,0xe3,0xb3,0x25,0xab,0xc3,0x0d,0x0b,0xda,0x99,0x59,0x56,0x84,0xad,0x75,0x31,0xd5,0xb7,0x9b,0x9f,0x6e,0x17,0xe4,0x71,0x5a,0x6f,}, + {0xda,0xac,0xb4,0x75,0xf3,0x56,0xef,0x8b,0x31,0x6f,0x53,0xeb,0x62,0xd0,0x49,0x82,0x8e,0x8c,0xd2,0x54,0xcc,0xfa,0x51,0x4d,0x35,0xa1,0xac,0x8e,0xa6,0x66,0x09,0xd4,0x65,}, + {0xda,0xa6,0xbc,0x2e,0x6b,0xc8,0xed,0x5a,0xc4,0xb9,0x41,0x50,0x97,0x2e,0xf5,0x12,0xf4,0x39,0x59,0x60,0xcc,0xa8,0x97,0x6a,0x27,0x59,0xa2,0xed,0xc1,0xae,0x32,0x49,0x55,}, + {0xd9,0xea,0xd4,0x29,0x62,0xdc,0xcc,0xca,0xa5,0x6c,0x6b,0x4b,0xe0,0xec,0x17,0x84,0xae,0x28,0xe6,0x5b,0x2a,0xbd,0xd8,0x32,0x97,0x43,0xda,0x25,0x04,0x54,0xdf,0xf8,0xdb,}, + {0xd4,0xd4,0x82,0xa1,0x9a,0xb8,0x41,0xdb,0x77,0xba,0x4e,0xde,0xd8,0x41,0xce,0x9d,0x76,0x2b,0x2c,0xea,0x60,0xd8,0xd8,0x09,0x29,0x23,0xa8,0x00,0x36,0xda,0x78,0x25,0x5b,}, + {0xda,0xa2,0x92,0x9c,0xe3,0xe5,0xc1,0xc5,0x1f,0x29,0xa2,0x8a,0x6b,0xf2,0x36,0xec,0x56,0x67,0x7b,0x68,0xb0,0x0f,0x97,0x8d,0x44,0xd2,0x56,0xb0,0xb6,0xca,0x69,0xd4,0x80,}, + {0xd6,0xd9,0xa3,0x15,0x70,0xac,0x29,0x6a,0xd8,0x29,0x48,0x0d,0x5c,0xa9,0x07,0x55,0x85,0x3a,0xdb,0xe4,0x22,0x1e,0xe0,0x23,0xbf,0x89,0xcc,0x41,0x86,0xa4,0xab,0xb1,0x1a,}, + {0xd7,0x1f,0xeb,0x10,0x4a,0xf0,0x22,0x68,0x64,0x9c,0xc3,0x63,0xe2,0x41,0x3c,0xdb,0x0a,0xda,0x4a,0xe0,0x80,0x8b,0x57,0x75,0x98,0x9f,0xc0,0xa0,0x55,0xe1,0xec,0x6b,0x3c,}, + {0xd0,0x9b,0x9a,0xe1,0x5a,0x50,0x20,0x38,0xdc,0x6e,0x39,0x24,0x50,0x00,0x49,0x24,0x92,0x46,0xdc,0xe8,0x00,0x46,0xe3,0x71,0xc9,0x23,0x50,0x00,0x49,0x24,0x92,0x36,0xe4,}, + {0xd0,0x9b,0x9a,0xe1,0x5a,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x9b,0x9a,0xe1,0x58,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,}, +}; +static const gsm_frame gsm_data_sedm[] = { + {0xd2,0x18,0x7b,0x65,0xa1,0x50,0x40,0x4b,0x75,0xba,0xfd,0xe6,0x53,0xe0,0x46,0x9b,0x49,0x94,0x60,0x84,0xe0,0x46,0x9b,0x11,0xb2,0x90,0x58,0xe0,0x24,0x91,0x89,0xb2,0x1d,}, + {0xd6,0x99,0x3a,0x11,0x18,0x67,0x60,0x94,0x52,0x8d,0x90,0x25,0x5c,0xc2,0x16,0x79,0xb2,0x23,0x3d,0x5f,0x22,0x34,0xf9,0x4a,0x56,0xea,0x9d,0xc5,0x54,0xab,0x7d,0x0e,0xdb,}, + {0xda,0xa8,0xeb,0x65,0x19,0x71,0x27,0x39,0x13,0x91,0x49,0x03,0xad,0xca,0x5a,0xa4,0x91,0xda,0xdf,0x50,0xea,0xab,0x2f,0x52,0xd7,0x6d,0x7f,0x0c,0x2c,0xec,0x76,0x3b,0x57,}, + {0xd9,0xe8,0xe3,0x29,0xaa,0x71,0xcb,0x9c,0xd3,0xcb,0xac,0xf8,0x58,0xcc,0x4e,0xdd,0x9a,0x69,0x6a,0xef,0x2c,0x70,0xf3,0x35,0xf3,0x6c,0xd1,0x4f,0x2b,0x28,0x75,0xc7,0x61,}, + {0xdb,0x67,0xbc,0xe8,0xeb,0xbb,0x0d,0x79,0xd3,0xb6,0x4c,0xc6,0xcb,0xae,0xd7,0x97,0x2b,0x95,0x63,0x56,0xcf,0x54,0xac,0xa1,0xcc,0xaa,0x57,0x51,0xbb,0xca,0xd6,0x37,0x63,}, + {0xdb,0x66,0xed,0x25,0x33,0x84,0xcd,0xb7,0x27,0x56,0xb5,0x46,0xb2,0xed,0xca,0xe0,0xa2,0x38,0xa2,0xe4,0xcf,0x39,0x0d,0x4e,0x1b,0x03,0xe1,0x2e,0xaa,0xec,0x53,0xc1,0x75,}, + {0xdb,0xa6,0xdc,0xf5,0x6b,0xa7,0x6d,0x6d,0xe0,0xbd,0xb5,0x0e,0x8a,0xd1,0x36,0x9c,0x4e,0xb2,0xe7,0x6b,0x0e,0x32,0x3a,0x6e,0xbc,0x1f,0x98,0x8f,0x93,0x2b,0xed,0x36,0xdd,}, + {0xda,0x68,0xd3,0xdc,0xe2,0x86,0xc9,0x20,0x9e,0x62,0xe7,0xc9,0xe2,0x69,0xd9,0x40,0x72,0xc8,0x5b,0xcc,0xc9,0x98,0x15,0xfe,0x46,0xd5,0xd4,0xab,0xb5,0xf6,0x91,0xdb,0xac,}, + {0xd4,0xe3,0x6a,0xa7,0x98,0x84,0xa9,0x23,0x1a,0x57,0x6f,0xef,0xc3,0xcd,0xc8,0xd8,0x12,0xd9,0xb6,0x52,0xd4,0x36,0x8a,0xf1,0x49,0x2c,0x57,0xd0,0xca,0xec,0x78,0x56,0xe0,}, + {0xd4,0xe5,0x92,0xee,0xd8,0x57,0x90,0x6a,0xdc,0x23,0x2c,0xe3,0x57,0x91,0x37,0x35,0x6d,0x0b,0x0c,0x57,0xb0,0xc8,0xe4,0x51,0xbc,0x17,0x61,0x11,0x76,0xee,0x6d,0x25,0x1a,}, + {0xd6,0x1f,0x81,0x1e,0x78,0xbc,0xcd,0x2f,0x96,0xfb,0x32,0x11,0xc0,0xf4,0xae,0xd3,0x72,0x49,0x1a,0x61,0x6e,0x28,0x87,0xb2,0xb8,0xe4,0xc4,0x8c,0x58,0x83,0x62,0x85,0xb7,}, + {0xd1,0x9c,0xd3,0xb6,0xe8,0xc0,0x6a,0x7c,0xe3,0x48,0x93,0x6d,0xdc,0x45,0xd7,0x63,0x89,0x30,0x95,0xb4,0x46,0xf6,0x9c,0x8c,0xca,0xcd,0xbe,0x24,0x27,0xf1,0x93,0xe6,0x9c,}, + {0xd0,0xa9,0xcb,0xfa,0x20,0x64,0xa3,0x34,0xd8,0x9e,0x2b,0x2b,0xc0,0xc2,0x3b,0x22,0xa2,0x7c,0xa1,0xbf,0x41,0xd8,0x1d,0x8d,0xd5,0x34,0xda,0xe2,0xd5,0x58,0x51,0xa6,0x8d,}, + {0xda,0x94,0x72,0x8e,0x64,0x7b,0xcd,0xc9,0x6e,0xff,0x44,0x49,0x61,0xf5,0x36,0xe4,0x92,0x0e,0x9e,0x50,0xb3,0xa1,0x50,0xb2,0x58,0xed,0x96,0xd2,0x58,0xc9,0x01,0x6f,0x15,}, + {0xd4,0x9c,0x8a,0x22,0xf8,0xc2,0x71,0xdb,0x6b,0x24,0x11,0xe4,0x64,0x8c,0x8d,0xf5,0xae,0x20,0xca,0xb8,0xb1,0xf6,0x9b,0xb6,0x49,0x72,0xd0,0x2e,0xc0,0x79,0x72,0x3d,0xb6,}, + {0xd1,0x68,0xca,0xee,0x29,0x56,0xee,0x32,0x02,0x2d,0xc9,0x25,0xb6,0x09,0xe7,0x8a,0x23,0x3a,0x62,0xc0,0x8a,0x78,0xe1,0xca,0x25,0xe5,0x61,0x46,0x36,0xed,0xd2,0x94,0x87,}, + {0xd1,0x68,0xbb,0x2a,0x69,0xc0,0xa7,0x2a,0x9b,0xba,0xf7,0x82,0x61,0xa2,0xf8,0x36,0x85,0x67,0x5c,0x61,0x26,0x34,0x06,0x6e,0x47,0x2d,0xc3,0x26,0xe7,0x8a,0x03,0xb9,0x1b,}, + {0xd0,0xea,0xbb,0xea,0x69,0x61,0x46,0xd9,0x6b,0xc6,0x25,0xe4,0xc3,0x24,0x10,0x73,0xad,0xc1,0x14,0xc3,0xe4,0x75,0x12,0x8c,0xb4,0x57,0x61,0xa8,0x29,0x79,0x71,0xc8,0x5c,}, + {0xd2,0xe2,0xa9,0x2e,0xa8,0x69,0xcd,0xc9,0x19,0x9c,0xa9,0x6c,0x61,0xac,0xc9,0x9b,0x2a,0x88,0xdd,0x61,0x6a,0xcb,0x9e,0x52,0x14,0x3d,0x65,0xcb,0x2e,0xe4,0x8a,0x9a,0x22,}, + {0xd3,0xe0,0xa1,0x6a,0x28,0x61,0xe9,0x8b,0x65,0x92,0x3e,0xa9,0xc3,0x2d,0x14,0x07,0x8e,0xd9,0x5a,0x54,0x24,0x96,0x67,0x32,0x26,0xdb,0xe8,0x03,0x07,0x5a,0x69,0x35,0x1e,}, + {0xd0,0x5d,0xa2,0xdd,0xa2,0xe0,0x44,0x70,0xea,0x4d,0x39,0x24,0xe8,0x20,0x5f,0x44,0x92,0x36,0xe3,0xc4,0x20,0x36,0xe3,0x8d,0xc9,0x24,0xea,0x00,0x37,0x24,0x92,0x36,0xdc,}, + {0xd0,0x5e,0xa2,0xe1,0x5a,0xc2,0x00,0x38,0xe4,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x72,0x49,0x24,0xe6,0x00,0x39,0x24,0x8d,0xc9,0x24,0x72,0x00,0x49,0x24,0x8d,0xc9,0x24,}, + {0xd0,0x5d,0x9a,0xe1,0x5a,0xe2,0x00,0x49,0x24,0x92,0x49,0x23,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, +}; +static const gsm_frame gsm_data_osm[] = { + {0xd4,0xd6,0x71,0x9c,0xda,0x50,0x20,0x26,0x93,0x4d,0xb0,0x94,0x62,0x80,0xcb,0x34,0x89,0xb9,0x1d,0x70,0xc0,0xd6,0xd3,0x90,0xa5,0x23,0x62,0xa0,0x68,0x92,0x16,0x0b,0x23,}, + {0xd4,0x1f,0xfc,0x08,0xbb,0x94,0xe0,0xc6,0x9a,0x69,0xa6,0x8b,0x57,0xaa,0x36,0xdb,0x6d,0xb6,0xdf,0x6f,0x07,0xd1,0xda,0x66,0x39,0x25,0x81,0x6f,0x48,0xda,0x0f,0x34,0xed,}, + {0xd3,0xa5,0xfa,0x09,0xba,0x53,0xb0,0x5a,0xec,0x50,0x76,0xac,0x57,0x4b,0x9e,0xe5,0x68,0x3d,0x04,0xac,0x8e,0x58,0xe5,0xad,0x21,0xb0,0xbe,0x4d,0xd9,0x64,0x92,0x34,0x85,}, + {0xd3,0xae,0xc8,0x8a,0x69,0xc8,0x29,0xf1,0x2b,0xb2,0xdb,0x59,0xc2,0xa7,0x11,0xdf,0xaa,0xab,0xa7,0x61,0x26,0x38,0x01,0x96,0x3b,0x1f,0xc3,0x27,0x3c,0x61,0x62,0x27,0x56,}, + {0xd3,0x26,0xc9,0x4a,0x30,0x61,0xc6,0xba,0x6b,0x4a,0xb9,0xca,0x60,0x87,0x76,0xf5,0x76,0x35,0x08,0xa2,0xc7,0x75,0x23,0xff,0xcc,0x50,0xc8,0xe6,0x49,0x95,0xd7,0x45,0x44,}, + {0xd9,0x9e,0x7a,0x18,0x99,0xc9,0x6d,0x24,0xdc,0x71,0xbf,0x63,0x5e,0x8c,0x90,0xc1,0xa6,0x44,0xe9,0xa9,0xce,0xa7,0x21,0xb2,0x84,0xd8,0x55,0x4d,0x45,0x8b,0xb0,0x4d,0x0c,}, + {0xdb,0x72,0xa3,0x64,0x49,0x59,0x0d,0x2a,0xa2,0x75,0x88,0xd1,0xbe,0xad,0x64,0x12,0xa2,0x41,0x64,0xe6,0xaf,0x0b,0x23,0x72,0x61,0x73,0x5b,0x2e,0x3c,0xfc,0x3e,0x35,0xdf,}, + {0xda,0xe9,0xba,0x20,0x10,0xab,0x30,0xc9,0xd5,0x92,0xad,0x5b,0x82,0xcc,0xc5,0xea,0xc7,0xbb,0x1d,0xcc,0xae,0x2c,0xf3,0x78,0xdb,0x1f,0xe7,0x30,0x9e,0x5f,0x92,0xab,0x64,}, + {0xda,0xaa,0x91,0xd0,0x58,0x5e,0xcf,0x39,0x9a,0xea,0x9b,0x5c,0xae,0xad,0xb5,0xdc,0x92,0x47,0x84,0x9e,0xa9,0xe7,0x5d,0x59,0x5d,0x47,0xaa,0xeb,0x1b,0x62,0xc9,0xac,0xf0,}, + {0xdb,0x28,0x92,0x9c,0xd0,0xea,0xcb,0x73,0x32,0x99,0x49,0xa2,0x82,0xca,0xda,0xfb,0x8e,0x3b,0x53,0xaa,0xa8,0xbf,0x16,0x6d,0xc8,0xe5,0xcc,0xcb,0x28,0xe3,0x4e,0x47,0x02,}, + {0xd0,0xe8,0xcc,0x6a,0x5a,0x77,0x4e,0x4b,0x6e,0x91,0x00,0x43,0x5a,0x28,0x07,0x24,0x8e,0x45,0x13,0xb4,0x45,0x77,0xe2,0x52,0xeb,0x28,0xba,0x29,0xb4,0xbc,0x91,0xa9,0x6d,}, + {0xd1,0x29,0xc3,0xa9,0xe2,0x61,0x23,0xc6,0xc0,0x9c,0xda,0x36,0xc3,0x45,0xdd,0x22,0x60,0xf2,0xec,0x63,0xe3,0x57,0x1a,0xab,0x09,0x18,0xc1,0x63,0x4e,0x5d,0xd7,0x48,0xc2,}, + {0xd1,0x29,0xcb,0xa5,0xa3,0x61,0x43,0x1f,0x25,0x52,0x6d,0x64,0xc3,0x43,0x30,0x32,0xd2,0x3b,0x6e,0xc3,0xa3,0xb6,0xd4,0x7c,0x56,0xe4,0xc3,0xc3,0xd6,0xe2,0x82,0xce,0x5c,}, + {0xd2,0x5f,0x8b,0xa5,0x63,0xb6,0xe6,0x97,0x24,0x6e,0xc9,0x27,0xd6,0x84,0x8a,0xdb,0x6e,0x34,0x93,0xd2,0x41,0x4b,0x69,0xad,0xb8,0xdb,0xd8,0x40,0x29,0x64,0x85,0x9d,0x14,}, + {0xd0,0x5f,0xa2,0xe1,0x22,0xc0,0x20,0x48,0xe3,0x72,0x48,0xe3,0x94,0x00,0x49,0x23,0x92,0x39,0x24,0xbc,0x00,0x47,0x24,0x72,0x39,0x24,0xa2,0x00,0x49,0x24,0x8d,0xb8,0xe4,}, + {0xd0,0x5f,0xa2,0xa1,0x5a,0xe4,0x00,0x49,0x23,0x72,0x39,0x24,0x7e,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xda,0xa6,0xc3,0xa9,0xa2,0x50,0x40,0x36,0xdb,0x6d,0xb2,0x00,0x53,0x20,0x92,0x49,0x24,0x92,0x52,0x55,0x8c,0xb6,0xc4,0x91,0xb6,0xe3,0x62,0x01,0x24,0x92,0x58,0x92,0x92,}, +}; +static const gsm_frame gsm_data_devet[] = { + {0xd3,0x58,0x48,0x19,0x61,0x50,0x40,0x5b,0x76,0xd7,0xbc,0xde,0x69,0xe0,0x34,0xf4,0x44,0x76,0x74,0x9f,0x80,0xd5,0x0b,0x71,0x52,0xe5,0x58,0xa0,0xc8,0xab,0x6e,0x1d,0x51,}, + {0xd1,0xe1,0xd4,0x2d,0xa2,0x75,0xc0,0xc5,0xf1,0x6d,0xc7,0x5e,0x71,0x21,0x55,0x63,0xf3,0x90,0x2c,0x54,0x40,0xd9,0x6f,0x91,0x22,0x5a,0x92,0x21,0xcb,0xad,0x8d,0xa2,0x42,}, + {0xd0,0xec,0xec,0x2d,0x62,0x52,0xe1,0xcd,0xf3,0x55,0x4a,0x12,0xa6,0xc1,0xaf,0x9b,0x4a,0xd4,0xe1,0x94,0xa1,0x2e,0xe4,0x56,0xc8,0xc2,0xe4,0xe1,0x39,0x13,0xf1,0xc6,0x91,}, + {0xd1,0x29,0xdc,0x6d,0xe3,0xec,0xc1,0x47,0x1c,0xd1,0xb6,0x58,0x50,0x80,0xe3,0x25,0x72,0x29,0x09,0xa6,0x80,0xd8,0xdc,0x8d,0xb4,0xa0,0xa4,0xa0,0xc7,0x1e,0xc9,0xb6,0x9b,}, + {0xd6,0x1d,0x59,0xf6,0xb0,0x5f,0xc2,0xb6,0xe5,0xfa,0xc2,0x48,0x57,0xee,0xce,0x33,0xb3,0x39,0x05,0x56,0xf2,0x35,0x2c,0xb2,0x26,0x42,0x97,0xb1,0xfa,0xa1,0x77,0x23,0x40,}, + {0xd5,0x1b,0x8b,0x76,0x60,0x51,0x11,0xf6,0xa4,0x72,0xc9,0x11,0xa1,0x0f,0xf2,0xed,0x92,0xc9,0x08,0xf1,0x11,0x74,0xad,0x92,0x49,0x11,0xf1,0x8f,0xf3,0x2d,0xcd,0x48,0xe3,}, + {0xd5,0x5e,0x82,0xb5,0xe0,0x51,0x31,0x76,0xa3,0x92,0xb6,0xd2,0x51,0xac,0x2f,0x95,0x71,0x4b,0x13,0xa1,0x30,0xd8,0xe4,0x91,0xdf,0xb5,0x5f,0x10,0xb4,0x22,0x5a,0xbb,0x6c,}, + {0xd3,0xe2,0x72,0x2e,0xd8,0x5f,0x2e,0xb6,0x22,0xcd,0x66,0xe3,0xbf,0x6d,0xa4,0xa0,0xf6,0x39,0x1b,0xbc,0xef,0xc7,0x1c,0x49,0x3e,0xd1,0xbf,0x2d,0xc9,0x24,0xae,0x24,0x97,}, + {0xd2,0xa3,0x7a,0xed,0xe1,0x61,0x6b,0x0b,0x65,0x91,0x35,0x45,0x5f,0x08,0x78,0xa2,0xb1,0x46,0x9b,0xbc,0xa8,0x0b,0x05,0x8f,0xad,0x1b,0xbe,0x27,0x94,0x12,0x38,0xed,0x7b,}, + {0xd2,0x9a,0xaa,0x69,0xfb,0xbe,0xa7,0x4a,0x21,0xb0,0x57,0x23,0xe6,0xc8,0x55,0x99,0xa0,0x94,0xe5,0xa6,0xc4,0xcb,0x26,0x86,0x50,0xda,0xac,0xe3,0xf9,0x2e,0x69,0xf8,0x8f,}, + {0xd4,0x97,0x91,0xe1,0xf4,0xde,0x85,0x24,0x9b,0xfa,0xec,0x17,0x60,0xa8,0x0a,0xd3,0x8a,0x67,0x6c,0xbd,0x44,0x3a,0xc5,0x4f,0x85,0x5e,0xe7,0x66,0x4c,0x18,0x50,0x58,0xbe,}, + {0xd4,0x97,0x81,0x62,0x3b,0x67,0x46,0xb8,0xea,0x3a,0x09,0xc3,0x54,0xa6,0xf1,0xa6,0xa1,0xc4,0x9c,0x8e,0x66,0x2d,0x66,0xd2,0x18,0x13,0xb0,0xa6,0x08,0xa5,0x7e,0xbb,0xa6,}, + {0xd4,0x94,0x64,0xfe,0x20,0x59,0xe9,0x24,0x02,0xd2,0x4a,0xed,0x65,0x4a,0x36,0x9d,0x47,0xbd,0x22,0x5b,0x28,0x17,0xbf,0x64,0xa9,0x8e,0xbd,0x4a,0x26,0xe5,0xb6,0x10,0x7b,}, + {0xd4,0xd5,0x6c,0xfd,0x60,0x5e,0xc7,0x4c,0x5f,0xd2,0xbd,0xca,0x65,0x88,0x22,0x57,0x9e,0xa5,0x26,0x5f,0x28,0xb4,0x0e,0x5a,0xc7,0x24,0xbf,0xac,0x58,0x9a,0x5d,0xd8,0x9c,}, + {0xd4,0x57,0x84,0xfd,0xe0,0x5f,0xa8,0xb9,0x1d,0x6d,0x8a,0x93,0x61,0x8c,0x29,0x24,0x91,0xa4,0xba,0x5f,0xc8,0x0b,0x4c,0xda,0x21,0x56,0xbf,0xb0,0x77,0x13,0x92,0x47,0x14,}, + {0xd4,0xd9,0x93,0x3d,0x58,0x65,0xad,0xd4,0xbb,0x12,0xd9,0x25,0x5f,0x0c,0xe6,0x90,0x1b,0x1d,0x1d,0xbd,0xce,0x59,0xa1,0x68,0x6a,0x34,0x5f,0xed,0x38,0xdc,0x6e,0x47,0x88,}, + {0xd4,0xdc,0x82,0xf6,0x18,0x61,0x30,0xf8,0xe3,0x96,0x34,0x93,0x5f,0x13,0xf6,0xec,0x6e,0x48,0xdc,0x5e,0xa9,0x83,0xff,0x4a,0xeb,0x2b,0xbe,0xcd,0x36,0x97,0x76,0x29,0x6b,}, + {0xd3,0xda,0xaa,0x72,0xa8,0xbf,0x6b,0x36,0xdb,0x3d,0x19,0x1c,0xbc,0x8a,0xd9,0x2b,0x69,0x25,0xda,0xbe,0xe6,0x3f,0xb6,0x48,0x26,0x5a,0xdc,0x04,0xc1,0xe2,0x91,0xeb,0x45,}, + {0xd2,0x9a,0x62,0x6f,0x22,0xb0,0x02,0x88,0xaa,0x56,0x69,0xad,0xbc,0x21,0xc5,0xed,0x92,0x4b,0x64,0xf0,0x40,0xe8,0xf2,0xd9,0xab,0xdd,0xe2,0x20,0xba,0xe3,0x72,0xbc,0xd4,}, + {0xd7,0x1e,0x9a,0x9d,0x19,0x76,0x80,0xd4,0xdc,0x89,0xa6,0xdc,0x56,0x80,0xa2,0x9a,0x45,0x24,0x53,0x54,0xc0,0xc2,0x48,0x29,0xa8,0x9a,0xa0,0xe9,0x36,0xdb,0x6d,0xb7,0x27,}, + {0xd8,0xa4,0xc2,0x99,0xa0,0xd9,0x8d,0x2e,0x1d,0x72,0xdf,0x53,0x6e,0x89,0x29,0x2d,0xea,0x04,0xde,0x9c,0x48,0xc6,0xdc,0x6d,0xc0,0x84,0xea,0x4a,0x24,0x9a,0x4e,0x41,0x1a,}, + {0xd9,0x66,0xca,0xd0,0x92,0xa8,0xa7,0x3a,0x13,0x09,0x22,0xd8,0x7c,0x86,0xf8,0x93,0x2b,0x29,0x04,0xec,0xc5,0xe4,0xee,0x6a,0xeb,0x97,0xac,0xc9,0x29,0x97,0x8f,0x57,0x26,}, + {0xd6,0x96,0x61,0x0c,0x50,0x5c,0xa4,0xe9,0x6d,0x52,0x44,0x2e,0x88,0x22,0x4e,0x84,0x6f,0xc9,0x14,0xb6,0x41,0x46,0x92,0x92,0xec,0x51,0xb4,0x21,0x16,0xd2,0x21,0x22,0x94,}, + {0xd4,0x98,0x68,0x09,0x9a,0x54,0x21,0x04,0xa3,0x71,0xb6,0xa4,0x9e,0x00,0x4a,0xe4,0xb6,0x49,0x23,0xc4,0x00,0x49,0x24,0x72,0x49,0x24,0xf0,0x20,0x59,0x1c,0x92,0x49,0x1c,}, + {0xd0,0x5f,0xa2,0xe1,0x5a,0xaa,0x40,0x36,0xdb,0x6d,0xb9,0x24,0xee,0x00,0x49,0x24,0x92,0x49,0x24,0xde,0x40,0x49,0x1c,0x92,0x37,0x24,0xbe,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5f,0x9b,0x21,0x5a,0x6c,0x00,0x49,0x24,0x92,0x49,0x24,0x68,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5f,0xa2,0xdd,0x9a,0x52,0x00,0x49,0x24,0x92,0x49,0x24,0x7c,0x00,0x49,0x24,0x92,0x49,0x24,0x78,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,}, +}; +static const gsm_frame gsm_data_deset[] = { + {0xd3,0x1a,0x38,0x59,0xd9,0x50,0x20,0xc9,0x6d,0xba,0x57,0x6b,0x70,0xe0,0xd8,0xde,0xa6,0x53,0x6a,0x90,0xa0,0xe7,0x54,0x52,0x4b,0x5a,0x84,0xe0,0xbd,0x1a,0xad,0xc8,0x9a,}, + {0xd2,0x1e,0xac,0xaa,0x1a,0x8d,0xa0,0xe8,0xd4,0x1a,0xcb,0x23,0x7d,0xa2,0x39,0x1d,0x92,0xa7,0x2f,0x50,0xa1,0xb6,0x45,0x95,0xdb,0x23,0x56,0x41,0x34,0x8a,0x6a,0xef,0xfd,}, + {0xd0,0xae,0xe3,0xe5,0x6b,0x58,0xc1,0x38,0x52,0x25,0xb9,0xae,0x9c,0x81,0xa3,0x9a,0xcc,0x34,0xb5,0x50,0xc1,0x31,0x54,0xc9,0x27,0x75,0x50,0xa1,0x36,0xa5,0x71,0xa0,0xed,}, + {0xd0,0xaa,0xec,0x69,0x63,0x53,0x40,0xc2,0xec,0x6e,0x3a,0x8d,0x7e,0xc0,0xf8,0xe4,0x49,0x2a,0x8a,0x54,0x80,0xc7,0xa4,0x4d,0x45,0x23,0xb0,0xe0,0x6c,0xde,0x61,0x95,0x1e,}, + {0xd8,0xa4,0x60,0x55,0xb3,0xc3,0xe4,0xa4,0xe5,0xdf,0xf8,0x89,0x50,0xa7,0x04,0x93,0x92,0x5b,0x1a,0x95,0xd2,0x36,0xdb,0xc6,0xb9,0x67,0x64,0x90,0x21,0x81,0x8a,0x6b,0xa5,}, + {0xd5,0x5d,0x6b,0x3a,0xa0,0xa3,0x13,0x36,0x90,0x13,0xba,0xd4,0x56,0xf2,0x56,0xd9,0x5d,0x3a,0xe3,0x57,0x0f,0xec,0xe4,0x45,0x74,0xe4,0x57,0xd1,0xc6,0xdc,0x8d,0x72,0xe4,}, + {0xd5,0x1c,0x8b,0xb2,0x18,0x57,0x6e,0xd9,0x2c,0x69,0x2f,0x9b,0xad,0x2d,0xc7,0x67,0x6d,0x03,0x66,0xad,0x4f,0xb8,0xe5,0x8d,0xb0,0xb9,0xbc,0x8d,0x71,0xac,0xba,0x46,0x52,}, + {0xd3,0xdb,0xaa,0x6e,0x18,0x62,0xa8,0xd8,0xec,0x93,0xba,0xe9,0xc2,0x2b,0x30,0x5f,0x92,0xc9,0x65,0xc1,0x06,0xa2,0x99,0x0f,0x65,0x95,0x63,0x45,0xe7,0x48,0x60,0x5b,0x25,}, + {0xd3,0x19,0x8a,0x6b,0x78,0xc2,0xe6,0xdf,0x3a,0x68,0xc0,0xf5,0xd6,0x46,0x91,0x2e,0xb5,0x30,0xc8,0xe0,0x44,0xf7,0x7b,0x1f,0x1e,0xd4,0x6d,0x45,0xa1,0x5f,0x69,0x4f,0x0a,}, + {0xd8,0xa5,0xa8,0xd8,0x9a,0xbd,0x28,0xc8,0x8a,0x02,0xc3,0xac,0x5f,0x2a,0xd6,0x85,0x6b,0x15,0xd5,0x79,0x68,0x81,0x30,0x48,0xf7,0xb0,0xa3,0x4b,0x62,0xbb,0xe5,0x65,0x91,}, + {0xd9,0x2a,0xf3,0xe8,0xf3,0x62,0xeb,0xa7,0x9c,0x5c,0xb5,0x30,0x91,0x50,0x75,0x25,0x16,0xc2,0xe4,0x58,0xaa,0x14,0x1b,0xc3,0xa5,0x8d,0xa0,0xac,0x08,0x63,0xed,0xb5,0xf3,}, + {0xd9,0xe6,0xe3,0xe9,0xe3,0x7a,0xab,0xbb,0x33,0x72,0xce,0xcb,0x83,0x4d,0xe8,0xd7,0xe5,0x6e,0x63,0xeb,0x4d,0x6a,0xb6,0x1e,0x49,0xe7,0xa6,0xae,0x2a,0xf5,0xb6,0x3b,0xeb,}, + {0xd9,0xe5,0xc3,0xe5,0x63,0xdc,0xcc,0xea,0x9f,0x7f,0x4e,0xeb,0x6c,0xac,0xe1,0xdb,0xb7,0x4b,0xab,0xbc,0xed,0xb9,0x2c,0xae,0x4b,0x39,0xc6,0xcd,0xaf,0xc6,0xad,0xea,0xd7,}, + {0xd9,0xa7,0xe3,0xb1,0xe2,0x82,0xce,0x55,0x5f,0x56,0xe8,0xf5,0xae,0xd0,0x2b,0xf3,0x7e,0xc7,0x95,0x6e,0xca,0xe3,0x27,0x1e,0x87,0x64,0xd8,0xab,0x8e,0xcb,0x4d,0x35,0x09,}, + {0xda,0xa4,0xe2,0xe5,0xd3,0xca,0xc9,0x74,0xdb,0x34,0x09,0x4d,0xce,0xe9,0x99,0x43,0x41,0x24,0x0a,0xac,0xad,0x40,0xa2,0x6a,0x46,0xe3,0x72,0x2b,0x18,0xc4,0x45,0xcb,0xb7,}, + {0xd5,0x22,0x71,0xea,0xd8,0x5b,0xcf,0x49,0x14,0x20,0x05,0x2c,0x5a,0xcf,0xc9,0x24,0x6e,0x34,0x7d,0xc0,0xac,0xac,0xdd,0xaa,0xf6,0x61,0x63,0x2f,0x3e,0x9c,0x91,0xc9,0x1b,}, + {0xd5,0x5f,0x82,0xaa,0x58,0x61,0xcd,0x36,0x7a,0x75,0xab,0x1c,0x61,0x8c,0x54,0x93,0x23,0xc4,0xf3,0xc1,0x6c,0x4d,0x60,0x2c,0x9f,0x5f,0xc1,0x6b,0xbb,0x75,0x74,0x96,0xcf,}, + {0xd4,0x9e,0x6a,0xfd,0x99,0x5e,0xe9,0x4a,0xd6,0xb7,0xc4,0x92,0xc1,0x4b,0x2e,0x53,0x6e,0x37,0x23,0xc1,0x2b,0x4b,0x0f,0x2a,0x49,0x23,0xc3,0x07,0x56,0xcb,0x13,0x99,0xc4,}, + {0xd3,0x9b,0x9b,0x69,0x58,0xa4,0x24,0x7c,0x96,0x6b,0x08,0x5a,0xbe,0x02,0x5d,0x3d,0xf3,0x6b,0x28,0xc6,0x02,0x09,0x55,0xb2,0x59,0x5b,0xe0,0x60,0xd7,0x5d,0xf7,0xdb,0x1b,}, + {0xd6,0x15,0x69,0x6d,0x21,0xde,0x40,0xa4,0xe4,0xd2,0x4c,0xeb,0xee,0xa1,0x26,0x98,0xb9,0x52,0x9a,0x60,0x20,0xb9,0x24,0x48,0xc6,0xea,0xc6,0xa0,0xa4,0xc9,0xad,0xc6,0xa1,}, + {0xd8,0x25,0xab,0x64,0x61,0x89,0xed,0xb7,0x1b,0x6d,0xba,0xf9,0x8b,0xac,0x9a,0xdd,0xbe,0xb6,0xdc,0x72,0xc7,0xf9,0xe8,0x41,0x2c,0x89,0xa2,0xa8,0x64,0xe4,0x05,0x12,0x98,}, + {0xd9,0x25,0xa9,0xa0,0xda,0x81,0x4c,0xc4,0xdb,0x79,0x85,0x0a,0x60,0xea,0x37,0x1b,0x6d,0x4c,0x32,0x80,0xe5,0x8b,0xc9,0xab,0x26,0x84,0xbe,0xa8,0x68,0x73,0x72,0x4d,0x0f,}, + {0xd7,0x9d,0x68,0xc8,0x59,0xb2,0xa8,0x3b,0x65,0x6f,0xb5,0x24,0xe4,0xe8,0x6a,0xe7,0x52,0x49,0x6c,0xc4,0x22,0x47,0x53,0xab,0xe8,0xdd,0x82,0x01,0x5b,0x64,0x96,0x5f,0x9b,}, + {0xd3,0x91,0x6a,0xe1,0x5c,0xe0,0x00,0xa3,0x2d,0x52,0x41,0x2b,0xd2,0x40,0xd4,0x64,0x4d,0x26,0xd4,0x72,0x00,0x52,0xe3,0x6e,0x36,0xdb,0xa6,0x40,0x37,0x23,0x6d,0xb6,0xdb,}, + {0xd0,0x60,0xa2,0xe1,0x59,0xec,0x00,0x38,0xdb,0x8d,0xc6,0xdb,0xea,0x00,0x49,0x24,0x92,0x49,0x24,0xdc,0x00,0x49,0x24,0x92,0x49,0x24,0x58,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5f,0xaa,0xe1,0x5a,0x82,0x00,0x49,0x24,0x92,0x49,0x24,0x78,0x00,0x49,0x24,0x92,0x49,0x24,0x64,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xda,0x22,0x92,0x18,0x90,0x50,0x20,0x36,0xda,0x49,0x22,0x09,0x52,0xc0,0x00,0x4a,0x49,0x24,0x93,0x62,0xe0,0x24,0x92,0x49,0x24,0xdb,0xd5,0x84,0x36,0xdb,0x92,0x4e,0x1d,}, +}; +static const gsm_frame gsm_data_jedenact[] = { + {0xd5,0x14,0x59,0xd4,0x22,0x50,0x00,0x26,0x91,0x52,0x33,0x5b,0x55,0x20,0xe2,0xa2,0xad,0xb9,0x52,0x56,0xa0,0x76,0xfa,0x74,0xda,0xb2,0xbf,0x40,0xc8,0x64,0x92,0x57,0x23,}, + {0xd3,0x4e,0xc5,0xb1,0x9c,0xf0,0xe0,0x59,0x5b,0x86,0xa6,0x70,0x90,0xa0,0x66,0x32,0x89,0x9c,0x23,0x77,0x60,0xd3,0x5c,0x92,0xc7,0x1b,0x65,0xc1,0xa4,0xa3,0xf7,0xe9,0x1a,}, + {0xd6,0xcf,0x64,0xfe,0x5b,0x55,0xa8,0xb4,0x90,0xef,0x59,0x36,0x57,0x89,0xd9,0x5c,0x0c,0xcd,0x01,0x51,0x48,0x7f,0x80,0x0b,0x57,0x24,0x55,0xc7,0x76,0xd3,0x1d,0x37,0x66,}, + {0xd6,0xd6,0x4b,0xbe,0x21,0x5b,0xca,0x58,0xd4,0x68,0x73,0xf3,0x55,0xe8,0xda,0xea,0x45,0x9a,0xbd,0x55,0xe9,0xa7,0x1d,0x70,0x9f,0x23,0x55,0xee,0x38,0xe3,0x71,0xd1,0xdd,}, + {0xd6,0x9a,0x54,0x32,0xa9,0x55,0xed,0x3a,0xe4,0x91,0xb4,0x20,0x5b,0xf5,0x47,0x24,0x6e,0x36,0xd7,0x54,0xd0,0xd5,0xa4,0xb6,0xd4,0x88,0x55,0x4e,0xf8,0x2c,0xb2,0xd6,0x58,}, + {0xd6,0x5c,0x72,0xf2,0x20,0xab,0x73,0xf6,0x6b,0x72,0x46,0x9a,0x55,0x4e,0x0d,0x6e,0x6b,0x58,0xf2,0xae,0xd0,0x20,0xac,0x8d,0xcb,0xdb,0xb3,0x2d,0xb8,0x4a,0x90,0xc8,0xf7,}, + {0xd4,0xde,0x63,0x7d,0x98,0x59,0x4c,0x48,0x93,0x3d,0x48,0xe3,0xb3,0x4a,0xb4,0xe3,0x9b,0x8b,0x1b,0x5b,0x0b,0xdb,0x1d,0x2d,0x2e,0x66,0xb2,0xc9,0x27,0xfc,0x41,0x26,0xc4,}, + {0xd1,0x60,0xe4,0x35,0x1b,0xc4,0x49,0xf7,0x6d,0x8d,0x26,0xdd,0xee,0x63,0x25,0x2e,0x96,0x86,0x8a,0xb8,0x21,0xfd,0x92,0xd2,0x32,0x52,0xec,0x01,0x84,0xdc,0x92,0x5a,0xd9,}, + {0xd1,0x23,0xd4,0x69,0xe2,0xae,0xc0,0xa8,0x0b,0xd9,0x74,0xdb,0xc2,0x80,0xa7,0x24,0x9a,0xb5,0x65,0xee,0xa0,0xc2,0x8a,0x76,0x26,0xe5,0x95,0x20,0xcb,0x12,0x4e,0x16,0xe4,}, + {0xd5,0xd7,0x7a,0xa1,0x61,0xd7,0xa2,0xc6,0xdc,0x69,0xbe,0x93,0x51,0xee,0xc6,0xf0,0xb1,0xa7,0x23,0x74,0x4a,0x45,0x1c,0x68,0x92,0x15,0x5b,0xed,0xeb,0x64,0x8a,0x40,0x88,}, + {0xd5,0x5c,0x7c,0x31,0xa0,0x51,0x52,0x7c,0xdb,0x77,0x59,0x1c,0x5a,0x8d,0x01,0x92,0xd5,0xcb,0xeb,0xb2,0xb0,0x40,0x2b,0x56,0x39,0x74,0x5b,0x2e,0xc4,0xd2,0xed,0xc7,0x25,}, + {0xd5,0x5f,0x7b,0xa5,0xa0,0x59,0xeb,0x58,0x9b,0x17,0x38,0xde,0xb3,0x4c,0xd9,0x1a,0x01,0xec,0xdb,0xb3,0xcc,0x49,0x13,0x6e,0xd4,0xba,0x5f,0xb3,0xa9,0x5a,0x96,0x38,0x9f,}, + {0xd5,0xe5,0x72,0xa6,0x50,0x60,0xb0,0x17,0x64,0x99,0xea,0x81,0x61,0x8f,0x20,0xf3,0x96,0x25,0xe0,0x5d,0x0f,0x26,0x47,0x73,0x27,0xaa,0xbd,0x8f,0xd7,0x2b,0x42,0xbb,0x1c,}, + {0xd4,0xe0,0x72,0xa6,0x98,0x5f,0xed,0x58,0x6c,0x77,0x83,0x59,0x5f,0xec,0xc6,0x9a,0x6f,0x5b,0xa8,0xb6,0x10,0xcc,0xdd,0xb2,0xc6,0x41,0x68,0x6d,0x4f,0x6e,0xbb,0x4a,0x81,}, + {0xd1,0xe6,0xac,0x26,0x8a,0x64,0xaf,0x06,0xde,0x72,0xc9,0x1c,0xbc,0xc9,0xb8,0xbc,0x55,0x28,0xdc,0xbc,0xea,0xc4,0xd3,0xf5,0xd4,0xaa,0x5f,0x26,0x6a,0xa4,0x68,0x66,0xb2,}, + {0xd3,0xa1,0x82,0x26,0xd0,0xbf,0xcb,0xd7,0x63,0xb1,0xa0,0x53,0x5f,0x2b,0xff,0x63,0x96,0x36,0x88,0x5f,0x2c,0x66,0xfb,0x5e,0x99,0x24,0x65,0xb2,0xc6,0xfa,0x51,0xc6,0xec,}, + {0xd5,0xa4,0xa2,0xe6,0x58,0x61,0xd0,0x36,0xd3,0xe2,0x75,0x24,0x5f,0x52,0xcd,0x1b,0x64,0x64,0xeb,0x61,0xcf,0xd7,0x16,0x56,0xd2,0x3c,0xc1,0x32,0xbb,0x5b,0xd5,0xd8,0x82,}, + {0xd5,0x2b,0xa3,0x2a,0x18,0xbd,0x94,0x76,0xe4,0x8e,0x57,0x2b,0x5f,0x4f,0x11,0x30,0xb9,0x3d,0xd7,0xc1,0x14,0xb4,0xd2,0xee,0xab,0x1c,0x61,0x10,0xe9,0x1b,0x60,0x76,0xad,}, + {0xd4,0x6e,0xab,0xa5,0xe0,0x5f,0x4e,0xcd,0x74,0x74,0x83,0x8e,0xbd,0x4f,0x47,0xa2,0xe9,0x70,0x9c,0xba,0x8d,0x8a,0xdf,0x97,0xdc,0xd9,0x61,0xae,0x3c,0x1d,0x8e,0x39,0x1a,}, + {0xd4,0xad,0xab,0x6a,0x18,0x5f,0x0e,0xc4,0x07,0x31,0xc7,0x1d,0xbd,0xef,0x47,0x92,0x3d,0x48,0xdc,0xbf,0xaa,0xc4,0xc5,0xa1,0xe8,0xfc,0xbf,0x8e,0xd7,0x2b,0x8a,0x27,0x70,}, + {0xd4,0xed,0xba,0x6d,0x60,0xbd,0x30,0xc9,0x24,0x96,0x47,0x10,0x5f,0x90,0x8e,0x95,0x4d,0xc8,0xe3,0xbd,0x90,0x38,0xba,0x71,0xb7,0x1c,0x5f,0x4f,0x44,0x87,0x35,0x58,0xac,}, + {0xd4,0xaf,0x9b,0x29,0x68,0xbf,0x2e,0xb8,0xda,0x63,0x19,0x23,0x5d,0xb0,0x25,0x5d,0x76,0x41,0x9b,0x63,0x51,0x39,0x2d,0x71,0xc4,0x5f,0xbf,0xcb,0x2d,0x0f,0x76,0x35,0x4c,}, + {0xd4,0xed,0xba,0xed,0x68,0xbf,0x8c,0x9e,0x23,0x95,0xd9,0x2a,0x5f,0xb1,0xc6,0xc7,0x52,0x48,0xe4,0xbd,0x8d,0xf6,0xe1,0x3c,0x76,0xab,0x5f,0x6f,0xac,0xeb,0xac,0x6c,0xa5,}, + {0xd4,0xea,0xc9,0xe5,0xe8,0xba,0x91,0x38,0xde,0x91,0xb4,0x3b,0xbd,0x6d,0x43,0x5b,0x72,0x39,0x08,0xbd,0x0f,0xf6,0xe3,0x92,0x39,0x63,0x5f,0x2d,0x21,0x6b,0xae,0x49,0x64,}, + {0xd4,0x62,0xe0,0xea,0x18,0xbd,0x29,0xa6,0x0c,0xaf,0x53,0x5e,0xbc,0xc8,0xc8,0x60,0x13,0x4b,0x0b,0xb6,0x05,0xfb,0x25,0x8e,0x94,0xd2,0xc0,0x21,0xab,0x34,0xbf,0xe7,0xb1,}, + {0xd6,0x58,0x99,0x8c,0xa9,0xce,0x22,0xf5,0x24,0xb1,0xc8,0xd4,0xae,0x60,0xd5,0xdf,0xad,0x38,0xc9,0xd0,0x01,0x2b,0x6b,0x85,0xdb,0x23,0x58,0xc0,0xa7,0xb3,0x99,0x23,0x6e,}, + {0xd9,0xdc,0x61,0x1c,0x19,0xd4,0xa0,0xc4,0xa6,0xd1,0x32,0x0c,0xb0,0x81,0x48,0x5a,0x70,0x36,0x94,0x6a,0xe1,0x58,0xd5,0xad,0x16,0x73,0x65,0xe2,0xb6,0x94,0x4e,0x28,0xef,}, + {0xdc,0x2f,0xc4,0x21,0x99,0x81,0x85,0x98,0xe2,0x66,0x31,0x12,0x6f,0xe8,0x34,0xc9,0x82,0xa0,0xa1,0x55,0x6a,0x28,0x51,0xec,0xd7,0x51,0x59,0x0c,0xe4,0xea,0x79,0xd8,0x3a,}, + {0xda,0xe4,0xa2,0xd4,0x11,0x91,0x2a,0x4e,0xce,0xaf,0x05,0xe8,0xa4,0xab,0x5d,0x03,0xec,0xaa,0xa9,0xf0,0xae,0xc3,0x4d,0x49,0x2a,0xe0,0x5c,0x29,0x70,0x4d,0x06,0xf9,0x1c,}, + {0xd2,0xd4,0x8a,0x59,0x91,0xc2,0x63,0x4d,0x66,0x9d,0xd5,0x6d,0xe8,0x02,0x65,0x9d,0xd6,0xb8,0xba,0xc8,0x40,0xb5,0x23,0x66,0x35,0x92,0xec,0x20,0x96,0xe4,0x8d,0xb9,0x1c,}, + {0xda,0x24,0xc3,0x4c,0x14,0xaf,0xf2,0xc6,0xdc,0x92,0x49,0x27,0x55,0x30,0x95,0xaf,0x77,0xb4,0xde,0x60,0x2d,0xc9,0xd0,0xe9,0x42,0xd2,0xa4,0x70,0x38,0x94,0x4e,0x24,0x03,}, + {0xd8,0x1e,0xaa,0x85,0x39,0xd6,0x48,0xbf,0x14,0x21,0xc6,0xd1,0x9c,0x6a,0xd0,0x51,0xce,0x44,0xa4,0xc4,0x03,0x60,0x8e,0xe9,0x34,0xe4,0x94,0x21,0x7b,0x73,0x71,0xda,0xe7,}, + {0xd7,0x60,0xdb,0xcc,0x48,0xe0,0x62,0xf3,0x5c,0xaf,0xc9,0x2c,0xda,0x61,0x52,0xb6,0xec,0xb3,0x26,0xb4,0x61,0x59,0xa5,0x86,0x27,0xac,0xc8,0xa0,0xbd,0x8e,0x8e,0xdd,0x1b,}, + {0xd0,0x60,0xa3,0x21,0x5a,0xb0,0x40,0x39,0x6c,0x76,0xc9,0x24,0xa8,0x40,0x38,0xdc,0x6e,0x36,0xdb,0xe6,0x40,0x38,0xdc,0x6d,0xb6,0xdc,0xce,0x20,0x46,0xdb,0x92,0x48,0xe3,}, + {0xd0,0x5f,0xa2,0xe1,0x22,0xa2,0x00,0x49,0x24,0x92,0x49,0x24,0xd0,0x20,0x49,0x24,0x8e,0x49,0x24,0x70,0x00,0x49,0x24,0x92,0x49,0x24,0x96,0x00,0x47,0x24,0x92,0x49,0x24,}, + {0xd0,0x5f,0xa2,0xa5,0x22,0x66,0x00,0x49,0x24,0x92,0x49,0x1c,0xe2,0x00,0x49,0x24,0x92,0x49,0x24,0x98,0x00,0x49,0x24,0x92,0x48,0xe4,0x6c,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xda,0xa6,0xcb,0xe9,0xa2,0xa1,0xcf,0x49,0x24,0x92,0x41,0x24,0x68,0x82,0x5f,0xfe,0xb6,0xdb,0x6d,0xba,0xa2,0x7f,0xfe,0xb6,0xdb,0x6d,0xb0,0xe1,0xdb,0xf6,0xdb,0x6d,0xb6,}, +}; +static const gsm_frame gsm_data_dvanact[] = { + {0xd2,0x23,0xbb,0xa9,0xa2,0x50,0x40,0x49,0x2d,0xb2,0xba,0xdc,0x5b,0x00,0x66,0xf4,0x30,0xa0,0x4c,0x5f,0xe0,0xd9,0x2c,0x4d,0x94,0x48,0x55,0xc1,0xb9,0x76,0xda,0x36,0x41,}, + {0xd0,0xea,0xcc,0x6d,0xe2,0x54,0xa2,0x27,0xbe,0x5b,0x29,0x44,0x5a,0x62,0x1d,0xda,0x91,0xe4,0x9a,0x8a,0xe2,0xc6,0xbb,0x32,0xc8,0xd3,0xde,0x01,0x16,0x9d,0xd6,0xb9,0x22,}, + {0xd1,0x64,0xcc,0xf1,0xe2,0x96,0xc1,0x34,0xa3,0xfe,0x48,0xa5,0xea,0x01,0x26,0xa2,0x73,0x68,0xd3,0xb0,0xc0,0xd6,0xaa,0x73,0xca,0x8a,0xe2,0x41,0x48,0xd3,0x4e,0xe8,0xd3,}, + {0xd5,0xa7,0x60,0x66,0xe2,0x64,0xc0,0xa4,0x92,0xba,0xef,0xac,0xb3,0xee,0xc6,0xdc,0x98,0x66,0xa5,0x6e,0x04,0x95,0x2a,0x6d,0xe1,0xdd,0xa4,0xae,0x47,0x08,0x52,0xe7,0x6d,}, + {0xd5,0xa5,0x7a,0x2a,0xe0,0xdd,0xd4,0xb4,0x8a,0xf1,0x47,0x25,0x53,0x11,0x5b,0x20,0x59,0x59,0x23,0xa5,0x11,0xdf,0x1a,0x19,0xc9,0x64,0xa5,0x50,0x5a,0xda,0x1e,0x39,0x1c,}, + {0xd4,0x6a,0x5a,0x6e,0x61,0x52,0xb0,0x69,0x12,0x2f,0x8b,0x5c,0xa4,0xcb,0xe4,0xd8,0x39,0x0d,0x1b,0xa4,0x8a,0x78,0xa5,0x25,0x8b,0x55,0xa2,0x0b,0x5d,0x24,0x40,0x47,0x24,}, + {0xd1,0xa9,0xbb,0x26,0x2b,0xa2,0xc5,0xf9,0xed,0x44,0x10,0xa3,0xa2,0x25,0x69,0x23,0x29,0xf5,0x1a,0xee,0x44,0xe9,0x64,0x48,0x74,0xdb,0xee,0x25,0x4b,0x2b,0x89,0x2e,0x9c,}, + {0xd2,0x27,0xb2,0x66,0xa2,0xa3,0x22,0xb5,0xe2,0xa2,0x38,0xed,0x57,0x43,0xce,0xe4,0x4d,0x0e,0xd5,0x53,0xe2,0xc5,0xd4,0x68,0xde,0x9a,0x55,0xc7,0x47,0x93,0x6d,0xb5,0xc3,}, + {0xd3,0xab,0xba,0xdd,0xe0,0x53,0xca,0x48,0xf4,0xb2,0x10,0x9c,0x53,0xca,0xc9,0x1f,0x91,0x80,0x73,0x53,0xcf,0xc9,0x1d,0x71,0xd4,0xfb,0x53,0xec,0xb7,0x13,0x8d,0x52,0xfa,}, + {0xd3,0xae,0xc2,0xe1,0x98,0x53,0xcc,0x59,0x8c,0x92,0x23,0x30,0x53,0xeb,0xe2,0xec,0x39,0xb9,0x0f,0x53,0x2c,0x0c,0xf3,0xb6,0xc6,0xc1,0x55,0x30,0x88,0xe3,0x72,0x38,0xcb,}, + {0xd4,0xec,0xba,0x6e,0x18,0xa7,0xf1,0x19,0x22,0xb1,0xc6,0x50,0x51,0x8e,0xfa,0x27,0xa7,0x77,0x7a,0x53,0x6e,0xa8,0xe4,0xe7,0x5f,0x28,0xb1,0xd0,0x34,0xfd,0x47,0xf1,0x36,}, + {0xd4,0xe8,0xa9,0x69,0x98,0x5f,0x32,0x36,0x92,0xed,0xc8,0xdc,0x61,0x53,0xb4,0xd3,0x6f,0x97,0x6b,0xbf,0xce,0x8a,0x83,0x56,0x6e,0x12,0xbd,0x12,0x69,0x24,0xb2,0x36,0x90,}, + {0xd2,0xa3,0x73,0xda,0x59,0x64,0x91,0x05,0x74,0x76,0xb6,0x93,0xbe,0xcf,0x3e,0x9e,0x6a,0x45,0x1a,0xba,0x6d,0x20,0x6c,0xda,0xdb,0x24,0xb6,0x8d,0x56,0x88,0x2f,0x5d,0x35,}, + {0xd1,0x67,0xb2,0xb2,0xf1,0xb6,0xeb,0x59,0x12,0x43,0x97,0x42,0xbc,0x8c,0x5b,0x2c,0x6d,0xb5,0xda,0xcc,0xac,0x41,0x65,0x92,0x42,0xd0,0xc3,0x29,0xfa,0xa3,0x52,0xd9,0x5c,}, + {0xd3,0xa4,0x90,0xf2,0x11,0xc5,0x29,0x93,0x96,0xb7,0xdd,0xbd,0xd3,0xb1,0x34,0x41,0xd2,0xcb,0x65,0x61,0x54,0x48,0xd2,0x73,0x97,0x9b,0x61,0x73,0x4b,0x13,0x6d,0x3e,0x64,}, + {0xd5,0x27,0x98,0xf6,0x10,0xbf,0xce,0xa0,0xe7,0x46,0xd6,0x86,0x5f,0x4e,0x9d,0xec,0x9b,0x48,0xc8,0x5f,0xac,0x8a,0xd5,0x89,0xba,0xe5,0x5f,0xec,0xc8,0xaa,0xa9,0xc8,0xd7,}, + {0xd4,0xea,0xaa,0xad,0x98,0x61,0xef,0x44,0xd2,0x83,0x99,0x9a,0x61,0xaf,0xcc,0xa9,0x99,0x5e,0xa9,0x63,0x72,0x57,0x63,0x8d,0xb2,0xba,0xc1,0x0f,0x97,0x24,0xb1,0xe4,0xf0,}, + {0xd4,0xac,0xc2,0xea,0x20,0xc1,0xee,0xd4,0xeb,0x19,0xba,0xc7,0xbd,0x70,0x91,0x45,0x8a,0xc9,0x6d,0xbd,0x70,0xc8,0x80,0x8d,0xc9,0x62,0x5f,0xec,0xc6,0xd3,0x8c,0xaa,0xd7,}, + {0xd4,0xac,0xc2,0xe9,0xa0,0x5f,0x71,0x49,0x64,0x71,0x15,0xd5,0xbc,0xf0,0xd9,0x2e,0x95,0x44,0x00,0xbf,0xaa,0x8c,0xeb,0x1a,0x18,0x30,0x5f,0xcc,0x93,0xcc,0x6d,0xa7,0x46,}, + {0xd4,0xb0,0x93,0x69,0x99,0xbf,0x50,0x34,0x57,0x52,0x55,0x24,0xbd,0x2f,0x38,0xde,0x27,0x99,0x1c,0x5f,0xaa,0xab,0x16,0x86,0xae,0x62,0x5f,0x2e,0x39,0x34,0xad,0xa2,0x79,}, + {0xd4,0xec,0xba,0xed,0x28,0xbd,0x30,0x49,0x23,0xb5,0xd5,0x10,0xbd,0x10,0x2e,0xa4,0xb1,0xcd,0x2b,0x61,0x8e,0xd6,0xc6,0x36,0xa8,0xe4,0x5f,0x31,0x46,0xd0,0xe2,0xb9,0x1d,}, + {0xd4,0xf0,0x9b,0x2d,0xa8,0xbd,0x10,0x4b,0x1b,0x64,0x74,0xe4,0x5f,0xed,0x47,0x64,0x96,0x28,0x38,0x5f,0x8c,0xf7,0xa4,0x8e,0x36,0x65,0x5f,0x0f,0x0b,0x1c,0xa9,0xbd,0x2c,}, + {0xd5,0x2a,0xd2,0x22,0x28,0x5f,0xd0,0xc3,0xda,0x8d,0xc5,0x54,0x5d,0xb0,0x3b,0x87,0x52,0x27,0x22,0xbd,0x50,0x48,0xe4,0x19,0xc8,0xe4,0x5f,0x2c,0xcb,0xac,0x48,0x0b,0x5d,}, + {0xd3,0xa1,0xb1,0xde,0x68,0xbc,0x88,0x2f,0x7e,0x98,0x30,0xb5,0xba,0x08,0x9e,0xa4,0xd2,0x34,0xd3,0xc4,0x45,0x72,0xf3,0x92,0x4a,0xe2,0xae,0x25,0x08,0xdb,0x6e,0x49,0x2c,}, + {0xd5,0x1a,0xb9,0xe1,0xb2,0xd2,0x41,0x64,0x22,0xee,0xcb,0x64,0xb8,0xa0,0xad,0x7e,0xee,0xcc,0xed,0xc2,0xa0,0xd7,0x1b,0x67,0xeb,0x6a,0xe8,0xa0,0xdd,0x73,0xad,0xab,0x14,}, + {0xd6,0x15,0x61,0x99,0x21,0xe6,0xc0,0x86,0xe5,0x95,0x37,0x24,0x5a,0x80,0x94,0xd3,0x8e,0x47,0x13,0xbc,0xc0,0xb3,0x14,0x4d,0x56,0x93,0x56,0xc0,0xc8,0x6b,0x52,0xc7,0x23,}, + {0xdb,0xad,0xbc,0xe8,0xd1,0xc1,0xe3,0x47,0x1a,0x4d,0xa0,0x40,0x55,0xe8,0xa2,0x5a,0x49,0xc5,0x06,0x55,0x48,0xa7,0x48,0x8d,0xa5,0x03,0x7b,0x4b,0x4a,0x6b,0x78,0xac,0x9f,}, + {0xdb,0x29,0xd4,0x20,0x9a,0x58,0x8b,0xa7,0x98,0x95,0x36,0xe4,0xae,0xcd,0x56,0x2e,0x2a,0x24,0x6b,0xd0,0x8b,0x90,0x3b,0x18,0xa6,0x62,0x90,0xae,0xc6,0x93,0x66,0x98,0x20,}, + {0xd7,0x9c,0xa9,0x85,0x18,0xa4,0x8d,0x52,0x89,0x91,0x88,0xda,0x64,0x26,0xf1,0x7f,0x92,0x59,0x6c,0x56,0x21,0xfd,0xe2,0x4e,0x49,0x24,0x92,0x01,0x59,0x75,0x65,0x1b,0x6c,}, + {0xda,0xa5,0xc3,0x4c,0x4b,0xde,0x40,0xa5,0x6e,0x89,0xc4,0xee,0xec,0xa1,0x5b,0x2d,0xb2,0xe9,0x1e,0xd3,0xb0,0xc9,0x24,0x92,0x76,0x34,0x50,0x92,0x67,0x3b,0x4d,0xe8,0xeb,}, + {0xd7,0xe3,0xc1,0x80,0xb3,0x74,0x0e,0x0c,0x9c,0x2d,0x28,0xe2,0xe0,0x4b,0xd3,0x28,0x00,0xd7,0x1b,0xd0,0x2d,0x46,0x9c,0x71,0xa7,0x42,0x96,0xca,0x1f,0x25,0x62,0x56,0xd3,}, + {0xd8,0x9c,0x8c,0x8c,0x22,0x72,0x23,0x38,0xb2,0x80,0x5c,0x93,0xc0,0x62,0xd7,0x2c,0x8e,0xcc,0x7a,0xec,0x22,0x48,0xf3,0xf2,0x39,0x55,0xcc,0x41,0x6e,0x94,0x55,0xdb,0x3b,}, + {0xd4,0xd8,0x6a,0x0d,0x10,0xe6,0x20,0xe6,0xea,0x5a,0x45,0xe2,0xd2,0x40,0x03,0x24,0x92,0x47,0x2c,0xec,0x00,0x37,0x6c,0x8e,0x49,0x1c,0xf0,0x20,0x49,0x25,0xb2,0x48,0xe4,}, + {0xd0,0x60,0x9b,0x21,0x5a,0x5c,0x00,0x49,0x24,0x92,0x49,0x24,0x9e,0x00,0x49,0x1b,0x6d,0xb9,0x24,0x56,0x40,0x37,0x23,0x92,0x49,0x24,0x72,0x40,0x49,0x24,0x92,0x48,0xe3,}, + {0xd0,0x60,0xa2,0xe5,0x5a,0xac,0x00,0x49,0x24,0x92,0x49,0x24,0x52,0x40,0x49,0x1c,0x92,0x49,0x23,0x84,0x00,0x49,0x24,0x92,0x49,0x23,0x88,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5f,0xaa,0xe1,0x5a,0x6c,0x00,0x49,0x24,0x92,0x47,0x24,0x5a,0x40,0x49,0x24,0x92,0x49,0x23,0x7c,0x00,0x49,0x24,0x91,0xc9,0x24,0x7a,0x00,0x49,0x24,0x92,0x49,0x24,}, +}; +static const gsm_frame gsm_data_trinact[] = { + {0xd8,0x9d,0x89,0x54,0xd1,0x50,0x40,0xb6,0xe3,0x8d,0xa7,0x21,0x64,0x20,0x3a,0xb1,0xb3,0x39,0x53,0x74,0xc0,0x2b,0x3c,0xac,0xb9,0x5a,0xbc,0xe0,0xd8,0x8a,0x91,0xb4,0xd4,}, + {0xd4,0xd6,0x59,0x18,0xdb,0x86,0xa0,0x24,0x6b,0x5a,0x48,0xa4,0xc2,0xc0,0x38,0xec,0x19,0x49,0x13,0xe4,0xa0,0xc9,0x23,0x92,0x17,0x5a,0x54,0xa0,0x19,0x13,0x51,0x47,0x93,}, + {0xd9,0xe9,0xd3,0xe5,0x59,0x74,0xa0,0xa6,0xd1,0x28,0xa2,0x12,0xa7,0x41,0xa5,0x23,0x72,0xa7,0x77,0xcc,0xc0,0xed,0xb7,0xd2,0x46,0xd0,0x9d,0xf0,0x46,0xdb,0x6e,0x49,0x3b,}, + {0xd7,0xeb,0xd0,0x90,0x81,0x55,0x50,0x7d,0x6b,0x96,0x46,0xe7,0x99,0xd1,0xa6,0x96,0xec,0x1d,0x48,0x58,0xd0,0x59,0x8a,0x49,0xc4,0x02,0xa8,0x4c,0xc2,0x91,0x0d,0xa6,0x86,}, + {0xd6,0xec,0x60,0x48,0x52,0xb4,0xcb,0x88,0x9d,0xce,0x6d,0xb5,0xe4,0x09,0xd9,0x2f,0xb2,0xca,0xe3,0xa8,0x61,0xc6,0xed,0x61,0xea,0xca,0xdc,0x41,0x88,0xec,0x71,0xb9,0x23,}, + {0xdb,0xeb,0x89,0x54,0x11,0xd8,0x42,0x59,0x6f,0xb7,0x6d,0xae,0xdb,0xeb,0x47,0x24,0x6e,0x33,0x18,0x55,0xf2,0xb7,0x05,0x82,0x67,0x1c,0x64,0x8f,0xeb,0x1e,0xef,0x79,0xf2,}, + {0xdd,0x6b,0xa2,0x90,0x01,0xc4,0xcd,0x6b,0x36,0x96,0xf7,0x6b,0xd5,0x70,0x69,0x14,0x5c,0x39,0x5a,0x7a,0xaf,0x4a,0xe5,0x39,0xc8,0x7b,0xbe,0xad,0x48,0xdd,0x4f,0x3a,0x70,}, + {0xdd,0x2e,0xcd,0x2d,0x51,0xcc,0xae,0x67,0xcc,0xb2,0xa7,0x23,0x80,0xaf,0x79,0x15,0xb2,0xa7,0x54,0xaa,0xcd,0x1a,0xda,0x81,0xa4,0x9a,0x8c,0xad,0xd2,0xa9,0x70,0x47,0x22,}, + {0xda,0x96,0x69,0x16,0xb4,0x5d,0x2c,0x46,0x2a,0x95,0xcd,0x1c,0xa4,0xa7,0x8d,0x4f,0x1e,0xbc,0xe4,0xea,0xab,0x48,0x60,0x56,0x4d,0x6f,0xa7,0xb0,0xca,0x8b,0x0b,0xc9,0x23,}, + {0xd7,0x1a,0x53,0x2a,0xb0,0x53,0x4f,0xd5,0xa2,0x42,0x4b,0x1d,0x57,0x2c,0xe7,0x26,0x08,0x47,0x2c,0xab,0x50,0x58,0xe5,0x6d,0x8b,0x1d,0xb7,0x31,0xa7,0x62,0x79,0xb8,0x9f,}, + {0xd6,0x9b,0x54,0x66,0xe0,0xbc,0xac,0x05,0x5d,0xb5,0x6f,0x0c,0x62,0xcf,0x0c,0xe5,0x72,0x47,0x73,0xc1,0x4d,0x36,0x0c,0x79,0xda,0xec,0x63,0xad,0x26,0xd5,0x4f,0x13,0xd2,}, + {0xd4,0xd9,0x83,0x2e,0x20,0x61,0x6c,0x3b,0xd4,0x62,0x2b,0x89,0xc3,0x0c,0x72,0xba,0x98,0xc6,0x62,0xc6,0xab,0x93,0xea,0xd6,0xe3,0x01,0xbc,0x8c,0x03,0x15,0xc7,0xd7,0xdc,}, + {0xd1,0xe7,0xb3,0x5d,0x62,0x61,0x0d,0x24,0x81,0x8e,0x49,0x24,0x5e,0xa7,0xc9,0x1b,0x3f,0x3d,0x0e,0xba,0xcb,0xaa,0xe6,0x76,0x0f,0x56,0x65,0x49,0x2d,0x2b,0x6e,0x36,0x85,}, + {0xd2,0x66,0x73,0x6d,0x92,0x75,0x49,0x79,0x94,0xb6,0x27,0x42,0x61,0xe6,0x07,0x23,0x87,0xb7,0xcd,0x61,0x2b,0x45,0x18,0xd1,0x66,0xeb,0xc3,0x08,0xc9,0x19,0x80,0xf4,0xfa,}, + {0xd5,0x64,0x92,0x6d,0x80,0x61,0xae,0xc9,0x23,0xb1,0x20,0x15,0x65,0x51,0xd9,0x24,0x8e,0x34,0x82,0x63,0xb4,0xf6,0xe3,0x8e,0x37,0x1b,0x61,0xaf,0xf5,0xd4,0xae,0x27,0x16,}, + {0xd5,0xe7,0x9b,0x2a,0x01,0xc1,0xee,0xa9,0xcb,0x89,0xda,0x65,0x63,0x2f,0xbb,0xa4,0x48,0x65,0x24,0xc3,0xd0,0xca,0xed,0x75,0xb5,0x85,0xc3,0xd1,0xb7,0x63,0x9c,0xc3,0x11,}, + {0xd4,0xeb,0xb3,0x29,0xe0,0x63,0x36,0x3e,0x63,0x75,0xc9,0x24,0x63,0xb0,0xc9,0x51,0xee,0xd5,0x5d,0xc3,0x2f,0xda,0xe9,0x02,0xd9,0xa3,0xc3,0xb0,0xba,0xea,0x74,0xcc,0x24,}, + {0xd4,0xed,0x93,0x2d,0xa0,0x5f,0x30,0x39,0x5d,0xae,0x44,0x87,0xc0,0xaf,0x39,0x6c,0xb7,0x58,0xe0,0x63,0xac,0x4a,0x15,0x51,0x58,0xa1,0x61,0xab,0x16,0x2b,0x39,0xa8,0xd5,}, + {0xd4,0xed,0xa2,0xed,0x68,0x61,0xce,0x48,0xad,0x43,0xb5,0x94,0xc3,0x6e,0x5d,0x22,0x84,0x1e,0x62,0xc3,0xac,0x49,0x28,0xa2,0x53,0x1e,0x61,0x8d,0x05,0x6a,0x8e,0xaa,0xe3,}, + {0xd4,0xf0,0x8b,0x69,0xa0,0x61,0xed,0x57,0xdc,0x6d,0xb9,0x0d,0xc1,0xec,0xc7,0x6f,0xc6,0xc4,0xe5,0x5f,0x50,0xc8,0xe3,0x43,0xa7,0x1d,0xc3,0x0d,0xbd,0x24,0x69,0x11,0x9b,}, + {0xd4,0xed,0xaa,0xad,0x28,0xc3,0xed,0xb7,0x1c,0x91,0x34,0x6f,0x6c,0xcf,0x87,0xa6,0x5e,0xe6,0xd3,0x65,0x50,0x95,0xc4,0xb1,0xc9,0xa3,0xc3,0xcf,0xc6,0xd7,0x19,0x58,0xab,}, + {0xd4,0xee,0xa3,0x69,0xa8,0x61,0xb0,0xc7,0x24,0x90,0x65,0x1c,0x61,0xaf,0xc5,0x65,0x6d,0xb5,0xc5,0x61,0x2d,0x53,0x6b,0x33,0x49,0x60,0xc0,0xad,0x2c,0xe3,0xae,0x3f,0x32,}, + {0xd4,0xab,0xe1,0xa9,0xa0,0xbe,0xd0,0xa1,0xa3,0x91,0xc8,0xec,0xc1,0x2d,0x45,0x1a,0xee,0x38,0xe4,0x61,0x8a,0x55,0x33,0x91,0x8e,0xeb,0xc1,0x0b,0xc7,0x6c,0xb1,0x32,0x17,}, + {0xd3,0xa4,0xc1,0x22,0x28,0xc0,0x87,0xfa,0xfd,0xd6,0xe3,0x00,0xc1,0x08,0x76,0x32,0x71,0xb2,0x4c,0xc8,0x26,0x01,0x6b,0x91,0xb9,0x5c,0xa0,0x61,0xea,0x1a,0x69,0xb9,0xad,}, + {0xd6,0x58,0xa9,0x8c,0xa8,0xe0,0x01,0xa9,0x24,0x31,0x49,0xaf,0xda,0x40,0xd7,0x24,0x40,0xed,0x95,0xd8,0x80,0x97,0x34,0xac,0x96,0xf6,0xd2,0xa0,0x68,0x00,0xbb,0x66,0x5f,}, + {0xd7,0x16,0x69,0x60,0xa1,0xd8,0xa0,0xd8,0xe1,0x2a,0x5a,0xda,0xc0,0xa0,0xb9,0x0a,0x6d,0xb5,0x22,0x80,0xa0,0xb7,0x24,0x35,0xa7,0x24,0xd6,0xa0,0xc6,0xec,0x69,0x35,0xcb,}, + {0xdc,0x2d,0xbc,0x61,0x59,0x61,0xe3,0x34,0xd2,0x29,0x10,0x42,0x55,0xe6,0x10,0x4b,0x24,0x44,0xb8,0x73,0x29,0xb1,0xb0,0xad,0x47,0xcb,0x89,0x4c,0xa7,0x66,0xa2,0xc7,0x21,}, + {0xda,0xe3,0xdb,0x54,0x98,0x66,0xac,0xb9,0x25,0x62,0x70,0xac,0xaf,0x4c,0x25,0xe8,0x4e,0x55,0x22,0x78,0x4a,0x28,0xd3,0x8d,0x28,0x28,0xaa,0xcc,0xd1,0x4b,0x28,0x88,0x69,}, + {0xd6,0x9c,0x91,0x48,0xa0,0xe6,0x89,0x86,0x1a,0xc5,0x5b,0x2b,0xb8,0x42,0xcb,0x63,0xf7,0xcb,0x2e,0xe2,0x22,0xbd,0x36,0xda,0x77,0xa3,0xc4,0x40,0xa9,0x6e,0x69,0xc9,0x1a,}, + {0xdb,0x64,0xbb,0x5c,0x0b,0xaa,0x20,0xd8,0x9d,0xdb,0x4d,0xa6,0xe4,0x41,0xdd,0x2c,0xd6,0xd9,0x6f,0x59,0xd3,0xcb,0x0d,0x99,0xce,0xdd,0x58,0x30,0x1d,0xd6,0xa8,0xe6,0xa2,}, + {0xd7,0x61,0xc9,0x04,0xb9,0x96,0x4c,0x05,0x05,0x41,0xa9,0x18,0xdc,0x4b,0x11,0x55,0x89,0xb5,0x22,0xd6,0xcc,0x37,0x14,0x0e,0x1f,0x1d,0xcc,0x48,0x01,0x73,0x6a,0x58,0xe3,}, + {0xd7,0xdf,0xe4,0x5c,0x10,0x70,0x01,0x6b,0x22,0x33,0x48,0xdb,0xc6,0x41,0xcd,0x3f,0xe3,0xab,0x66,0xf0,0x02,0x4f,0x6c,0x95,0xbb,0x73,0x76,0x80,0xb4,0x6b,0xba,0x79,0x29,}, + {0xd5,0x16,0x69,0x8c,0xd1,0xc8,0xa1,0x57,0x64,0x59,0xb8,0x9c,0xf0,0x00,0x15,0x13,0x8e,0x46,0xdc,0xe8,0x40,0x47,0x1b,0x8d,0xc7,0x23,0xea,0x20,0x47,0x1c,0x72,0x39,0x24,}, + {0xd0,0x60,0xa2,0xe5,0x5a,0x56,0xa0,0x39,0x24,0x92,0x49,0x24,0xd8,0x00,0x48,0xe4,0x72,0x49,0x1c,0xd2,0x00,0x48,0xdc,0x8e,0x49,0x1c,0x94,0x00,0x49,0x24,0x92,0x47,0x24,}, + {0xd0,0x5f,0xa2,0xe1,0x5a,0xe2,0x40,0x49,0x24,0x92,0x49,0x23,0xea,0x00,0x49,0x1c,0x92,0x49,0x24,0x84,0x00,0x49,0x24,0x92,0x49,0x1c,0x86,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5f,0x9b,0x21,0x5a,0x70,0x00,0x49,0x24,0x92,0x39,0x24,0x68,0x00,0x49,0x24,0x92,0x49,0x24,0x52,0x00,0x49,0x24,0x8e,0x49,0x24,0x56,0x00,0x49,0x24,0x92,0x49,0x24,}, +}; +static const gsm_frame gsm_data_ctrnact[] = { + {0xd8,0x4e,0x68,0xd8,0xdb,0x50,0x60,0x34,0x9a,0x68,0xce,0x56,0x54,0x00,0xb6,0x74,0x71,0xb7,0x25,0x5a,0xa0,0xbc,0x89,0x8d,0xc8,0xda,0x96,0xa0,0xb8,0xd6,0x91,0xb8,0xdc,}, + {0xd5,0x17,0x68,0xdd,0x12,0x72,0xe0,0x3e,0x9a,0x7d,0xb6,0xdd,0x70,0xc0,0x28,0xd5,0x5d,0xb4,0xee,0x96,0xa0,0x37,0x5c,0xeb,0x2e,0xb5,0xe0,0xe0,0x7d,0xaf,0x76,0x25,0x65,}, + {0xd2,0x95,0x61,0xe1,0x99,0x6e,0xc0,0x36,0xda,0x74,0xa9,0x9b,0xc9,0x40,0x4e,0xeb,0x6d,0x1a,0x99,0x8a,0xe0,0x3d,0x22,0x6e,0x37,0x15,0x72,0xe0,0xb7,0x1b,0x92,0x38,0xf3,}, + {0xdb,0x64,0x8a,0xcc,0x89,0xd1,0x61,0x48,0xe6,0xb6,0x6f,0x65,0x5d,0x21,0x7f,0xad,0xda,0xdb,0x6c,0x54,0xa0,0xf9,0xb5,0xdf,0x5b,0x2d,0xe1,0xab,0xc8,0xe4,0x8f,0x89,0x5b,}, + {0xdc,0xef,0xd5,0x24,0x9b,0x60,0x89,0xc9,0x1c,0x92,0x6e,0xe7,0xa4,0xca,0x7d,0xbc,0x6b,0x6d,0x34,0x6f,0x2d,0x99,0x5d,0x7d,0x2d,0x5e,0x5d,0x2d,0x95,0xaa,0x50,0x53,0xc3,}, + {0xdc,0x2a,0xcc,0x69,0x23,0x5d,0x6e,0xd1,0x8c,0x70,0x26,0xdf,0x6e,0xd0,0x35,0x44,0x35,0x2a,0x51,0xcf,0xb4,0xb9,0x8e,0x93,0xd8,0x64,0x54,0xf4,0x76,0x90,0x6d,0x4a,0xc3,}, + {0xda,0xa6,0xfc,0x8c,0x11,0x50,0x30,0x37,0x93,0x20,0xb2,0x5c,0xe0,0x0e,0xb1,0xe1,0x6e,0xc6,0xe3,0xc2,0x25,0xc4,0xaf,0x71,0xa7,0x2d,0xe8,0x62,0x89,0x77,0xb2,0xe8,0x8e,}, + {0xda,0x62,0x9a,0xd4,0x18,0xec,0x23,0x50,0xa3,0x69,0xc6,0x9c,0xbc,0x21,0x45,0x5a,0x48,0xc3,0x4a,0xbc,0x21,0x3f,0x12,0x2d,0xdb,0xab,0x99,0xe3,0x44,0xfc,0x9d,0x49,0x23,}, + {0xd6,0x60,0x81,0x9e,0x60,0x7f,0xa4,0x47,0x23,0xd8,0x53,0x09,0x9b,0x8c,0x64,0x30,0x95,0x46,0xdb,0x5c,0x25,0x93,0x41,0xc2,0xcb,0xe7,0xb7,0x4e,0xb8,0x82,0x3f,0xbb,0x2d,}, + {0xd6,0x1f,0x7a,0x63,0x29,0x57,0xcf,0x49,0x33,0x07,0xc6,0x99,0x57,0x2f,0x4b,0xab,0x50,0xd0,0xf3,0xad,0x71,0x47,0x73,0x54,0x38,0x15,0x54,0x8e,0x56,0xad,0x2a,0x2a,0x1c,}, + {0xd7,0x97,0x9a,0x0b,0x1a,0xbc,0x28,0xf9,0x6d,0xb1,0xa9,0x1e,0xe2,0xcd,0x35,0x2f,0xc7,0x5a,0x95,0xcc,0xcd,0x49,0xac,0xb5,0xa0,0x42,0xba,0xd0,0xcd,0x1d,0xae,0x36,0x50,}, + {0xd5,0x63,0x81,0xea,0xd8,0xdd,0xd4,0xaf,0x14,0x92,0x58,0xda,0x54,0xd2,0x09,0x24,0x8e,0x49,0x63,0xaa,0xd1,0x20,0xad,0x71,0xc9,0x34,0x57,0x2e,0xa8,0x16,0x76,0x48,0xec,}, + {0xd4,0x1c,0xab,0xa2,0xa0,0x57,0x6c,0x60,0xc5,0x6d,0xc7,0x25,0xad,0x6a,0xaa,0x71,0xe9,0x3a,0xde,0xad,0x4b,0xc8,0x96,0x18,0xa7,0x15,0xb7,0x6e,0x49,0x63,0x74,0x1e,0x4e,}, + {0xd2,0x22,0x94,0x32,0xd9,0xca,0x8d,0xd7,0x2f,0x72,0xc0,0xa4,0xb6,0x87,0x0a,0xc7,0xd1,0xdc,0x95,0xca,0x48,0xf8,0xb1,0x7a,0xfb,0x31,0x63,0x49,0x32,0x2b,0x75,0x3a,0xf5,}, + {0xd1,0xa9,0x93,0x76,0x59,0x60,0xe7,0xc4,0x80,0xd4,0xd6,0xf4,0xc2,0x88,0xbd,0x2d,0x4d,0x0b,0x15,0xc3,0x24,0xca,0xf9,0xb5,0xc2,0x23,0x61,0x24,0xba,0xdd,0x7a,0x5a,0x60,}, + {0xd3,0x65,0x72,0x2e,0x11,0xc3,0x08,0x0e,0x5f,0x9b,0x4b,0xbd,0x63,0x0d,0x34,0x0a,0x76,0xcb,0x25,0x5f,0x4a,0xc8,0x88,0x50,0x6e,0x1d,0x59,0xd2,0x46,0xed,0x96,0x03,0x92,}, + {0xd5,0x6b,0x78,0xba,0x48,0x5e,0xd0,0x67,0x1c,0xd9,0xc6,0x80,0x61,0x0c,0x2c,0x7e,0x95,0xe9,0x63,0xc3,0x31,0x06,0xda,0xd1,0xc9,0x65,0x61,0xcb,0xd7,0x60,0xf1,0x4c,0x99,}, + {0xd4,0xeb,0xa2,0x69,0xa0,0x63,0x30,0x58,0xe3,0x64,0x53,0x5c,0xc5,0xb2,0x67,0x2a,0x71,0x36,0x79,0xc1,0x4e,0x3e,0xfb,0x7d,0xd8,0x71,0x63,0x52,0xae,0x9d,0x8e,0x49,0x23,}, + {0xd4,0xea,0xb3,0x29,0xd8,0x61,0xad,0xe4,0x4f,0x74,0x4a,0xec,0x61,0xb1,0x56,0xeb,0x82,0xb7,0x23,0x61,0xeb,0xca,0xd5,0x51,0xaa,0xb7,0xc1,0x8c,0x88,0xdc,0x8d,0xb7,0x29,}, + {0xd4,0xec,0xa2,0xed,0xa0,0x61,0x0c,0x8e,0x74,0x72,0xd7,0x91,0xc3,0x30,0x9e,0x23,0x95,0xd9,0x23,0xc3,0x8e,0x55,0x1e,0x15,0x58,0xeb,0x61,0xaa,0x9a,0xab,0xc3,0xc5,0x44,}, + {0xd4,0xaf,0x84,0x61,0xe0,0x63,0x4f,0x4b,0x5c,0x89,0x0c,0x23,0xc0,0xf2,0x49,0x25,0x91,0xb4,0x57,0xbf,0x30,0x08,0xdc,0x6e,0x57,0x23,0xc1,0x10,0x35,0xcc,0xae,0x39,0x24,}, + {0xd5,0x2a,0xc9,0xed,0x61,0x61,0xac,0x36,0x97,0x18,0xe8,0xf4,0x61,0x90,0x67,0x14,0x68,0x71,0x22,0x65,0xb0,0xbb,0x14,0x71,0xa9,0xc5,0xc3,0xf1,0xc5,0x1c,0x6e,0x46,0xe7,}, + {0xd5,0x2d,0xa3,0x69,0xa8,0x5e,0xd0,0x07,0x25,0x7a,0xeb,0x1a,0x63,0x30,0x91,0xd4,0xb2,0x49,0x6c,0xc1,0x31,0xc6,0x88,0xee,0x59,0x25,0x61,0xce,0xb8,0x9d,0x6f,0x09,0x13,}, + {0xd4,0xea,0xd2,0x61,0xe8,0x61,0x2d,0x52,0xd7,0x76,0x42,0xfd,0xc1,0x70,0x37,0x12,0x8e,0x49,0x1f,0xbc,0x8b,0xa2,0xfa,0x76,0xcd,0xea,0xc1,0x4b,0x10,0x7a,0x8e,0xd9,0x2e,}, + {0xd3,0xaa,0xa9,0x65,0xd8,0xc0,0xac,0x43,0x00,0xd5,0xc7,0x64,0xbe,0x89,0xc8,0xda,0x8c,0x7b,0x2a,0xba,0x28,0xbb,0x2c,0x89,0x20,0x9b,0xd2,0x03,0xdb,0x9d,0x9b,0x48,0x42,}, + {0xd4,0xd9,0x9a,0x4d,0xf2,0xd8,0x41,0xe9,0x83,0x93,0xfd,0xf2,0xc0,0x21,0x89,0x3a,0x6e,0xc8,0xe3,0xa2,0x21,0x58,0x7a,0x8e,0xab,0x1c,0xd4,0x40,0xc8,0x91,0xd2,0x4c,0x25,}, + {0xd6,0x57,0x7a,0x14,0xe9,0xe0,0xc0,0xbb,0x21,0x4f,0x5a,0xb1,0xec,0xa0,0xa7,0x65,0x65,0xa7,0x0b,0x60,0xc0,0xa8,0xd4,0x6d,0x37,0x61,0xd8,0x00,0xaa,0x8c,0x6e,0x46,0xec,}, + {0xdb,0x29,0x93,0xa4,0x90,0x8f,0xe1,0xb4,0xcd,0x49,0x04,0x4a,0x53,0x82,0x10,0x81,0x61,0x31,0x0b,0x87,0xe4,0xb8,0x2d,0x6a,0xe5,0x45,0x55,0x69,0x47,0x12,0x8e,0x27,0x57,}, + {0xdb,0xa8,0xe4,0xa0,0x9b,0x77,0xab,0x37,0x1c,0x87,0x25,0xd2,0x5d,0xab,0x73,0x29,0x56,0x34,0xb2,0x94,0x8d,0xb7,0x18,0x95,0x28,0xd0,0xe1,0x4b,0x20,0x05,0x82,0x96,0x0b,}, + {0xd7,0xdb,0x9a,0x90,0xd0,0x5a,0xce,0x36,0x92,0xac,0x46,0xdc,0x96,0x06,0xc4,0xfd,0x8a,0x59,0x64,0x5a,0x01,0xef,0xf4,0x4e,0x49,0x65,0x96,0x21,0x69,0xbe,0x89,0x3b,0xb6,}, + {0xda,0xa7,0xac,0x65,0x5a,0xde,0x41,0xeb,0x27,0xdb,0xeb,0x6e,0x63,0x22,0x6f,0xff,0xff,0x6d,0x24,0x62,0xe1,0x49,0x6e,0xb6,0xeb,0x3d,0xcd,0xd1,0xb6,0xe4,0x8d,0xb7,0x27,}, + {0xda,0x5f,0xaa,0xd0,0x9b,0x50,0x91,0xc5,0x66,0x93,0xb3,0x1a,0x9e,0x4e,0xa5,0x1b,0xa4,0x81,0x14,0x64,0x49,0x65,0x00,0x92,0x34,0x16,0x6c,0xad,0x06,0x86,0x72,0x22,0xab,}, + {0xd8,0xd9,0x93,0x98,0x1a,0xc8,0x63,0x82,0xd3,0xa2,0x13,0x31,0x94,0x21,0xd4,0x14,0x3b,0x53,0x9e,0xc4,0x61,0x6d,0x56,0xae,0xa9,0x25,0xd4,0x42,0xd7,0xc7,0x5a,0xac,0xa5,}, + {0xd5,0x56,0x71,0x94,0xc9,0x62,0x20,0xab,0x5f,0x32,0x27,0xa4,0x8a,0x00,0x9e,0xce,0x4e,0xb9,0x1c,0xe8,0x20,0x45,0x95,0x6e,0xbb,0x1c,0xe8,0x60,0x48,0xe4,0x96,0x49,0x2b,}, + {0xd0,0x60,0xa3,0x21,0x1a,0xe4,0x00,0x49,0x24,0x92,0x49,0x24,0x68,0x20,0x36,0xdc,0x72,0x36,0xe3,0xb0,0x60,0x37,0x1c,0x8e,0x36,0xdb,0xbc,0x00,0x47,0x24,0x92,0x49,0x24,}, + {0xd0,0x60,0x9b,0x21,0x1a,0x6c,0x00,0x49,0x24,0x8e,0x49,0x24,0xe8,0x00,0x49,0x24,0x92,0x49,0x23,0x52,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x72,0x49,0x24,}, + {0xda,0xa6,0xc3,0x65,0x59,0x87,0xe0,0xc9,0x25,0xb6,0xef,0xfe,0x51,0xa1,0x7f,0xff,0xdb,0x6d,0x6d,0x55,0x20,0xed,0xb6,0xdb,0x6d,0x76,0xa1,0xae,0x74,0xe3,0x92,0x47,0x24,}, +}; +static const gsm_frame gsm_data_patnact[] = { + {0xd8,0xe3,0x8a,0x95,0x1a,0x50,0x40,0x49,0x24,0x72,0xe9,0xe4,0x5c,0xa0,0xa9,0x1c,0x70,0xba,0x99,0x52,0x00,0x23,0x5b,0xc1,0xd9,0x6d,0x88,0xa0,0xb7,0x5b,0x6e,0x46,0xf4,}, + {0xd5,0xd9,0x71,0xd4,0x9a,0x71,0x20,0xcb,0x63,0x77,0x57,0x2b,0x5c,0x80,0x29,0x1c,0xae,0xab,0x04,0xa2,0xe0,0x2a,0xb5,0x11,0xae,0x87,0xce,0xa0,0x96,0x9b,0x72,0xa7,0x74,}, + {0xd4,0x30,0xc2,0xa6,0x19,0x8f,0xd0,0x39,0x24,0x8e,0x6e,0xa3,0x56,0x09,0xdf,0xbf,0xa9,0xca,0xe6,0x98,0xb3,0xb6,0xd1,0x0a,0xc9,0x6b,0xcf,0x95,0xa4,0x06,0x4e,0xc8,0xb3,}, + {0xd4,0x71,0xcb,0x56,0xa8,0x53,0x31,0xd8,0x87,0x72,0x47,0xdf,0x53,0x10,0xe4,0x82,0xa9,0xca,0xee,0xa5,0x10,0x65,0x08,0xe6,0x49,0x2d,0x53,0x11,0xd9,0x08,0x6a,0x37,0x5a,}, + {0xd4,0xa7,0x99,0x9e,0x58,0xb0,0xce,0xd6,0xa0,0x4d,0xa7,0xdc,0xbc,0xb0,0x49,0x12,0x49,0x37,0xd4,0x5f,0x2d,0xf5,0x64,0xaa,0x42,0xa2,0xbf,0x0c,0xe7,0x2c,0x92,0x46,0xa0,}, + {0xd4,0x5d,0xea,0x18,0x68,0xbc,0xca,0x9f,0x5f,0xb2,0xc5,0x99,0x5e,0xaa,0xd2,0x09,0xf5,0x46,0x94,0xd0,0x42,0xf5,0x34,0x92,0x31,0x29,0xa2,0x02,0x2d,0xf4,0x6a,0x44,0xa3,}, + {0xd7,0x98,0x92,0x5d,0x12,0xe6,0x41,0xfd,0x53,0x8a,0x37,0x19,0xd0,0x40,0xbc,0x13,0x4d,0xf0,0x93,0xde,0x01,0x0b,0x64,0x69,0x24,0x95,0xdc,0xc0,0xe7,0x4e,0x8e,0x3a,0xdb,}, + {0xd6,0x96,0x81,0xd8,0x19,0xb2,0x20,0xc5,0x56,0x92,0xdc,0xa4,0xc0,0x80,0xa6,0xf5,0x2f,0x49,0x2c,0x72,0xc0,0x28,0xe8,0xbd,0xb9,0xad,0xd8,0x20,0x5b,0x24,0x94,0xc3,0x1e,}, + {0xd4,0x16,0x71,0x59,0x11,0xee,0xa0,0x5d,0x2c,0x6d,0x46,0x66,0xb3,0x20,0x61,0x12,0xd6,0x37,0x14,0xbb,0x20,0xbb,0x5b,0x59,0xc7,0x23,0xd0,0xe0,0x38,0xed,0x5b,0x37,0xd5,}, + {0xd8,0x22,0xca,0x62,0x68,0xb7,0xef,0x49,0x2b,0x9c,0x5e,0x77,0x5e,0xaf,0x47,0xe5,0xbf,0xb9,0x5c,0x6c,0x0c,0x5d,0x7e,0x5a,0x15,0x14,0xc6,0x4b,0xa8,0xe3,0x6d,0x92,0x80,}, + {0xd2,0xde,0x93,0x26,0xd8,0x71,0x0f,0x32,0x4a,0x72,0x69,0x67,0x61,0x73,0xba,0x9f,0x6a,0xb6,0xe3,0xae,0xcc,0x4f,0x81,0x6d,0xd8,0xe5,0xb6,0x2e,0x59,0x2b,0x44,0x36,0xf4,}, + {0xd1,0x2a,0xa3,0xf5,0xd1,0x5e,0xe7,0xf9,0xbc,0x65,0x83,0xda,0xba,0xa6,0xf4,0xa2,0xd5,0x47,0x11,0xac,0xe6,0xa5,0xc2,0xaf,0xed,0xda,0xbf,0x45,0xa5,0xdc,0xc5,0xe9,0x73,}, + {0xd1,0xe7,0x84,0x36,0xd1,0x5f,0x26,0x26,0x14,0x8a,0x53,0x2c,0xbd,0x46,0x76,0xd9,0x2f,0x09,0x84,0x5f,0x29,0x49,0xab,0x70,0x3c,0x9b,0x5f,0xa9,0xb9,0x24,0x6e,0x43,0xb9,}, + {0xd5,0x67,0xa0,0xba,0x90,0x57,0x4d,0xdc,0x25,0x96,0xff,0x24,0x5d,0xb4,0x83,0x13,0x92,0x47,0x24,0x5c,0xf1,0xb6,0x0f,0x2f,0x47,0x25,0x5f,0x4f,0x47,0x59,0x47,0x0b,0x55,}, + {0xd4,0xeb,0x82,0x75,0x98,0xbf,0x0d,0x0f,0xab,0xe8,0x01,0x05,0x5f,0x0d,0xbb,0x1d,0xba,0x48,0x44,0xbe,0xcf,0x39,0x6b,0xbd,0xd8,0x18,0xc1,0x55,0xbe,0x6c,0x72,0x48,0xdb,}, + {0xd4,0xac,0xbb,0xa1,0xd8,0x63,0x10,0xb8,0x87,0x15,0x5c,0xa6,0xc1,0xb2,0x46,0xe2,0x51,0x73,0x32,0x5f,0x8c,0x45,0x29,0xee,0xa5,0x83,0xbd,0x30,0xba,0xe5,0x6a,0xa4,0x3a,}, + {0xd4,0xac,0xba,0xe9,0xa0,0xbd,0x6e,0x4a,0xe4,0xd2,0xb8,0x48,0xbd,0x70,0x55,0x64,0x72,0x5b,0x57,0xbf,0x8e,0x09,0x59,0x71,0x39,0x1b,0x5f,0x8d,0x0b,0x24,0x19,0xd8,0xeb,}, + {0xd4,0xad,0xba,0xad,0x60,0x5f,0x0f,0x49,0x13,0x44,0x76,0xe4,0xbf,0x2d,0xc7,0x6b,0x6d,0x03,0xcc,0xbf,0xee,0xc6,0xdc,0x6e,0x38,0xb7,0x5d,0x4f,0x8a,0xe4,0x6f,0xba,0xe3,}, + {0xd4,0xb1,0x9b,0x69,0xa1,0x5f,0xad,0x28,0x1a,0xce,0x4a,0xb2,0x5d,0x30,0x46,0x86,0x6a,0x49,0x1e,0xbf,0x2d,0xe6,0xd2,0x18,0xc9,0x24,0xbf,0xca,0x43,0x1c,0x10,0x50,0xec,}, + {0xd4,0xed,0xb2,0xed,0x30,0xbd,0xad,0xb7,0x16,0x56,0x28,0x34,0x5d,0x50,0xc9,0x24,0x96,0xb9,0x18,0xbf,0xcd,0x73,0xa9,0x91,0xd7,0x1d,0x5f,0xad,0xa5,0xc5,0x8e,0xb9,0x55,}, + {0xd4,0xed,0xb2,0xa9,0xe1,0x5f,0x8c,0x86,0xe3,0xe2,0x41,0x61,0x5f,0x2f,0xcd,0x2c,0x85,0x78,0xaa,0xba,0xf1,0xb7,0x6c,0x6d,0x0c,0xe2,0xbd,0x2f,0xe5,0x22,0xb2,0xa8,0xc4,}, + {0xd4,0xe5,0xc9,0xe1,0xe8,0x5a,0x8c,0x1b,0x24,0x96,0x7b,0x53,0x5f,0x8c,0xfd,0x4d,0xa6,0xb6,0xa3,0xbd,0x09,0x16,0x9f,0xaf,0x9d,0x34,0xbc,0xcc,0xd4,0xc8,0x32,0xc9,0x24,}, + {0xd2,0xdf,0xa9,0xea,0xb2,0xba,0x06,0x5f,0xe2,0x60,0x04,0x55,0xb6,0x23,0x29,0xd2,0xf6,0xe8,0xe1,0xda,0x22,0xfe,0xe3,0x72,0x36,0xe2,0xd6,0x61,0xbf,0x2c,0x92,0x46,0xdc,}, + {0xd8,0x17,0x7a,0x20,0xe9,0xa4,0xc0,0xbc,0xb0,0x8e,0x3b,0x0a,0xcc,0xa0,0x9b,0xaa,0xc9,0xa9,0x6d,0xbe,0xc0,0xb9,0x2e,0x6e,0x19,0x1b,0xec,0x00,0xd5,0x12,0x90,0xb4,0xd2,}, + {0xda,0x67,0x69,0x88,0x50,0x59,0x01,0x26,0xd2,0x4e,0x31,0x19,0x54,0xc1,0x47,0x6c,0x5e,0xb4,0x59,0x9f,0xa1,0xf4,0x94,0x31,0xcb,0x23,0x77,0x85,0xb9,0x25,0x51,0xd6,0xfa,}, + {0xdb,0x6a,0xd4,0xa0,0x9b,0x59,0xa7,0xc8,0xa4,0x3c,0xb6,0x5b,0x67,0x8a,0x05,0x19,0xae,0xa1,0xcc,0x62,0xed,0x35,0x1c,0x8c,0x4e,0x52,0x8f,0x4d,0xc4,0x13,0x60,0xd8,0x62,}, + {0xd9,0x5e,0xba,0x48,0x58,0x56,0x48,0x08,0xa0,0x76,0x23,0x46,0x90,0x4a,0x2a,0x2a,0x85,0xa5,0xa5,0xce,0x89,0x83,0xc9,0xb5,0x3d,0x9c,0xb6,0x23,0x5d,0x74,0xbf,0x69,0x64,}, + {0xd2,0x96,0x72,0x1d,0x9a,0x76,0x40,0xe9,0x34,0xbb,0xd4,0xd1,0xec,0x21,0x69,0x74,0x5a,0x17,0x1d,0xee,0x20,0x91,0x1d,0x6d,0xb6,0xdd,0x7c,0xa0,0x55,0x52,0xba,0x4a,0xac,}, + {0xda,0xe2,0xc3,0x4c,0x14,0xa7,0xcf,0xe2,0xad,0xb1,0xfa,0x63,0x62,0x8d,0x6e,0xbd,0x63,0x95,0x09,0x76,0xae,0xb6,0x6a,0x30,0xc8,0x48,0xb2,0xad,0x0b,0x2c,0x68,0xb8,0xe4,}, + {0xd7,0x99,0x8b,0x48,0xf9,0x9c,0x4c,0x95,0x42,0x2b,0x49,0x12,0xb8,0x65,0xf9,0x1a,0x4d,0x45,0x14,0x98,0x01,0xbd,0x1b,0xc1,0x97,0x2b,0xc6,0x21,0x08,0xd6,0xb6,0x47,0x1c,}, + {0xd6,0x9e,0xda,0xc8,0x08,0xee,0x02,0xb7,0x6d,0xa3,0x2b,0x55,0x5e,0xa0,0xad,0x25,0x35,0x55,0x16,0x7a,0xc0,0xb7,0xa4,0x91,0xd9,0x24,0x58,0x60,0x59,0x65,0xb6,0xdb,0x6c,}, + {0xd0,0x5f,0xa3,0x21,0x5a,0xb8,0x40,0x39,0x2b,0x92,0x57,0x24,0xe6,0x60,0x37,0x1b,0x8d,0xb7,0x1b,0xde,0x00,0x36,0xdb,0x6d,0xb6,0xe4,0xde,0x20,0x38,0xdb,0x71,0xc6,0xe4,}, + {0xd0,0x60,0xa3,0x21,0x5a,0xcc,0x00,0x49,0x24,0x72,0x48,0xe4,0x84,0x40,0x49,0x24,0x92,0x49,0x23,0xf0,0x00,0x48,0xe4,0x92,0x49,0x24,0x60,0x00,0x49,0x24,0x92,0x47,0x24,}, + {0xd0,0x5f,0xa2,0xe1,0x1a,0x66,0x00,0x49,0x24,0x92,0x49,0x24,0x88,0x00,0x49,0x23,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x47,0x24,0x92,0x49,0x24,}, +}; +static const gsm_frame gsm_data_sestnact[] = { + {0xd3,0xd4,0x51,0x55,0x13,0x50,0x60,0x49,0x64,0xae,0xd5,0xe2,0x55,0x20,0x49,0x9d,0x35,0xb9,0x24,0x8f,0x40,0x38,0x95,0x5e,0x3a,0xdd,0xb6,0xc0,0x39,0x69,0x12,0x8a,0xe3,}, + {0xd7,0xa7,0x41,0xd0,0x10,0x9f,0x20,0xdb,0x2c,0xd6,0x5d,0xa4,0x56,0xa1,0x5b,0xe5,0x8d,0xc4,0xd2,0x52,0xc1,0x45,0x69,0x4d,0xbb,0x46,0xb3,0xa1,0x83,0x42,0xe3,0xb3,0x94,}, + {0xd9,0x71,0xe1,0x25,0x08,0x55,0xa4,0xb7,0x13,0xfe,0xd0,0x9d,0x55,0x28,0x86,0xe8,0x47,0xc6,0x29,0x7b,0x49,0x26,0xe0,0x75,0x9b,0xa2,0xcb,0xea,0xa2,0xd4,0x11,0xfa,0x12,}, + {0xd9,0xf6,0xf8,0x98,0xd1,0x57,0x6e,0x37,0x55,0x16,0xb6,0x8a,0x5e,0xcd,0x53,0x1b,0x86,0x08,0xa3,0x6c,0xcd,0xa3,0x5c,0x54,0x83,0x6e,0xb3,0x4c,0x87,0xea,0x61,0xbc,0xea,}, + {0xda,0xae,0xfa,0x4d,0x11,0x6a,0xad,0x2a,0x1b,0x51,0x8a,0xe1,0x5d,0xcd,0x9a,0x8c,0x4d,0x51,0x46,0x81,0x4e,0xd8,0x46,0x52,0x46,0xa3,0xa9,0x4b,0x29,0xc2,0xa3,0x58,0xfa,}, + {0xda,0xae,0xfb,0x4d,0x48,0xc5,0x30,0x4c,0x62,0xa4,0xd5,0x05,0x67,0x11,0x13,0x98,0x91,0xc1,0x5b,0x72,0x8d,0x04,0x30,0x68,0xe1,0x24,0xe2,0xb0,0x66,0x5a,0xed,0x3a,0x63,}, + {0xdb,0xea,0xfc,0x59,0x50,0x7f,0x4d,0xc5,0x53,0x54,0x78,0x7a,0xde,0xee,0x28,0xc1,0xf5,0x66,0xf6,0x96,0xef,0xdb,0x87,0x7f,0xd8,0xbe,0x6d,0x2f,0xaf,0x6c,0xd7,0x3d,0x23,}, + {0xdb,0x2c,0xfa,0x8c,0x13,0x82,0x8f,0x7d,0x64,0xdc,0xc9,0x6a,0xe6,0xcd,0xe5,0xa3,0x19,0x72,0xb2,0x74,0x8d,0xda,0xeb,0x78,0x3f,0x1c,0x9e,0xcd,0xb8,0xe6,0x93,0xc3,0xbd,}, + {0xd7,0x1c,0x79,0xed,0xe1,0xd8,0xcb,0x5d,0x33,0xff,0x59,0x3e,0xec,0xc8,0xca,0xe5,0x5d,0x9d,0x6b,0xf1,0xd5,0xcb,0x24,0x8d,0x24,0x3d,0x55,0x52,0x16,0xf7,0x8e,0xb6,0x57,}, + {0xd6,0x9d,0x7a,0xed,0xb0,0x55,0x4f,0x59,0x1d,0xf6,0x66,0x40,0xab,0x50,0x95,0xac,0x9e,0xdb,0x00,0x55,0xd0,0x78,0x9b,0x71,0x3a,0xdd,0x55,0xcc,0x8c,0x86,0xa8,0xc9,0x83,}, + {0xd5,0x9e,0x92,0xf1,0xe8,0x55,0x70,0x8e,0x9d,0x6d,0x5a,0xdc,0xaa,0xb2,0x20,0x9c,0xb1,0xb9,0xa2,0xaa,0x92,0x44,0x22,0x92,0x49,0x2d,0xab,0x2f,0xb8,0x46,0x89,0xc9,0x1e,}, + {0xd5,0x21,0x83,0x2a,0x68,0x55,0xec,0x1b,0x27,0x32,0x46,0xe0,0xa9,0x6a,0xa5,0x48,0xe9,0x5a,0xdf,0xab,0x2a,0xa6,0xa8,0x19,0x9b,0x5c,0xab,0x2c,0x67,0x1c,0x06,0x27,0x6b,}, + {0xd3,0xdb,0xab,0x2d,0xd8,0xa9,0x2a,0x3f,0x0c,0x47,0x37,0x6a,0xa2,0xe9,0xf8,0x56,0x05,0xd8,0xf2,0xa6,0xc9,0x5e,0x54,0x86,0x05,0x24,0xaa,0xc8,0x4f,0x0d,0x82,0x30,0x95,}, + {0xd9,0x61,0x89,0x94,0xa2,0xaf,0x6a,0xbd,0xa3,0x74,0x85,0x0d,0x56,0xa8,0x05,0xff,0xcc,0xa9,0x03,0xb5,0x6d,0x4a,0xdb,0x83,0x51,0x72,0x55,0x6e,0xd4,0xea,0x92,0x0e,0xea,}, + {0xda,0xed,0xcb,0xb1,0x6a,0x58,0xea,0xee,0x6a,0xed,0xc7,0x98,0x7d,0x0e,0xbe,0xe2,0x56,0x48,0xe4,0xd8,0xcd,0x76,0x65,0x5d,0xcd,0x64,0x8f,0x4d,0x3f,0xcc,0x3f,0x0f,0x21,}, + {0xda,0xa8,0xb3,0xf9,0x6b,0x68,0xaf,0x71,0x24,0xcd,0x3c,0xad,0x64,0xcd,0x1a,0xef,0x6e,0x3b,0x9e,0xc6,0x8d,0x93,0xab,0x29,0xf8,0xf8,0x54,0xcf,0xd8,0x5f,0x2e,0x38,0xe2,}, + {0xda,0xea,0xc4,0xb1,0xec,0xbf,0x4c,0x33,0xd0,0x68,0x33,0x98,0xb8,0xab,0x56,0xd0,0x1f,0x61,0xcb,0x5a,0xaf,0xc6,0xd4,0x4b,0x05,0x91,0x56,0xad,0xd6,0xaa,0x7c,0x68,0x2d,}, + {0xd9,0x6b,0xe4,0x6d,0xab,0x98,0x8d,0x35,0x1b,0x4d,0x77,0x25,0x96,0xad,0x2d,0x44,0x5b,0x36,0x99,0xde,0xee,0x6c,0xcb,0x66,0x50,0xa5,0x7a,0xcb,0x40,0xd3,0xae,0xb5,0x02,}, + {0xd9,0x6a,0x9b,0x2d,0x58,0x7e,0x89,0x74,0x12,0xad,0x19,0x23,0x82,0x02,0x24,0x82,0x4e,0x04,0xd2,0xea,0x22,0x94,0x88,0x20,0x10,0xc8,0xec,0x62,0xa0,0x5a,0x49,0x12,0x4a,}, + {0xd7,0xa1,0xaa,0xb1,0xa1,0x92,0xc1,0x80,0xc1,0x09,0xb4,0x12,0xac,0xe1,0x24,0xed,0x6e,0x95,0x1e,0x97,0x42,0xd7,0x9f,0x55,0xf3,0x9c,0xed,0xcc,0xc9,0x5c,0x89,0xb7,0xd0,}, + {0xd5,0xe3,0x6a,0xa7,0x5a,0x6a,0x8d,0x50,0xea,0x6d,0xb6,0xdb,0x62,0x26,0xa2,0x28,0x8e,0x57,0x9a,0xd8,0xaf,0xb8,0xca,0x19,0xc9,0x74,0x5f,0xce,0xd7,0x67,0x44,0xf5,0x2b,}, + {0xd4,0xdf,0x72,0xa2,0xd9,0x60,0xf1,0xb8,0xed,0x8d,0x45,0xd4,0xbc,0xd0,0x54,0xec,0x9a,0xa3,0x02,0xbf,0x2e,0x76,0x74,0x77,0xc5,0x20,0x66,0x2d,0x02,0xd5,0xb2,0xed,0xac,}, + {0xd0,0xec,0x94,0x76,0x09,0xc4,0x4f,0xa2,0x12,0x72,0x49,0x24,0x5c,0x08,0xb8,0x5a,0x3e,0x2c,0x95,0xba,0x29,0xc9,0x22,0x84,0xf8,0xb2,0x5f,0x03,0x6d,0x3e,0x49,0x12,0xfa,}, + {0xd1,0xa9,0x8b,0xfa,0x59,0xbf,0x46,0x53,0x6c,0xf2,0x44,0xc8,0xc1,0x05,0xf6,0x6b,0x17,0x7d,0x5c,0x5d,0x45,0x81,0xd3,0xc5,0xd7,0xba,0x5f,0xc6,0x28,0x36,0x35,0x49,0x26,}, + {0xd4,0xe9,0x61,0xb6,0x80,0x71,0xed,0x46,0x90,0x09,0xe8,0xed,0x55,0xf1,0x48,0xe5,0x96,0x81,0x9a,0x62,0xb2,0x5b,0x23,0x96,0xb6,0xc2,0xae,0x91,0x78,0x6d,0x71,0xec,0xac,}, + {0xd5,0x2a,0x79,0x3d,0xc0,0xbe,0x92,0x05,0x22,0xb2,0x47,0x6c,0xbf,0x0f,0xd6,0x4a,0xe3,0x47,0x5d,0xbd,0x2f,0x4a,0xd4,0x03,0xb7,0x2b,0xbe,0xd0,0x3b,0x63,0x6c,0x1e,0xa4,}, + {0xd4,0xea,0xc3,0x29,0x60,0xc1,0xd4,0x46,0xe5,0x51,0xb6,0x9f,0xdc,0xb0,0x0d,0xae,0x7b,0xda,0xc8,0x61,0x31,0x83,0x9b,0xd1,0xdb,0x2b,0xc1,0x30,0xc6,0x06,0x2e,0x67,0x2d,}, + {0xd4,0x6d,0xab,0x25,0xd8,0xbf,0xd2,0x55,0x22,0x98,0x48,0xd5,0x5d,0x2e,0xa9,0x22,0xc1,0x9e,0xa3,0xbd,0x4c,0x59,0x2a,0x4e,0x86,0x39,0xbc,0xd0,0x59,0x24,0xd6,0xb7,0x00,}, + {0xd4,0xad,0xb3,0x2d,0xa0,0x5f,0xee,0x48,0xe4,0x6d,0x57,0x57,0x61,0xd0,0x21,0x05,0x6e,0x49,0x5c,0x5f,0xee,0xc1,0x29,0xca,0x38,0xe2,0x5f,0xab,0x56,0xa4,0x90,0x71,0x62,}, + {0xd4,0xb1,0x93,0x2d,0x60,0x5f,0x2d,0xd7,0xdd,0x6c,0x85,0x9b,0xbf,0x53,0xc7,0x1c,0x8e,0x44,0xdf,0xbd,0x0f,0x86,0xec,0x72,0x46,0xe2,0x5d,0x4f,0x8e,0xdc,0x71,0xcb,0x2b,}, + {0xd4,0xed,0xba,0x6d,0x61,0xbf,0x6f,0xa4,0x3b,0x72,0x39,0x2c,0xbf,0xef,0xd6,0xd8,0x71,0x4b,0x1c,0x63,0xaf,0xe8,0xda,0x88,0xfc,0x34,0x5d,0xad,0x2a,0x1f,0x79,0xcc,0x1e,}, + {0xd4,0xed,0xab,0x2d,0x68,0x5f,0x30,0x4a,0xe4,0xb6,0xc7,0x10,0x5f,0x90,0x0c,0xe2,0xb1,0xb8,0xe3,0xbd,0xcc,0x40,0xa5,0x4f,0x39,0x15,0xbd,0xd0,0x46,0xe6,0x19,0xc7,0x13,}, + {0xd4,0xea,0xc2,0x9a,0x60,0x5f,0x2d,0xbe,0x74,0x62,0xe8,0xa2,0xbc,0x8f,0xb8,0xac,0x8e,0x21,0xe3,0xbd,0x2c,0x46,0xe9,0xcf,0x0a,0xc4,0xb8,0xab,0x57,0x9e,0x97,0x7c,0xd8,}, + {0xd4,0x27,0xb9,0x5e,0x98,0xbd,0x29,0x93,0xe5,0x32,0xc8,0x61,0xbc,0xa8,0x30,0x5f,0x99,0xb7,0x64,0xb8,0x27,0xc4,0x81,0x0a,0x3b,0x24,0xb8,0x63,0x5f,0xf2,0x68,0x34,0x9b,}, + {0xd4,0x58,0xa1,0x99,0xf2,0xc2,0x21,0xdb,0x66,0xfe,0x2b,0x3a,0xdc,0x21,0x6d,0xac,0x72,0x46,0x70,0xd0,0x61,0x3c,0xec,0x92,0x46,0xd4,0xb8,0xc0,0xc8,0xf0,0x76,0x39,0x11,}, + {0xd7,0xd1,0x91,0xd8,0x9a,0xe6,0xa0,0xbb,0x62,0xc1,0x39,0x6b,0xaa,0xc0,0xb2,0xe1,0x6d,0xa4,0xa4,0xaa,0x80,0xb6,0x93,0x85,0xc4,0xdb,0xea,0xc0,0xb6,0xad,0x89,0x33,0x9a,}, + {0xdb,0xee,0xc2,0xd9,0x11,0xf1,0xc4,0x36,0xdb,0x4d,0x32,0x90,0x50,0xe7,0xa4,0x58,0x8c,0x54,0x9c,0x6b,0x68,0xb8,0xd5,0x3c,0xb5,0x8e,0x71,0xca,0x43,0x4f,0xa2,0xc5,0x26,}, + {0xdb,0x6a,0xcc,0xe0,0xa2,0x9d,0x8a,0x89,0x92,0xeb,0xa3,0xd4,0x81,0x6b,0xc4,0xe3,0xa4,0xbe,0x49,0xbf,0x2e,0x48,0x0b,0x80,0xc8,0x93,0xa6,0xcc,0x98,0xa1,0x4d,0xa2,0x85,}, + {0xd7,0x9d,0xb1,0xc8,0xd0,0xbe,0xcc,0x86,0x21,0x66,0x27,0x65,0xe2,0x08,0x03,0x5a,0x94,0xbf,0x9c,0x58,0x22,0x6f,0xb4,0xdb,0x68,0x93,0x76,0x41,0x69,0x2d,0xb7,0x7d,0x12,}, + {0xd3,0x56,0x71,0x59,0x62,0xc8,0x00,0xab,0x6e,0x91,0xa7,0x16,0xb8,0x20,0x93,0x2d,0x8d,0xb7,0x1c,0xee,0x20,0x42,0xda,0x76,0x38,0xa4,0xd0,0x80,0x47,0x39,0x6e,0x5b,0x1b,}, + {0xdb,0x21,0xaa,0xd0,0x5b,0x59,0xf1,0xc9,0x48,0xb2,0xc9,0xdb,0x62,0xd0,0x45,0xe3,0xd1,0xba,0x93,0x8c,0x2d,0x10,0xb6,0x30,0x99,0x23,0xee,0x4e,0x15,0x01,0x27,0x38,0xc9,}, + {0xd8,0x9b,0x7c,0x48,0x29,0xbe,0x26,0xbf,0x18,0x52,0x36,0xda,0xb8,0x02,0x2f,0x10,0xae,0x6d,0x61,0xf0,0x41,0xee,0xbe,0xbc,0xd4,0xf7,0xa0,0xe2,0xb9,0xad,0x18,0xe8,0xeb,}, + {0xd8,0x5b,0xab,0x10,0x81,0xe8,0x01,0x67,0x6a,0xa2,0x5d,0x92,0x9e,0x41,0x1c,0xed,0x96,0x46,0xe2,0xd0,0x01,0x3b,0xaa,0xf5,0x58,0xec,0x50,0x40,0x69,0x6c,0xba,0xdb,0x6d,}, + {0xd0,0x60,0xa2,0xe1,0x5a,0xa8,0x20,0x49,0x24,0x8e,0x56,0xe3,0xf0,0x00,0x46,0xdc,0x4e,0x37,0x1b,0xe4,0x20,0x36,0xdb,0x6d,0xb6,0xe4,0xda,0x00,0x39,0x1b,0x71,0xc9,0x24,}, + {0xd0,0x5f,0xaa,0xe1,0x5a,0x6c,0x40,0x49,0x24,0x92,0x49,0x23,0x94,0x00,0x49,0x1c,0x92,0x49,0x24,0x6a,0x00,0x49,0x24,0x92,0x49,0x24,0x5e,0x00,0x47,0x24,0x92,0x49,0x24,}, + {0xd0,0x5f,0xa2,0xe1,0x5a,0x52,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x48,0xe4,0x92,0x49,0x24,0x76,0x00,0x49,0x24,0x92,0x49,0x24,0x5a,0x00,0x49,0x24,0x92,0x47,0x24,}, + {0xda,0x64,0xaa,0x9c,0xd1,0x6f,0xc4,0x75,0x1c,0x92,0x49,0x24,0x52,0x40,0xdd,0x75,0xb6,0xdb,0x6d,0xa2,0x20,0xdb,0xad,0xb6,0xdb,0x6d,0xec,0x60,0xeb,0xad,0xb6,0xdb,0x6d,}, +}; +static const gsm_frame gsm_data_sedmnact[] = { + {0xd2,0x18,0x7b,0x65,0xa1,0x50,0x40,0x4b,0x75,0xba,0xfd,0xe6,0x53,0xe0,0x46,0x9b,0x49,0x94,0x60,0x84,0xe0,0x46,0x9b,0x11,0xb2,0x90,0x58,0xe0,0x24,0x91,0x89,0xb2,0x1d,}, + {0xd8,0x1b,0x58,0xc8,0xc8,0x51,0xc1,0x24,0x91,0x6d,0x90,0x15,0x50,0xa2,0x84,0xdd,0x1b,0x10,0xfe,0x69,0x62,0x2b,0x72,0xba,0xce,0x86,0xa7,0xa6,0x69,0x5d,0xc9,0xca,0x7c,}, + {0xd9,0xe8,0xeb,0xed,0x59,0x65,0xc7,0x37,0x0d,0x6f,0x07,0x3a,0x51,0xeb,0x5b,0x3b,0x96,0xdb,0x23,0x7f,0x0b,0x69,0x72,0x95,0xca,0xbb,0x71,0x0c,0x4a,0xd5,0xc7,0xa9,0x3a,}, + {0xda,0x66,0xf3,0x65,0xac,0x75,0x4c,0xf4,0xdc,0xd3,0x68,0xe7,0x5b,0x4a,0x8e,0xd3,0xaf,0x09,0xb3,0x63,0x0e,0xad,0x60,0x7a,0x59,0x5b,0x62,0xee,0xf7,0x2a,0xba,0xb5,0x1e,}, + {0xdb,0x68,0xc4,0x69,0x62,0xa3,0x2f,0x3c,0x3f,0x56,0xb9,0x2b,0x8a,0xf0,0x3b,0x05,0x98,0xcb,0x01,0xdd,0x52,0x5e,0x16,0xa9,0xba,0xdb,0x76,0xcf,0xb7,0x2a,0xd0,0x4e,0x1c,}, + {0xdb,0x65,0xf4,0xa8,0xea,0xb2,0x8d,0xd9,0x20,0xa6,0x38,0xe3,0x86,0xce,0x26,0xb9,0x54,0xd8,0x22,0xe2,0xaf,0xd7,0x21,0x9d,0x8d,0xa3,0x94,0xcd,0x77,0x87,0x8e,0x2e,0x9d,}, + {0xdb,0x67,0xc4,0xad,0x6a,0xcf,0x51,0xb7,0x1b,0xb6,0x18,0xfa,0xd4,0xf1,0x28,0xe2,0x6e,0x89,0x8d,0x80,0x8f,0x89,0x1f,0x69,0x47,0x29,0x76,0xce,0x9a,0xeb,0x55,0x80,0xe9,}, + {0xd9,0xa3,0xaa,0x0c,0xda,0xb2,0x6c,0xb1,0xa1,0x92,0x44,0xe9,0x8c,0x29,0xc3,0x2f,0xa9,0xa9,0x2b,0xd2,0x2c,0x2f,0x1b,0x8a,0x59,0x13,0xca,0xab,0xb8,0x93,0xba,0x5d,0xfc,}, + {0xd4,0xe3,0x7a,0xab,0x50,0x59,0xf4,0xb4,0x89,0x57,0xeb,0x23,0x50,0xd4,0xb4,0x5f,0xad,0xb9,0x24,0x57,0x31,0xb6,0xd2,0xe6,0x38,0xdd,0xad,0xb1,0xc4,0xeb,0x5c,0x37,0x1a,}, + {0xd5,0x25,0x9a,0x6e,0x98,0x59,0x51,0xc9,0x5a,0x2b,0xc3,0x25,0x57,0xaf,0x37,0xb3,0x60,0xe3,0x25,0x57,0xf1,0x49,0x9b,0x6a,0xd0,0x6f,0x61,0x51,0x43,0x34,0x4c,0xa9,0x03,}, + {0xd6,0x1f,0x81,0x1e,0x78,0xbc,0xce,0x3f,0x0d,0xfa,0x34,0x59,0xc1,0x14,0x43,0xea,0x6e,0xc7,0x1b,0x61,0x0e,0xb5,0x18,0xf1,0xe4,0xdd,0xc4,0x8c,0xd8,0x83,0x63,0x03,0x76,}, + {0xd1,0x9c,0xd3,0xb6,0xe8,0xc0,0x6a,0xfb,0x1b,0x48,0xa3,0x2c,0xdc,0x45,0xd7,0x62,0x89,0x30,0x95,0xb0,0x46,0xf6,0x95,0xac,0xca,0xcc,0xc4,0x45,0x2b,0xe2,0x97,0x46,0x9c,}, + {0xd0,0xa9,0xcb,0xfa,0x60,0x64,0xc2,0xa4,0xc8,0xbd,0xbb,0xaa,0xc4,0xc1,0xdc,0xd5,0x67,0x78,0xe1,0x62,0xc2,0x34,0x5c,0x66,0x33,0xbb,0xc0,0xe2,0x35,0x90,0x76,0x26,0xd4,}, + {0xda,0x94,0x72,0x8e,0x64,0x7b,0xcd,0xc9,0x2e,0xff,0x44,0x49,0x61,0xf5,0x36,0xe4,0x92,0x0e,0x9e,0x50,0xb3,0xa1,0x50,0xb2,0x58,0xed,0x96,0xd2,0x58,0xc9,0x01,0x6f,0x15,}, + {0xd4,0x9c,0x8a,0x22,0xf8,0x58,0xf4,0x4b,0x64,0x49,0x21,0xa4,0x60,0x0d,0x0f,0x6e,0xd2,0xa0,0x81,0xb8,0xb1,0xf6,0x9b,0xb6,0x49,0x72,0xc4,0x2e,0xc0,0x78,0x72,0x3d,0xb7,}, + {0xd1,0x68,0xca,0xee,0x29,0x56,0xee,0xc4,0x02,0x2d,0xc9,0x24,0xb6,0x09,0xe7,0x8a,0x23,0x3a,0x62,0xc0,0x09,0xeb,0x6a,0xc5,0x81,0xdd,0x61,0x45,0xa7,0x2c,0xf2,0x94,0x87,}, + {0xd1,0x68,0xbb,0x2a,0x69,0xcc,0xc8,0xb8,0x9c,0xf6,0xd7,0x00,0xc1,0x86,0x77,0x24,0x51,0xb8,0xe3,0x61,0x26,0x14,0x06,0x51,0xb7,0x2d,0x63,0x83,0xf1,0x84,0xc6,0xac,0xe2,}, + {0xd0,0xea,0xbb,0xea,0x69,0xc3,0x27,0x59,0x2b,0xa6,0x15,0xe4,0xc3,0x25,0x22,0xb3,0xad,0xc1,0x14,0xc3,0x43,0x79,0x10,0xd6,0xf5,0x43,0xc3,0x27,0xa7,0xb9,0x51,0x5c,0x6c,}, + {0xd2,0xe2,0xa9,0x2e,0xa8,0x69,0xcd,0xc7,0x18,0x9c,0xab,0x2c,0x61,0xac,0x49,0xdd,0x0b,0x09,0x1c,0x61,0x6b,0x4b,0x66,0x52,0x16,0x3c,0x65,0xab,0x2b,0x6c,0x8a,0x8a,0x1a,}, + {0xd4,0x1f,0x92,0x22,0x68,0x61,0x4b,0x8e,0xce,0x97,0x6b,0x9d,0xc3,0x2d,0x84,0x07,0x6e,0xbd,0xda,0x61,0x0d,0x6c,0x66,0x0f,0xc1,0xe1,0x68,0xed,0x79,0x24,0x00,0x58,0x6e,}, + {0xd1,0x2a,0xa3,0xf2,0x59,0xb6,0x4a,0xdf,0xf6,0xd1,0x10,0xe2,0xc8,0x49,0x44,0xec,0xb1,0xd4,0x88,0x92,0x27,0xf8,0x3a,0x3e,0xed,0x71,0x63,0x66,0x91,0xe2,0xc9,0xd7,0xe4,}, + {0xd1,0xa9,0x93,0x76,0x19,0x61,0x24,0xd6,0x88,0x51,0x4c,0x6e,0xc3,0x26,0xe9,0x2b,0x48,0x18,0xe6,0xc3,0xa4,0x57,0x5b,0xc9,0x50,0xf8,0x61,0xc4,0xd4,0x6c,0x57,0x09,0x4f,}, + {0xd4,0xe8,0x69,0xae,0x88,0x61,0xa9,0x20,0x9d,0xfa,0xed,0xfd,0x59,0xf0,0x90,0xe2,0x95,0x47,0x13,0x6d,0x71,0xc4,0xa4,0x2f,0xa9,0x5d,0x61,0x2f,0xab,0x67,0x4a,0x13,0x31,}, + {0xd5,0x69,0x90,0x7e,0x48,0x5e,0xf0,0xe7,0x25,0xb5,0xc6,0x09,0xc1,0x0d,0x62,0xac,0x72,0x7c,0xbb,0x61,0x4e,0x03,0xcc,0xb5,0xcb,0x1e,0x61,0x4e,0xc7,0x09,0xc3,0xa9,0x55,}, + {0xd4,0xeb,0xb2,0xe9,0xa8,0xc5,0xd4,0x45,0x53,0x69,0xf5,0x5b,0x63,0x32,0xe9,0x2d,0x75,0xb8,0x1c,0x61,0x50,0x2c,0xa4,0x96,0xc7,0x08,0xc5,0x6e,0xe0,0xe4,0x8f,0x67,0xc9,}, + {0xd4,0xeb,0xab,0x2d,0xa0,0x61,0x8d,0x58,0xc5,0xc7,0x51,0x53,0xc1,0x8e,0xc5,0x29,0x94,0x75,0x22,0xc1,0x50,0x4b,0x22,0x85,0x1e,0x6b,0xc1,0xb2,0xc8,0xe4,0x71,0xc9,0x07,}, + {0xd4,0xec,0xa2,0xf1,0x60,0x63,0x10,0x7b,0x1c,0x92,0x57,0x19,0x63,0x30,0x9e,0x2a,0x91,0xd9,0x22,0xc3,0xce,0x2b,0x68,0x6d,0xd4,0xe2,0xc1,0x31,0x48,0xe3,0x27,0x9b,0x24,}, + {0xd4,0xf0,0x83,0xa9,0xa0,0xc1,0x6f,0xca,0xea,0x6c,0x1e,0x9d,0xc1,0xe8,0xb5,0x21,0x31,0xb8,0xc0,0x58,0xcd,0x8b,0x73,0xbb,0xe7,0x58,0xc1,0x2f,0x1e,0x2b,0x75,0xd9,0x64,}, + {0xd5,0x2a,0xc2,0x69,0x69,0xc1,0x50,0xb4,0x87,0x2e,0xb9,0x25,0x61,0xaf,0x4a,0xe4,0x32,0x8c,0xd6,0x63,0x50,0xd9,0x64,0x70,0x93,0xcc,0xc3,0x51,0xc7,0x24,0xae,0x36,0x4f,}, + {0xd5,0x2d,0xa3,0x2a,0x21,0x6e,0xd2,0x29,0xa4,0x96,0xe6,0xd8,0x61,0x71,0x8a,0xa3,0xb1,0xdb,0x2b,0xc1,0xcf,0xb7,0x1b,0x19,0x49,0x53,0xc1,0x2f,0xbe,0xec,0x65,0xea,0xa2,}, + {0xd4,0xea,0xe1,0xe5,0xe0,0xc0,0xf0,0x37,0x6c,0x8d,0x0d,0x1c,0x63,0xee,0x29,0x63,0x6a,0x2a,0xef,0xca,0xec,0x29,0x5c,0xba,0xf8,0x81,0x61,0x6d,0x09,0x64,0x92,0x4b,0x6c,}, + {0xd3,0xe5,0xd8,0xe5,0xa0,0xc0,0xcd,0xb6,0x46,0x92,0xb7,0x24,0xc0,0xa8,0x57,0x05,0x0a,0xd9,0x9a,0xbc,0x28,0x3d,0x34,0x68,0xa0,0xe3,0xe8,0x23,0xed,0xd5,0x92,0xd6,0x92,}, + {0xd6,0x5a,0xa9,0x84,0xa1,0xee,0x22,0xb7,0x2d,0xfd,0x46,0xe3,0xca,0x41,0x77,0x5e,0x9a,0xc6,0xdb,0xe4,0x41,0x21,0x6d,0x70,0xab,0x64,0x5c,0xe0,0xb4,0xde,0xee,0x54,0x8d,}, + {0xd6,0x17,0x69,0x11,0x22,0x54,0x80,0xbd,0xac,0x4a,0x64,0xa2,0xe8,0xe0,0xc7,0x1b,0x71,0x48,0x5b,0xb6,0xe0,0xd4,0x94,0x4d,0xb9,0x11,0xde,0xc0,0x64,0x1b,0x5a,0xc5,0xf1,}, + {0xdb,0x6b,0xcc,0xa4,0x91,0x7d,0xe3,0xb6,0xdb,0x6d,0x10,0x8a,0x51,0x28,0xa6,0x92,0x91,0x41,0x53,0x53,0x26,0xa0,0xe3,0x45,0xb2,0x7e,0xaf,0xcc,0x3a,0xd7,0x36,0x99,0xa2,}, + {0xdb,0xa6,0xd4,0x5c,0x9a,0x5b,0x0b,0xe6,0x26,0x51,0xb7,0x1a,0x84,0xad,0x93,0x9a,0x51,0x93,0x60,0x96,0xca,0x1b,0x05,0x49,0x28,0x15,0xb6,0xaf,0xb6,0x9b,0x4c,0xc1,0x03,}, + {0xd7,0x5c,0xb1,0xcc,0x90,0x50,0x0c,0x02,0x04,0x34,0x0a,0xd4,0x72,0x47,0x19,0xfc,0x92,0xd9,0x5d,0x6e,0x41,0xef,0xe3,0x71,0xcb,0x6c,0x96,0x21,0x59,0xbd,0x48,0xbb,0x6c,}, + {0xda,0xe6,0xa3,0x58,0x13,0xe4,0x41,0x27,0x26,0xae,0x49,0x25,0xee,0xe1,0x5d,0x76,0xd6,0xe9,0x26,0x73,0xb0,0x47,0x24,0x8e,0x3e,0xc6,0x52,0xf2,0x67,0x7b,0x75,0x6a,0xec,}, + {0xd8,0x61,0xd1,0xc8,0x2c,0x76,0x2e,0x31,0xd3,0x85,0xa6,0xd5,0x70,0x2c,0x15,0x13,0xa4,0x81,0x55,0xda,0x48,0x22,0xc2,0x71,0xa0,0x73,0xea,0x8c,0x01,0xe2,0xa9,0xc8,0xdb,}, + {0xd7,0xdf,0xdc,0x54,0x09,0x82,0x02,0x32,0x8c,0x71,0x6e,0x9c,0xd2,0x22,0x19,0x6c,0x89,0x7b,0x2e,0xf0,0x02,0xf2,0xde,0x92,0xc9,0x64,0x82,0x21,0x52,0xfe,0xc9,0x35,0x64,}, + {0xd5,0x99,0x72,0x8c,0x49,0xc0,0xe0,0xc8,0xa0,0xcd,0xa9,0xa2,0xea,0x41,0x68,0xab,0x71,0xb9,0x23,0xaa,0x20,0x49,0x24,0x92,0x49,0x24,0xe8,0x60,0x39,0x24,0x91,0xc9,0x23,}, + {0xd0,0x5f,0xaa,0xe1,0x59,0xc0,0x00,0x47,0x24,0x92,0x49,0x24,0xa2,0x60,0x46,0xe4,0x72,0x38,0xdb,0xe8,0x20,0x37,0x23,0x91,0xc6,0xdc,0x7e,0x20,0x49,0x24,0x92,0x49,0x23,}, + {0xd0,0x5f,0xa2,0xe1,0x22,0xb2,0x00,0x49,0x24,0x92,0x49,0x24,0x7a,0x00,0x49,0x24,0x92,0x47,0x24,0xcc,0x00,0x49,0x24,0x92,0x49,0x24,0x5c,0x00,0x49,0x24,0x92,0x39,0x24,}, + {0xd0,0x5f,0xa2,0xe1,0x22,0x60,0x00,0x49,0x24,0x92,0x49,0x24,0x56,0x00,0x49,0x24,0x92,0x39,0x24,0x62,0x00,0x49,0x24,0x92,0x49,0x24,0x7e,0x00,0x49,0x24,0x92,0x49,0x24,}, +}; +static const gsm_frame gsm_data_osmnact[] = { + {0xd4,0xd6,0x71,0x9c,0xda,0x50,0x20,0x26,0x93,0x4d,0xb0,0x94,0x62,0x80,0xcb,0x34,0x89,0xb9,0x1d,0x70,0xc0,0xd6,0xd3,0x90,0xa5,0x23,0x62,0xa0,0x68,0x92,0x16,0x0b,0x23,}, + {0xd4,0xdd,0xfb,0x04,0xbc,0x95,0x40,0xc8,0x9a,0x69,0xa6,0x8b,0x57,0x80,0x94,0x93,0x4d,0xc6,0x9d,0x57,0xe9,0xb8,0xdb,0x6e,0x37,0x27,0x57,0xab,0x72,0x7c,0x4e,0x39,0x24,}, + {0xd3,0xa3,0xfa,0xcd,0xb2,0x6e,0xee,0xc9,0x1a,0x41,0xf4,0xa4,0x53,0xae,0xdb,0x5d,0x86,0x0e,0xd5,0x56,0xce,0x37,0xa4,0xad,0x03,0xd9,0xb0,0xef,0xd7,0x24,0xac,0xa1,0xe0,}, + {0xd3,0xef,0xd0,0x8e,0x61,0xc0,0xcc,0x49,0x3c,0x76,0x36,0x48,0xb8,0x0b,0x2f,0x1d,0x72,0x4b,0x2c,0xc4,0x2c,0xa2,0x35,0x91,0xc9,0x6c,0x61,0x47,0xb8,0x61,0x11,0xd7,0x9c,}, + {0xd3,0x29,0xb8,0x95,0xb0,0xc0,0x88,0xd7,0xdc,0x30,0x1e,0xa5,0xbe,0xc6,0xd9,0x5e,0x89,0x50,0x6b,0xb6,0xa7,0x59,0x96,0xb5,0x3a,0x19,0x68,0xa7,0xcb,0x2d,0xb2,0xba,0x30,}, + {0xd7,0xd9,0x92,0x14,0x63,0xbc,0xab,0x28,0xdb,0xaa,0x7d,0x19,0x58,0xca,0xb2,0x1b,0x58,0xc1,0xd6,0x6c,0xcb,0x83,0x4a,0xa9,0xd2,0xe2,0x87,0x2c,0xc6,0xa3,0x29,0xc4,0x9f,}, + {0xdb,0x2a,0xab,0x14,0x50,0xe9,0x4f,0x98,0xea,0x52,0x84,0xd3,0x83,0x0d,0x9e,0x84,0x89,0xb6,0xea,0x7b,0x4f,0x1b,0x1c,0x95,0x5a,0xbb,0xcd,0x4e,0xcb,0xaa,0xdc,0xfb,0x34,}, + {0xda,0xac,0xaa,0xdc,0x58,0x60,0xb0,0xba,0xeb,0xad,0xf6,0xed,0x53,0x0d,0x1e,0xfb,0x3b,0x9e,0xec,0x5b,0x2e,0xd7,0xc7,0x6f,0x3a,0x7a,0x72,0xce,0xbb,0x6c,0x95,0xf7,0x35,}, + {0xda,0x69,0x9a,0x10,0x50,0xc6,0xed,0xe7,0x1f,0x5a,0x38,0xed,0x73,0x4e,0xa7,0x1c,0x19,0x62,0xe9,0x6a,0xac,0x66,0xf5,0x4f,0x47,0x38,0xb2,0xa9,0xdd,0x34,0x52,0xc3,0xe9,}, + {0xdb,0x28,0x99,0xe0,0x90,0xf0,0xcc,0xe8,0x6d,0x92,0x2b,0x5f,0xaa,0xc9,0x1e,0x6d,0x5b,0x9c,0xd4,0xb2,0x88,0x3a,0xb8,0xb6,0x27,0x2a,0xcc,0x6a,0x3b,0x14,0x71,0xc0,0xb6,}, + {0xd0,0xaa,0xd4,0x31,0xe2,0x50,0x91,0x49,0x6d,0x88,0x80,0x5b,0x52,0x27,0xc8,0xa4,0x75,0xd7,0x1f,0xb4,0x63,0xf4,0x0d,0x96,0xdc,0x98,0xe2,0x08,0x23,0xe5,0xae,0x5d,0x64,}, + {0xd0,0xed,0xbb,0x69,0x9a,0x5e,0xc5,0x10,0x5f,0x76,0x1b,0x6d,0xbe,0xe4,0xc8,0x50,0x3c,0xda,0xe5,0x61,0x63,0xdb,0x63,0x64,0x8e,0xa4,0x63,0x64,0x2b,0x2d,0x91,0xb2,0x97,}, + {0xd0,0xeb,0xd3,0xad,0x9b,0xb9,0x05,0x07,0xa0,0x73,0x6d,0x64,0x61,0x26,0x35,0xcc,0x89,0xcb,0x2c,0x61,0x23,0xb6,0x0a,0xed,0xd5,0x65,0xc3,0x23,0xd9,0x13,0x06,0xba,0xe3,}, + {0xd3,0x5d,0x7b,0x26,0x61,0xc7,0xcd,0xc9,0x23,0x6e,0x04,0xd3,0x63,0xae,0xf8,0xf5,0x4f,0xd2,0x78,0x55,0x71,0xf2,0xaa,0x72,0x3b,0x63,0x5a,0x2c,0x00,0xa3,0xd2,0x6b,0x75,}, + {0xd1,0xa7,0xab,0x6d,0xe1,0xc8,0x4e,0x24,0x43,0x8e,0x49,0x25,0xc2,0x4b,0x4b,0x13,0x23,0x37,0x93,0xc0,0xa7,0xd7,0xa3,0xa9,0x91,0xe9,0xc3,0x06,0xd2,0xab,0xb2,0x62,0xd0,}, + {0xd2,0x27,0x83,0x7a,0x59,0xc3,0x04,0x78,0xb3,0x76,0x7b,0x69,0x61,0x05,0x90,0x58,0x74,0xdb,0x7e,0xc1,0x46,0x54,0x80,0xa1,0xd3,0x6c,0x61,0xc6,0x3c,0xa5,0x1b,0x27,0x23,}, + {0xd5,0x29,0x79,0x36,0x88,0x5f,0xce,0x49,0x24,0xb2,0x10,0x0e,0x59,0x50,0x76,0xe6,0x8e,0xf7,0x70,0x6f,0x71,0x3e,0xe5,0x72,0x49,0x9a,0x5f,0x30,0xb8,0x15,0x4e,0xc9,0x1c,}, + {0xd5,0x6b,0x70,0xfa,0x40,0xbf,0x30,0x49,0x53,0x0b,0x89,0x1d,0x63,0x4f,0x49,0x5c,0x6c,0x2e,0x6d,0xc2,0xb0,0x49,0x1d,0xb2,0x36,0x06,0xc3,0x70,0xd9,0x23,0x5a,0x2a,0x1c,}, + {0xd4,0xec,0xab,0x29,0xe8,0xc5,0xb4,0xb7,0xcc,0x6e,0x49,0x23,0x65,0x73,0x46,0x83,0x35,0xda,0xe5,0xc5,0x52,0xdd,0x24,0x41,0x38,0xec,0x61,0xd0,0xc8,0xe3,0x71,0x37,0xc6,}, + {0xd4,0xec,0x9b,0x2d,0xa0,0xc1,0x4e,0x45,0xd5,0xce,0xa6,0x48,0x63,0x8e,0x71,0x23,0x8a,0xb6,0xcc,0x61,0xac,0x2a,0xe7,0x52,0x28,0xdd,0xc1,0xcc,0xe5,0x6a,0x5c,0xb8,0xa4,}, + {0xd4,0xed,0x9b,0x2d,0x68,0xc1,0x70,0xd9,0x1c,0x44,0x73,0x22,0xc3,0x8d,0x49,0x5b,0x86,0xc5,0x20,0x61,0x4f,0xc9,0x23,0xb5,0xd6,0xd0,0x61,0xad,0x0e,0xdd,0x4e,0x39,0x1b,}, + {0xd4,0xed,0xa3,0x2d,0x61,0xc1,0xed,0xd6,0x3b,0x95,0x46,0xe4,0x61,0xec,0x48,0xaa,0xaa,0x09,0x16,0x63,0x4f,0x4b,0x23,0x60,0x73,0x25,0xc1,0x8b,0x87,0x1b,0x55,0x56,0xc7,}, + {0xd5,0x2c,0xb2,0xed,0x28,0x5f,0x2d,0xd5,0x71,0xef,0xcc,0xb2,0x65,0x31,0x3e,0x9d,0xae,0x4d,0x1b,0xc3,0xad,0xc4,0xba,0x8b,0x47,0x5e,0x61,0x90,0xb8,0x9c,0x87,0xa9,0x1b,}, + {0xd5,0x2d,0xb2,0xad,0xa8,0xc1,0xae,0x35,0x64,0x52,0x8f,0x8d,0x61,0xca,0xeb,0xe5,0x8c,0xd5,0xd0,0x6e,0xd1,0x2c,0xec,0x96,0x54,0xd0,0xc1,0x6c,0x8f,0x9b,0x34,0xa7,0xe7,}, + {0xd4,0xa9,0xe1,0x29,0x98,0xc0,0xd0,0x26,0x34,0x8e,0xb9,0x24,0xc0,0xcc,0xba,0x61,0x1e,0xc9,0x24,0x61,0x49,0xd9,0xa2,0x48,0x25,0xe4,0xc0,0xab,0x3a,0xf5,0xd5,0xa2,0x02,}, + {0xd3,0x21,0xa1,0x15,0xb9,0xca,0xc8,0x1c,0xdc,0xce,0xb0,0x13,0x62,0x03,0x9f,0x9c,0xad,0xd9,0x6c,0xba,0x02,0x43,0x34,0x61,0xc8,0xe4,0xee,0x21,0xc9,0x50,0x4e,0x29,0x6e,}, + {0xd6,0xd8,0xb1,0x50,0x69,0xce,0x40,0xe9,0x2c,0x83,0xaa,0xb2,0xde,0x00,0xfd,0x2c,0x91,0x11,0xf6,0x80,0xc0,0xd0,0xad,0x91,0xa2,0xad,0x8c,0x80,0xf7,0x59,0x6e,0x48,0x9b,}, + {0xd9,0xe0,0x61,0x10,0x60,0xec,0xe0,0xc2,0x92,0x69,0x36,0x8a,0xb4,0x81,0x37,0x18,0x6d,0x38,0xe4,0xb7,0x21,0x39,0xa2,0x49,0xae,0x9a,0xd7,0xe1,0x9a,0xe3,0x51,0xae,0x59,}, + {0xdb,0x6a,0xc3,0xea,0x22,0x93,0xc3,0x86,0xea,0x10,0x30,0xca,0x61,0xc8,0x21,0x59,0x40,0x90,0x8b,0x5b,0x28,0x90,0x6d,0x23,0xb6,0xbd,0x5b,0x4e,0x38,0xb2,0xed,0x48,0xa3,}, + {0xda,0xe1,0xa2,0xd4,0x50,0x7c,0xab,0x46,0xec,0x49,0xe8,0x1d,0xca,0x8a,0xa2,0x9f,0x65,0xd5,0x4b,0xee,0xad,0x1a,0xda,0x2d,0xd3,0xc8,0xb6,0x89,0x54,0x4e,0x0f,0x59,0x5c,}, + {0xd2,0x95,0x82,0x55,0x1a,0xe4,0x62,0x77,0x76,0xba,0x46,0xeb,0xee,0x01,0xe7,0x66,0xb7,0x2c,0x37,0xce,0x00,0xe6,0x9c,0x89,0xb8,0xaa,0xac,0x20,0x99,0x24,0x91,0xb6,0xeb,}, + {0xd8,0xa1,0xe9,0xc9,0x64,0xee,0x80,0x06,0xd4,0x72,0xcf,0xf6,0xe9,0xed,0xc9,0x1c,0x96,0x4f,0x05,0x58,0x8c,0x7e,0x7e,0x4f,0x16,0xca,0x76,0x2c,0xa6,0x62,0x2d,0x28,0xc8,}, + {0xd7,0x9c,0xba,0x4c,0x79,0xd2,0x2c,0x86,0x64,0x6d,0xa7,0x1b,0x72,0xeb,0x25,0x4a,0xa3,0x47,0x1b,0xbe,0x06,0x85,0xa3,0x49,0xb5,0x14,0x9e,0x41,0x99,0xa3,0x18,0xc3,0x1e,}, + {0xd8,0x1d,0xc4,0x18,0x10,0xd2,0x01,0x5b,0xe3,0x8d,0xef,0x54,0xe8,0x62,0xb9,0x2e,0xb8,0x55,0xab,0x56,0x21,0x69,0x2c,0x99,0xeb,0x23,0x7e,0x81,0x29,0xec,0xf2,0x5b,0x2d,}, + {0xd0,0x60,0xa2,0xe1,0x62,0xdc,0x40,0x5b,0xb7,0x9a,0x49,0x24,0x98,0x00,0x36,0xe2,0x6d,0xb6,0xdc,0xec,0x20,0x36,0xe2,0x6d,0xb6,0xdc,0xee,0x20,0x36,0xdb,0x6d,0xb7,0x24,}, + {0xd0,0x60,0xa3,0x21,0x5a,0xd0,0x00,0x48,0xe3,0x72,0x49,0x1c,0x72,0x00,0x49,0x24,0x92,0x49,0x23,0xa0,0x00,0x49,0x24,0x92,0x49,0x24,0x68,0x40,0x48,0xe4,0x92,0x49,0x23,}, + {0xd0,0x60,0xa3,0x21,0x5a,0x7c,0x00,0x49,0x24,0x92,0x48,0xe4,0xac,0x40,0x49,0x24,0x92,0x49,0x23,0xb6,0x00,0x49,0x1c,0x92,0x49,0x24,0x84,0x00,0x49,0x24,0x92,0x47,0x24,}, + {0xd0,0x5d,0xa2,0xe1,0x1a,0x54,0x00,0x49,0x24,0x92,0x49,0x24,0x98,0xe0,0x38,0xdb,0x6e,0x36,0xdb,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0xa2,0x00,0x47,0x24,0x92,0x49,0x24,}, +}; +static const gsm_frame gsm_data_devatenact[] = { + {0xd3,0x9a,0x38,0x99,0xd1,0x50,0x00,0x59,0xae,0xde,0xf5,0xa3,0x53,0x60,0xc6,0xa5,0x6a,0xc4,0xe6,0x71,0x60,0x76,0x3a,0x53,0x09,0x20,0x6b,0x41,0x4a,0x75,0x91,0xb6,0x8a,}, + {0xd1,0x27,0xec,0xa9,0xda,0x65,0x21,0x48,0xe4,0x52,0x58,0x90,0x96,0xe0,0xd6,0xa4,0xd7,0x48,0x89,0x86,0xc0,0xc6,0xe5,0xfe,0xc8,0x48,0xe6,0xa1,0x04,0xe7,0xfa,0x0e,0xcf,}, + {0xd0,0xec,0xec,0x6d,0x2b,0x50,0xc2,0x06,0xd6,0xae,0x39,0x2a,0x9e,0xa1,0xa4,0x17,0x6e,0x39,0xa2,0x54,0xa1,0x30,0xb5,0x8c,0xcd,0x62,0x50,0x80,0xb0,0x85,0x76,0x3b,0x24,}, + {0xd5,0x9b,0x69,0x61,0xe3,0xa5,0x23,0xb4,0xd2,0x53,0x7f,0x5a,0x52,0xa4,0x02,0x54,0xbf,0x6a,0xd1,0x54,0xa2,0x82,0x92,0xba,0xdd,0xa2,0xc9,0xed,0xb4,0xdb,0x92,0xc9,0x1f,}, + {0xd5,0x1c,0x7b,0x3e,0x60,0x5b,0x8d,0xa5,0x18,0x6d,0x4b,0x75,0x77,0xf1,0xb6,0x40,0xce,0x59,0x2e,0x53,0x70,0x35,0x11,0xed,0x49,0x26,0xa5,0x50,0xc7,0x21,0x7d,0x29,0x25,}, + {0xd5,0x5d,0x7b,0xb6,0x58,0x53,0xab,0xd6,0xe0,0x1c,0xfe,0xe4,0x53,0x8e,0xdb,0x5b,0x87,0xb9,0x1c,0x53,0x8d,0x05,0x23,0x74,0xd6,0x6c,0xa5,0xcc,0x0a,0x25,0x52,0x93,0x32,}, + {0xd4,0xdf,0x92,0xb5,0xd8,0x53,0xcc,0x25,0x69,0x3c,0xda,0x27,0x55,0x4f,0x39,0x2a,0x4d,0x0e,0x1f,0xab,0x4d,0xd7,0xa6,0x09,0x19,0x44,0x55,0x4e,0x57,0x2c,0x85,0x31,0xd9,}, + {0xd4,0xa1,0x91,0x36,0x20,0x55,0x2d,0x5b,0x1e,0xad,0x44,0xbb,0xaa,0xcc,0xdf,0x1e,0x8c,0xd4,0xe2,0xa8,0x09,0x99,0xad,0xd6,0x26,0x50,0xa6,0x25,0x99,0x7f,0xf1,0xb0,0x42,}, + {0xd4,0x57,0x89,0xad,0xf4,0xea,0x45,0x1b,0xf7,0xde,0x58,0x93,0xe6,0x24,0x28,0xd7,0x9b,0xc8,0x71,0xc6,0x43,0x68,0xba,0xd7,0x61,0x04,0x67,0x64,0xf3,0x61,0x98,0xf4,0x8e,}, + {0xd3,0x25,0x9a,0xe5,0xa0,0x50,0x84,0x88,0xe8,0xed,0xd5,0xab,0x69,0x24,0xc1,0x53,0x8e,0xf5,0xe4,0xe5,0x2a,0x52,0xe2,0x6e,0x4b,0xdc,0x56,0xee,0xa6,0x53,0xea,0x5b,0x24,}, + {0xd4,0x6c,0x9a,0x6e,0x20,0x53,0xb1,0x48,0xa1,0x3c,0xb9,0x1b,0x55,0x0f,0x6b,0x5a,0x22,0xc7,0x5c,0xa9,0x0f,0x6f,0x6b,0x20,0x57,0x32,0x55,0xac,0x2c,0xec,0xb1,0x7a,0x9c,}, + {0xd4,0x6b,0xc1,0xe5,0xd8,0x55,0x2e,0xd9,0x6b,0x49,0x8f,0x23,0xaf,0x30,0xad,0x5c,0x89,0x95,0xc4,0x5b,0x4f,0xc6,0xec,0x71,0xc4,0x2c,0xb5,0x10,0x8b,0x1c,0x92,0x45,0x11,}, + {0xd3,0xab,0xc9,0xd5,0xd8,0xb5,0x2e,0xc7,0x6c,0xb1,0xd6,0x60,0xb0,0xab,0x1f,0x34,0xd2,0x59,0x04,0xb0,0xab,0x11,0x34,0x96,0xdb,0x22,0xb6,0xad,0x32,0x1b,0x75,0xc9,0x1b,}, + {0xd2,0x5b,0x8b,0x14,0x91,0x9e,0x42,0xee,0x67,0x51,0x39,0x2d,0x98,0x02,0x6f,0x6c,0x69,0xb6,0xe4,0xec,0x41,0xdf,0xa2,0x95,0xa6,0x9c,0xde,0x40,0x64,0xc0,0x06,0x2d,0x5b,}, + {0xd4,0x14,0x6a,0x18,0xda,0xa0,0xc0,0xed,0x25,0x8a,0x38,0xeb,0xce,0xa0,0xe6,0xfc,0x51,0xa6,0xd3,0x76,0xc0,0x32,0xeb,0x91,0xbb,0x28,0x8c,0xe0,0xbb,0x1d,0x52,0xa8,0xd0,}, + {0xd4,0xd8,0x71,0x5c,0xda,0x66,0xc0,0x36,0x6b,0xde,0x3f,0xec,0x7a,0xa0,0xcd,0x1c,0x9a,0x44,0xe3,0xe0,0xa0,0xea,0xa3,0x6e,0x49,0x1c,0xca,0xe0,0x98,0xdc,0x8e,0x99,0x1b,}, + {0xd7,0x2b,0xb1,0xe5,0x98,0x5c,0x20,0x49,0x5b,0x8d,0xc2,0x6e,0xe1,0xa1,0x49,0x2d,0xdb,0x59,0x7c,0x73,0x00,0x5d,0x59,0x09,0x3d,0x1a,0x69,0xd0,0x4e,0xdb,0x92,0x47,0x1b,}, + {0xd4,0xa1,0x7b,0x2e,0x90,0x5a,0x8b,0xb6,0xb6,0x13,0x36,0x5b,0xc4,0x4a,0x27,0x1d,0x4d,0xb4,0x50,0xa6,0xb0,0xb7,0x24,0x96,0x44,0xd0,0xe5,0xb0,0x9e,0xe5,0x77,0x59,0x13,}, + {0xd5,0xe2,0x6b,0xe6,0xd8,0x57,0x2f,0x01,0xe2,0x52,0x4d,0x6e,0x5b,0x51,0x32,0x2a,0xb1,0xc9,0x1d,0xb9,0xb0,0x58,0xd9,0x98,0x5e,0x93,0x5f,0xad,0x53,0x64,0x3c,0x15,0x1d,}, + {0xd5,0xe4,0x72,0xa2,0x98,0x61,0x4f,0x4b,0x5d,0xac,0xb4,0xbd,0xba,0xd3,0xca,0xe4,0x96,0xb5,0x10,0xbf,0x70,0x43,0x6b,0x92,0x68,0x97,0x5f,0x0f,0x80,0x75,0x72,0x49,0x2c,}, + {0xd3,0x21,0x6a,0xee,0xd1,0xbd,0x2b,0x72,0x02,0xb9,0x37,0x12,0xbc,0xc8,0x21,0x25,0xed,0x19,0xc2,0xb8,0xab,0xd9,0x23,0x64,0xb6,0xfc,0x60,0xad,0x3d,0x25,0x71,0xa4,0x24,}, + {0xd1,0xe6,0x9c,0x2b,0x03,0x5c,0xe9,0xf6,0xf5,0x96,0xc6,0xc9,0xce,0x89,0x7f,0x72,0x71,0xd9,0x18,0xba,0xa6,0x21,0xe0,0xe5,0x65,0xab,0xbf,0x47,0x24,0x8f,0x8b,0x29,0x1d,}, + {0xd5,0x22,0x8a,0x26,0x50,0xbf,0x8e,0x49,0x23,0x44,0x15,0x35,0x65,0x93,0xc9,0x24,0x8d,0xb4,0xbb,0x5a,0xd1,0x69,0x23,0x96,0x34,0xc0,0x5f,0x90,0xf4,0xea,0x6e,0xba,0x9d,}, + {0xd5,0xa7,0x9b,0x26,0x58,0x61,0x31,0x93,0xc3,0xcd,0xd9,0x5f,0x61,0x54,0x49,0x08,0xb1,0x5a,0xdc,0x5f,0x33,0x57,0x22,0x0b,0x99,0x55,0x5f,0x0f,0xb9,0x73,0xa9,0x31,0x5b,}, + {0xd4,0xeb,0xc2,0xed,0x68,0xbf,0x51,0xb8,0xf7,0x75,0x24,0x4f,0xc0,0xd0,0x57,0x75,0xdb,0xcc,0x5a,0xc3,0xd2,0x1e,0xa4,0x76,0x58,0xa2,0xc1,0x91,0xaa,0xdd,0x0a,0xc4,0xdc,}, + {0xd4,0xac,0xba,0xa9,0xd8,0x5d,0x50,0x27,0x4a,0x3c,0xc7,0x63,0xbd,0xf0,0xa6,0xdc,0x7a,0xc5,0x18,0xbf,0xad,0xf4,0xe8,0x8d,0xc9,0xa0,0xbf,0x6e,0x47,0x22,0xb1,0x38,0x02,}, + {0xd4,0xed,0xc2,0xad,0x60,0x5f,0x10,0x1e,0xe5,0x8e,0x59,0x9b,0xbf,0xcd,0xc1,0x5f,0x3a,0xab,0x57,0x5f,0xad,0xc6,0xe2,0x5c,0xc6,0xa3,0x5f,0xac,0xd7,0x5c,0x94,0x65,0x9c,}, + {0xd4,0xef,0xaa,0x6d,0xa0,0xbd,0xca,0xb5,0x8e,0x96,0xe1,0x8f,0xbd,0x2f,0xd7,0x25,0x91,0xc4,0x57,0xbc,0xae,0x47,0xa4,0x97,0x58,0x98,0xbf,0xad,0xce,0x25,0x52,0x36,0xdc,}, + {0xd4,0xed,0xc2,0x71,0x28,0x5f,0x6f,0xa0,0xba,0x92,0x47,0x6e,0xbd,0x89,0x1f,0x39,0x21,0x70,0xfa,0x5f,0xb0,0x39,0x23,0x92,0x0e,0xa4,0xbd,0xae,0x3a,0x9d,0x75,0xcc,0x7b,}, + {0xd4,0xed,0xb2,0xe5,0xe0,0xbf,0xcb,0xd6,0xa4,0xa2,0x96,0x0e,0x5f,0xaf,0x55,0xe1,0xad,0x0a,0xb3,0x5f,0x4d,0xa1,0x3b,0x39,0x39,0x2c,0xbc,0x90,0xd6,0xd0,0x96,0x39,0x24,}, + {0xd4,0xa5,0xd9,0x25,0xe0,0xbd,0x49,0xcd,0x4f,0x4a,0xd7,0xc7,0xbd,0x49,0x36,0xda,0x39,0x4f,0x0e,0xbc,0xca,0x2a,0xf5,0x91,0x40,0x0d,0xc6,0xa8,0x0f,0x55,0xbb,0xd2,0x00,}, + {0xd3,0xdc,0xba,0xda,0x21,0x6a,0x04,0x05,0x17,0x95,0xeb,0xac,0xb8,0x22,0x0b,0x12,0x0e,0x48,0xdc,0xe6,0x41,0xc8,0x68,0x6a,0xcf,0xad,0xe0,0x20,0xe7,0x12,0x8a,0xb8,0xad,}, + {0xd7,0x96,0x72,0x20,0xe9,0xb6,0xa0,0xc6,0xe2,0x52,0x7a,0xf1,0xe6,0x40,0xa7,0x6e,0x8d,0xdb,0x93,0xb5,0x40,0xc4,0xa3,0x8a,0x44,0x99,0xc0,0xc0,0xb4,0xcb,0x55,0xa5,0x5c,}, + {0xdb,0x6e,0xbb,0x1d,0x08,0x71,0xc2,0xa8,0x9a,0x49,0x14,0x81,0x51,0x64,0x94,0x52,0x6d,0x18,0x35,0x57,0xc7,0x0e,0xe4,0xcd,0xb7,0xcd,0x55,0xc9,0xa6,0xb2,0x70,0xc5,0xea,}, + {0xdb,0xea,0xab,0xdc,0x91,0x59,0x4c,0x55,0x5c,0x6e,0x45,0xd4,0x5c,0xaa,0xb1,0xda,0x74,0xcc,0xa4,0x83,0x2d,0xa9,0xca,0x55,0x89,0x52,0x64,0xaf,0x38,0xa2,0x82,0x96,0x51,}, + {0xd7,0x5d,0xa1,0x8c,0xd0,0xb4,0xed,0xd7,0x03,0x4d,0xc8,0xe5,0x82,0x23,0x6a,0xae,0xdf,0xc9,0xaf,0x96,0x21,0xc5,0xe5,0xda,0x4b,0x6d,0xe0,0x22,0x4e,0xdd,0xd6,0x5a,0xdb,}, + {0xda,0xa5,0xc3,0x8c,0x8b,0xf0,0x41,0x69,0xa2,0x32,0xdd,0x65,0x84,0xa0,0xdb,0x27,0x96,0x7b,0x64,0xe7,0xb2,0x49,0x26,0x66,0xcc,0xef,0x62,0xf0,0x16,0xfd,0x59,0xa7,0x13,}, + {0xd7,0x64,0xb9,0x85,0xb1,0x7c,0x0b,0xe0,0xc1,0x86,0x13,0x0b,0xa6,0x4c,0x94,0x4d,0x80,0xd7,0x22,0xba,0x24,0x83,0xd2,0x25,0xc5,0x0c,0x78,0x42,0x35,0xc2,0x15,0x22,0xd4,}, + {0xd8,0x5f,0xc4,0xd8,0x10,0xea,0x41,0xeb,0xd2,0xb1,0x5a,0xab,0xd8,0x22,0xb9,0x35,0xb4,0x57,0xa2,0x5e,0xc1,0x4b,0xdd,0x8e,0xba,0xda,0x8e,0x01,0xdb,0x5f,0xae,0xc9,0x64,}, + {0xd0,0x5f,0xa2,0xe1,0x5a,0x50,0x00,0x49,0x74,0x96,0x58,0xe4,0x92,0x40,0x44,0xe3,0x6d,0xb6,0xdb,0xe6,0x20,0x38,0x9c,0x6d,0xb6,0xdb,0xee,0x20,0x36,0xdb,0x6d,0xb7,0x1b,}, + {0xd0,0x60,0xa2,0xe1,0x59,0x64,0x00,0x49,0x24,0x92,0x47,0x24,0x98,0x00,0x49,0x24,0x92,0x49,0x24,0x8a,0x00,0x49,0x24,0x72,0x49,0x24,0x80,0x40,0x49,0x24,0x92,0x49,0x23,}, + {0xd0,0x5f,0xa2,0xe1,0x5a,0xae,0x00,0x49,0x23,0x92,0x49,0x24,0x54,0x40,0x49,0x24,0x92,0x49,0x23,0xec,0x00,0x49,0x23,0x92,0x49,0x24,0x52,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5f,0xa2,0xe1,0x5a,0xca,0x00,0x49,0x24,0x92,0x49,0x1c,0xe4,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,0xc2,0x00,0x49,0x1c,0x92,0x49,0x24,}, +}; +static const gsm_frame gsm_data_dvacet[] = { + {0xd2,0x97,0xab,0xad,0xe2,0x50,0x60,0x49,0x65,0x95,0xca,0xee,0x5f,0xc0,0xb9,0x61,0x8a,0x25,0x64,0x56,0x80,0x2c,0xa3,0x4d,0x04,0x9b,0xa5,0x21,0x4b,0x24,0x66,0x06,0x4b,}, + {0xd0,0xed,0xd4,0xb2,0x21,0x53,0x01,0xcb,0x7e,0x91,0xb6,0x92,0x5a,0xa1,0xbd,0x9a,0xf1,0x72,0xa9,0xae,0xe1,0xf6,0x9d,0x99,0xa8,0x6a,0x9d,0x61,0x9e,0x82,0xd1,0xc8,0xa3,}, + {0xd1,0x26,0xdc,0xed,0xe3,0xa6,0x80,0xb9,0x75,0xaa,0x35,0x1b,0x9c,0xc1,0xa1,0xb4,0x6d,0xcb,0x24,0x80,0x81,0x44,0xa6,0xd1,0xa7,0x5a,0xa2,0x80,0xa8,0xd4,0xb9,0xa4,0xeb,}, + {0xd6,0xaa,0x90,0xda,0x98,0xaf,0x62,0xa7,0x2e,0xda,0x20,0x02,0x56,0x61,0xef,0xad,0xb6,0xc6,0x93,0x89,0xcd,0xc9,0xcd,0x95,0xd6,0xdb,0x84,0xee,0xb7,0x1c,0x92,0x46,0x80,}, + {0xd5,0x25,0x7a,0xaa,0xd8,0x51,0xd0,0x99,0xbd,0x92,0x34,0x00,0x50,0xb5,0x78,0xe3,0x92,0xc6,0xd2,0x51,0x30,0x72,0xdd,0x6a,0x67,0x18,0xa1,0x8d,0xf2,0x95,0x49,0xdb,0x3a,}, + {0xd5,0x64,0x8a,0x1e,0xe2,0xf1,0xad,0x74,0x5e,0x49,0x4b,0xe6,0x51,0x50,0x61,0x2c,0x96,0x36,0xd2,0xa0,0xcf,0xd1,0xa3,0x7e,0x38,0xd2,0xa0,0xc9,0x87,0xd4,0xde,0x5a,0xc0,}, + {0xd2,0x25,0xa3,0x2e,0x2a,0xee,0x48,0x31,0x65,0xfa,0xea,0x49,0xee,0x04,0xe6,0x22,0xb6,0x46,0x43,0xee,0x23,0xf3,0x19,0xd6,0x44,0x0a,0xf0,0xc3,0x7a,0x93,0x4d,0xa2,0x9b,}, + {0xd2,0x23,0xab,0x69,0xaa,0xf0,0xa4,0xf6,0xec,0x96,0x38,0x22,0x9f,0xe4,0x4b,0x5c,0xae,0x2c,0x98,0x51,0x84,0x7a,0x64,0x8a,0xb7,0x0c,0x53,0x07,0x74,0xe4,0x79,0xb6,0xd2,}, + {0xd3,0xaa,0xba,0x59,0xa0,0x53,0xca,0xc3,0x64,0x92,0x46,0x88,0x51,0xe9,0xce,0xe4,0x9e,0x48,0x01,0x51,0xad,0xf6,0xdc,0x72,0x47,0x12,0x51,0xcc,0xf4,0xa5,0x2e,0x43,0xc4,}, + {0xd3,0xed,0xd2,0xe1,0xe0,0x51,0xad,0xf1,0x6c,0x72,0xca,0x93,0x51,0xce,0x8d,0x1b,0xb2,0x4a,0xe3,0xa1,0xcc,0x0b,0x93,0xce,0xbe,0xe2,0xf1,0xad,0x27,0x9c,0xae,0xae,0xba,}, + {0xd4,0xec,0xca,0xaa,0xd0,0xa3,0xf0,0x27,0x2a,0xb5,0xd4,0x58,0xf1,0xf0,0x17,0x3c,0x7e,0x52,0xc8,0x50,0x92,0xe4,0xab,0x8e,0xc9,0x7f,0xb1,0xd5,0x33,0xdc,0x4e,0x55,0x1e,}, + {0xd4,0xa8,0xe2,0x22,0x90,0x5f,0x11,0xa6,0x52,0xe9,0xc8,0xd5,0x63,0x30,0x36,0xe2,0x83,0x1c,0xb4,0xc0,0xd2,0xbb,0x24,0x8e,0x07,0x23,0xbe,0xb2,0x49,0x6c,0x96,0xb6,0x0d,}, + {0xd3,0x62,0xca,0x5d,0x92,0x5a,0xad,0x0b,0x73,0xd2,0xc8,0x68,0xbc,0xae,0xde,0x64,0x91,0xb6,0xda,0xbe,0xcc,0x11,0x71,0xea,0xb8,0xd9,0xb0,0x2b,0x46,0x11,0x52,0x49,0x24,}, + {0xd3,0x15,0xab,0x99,0x51,0xb6,0x22,0xf7,0x76,0xb2,0xf7,0x2d,0xea,0x02,0x5f,0x5d,0x4c,0xc7,0x1f,0xe8,0x21,0xf9,0x2c,0x89,0xc9,0x23,0xbc,0x81,0x76,0x4a,0xb1,0xc9,0x64,}, + {0xda,0x56,0x71,0x20,0x9a,0xe4,0x40,0xee,0xcb,0xce,0x4f,0xbe,0x59,0x41,0x5b,0xab,0x16,0xb7,0x64,0x5a,0xe1,0x27,0x3a,0x4e,0x62,0xe5,0xab,0xa1,0xb6,0x92,0x8d,0xd2,0xf8,}, + {0xdb,0x24,0xee,0x35,0xe3,0x75,0xc4,0x49,0x2c,0x72,0x3f,0x5f,0x77,0xc8,0x48,0xa2,0xb0,0xa6,0x43,0x5d,0xaa,0xc9,0x0f,0xc2,0x62,0x35,0x63,0xf2,0x37,0x53,0x16,0xb5,0x24,}, + {0xdb,0xe9,0xe4,0x31,0xeb,0x52,0x90,0x03,0xc3,0xc8,0x4a,0x94,0x95,0x31,0x08,0xdf,0x5c,0x97,0x8c,0x72,0x8e,0xf4,0x5f,0x0a,0xb6,0x63,0x96,0x0d,0x05,0x63,0xaf,0x15,0x0a,}, + {0xda,0xa7,0xcc,0x65,0xaa,0xd2,0xee,0x09,0x23,0x79,0xbb,0xd0,0xa5,0x0d,0x79,0x24,0xac,0xde,0xbc,0xa7,0x12,0x58,0x7a,0x5a,0x3d,0xfc,0x6e,0x8d,0xfd,0x2a,0x92,0xd1,0x64,}, + {0xd5,0xe1,0x69,0x5a,0x6a,0xa2,0x6b,0xd4,0x5b,0x47,0x08,0x58,0xe8,0x2b,0x78,0xa5,0x4e,0x94,0xd3,0xd2,0x4c,0xc6,0xdd,0xae,0xe5,0x48,0xb3,0x31,0xa2,0xbc,0x76,0xd9,0x23,}, + {0xd5,0xa1,0x72,0x6a,0xe0,0x53,0x72,0xa0,0xbc,0x2e,0x59,0x25,0x5f,0x30,0x78,0x68,0x3c,0xce,0xdc,0x5f,0x32,0x59,0x22,0x6c,0x76,0xe4,0xbd,0x52,0x39,0x64,0x8d,0x31,0x9c,}, + {0xd5,0xdb,0x72,0x6e,0x68,0x5e,0xef,0x39,0x65,0x91,0x17,0x08,0xbe,0x8d,0x7a,0xa2,0x76,0x4c,0x52,0xbe,0xac,0x19,0xe9,0xb1,0xdb,0x33,0xbd,0x0c,0x46,0x19,0xee,0x58,0xec,}, + {0xd3,0x9a,0xaa,0x72,0xa8,0x5f,0x28,0x49,0x4c,0x8b,0xa3,0x24,0xbe,0xca,0xc7,0x5b,0x6d,0x4e,0x8c,0xbc,0xa7,0xc7,0x6d,0x8d,0x17,0x44,0xd0,0x24,0xb1,0x1d,0x97,0x47,0xa3,}, + {0xd4,0x17,0x71,0x1d,0xe9,0xb8,0x02,0x09,0x64,0x92,0x47,0x25,0xbe,0x00,0xad,0x2b,0xf2,0x79,0x9b,0xee,0x40,0xd2,0xdc,0x6e,0x35,0x66,0xd4,0xa1,0x34,0x8b,0x3f,0x4a,0x99,}, + {0xd6,0xe0,0xa1,0x26,0x9a,0x5e,0xa0,0xa7,0x2c,0x89,0x12,0x93,0x67,0x01,0x26,0x92,0x24,0x92,0x52,0x54,0xa1,0x32,0x89,0x24,0xa4,0x92,0x87,0x66,0x37,0x1b,0x93,0xc2,0xf7,}, + {0xd8,0xa5,0xa9,0xd5,0x22,0x5b,0xc8,0xaf,0x6a,0x31,0x3a,0xb3,0x76,0xc7,0xb5,0x60,0x6c,0x04,0xca,0x65,0x4c,0x34,0xdb,0xc8,0x38,0xa4,0x5e,0xca,0x2a,0x9b,0x6e,0x51,0x92,}, + {0xd9,0x24,0xb1,0x88,0x52,0x9a,0x87,0xec,0xd3,0x16,0x35,0x58,0xe0,0x08,0xf8,0xd2,0x6f,0x38,0xcd,0xcc,0x25,0xe1,0x2e,0x8f,0x75,0x2d,0xb0,0xa8,0x47,0xe4,0x9a,0x4b,0x6c,}, + {0xd3,0x8e,0x61,0xd9,0x5a,0x52,0x21,0x85,0x9c,0xd6,0xc5,0x1b,0xb4,0x00,0xd4,0x6c,0xad,0xa4,0x5c,0xe6,0x40,0x94,0xd2,0x2d,0x93,0x4c,0xda,0x80,0xb6,0x51,0xa9,0x35,0x55,}, + {0xd3,0x97,0x60,0x09,0xdb,0x5a,0x80,0x95,0x1a,0x71,0x46,0xa4,0x50,0x00,0x3a,0xe3,0x8e,0x49,0x1c,0xc2,0x20,0x48,0xe3,0x92,0x39,0x1b,0xe2,0x40,0x49,0x24,0x92,0x37,0x1c,}, + {0xd0,0x5f,0xa2,0xa5,0x5a,0x86,0x00,0x48,0xdb,0x6d,0xb7,0x24,0x7a,0x00,0x39,0x24,0x92,0x49,0x24,0xda,0x00,0x38,0xe4,0x92,0x49,0x24,0xf0,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5f,0xa2,0xe5,0x5a,0x52,0x00,0x49,0x24,0x92,0x49,0x24,0x56,0x00,0x49,0x24,0x92,0x49,0x24,0x6e,0x00,0x39,0x24,0x92,0x49,0x24,0x66,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xda,0xa6,0xcb,0xe9,0xa2,0x50,0x40,0xb6,0xdb,0x49,0x20,0x00,0x51,0xa1,0x90,0x00,0x24,0x92,0x92,0x53,0xb1,0x36,0xdf,0x6d,0xb6,0xdb,0x54,0x05,0x36,0xdb,0x0d,0xb6,0xdb,}, +}; +static const gsm_frame gsm_data_tricet[] = { + {0xd9,0x1f,0x79,0xd5,0x10,0x50,0x40,0xb6,0xdb,0x8d,0x27,0x19,0x68,0xe0,0x47,0x54,0x96,0x4a,0xeb,0x74,0xe0,0x33,0xab,0xda,0x2b,0x5b,0xcc,0xc0,0xb8,0xf4,0x91,0xb9,0x23,}, + {0xd5,0xd6,0x59,0xa5,0x19,0x85,0x60,0xc6,0xcb,0x8d,0xc7,0x1b,0x50,0xa0,0x41,0x2b,0x99,0xc6,0xe2,0xa8,0xa0,0x3a,0xb2,0x79,0xc4,0x9b,0x63,0x20,0xb6,0xe3,0x6c,0xc8,0xdb,}, + {0xd7,0x1b,0x49,0xd5,0x5a,0x52,0xc0,0x42,0xda,0x92,0xcb,0x13,0xaa,0xc0,0xc9,0x1b,0xcd,0xb8,0xe4,0xec,0xe0,0x56,0x6c,0xc6,0xeb,0x91,0xa8,0x80,0x59,0x29,0x6d,0x9a,0x17,}, + {0xd7,0xec,0xb2,0x94,0x91,0x5f,0xed,0xb8,0xdb,0x92,0x4c,0xbf,0x53,0x51,0x48,0xe4,0x72,0x39,0xda,0x65,0xb1,0x15,0x33,0x0b,0xf4,0x74,0x58,0x30,0x62,0x94,0x68,0x82,0x18,}, + {0xd5,0xe8,0x40,0x48,0xa2,0x8c,0x2c,0x30,0x0a,0x4d,0x0e,0xe3,0xe4,0x0c,0x79,0xb2,0xb2,0xc7,0x1b,0xba,0x23,0x6f,0x73,0xda,0x39,0x6c,0xc2,0x41,0x72,0xdb,0x0c,0x98,0x62,}, + {0xdb,0x71,0x83,0x20,0x19,0xee,0x63,0x47,0x35,0xb6,0xef,0xbe,0x51,0x24,0x7f,0xfe,0xb6,0xed,0x6d,0x91,0x6d,0xc8,0xe3,0x68,0xd0,0x1a,0x5c,0x8f,0x04,0x49,0x7c,0xe7,0xaf,}, + {0xdc,0x68,0x89,0x18,0x02,0x60,0xb0,0x7d,0x77,0x9e,0x4b,0x1d,0x5e,0xaf,0xa8,0xe2,0x6d,0xbc,0x33,0xf0,0xcf,0xc9,0x64,0xb1,0x8e,0xcc,0xe6,0xad,0xb8,0x35,0x4a,0x56,0xe3,}, + {0xdd,0xec,0xe5,0xa9,0x9a,0x6b,0x2d,0x21,0xad,0x7d,0x29,0xf3,0xbb,0x4d,0xff,0x35,0x8f,0xac,0xb2,0x6e,0xce,0xb6,0x69,0x2c,0x37,0x42,0x62,0xae,0x16,0x11,0x15,0x36,0xd9,}, + {0xda,0xd9,0x59,0x55,0xf3,0x72,0xca,0x26,0x34,0x8d,0x49,0xd4,0xc4,0xab,0xb9,0x4e,0xae,0x47,0xe2,0xde,0xaa,0xe7,0xdd,0xae,0x36,0x14,0x55,0x8d,0xd7,0xec,0xae,0x30,0x88,}, + {0xd7,0x5a,0x43,0x63,0x38,0x55,0x10,0x79,0x24,0x95,0xc8,0xd1,0x51,0x4c,0x8a,0xd4,0x7a,0x5e,0x28,0xa5,0x2b,0xf8,0xd9,0x6f,0x4d,0xc5,0x55,0xaf,0x0b,0x1c,0x71,0xc7,0x23,}, + {0xd5,0x5a,0x5c,0x73,0x60,0x55,0x2f,0x41,0x5b,0x92,0xd6,0xa7,0x5b,0x0c,0xca,0x43,0x3a,0x47,0x2c,0xb9,0x0c,0xc9,0x22,0x10,0x79,0x1c,0xbd,0x2b,0xd9,0x1e,0x48,0x63,0x9c,}, + {0xd4,0x9f,0x44,0xbf,0x12,0x5f,0x28,0xbf,0x1b,0x99,0x50,0x9a,0xbe,0xea,0x27,0x7c,0x92,0x44,0x86,0xbe,0xca,0x0d,0x23,0x92,0xd8,0x8b,0x62,0x86,0x98,0x97,0x2a,0x7b,0x24,}, + {0xd1,0xdd,0xb4,0xbe,0x18,0xbe,0x42,0xa2,0x58,0x46,0xcb,0x6c,0xea,0x01,0x60,0x4b,0x4d,0xba,0x6d,0xe8,0x00,0xed,0x52,0x65,0x28,0x93,0xe0,0x20,0xeb,0x5b,0x49,0x38,0xe1,}, + {0xd8,0x1e,0x89,0xd4,0xda,0xc6,0xa0,0xa6,0x6c,0x91,0x10,0xa6,0x66,0x81,0x58,0x81,0x4e,0x46,0x93,0x54,0x80,0x35,0x2b,0x81,0xa8,0x4a,0xc5,0xe3,0x49,0x1b,0x6a,0x57,0x17,}, + {0xda,0xe7,0xc4,0xad,0x98,0x55,0xa9,0xb7,0x22,0xa2,0x52,0xd9,0x51,0xea,0x44,0x91,0x6e,0x15,0xa8,0x69,0xaf,0x39,0x44,0x71,0xa9,0x62,0x5c,0xeb,0x8c,0x82,0x89,0xd1,0x21,}, + {0xda,0x64,0xc3,0x2d,0xda,0xc3,0x2b,0x20,0x7b,0x49,0xae,0x20,0x7f,0x0e,0xc2,0xdc,0x36,0x51,0x55,0xd7,0x2d,0x1c,0x0d,0x4d,0xb5,0x62,0xb8,0xab,0x04,0x5a,0x8a,0x14,0x5d,}, + {0xd9,0xa5,0xc2,0x31,0x6a,0xd6,0xcc,0x38,0x57,0x2c,0xbb,0x20,0xea,0x8a,0x1e,0x9b,0xcd,0xd6,0x90,0x98,0xc9,0xfe,0x11,0x2e,0x17,0x5a,0xc2,0x89,0x36,0xe2,0x28,0x53,0x43,}, + {0xd5,0x61,0x89,0xf5,0xa0,0xdb,0x28,0x22,0xe9,0xb6,0x58,0x87,0xee,0xa7,0x97,0x67,0x72,0xb8,0x91,0xd4,0xd4,0x49,0x24,0x91,0xa2,0x7c,0x5c,0xb1,0x2b,0x1c,0xb2,0x46,0xa8,}, + {0xd5,0xa2,0x82,0xea,0x58,0x5f,0xcc,0x51,0xea,0xd1,0x4b,0x6e,0x5f,0x31,0xa4,0x34,0x72,0x39,0x24,0xbf,0xce,0x58,0x50,0x90,0xba,0xd2,0x5f,0x0d,0xed,0x52,0x31,0x0f,0xda,}, + {0xd4,0x9c,0x73,0x6e,0x68,0xbc,0xeb,0xdb,0xab,0x48,0x29,0x56,0x5f,0xcb,0xe7,0x1a,0x69,0x49,0xdf,0xcc,0xca,0xe1,0x5c,0xd6,0xd4,0x00,0x60,0x8a,0x95,0xda,0xcd,0xdb,0x63,}, + {0xd2,0xde,0x8a,0x72,0xe0,0xbe,0x28,0x82,0x46,0x6a,0x38,0xdb,0xec,0x24,0x5b,0x05,0x2d,0x47,0x36,0xe6,0x62,0xce,0xe5,0x6a,0x38,0xf5,0xbc,0x81,0x4b,0xb5,0x8d,0xf5,0x6e,}, + {0xd4,0x95,0x69,0x21,0xaa,0xba,0x20,0xad,0x65,0x92,0x44,0xdc,0xd4,0x40,0xbe,0xc3,0xc5,0x39,0x0b,0xdc,0x80,0x99,0x0e,0x26,0x26,0x9a,0x5c,0xa0,0xd4,0xe4,0x8c,0xc6,0x9d,}, + {0xd8,0x27,0xbb,0x11,0xa0,0x9e,0xe0,0xa7,0x11,0x69,0x00,0x02,0xa5,0xce,0x36,0xdc,0x7c,0xa8,0xdd,0x68,0x6d,0x7a,0xda,0x72,0x4b,0x22,0x6e,0xe6,0x06,0xba,0x05,0xac,0xe0,}, + {0xd9,0x65,0xaa,0x10,0x9a,0xc4,0x28,0xd4,0x84,0x60,0xa2,0x94,0xec,0xad,0xd4,0x1d,0x4e,0x36,0xd4,0x80,0x87,0x1e,0x92,0x5c,0xa1,0xd5,0xd4,0x27,0x36,0xdc,0x38,0x4b,0x13,}, + {0xd8,0x20,0x80,0x90,0x12,0x9e,0xa6,0xf5,0x32,0x92,0xad,0x61,0x71,0x06,0x64,0x3d,0x8e,0x47,0xab,0x5e,0xa4,0xf6,0x77,0xad,0x57,0x23,0x7e,0x01,0xfd,0x9d,0xd7,0x3d,0x25,}, + {0xd4,0x11,0x7a,0xe5,0x93,0xd6,0x40,0xdd,0xb0,0x57,0x35,0x13,0xe8,0x20,0xd6,0x9c,0x11,0xb6,0xe1,0x90,0x40,0x41,0x21,0x8d,0xb8,0xdb,0x92,0x40,0x37,0x1b,0x8d,0xb6,0xdc,}, + {0xd0,0x5f,0xa2,0xe1,0x1a,0xd6,0x40,0x46,0xdb,0x6d,0xb9,0x23,0xb0,0x00,0x49,0x24,0x92,0x49,0x24,0xc2,0x00,0x49,0x24,0x92,0x49,0x24,0x70,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5f,0xa2,0xa5,0x5a,0x9a,0x00,0x49,0x24,0x92,0x49,0x24,0x5a,0x00,0x49,0x24,0x92,0x49,0x24,0x6e,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5f,0x9b,0x21,0x5a,0x88,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x82,0x00,0x49,0x24,0x92,0x49,0x24,}, +}; +static const gsm_frame gsm_data_ctyricet[] = { + {0xd7,0x93,0x69,0x59,0x12,0x50,0x40,0x36,0x92,0x68,0x3c,0x5c,0x54,0xc0,0xb3,0x63,0x8d,0xc7,0x2a,0x56,0xa0,0xd4,0x83,0x8e,0x36,0xea,0x80,0x80,0xd7,0x12,0xcd,0xb9,0x23,}, + {0xd4,0xd6,0x61,0x99,0x12,0x6e,0xc0,0x43,0x5f,0x85,0xab,0xe4,0xbe,0x80,0x55,0x3b,0x8f,0x4a,0xee,0x58,0xa0,0x27,0x96,0x75,0x67,0x2d,0xe6,0xc0,0x5b,0x9a,0xd1,0x29,0x63,}, + {0xd2,0x54,0x62,0x5d,0x91,0x8c,0xe0,0x28,0x2c,0x52,0xc6,0x6d,0xb0,0xa0,0x47,0x62,0x67,0xba,0x9a,0x59,0x40,0x34,0xe5,0x72,0x66,0xf2,0xe6,0xe0,0x6a,0x9b,0xc9,0x56,0xe2,}, + {0xdc,0x2a,0x7a,0x09,0x13,0xa5,0xe1,0x49,0x25,0xb6,0xff,0x75,0x53,0x21,0xfd,0xb6,0xb3,0x57,0x65,0x61,0xec,0x49,0xd0,0xd1,0x59,0x1b,0x52,0x24,0xd7,0x6e,0xb6,0x5c,0xb9,}, + {0xdc,0xad,0xbc,0xa1,0x19,0xa6,0xc7,0x47,0x27,0x55,0x9d,0x97,0xe7,0xac,0x49,0x2d,0x92,0xc6,0xb9,0x7f,0x6d,0x43,0x5c,0x6a,0x1a,0x28,0x55,0xce,0x61,0x60,0x77,0x34,0xcc,}, + {0xdc,0x69,0xc4,0x18,0xdb,0xa1,0xd0,0xba,0x4d,0x2d,0x6c,0x7b,0x72,0xb4,0x3f,0x1a,0xae,0xd6,0x94,0x5e,0xd3,0xa9,0x60,0x71,0xc5,0x11,0xb4,0xce,0x20,0x40,0x14,0xcc,0x9d,}, + {0xd8,0x52,0x41,0x90,0xaa,0xe8,0x68,0xed,0xec,0x93,0x4a,0xe4,0xa6,0x43,0x6f,0xb6,0x95,0xf5,0x1b,0xee,0x22,0xd9,0xbc,0xeb,0xa2,0xda,0xd8,0x00,0x94,0x52,0xad,0xe4,0xaa,}, + {0xd6,0x1b,0x82,0x39,0x21,0xf0,0x40,0xd4,0xe2,0x54,0x44,0x9b,0x68,0xe0,0xb7,0x1c,0x74,0xc7,0x23,0xba,0xa0,0x44,0xda,0x31,0x0a,0x21,0xbd,0xe9,0x36,0xdb,0x6d,0xb7,0x3f,}, + {0xd5,0xe1,0x48,0x6a,0x29,0x53,0x6b,0x48,0xec,0xb2,0x89,0xd0,0x74,0xc9,0x46,0x2c,0x62,0xa4,0xe3,0x5c,0xc6,0x28,0xdc,0x21,0xd4,0x7b,0xd4,0xcc,0x49,0x24,0x49,0x12,0x5f,}, + {0xd3,0x5d,0x7d,0x3d,0xd8,0x5b,0x2b,0xdd,0x9d,0xb2,0x37,0x00,0x51,0x49,0x05,0xa2,0xbf,0xe5,0x09,0xa4,0xac,0x74,0xf3,0x73,0x5a,0xd8,0x57,0x69,0xf3,0xa4,0x72,0xd8,0xd8,}, + {0xd5,0x1a,0x63,0xfe,0xe8,0xaf,0xd0,0xba,0xa4,0x4e,0x6e,0xd3,0x5b,0x93,0x25,0x15,0xa2,0xcb,0x32,0x57,0x51,0xc8,0x99,0x78,0x67,0x33,0xb1,0x4f,0xa9,0x21,0x1c,0xa9,0x5c,}, + {0xd3,0xd9,0x75,0x2e,0x58,0x5b,0x2f,0xe4,0xdc,0x4d,0xf5,0x22,0x59,0x30,0x63,0x21,0x6d,0xae,0xdd,0x5a,0xae,0x3b,0xd3,0x50,0xa4,0xe3,0xb4,0xcd,0xf9,0xdc,0x66,0x96,0x9c,}, + {0xdb,0x1b,0x70,0xc8,0xae,0x59,0xb0,0x6b,0x6d,0x8e,0x30,0x4a,0x59,0x31,0x8d,0x54,0x49,0x37,0x3b,0x6b,0x52,0xd9,0x78,0x8a,0x3b,0x6c,0x70,0x6f,0xc8,0xf3,0xb3,0x35,0xd9,}, + {0xdd,0xa8,0xe3,0x58,0xda,0xa9,0x52,0xf5,0x9e,0x91,0xfb,0x2f,0xdd,0x70,0xcb,0xc6,0xa2,0x37,0x1d,0x6e,0xf4,0xab,0x63,0x4d,0xa6,0x58,0xec,0x8f,0x2a,0x84,0x51,0x07,0x08,}, + {0xdd,0x67,0xe2,0xd5,0x1a,0x9a,0x0d,0x8a,0xf3,0x89,0xb9,0xf0,0x8f,0x2e,0x33,0x2d,0x62,0x73,0x0c,0x5c,0x8c,0x26,0xec,0x20,0xb3,0x19,0x8e,0xd0,0x35,0x62,0x51,0x34,0x90,}, + {0xd5,0x15,0x6a,0x3b,0x32,0x86,0x8e,0x24,0x93,0x73,0xfd,0x99,0x56,0xa9,0x86,0xdc,0xf9,0xc8,0xa1,0xc2,0x8d,0xe8,0x54,0x5e,0xcd,0x5e,0x57,0x10,0x56,0xa3,0x2f,0xd2,0x94,}, + {0xd3,0xd9,0x7c,0xb5,0xe1,0x58,0xcd,0xfa,0x92,0x28,0xf6,0xac,0xb3,0x4f,0x5f,0x23,0x69,0x2e,0x24,0x5a,0xce,0x5b,0x52,0xba,0xb2,0x24,0xbe,0xce,0xc8,0xe5,0x89,0xca,0x90,}, + {0xd4,0xdc,0x5c,0x3a,0xa0,0xea,0xcc,0x55,0xf4,0xbf,0x8b,0x71,0x5f,0x6d,0x21,0x14,0x8e,0x59,0x22,0x5e,0x8b,0xca,0x60,0x62,0xdb,0x24,0x58,0x85,0x5c,0xe9,0x20,0x15,0xa5,}, + {0xd2,0x1f,0x9c,0xfe,0x28,0xbc,0x05,0x6f,0x6d,0x8c,0x88,0x53,0xce,0x41,0xc3,0x7e,0xb1,0xa0,0x66,0xa8,0x01,0x05,0x54,0x9f,0x6a,0xd4,0xd8,0x60,0xd9,0x5b,0x7f,0x58,0x90,}, + {0xd7,0x17,0x62,0x22,0x22,0xde,0x20,0xa6,0x98,0x86,0xab,0x19,0xe8,0x00,0x92,0xa5,0xaa,0x06,0x9b,0x8e,0x80,0x16,0x8c,0x11,0xa3,0x14,0xdd,0x60,0xe5,0x14,0x6a,0xd5,0x5a,}, + {0xda,0xa6,0xc4,0xe9,0xd9,0xe3,0xe7,0x46,0xda,0x8e,0x36,0xa0,0x57,0xe8,0xa0,0xe8,0x31,0x8a,0x97,0x5d,0xac,0x83,0x1b,0x3c,0xc5,0x89,0x5a,0xcd,0x27,0x8a,0x0e,0x87,0x53,}, + {0xd9,0xe7,0xdb,0x6c,0xd9,0x9c,0xac,0x25,0x4a,0x6b,0x30,0xdc,0xa2,0xab,0xb1,0x4e,0x11,0xb2,0xa2,0xee,0xeb,0xd3,0x4d,0x0d,0x95,0x42,0x81,0x2b,0xec,0x0c,0x6d,0xa4,0x9e,}, + {0xd9,0xa9,0xca,0x6c,0xda,0x5a,0xec,0xc6,0xa2,0x5d,0x38,0xd4,0xd4,0x88,0x97,0xd2,0x71,0x2e,0x3c,0x99,0x68,0xb4,0x6d,0x5c,0x36,0x96,0xd6,0xac,0x48,0xd2,0x6e,0x54,0x1b,}, + {0xd5,0x9f,0x91,0x79,0xd8,0xa6,0xa6,0x45,0xcb,0x6a,0x2b,0x55,0xa0,0xc7,0x17,0x35,0xcf,0x5d,0xe0,0x5b,0xac,0xa0,0x2e,0xd7,0xe9,0x61,0x55,0x54,0xb4,0xbb,0x51,0xb9,0x24,}, + {0xd5,0x62,0x82,0xae,0x18,0x5f,0x30,0x56,0xa8,0x5d,0x4a,0xe4,0xbf,0x30,0xc9,0x2b,0x68,0x77,0x24,0x5e,0xed,0x37,0xb5,0x60,0x13,0x3d,0xbe,0xcd,0x47,0x25,0xd9,0xa0,0x0b,}, + {0xd4,0x9b,0x7b,0x32,0x28,0xbc,0x8b,0x7f,0x6a,0x9b,0x4a,0xd3,0x5f,0xac,0xdb,0xc0,0x75,0xb6,0xdb,0x61,0x4d,0x26,0x97,0x4e,0x47,0x63,0xbf,0x0a,0x56,0x9a,0x12,0x39,0x1b,}, + {0xd4,0x98,0xa2,0xe9,0x59,0xea,0x46,0xf2,0xd6,0x6a,0x14,0xe4,0xba,0x02,0xdd,0x3d,0xd7,0x6c,0xda,0xcc,0x22,0x51,0x75,0xb6,0xb9,0x23,0xee,0x20,0xad,0xe4,0xfb,0xef,0x63,}, + {0xd5,0x17,0x61,0x61,0xa9,0xde,0x40,0xa7,0x1e,0x8f,0x4b,0x1b,0x9e,0x81,0x32,0x8e,0xc9,0x92,0x9c,0x60,0x00,0xc4,0x5b,0x51,0xc8,0x1a,0x92,0xc0,0xc6,0x63,0x75,0xa8,0xdc,}, + {0xd8,0x66,0xba,0x91,0xa1,0x81,0xcd,0x36,0xdc,0x6e,0xbe,0x24,0x50,0x6d,0x3b,0x7d,0x6d,0x29,0x25,0x64,0x29,0xe6,0x43,0x4b,0x14,0x91,0x8f,0x0c,0x28,0x43,0xa9,0x32,0x93,}, + {0xd8,0xe9,0xd3,0x14,0x69,0x5a,0xc9,0x96,0xb8,0xa9,0x58,0xd3,0x88,0xa7,0xb2,0xc2,0x84,0x4a,0xa0,0xa0,0xa6,0x07,0x55,0x4a,0x0a,0x25,0x9c,0xc6,0xa7,0xba,0xd9,0x4b,0xa6,}, + {0xd6,0x1f,0x58,0x0c,0xa1,0xaa,0x87,0x5c,0xfd,0x57,0x67,0x24,0xd6,0x01,0x63,0xb2,0xba,0xc9,0x64,0xb4,0x01,0x4d,0x5a,0x81,0xd9,0x13,0xdc,0x40,0xa8,0xd3,0x86,0x38,0xe2,}, + {0xd6,0x15,0x59,0x99,0x1b,0xae,0xa0,0xb4,0x91,0x73,0x07,0x13,0xdc,0x80,0xc8,0xdc,0x2a,0x38,0xdb,0x70,0x40,0x36,0xdb,0x6e,0x36,0xdb,0xc0,0x20,0x46,0xdb,0x6d,0xb7,0x23,}, + {0xd0,0x5f,0xa2,0xe1,0x59,0xea,0x00,0x38,0xdc,0x8d,0xb6,0xdb,0xd4,0x00,0x39,0x24,0x92,0x49,0x24,0x8c,0x00,0x49,0x24,0x92,0x49,0x24,0xba,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x60,0xa2,0xa1,0x5a,0x8e,0x00,0x49,0x24,0x92,0x49,0x24,0x70,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,0x6e,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd8,0xdc,0x71,0x50,0x50,0x50,0x20,0x36,0xdb,0x6d,0xb4,0x9b,0x50,0x20,0x26,0xdb,0x6d,0xb6,0xdb,0x9b,0xc1,0xb6,0xdb,0x6e,0x48,0xd8,0x54,0x21,0xf8,0x9b,0x6d,0xb6,0xe3,}, +}; +static const gsm_frame gsm_data_padesat[] = { + {0xd8,0xa0,0x7b,0x15,0x1a,0x50,0x20,0x49,0x24,0x8e,0x5d,0x3c,0x58,0xa0,0x35,0x62,0xae,0x07,0x9a,0x54,0xa0,0x12,0x74,0x75,0x36,0x49,0xa4,0xa0,0x68,0xa9,0x73,0x27,0x6e,}, + {0xd5,0x18,0x81,0x14,0xd9,0xd2,0xa0,0x57,0x5b,0xc5,0xd7,0x5b,0xe2,0xa0,0x4d,0x6c,0xd6,0x27,0x3c,0xbc,0xc0,0x37,0x15,0x71,0xea,0xe1,0x92,0xc0,0xd8,0x5b,0x72,0x48,0xd5,}, + {0xd4,0xea,0xaa,0x6d,0xa0,0x89,0x40,0x1d,0x0c,0x15,0xc2,0xf6,0xa3,0xae,0x4b,0xdc,0x72,0xdb,0x62,0xb3,0xf4,0x49,0x24,0x8d,0xb4,0x42,0x54,0xd9,0x48,0xe4,0x6d,0xa4,0xfa,}, + {0xd4,0x70,0xcb,0x9a,0x29,0x55,0x54,0xd7,0x5b,0xf2,0xc8,0x45,0x59,0x31,0xbb,0x32,0xba,0xe5,0x00,0xaa,0x95,0xf6,0xe4,0x92,0xdb,0x22,0x57,0x10,0x9e,0x6d,0x92,0x4b,0x5b,}, + {0xd4,0xed,0xcb,0xda,0x28,0xad,0xf1,0xb8,0xb3,0x76,0x05,0x1d,0x61,0x6f,0x84,0x9a,0xc7,0x19,0x24,0xc0,0xcf,0xe8,0xc1,0x02,0x53,0xdc,0xc3,0xcd,0xe3,0x4e,0x0d,0xca,0x38,}, + {0xd5,0x65,0xab,0x5d,0xe0,0x63,0x2c,0xd8,0xad,0x3e,0x16,0x81,0x63,0xaf,0xd1,0xa2,0xcd,0x72,0x99,0xc0,0xb3,0x15,0xdb,0x92,0x4b,0x2c,0xbe,0xb1,0xb4,0x81,0xf5,0xb9,0x25,}, + {0xd1,0xa2,0x9b,0x76,0x22,0xbc,0x4c,0x46,0xca,0x81,0x48,0xec,0xc2,0x45,0x56,0x90,0x72,0x7a,0xaf,0xb6,0x62,0x08,0xfc,0x45,0xb0,0xd9,0xb2,0x03,0x7f,0x1c,0xd2,0xc6,0xc9,}, + {0xd0,0xe5,0xdb,0xea,0xa1,0xc2,0x81,0x09,0x9f,0x4b,0xbd,0x73,0x5e,0x81,0xc8,0x95,0x73,0x61,0x6b,0xc2,0xc1,0xa4,0xeb,0x5c,0xcc,0xdb,0x68,0xc0,0xd7,0xd9,0x4c,0x9c,0xa6,}, + {0xd6,0x5b,0x89,0x6a,0x29,0xd1,0xa9,0x47,0x2d,0xb6,0xc6,0x98,0x51,0x91,0xf0,0xea,0x92,0x5b,0x23,0x64,0xb0,0x20,0x3e,0x51,0xcb,0x5e,0x61,0x11,0x34,0x5a,0x5d,0x29,0x1c,}, + {0xd5,0xe3,0x52,0x6a,0x60,0x63,0x50,0x4b,0x1b,0x64,0xf9,0x23,0xc3,0x30,0x49,0x24,0x72,0x34,0x7c,0xc3,0x6c,0xc7,0x2d,0x98,0xb6,0xc1,0x61,0xab,0x0c,0x95,0x96,0x13,0xf4,}, + {0xd4,0xdc,0x83,0x2d,0xd8,0x63,0x2e,0x56,0x1b,0xb2,0x47,0x64,0xc6,0xce,0xb6,0xa8,0x36,0x3b,0x24,0xc8,0xcf,0x59,0x5a,0x70,0x29,0x5c,0xda,0xce,0xb9,0x6d,0x8d,0x96,0x84,}, + {0xd6,0x16,0x79,0xa9,0x30,0x6d,0x0b,0x7a,0xa5,0x7e,0x46,0x58,0xc4,0xcc,0xc0,0xa1,0xb6,0xcc,0xcb,0x5b,0x07,0x1b,0x0d,0x85,0x51,0x2d,0x9e,0xcb,0x64,0xf1,0x09,0xa5,0xd2,}, + {0xda,0x29,0xd3,0xb0,0x69,0x79,0x6c,0x55,0xda,0x71,0x40,0x2f,0x53,0x2e,0x91,0x24,0xae,0x4d,0x77,0x5d,0xd0,0xbd,0xa7,0x6e,0xb9,0x5d,0x6d,0x70,0xc7,0x64,0x7d,0x2b,0x46,}, + {0xda,0x29,0xdc,0x71,0xa0,0xac,0xcf,0xf3,0xe3,0xf9,0x5c,0xfb,0x8e,0xd0,0xaf,0x8e,0x8f,0xa5,0xa4,0x5a,0xce,0x9e,0xd0,0xd2,0x28,0x9b,0x6a,0xb0,0x46,0x9b,0x3c,0xab,0x60,}, + {0xda,0x28,0xd4,0x31,0xf2,0xe4,0xf1,0xe6,0xd4,0x4e,0x51,0x23,0x59,0x70,0x64,0x0f,0x68,0x58,0x67,0x7e,0xb0,0x95,0x94,0x55,0x8b,0x58,0x9a,0x8f,0xf8,0xab,0x2e,0xe0,0xd4,}, + {0xda,0xa8,0xd4,0x7a,0x2a,0x80,0xef,0x21,0x16,0x71,0x18,0xb8,0xe0,0xd1,0x3b,0x1c,0xc0,0xd3,0x92,0xc7,0x2d,0xb5,0x92,0xd4,0x79,0x0b,0xae,0xb1,0x38,0xe4,0x32,0x95,0xe1,}, + {0xda,0xe8,0xbc,0x72,0x6b,0xc2,0x2e,0xd9,0x19,0x72,0x21,0xc3,0x78,0xac,0x60,0x98,0x30,0x42,0xa0,0x76,0x8c,0xe8,0xc4,0x9d,0x48,0xf7,0xc6,0xab,0x2f,0x43,0x4e,0x83,0x21,}, + {0xd9,0x27,0xe2,0xed,0xab,0xbe,0xc8,0x59,0xf6,0x45,0xa0,0xe2,0xe0,0x69,0x45,0x0c,0x8e,0xa4,0x07,0xd8,0xc9,0x10,0xd4,0x6d,0x1c,0xdc,0x5c,0xea,0x07,0x4a,0x8b,0xeb,0x74,}, + {0xd4,0x68,0xba,0x6e,0x10,0xc4,0x88,0x9a,0x8b,0x4d,0xab,0x67,0xb5,0x4a,0xca,0xed,0x6d,0x00,0x6c,0x59,0xd0,0xcb,0x24,0x91,0xb8,0x47,0x52,0xcd,0x87,0xe4,0xde,0x5f,0x2b,}, + {0xd5,0x2a,0xbb,0x61,0xe0,0x65,0x50,0x07,0x8e,0x53,0x29,0xba,0x65,0x91,0xd6,0x92,0x1d,0x2b,0x1e,0x67,0x72,0xcb,0x2a,0x88,0x57,0x1d,0xcb,0x53,0xc9,0x26,0x71,0xb6,0x57,}, + {0xd5,0x2c,0xaa,0xaa,0x18,0xd2,0xd3,0x09,0x65,0x77,0x48,0xca,0x63,0x6f,0x83,0xcc,0xb5,0xcb,0x72,0xc5,0x50,0x3c,0x09,0xe6,0xc9,0x5d,0x65,0x8e,0x26,0x7a,0x52,0x49,0x13,}, + {0xd5,0x2e,0x9a,0x31,0xd8,0x63,0x30,0x47,0x25,0x91,0xc4,0x0f,0x65,0x0c,0x7b,0x64,0x7a,0xc8,0xd8,0xc7,0x4d,0x0c,0x5c,0x76,0x4b,0x2c,0xc7,0xc9,0x1b,0xb2,0x22,0x0d,0x1e,}, + {0xd5,0x2d,0xb1,0xb5,0x60,0xc7,0x8b,0xae,0x6b,0x81,0x0a,0x65,0xc7,0xcc,0xb8,0xea,0x95,0x47,0x17,0xc1,0x6c,0xe5,0x85,0xda,0xc9,0x00,0x63,0xae,0x70,0xe2,0x95,0x53,0x64,}, + {0xd4,0xee,0x9a,0x6d,0x20,0x65,0xcc,0x7c,0xd7,0x8a,0xb3,0x54,0xc7,0xcb,0x9c,0x3f,0x8f,0xb9,0x0c,0xc9,0xaf,0x48,0x9a,0x85,0xbb,0xc5,0xc9,0xec,0xd8,0xea,0x95,0x48,0x5f,}, + {0xd5,0x2f,0x9a,0xed,0x68,0x61,0xd0,0x75,0x1b,0xaa,0xbb,0x62,0xc5,0xef,0x32,0x32,0x6e,0x57,0x32,0x63,0xb0,0x49,0x1b,0x7d,0x2c,0x9e,0xc3,0x52,0x47,0x65,0x71,0x87,0x1d,}, + {0xd4,0x29,0xf1,0xe5,0x10,0xc4,0xee,0x4b,0xa2,0xb2,0x1a,0x11,0x6e,0xed,0xdd,0x9c,0x95,0xc8,0x87,0xc7,0x0e,0x17,0xe5,0x8e,0x28,0xe4,0x62,0x8f,0x56,0x98,0x52,0x4b,0x24,}, + {0xd3,0x28,0xc9,0xa1,0x48,0xc6,0xcc,0x49,0x19,0x61,0x59,0x2c,0xc6,0xcb,0x4a,0xdc,0x69,0x40,0xf3,0xc0,0x87,0xfb,0x9d,0x6d,0xb7,0x54,0xc6,0x05,0xa0,0xe6,0xfa,0xb6,0xdb,}, + {0xd3,0xd7,0xa2,0xdd,0xa2,0xc4,0x41,0x43,0x52,0x72,0x67,0x63,0xc2,0x21,0x56,0xee,0x93,0x3a,0xe9,0xd4,0x60,0xa5,0x14,0x71,0x4e,0xe9,0xea,0xa1,0x77,0x62,0x6d,0x38,0xdc,}, + {0xd6,0x56,0x71,0x95,0x21,0x56,0xe0,0xbf,0x63,0x6d,0xb9,0x2c,0xba,0x40,0xcb,0x5e,0x72,0xa5,0x23,0x74,0xa0,0x49,0xcc,0x95,0x54,0x92,0xc6,0xc0,0x3a,0x8e,0x6e,0xa9,0xec,}, + {0xd8,0xa7,0xba,0xa5,0xe3,0xea,0xe0,0x27,0x9c,0xcf,0x79,0x33,0x57,0xc2,0x49,0x2d,0xd6,0xed,0x77,0x55,0xaf,0xde,0xa4,0x72,0xc9,0x6e,0x54,0xee,0xce,0xdc,0x72,0x46,0x92,}, + {0xd7,0xe8,0x8a,0x35,0x51,0x6e,0x29,0xa4,0x8a,0x04,0x14,0x91,0xe2,0xec,0x24,0xd4,0xa0,0xb5,0x7d,0xe7,0x4f,0xc0,0xe5,0x8a,0x27,0x24,0x68,0x43,0x24,0xc9,0xf1,0xa5,0x1d,}, + {0xd0,0x5e,0xa2,0xe1,0x5a,0x96,0x02,0xf8,0xd2,0x8e,0xc6,0xdc,0x50,0x00,0x48,0xe4,0x8e,0x49,0x23,0x50,0x00,0x49,0x1c,0x92,0x49,0x24,0xd4,0x20,0x47,0x24,0x91,0xc9,0x1c,}, + {0xd0,0x9b,0x9a,0xe1,0x5a,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0xa2,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0xd9,0x92,0xa1,0x1a,0x52,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,}, +}; +static const gsm_frame gsm_data_sedesat[] = { + {0xd3,0xd7,0x50,0xd8,0xd9,0x50,0x20,0x49,0x2c,0xb6,0x58,0xbc,0x55,0x20,0x17,0x5d,0x4d,0xb7,0x24,0x63,0x20,0x45,0x29,0x8a,0x4c,0xb5,0x5c,0x80,0x29,0x2a,0xb7,0x36,0xe2,}, + {0xd7,0x25,0x50,0xd0,0x19,0x67,0xa0,0xca,0xdd,0xb3,0x5d,0x2c,0xbf,0xa0,0xf6,0xfc,0xb5,0xba,0x1b,0x82,0xe1,0x48,0xad,0x4a,0x27,0x20,0xb7,0xe2,0xc2,0xe2,0x98,0x76,0xed,}, + {0xd9,0x33,0xd9,0x65,0x10,0x7b,0xc4,0x4b,0x5e,0x84,0x39,0xc5,0x6d,0xa9,0x86,0x99,0xa5,0x1b,0x61,0x60,0xe8,0x26,0xe3,0x80,0xd4,0x17,0xaf,0x26,0x93,0x8a,0x44,0x34,0x3b,}, + {0xda,0x32,0xf1,0x18,0xc9,0x9d,0xcd,0x85,0x5a,0x8e,0xa8,0x0c,0x8f,0x8d,0x0b,0x12,0xae,0x1a,0x22,0x50,0xce,0x3c,0xc4,0x8a,0xa8,0xe0,0xc5,0x2d,0xb5,0x5e,0x6b,0x0c,0x9a,}, + {0xda,0x6e,0xfb,0x90,0x50,0x87,0x4b,0xc0,0x8b,0x8b,0x95,0x90,0xa7,0x30,0xe5,0x11,0x6e,0x87,0x9c,0x5e,0xcd,0x18,0xa2,0x70,0xc3,0x58,0xa8,0xd1,0x57,0x06,0x88,0x74,0x63,}, + {0xda,0xae,0xfb,0x90,0x91,0xd9,0x71,0xc3,0x59,0xac,0x64,0xab,0x8a,0xb1,0xa5,0x15,0x4d,0x2a,0x22,0xc2,0xcf,0xc2,0xcf,0x29,0x4a,0x6b,0x8f,0x50,0x35,0x55,0x59,0xbb,0x17,}, + {0xda,0xec,0xfb,0xd4,0x50,0xc0,0xce,0x07,0x33,0x36,0x05,0x76,0x7e,0xce,0xd7,0x64,0x92,0x65,0xdf,0xda,0xce,0xda,0xf7,0x9a,0xed,0x27,0x5e,0xb0,0x9b,0xdc,0xd5,0xd9,0x2c,}, + {0xda,0xad,0xfa,0x8c,0x21,0x7a,0xac,0x0d,0x3a,0xd7,0x17,0x1c,0xaa,0x8c,0x0f,0x0b,0x72,0x9c,0xdd,0xf0,0x4c,0x1f,0x9c,0x8a,0x55,0x2d,0xe6,0xce,0xd8,0x9f,0xda,0xd9,0x33,}, + {0xd6,0x5c,0x6a,0xee,0x60,0x59,0x4e,0x37,0x3f,0xdb,0xfd,0x6a,0x5b,0x32,0x24,0x51,0xed,0xd6,0xe4,0x53,0xd3,0xc9,0x11,0xf0,0xa9,0x2c,0x57,0x30,0xba,0xe2,0x3d,0x58,0xdd,}, + {0xd6,0x1e,0x7b,0x6d,0xf0,0xad,0x8f,0xd6,0xfc,0x22,0xa6,0xea,0x57,0xae,0x2d,0xbb,0x90,0xe0,0xec,0x57,0x50,0xbb,0x26,0x49,0x2e,0x95,0xb0,0xf0,0x37,0xed,0x64,0x84,0x23,}, + {0xd5,0x1c,0x6b,0x76,0x58,0xb4,0xec,0xe3,0x37,0x68,0x22,0x1f,0xb4,0xec,0x39,0x15,0xd4,0x36,0xc0,0x5b,0x69,0x72,0xe3,0x97,0x64,0xd7,0xb5,0x48,0x03,0xcc,0xc9,0xed,0xd3,}, + {0xd3,0x9c,0x73,0x79,0xa0,0xb5,0x27,0x87,0x0f,0x37,0xb2,0xe5,0xb4,0xaa,0x32,0x95,0xac,0xce,0xa3,0xb8,0x44,0xb6,0xc1,0x45,0x6d,0xef,0xac,0x24,0xc8,0xd1,0x00,0x87,0xa6,}, + {0xd1,0x23,0xe4,0xb1,0xa3,0xbc,0x23,0x6f,0xb4,0x48,0x92,0xa4,0xba,0x01,0x04,0x93,0xad,0xa6,0xe2,0xc2,0x40,0xb9,0x16,0x48,0x96,0xdb,0xce,0x60,0x99,0x59,0x96,0x56,0x51,}, + {0xd8,0xa5,0x8a,0x29,0x5a,0xb5,0x22,0xa0,0x02,0x4e,0x36,0x88,0x8b,0xaf,0xb6,0xdb,0x6d,0xb7,0x97,0x57,0x51,0x71,0x63,0x97,0xa2,0xdd,0x66,0x4c,0x32,0x12,0x40,0xb4,0x93,}, + {0xd4,0xdb,0x6c,0xae,0x10,0xe8,0x6e,0x36,0xd2,0x24,0x17,0x6c,0xf0,0xb1,0xbb,0x1b,0x8c,0xb4,0xfc,0x5a,0xf0,0x46,0xee,0xad,0xb6,0x9f,0x68,0xef,0xc5,0x14,0xba,0x95,0x02,}, + {0xd5,0xda,0x7c,0x2d,0xa0,0xb5,0x8c,0x9e,0x0c,0x8e,0x4f,0x23,0x5b,0xcc,0x02,0x3c,0x71,0xb8,0xdc,0x5b,0xe7,0x8f,0x28,0x72,0xaf,0x12,0x5b,0xc9,0xca,0xdc,0xa2,0x47,0x2a,}, + {0xd4,0xd9,0x83,0x6d,0xe8,0x5f,0x4e,0xbb,0x54,0x81,0xe6,0xa4,0xbd,0x4d,0xda,0xa4,0x4f,0x16,0xf9,0x5f,0x0a,0x0b,0x9d,0xb2,0x38,0xc2,0xc0,0xcd,0xe4,0xad,0xba,0xb7,0x20,}, + {0xd5,0x19,0x7a,0x22,0x70,0x5d,0x0d,0x06,0xa4,0x72,0x57,0x23,0xc2,0x8d,0xba,0x45,0x8e,0xb9,0x2c,0xb8,0xac,0x46,0xf4,0x03,0x95,0x9c,0xbc,0x8b,0x76,0x94,0x65,0x74,0x62,}, + {0xda,0x66,0xba,0xec,0xa1,0xa7,0x2c,0x3d,0xa4,0x9d,0x86,0x0d,0x85,0x4b,0x9d,0xa5,0x4f,0x97,0x46,0xed,0x0c,0x37,0x5f,0x1f,0xb5,0x74,0x83,0xb1,0x4b,0x5a,0xea,0x38,0xf1,}, + {0xd9,0xa9,0xec,0xb5,0x62,0x6f,0x4e,0xe6,0xf9,0xd3,0x1e,0xeb,0x97,0x31,0xfa,0xf3,0xae,0xe7,0xe4,0x6a,0xae,0x1f,0xa5,0x53,0xc1,0x7c,0xa8,0xcf,0x14,0xa8,0x87,0x32,0x1f,}, + {0xda,0x68,0xdb,0xad,0xa9,0x88,0xb0,0x02,0xb3,0x2a,0x25,0x53,0x7e,0xf0,0x1b,0x06,0x6a,0xc1,0x65,0xa2,0xcf,0x36,0xe0,0x91,0x0e,0x24,0xe3,0x70,0x19,0x30,0x92,0x89,0x1c,}, + {0xda,0x27,0xcc,0xbd,0xe9,0x85,0x31,0x3c,0x2b,0xc9,0x3a,0x94,0x6f,0x30,0x54,0xe9,0x74,0x2c,0x2c,0xd2,0x90,0xc0,0x62,0xc8,0xb8,0xda,0x6c,0xed,0x33,0x53,0xe7,0xc1,0x7d,}, + {0xda,0xaa,0xc4,0x71,0xea,0xae,0x8d,0x8e,0xcb,0xd4,0x45,0x1b,0xdc,0xad,0x17,0x4b,0x8c,0xb3,0x18,0xb4,0xac,0xd4,0x45,0x8c,0xc1,0xe9,0x64,0xac,0xa7,0xe3,0x91,0x91,0x28,}, + {0xd9,0xe5,0xe3,0xe4,0xe2,0xa8,0x09,0x16,0x83,0x72,0xb4,0xc8,0xea,0xea,0x3e,0x2a,0xca,0x37,0x58,0xce,0x88,0xa9,0x88,0xa2,0x42,0xc2,0x66,0xc7,0x3c,0xe0,0x94,0xe4,0xa9,}, + {0xd4,0x68,0xb2,0x61,0xd0,0xda,0xc6,0xc8,0x70,0x38,0x4e,0xb5,0xf0,0xab,0xc9,0x34,0x94,0xa0,0x6f,0x51,0xb1,0xc9,0x24,0x8e,0x36,0x8f,0x56,0xd0,0xb9,0x5d,0x92,0x58,0xa8,}, + {0xd4,0xea,0xbb,0x26,0x20,0x5f,0xef,0x51,0x23,0xae,0xae,0xe6,0x5f,0x12,0xb4,0x45,0x6a,0x56,0xf6,0xbf,0xb1,0xc7,0x09,0x1c,0x48,0xf3,0x63,0x70,0x67,0x62,0x60,0x74,0xe3,}, + {0xd4,0x6d,0xb3,0x65,0xe0,0xc1,0x10,0x4b,0x63,0xcd,0xd0,0x23,0xba,0xd0,0xcc,0xac,0x9d,0xba,0x40,0xbd,0x0f,0x41,0x9c,0x8e,0x59,0x5c,0xbd,0xac,0xdc,0x3a,0x86,0xb5,0x47,}, + {0xd4,0xac,0xb3,0x69,0xa0,0x5f,0xe9,0x18,0xd1,0x18,0xbe,0x56,0x61,0xb0,0xc6,0xdb,0x6f,0x99,0x23,0x5f,0xad,0xe7,0x24,0x75,0x53,0xd4,0x5f,0x70,0xc9,0x24,0x91,0xb4,0x4f,}, + {0xd4,0xee,0xaa,0xad,0xa1,0xbd,0x0c,0x01,0x1d,0x8f,0x69,0x5b,0xbf,0x30,0x06,0xdb,0xce,0x4b,0x9c,0xbd,0xac,0xca,0x87,0x33,0xa9,0x5b,0xbb,0xac,0xf7,0x1c,0x1d,0xa8,0xaa,}, + {0xd4,0xed,0xca,0x2d,0x61,0x61,0xc9,0xb8,0xe1,0xd5,0x8e,0x25,0xbf,0xa9,0x13,0x31,0x8d,0xd3,0xee,0xbf,0x2d,0xbb,0x56,0xba,0x47,0x00,0xbf,0x8e,0x8e,0xeb,0xb1,0xba,0xe3,}, + {0xd4,0xef,0xa3,0x69,0x68,0x5d,0x50,0xa1,0x9b,0x72,0x39,0x2c,0xbd,0x8e,0x26,0xdb,0xe2,0xb7,0x1c,0x5d,0xcd,0xbd,0x25,0x82,0xd4,0x9f,0x5e,0xf1,0x59,0x65,0x4c,0x15,0x24,}, + {0xd4,0xa8,0xd9,0x21,0x58,0xbc,0xce,0xdd,0x6c,0xb1,0xa6,0x2b,0xb8,0xef,0x3e,0xeb,0x72,0x38,0xa2,0xbd,0x6f,0x78,0xec,0x6d,0xb8,0xda,0x5f,0x4c,0x40,0x3b,0x5a,0x3b,0x24,}, + {0xd3,0x26,0xb9,0x5e,0x09,0xbc,0xec,0x31,0x01,0xd1,0xd7,0x24,0xbe,0x89,0xa6,0x99,0x81,0xf7,0xa3,0xc2,0x45,0x58,0xe9,0x48,0x01,0x1f,0xd2,0x44,0xfd,0xa4,0x8d,0xb2,0x4c,}, + {0xd3,0x1c,0xb3,0x19,0xeb,0xc8,0x41,0xe5,0xf5,0xba,0x48,0xe8,0xc4,0x41,0x1f,0x64,0xa9,0xc6,0xe3,0xb4,0x00,0xe7,0x34,0x6f,0x17,0x14,0xb4,0xc0,0x39,0xf4,0xc7,0x98,0xdd,}, + {0xd5,0xd5,0x71,0x98,0x52,0xee,0xc0,0x63,0x55,0x8f,0xb9,0xe1,0x94,0xa0,0xb4,0xdc,0x92,0x49,0x9d,0x58,0xc0,0x4a,0xc8,0x62,0xba,0x65,0xa8,0x80,0x57,0x9b,0x68,0xaf,0x1c,}, + {0xd8,0x67,0xab,0x2d,0x8a,0xd8,0xa0,0x38,0xab,0x6e,0xc9,0xa6,0xdd,0x41,0x6b,0x6f,0xff,0xff,0xbe,0x59,0xce,0x49,0x2c,0xe9,0x57,0x2c,0x53,0xe7,0xbf,0x2a,0xa5,0xac,0x4f,}, + {0xd8,0x25,0xb0,0xe1,0x19,0x56,0x07,0x82,0x0a,0x4c,0x04,0xc1,0xae,0xc7,0x04,0x89,0x43,0x83,0x9b,0xcc,0x01,0xae,0x8b,0x89,0x4b,0x24,0xf0,0x00,0xeb,0xac,0x92,0xfa,0xf5,}, + {0xd0,0x9b,0x9a,0xe1,0x5a,0xe4,0x01,0x39,0x23,0x86,0xd4,0xdb,0x50,0x20,0x49,0x24,0x6e,0x39,0x24,0x50,0x20,0x46,0xdb,0x92,0x47,0x1c,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x9b,0x9a,0xe1,0x5a,0xe6,0x00,0x46,0xdc,0x92,0x38,0xe4,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x9b,0x9a,0xe1,0x5a,0x54,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, +}; +static const gsm_frame gsm_data_sedmdesat[] = { + {0xd2,0x54,0x8a,0xa9,0xa2,0x50,0x20,0xc9,0x25,0x96,0x69,0x5d,0x53,0x00,0x75,0x1e,0x4d,0xb3,0x13,0x64,0xc0,0x38,0x63,0x31,0x40,0xcc,0x7e,0xc0,0xb4,0xda,0x89,0xb2,0xa4,}, + {0xd9,0x5b,0x49,0xcd,0x59,0x59,0xa2,0x16,0x9a,0x69,0x21,0x51,0x55,0x43,0xb8,0xa2,0xce,0x55,0x38,0x55,0xc8,0x48,0xee,0x0b,0x37,0x5b,0x5c,0x64,0x07,0xd1,0xd0,0xcd,0x52,}, + {0xda,0x62,0xe3,0xa5,0xab,0x79,0xc6,0x27,0x62,0xe9,0xfb,0x1e,0x63,0x08,0x6f,0xbe,0x56,0x6f,0xb0,0x6b,0x29,0xfe,0x55,0xd3,0x8a,0xf6,0x5d,0x6c,0x66,0x7c,0xb4,0x4e,0x2d,}, + {0xdb,0x25,0xd3,0xe9,0x23,0x6f,0x2e,0x45,0x29,0x96,0xa5,0xea,0x5d,0x30,0x0d,0xda,0x7d,0xb9,0x92,0x52,0xec,0xd8,0xf6,0xb2,0x61,0xd5,0xe6,0x8e,0xcc,0xed,0x6e,0x38,0xf9,}, + {0xdb,0x69,0xbc,0xe8,0xea,0xe8,0xd0,0xaa,0x66,0x82,0x66,0xeb,0x7b,0x4f,0x70,0x75,0x6d,0x79,0x13,0x94,0xac,0x70,0x9d,0xa6,0x3a,0xb2,0xde,0xaf,0xf4,0x5d,0x2c,0x4b,0xcc,}, + {0xdb,0x65,0xdc,0x69,0x2b,0xce,0xaf,0x43,0xd8,0x4e,0x5b,0x0b,0x82,0xaf,0x78,0x6d,0x93,0x54,0xe6,0xb3,0x6e,0x3c,0xfb,0x2e,0x97,0x8b,0xa7,0x4d,0x2e,0x45,0x68,0x79,0x52,}, + {0xdb,0x68,0xb4,0xa8,0xe3,0xa6,0xcd,0x18,0xd4,0x0d,0xea,0xa4,0xce,0xae,0x23,0x2a,0x50,0x48,0xe3,0xb0,0xac,0x67,0x13,0xae,0x44,0x14,0xa8,0xcc,0x4c,0x93,0xa4,0x67,0xfd,}, + {0xd4,0x24,0x82,0x32,0xd8,0x76,0xc8,0x27,0x74,0x1a,0x7d,0x1f,0xa8,0xae,0x49,0x25,0x89,0x22,0xbe,0xe5,0xd2,0x6d,0x1b,0x60,0xf6,0xa4,0x55,0xae,0x5a,0xa4,0x96,0x2c,0x1c,}, + {0xd4,0xe7,0x72,0xb2,0x58,0x57,0x51,0x49,0x34,0x70,0x0e,0xab,0xab,0xb0,0x49,0x1e,0xd1,0x80,0xe5,0x55,0xd1,0xca,0xc4,0xad,0x67,0x68,0x64,0xd1,0x3e,0xdd,0xd6,0x10,0x49,}, + {0xd5,0x9e,0x71,0xa7,0x38,0xaf,0x0f,0xdf,0x1a,0x7e,0x39,0x1e,0xb5,0x51,0x2d,0x42,0x9a,0xc8,0xd4,0x5b,0x6d,0x34,0x3b,0x59,0x3b,0x62,0xb8,0x90,0xa9,0x13,0xa1,0xd9,0x5b,}, + {0xd0,0xe5,0xc4,0x7b,0x18,0xb4,0x08,0xda,0x82,0x00,0xea,0xee,0xf0,0x23,0xdb,0xc3,0x88,0x6e,0x43,0xec,0x25,0x68,0xdc,0xad,0xb1,0x73,0xea,0x63,0x6d,0x4a,0xd0,0xb4,0x3e,}, + {0xd0,0xac,0xb4,0x7e,0x10,0xb6,0x42,0xa7,0x2c,0x2a,0xb2,0xd8,0xb2,0xa1,0xfc,0xd4,0xd1,0x39,0x0a,0xb4,0xa1,0x8b,0x6c,0x93,0x05,0x63,0xb2,0x81,0x22,0xb4,0xed,0xcc,0x0c,}, + {0xd8,0xd4,0x6a,0xde,0xb4,0xad,0xd2,0xb6,0xdb,0x6e,0x4f,0xe5,0x5e,0x12,0xf8,0x1d,0x02,0xc9,0x25,0x58,0xd3,0x59,0x1a,0x44,0xf8,0xda,0x5b,0xb3,0x4b,0x2a,0x51,0xc9,0xd0,}, + {0xd2,0x22,0xbb,0x36,0x22,0x58,0x52,0xcf,0x6e,0xb9,0xb2,0x5a,0xaa,0x0a,0xa8,0xd5,0xfb,0x86,0x0b,0xa4,0x6c,0xc4,0xdd,0xb6,0xc4,0x81,0xe6,0x2b,0x53,0x43,0x5b,0xff,0x11,}, + {0xd1,0x29,0xcc,0x2d,0xa9,0x5a,0x87,0x01,0xcd,0x2d,0x6f,0x6d,0xb6,0xc9,0x40,0xfa,0xa9,0xab,0xa5,0xb5,0x68,0x2a,0x1f,0x55,0xc5,0x2d,0xb3,0xa5,0x4c,0x14,0x6d,0xc9,0x5b,}, + {0xd1,0x68,0xd3,0xe9,0xa2,0x5d,0x27,0x5b,0x9b,0x61,0x53,0x95,0xb7,0x06,0x2d,0xaf,0x8d,0x84,0xcd,0x5b,0xa3,0x47,0x1b,0x92,0xaa,0x0e,0x5b,0xa3,0x42,0xe3,0x8d,0x55,0x97,}, + {0xd2,0xa1,0xba,0xaa,0x60,0xb5,0xac,0xca,0xa4,0x91,0xba,0xfb,0xbd,0xad,0xb2,0x7b,0x36,0xcb,0x23,0x5b,0x6d,0x06,0x9f,0x4e,0x4b,0x2c,0x5b,0x6b,0xc6,0xc3,0x59,0x8f,0x25,}, + {0xd3,0x5c,0xa1,0xf2,0xf0,0x5b,0xec,0x57,0x2b,0x6b,0xb2,0xe6,0x5d,0xcd,0x56,0xe2,0x75,0x4e,0x1d,0x5c,0xab,0x76,0xfc,0x84,0x26,0xe0,0x72,0xaa,0x5c,0xaf,0xcd,0xa2,0x8b,}, + {0xd0,0xaa,0xdc,0x6d,0xea,0xc4,0x44,0x86,0xbf,0xd2,0xb6,0x9a,0xb0,0x41,0x85,0x6f,0x8c,0xa8,0x93,0xe8,0x02,0xc4,0x91,0x9e,0x39,0x6c,0xea,0x61,0x42,0x92,0x2b,0x67,0x2d,}, + {0xd2,0x21,0xac,0xad,0x62,0xe3,0x22,0x66,0x12,0x49,0x45,0x25,0x5c,0x81,0xef,0x74,0x6d,0xb6,0xec,0x5a,0xc0,0xdc,0xfe,0xfa,0xd7,0x54,0xca,0x00,0xf9,0xb4,0xb3,0x5b,0x2d,}, + {0xd6,0xa2,0x51,0x67,0x29,0x9f,0xd3,0x37,0x24,0x8a,0x48,0xfb,0x50,0x13,0x0c,0xdc,0x6d,0xb9,0x1c,0x8a,0x6e,0xc4,0x80,0x07,0xd9,0x6c,0xd6,0xb2,0xc8,0xca,0x07,0xd6,0xdc,}, + {0xd5,0x1a,0x6b,0x72,0xa8,0x5c,0xb0,0x5f,0x52,0x88,0xac,0xdc,0xb9,0x2e,0x39,0x7c,0x2f,0x27,0x70,0xb8,0xd1,0x3b,0x2c,0x76,0x39,0x43,0x5f,0x2c,0x64,0x34,0x8f,0xc9,0x62,}, + {0xd4,0x9b,0x82,0x72,0x68,0x5e,0x8f,0x90,0xfa,0x56,0xbd,0x2c,0xbe,0xcf,0xc8,0x14,0xcd,0x49,0x2c,0xbe,0xad,0xb7,0x20,0x35,0xb7,0x24,0x81,0x2f,0x3d,0x5b,0x48,0x08,0xa5,}, + {0xd7,0xdc,0x51,0x65,0x2b,0xb6,0xec,0x5d,0x64,0x52,0x03,0x43,0xb8,0xcc,0x65,0x75,0x68,0xd6,0x25,0xa6,0xcb,0xc7,0x01,0xf5,0xe5,0x78,0x7c,0xab,0xbe,0x3a,0x95,0x46,0xb4,}, + {0xd9,0xe9,0xdc,0xec,0xea,0x71,0xce,0x4a,0xde,0x8f,0xa7,0x2c,0x69,0xf1,0xd9,0x2d,0x9a,0x4e,0xe6,0x57,0x50,0xa9,0x39,0xbd,0x9c,0xdf,0x6c,0x8e,0x77,0x17,0xd7,0x39,0xd9,}, + {0xd9,0xe8,0xdc,0xb5,0x61,0xa4,0x8e,0xfb,0xd3,0x70,0xd7,0x23,0xb0,0xf0,0xcc,0x4b,0xec,0x3d,0x00,0x62,0xd1,0x76,0xd2,0x8a,0xc3,0x1b,0x86,0xef,0x48,0x32,0x6a,0xc4,0xaf,}, + {0xda,0x28,0xdc,0x35,0xe9,0xdd,0x50,0xaa,0xd2,0x95,0x42,0xf0,0x56,0xf0,0xf4,0x33,0xa3,0x25,0x2c,0x7a,0x91,0x05,0xa2,0x75,0xae,0x1c,0xcc,0x90,0x89,0x29,0x52,0x52,0xdc,}, + {0xda,0x6b,0xc4,0x35,0xea,0xf0,0xb0,0x23,0x5a,0x75,0xc5,0xdb,0xc4,0xcd,0x4a,0xfb,0x63,0xc7,0x0c,0x66,0xac,0xa2,0x91,0x61,0xf1,0x5d,0x5e,0x8c,0x84,0xe9,0x67,0x56,0x2b,}, + {0xdb,0x26,0xcc,0x29,0x6a,0xea,0xad,0x54,0xdc,0xf1,0x55,0x4b,0xd8,0xcb,0x70,0x9a,0x6d,0xdf,0x14,0xec,0xa9,0x30,0xdf,0x30,0xe8,0xe5,0xb8,0xab,0x56,0x1b,0x81,0x34,0xd0,}, + {0xd4,0xa0,0x8a,0x16,0x30,0x72,0x88,0x06,0x6d,0x4d,0x76,0xb4,0xe4,0xe8,0xc5,0x9c,0xa6,0xd1,0x5b,0xda,0xaa,0x3b,0x26,0x72,0xc8,0x10,0x55,0x6c,0xf6,0xfd,0x7a,0x26,0x92,}, + {0xd4,0xe9,0xbb,0x26,0x20,0x55,0xd4,0x2e,0x55,0x6e,0xc9,0x2c,0x5e,0xf2,0xc0,0x2a,0xae,0x59,0x26,0xbc,0xb2,0x48,0xd0,0x16,0x45,0x6a,0xbf,0x92,0x4d,0x2b,0x49,0x3e,0xa4,}, + {0xd4,0xac,0xbb,0xa5,0xd8,0x63,0x30,0xd9,0xad,0xad,0x50,0x32,0x5f,0x6e,0xab,0x5b,0xb6,0xa8,0x80,0xc1,0x4e,0xf5,0x16,0x51,0xea,0x87,0x5f,0x10,0x94,0x79,0xae,0x57,0x63,}, + {0xd4,0xea,0xcb,0x29,0xa0,0x61,0x8c,0xaa,0xd2,0xee,0xbe,0x9c,0x5f,0xcd,0xde,0xdd,0x4d,0x88,0xe3,0x5f,0xf0,0x47,0x1b,0x8e,0xb1,0xce,0xbf,0xf3,0x37,0x23,0x71,0xc7,0x27,}, + {0xd4,0xaf,0x9b,0xa5,0xe0,0x6c,0xaf,0x86,0xf4,0x93,0xe6,0x90,0x61,0x50,0x1e,0x2b,0xae,0x4a,0xe2,0xbd,0x4d,0xa8,0x07,0x33,0x3b,0x26,0x5f,0xca,0x9e,0xd5,0x74,0x4a,0xa3,}, + {0xd4,0xed,0xb2,0x6d,0x68,0x5f,0xad,0x58,0x63,0x6d,0xe1,0xcd,0x61,0xee,0xb9,0x1b,0x8d,0xb5,0xc4,0x5f,0x4e,0x49,0x5d,0x96,0xc7,0x48,0x61,0xae,0xae,0x34,0x55,0x58,0xdc,}, + {0xd4,0xef,0x9b,0x29,0xa8,0xbd,0xb0,0xc8,0x7a,0x91,0xc7,0x24,0x5f,0x51,0x38,0xc9,0xe6,0x47,0x23,0xbd,0xcd,0xc7,0x26,0x82,0x26,0xd7,0x5c,0xb0,0xbb,0x75,0x8d,0x01,0x1c,}, + {0xd4,0xa8,0xe0,0xe1,0x90,0xbc,0xed,0xdd,0x6c,0xb1,0xa4,0x35,0xb2,0xcf,0xc9,0x62,0x6e,0xc8,0xe8,0x5f,0x2b,0x2c,0xdf,0x96,0xc9,0x63,0x5f,0xaa,0x2c,0x4b,0x83,0x39,0x61,}, + {0xd3,0x26,0xb9,0x61,0x90,0x5f,0x47,0x24,0x4a,0x57,0x54,0xba,0xbc,0xc8,0x28,0x98,0x41,0x69,0xe3,0xc0,0x27,0xe7,0x1b,0x66,0x04,0x9c,0xbe,0xc3,0x6b,0x94,0x86,0x3e,0xff,}, + {0xd3,0x1f,0xb2,0xa1,0x6b,0xc8,0x01,0xad,0x3e,0x92,0x45,0x1c,0xc4,0x21,0x4d,0x6b,0xed,0xc5,0x1b,0xe2,0x61,0x25,0x23,0x99,0xdb,0x23,0xac,0x80,0xc7,0x5b,0x90,0xd7,0x24,}, + {0xd6,0x54,0x71,0x9c,0x22,0xa6,0xc0,0x39,0x9d,0xef,0x67,0xeb,0xd4,0xc0,0xb4,0xe4,0x96,0x4b,0x56,0xe4,0x80,0xa7,0x51,0x4d,0xb9,0x1c,0x8e,0xa0,0xcd,0x5b,0x4d,0xb9,0x1c,}, + {0xd8,0xa7,0xaa,0x6d,0x59,0xee,0xc0,0x3b,0x2b,0x91,0xe7,0xa5,0xc5,0xe1,0xd9,0x2e,0xd6,0xed,0xbd,0x59,0x8e,0xc9,0x24,0x9c,0xb8,0xe5,0x5c,0x0a,0x54,0xe7,0x01,0x22,0x92,}, + {0xd7,0x65,0x92,0xf9,0x4b,0xa1,0x6c,0xa2,0x89,0x90,0xa7,0x37,0xd1,0x2c,0xf2,0x9c,0xad,0xb6,0xdb,0x58,0x43,0x01,0xab,0x69,0xb9,0x24,0x50,0x00,0x38,0xe4,0x92,0x39,0x23,}, + {0xd8,0x20,0xa2,0xe1,0x5a,0x50,0x00,0x38,0xdc,0x71,0xc9,0x24,0x50,0x00,0x47,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd8,0x20,0xa2,0xe1,0x5a,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd8,0x20,0xa2,0xe1,0x5a,0x52,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, +}; +static const gsm_frame gsm_data_osmdesat[] = { + {0xd4,0xd6,0x71,0x98,0xe2,0x50,0x40,0x36,0x9a,0x69,0x84,0x9a,0x5e,0xc0,0xd9,0xa3,0x52,0x49,0x65,0x76,0xc0,0xaa,0xe4,0x68,0xc5,0x2c,0x94,0xa0,0x14,0x8b,0x66,0x34,0x64,}, + {0xd5,0x5d,0xfc,0x4c,0x73,0x85,0x00,0xa8,0xd9,0x69,0x24,0x53,0x53,0x00,0x92,0x0a,0x29,0x12,0x99,0x91,0xef,0x36,0xdb,0x72,0x78,0xa4,0x5c,0x88,0x24,0x55,0x93,0x4a,0xe8,}, + {0xd3,0x69,0xf9,0xc9,0xfa,0x80,0x91,0x32,0x25,0x4e,0x4b,0x24,0x50,0xae,0x22,0x7a,0x52,0xc7,0x6c,0x53,0xa8,0x2c,0x7a,0x95,0x35,0x1b,0x56,0xca,0x34,0x25,0x36,0xb9,0x65,}, + {0xd3,0x2c,0xc9,0x4a,0x79,0xa8,0xa9,0x49,0x00,0xcd,0xc9,0x2d,0x55,0x04,0x14,0xc3,0x5a,0x29,0x6a,0xa9,0x06,0x73,0x0d,0x63,0x36,0xbb,0x55,0xa6,0xf3,0x15,0x71,0x9c,0xdb,}, + {0xd3,0x22,0xb9,0x9d,0xa1,0x55,0x45,0xd9,0x24,0x02,0x77,0xe4,0x9d,0x28,0xde,0x9e,0x09,0xab,0x2d,0x50,0xe8,0x56,0xb8,0x69,0xb7,0x14,0xc0,0xa9,0x5a,0x99,0x41,0xc3,0xda,}, + {0xdb,0x2a,0x72,0x58,0x11,0x5b,0xee,0x45,0x11,0x72,0x03,0x69,0x81,0x2d,0x25,0x0c,0x15,0xb2,0x7b,0x88,0xec,0x58,0xa4,0x54,0xae,0x95,0x83,0x6c,0x61,0xaa,0xae,0x49,0x5d,}, + {0xdb,0x2c,0xbb,0x68,0x10,0x7b,0xae,0xb9,0xc6,0xd1,0xde,0x66,0x82,0xef,0xae,0xbb,0x8f,0x3b,0x25,0x7b,0x0e,0x74,0xed,0x76,0xcc,0xe7,0xb7,0x6e,0xe9,0xa7,0x6f,0xc7,0xf0,}, + {0xda,0xed,0x92,0x14,0x10,0x6f,0x30,0x76,0x6d,0x72,0x38,0x7a,0xdf,0x4e,0x29,0xa8,0xe2,0x39,0x55,0xd6,0xed,0xab,0x61,0xe3,0x25,0xe2,0xae,0xcc,0x3a,0xa7,0x55,0x59,0x5a,}, + {0xdb,0x29,0xa2,0x54,0x50,0xe0,0x89,0x65,0x5f,0x4f,0xaa,0xa6,0xd2,0xec,0x35,0x2b,0x8e,0x36,0xba,0x5c,0xa8,0x09,0xf0,0xe5,0x4a,0x6d,0xd2,0xcc,0x27,0x23,0x55,0xba,0x6f,}, + {0xd0,0xee,0xc4,0x6d,0xd2,0xe0,0x91,0xd9,0x22,0x24,0x02,0xe5,0x50,0x47,0x6b,0x1d,0x4e,0x77,0x5b,0xa0,0x05,0x9b,0xef,0x91,0xbb,0xd2,0xec,0x07,0x33,0xbe,0xce,0x23,0xdb,}, + {0xd1,0x2a,0xcb,0xa9,0xa2,0x54,0xe6,0x9b,0xae,0x69,0x05,0xd5,0x55,0x24,0xd8,0xae,0xb4,0xb0,0x34,0x57,0x45,0x38,0x6c,0xd5,0xb4,0x8f,0x57,0x03,0x9b,0x5c,0xba,0xb2,0x81,}, + {0xd1,0xe4,0x9d,0x6d,0x2b,0x55,0xc4,0x75,0x23,0x92,0xd8,0xc9,0xab,0xa3,0xbc,0x93,0x57,0xd8,0xe0,0xef,0xea,0x2b,0x23,0x0f,0x7d,0x57,0x57,0x2d,0x08,0xe3,0x6d,0xb9,0x62,}, + {0xd2,0x59,0xb4,0x6f,0x51,0x77,0x4c,0x14,0x76,0x16,0x49,0x63,0xa2,0x24,0x94,0x84,0x12,0xfd,0x2c,0xf0,0x43,0xb4,0x41,0x26,0xdf,0x6e,0xec,0x23,0x64,0x82,0x20,0x2d,0xa6,}, + {0xd1,0x63,0xbd,0x2d,0xaa,0xb2,0xa1,0x7e,0xdb,0x25,0x34,0xb4,0xd1,0x43,0x6d,0x18,0x25,0xb9,0x1d,0x60,0x41,0x5b,0xb4,0x89,0xcb,0x1d,0xaa,0x60,0xa7,0x26,0xfa,0xb7,0x28,}, + {0xd8,0x1d,0x71,0x1e,0xb1,0xb6,0xa2,0x49,0x2d,0xbb,0x7f,0xfe,0x55,0xd4,0xc9,0x24,0xad,0xc7,0x3b,0x52,0x13,0x0d,0x1c,0x6d,0xc9,0x1b,0x86,0x30,0xc4,0x40,0x27,0xd9,0x65,}, + {0xd5,0x1d,0x6b,0x36,0xa8,0xcc,0xf3,0x32,0x40,0xd5,0xc9,0x2d,0x58,0xae,0xd6,0xb9,0x4b,0x97,0x24,0xb0,0xb0,0xdc,0xdb,0x69,0x76,0x9c,0x59,0x6c,0xfb,0x9a,0xc4,0xae,0x2b,}, + {0xd4,0xdc,0x6b,0x2a,0x68,0xb9,0x0f,0xe7,0x6c,0x91,0xcc,0x1f,0x5d,0x4d,0x07,0x1b,0xcd,0x38,0x9a,0x61,0x49,0x76,0xd5,0xd3,0xc6,0xac,0x5d,0x2b,0x93,0x05,0x8e,0x5a,0xe5,}, + {0xd5,0x98,0x71,0xa9,0x39,0xb8,0xaf,0xc7,0x58,0x6e,0xc5,0x24,0x62,0xcc,0x36,0xdc,0x41,0xf0,0xbd,0x56,0xab,0x4f,0x11,0x8c,0xaa,0x64,0x9a,0xcc,0x39,0xa3,0xb2,0x0c,0x8f,}, + {0xd9,0xea,0xd4,0x30,0xe0,0xc9,0x4a,0xb7,0x3a,0x49,0x3f,0x9e,0x56,0xcf,0x39,0xa3,0x5e,0x99,0x9c,0xaf,0xb1,0x6b,0x25,0xed,0xe8,0xe1,0x85,0x10,0x7a,0xdd,0x9d,0x45,0xdb,}, + {0xda,0x28,0xe4,0x78,0xe3,0x51,0x51,0xd3,0xf0,0xd2,0x45,0x5d,0xef,0x4f,0x6b,0xa3,0x7f,0x95,0xfb,0xc8,0xd2,0x2a,0x9a,0xb1,0x39,0x50,0x7a,0xcf,0xe8,0x23,0x62,0x38,0xdc,}, + {0xda,0x67,0xdc,0x36,0x29,0xd0,0x90,0x95,0x0b,0xac,0xe4,0xb9,0xc3,0x0f,0x1c,0x5f,0x09,0xc7,0x46,0x88,0xb1,0xa6,0xdb,0x39,0xb5,0xe0,0x93,0x30,0xc6,0x7a,0x82,0x58,0x6d,}, + {0xda,0xaa,0xe3,0xf5,0xea,0xa2,0xed,0x8d,0x13,0x8a,0x35,0x23,0xd4,0xcd,0x71,0x2b,0x51,0x77,0x4e,0xe6,0xaf,0xe4,0x6b,0x62,0x56,0x92,0x58,0xf0,0xd4,0x35,0x16,0x3a,0xd4,}, + {0xda,0xe8,0xc4,0x6d,0xe9,0x50,0xb0,0x1e,0x8b,0x90,0xc4,0xdb,0xce,0xcc,0xb4,0x95,0x54,0x77,0xb2,0xda,0x4a,0x89,0xcc,0xcd,0x97,0x58,0x94,0x8d,0xb5,0x13,0x91,0xb7,0x58,}, + {0xd8,0x26,0xe3,0xe0,0xf8,0xc2,0x2c,0xca,0x0c,0x4d,0xa4,0xd4,0x68,0x24,0xb4,0xc5,0x43,0x95,0x47,0xbc,0x25,0xb1,0x81,0xa1,0x45,0x7e,0xec,0x68,0xe5,0x58,0x66,0x13,0xad,}, + {0xd4,0xe6,0xc2,0xe2,0x58,0x5f,0x8f,0x39,0x25,0x8e,0x32,0x00,0x51,0x50,0xd9,0x35,0x92,0xc7,0x00,0x60,0x95,0x75,0x24,0x92,0x3b,0x1b,0x5f,0x0f,0x86,0x7b,0x57,0x19,0xe4,}, + {0xd4,0xac,0xab,0x65,0xa0,0xc1,0x94,0x37,0x0b,0xe6,0xb7,0x5c,0x61,0x0f,0xf7,0x5c,0x20,0xda,0x75,0xc1,0x70,0x4b,0x2b,0x70,0x1e,0x62,0xbd,0x30,0x73,0x1c,0xcd,0xc4,0x8e,}, + {0xd4,0x6d,0xab,0x2d,0xa0,0x5f,0x4c,0xf9,0x34,0xb6,0x76,0xe9,0xbd,0xae,0xc1,0x25,0x36,0x37,0x2b,0x5f,0xaa,0x70,0x94,0xcd,0x46,0xda,0xbd,0x50,0x47,0x09,0x3c,0xc7,0x24,}, + {0xd4,0xaf,0xab,0x29,0x60,0xbf,0xcb,0x51,0x5c,0x1a,0x73,0x0e,0xbf,0xea,0x99,0x8d,0x51,0x55,0xc7,0x5f,0x4e,0xbb,0x1b,0xce,0xb6,0x81,0x5f,0xcb,0xdd,0x14,0xb0,0xf1,0x9e,}, + {0xd4,0xb1,0x93,0x69,0xa1,0xbd,0xa8,0xf0,0x2a,0xf0,0x7a,0x79,0x5d,0x30,0x38,0x90,0xcd,0xc8,0xe3,0xbf,0x2d,0x5a,0xda,0x23,0x17,0x24,0xbf,0xa8,0x09,0x4e,0x87,0x0e,0x46,}, + {0xd4,0xed,0xb2,0xed,0x30,0xbd,0xad,0x4a,0xe5,0xca,0xc6,0x87,0xbd,0x2c,0xc9,0xa5,0xd3,0xdc,0xe8,0x5f,0x90,0xd1,0x8c,0x6e,0x37,0x5c,0xbd,0x8f,0x57,0x06,0x4e,0x38,0xe4,}, + {0xd4,0xec,0xaa,0x69,0x20,0x5f,0x8e,0xd4,0xab,0xf4,0x56,0xab,0xbb,0x0f,0xc7,0x63,0x6d,0x8c,0xde,0xba,0x90,0xc9,0x1d,0x91,0x42,0x2b,0x5f,0x6e,0xd9,0x2c,0xb2,0x34,0xc3,}, + {0xd3,0xa8,0xc1,0x25,0x88,0xc0,0xcb,0x0b,0xb3,0xb2,0x72,0xc4,0xbe,0x8d,0x23,0xe5,0xb1,0xd5,0x1b,0xba,0xcc,0x18,0x87,0x92,0xcb,0x22,0x5f,0x27,0x64,0xc8,0x26,0xfb,0x22,}, + {0xd2,0x9e,0xa2,0xde,0x62,0xba,0x02,0x5c,0xd4,0x61,0x84,0x2a,0xbc,0x61,0xa9,0x62,0x93,0xbb,0x52,0xd0,0x22,0xf6,0xdb,0x6d,0xb9,0x1b,0xbb,0x01,0x6e,0x9d,0x51,0x26,0xdc,}, + {0xd5,0xd5,0x8a,0x1c,0x9a,0x85,0x00,0x97,0xa4,0x78,0xb6,0x9b,0x58,0x80,0xbb,0x5e,0x8e,0x58,0x9b,0xec,0xc0,0xc9,0x1c,0x95,0xe7,0x63,0xec,0xa0,0x32,0xdc,0x79,0xce,0xa9,}, + {0xd9,0x23,0xba,0xee,0x03,0x6e,0xc0,0x26,0x11,0x4a,0x26,0xad,0xee,0x81,0x5d,0xac,0x72,0x49,0x24,0x69,0xc2,0xdb,0x64,0x92,0xdb,0x6f,0x5b,0x8e,0x49,0xcb,0xae,0x59,0x25,}, + {0xd8,0x2a,0x9a,0xed,0x18,0x53,0x2b,0x67,0xd2,0x95,0x48,0x48,0x56,0x28,0x24,0xc0,0x28,0x06,0x52,0xae,0x86,0x80,0x86,0x49,0x39,0x5a,0xe8,0x02,0xb1,0x62,0x71,0x39,0x24,}, + {0xd0,0x60,0xa2,0xe1,0x5a,0xd6,0x00,0xfd,0x37,0x76,0xdb,0x25,0x50,0x40,0x49,0x24,0x92,0x49,0x1b,0x5e,0x40,0x36,0xe4,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0xd9,0x92,0xa1,0x1a,0xe2,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xda,0x64,0xaa,0x9c,0xd0,0x50,0x40,0x49,0x24,0x92,0x36,0xdb,0x50,0x00,0x36,0xdb,0x6d,0xb6,0xdb,0x56,0x00,0x36,0xdb,0x6d,0xb6,0xdb,0xa4,0x20,0xb6,0xdb,0x6d,0xb6,0xf2,}, +}; +static const gsm_frame gsm_data_devadesat[] = { + {0xd3,0xd7,0x50,0x99,0x58,0x50,0x60,0xc9,0x6d,0xd2,0xb9,0x5a,0x5c,0xa0,0xd8,0xd4,0xad,0x55,0x72,0x59,0x20,0xdc,0xeb,0x6e,0x38,0xa3,0x6f,0x01,0x14,0xd9,0xd6,0x36,0xd9,}, + {0xd0,0xe9,0xed,0x31,0x51,0x69,0x01,0x17,0x25,0xcd,0xd9,0x5b,0x8e,0x81,0x35,0xd4,0x72,0x4d,0x23,0xf0,0x80,0xa8,0xa3,0x8e,0xdb,0x1e,0xdf,0x61,0xb2,0x9c,0x73,0x5c,0x5f,}, + {0xd0,0xaf,0xdc,0x29,0x63,0x56,0xc2,0x8b,0x44,0x6f,0x58,0xdc,0x50,0x81,0x49,0x5b,0x66,0x68,0xda,0xa0,0x41,0x58,0xda,0x0e,0xea,0xcb,0xc4,0x20,0xc9,0x53,0x08,0xdd,0x63,}, + {0xd1,0x23,0xf3,0xf1,0xe3,0xb2,0x80,0xcd,0x59,0x29,0x9b,0x2b,0x56,0xa0,0xc6,0xda,0x70,0x94,0xeb,0x62,0xa0,0x6a,0xda,0x29,0xc4,0xc3,0xe4,0xc0,0xcb,0xab,0x4d,0xca,0x3c,}, + {0xd6,0x5b,0x62,0x76,0xa9,0x67,0xce,0x84,0xed,0x75,0x56,0x1a,0x89,0xb1,0xa9,0x25,0xb6,0x36,0x81,0x57,0x4f,0xd9,0x12,0xbe,0x23,0x08,0x55,0x34,0xf6,0xa4,0x72,0xc7,0x1a,}, + {0xd5,0x9d,0x7b,0x36,0x60,0x57,0x6f,0x74,0xeb,0x92,0xc9,0x11,0xab,0x90,0x28,0xe7,0x8a,0xb2,0xf3,0x55,0xab,0xd3,0xc3,0x9a,0xb8,0xe4,0x55,0xcf,0x48,0x3c,0x31,0xc5,0x63,}, + {0xd5,0x1d,0x9a,0xf5,0xa0,0x55,0x2d,0xb2,0x17,0x72,0x49,0x64,0xab,0x2f,0x46,0x17,0x2e,0x3b,0x23,0x5b,0xf1,0xc6,0xa5,0x15,0x3b,0x1c,0x5b,0x2d,0xcd,0x62,0x60,0xea,0x26,}, + {0xd4,0xa0,0x99,0xee,0x28,0x5b,0xac,0xb5,0x62,0x51,0x4e,0x55,0x5b,0x2d,0xfa,0xe5,0x8d,0xb4,0x6d,0xb5,0x2c,0x09,0xb2,0x92,0x36,0xe1,0xb5,0x0d,0x76,0xe2,0xae,0xb7,0x24,}, + {0xd2,0xe3,0x9a,0x25,0x68,0x5a,0x89,0x11,0x1c,0xb1,0xe6,0xd9,0xb2,0x26,0x04,0x0d,0xb7,0x6a,0xda,0xb2,0x64,0xa7,0x5a,0xb2,0xcb,0x9f,0xea,0xa5,0xa5,0x80,0x48,0xc7,0x77,}, + {0xd5,0xdd,0x79,0x9d,0x2b,0x8a,0xa3,0x79,0x11,0x08,0x2a,0x9e,0xc0,0xc4,0x2f,0x24,0x65,0xca,0x3e,0xb6,0xa6,0x29,0x65,0xad,0xe1,0x23,0x55,0xaa,0x47,0x64,0x92,0x28,0x1c,}, + {0xd4,0x2a,0xb2,0xa6,0x20,0x61,0xad,0x29,0x63,0xbd,0xcc,0xc1,0x53,0x51,0x8e,0x9c,0x8e,0x49,0x6b,0x5b,0x30,0xa0,0xf3,0x72,0x47,0x2c,0x5b,0x6d,0xa6,0x47,0x32,0xc7,0x2d,}, + {0xd4,0xe9,0xaa,0x69,0xe0,0x5b,0x0e,0xda,0xd9,0x27,0x99,0x6b,0xb5,0x6f,0xf9,0x4b,0x02,0xe4,0xf5,0xb5,0xcc,0x59,0xd4,0x2c,0xac,0xf0,0xb7,0xd0,0xc6,0xf2,0x6b,0x2a,0xf8,}, + {0xd5,0xa7,0xaa,0x9e,0x68,0x5d,0x2f,0x3e,0xd5,0x97,0x3a,0x00,0x5f,0xb1,0x71,0x2b,0x72,0xb8,0xdb,0x5f,0x52,0x95,0xcc,0x8e,0x49,0x2b,0x5f,0x6f,0xa4,0x4d,0xca,0xd9,0x27,}, + {0xd5,0xa4,0x89,0xde,0xa0,0xb9,0x4e,0x56,0x58,0x9e,0x2b,0x23,0x5d,0x30,0x46,0xda,0x69,0x77,0x15,0xac,0x6d,0x5f,0x23,0x44,0x84,0xe5,0xbc,0xca,0xef,0xfd,0x60,0x94,0xe1,}, + {0xd0,0xe5,0xdc,0x6e,0xa8,0xb6,0x29,0xbd,0xbf,0xfa,0xc8,0xd3,0xba,0x43,0x3f,0x51,0x71,0x46,0xa3,0xf0,0x43,0x04,0x9d,0x6b,0x5d,0xea,0xe2,0x23,0x24,0x1b,0x76,0xa7,0xac,}, + {0xd5,0x9c,0x78,0x6e,0x62,0xd1,0x64,0xa4,0x88,0x05,0x5f,0xbd,0x56,0xa4,0x7b,0x48,0x20,0x26,0xee,0x71,0x90,0xc8,0xe3,0x6d,0xb7,0x38,0x52,0xb0,0xe7,0x25,0x92,0x22,0x83,}, + {0xd6,0x24,0x61,0x2a,0xf0,0x5f,0x11,0x6e,0x5b,0x92,0xc8,0x9b,0x5d,0x0e,0x13,0xc4,0xb2,0x5b,0x6c,0x5d,0xcb,0xc0,0x3c,0x2b,0x36,0xd7,0x5d,0xae,0x3c,0xe4,0x1e,0x28,0xe4,}, + {0xd5,0xa0,0x69,0xea,0xa8,0x5d,0x8c,0x66,0xdb,0x6f,0xc7,0x1c,0x5f,0x6d,0x43,0x63,0x5c,0x89,0x24,0xbc,0xae,0xc9,0x2b,0xb2,0x2a,0x02,0xbd,0x0d,0xf8,0xe4,0x9a,0xc9,0x21,}, + {0xd5,0x18,0x8a,0xa9,0xe8,0xbe,0xab,0x07,0x99,0xd7,0x7d,0x12,0xb8,0xcc,0xc4,0x13,0xed,0x5b,0x23,0xbc,0xaa,0xa6,0xdb,0x10,0x2e,0xee,0xb6,0xca,0xb8,0xd4,0x32,0x07,0x5d,}, + {0xda,0x28,0x9a,0xe4,0x19,0xbd,0x4c,0x68,0xdb,0x68,0x14,0x5f,0x59,0x2e,0x30,0xf5,0xcd,0x68,0xea,0x6b,0x4f,0xf5,0x2c,0xad,0x9b,0x26,0xaf,0xf0,0xbc,0xde,0x2a,0xbc,0x7d,}, + {0xd9,0xe8,0xe5,0x31,0x60,0x6c,0xef,0x8e,0x7a,0x92,0xe5,0x69,0xab,0x32,0xf8,0xb4,0x72,0xcc,0xed,0x96,0xad,0xc9,0x3b,0xee,0xbd,0x97,0xa6,0x8e,0x10,0xea,0xae,0x88,0x9b,}, + {0xda,0x29,0xe4,0x36,0x29,0xca,0xd0,0xa8,0x70,0x4e,0x23,0x84,0xd7,0x50,0xa7,0x05,0x68,0xd6,0x2d,0x8a,0xd2,0x1a,0xeb,0x36,0x0d,0x12,0x8c,0xd0,0x5e,0x4d,0xd4,0x4c,0xa3,}, + {0xdb,0x28,0xcc,0x3e,0x32,0x74,0x8e,0x71,0x98,0x35,0x36,0x0c,0xd4,0xcd,0xac,0x1a,0x58,0x41,0x43,0xcc,0xae,0xc5,0x42,0xcc,0x46,0xc5,0x78,0xad,0xe1,0x19,0xf1,0x47,0x04,}, + {0xda,0x6b,0xbc,0x35,0xe3,0xe6,0xcd,0xd4,0x3b,0x6b,0xa7,0x34,0xb2,0xd0,0x1e,0x24,0x66,0x33,0x1c,0xb5,0x2c,0x24,0x96,0x52,0x4b,0xca,0xa6,0x4b,0x37,0xf4,0x4e,0x34,0xc0,}, + {0xd9,0xa7,0xd3,0xb1,0x62,0xee,0x29,0xb6,0x55,0xd6,0xa8,0x44,0xb8,0xc8,0xb0,0x7a,0x45,0x11,0x33,0x94,0xa9,0xb2,0xd8,0xad,0x67,0x1b,0x54,0xca,0x60,0xa8,0x4d,0x5d,0x66,}, + {0xd4,0x28,0xba,0x5d,0x98,0x5a,0x88,0x1a,0x84,0x35,0x9c,0xdd,0xb7,0x6c,0x49,0x1c,0x85,0x25,0xeb,0x53,0xb1,0x59,0x24,0x8d,0xb4,0x3a,0x63,0x6f,0x4a,0xed,0x6e,0x33,0x42,}, + {0xd4,0xea,0xc2,0xed,0xa8,0x5f,0x50,0xf6,0xad,0x6e,0xf9,0x5c,0xc1,0x92,0x22,0x38,0x8d,0xe7,0x36,0x63,0x52,0x46,0xc8,0xc9,0xca,0xe4,0xc1,0x11,0xdb,0xa3,0x84,0x46,0xad,}, + {0xd4,0x6d,0xab,0x66,0x18,0x5f,0xef,0x46,0xda,0x76,0x4b,0xde,0x5d,0x0e,0xb8,0xea,0x95,0xb8,0x90,0x5f,0x31,0x0b,0x1c,0x72,0xcb,0x1c,0x5f,0xd1,0xc1,0x9b,0x8e,0x36,0xdc,}, + {0xd4,0xeb,0xbb,0x2d,0x61,0xbf,0xec,0x46,0xcc,0x4f,0x39,0x67,0x5f,0xd0,0x56,0xe3,0x43,0x27,0x5c,0x5f,0xce,0x44,0xeb,0x72,0x0e,0x63,0x5f,0xaf,0x36,0xd5,0x51,0xd9,0x07,}, + {0xd4,0xee,0xb2,0xad,0xa1,0x5b,0x4d,0xcb,0x5d,0x7e,0xe3,0xd8,0xbd,0xce,0x0a,0x9c,0x72,0x48,0xe2,0x5f,0xcd,0xbb,0x87,0x4e,0x98,0x9c,0x61,0xaa,0xb8,0x6a,0x7c,0x78,0x7a,}, + {0xd4,0xed,0xc2,0x70,0xe8,0xbf,0xea,0x8a,0xe0,0x5b,0xd7,0x1d,0x61,0xab,0x2b,0x12,0x72,0x68,0x78,0x5d,0xed,0x68,0x94,0xce,0xb9,0x0f,0xbd,0x4d,0x97,0x6c,0x7a,0xe5,0x18,}, + {0xd4,0xed,0xba,0xa9,0x99,0x5f,0xc9,0x03,0x18,0xe9,0xcc,0x78,0x5f,0xaf,0x36,0xed,0x56,0x0e,0xda,0x5c,0x91,0x5b,0x12,0x02,0x39,0xa5,0xbc,0xf0,0x4b,0x2a,0x64,0x28,0xee,}, + {0xd3,0xaa,0xc1,0x5d,0x50,0xbd,0x0f,0x39,0x15,0x6d,0xc9,0x3b,0xba,0xec,0x57,0x23,0x71,0xb3,0x42,0x60,0x8a,0xfb,0xa6,0x95,0xcb,0x18,0xbe,0xaa,0x81,0x6f,0x9a,0xdb,0x23,}, + {0xd2,0xe1,0xc8,0xe6,0x18,0x5f,0x25,0x20,0xc1,0xd2,0xd2,0x8b,0xbc,0x45,0xc4,0x68,0x45,0xcb,0xa3,0xc6,0x42,0x36,0xd1,0x6d,0xcf,0x5c,0xcc,0x40,0xa6,0x5b,0x4d,0xb8,0xb6,}, + {0xd5,0x17,0x99,0xd4,0xeb,0xb2,0x61,0x3d,0x2c,0x51,0x38,0xdc,0xe6,0x00,0xeb,0x27,0x0e,0xa8,0xdd,0x74,0xa0,0xc9,0x5e,0xb1,0xa6,0xac,0xec,0xc0,0xc7,0x25,0x9a,0x5b,0x1b,}, + {0xd5,0xdc,0x9a,0xa0,0xe2,0x91,0x60,0xb6,0xe4,0xd2,0xc8,0xdb,0x66,0xe0,0x26,0x93,0x6a,0x39,0xf5,0xee,0xc0,0x56,0xeb,0xad,0xc5,0x2a,0xad,0xe3,0xc9,0x24,0x92,0x47,0x2f,}, + {0xd8,0x64,0xa2,0xa9,0xd2,0x55,0x8d,0xe1,0x2b,0x92,0x49,0x2c,0x53,0x2d,0x76,0xdc,0x72,0x24,0x93,0x58,0x68,0x92,0x50,0x44,0xa2,0x84,0xdf,0x8f,0x16,0xf1,0x4d,0xcb,0xd1,}, + {0xd8,0x69,0xa2,0xb8,0xa0,0xee,0xca,0xcf,0x56,0x26,0x46,0xe4,0x62,0x22,0x9f,0x1b,0x51,0xc8,0xdc,0xae,0x03,0x5e,0xda,0x71,0x48,0xdc,0xce,0x00,0xec,0xdd,0xad,0x38,0xdb,}, + {0xd0,0xd6,0x93,0x25,0x5a,0x9c,0x20,0x37,0x1b,0x92,0x49,0x1c,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x9b,0x9a,0xe1,0x5a,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xda,0x21,0x92,0x14,0x90,0x50,0x40,0x49,0x24,0x92,0x36,0xdb,0x69,0xc0,0x36,0xdb,0x6d,0xb6,0xf2,0x7a,0x00,0x38,0xdb,0x6d,0xb6,0xdb,0x54,0x20,0x36,0xdb,0x6d,0xb6,0xdb,}, +}; +static const gsm_frame gsm_data_sto[] = { + {0xdb,0x63,0xe1,0xd8,0x4a,0x50,0x21,0xb6,0xd3,0x69,0xa0,0xa3,0x59,0x01,0xb1,0x33,0x2e,0x17,0x35,0x7a,0x81,0xac,0x5b,0x8b,0x98,0xdb,0x70,0xe2,0xb9,0x1b,0xb0,0xf7,0x5e,}, + {0xda,0x66,0xe3,0xa9,0xac,0xeb,0xc2,0xcc,0x72,0xf6,0xb5,0x15,0x65,0x44,0xc8,0xa2,0x1c,0xc1,0x8d,0x5b,0x69,0x46,0xac,0xea,0xf9,0x23,0x79,0x2b,0x8b,0xe1,0x76,0x37,0x5c,}, + {0xd8,0xec,0xdc,0x6d,0xa2,0x82,0xca,0x61,0x5d,0x4f,0x4a,0x99,0xdd,0x49,0xe2,0xc4,0x6d,0xdc,0xd7,0x59,0x2c,0x29,0x65,0x8e,0x4e,0x27,0x53,0x69,0xe3,0xa5,0x71,0xbc,0x26,}, + {0xd9,0x6a,0xec,0x2d,0xeb,0xae,0xcb,0xa8,0xa5,0xb1,0x6d,0x84,0xab,0x4a,0xcc,0x97,0x1a,0x9f,0x55,0x69,0x0c,0x0e,0xf6,0x3a,0x6c,0x1f,0x54,0xce,0xc6,0xdd,0x54,0xbf,0x22,}, + {0xd9,0x2a,0xdc,0xf1,0x64,0xba,0x8e,0x2f,0x4a,0x36,0x45,0x1c,0x74,0xac,0x51,0x6d,0x46,0x3c,0x65,0xd6,0xad,0x1a,0xd8,0xd2,0xc8,0xed,0xb3,0x2f,0x89,0xb2,0x6e,0xf8,0xdc,}, + {0xd9,0x2b,0xd4,0x25,0x6b,0x5a,0xb1,0x74,0x9d,0xb2,0x49,0x24,0x94,0xad,0x3b,0x34,0xa9,0x79,0x8c,0xce,0xcb,0x70,0xeb,0x43,0xcd,0x53,0x9d,0x4e,0x38,0xa2,0x53,0x30,0xde,}, + {0xda,0xa5,0xe3,0x99,0x9a,0x50,0x8d,0xa8,0xe2,0x8d,0xf0,0xdb,0x76,0xcd,0x17,0x5c,0xe1,0x36,0xd3,0x78,0xed,0x17,0x11,0x28,0x83,0x13,0x5c,0x46,0x09,0x5d,0x48,0xa7,0x24,}, + {0xd5,0x56,0x32,0x5d,0xda,0xe2,0x22,0xdd,0x5f,0xb1,0xbb,0x1c,0xe4,0x01,0xdb,0xbf,0xbb,0xe3,0x1c,0xee,0x40,0xa4,0xc5,0x6a,0xc9,0x53,0xf0,0x20,0xd7,0x32,0xa9,0xa4,0x5a,}, + {0xd2,0x15,0x62,0xe5,0x9a,0x80,0xe0,0xa6,0x93,0x31,0x46,0xdd,0xae,0x80,0x55,0xea,0x56,0xaa,0x73,0xae,0xa0,0x44,0x96,0x63,0x17,0x9c,0x68,0xc0,0x59,0xae,0xbd,0xe6,0x51,}, + {0xd8,0x9a,0x93,0x11,0x29,0xa1,0xc8,0xb6,0xe3,0xe6,0x56,0xaf,0x51,0x2c,0xb9,0x64,0xe2,0x65,0x24,0x59,0x4c,0xcf,0x03,0x96,0x32,0x66,0x5c,0x8e,0x24,0xe4,0x65,0x26,0x08,}, + {0xd3,0xa7,0xd9,0x9e,0x6a,0x5b,0xb3,0xb9,0x6c,0x88,0x81,0xac,0x52,0xaf,0x57,0x2c,0x95,0xb1,0xd3,0xa2,0xcf,0xd7,0x24,0xb6,0x31,0xda,0x53,0x2c,0xd9,0x6d,0xb9,0xb2,0xb9,}, + {0xd3,0xac,0xc8,0xde,0x6a,0xa5,0x6c,0x67,0x6d,0xd1,0xa1,0xe2,0xa3,0x28,0x1b,0x45,0x8d,0x8d,0x54,0xa3,0x29,0x29,0x82,0xa9,0x8d,0x84,0x53,0x87,0x0e,0xa9,0xae,0x25,0x2d,}, + {0xd3,0xad,0xb1,0x1a,0xaa,0x53,0x47,0x0f,0x2d,0xd2,0x90,0x67,0xa5,0x0a,0x85,0x5c,0x92,0x44,0x9d,0xa3,0x68,0x87,0x9b,0x96,0x42,0xc2,0x53,0x88,0x78,0xea,0x8e,0x38,0xdc,}, + {0xd3,0xaa,0xe9,0x4f,0x29,0x53,0x66,0x97,0xdd,0x9a,0x42,0x84,0xa5,0x06,0xf1,0x71,0xd2,0xc8,0xd1,0x53,0xc5,0x09,0x9c,0x71,0xb6,0x70,0x51,0x45,0xf8,0x34,0x96,0xca,0xc1,}, + {0xd3,0xa8,0xf9,0x8a,0xaa,0xa3,0x45,0xfc,0x65,0x91,0xd9,0x45,0x53,0xa6,0x8a,0xdc,0x75,0xd7,0x22,0x53,0x25,0x0e,0x9d,0x96,0x58,0xc4,0xa3,0x04,0x87,0x63,0x96,0xc9,0x5a,}, + {0xd3,0x29,0xe2,0x06,0x2b,0xa3,0x24,0x87,0x93,0x96,0x3b,0x19,0x53,0x25,0x9f,0x15,0x56,0x48,0xda,0xa5,0x43,0x1e,0xe5,0x52,0x56,0xd9,0xa4,0xe2,0x87,0x65,0xb7,0x6b,0x00,}, + {0xd2,0xa6,0xab,0x1c,0xa4,0xa2,0x84,0x52,0xac,0x76,0x4d,0x58,0xf0,0x83,0xd2,0x2e,0x56,0xc9,0x23,0x55,0x65,0x38,0xd7,0x13,0x38,0xdb,0xa6,0x81,0xe0,0xb0,0x56,0xdd,0x8b,}, + {0xd2,0x63,0xaa,0xe1,0x6d,0x9a,0x01,0x08,0x9c,0x5b,0x4a,0xda,0xf0,0x60,0xbe,0xe5,0x9e,0x52,0xd2,0xd4,0xa0,0xd5,0x09,0x8f,0xe7,0x0b,0xe6,0x80,0xde,0xe5,0x11,0xc8,0xeb,}, + {0xd4,0xdf,0x7a,0x68,0x45,0xe4,0xa1,0x4a,0xea,0x70,0xd9,0x24,0xc8,0x40,0x49,0x1d,0x91,0xc8,0xe4,0xaa,0x00,0x49,0x24,0x92,0x4a,0xe4,0xea,0x00,0x38,0xe4,0x96,0x49,0x24,}, + {0xd0,0x5f,0xa2,0xe1,0x5a,0x9a,0x40,0x49,0x24,0x92,0x46,0xe3,0x7c,0x00,0x49,0x24,0x92,0x49,0x24,0xda,0x00,0x36,0xe4,0x92,0x48,0xe4,0x62,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5e,0xa2,0x65,0x5a,0x96,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x52,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x39,0x24,}, + {0xd5,0x55,0x59,0x14,0x91,0x73,0x80,0x36,0xdb,0x8d,0x46,0xdb,0xc3,0x80,0x36,0xdb,0x8d,0xb6,0xdb,0xea,0x80,0x49,0x24,0x92,0x49,0x24,0x57,0x80,0x36,0xdb,0x6d,0xc6,0xdb,}, +}; +static const gsm_frame gsm_data_dveste[] = { + {0xd3,0x94,0xca,0xed,0xa2,0x50,0x20,0x49,0x6c,0xb6,0xd7,0x64,0x55,0xa0,0xe6,0xe4,0x4d,0xb6,0x9c,0x5d,0x60,0x49,0x24,0x31,0x10,0x18,0x5b,0xa0,0xc7,0x2c,0xb2,0x26,0x8a,}, + {0xd0,0xae,0xd4,0xe6,0x5b,0x67,0xc1,0x12,0xa5,0xdf,0x6a,0xda,0x72,0xc1,0xa5,0x1f,0xf4,0xde,0x55,0x52,0xc1,0x89,0x4c,0xed,0x38,0xbc,0xa9,0x01,0xa7,0x5d,0x87,0xb4,0xd5,}, + {0xd0,0xe5,0xf5,0x6e,0x6a,0xe6,0xc1,0x36,0xcb,0x6a,0x6b,0x17,0x9c,0xa1,0xba,0xe4,0x6d,0xa9,0xeb,0x5a,0xc1,0x35,0x33,0x8e,0xa7,0x2d,0x7a,0xa0,0xa4,0xca,0xf1,0xd6,0x1d,}, + {0xd7,0x29,0xb9,0xd5,0xd9,0x6a,0x84,0x4b,0x64,0x64,0x00,0x5c,0x50,0xc5,0x6f,0xeb,0x20,0xa9,0x2d,0x92,0xca,0x49,0x24,0x91,0xb6,0xe7,0x99,0x8d,0xf1,0x6a,0xba,0x46,0xdb,}, + {0xd5,0x66,0x79,0xaa,0xe0,0x7a,0xcf,0x36,0xe4,0x8e,0x36,0x40,0xef,0xf4,0x49,0x24,0x92,0x34,0x87,0x54,0xd0,0xc3,0x1d,0x97,0x37,0x00,0x57,0x30,0x72,0xed,0x6e,0x5c,0x91,}, + {0xd5,0x23,0x82,0xa3,0x18,0xab,0x70,0xf6,0xa5,0x6e,0x4a,0xd1,0xa9,0xb1,0xb1,0x64,0x71,0xb6,0xac,0x56,0x90,0x30,0x94,0xed,0xa9,0x24,0xa8,0x4f,0x20,0x23,0xf2,0x3b,0x65,}, + {0xd2,0x27,0xda,0xa5,0x72,0xa8,0xc9,0x42,0x09,0x16,0x5d,0xa4,0xaa,0x45,0xb6,0x4f,0x32,0x19,0xec,0xa4,0x83,0x29,0x7c,0xb1,0x31,0x2c,0xec,0x45,0x79,0x00,0x86,0x47,0x2f,}, + {0xd1,0xe5,0xc2,0xea,0x2a,0xa3,0x22,0xb7,0x52,0xcb,0x3c,0xcf,0x5c,0xa3,0x2c,0xc3,0x27,0xb9,0x24,0xae,0xc4,0xd9,0x53,0x69,0x75,0x24,0xad,0x06,0xb9,0x65,0x4d,0x9f,0x23,}, + {0xd4,0xe3,0x71,0xa7,0x6a,0x57,0xac,0x49,0xa3,0xad,0x91,0x92,0x55,0xef,0xb9,0x74,0x4d,0xa5,0xdb,0x57,0x2d,0x2b,0x36,0x69,0xb0,0x39,0xa6,0xac,0x89,0x9d,0xad,0xb6,0x80,}, + {0xd4,0x96,0x6d,0x7d,0x22,0xa2,0xcd,0xcb,0x6c,0xb6,0x36,0xc2,0xa2,0xe9,0xfc,0xd3,0xbf,0x32,0x1d,0xa8,0xc7,0x7d,0x52,0x97,0x7c,0xc8,0xab,0x68,0xcd,0x1b,0x53,0x56,0x40,}, + {0xd4,0xd6,0x6d,0xbd,0x20,0xa3,0xc6,0x06,0xeb,0x09,0xbb,0xfe,0x5b,0x68,0x08,0x6d,0xce,0x5b,0x58,0xb1,0xc5,0x21,0xde,0xb9,0x4b,0xb1,0x55,0xe4,0x55,0x32,0xc4,0xa9,0x30,}, + {0xd4,0x19,0x95,0xbd,0xa0,0x57,0xa9,0xaa,0x5f,0x52,0x3d,0x6d,0x55,0xa8,0xe5,0x50,0x6d,0x48,0xb6,0x55,0xcb,0x44,0xdb,0xed,0x28,0xda,0x5b,0xec,0xb6,0x9a,0xbd,0x34,0xf7,}, + {0xd4,0x5b,0x9c,0x75,0x18,0xaf,0x8d,0xa8,0x95,0x82,0x77,0x2b,0x55,0x0e,0x5b,0x2c,0x48,0x8e,0xd5,0x55,0xec,0xb6,0xed,0x51,0x3c,0x27,0x55,0xed,0x38,0xed,0x52,0x3a,0xc7,}, + {0xd4,0xde,0x8b,0x71,0x98,0x57,0xcc,0x38,0xd6,0x61,0x87,0xc5,0x55,0x6d,0xd8,0xe6,0xa9,0x44,0x3e,0xa9,0x0d,0x70,0x5b,0xdc,0xba,0x4c,0x59,0x2c,0xc5,0x1c,0xb5,0xb3,0x00,}, + {0xd5,0x60,0x7a,0xea,0xa8,0xab,0xed,0x32,0xf4,0x6e,0x35,0xa0,0x55,0x4e,0xf4,0xa5,0x6e,0xd9,0x1a,0xa9,0x0e,0x05,0x4b,0xb1,0xc7,0xa9,0xab,0x4c,0x83,0x53,0xb2,0x4d,0x1a,}, + {0xd3,0xdd,0xa3,0x6a,0x20,0x55,0x0e,0x74,0xac,0x72,0x39,0x5a,0x53,0x08,0x9a,0x4f,0x32,0xb7,0xd2,0xa4,0xa9,0xe0,0x55,0x52,0xb9,0xa5,0xb6,0xaa,0x16,0x02,0xd0,0xe9,0x74,}, + {0xd8,0x1b,0x69,0x99,0x6a,0x57,0x48,0xc6,0x51,0x49,0x6b,0xef,0xab,0x4a,0x83,0x90,0xb4,0xd3,0x63,0x56,0xe8,0xda,0x96,0x82,0xb9,0xca,0xa7,0x6b,0xcc,0xbc,0xb8,0x5a,0x5e,}, + {0xda,0xac,0xbb,0xed,0x2a,0x5b,0xad,0xb7,0x1c,0x6b,0xa3,0xa5,0x75,0x70,0x6b,0x6c,0x79,0xbf,0x1e,0x7c,0xce,0x3e,0xfd,0x96,0xcd,0x1c,0xad,0x2d,0xbb,0x92,0xdf,0x3e,0x1d,}, + {0xda,0x6a,0xb4,0xb1,0x72,0x6d,0x4e,0x4a,0xde,0x53,0x61,0xc6,0x54,0xee,0x59,0xb3,0xcb,0xd6,0xe6,0xbf,0x6d,0x9d,0x5b,0xf1,0xe6,0xd4,0xb5,0x0d,0x66,0x1c,0xc2,0x37,0xab,}, + {0xda,0xec,0xb3,0xae,0x2a,0x5e,0xed,0x82,0xf3,0xaa,0x2c,0xbd,0xa2,0xab,0x25,0x35,0xf2,0xac,0xb0,0x9d,0x4e,0x2b,0xc0,0xd5,0xd8,0x65,0x56,0xec,0xea,0xfd,0x3a,0x35,0xa2,}, + {0xd9,0xaa,0xd4,0x6d,0xeb,0x99,0x2f,0xaa,0xbc,0x72,0x2b,0x5a,0x72,0xae,0xdb,0x6a,0xb1,0xcb,0xda,0x56,0xca,0xd0,0x36,0x52,0xe8,0x9e,0x76,0xcc,0xd5,0x64,0x82,0x62,0xa1,}, + {0xda,0xa1,0x80,0xa0,0x10,0x5c,0x04,0x50,0x8a,0x09,0x26,0x9b,0x96,0x01,0xd2,0x9b,0xac,0x5a,0xe2,0xbc,0x01,0x1a,0xde,0x72,0x37,0x0a,0xd8,0x40,0xb6,0xa3,0x31,0x26,0x96,}, + {0xd9,0xa3,0xab,0x29,0xd9,0x7f,0xe1,0xa7,0x52,0x89,0x12,0x49,0x57,0x23,0x94,0x91,0x4d,0x26,0x97,0x6b,0x88,0x98,0xdf,0x4d,0xb7,0x2d,0x8f,0xcb,0xc9,0x1b,0x92,0x4f,0x24,}, + {0xdb,0xef,0xa9,0xd8,0x49,0x65,0x0b,0xc9,0x3d,0x7e,0x03,0x73,0x66,0x8c,0x53,0x06,0x25,0xa5,0x16,0x66,0xcb,0xb3,0x0d,0x4c,0x44,0xd0,0xda,0x8e,0x44,0x95,0x6d,0x86,0xc5,}, + {0xdc,0x29,0x90,0x14,0x20,0x51,0x4e,0xaa,0x65,0x56,0x0b,0x62,0x7c,0xab,0x4a,0xde,0x15,0x25,0x2c,0xae,0x6b,0x42,0x94,0x0a,0xc8,0x37,0xc0,0xcd,0xb9,0x0c,0x85,0x34,0x02,}, + {0xd5,0xdc,0x42,0xfe,0x68,0x6c,0xf0,0x29,0xbf,0xdb,0x58,0x42,0x5e,0xd2,0x83,0xe2,0x8e,0xc8,0xdd,0x5f,0x50,0x36,0x4f,0xb9,0x23,0xe6,0xbd,0x32,0x47,0x22,0x8b,0xb2,0xe3,}, + {0xd6,0x5f,0x52,0x2e,0x71,0x5f,0x0f,0x75,0xeb,0x88,0x13,0x69,0xbd,0x51,0x57,0xde,0xae,0x20,0x24,0x5d,0x11,0xf1,0x64,0xce,0xc7,0x59,0x61,0xf2,0x76,0x25,0xad,0x99,0x5a,}, + {0xd4,0xda,0x8b,0xb1,0x60,0x62,0x0e,0xa2,0xc6,0x8e,0xc9,0x6d,0xbc,0x0d,0xc6,0x92,0x3e,0x49,0x1c,0xbc,0x8d,0x65,0x1c,0x2c,0xbe,0xdd,0xbd,0x6a,0xb5,0x64,0x65,0xa5,0xd0,}, + {0xd4,0x99,0x9b,0xa9,0x60,0x6b,0x4c,0xe9,0x25,0x90,0xb0,0xd9,0x61,0x0e,0x77,0x1c,0x72,0x49,0x1a,0x5f,0x27,0x41,0xb8,0x9a,0x47,0x29,0xbf,0x4c,0x24,0xd7,0x6e,0xc7,0x23,}, + {0xd3,0x5f,0xb2,0xe9,0xd9,0xbf,0x28,0x48,0xd8,0x66,0xc7,0x2c,0xbf,0x67,0x47,0x3b,0xa2,0x95,0x8e,0xbd,0x46,0xe4,0xe4,0x99,0xb2,0xa0,0xd2,0x8b,0xf5,0x2b,0x99,0xda,0xd0,}, + {0xd2,0x60,0xd9,0xad,0x59,0xbe,0x86,0x8c,0xcc,0xd6,0x59,0x24,0xba,0xc7,0x08,0x32,0x92,0x58,0xac,0x58,0xe6,0x44,0x50,0xed,0x77,0x6d,0xbc,0xc4,0x67,0x08,0x62,0x3a,0xf5,}, + {0xd1,0x66,0x8b,0x37,0x2b,0xbc,0xe3,0xdb,0x14,0x58,0xbe,0xd2,0xaa,0xc2,0xe6,0x66,0x7f,0x25,0x63,0xd6,0x01,0x16,0xad,0x7a,0xa8,0x5a,0xca,0x61,0x66,0x4a,0xae,0xc7,0x0b,}, + {0xd3,0x67,0x40,0xda,0x34,0xd0,0x81,0x56,0xb6,0x42,0xb9,0x9b,0xc4,0xe1,0x16,0x55,0x5a,0x1a,0xd3,0xbc,0xe0,0xc5,0x13,0x65,0xdb,0x14,0xbc,0xe0,0xa5,0x23,0x8e,0xe4,0xa6,}, + {0xd5,0x67,0x60,0x44,0xdb,0xd8,0xc0,0x19,0xc5,0x4d,0xc3,0xa1,0xd6,0xa0,0xe4,0xb3,0x9c,0xba,0xa6,0xce,0xa0,0xb9,0x32,0x72,0x3a,0xed,0x68,0x80,0xbb,0x2d,0xce,0x26,0x94,}, + {0xd5,0xa0,0x80,0x18,0xe2,0x92,0xa0,0xb9,0x65,0x94,0x9d,0x13,0xdc,0xa0,0x35,0x94,0x69,0x36,0x9b,0x86,0x00,0x36,0xe4,0x6e,0x47,0x24,0xde,0x20,0x46,0xdc,0x8d,0xc8,0xe4,}, + {0xd0,0x5d,0x9a,0xe1,0x5a,0xca,0x00,0x36,0xdb,0x71,0xc9,0x24,0x62,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0xf0,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5d,0x9a,0xe1,0x5a,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x52,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x52,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5e,0xa2,0x29,0x5a,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, +}; +static const gsm_frame gsm_data_sta[] = { + {0xdb,0x63,0xe1,0xd8,0x4a,0x50,0x21,0xb6,0xd3,0x69,0xa0,0xa3,0x59,0x01,0xb1,0x33,0x2e,0x17,0x35,0x7a,0x81,0xac,0x5b,0x8b,0x98,0xdb,0x70,0xe2,0xb9,0x1b,0xb0,0xf7,0x5e,}, + {0xda,0x66,0xe3,0xa9,0xac,0xeb,0xc2,0xcc,0x72,0xf6,0xb5,0x15,0x65,0x44,0xc8,0xa2,0x1c,0xc1,0x8d,0x5b,0x69,0x46,0xac,0xea,0xf9,0x23,0x79,0x2b,0x8b,0xe1,0x76,0x37,0x5c,}, + {0xd8,0xed,0xdc,0xb1,0xeb,0x82,0xca,0x61,0x5d,0x4b,0x58,0xe0,0xdd,0x4b,0x66,0xc3,0x91,0x5c,0xd7,0x66,0xab,0x17,0xad,0x8f,0x4e,0xa7,0x53,0x49,0x53,0x76,0x31,0xb9,0x06,}, + {0xd9,0x6a,0xf4,0x6d,0xec,0xa9,0x2b,0x4a,0xa4,0x7e,0x8b,0x5a,0xab,0x4c,0x5a,0xd7,0x16,0xad,0x62,0x69,0x2d,0x2b,0x34,0x53,0x5a,0x27,0x58,0xce,0x48,0xa5,0x18,0xbf,0x14,}, + {0xd9,0x6a,0xdc,0xed,0xa4,0xe0,0xcd,0x3d,0x59,0xbc,0x48,0x9b,0x94,0xac,0x41,0xed,0x4a,0x3c,0x26,0xd6,0xad,0xaa,0xd8,0xcf,0x39,0x2c,0xdc,0xaf,0x0b,0xaa,0x8f,0x69,0x24,}, + {0xd9,0xab,0xc4,0xad,0x9c,0x7e,0x8c,0xde,0xb3,0xf3,0x3b,0xe5,0x94,0xad,0xba,0xf5,0xac,0xf9,0x5b,0x78,0x8e,0x4a,0xdc,0x49,0x78,0x6b,0x9c,0xce,0xc8,0xe3,0x2f,0xb0,0x93,}, + {0xda,0xe5,0xeb,0xd4,0xdb,0x90,0xad,0x27,0x14,0xe9,0x34,0xd3,0x95,0x4d,0xa5,0x25,0x83,0x48,0xda,0xd2,0xac,0xc6,0x52,0x29,0x02,0xb3,0x58,0x48,0x09,0x1d,0x4d,0x36,0xdb,}, + {0xd9,0x23,0x81,0x50,0x22,0xca,0x21,0xf5,0x23,0xb2,0x59,0x36,0xea,0x21,0xcb,0x77,0xb7,0xcc,0xa4,0xe6,0x20,0xab,0x64,0xdf,0xd9,0xab,0x54,0xa0,0xec,0xda,0xb6,0x3b,0x5c,}, + {0xd6,0xe7,0xba,0x16,0x01,0xdc,0xa0,0xd9,0x6d,0xb6,0x5d,0x9d,0xf0,0xa0,0xeb,0x6d,0xb5,0xdb,0x76,0x5b,0xe0,0xb9,0x1c,0x92,0x45,0x19,0x99,0xf1,0x3b,0x23,0x92,0x4b,0xd4,}, + {0xd5,0xe7,0x99,0x5e,0x29,0x70,0xe7,0xce,0x3d,0x6c,0xc6,0x88,0x72,0x29,0x44,0x10,0x69,0x14,0x1a,0x58,0x88,0x94,0x52,0x2c,0x87,0x16,0x55,0xb4,0x49,0x24,0x6c,0xa5,0xd2,}, + {0xd5,0x68,0x9a,0xb2,0x18,0x51,0xb1,0x6d,0x6c,0xd5,0xb1,0xf3,0x51,0x51,0xc6,0xe7,0xae,0x83,0x5c,0xa2,0xf2,0x46,0xf6,0xad,0x81,0x9a,0xa4,0xb0,0x78,0xec,0xad,0xa2,0xb8,}, + {0xd4,0x6c,0xcb,0x11,0xd8,0xa4,0xce,0xf6,0xb3,0x8c,0xb3,0x39,0xa6,0x8e,0x57,0x4c,0x95,0xa6,0x17,0xa5,0x6a,0xbb,0x0d,0xae,0xa2,0x32,0xa3,0x0b,0x8e,0xeb,0xd2,0xc0,0x87,}, + {0xd4,0xab,0xd3,0x4d,0xe0,0x51,0xa8,0x1a,0xf2,0xaa,0x76,0xd4,0x51,0xec,0xba,0xe3,0x91,0xda,0xc2,0x53,0xa8,0xf8,0xdb,0x90,0xe2,0xe7,0xa5,0xec,0x57,0x15,0x51,0xc4,0xe7,}, + {0xd4,0x6b,0xc2,0x56,0x10,0xa3,0x6b,0xa9,0x64,0x75,0xc4,0xc8,0x53,0xa9,0x8b,0x1a,0xa6,0x45,0x24,0x53,0xe4,0xcc,0x9f,0x39,0x8d,0x14,0x53,0x46,0xe5,0xbd,0x37,0x3a,0x50,}, + {0xd4,0x2a,0xb9,0xdd,0x90,0xa5,0x08,0x8a,0x75,0xca,0x61,0x52,0x53,0x48,0x59,0x75,0xaf,0x2a,0x18,0xa4,0xc9,0x3a,0xf7,0x92,0xd6,0x68,0xa4,0x8b,0x05,0x23,0xda,0x4b,0x15,}, + {0xd2,0xe6,0x91,0x22,0x5a,0x54,0x87,0x84,0x8d,0xd2,0xd6,0x60,0xa4,0xc7,0x6a,0xb3,0x8d,0xc6,0x38,0x9e,0x83,0x31,0xe2,0x95,0x6b,0x86,0xa3,0x44,0x97,0x11,0xc6,0x55,0x84,}, + {0xd4,0x64,0x99,0x28,0xe2,0x56,0x84,0xc0,0xbb,0x7d,0xd9,0x68,0x53,0x05,0x46,0x24,0x36,0xbb,0x1b,0xe2,0xc5,0xb0,0xa4,0x39,0x4a,0xe4,0xce,0x84,0x14,0x55,0x1d,0x59,0x53,}, + {0xd5,0x65,0xc9,0x24,0x92,0x56,0xa3,0x8c,0x23,0x6f,0x35,0x14,0xce,0xc3,0xa6,0x56,0x4b,0xb7,0x0d,0xbc,0xc2,0x31,0x64,0x99,0x97,0x0c,0x66,0xc1,0x07,0x07,0x8a,0x29,0x1e,}, + {0xd2,0xa3,0x99,0x01,0x98,0xd6,0x20,0x45,0x95,0xb2,0xc9,0x64,0xd4,0x40,0x45,0x2c,0x91,0xc9,0x24,0xe2,0x20,0x3a,0xe4,0x71,0xc8,0xdc,0xb4,0x00,0x38,0xe4,0x92,0x49,0x24,}, + {0xd0,0x5e,0xa2,0xe0,0xe2,0xf0,0x20,0x47,0x24,0x92,0x49,0x24,0x6a,0x00,0x49,0x24,0x92,0x49,0x24,0xb4,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xda,0x64,0xaa,0x9c,0x90,0x57,0xa0,0x46,0xdc,0x92,0x49,0x24,0x51,0xa0,0x4b,0x23,0x6d,0xb6,0xdc,0x89,0x80,0x36,0xdb,0x6d,0xb6,0xdc,0xcb,0x81,0xc6,0xdb,0x6c,0x6a,0xe4,}, +}; +static const gsm_frame gsm_data_set[] = { + {0xd2,0x19,0x82,0xe5,0x59,0x50,0x20,0xc9,0x2c,0x96,0xeb,0x2d,0x56,0xe0,0x73,0x62,0x8d,0xc4,0xa3,0x76,0x20,0x44,0xd8,0x8a,0x06,0x93,0x66,0xc0,0xb6,0x9a,0x8d,0x27,0x0c,}, + {0xd7,0x9c,0x59,0x49,0x20,0x55,0xc1,0xa7,0x22,0x4c,0xe0,0x93,0x69,0xa3,0xc1,0xa2,0x4e,0xc6,0xe5,0x85,0xa3,0xa8,0xf3,0xb1,0x6c,0x2b,0xc3,0xe6,0x6c,0x27,0x71,0xcc,0xe4,}, + {0xda,0xa6,0xdc,0x5d,0x62,0x57,0x65,0xb2,0xf0,0x93,0x25,0x28,0xe3,0x89,0xd9,0x71,0x9e,0xcd,0xe5,0x58,0xea,0xcd,0x6c,0xcb,0xd4,0xe3,0xa5,0x2b,0x6b,0x6d,0x59,0xc7,0x57,}, + {0xda,0xa7,0xeb,0x69,0xab,0xc9,0x8a,0x0e,0xba,0xbd,0xb3,0xa5,0x97,0x2e,0x4d,0x57,0x6a,0xb8,0xdd,0x77,0x0d,0xf4,0xa7,0x2a,0xd5,0x5c,0x55,0x4c,0xe9,0x9e,0x1d,0xdf,0x19,}, + {0xdb,0x69,0xc4,0x71,0x69,0x6d,0x4e,0xda,0xb9,0xf5,0x57,0xa3,0x5c,0xef,0x3d,0x30,0x91,0x9b,0x26,0xad,0x0f,0x42,0xf2,0x63,0x46,0xe3,0x59,0x10,0x99,0xe1,0xb1,0xb6,0xe4,}, + {0xda,0xe8,0xfd,0x25,0xab,0x98,0xae,0x42,0xa7,0x52,0x2b,0x25,0xd0,0xcd,0x4a,0xab,0x84,0x58,0x69,0xbe,0xed,0x8a,0x1d,0x71,0x36,0x55,0x92,0xaf,0xd9,0x25,0x57,0xbb,0x95,}, + {0xdb,0x67,0xe4,0x75,0x6b,0xc0,0x8c,0x75,0xa5,0xa7,0xb8,0x98,0x8e,0xee,0x1e,0xe0,0xca,0x32,0xdb,0x5c,0xd2,0xc6,0xd5,0x81,0xd8,0xac,0x64,0xae,0x56,0xd4,0x88,0xe1,0x2d,}, + {0xdb,0x28,0xb4,0xe5,0x2a,0xa2,0xcd,0x2a,0x22,0xb9,0x92,0xe3,0xec,0xac,0x3e,0x81,0x92,0x31,0x12,0xe8,0xec,0xdb,0x1d,0x75,0x46,0xc1,0x86,0xcd,0xcb,0x22,0x8e,0x14,0xf7,}, + {0xd3,0xa5,0x7b,0x6e,0xd1,0xdc,0xa9,0x75,0x1a,0x91,0xee,0xe3,0x66,0xa7,0xf4,0x0b,0x92,0xa9,0x1b,0xb4,0xed,0xc7,0x24,0x89,0x10,0xbe,0x53,0x14,0x49,0x63,0x68,0xaf,0x1c,}, + {0xd5,0x27,0x6a,0xef,0x11,0x53,0x70,0xdb,0x23,0x68,0xf5,0x23,0xa5,0xb0,0x2b,0x35,0x74,0x8e,0x9c,0x53,0xcc,0xd4,0x5f,0x85,0xca,0xc3,0x53,0x13,0x58,0xe5,0x89,0xa5,0xc2,}, + {0xd5,0x65,0x8a,0x6e,0xa0,0x53,0xf1,0xc5,0x3a,0x70,0x3e,0x6e,0x50,0xb1,0x74,0xed,0x91,0xa2,0x7d,0xa0,0xf3,0x39,0x1c,0x8e,0x21,0x6d,0xa2,0x90,0x19,0x25,0x91,0xa2,0x2d,}, + {0xd3,0x20,0xab,0x3a,0x20,0x52,0x8c,0xda,0xe6,0xb1,0xb4,0x7a,0xa4,0xac,0xb8,0xed,0x69,0xc5,0x39,0xa4,0xa8,0x0c,0xef,0x68,0x26,0x9a,0x66,0x44,0x2a,0xea,0x7e,0x0e,0x9c,}, + {0xd3,0x17,0x8b,0x35,0xe1,0xb6,0x43,0x41,0x7d,0x92,0xb5,0x2d,0xf0,0x41,0x27,0x63,0x8f,0x4f,0xd7,0xca,0x20,0xb1,0xf4,0xce,0x38,0xe3,0xc4,0x80,0xa7,0x27,0x51,0xa4,0x3d,}, + {0xd4,0x95,0x71,0x71,0x9a,0x7a,0xe0,0xb6,0x94,0xb1,0x22,0xe6,0xa4,0xc0,0xc4,0x59,0xae,0xb4,0x9b,0xde,0x80,0xb8,0x8c,0x91,0x26,0x5d,0x74,0xe0,0xb1,0x12,0x72,0x2a,0x5d,}, + {0xd7,0xe3,0xa2,0xa5,0x61,0x55,0xcd,0xb7,0x1b,0x8d,0xb9,0xc4,0x56,0x0d,0x44,0xed,0xf0,0xb9,0x25,0x56,0x88,0x50,0x19,0x51,0x56,0xd2,0xc6,0xeb,0x26,0x14,0x29,0x93,0x50,}, + {0xd8,0xe7,0xb1,0xdc,0xa9,0x50,0xc9,0xa8,0x5b,0x52,0x14,0xf9,0x8e,0xa8,0x56,0xae,0x29,0x91,0x22,0xe2,0xe7,0x5c,0xa3,0x33,0x97,0x17,0xba,0x88,0x98,0x64,0x73,0x39,0x1f,}, + {0xd7,0x1e,0x60,0x48,0x5a,0xa0,0xc6,0x5a,0xae,0xcd,0xe8,0xdf,0xce,0xc4,0x06,0xea,0xfe,0xaa,0xe5,0xc8,0x41,0xcb,0x4e,0x91,0xb8,0xf7,0xdc,0x41,0xa6,0x94,0x92,0x31,0x23,}, + {0xd4,0x17,0x69,0x99,0xcb,0xee,0x00,0xd8,0x23,0x69,0x46,0x9b,0x70,0xc0,0xe4,0xe4,0x6e,0xa8,0xd4,0xba,0x20,0x47,0x1c,0x71,0xc6,0xdb,0xda,0x60,0x36,0xdb,0x6d,0xc7,0x1b,}, + {0xd0,0x60,0x9b,0x21,0x5a,0xf0,0x00,0x37,0x1b,0x6d,0xb6,0xdb,0x6a,0x00,0x49,0x24,0x92,0x49,0x24,0xc6,0x00,0x49,0x24,0x92,0x49,0x24,0xd6,0x20,0x49,0x24,0x92,0x48,0xdc,}, + {0xd0,0x60,0xa2,0xe1,0x59,0xe4,0x00,0x39,0x24,0x92,0x49,0x24,0xda,0x00,0x47,0x24,0x92,0x49,0x24,0x82,0x00,0x49,0x24,0x92,0x49,0x24,0xb0,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5e,0xaa,0xe1,0x5a,0x52,0x00,0x49,0x24,0x92,0x49,0x24,0x70,0x00,0x49,0x24,0x92,0x49,0x24,0x6e,0x00,0x49,0x24,0x92,0x49,0x24,0x6c,0x00,0x49,0x24,0x92,0x49,0x24,}, +}; +static const gsm_frame gsm_data_tisic[] = { + {0xd6,0x58,0x61,0xd0,0x62,0x50,0x00,0xb9,0x1b,0x8e,0x37,0x92,0x54,0xc0,0x29,0x25,0x50,0xb6,0xa1,0x7e,0xa0,0xe6,0xe3,0x72,0x38,0xe3,0x94,0xa0,0x34,0xda,0x11,0xc3,0x12,}, + {0xd9,0x24,0xab,0x19,0x59,0xe7,0x41,0xb7,0x24,0x6e,0x37,0x37,0xf1,0xc8,0xdc,0x1c,0x72,0x58,0xe4,0x54,0x83,0xf7,0xc2,0xf2,0x7b,0x2a,0xc2,0xe5,0xb9,0x63,0x81,0xb4,0xda,}, + {0xd9,0x9d,0x9a,0xed,0x19,0x67,0xe4,0x04,0x93,0x21,0x24,0x09,0x6d,0xc4,0xb7,0x9e,0x96,0x3e,0x38,0xa5,0xd2,0xb7,0x1c,0x6d,0x78,0xe3,0x56,0x28,0x81,0x5c,0x09,0x32,0xeb,}, + {0xd7,0xd3,0x3b,0x76,0x6b,0x8e,0xca,0x49,0xa6,0x07,0x1c,0xe8,0xc8,0x2a,0xf8,0xaa,0xea,0xa4,0x9a,0x50,0xed,0x5b,0x75,0x91,0xb4,0xc2,0x51,0x0e,0xf4,0xf3,0x72,0x69,0x53,}, + {0xd7,0xd4,0x43,0x3e,0xe1,0x57,0x2e,0x8a,0xec,0x6e,0x49,0x63,0x57,0xac,0x02,0xcd,0xb6,0x59,0x1b,0x57,0xa8,0x0a,0x95,0x90,0xc3,0x24,0x57,0xcb,0x78,0x1e,0x1d,0x22,0x9c,}, + {0xd4,0x95,0x7c,0xbd,0xd9,0xb8,0xac,0x5a,0x82,0x0e,0xd2,0xdd,0xc2,0xac,0xd8,0xe4,0x45,0x2e,0xb1,0x63,0x68,0x3b,0x64,0x71,0x24,0x30,0x5b,0x26,0x57,0x90,0xf3,0xbd,0x6b,}, + {0xd4,0x96,0x6b,0xfe,0x1a,0xc0,0x88,0x11,0x2d,0xb5,0x4d,0xb3,0xc0,0xe7,0x90,0xcd,0x72,0xc7,0x7c,0xbc,0xe6,0x46,0xdb,0x62,0x25,0xaa,0xc5,0x68,0xb5,0x13,0x73,0xca,0xc7,}, + {0xd9,0xf0,0xf2,0xe0,0xd1,0x53,0xaa,0x14,0xd4,0xb2,0xcf,0x9c,0x73,0x0b,0x80,0x3b,0x8f,0x2b,0x13,0x60,0xea,0xd1,0x72,0x91,0xf6,0xa3,0x63,0x09,0x7d,0x9a,0xcf,0xbf,0x8c,}, + {0xd9,0xec,0xf3,0x31,0x98,0xe2,0xcd,0x3b,0x24,0xb9,0xb5,0xe5,0x57,0x4b,0xdb,0xb4,0x6e,0xcc,0x2b,0x80,0xab,0xf5,0x4d,0xd2,0x3a,0xd7,0x69,0x0d,0xe4,0xac,0x8a,0xf2,0x9e,}, + {0xda,0x2a,0xe3,0x72,0x61,0x50,0x8b,0xcb,0x0f,0x88,0xf4,0xdb,0xa0,0xcd,0xc6,0xe1,0x78,0x36,0xd4,0x8c,0x8a,0x16,0xc9,0xc8,0x35,0x04,0x5d,0x0a,0x43,0x5c,0x6d,0xc0,0x67,}, + {0xda,0x67,0xeb,0xf5,0x62,0x54,0xa9,0xd0,0xe3,0x72,0x44,0xcc,0xa0,0x89,0x26,0x69,0x56,0x09,0x0b,0xbc,0xc9,0xaa,0x03,0x2e,0xc6,0xc5,0x80,0xa9,0x59,0x43,0xe1,0xc8,0xaa,}, + {0xdb,0x29,0xe4,0x2d,0xa0,0x6b,0x2c,0x39,0x6a,0x2e,0xb5,0xcb,0x7f,0x6b,0x29,0x19,0xa9,0x06,0x98,0x6f,0x6b,0x48,0x1b,0xe1,0x56,0x9c,0x6e,0xc8,0x9a,0xce,0xac,0x77,0x1d,}, + {0xd9,0xec,0xda,0xea,0x33,0xa4,0xcd,0x4b,0x45,0xa5,0xe5,0x23,0x71,0x0c,0xd8,0x84,0x8e,0x23,0x0d,0x62,0xac,0x54,0x1d,0x69,0x3d,0x05,0x96,0xe6,0xe1,0x69,0xbc,0x54,0xe5,}, + {0xdb,0x2c,0xe2,0xf1,0xaa,0xba,0x88,0x1b,0xc7,0x32,0x27,0x3f,0x6f,0xac,0x31,0xb3,0x4b,0x44,0xdb,0x5e,0x27,0x96,0x5d,0x10,0xa9,0x36,0xbc,0x09,0x5b,0x2c,0x96,0x37,0x67,}, + {0xd8,0x9e,0x18,0x2e,0xac,0x69,0xc5,0x63,0x2b,0xec,0xa8,0x5f,0x76,0xe6,0x55,0x53,0x54,0xb5,0x90,0x94,0xa4,0xe2,0xd4,0xb2,0x54,0xd0,0xc2,0xc8,0x26,0x6c,0x9e,0x5a,0xe1,}, + {0xd4,0xd4,0x54,0xfe,0x52,0x63,0x2a,0x24,0x83,0x6e,0xd7,0x6d,0x5c,0xe8,0xd8,0x9a,0x1d,0xec,0x94,0x5d,0x28,0xa7,0x64,0x65,0x8b,0x24,0x63,0x47,0xbb,0x6c,0x71,0xa4,0x3b,}, + {0xd5,0xd1,0x5d,0x3d,0xd3,0xbf,0x67,0x76,0xa4,0xb2,0x3c,0x99,0x61,0x27,0x07,0x8d,0x8a,0xea,0xe4,0xc7,0xa6,0xd9,0x04,0x18,0x4a,0xe4,0x61,0xc4,0x69,0x1a,0xc4,0xe7,0xf0,}, + {0xd5,0x8b,0xa5,0xbd,0xda,0xb9,0xc8,0x4d,0xec,0xa9,0x26,0x2c,0x59,0x4c,0xb7,0x24,0xb2,0xd6,0x2a,0xb8,0xc8,0xcc,0x93,0xb6,0xeb,0x58,0x61,0x66,0x48,0xf3,0x56,0x6b,0x67,}, + {0xd5,0xcc,0x8d,0x79,0xdb,0xc1,0x07,0xa6,0x02,0x6f,0x37,0x26,0x61,0x07,0x69,0x1b,0x05,0xb9,0x9a,0xc3,0xe5,0xc9,0x5b,0x70,0x6a,0xb2,0x61,0xa4,0x49,0x5c,0x69,0xd7,0x20,}, + {0xd5,0x0d,0xad,0x71,0x63,0x61,0x42,0xbf,0x9b,0xfe,0xfe,0xd0,0x61,0xa3,0xe1,0xe4,0xd1,0xa6,0xe2,0xc3,0x65,0xa2,0x1c,0x7a,0x39,0x2d,0xc3,0xc3,0xc6,0xd3,0x6e,0xc0,0x94,}, + {0xd4,0x0e,0xa5,0xfa,0x13,0x65,0xc8,0x5a,0x9a,0x72,0xbb,0x57,0xc1,0xa7,0x76,0x09,0x6e,0x38,0xff,0xc1,0x44,0xfb,0x03,0x72,0x67,0x01,0x61,0xe3,0x88,0xd5,0x82,0x58,0x65,}, + {0xd4,0xd4,0xa3,0xbe,0x62,0x67,0xa9,0x47,0x4a,0x50,0x49,0xb4,0x61,0x2d,0xc9,0x6d,0x69,0x8e,0xdb,0x60,0xac,0xb7,0x64,0x91,0x96,0x3a,0x5d,0x69,0xb7,0x2e,0x8e,0x5e,0x6a,}, + {0xd3,0xdf,0x7c,0x71,0x9a,0xbc,0x89,0x86,0xec,0x72,0x58,0xd4,0xcc,0x42,0x02,0x90,0x0d,0x5b,0x6d,0xd0,0x41,0xfd,0x19,0x72,0x28,0xe4,0xb7,0x23,0x47,0xa7,0xb6,0xd7,0x23,}, + {0xd5,0x16,0x62,0x65,0x1b,0x54,0x20,0xaa,0xaa,0x71,0xc0,0xcb,0x8e,0x00,0xe8,0xd9,0x6e,0x49,0x52,0xec,0x00,0xa5,0xae,0x49,0x26,0xe4,0x5a,0x80,0xc8,0x5a,0x51,0xc6,0xe2,}, + {0xd8,0xa7,0xd3,0x2c,0x68,0xb9,0x42,0x26,0xda,0x24,0x92,0x00,0x51,0x6c,0xb6,0xeb,0xe5,0x46,0xe5,0x60,0x44,0x54,0x89,0x21,0x17,0x40,0xb4,0x86,0xc4,0x9b,0x48,0xa1,0x2a,}, + {0xd9,0xe8,0xcb,0xb1,0x22,0xd0,0xa9,0x93,0x53,0x2d,0x84,0x82,0x53,0x4c,0xa5,0x10,0x8c,0x52,0xd3,0x5c,0xac,0x98,0x68,0x71,0xb0,0xd5,0x63,0x6c,0x3e,0xae,0x8e,0xeb,0x9e,}, + {0xd9,0x6a,0xf3,0xf0,0xda,0xa8,0xec,0xa9,0x25,0xb2,0x28,0xbf,0xa9,0x6b,0xf7,0xd6,0x73,0xd9,0x21,0x5e,0xec,0xd8,0xe5,0xc8,0x6f,0x89,0xb8,0xd0,0x44,0xbc,0x49,0xb5,0x1c,}, + {0xd8,0x6f,0xc4,0x98,0x52,0x50,0xac,0x18,0xc2,0xa9,0xc0,0xa2,0x92,0x24,0x02,0x14,0x52,0xb9,0x2c,0x50,0x20,0xe9,0xb5,0xb2,0x49,0x24,0x78,0x40,0x5b,0x24,0xb6,0xdb,0x6d,}, + {0xd0,0x5e,0xa2,0xe1,0x5a,0xc4,0x20,0x49,0x24,0x92,0x46,0xdb,0xb8,0x20,0x36,0xdb,0x6d,0xb6,0xdb,0xee,0x00,0x36,0xdb,0x6d,0xb6,0xdb,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5e,0xa2,0xe0,0xaa,0x8c,0x00,0x49,0x24,0x92,0x49,0x24,0xcc,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x1c,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xda,0xa6,0xcb,0xe9,0xa2,0x57,0xa0,0x36,0xdb,0x6d,0xb9,0x24,0xa5,0xa0,0x5d,0xb6,0xdb,0x6d,0xb6,0x53,0xa0,0x59,0x24,0x92,0x49,0x24,0x69,0x8b,0x3e,0xdb,0x8d,0xc9,0x24,}, +}; +static const gsm_frame gsm_data_tisice[] = { + {0xd6,0x1c,0x8a,0x9d,0x21,0x50,0x60,0x48,0xdc,0x91,0x3c,0x52,0x54,0xc0,0x18,0xdc,0x2d,0x34,0x99,0x7e,0x80,0x66,0xdb,0x4e,0x26,0x9b,0x9d,0x61,0xb6,0xdb,0x6e,0x37,0x37,}, + {0xda,0x24,0x9a,0x5d,0x18,0x53,0xc8,0x51,0x5b,0x92,0x37,0x25,0x54,0x85,0xbe,0x17,0x93,0x59,0x12,0xba,0xe2,0xed,0x5c,0x21,0xa2,0x8e,0x67,0xa5,0x97,0x1a,0x45,0x98,0x44,}, + {0xdb,0xe8,0x92,0xd9,0x18,0x5d,0x68,0xbb,0x2b,0x4e,0x70,0xe9,0xb1,0x8e,0x21,0xa3,0x5e,0x06,0xdb,0x6c,0x0a,0x54,0xca,0x49,0x0d,0x5e,0x8a,0xc8,0x5c,0x26,0x14,0x22,0xcc,}, + {0xd8,0x12,0x3b,0x7e,0xa9,0xee,0xcd,0xeb,0xf6,0x72,0x22,0x82,0x58,0xaf,0x47,0x63,0x8d,0x34,0xcf,0xa6,0xd0,0x4b,0x14,0x72,0x48,0xd0,0x59,0x0d,0xf9,0x7a,0x6e,0xc9,0x19,}, + {0xd6,0xd6,0x43,0xbe,0x61,0x57,0x2c,0x18,0xbe,0x91,0xdb,0x62,0xad,0x2c,0x90,0x8d,0xba,0xdb,0x64,0xad,0xca,0xd0,0x43,0x92,0x15,0x7c,0x5b,0x4e,0x22,0x9f,0x74,0x37,0x2c,}, + {0xd4,0x53,0x8d,0x3e,0x18,0xb4,0xe9,0x54,0x40,0x92,0x88,0xe6,0xb4,0xa5,0xe8,0x82,0x23,0x3e,0x3c,0xb4,0xc6,0x7b,0x91,0x40,0xec,0xdd,0xbb,0x48,0x19,0xe9,0x29,0x9d,0xcc,}, + {0xd8,0xe3,0x48,0x19,0xaa,0x5f,0x29,0xb9,0xb7,0x91,0xa4,0x51,0x59,0x29,0x99,0x23,0xd2,0x74,0x53,0x6b,0x2a,0x3d,0x8d,0x71,0xc2,0x47,0x5f,0x2c,0xc9,0x14,0x7c,0x55,0x15,}, + {0xd9,0x6c,0xdc,0x39,0xe0,0x79,0xec,0xb8,0xea,0x52,0x5e,0xf0,0xb0,0xcc,0xcd,0x6c,0xe6,0xdf,0x9b,0x5a,0xad,0x6f,0x9b,0xf2,0x1d,0x33,0x52,0xad,0xc3,0xab,0x93,0x1f,0xd3,}, + {0xd9,0xe9,0xd4,0xb1,0xa1,0x96,0xab,0xe9,0x7a,0xac,0xed,0x17,0xa2,0x8c,0xaf,0x61,0x5b,0xc5,0x55,0x58,0xea,0x07,0xe9,0xb0,0x2c,0x36,0xa8,0xac,0x06,0x64,0x6a,0xb6,0x84,}, + {0xda,0x2c,0xe3,0x71,0x61,0x9e,0x8b,0xe4,0x13,0xc2,0x29,0x14,0x7a,0xaa,0xa1,0x5c,0x90,0xaa,0xdd,0xac,0xca,0x0c,0xa6,0x08,0xa7,0x6c,0xa5,0x4a,0x09,0x3c,0x0f,0x2a,0xe0,}, + {0xdb,0x27,0xd3,0x2d,0x61,0x6c,0xaa,0x64,0x65,0x6c,0xe4,0x3b,0xc4,0xa9,0x41,0x2b,0x54,0xc2,0x6a,0x90,0xc9,0xa6,0x8b,0x6d,0xa1,0x11,0xb5,0x0b,0x2f,0x00,0xd1,0x1a,0x92,}, + {0xda,0xa7,0xdb,0x75,0x6b,0x78,0xc8,0xc5,0x69,0xa6,0x5e,0xa3,0xb2,0xe9,0x0a,0x14,0xa2,0x93,0x98,0xe0,0xac,0xbb,0x24,0x2f,0x97,0x6b,0x70,0xea,0xc3,0x55,0x82,0x59,0x1c,}, + {0xdb,0x2c,0xdb,0xa9,0x59,0xc9,0x2d,0x46,0xeb,0xba,0x0b,0x5b,0xcc,0xca,0xe5,0x16,0x46,0x58,0x44,0x92,0xe8,0x4a,0xc0,0x40,0x49,0x1a,0xaa,0xa7,0x36,0x97,0xce,0x7c,0xb5,}, + {0xd6,0x57,0x32,0xfb,0x64,0xc8,0x88,0xd8,0xde,0xee,0xc7,0xa4,0xde,0x85,0xd8,0xbc,0xb2,0xd7,0x74,0xba,0x85,0x14,0x50,0x72,0x7b,0x6d,0x55,0x68,0xb6,0x83,0x96,0x4a,0x9d,}, + {0xd5,0x54,0x4d,0x3e,0x91,0x53,0x49,0x6a,0xda,0x18,0xdc,0xa4,0x5b,0x46,0xd8,0xe2,0x22,0x1f,0x63,0xaf,0xe4,0xc7,0x1e,0x44,0xcd,0x0f,0x5b,0x04,0x89,0xf5,0xac,0xb0,0x15,}, + {0xd5,0x10,0x66,0x3d,0xc9,0xb8,0x89,0x68,0x65,0xb1,0xb6,0x98,0x55,0x28,0x89,0xea,0x4e,0xdb,0x1c,0x5b,0x46,0xaf,0x67,0x4e,0xe9,0x09,0x51,0x09,0x11,0x0c,0xd1,0xc7,0x9e,}, + {0xd4,0xcd,0xbd,0x7d,0x52,0xad,0x69,0x20,0xd2,0x96,0x39,0x34,0xb5,0xc6,0xc9,0x15,0x15,0x37,0x1d,0x5b,0xc3,0x26,0xa4,0x6b,0x0b,0xa9,0xb5,0x26,0xbb,0x64,0x64,0x46,0xfc,}, + {0xd4,0x8d,0xb5,0x7d,0x92,0x5b,0x82,0xd9,0x28,0xa9,0x3d,0x3c,0xb5,0xc2,0x10,0xaa,0x30,0x37,0xbe,0x5b,0x44,0xcc,0xdb,0x9a,0x46,0x80,0xb5,0xc2,0xae,0x43,0x74,0xd3,0x9d,}, + {0xd4,0x4d,0xd5,0x79,0x9a,0x5b,0xa5,0x4a,0xe0,0xb2,0x3a,0xb3,0x5f,0x26,0x44,0xc3,0x5a,0xb5,0x27,0xb5,0x67,0xd6,0xc4,0x8d,0xc7,0x24,0xb5,0x05,0x5d,0x2a,0x21,0xc7,0xe2,}, + {0xd5,0x13,0x93,0xfe,0x59,0xb3,0xc9,0x49,0x24,0x6c,0x24,0xe4,0x61,0xeb,0x6f,0x63,0x6d,0xb6,0xe0,0x63,0xcc,0xd7,0x2b,0x26,0x68,0x50,0x9f,0xce,0xf3,0x5a,0x77,0x5d,0x6b,}, + {0xd4,0xdb,0x5b,0xfe,0xe0,0x5f,0x0c,0xc4,0x2c,0x91,0xc9,0x24,0x5f,0x0b,0xd8,0x20,0x89,0xc5,0x2d,0xbd,0x2b,0x39,0x69,0xa1,0x8d,0x23,0xc2,0x09,0xcf,0xab,0x60,0x96,0x57,}, + {0xd2,0x22,0x9c,0x71,0x21,0xb6,0x64,0xdb,0xf5,0x92,0x16,0x11,0xca,0x03,0x79,0xdb,0xb6,0x36,0x9a,0xbc,0x21,0x3c,0xd7,0xb2,0xdb,0x19,0xc4,0x21,0x14,0xec,0xcd,0xb9,0x24,}, + {0xd6,0x97,0x62,0x2a,0x6a,0xc0,0xc0,0xb6,0x9b,0xb2,0x20,0xe3,0xb6,0xa1,0x36,0x94,0xb6,0x28,0x62,0x50,0x20,0xa8,0xd3,0x2c,0xc6,0xd3,0xb9,0x20,0xa8,0x9a,0x72,0xc2,0xda,}, + {0xda,0xe4,0xdc,0xe1,0x60,0xc3,0xc2,0xc5,0x1a,0x4c,0x56,0xdb,0x71,0xa7,0xa6,0x91,0x74,0x07,0x59,0x67,0x6a,0x35,0x52,0x91,0x36,0x97,0x51,0x0c,0x98,0xc4,0xc1,0x07,0x84,}, + {0xda,0x27,0xc3,0x29,0xd9,0x54,0xeb,0x24,0x2b,0x0e,0x4a,0x58,0x8a,0xcb,0xa6,0xc6,0x14,0x33,0x41,0xd7,0x6d,0x35,0x9d,0x69,0x23,0x30,0x73,0x2c,0xbf,0x02,0xc9,0x48,0x1d,}, + {0xd9,0xa9,0xca,0xa5,0x1a,0x6c,0x8a,0x1c,0xc4,0x0d,0x2c,0x5d,0xb0,0xc8,0x8a,0x26,0x2d,0xd3,0x2c,0x51,0x2a,0x65,0x98,0x52,0xcc,0x52,0x7a,0xcb,0x37,0x23,0x49,0xb7,0x50,}, + {0xd5,0x9f,0x91,0x79,0xd0,0xe8,0xc5,0x2a,0x8f,0x34,0x53,0x83,0xe6,0xa8,0x37,0x27,0x0d,0xeb,0xa6,0x71,0xcd,0x46,0x48,0x9f,0x5d,0xe5,0x51,0x74,0x36,0xd1,0xed,0xc6,0xe4,}, + {0xd5,0xa2,0x9a,0x35,0xe0,0x5f,0x4f,0xc9,0x5a,0xc1,0x75,0x2b,0x5f,0x8f,0xd7,0x2d,0x9a,0x98,0x25,0x63,0x0f,0xd9,0x25,0x92,0x54,0x88,0xbf,0x8d,0x76,0x9d,0x6d,0xd6,0x91,}, + {0xd5,0x19,0x7c,0x2d,0x60,0x64,0xcf,0x13,0xcc,0x8e,0x5b,0x1a,0xbc,0xc9,0x82,0x9f,0xad,0xc9,0x9d,0xbd,0x0e,0xb6,0xe3,0x6f,0xc5,0x23,0x61,0x6c,0xc7,0x14,0x2e,0x2e,0xda,}, + {0xd4,0x5a,0x9b,0x71,0x58,0x5d,0x09,0x79,0x2e,0x78,0xb4,0x66,0xce,0xed,0x48,0xec,0xb2,0x26,0x1a,0xbd,0x27,0xbe,0xdf,0x6e,0x39,0xd5,0x5f,0x4a,0xa4,0xba,0x75,0xba,0xe3,}, + {0xd3,0x9b,0xac,0x61,0x70,0x61,0x08,0x48,0xc4,0x1a,0x29,0x9c,0x5f,0x25,0xbd,0x6b,0x4d,0x48,0x34,0xbf,0x46,0x4b,0x25,0x8d,0xa5,0xc4,0xd0,0xaa,0xda,0xe6,0x6f,0x34,0x0a,}, + {0xd2,0x60,0xca,0x2d,0xe1,0xc0,0xa7,0xc0,0xbc,0x79,0xdb,0x11,0x5e,0xa5,0xd5,0xe1,0xba,0x49,0x6b,0xbc,0xc4,0x84,0xd7,0x4f,0xbb,0x65,0xba,0xc4,0xb8,0xca,0x12,0x45,0x6d,}, + {0xd1,0x67,0x83,0x72,0xe3,0xbc,0xc3,0x68,0xa2,0xc1,0x77,0x1c,0xd4,0x22,0xb7,0x6a,0x90,0x2a,0xdb,0xbc,0x20,0x95,0x77,0x8a,0x08,0x2e,0xd2,0x41,0x37,0x0c,0x76,0x3a,0x19,}, + {0xd3,0x67,0x48,0xde,0x33,0xec,0xc1,0x24,0xe0,0x96,0x49,0x63,0x64,0xe0,0x90,0xa9,0xec,0x62,0x8c,0x58,0xc0,0xb8,0xdb,0x2a,0x58,0xab,0xba,0xc0,0xa7,0x1c,0x73,0x25,0x33,}, + {0xd5,0xa7,0x68,0x44,0x9b,0xc2,0x80,0xd9,0x14,0x8e,0xb3,0x9c,0x96,0xc1,0x3d,0x1b,0x6e,0x39,0x33,0x82,0x80,0xb9,0x94,0x95,0xd9,0x24,0x72,0xa0,0xcb,0x6b,0xac,0xb4,0xdc,}, + {0xd5,0x62,0x68,0x91,0x5a,0xc8,0x80,0xd9,0x6c,0x65,0x56,0x9d,0xc6,0x00,0x0a,0xdb,0x4d,0xc4,0xe3,0x7c,0x20,0x46,0xdb,0x6e,0x36,0xdb,0xd0,0x00,0x38,0xdc,0x6d,0xc6,0xdb,}, + {0xd0,0x5e,0xa2,0xdd,0x5a,0xec,0x00,0x48,0xdb,0x6d,0xb7,0x24,0x9a,0x00,0x49,0x24,0x92,0x49,0x24,0xe2,0x00,0x49,0x24,0x92,0x49,0x24,0x6c,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5e,0xa2,0xe1,0x5a,0x52,0x00,0x49,0x24,0x92,0x49,0x24,0x68,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5e,0xa2,0xdd,0x1a,0x60,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,}, +}; +static const gsm_frame gsm_data_minus[] = { + {0xd4,0x5a,0x99,0x11,0x2c,0x50,0x20,0xc9,0x1c,0x50,0x65,0x25,0x5c,0xa0,0xd8,0xf5,0x4e,0xd9,0x33,0x5c,0xa0,0xd7,0x74,0x6d,0x26,0xe6,0x5c,0xc0,0xbf,0x8c,0x8a,0x32,0xda,}, + {0xd0,0xe9,0xd4,0x6e,0x23,0xbd,0x80,0xa8,0xe7,0xda,0xcb,0x1b,0x62,0xa0,0xb4,0xa4,0x97,0xb9,0x11,0xc1,0xa2,0xb4,0x01,0x6f,0x6b,0x6c,0x51,0x65,0xb6,0x40,0xea,0x56,0x5d,}, + {0xd0,0xeb,0xbb,0x2d,0xeb,0x5f,0x09,0x58,0xe2,0x33,0xc9,0x4c,0x57,0x07,0xc9,0x8b,0x48,0xf3,0x73,0x57,0x48,0xb9,0x2a,0x6c,0x76,0x77,0x55,0x88,0x08,0xdc,0x91,0xc3,0xcb,}, + {0xd1,0x68,0xbb,0x65,0xa3,0x57,0x49,0x39,0x2c,0x8d,0xa3,0x88,0x57,0xab,0x7a,0xe3,0x91,0xb6,0xd4,0x57,0xc8,0x1d,0x5c,0x8a,0xb6,0xdf,0x57,0x85,0x0c,0xdd,0x76,0x47,0x1b,}, + {0xd2,0x22,0xac,0x65,0x9a,0x57,0xe7,0xd4,0x3c,0xe9,0xe8,0x16,0x59,0xaf,0xa8,0x9f,0x4d,0xc9,0x23,0x57,0xa9,0x08,0x7b,0x77,0x2c,0xcd,0x59,0xe9,0xc2,0xf0,0xe9,0x2a,0xe2,}, + {0xd2,0x1f,0xf3,0x25,0x62,0x57,0xa6,0x7d,0x18,0xaf,0x63,0x1c,0x53,0x29,0xd8,0x52,0xe5,0xd8,0xe5,0xa9,0x29,0xda,0xd2,0x3c,0x9f,0x14,0x57,0xc7,0x58,0xdc,0x71,0x5a,0x36,}, + {0xd3,0x13,0xe4,0xa9,0x2a,0x57,0xca,0x49,0x2c,0x68,0x70,0xf2,0xac,0xac,0x1b,0x6c,0x6d,0x43,0xdb,0xaa,0x4a,0x37,0x2c,0x8c,0x86,0xed,0xae,0xca,0x17,0x5c,0x91,0x91,0x1c,}, + {0xd4,0xcc,0xb5,0x7d,0x92,0x57,0x66,0xb9,0x25,0xb5,0xa0,0x20,0xad,0x48,0x6a,0x94,0x79,0xb4,0x87,0x57,0x27,0x6b,0xd3,0x73,0x3a,0xd0,0x57,0xe5,0x0a,0x9c,0x91,0x59,0x21,}, + {0xd4,0x8e,0xbd,0xbd,0x92,0x57,0xc2,0x85,0x02,0xa9,0xf7,0x92,0x57,0x84,0x7a,0xd2,0x4d,0xeb,0x23,0x57,0x83,0x73,0x63,0x71,0x47,0x1b,0xad,0xe4,0x45,0x5b,0x66,0xc7,0x20,}, + {0xd4,0xcc,0xcd,0xf5,0x93,0x5b,0x24,0x5c,0x88,0x26,0x7c,0x93,0xad,0x64,0xfd,0x51,0x32,0x6a,0xd1,0xad,0x83,0x54,0x9c,0x8e,0x6e,0xdd,0x53,0x05,0x95,0xb5,0x84,0x39,0x33,}, + {0xd5,0x15,0x93,0xfa,0x29,0xa9,0x2c,0xc9,0x2c,0x8d,0x14,0x60,0x6d,0xec,0x4b,0xba,0x2f,0x62,0x0a,0x61,0x12,0xae,0xdb,0x72,0x56,0xe4,0x61,0x6c,0x40,0x7c,0xa9,0x4d,0x52,}, + {0xd5,0x19,0x83,0xf5,0xe0,0xc1,0x50,0x48,0xe9,0x1d,0x4c,0x66,0x60,0xcc,0x9d,0x25,0x00,0x0b,0x65,0xc1,0x4c,0x2a,0xaf,0x72,0x04,0x86,0xc2,0xab,0xad,0x66,0x76,0xdc,0x80,}, + {0xd2,0x5f,0xb4,0x61,0x61,0xc3,0x2a,0x8d,0x55,0x71,0xcc,0x9a,0xbc,0xc8,0xb8,0x54,0xd8,0xea,0xbb,0xba,0xaa,0xac,0x9b,0x12,0x5c,0xae,0x63,0x4a,0x56,0xa9,0x6c,0x56,0xfb,}, + {0xd1,0x6a,0xb3,0x12,0x6c,0x61,0x06,0x8c,0xde,0x6e,0x24,0xf5,0x60,0xe5,0x20,0xa5,0xae,0x56,0xc1,0xc0,0x86,0xbb,0xdb,0x2a,0x4a,0xe4,0xc3,0x26,0x54,0x7b,0x98,0xba,0xec,}, + {0xd1,0xea,0xa3,0x55,0xe4,0x61,0xc4,0xca,0x34,0x0b,0x1f,0x25,0x61,0x83,0x2b,0x4c,0x8c,0x56,0xed,0x63,0x66,0xd9,0x2b,0xb1,0x32,0xa7,0x61,0x22,0x9e,0x96,0x9b,0x0f,0x02,}, + {0xd2,0xe0,0xb4,0x12,0x5b,0xc3,0xc9,0xb6,0xdd,0x8b,0x87,0x94,0x67,0xed,0x34,0x97,0x69,0xba,0xe5,0x61,0x6a,0x55,0x4c,0x47,0xb7,0x1c,0xc3,0x6a,0x69,0x2b,0x82,0x1d,0x1d,}, + {0xd2,0x66,0xd2,0x55,0xec,0xc3,0x69,0x55,0xd5,0x92,0xa4,0x97,0x61,0x49,0x9a,0x23,0x92,0x49,0x13,0xc1,0x4a,0xa7,0x5b,0x52,0xb8,0xa7,0x61,0x6a,0x35,0x04,0xee,0x98,0xe5,}, + {0xd2,0x6c,0xc1,0x5a,0x74,0x61,0x28,0x49,0xf3,0x49,0x56,0x25,0xc0,0xe9,0x6b,0x2e,0xd1,0x21,0x52,0xc3,0x46,0x8f,0x67,0x5a,0xb8,0xc3,0x61,0x06,0x62,0xdb,0x96,0x57,0xd3,}, + {0xd2,0x26,0xe9,0x1d,0xba,0x5f,0x66,0x03,0x6b,0xa2,0x3c,0x9a,0xbe,0xe6,0x24,0x47,0xce,0x97,0x2d,0x61,0x24,0x3e,0x9b,0x14,0xd2,0xe5,0x6b,0x47,0x68,0xe6,0x0d,0xa7,0xa0,}, + {0xd5,0xdc,0x90,0x55,0x1b,0xb7,0x29,0x48,0xef,0x91,0xd0,0x0a,0x50,0xcb,0x3b,0xef,0x90,0xc5,0x03,0x66,0xe8,0xc1,0xce,0x10,0x48,0x72,0xe1,0x8e,0x41,0x09,0x95,0xe6,0xe2,}, + {0xda,0x1c,0xc1,0x48,0x01,0x7d,0xae,0x46,0xd4,0x2a,0xd1,0xaa,0xb8,0xac,0xc3,0x22,0x57,0x87,0x8c,0xe1,0x0d,0xf6,0x9d,0x92,0xc8,0xda,0x83,0x6d,0xf7,0x12,0x9d,0x5a,0xa2,}, + {0xdd,0x60,0xa2,0x08,0x49,0x95,0xed,0x6a,0x34,0x74,0xff,0x5f,0x56,0xaf,0x27,0x9d,0x6b,0xc5,0x64,0xb3,0x71,0xcb,0x24,0x9c,0xc8,0xec,0x5a,0xce,0x57,0x33,0xc9,0xea,0x6f,}, + {0xdd,0xa3,0xc3,0x58,0xc1,0xbb,0x0c,0xea,0xa6,0xce,0x6a,0x3e,0xde,0xaf,0x45,0x2d,0x87,0xc3,0x24,0x64,0x8e,0x64,0xb9,0x91,0xae,0x9c,0x88,0xce,0x18,0xf2,0xac,0x65,0x22,}, + {0xdc,0xe6,0xf4,0xa5,0x41,0xca,0xee,0xb8,0x95,0x82,0x28,0x22,0x55,0x10,0x26,0xa4,0x09,0xc2,0x6c,0x50,0x8e,0x18,0x83,0x31,0xb1,0x91,0x9e,0xd0,0xc6,0x71,0x55,0xaa,0x33,}, + {0xdd,0x68,0xfb,0xea,0x51,0x5d,0x51,0x0c,0x55,0x32,0x19,0x0d,0x9a,0xef,0x32,0xdb,0x14,0xb4,0x9d,0xec,0xac,0xc1,0x05,0x29,0x24,0xc1,0xee,0x49,0x90,0xc1,0x6a,0x47,0x53,}, + {0xdc,0x5f,0x8a,0xa1,0x10,0xa0,0x24,0x65,0x7c,0xf2,0xd9,0x6d,0x50,0x00,0x2f,0xdd,0x96,0xeb,0xae,0x92,0x60,0x4b,0x35,0xba,0xdd,0xad,0xe2,0x20,0x3b,0x66,0xb7,0x5d,0xae,}, + {0xd0,0x20,0xa2,0xe1,0x5a,0x7c,0xc0,0x49,0x23,0x92,0x46,0xdb,0xec,0x00,0x36,0xdb,0x6d,0xb6,0xdb,0xe2,0x00,0x36,0xdb,0x6d,0xb6,0xdb,0xa6,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5e,0xa2,0xe1,0x5a,0x54,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x1c,}, + {0xda,0xa6,0xcb,0xe9,0xa3,0x63,0xa0,0x47,0x1c,0x92,0x4b,0xbf,0x51,0xc0,0xef,0xbe,0xdb,0x6d,0x6d,0x5f,0xd0,0x49,0x24,0x12,0x49,0x1b,0x7e,0x40,0xfd,0xb6,0xdb,0x5b,0x6d,}, +}; +static const gsm_frame gsm_data_point[] = { + {0xd5,0x58,0x61,0x0c,0xd1,0x50,0x20,0xb8,0xdb,0x6d,0xb9,0x0b,0x50,0xe0,0x6c,0x62,0x72,0xc4,0xcf,0x60,0xc0,0x44,0xd3,0x8d,0xdd,0x64,0xe0,0xc0,0x2b,0x1e,0x59,0xb8,0xe4,}, + {0xd8,0xd9,0xaa,0x91,0xd2,0x6e,0x80,0x36,0x5e,0x86,0xb6,0xeb,0x78,0x80,0x1a,0x65,0x46,0x4a,0xa5,0x9a,0xe0,0xa9,0x63,0xd1,0xb9,0x24,0x65,0x40,0xab,0x5b,0xd1,0xcb,0x2e,}, + {0xd9,0xa4,0xeb,0x1d,0x18,0xbb,0xac,0xc9,0x24,0x92,0x49,0xdb,0x60,0x46,0xb8,0x6f,0xd1,0xb6,0xda,0xa2,0xc5,0x49,0x4c,0x6a,0x48,0x1d,0xe0,0x23,0xba,0xb2,0xb2,0x4d,0x1f,}, + {0xdb,0x65,0xd4,0x9d,0xe1,0xb3,0x84,0x59,0xad,0x33,0x9d,0x1b,0x7d,0xc8,0xb1,0xa1,0x8a,0x50,0x95,0x5b,0x48,0x28,0x3d,0x91,0x75,0x17,0x86,0xe9,0xa9,0xe4,0xd6,0xd7,0x67,}, + {0xda,0x66,0xe2,0xea,0x1b,0x8b,0x2c,0xa7,0x94,0x8d,0xda,0x23,0xd9,0x50,0x24,0xdc,0x49,0xb5,0x67,0x6c,0xce,0x12,0xdd,0x56,0x60,0xe1,0x8c,0xec,0x63,0x03,0x2c,0x8a,0xc9,}, + {0xd9,0x27,0xa9,0x5d,0x9a,0xb0,0x8c,0x98,0x84,0x90,0xa8,0xcd,0xe2,0xa7,0x03,0x94,0xe3,0xa1,0x67,0xde,0xaa,0xe4,0xbc,0x71,0xcd,0x5c,0xcc,0x90,0xf4,0x9b,0x96,0x59,0x75,}, + {0xd4,0xdf,0x73,0xae,0x90,0x52,0x92,0x36,0x80,0x33,0xfd,0x63,0x52,0x94,0x34,0xd3,0xf1,0xc7,0x24,0x55,0x4f,0xc4,0xd2,0xe5,0xc6,0xec,0x57,0x50,0xc7,0x1a,0x3d,0xbb,0x24,}, + {0xd5,0xa0,0x63,0xae,0x58,0x55,0x0e,0xc8,0xda,0x0b,0xc5,0x65,0xa9,0xad,0xdc,0xdc,0x11,0x58,0xdb,0x55,0x0f,0xea,0xe4,0x48,0x1e,0xdd,0xb3,0xae,0x29,0x0a,0xf0,0xf0,0xee,}, + {0xd6,0x20,0x53,0xf2,0x28,0xbf,0xcc,0xea,0x31,0x97,0x33,0x14,0x5f,0x2f,0xf4,0x2c,0x91,0xcd,0x5b,0x5f,0xeb,0x2c,0xcf,0x90,0xdc,0xa1,0x61,0xca,0xc8,0x37,0x4a,0xc7,0x13,}, + {0xd5,0xde,0x53,0x72,0x61,0x5f,0xab,0x59,0x0f,0x93,0x42,0xac,0x5f,0x0e,0xb9,0x5c,0x8a,0x23,0xe9,0xbf,0x6c,0xc9,0x2d,0x8a,0x32,0xb9,0x5f,0x6b,0xb6,0xa5,0xbd,0xc6,0x90,}, + {0xd5,0x1a,0x64,0x33,0x22,0x5f,0x8c,0xd0,0xb5,0xad,0x36,0xed,0x5f,0x6c,0xb6,0x9c,0x4e,0x59,0x1f,0xbc,0xad,0x4a,0x99,0x16,0xa9,0x24,0xb9,0x0c,0x3e,0xdc,0x45,0xa3,0x5c,}, + {0xd4,0xd5,0x64,0xb6,0xb8,0xb8,0x8a,0x5f,0x9d,0xad,0x01,0x8e,0x5f,0x08,0x20,0x14,0xd1,0x47,0x21,0xb4,0xc6,0xba,0xc0,0x7f,0x7f,0xb2,0xbf,0x28,0x09,0x07,0xae,0xb9,0x74,}, + {0xd4,0xd4,0x6c,0xfe,0x60,0xbf,0x88,0x74,0x46,0x73,0x35,0x6b,0x5f,0x2b,0xb8,0xd4,0x11,0xd9,0x1b,0x5b,0x26,0x3d,0xde,0x20,0x1a,0x7a,0xc3,0x4c,0xdb,0x5c,0x71,0x31,0xdc,}, + {0xd5,0x0e,0x85,0xfe,0x0b,0x5f,0x25,0xdc,0x1c,0x75,0xc4,0x58,0xa6,0x0a,0x0b,0x2a,0x6e,0xd9,0x63,0xbe,0xea,0x09,0x1d,0x8d,0xc9,0x64,0xbf,0x26,0x36,0xc4,0x8b,0xd6,0xe4,}, + {0xd5,0x4b,0xbc,0xf5,0x63,0x5b,0xe3,0xe9,0x95,0x07,0x2f,0x99,0x5f,0xc5,0x4b,0x9c,0x41,0x6a,0xbc,0x61,0xc4,0x0d,0xf2,0x4c,0xc7,0x92,0x61,0xc3,0xd1,0x6c,0x89,0xb6,0x49,}, + {0xd6,0xc9,0xb5,0x35,0xd3,0x5f,0x83,0x6f,0x14,0x96,0xcb,0x25,0x5f,0xe3,0xce,0x12,0xb2,0x28,0xaa,0x5f,0xc1,0x87,0xe8,0xdc,0x9c,0xa8,0xbf,0x26,0xcb,0x1a,0x42,0xc9,0xd4,}, + {0xd5,0x89,0xc5,0x7a,0x52,0xbf,0xc6,0xc8,0xdb,0x8d,0x4f,0x64,0x5f,0xc5,0x02,0x5c,0x4d,0xbb,0x55,0x5f,0x44,0xed,0xcb,0x92,0x69,0x11,0xbf,0x25,0x0f,0x75,0x8a,0xcb,0x2c,}, + {0xd5,0x8a,0xad,0xfa,0x12,0xc3,0x84,0xe5,0x8f,0x43,0xa6,0xec,0x5b,0x24,0xfc,0xd0,0x16,0xbd,0x1b,0xb9,0x85,0xac,0xf2,0x86,0xb7,0x45,0x5f,0xe2,0xda,0xdd,0x6e,0x71,0x6d,}, + {0xd5,0x94,0x63,0x3e,0x51,0x63,0x48,0xd5,0x2d,0xd2,0xb8,0xd0,0xa3,0xcd,0x36,0xad,0x76,0xcb,0xe2,0x63,0x70,0xb2,0xbb,0x91,0xb9,0x1c,0x60,0xac,0x36,0x90,0x7d,0xf6,0xa5,}, + {0xd5,0x56,0x4b,0x7e,0xa8,0xbc,0xe9,0xd7,0x4b,0x0a,0x74,0xda,0xbe,0xc8,0xfb,0x64,0x8a,0x81,0x55,0x56,0xa7,0x7a,0x5e,0xaf,0x8a,0x45,0x7d,0x29,0x2f,0xae,0x8e,0x31,0x58,}, + {0xda,0x68,0xb1,0x11,0x23,0x70,0xc8,0xc0,0xeb,0x6d,0xab,0x99,0xc0,0xc7,0x80,0xd0,0x70,0x3e,0x12,0xe2,0xcb,0x41,0x1a,0xb0,0xc7,0x4c,0x65,0x49,0xd5,0x5d,0x8a,0x61,0xe1,}, + {0xda,0x65,0xda,0xe6,0x2a,0xaa,0xc9,0x5c,0xe5,0xa3,0xd9,0x64,0x88,0xcd,0xb9,0x7d,0x72,0xcd,0x4c,0x7c,0xa9,0x1e,0xf5,0x75,0x3d,0x6b,0x7c,0x88,0x8d,0x9e,0xb5,0xff,0xeb,}, + {0xd9,0x68,0xe2,0x8d,0x61,0xdc,0x88,0x8b,0xe4,0x0b,0x4d,0x6d,0xb7,0x69,0x39,0x17,0x68,0xea,0xb9,0x83,0x69,0xc9,0x25,0x8e,0x67,0x5f,0x86,0xc9,0xb9,0xe4,0x99,0xe7,0x3c,}, + {0xd7,0xee,0xfb,0x15,0x58,0x9c,0xc8,0x65,0xd6,0xb2,0x47,0xac,0xba,0xc4,0xad,0x67,0x74,0xce,0xdc,0xbb,0xa8,0x58,0xca,0xe2,0x22,0xe2,0x54,0xa8,0xa7,0x15,0x90,0x6c,0xde,}, + {0xd7,0x6e,0xfb,0x5e,0x1b,0xa2,0xaa,0xba,0xdc,0x8d,0x7a,0x94,0xb1,0x28,0x76,0xdb,0x95,0xa9,0x14,0x81,0x29,0x14,0xe0,0xad,0x26,0x8d,0xcc,0x88,0x26,0x85,0x2a,0x3a,0xe9,}, + {0xd7,0x68,0xfb,0xa1,0x12,0x94,0xa8,0xa4,0xb8,0x4e,0x38,0xd3,0x6a,0xe4,0x95,0x41,0x47,0x23,0x2b,0x94,0x42,0x0a,0xcb,0x89,0x38,0xdb,0xd6,0x00,0xe6,0x8a,0x45,0xa2,0xd1,}, + {0xd0,0x5e,0xaa,0xe1,0x5a,0xdc,0x20,0xc8,0xe9,0xb5,0xb9,0x5c,0xee,0x20,0x67,0x2c,0x76,0x49,0x24,0xd4,0x20,0x49,0x24,0x92,0x49,0x24,0xe8,0x20,0x49,0x1c,0x92,0x38,0xe4,}, + {0xd0,0x60,0xa2,0xe1,0x5a,0x54,0x00,0x39,0x24,0x92,0x49,0x24,0x9a,0x00,0x49,0x24,0x8e,0x49,0x1c,0x9e,0x00,0x49,0x24,0x92,0x39,0x24,0x74,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xda,0xa6,0xcb,0xe9,0xa2,0x50,0x60,0x36,0xdb,0x6d,0xa2,0x01,0x51,0x20,0x92,0x49,0x24,0x92,0x92,0x52,0xe0,0xa4,0x92,0x49,0x24,0x8a,0xb7,0x92,0x36,0xdc,0x6d,0xb1,0x24,}, +}; +static const gsm_frame gsm_data_hafo[] = { + {0xd7,0x5f,0x61,0x9c,0x13,0x50,0x20,0xa6,0x92,0x44,0x44,0x93,0x56,0xa0,0xb3,0xa8,0xaf,0x27,0x1b,0x8c,0xe0,0x79,0xd5,0xaf,0x1d,0xd2,0x8f,0xc1,0xf5,0x2b,0xd2,0xb9,0x61,}, + {0xd7,0x33,0xc3,0x59,0x91,0x59,0xa4,0x68,0xa6,0xe3,0xef,0xfd,0x56,0xa9,0x46,0xe0,0xcd,0xf5,0xa2,0x59,0x68,0x35,0x51,0xe5,0xcb,0xd5,0x53,0x49,0xb2,0xd5,0x14,0x4e,0xee,}, + {0xd6,0xad,0x99,0x9c,0xd9,0x51,0x4d,0x5a,0xe0,0x70,0xe4,0xec,0x57,0x2b,0xc5,0x4b,0x10,0x36,0xe5,0xad,0xf0,0xd5,0x28,0x6d,0x33,0xc4,0x57,0x71,0x47,0x94,0x6a,0x22,0xdf,}, + {0xd6,0x26,0xa9,0xe0,0x60,0x69,0x32,0x39,0xec,0x89,0x33,0x4c,0xb1,0x31,0xca,0xfe,0x56,0xb5,0x11,0x5b,0x30,0x3a,0x7e,0x90,0xa0,0x1c,0xa5,0x54,0xb9,0x3a,0xb1,0x71,0x5a,}, + {0xd5,0xe7,0x82,0x14,0xe0,0x58,0xb4,0x44,0xdb,0xf2,0x48,0xa2,0xb1,0x32,0xa8,0x6b,0x5e,0x58,0x9b,0x56,0xb2,0x50,0xcc,0x7a,0xe8,0xe0,0x98,0xb3,0xc0,0xd0,0x7a,0xeb,0x62,}, + {0xd5,0x1f,0x99,0x9c,0xe2,0x57,0x14,0x41,0x4b,0x8a,0xc7,0x25,0xac,0xf1,0x4a,0x12,0x4e,0x4f,0x5d,0xa9,0x73,0x4b,0x14,0x62,0xd8,0xee,0xad,0x35,0x28,0xe3,0x4d,0xbe,0x9d,}, + {0xd5,0x24,0xaa,0xa1,0x20,0x54,0xb4,0x38,0xe2,0x65,0xa3,0xcb,0xab,0xf3,0xaf,0x34,0x78,0x25,0x85,0x57,0x52,0xe8,0x7c,0x92,0x20,0x7a,0xad,0xd3,0x3c,0xc5,0xae,0x54,0x9d,}, + {0xd5,0x28,0x9a,0x6a,0x10,0x6a,0xd4,0x0b,0x2c,0xae,0xc6,0xd3,0x60,0xd1,0x81,0x63,0x96,0xbb,0x6b,0xc2,0xef,0x28,0x03,0x72,0xcf,0x2d,0x61,0x2e,0x77,0x23,0x08,0xc5,0x31,}, + {0xd4,0x23,0x99,0x9e,0x48,0xca,0x8e,0xfc,0xee,0x4a,0x20,0xe6,0xb8,0xaf,0x3f,0x1c,0x50,0x99,0x61,0x5c,0x8c,0x79,0xb3,0xac,0xe2,0x6b,0xb6,0xe8,0x51,0xa2,0xbd,0xa5,0xf1,}, + {0xd5,0xde,0x88,0xe1,0x19,0xd6,0x06,0x84,0x93,0x5f,0x47,0xe9,0xc0,0xe8,0x78,0x9b,0x46,0xd0,0x28,0xaa,0x85,0xd3,0xd8,0xc0,0x42,0x9a,0x6c,0xa6,0x8e,0xe3,0xcd,0x47,0x5c,}, + {0xda,0x26,0xeb,0xf0,0xd8,0xd4,0xa5,0xf3,0x9c,0x6d,0xca,0x85,0xdd,0x48,0xb7,0x54,0x5d,0x46,0x59,0x76,0xc9,0x34,0x13,0x46,0x59,0x52,0x77,0x67,0xdd,0x56,0x47,0x43,0x85,}, + {0xda,0x66,0xe3,0x20,0xd1,0xc7,0xe9,0x35,0x17,0x87,0xd7,0x1e,0x62,0xc9,0xf6,0xdb,0x90,0x38,0xd9,0xbd,0x2a,0x61,0x51,0x88,0xc2,0xda,0x69,0x2d,0x28,0x2d,0x52,0x29,0x5d,}, + {0xda,0xa7,0xd3,0xa9,0xd8,0xb1,0x4a,0x37,0x0c,0xc9,0xd1,0xe9,0xa2,0xaa,0x64,0x9c,0x7e,0x9d,0xdc,0x98,0xcc,0xc9,0x1c,0xaf,0x97,0x12,0x6e,0xac,0x57,0xa3,0x9b,0x3b,0x6f,}, + {0xd7,0x60,0xa2,0x60,0x10,0x88,0xc9,0x5d,0x7e,0x87,0xcb,0x1d,0xdc,0xa9,0x2b,0x63,0xb3,0xe7,0x2a,0xe4,0x46,0xed,0x1a,0x7c,0x37,0xc2,0xdc,0xa8,0x53,0x33,0x6f,0x88,0xe7,}, + {0xd3,0x6a,0xd0,0x91,0xb2,0x6c,0xa5,0x1f,0x3a,0x9a,0x37,0x12,0x6a,0xe7,0xaa,0xa5,0x92,0x46,0xc0,0xca,0xca,0x03,0xea,0x9a,0x4b,0x24,0x5b,0x2d,0x38,0x87,0x8d,0xaa,0xac,}, + {0xd2,0xe8,0xc9,0x9e,0x31,0x63,0x09,0xde,0x6a,0x03,0xb5,0x6b,0xc3,0x0b,0x4b,0x74,0x8d,0x89,0x84,0x61,0x48,0xd5,0x66,0x78,0xd2,0x4f,0x6c,0xcc,0x27,0x24,0xb5,0xd9,0x01,}, + {0xd4,0x6c,0xe0,0x1a,0xaa,0xc1,0x0b,0x63,0x50,0xd2,0x28,0xac,0x61,0x2a,0x44,0x80,0xf1,0x59,0x2d,0xc3,0x09,0x7b,0x22,0x21,0x58,0xec,0x61,0x28,0xda,0xec,0x8c,0x23,0xa2,}, + {0xd4,0x2c,0xd0,0x16,0xe9,0x61,0x26,0xe7,0x1c,0x92,0x44,0x58,0xc3,0x48,0x41,0xa3,0x8e,0x49,0x19,0xc3,0x45,0x39,0xe0,0xb1,0xc9,0x25,0x61,0x84,0x09,0x9a,0x36,0x2a,0xa4,}, + {0xd3,0xe9,0xe9,0x06,0xf1,0x61,0xa3,0xc7,0x67,0x58,0xb6,0xce,0x61,0x65,0x2a,0xab,0x8c,0x33,0xd2,0x61,0x24,0xe9,0x25,0xb2,0xba,0x18,0xc1,0x24,0xf6,0x75,0x7a,0x57,0x25,}, + {0xd3,0xa8,0xe9,0x02,0xf1,0xc3,0xa3,0x7b,0x95,0xca,0x48,0xda,0xc3,0x24,0xb6,0x69,0xed,0xc9,0x24,0xc0,0x85,0xc9,0x1c,0x2c,0x6a,0xdd,0xc0,0xa3,0xbb,0x25,0x71,0x84,0x2e,}, + {0xd2,0xe6,0xda,0x02,0xb2,0xc2,0xe3,0x4b,0x2d,0x96,0x44,0x13,0xc4,0xc2,0xe6,0xa3,0xd6,0x58,0xd8,0xc4,0xc2,0x51,0xb8,0x9a,0x4d,0x53,0x64,0x83,0x64,0x28,0x56,0x29,0x64,}, + {0xd2,0xe0,0x8b,0x24,0x1e,0xcd,0x44,0xc6,0xe1,0x70,0xdb,0x83,0xc2,0xc3,0xf3,0x6b,0x71,0x34,0xab,0x82,0x22,0x2f,0x6e,0x89,0x24,0xdd,0xa0,0x60,0xde,0x7c,0x74,0xa6,0xdd,}, + {0xd3,0xdd,0x9a,0x20,0x94,0xd6,0x21,0x69,0x2b,0xad,0xb4,0x94,0xee,0x60,0xcd,0xce,0x2e,0x87,0x5b,0x58,0x40,0x77,0x63,0x6e,0x49,0x23,0x50,0x20,0x36,0xdb,0x92,0x49,0x24,}, + {0xd0,0x9b,0x9a,0xe1,0x5a,0xca,0x20,0x47,0x23,0x71,0xb6,0xdc,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x9b,0x9a,0xe1,0x5a,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x60,0xa2,0xe1,0x5a,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x8e,0x49,0x24,}, +}; +static const gsm_frame gsm_data_units[] = { + {0xdb,0xe4,0xd2,0x14,0xd2,0x50,0x02,0x36,0xdb,0x69,0xa0,0xa2,0x52,0xc1,0x97,0x52,0x50,0x2a,0xa6,0x7a,0xa2,0x34,0x78,0x78,0x58,0x6c,0x6f,0x01,0xd9,0x28,0xbc,0xeb,0xdf,}, + {0xda,0xa4,0xe3,0xaa,0x23,0x63,0x02,0x6c,0x6b,0xe7,0x09,0x53,0x97,0xa7,0x49,0x1b,0xa8,0xd5,0x18,0x53,0x29,0xce,0xa3,0x96,0x67,0x68,0x53,0x28,0xcd,0xcc,0x72,0x63,0x61,}, + {0xd8,0xec,0xe4,0x71,0xe2,0x52,0x89,0x2f,0xd9,0x95,0xd3,0x86,0x91,0x6a,0x4b,0x15,0x6f,0xd5,0x98,0x98,0xeb,0x3b,0xad,0x71,0xbe,0xf1,0x7e,0xcb,0xcc,0xe2,0xf2,0x9d,0x99,}, + {0xd9,0xab,0xeb,0xaa,0x2c,0x64,0x8d,0x38,0xf4,0x52,0x2b,0x0f,0x53,0x4c,0x3d,0x1b,0xb9,0xba,0x7c,0x6d,0xcd,0xad,0x53,0xca,0x8d,0x60,0x68,0x8d,0x33,0xd4,0x76,0x44,0xf4,}, + {0xd9,0x2c,0xdb,0xe5,0xab,0xc6,0xca,0x8f,0x46,0x4c,0x89,0x25,0xab,0xcf,0xbb,0x1c,0x6e,0x70,0x9d,0x50,0xcf,0x59,0x1c,0x75,0xf2,0xe5,0x60,0xec,0xc7,0x25,0x76,0xf6,0xe7,}, + {0xd9,0xa9,0xd3,0xe5,0x2a,0xda,0xca,0x2e,0xe6,0xb7,0x27,0x17,0xb7,0x4c,0x58,0xaa,0x95,0x47,0x02,0xad,0x4f,0x3c,0x8b,0x69,0xc6,0x9f,0x94,0xcd,0xa4,0xda,0x4d,0x38,0x9f,}, + {0xdb,0x21,0xd2,0x05,0x12,0xbe,0xac,0x84,0xe1,0x6a,0x38,0xd1,0xea,0x4b,0xc1,0x27,0x8d,0xdb,0x24,0x58,0x04,0x6b,0xbd,0xb2,0xdd,0x6d,0x84,0x41,0xfd,0xfe,0xb6,0xdd,0x74,}, + {0xda,0x8f,0x71,0xcd,0x52,0xde,0x40,0xc9,0xec,0x4a,0x27,0x20,0xf0,0x00,0xe2,0x94,0x31,0xc6,0xda,0xe4,0x40,0xba,0xd0,0xae,0x43,0x1c,0xee,0x00,0xd6,0x65,0x52,0x38,0xab,}, + {0xdb,0x1f,0xbb,0x2d,0x61,0x90,0x80,0xbc,0xe4,0x92,0xcb,0x25,0x8e,0xc2,0xc9,0x1b,0x48,0x92,0x00,0x52,0xa2,0x80,0x00,0x04,0x12,0x91,0xe5,0xd1,0xb6,0xdb,0x6e,0x59,0x3b,}, + {0xd7,0xdc,0xa9,0x51,0x5a,0x50,0x74,0x3b,0xdb,0x8e,0xb8,0xe4,0x50,0x4a,0x41,0xc3,0xb5,0x27,0x2d,0xce,0x29,0x36,0xcd,0x65,0x16,0x22,0xc8,0xcf,0x37,0x24,0x6d,0x20,0x43,}, + {0xd2,0x65,0xe2,0x6a,0x2a,0x58,0xcd,0xcd,0xb5,0xb1,0xa4,0x80,0xa6,0xeb,0x86,0xe2,0xd3,0xa8,0x59,0xa2,0xaa,0x70,0xc2,0x5b,0xd3,0x01,0x50,0xcb,0xc8,0xe3,0xbb,0xb4,0xc3,}, + {0xd2,0x2d,0xcb,0x24,0xda,0x9e,0xaa,0x49,0x2b,0x93,0xd8,0xc1,0xee,0xe8,0xbf,0x6b,0x5a,0xc7,0x90,0xa8,0xab,0x3e,0xd6,0x8a,0x56,0xe4,0x52,0xa4,0x13,0xa9,0xdc,0x7a,0xe2,}, + {0xd1,0x29,0xdb,0xe9,0x61,0x98,0x23,0x91,0x1b,0x76,0x5b,0x1b,0xae,0x61,0x15,0x63,0xbe,0xcd,0x09,0xe6,0x41,0x34,0x4b,0x8e,0x69,0xb4,0xea,0x60,0xc4,0x5b,0x8a,0x49,0x35,}, + {0xd2,0xd8,0xcb,0xed,0xa3,0xc0,0x80,0xb6,0x92,0x73,0x5b,0x63,0xaa,0xc0,0xe8,0xe3,0x8e,0x3a,0xe5,0xa8,0xa0,0x55,0x63,0xb9,0x57,0x56,0xdc,0xa0,0xe9,0x23,0x8e,0x36,0xe5,}, + {0xd6,0xd7,0x6a,0x99,0x98,0x5c,0xc0,0x47,0x1c,0x4b,0x15,0x5b,0xbe,0x80,0x1d,0xac,0x40,0x8c,0xd7,0xb0,0xc0,0x2b,0x35,0x9b,0x3b,0x9c,0x90,0xa0,0xc4,0xb5,0xb1,0xca,0xdc,}, + {0xd6,0xe9,0xc1,0x95,0x92,0x67,0x60,0xc9,0x6e,0xd6,0x3b,0xad,0x6d,0xd1,0x49,0x24,0x92,0x49,0x3c,0x52,0x90,0x50,0xd4,0x9b,0x91,0x1a,0x5a,0x48,0x04,0x22,0x65,0x17,0x51,}, + {0xd2,0xde,0xb3,0x21,0xab,0xaa,0x46,0x00,0x4b,0x51,0x2d,0x9b,0xee,0x28,0x26,0x84,0x76,0xfb,0x74,0xc1,0xb2,0x36,0xd3,0xe9,0xcb,0x23,0x64,0xec,0xc2,0x49,0xbd,0xad,0x2d,}, + {0xd1,0x69,0xcb,0x65,0xa4,0xaa,0xad,0xd8,0xd5,0x12,0x3b,0x15,0x50,0xea,0x4c,0x93,0x12,0xba,0xdd,0xa8,0xa8,0x49,0xa2,0x24,0x5a,0xaa,0x57,0x67,0x49,0x69,0x84,0x65,0x2d,}, + {0xd1,0x2b,0xc3,0x65,0xa3,0x53,0x88,0x87,0x23,0xad,0xc7,0x2b,0x59,0x28,0x8d,0x64,0x89,0xa4,0xe4,0xad,0x08,0x68,0xab,0x95,0xa8,0xc7,0x55,0x67,0x3a,0xad,0x96,0xa6,0x47,}, + {0xd0,0xed,0xb3,0x69,0xa4,0xab,0x64,0xb9,0x0c,0xcf,0x46,0x50,0xab,0x26,0xf6,0xe3,0x35,0xca,0x63,0x57,0x82,0x99,0x2b,0x82,0xca,0xf9,0x57,0x04,0x23,0xe4,0x91,0x57,0x30,}, + {0xd2,0xd9,0x95,0x79,0x14,0xab,0xc9,0x14,0xbb,0x95,0x5d,0x6c,0x57,0x8a,0xa8,0x4f,0x0e,0x47,0xd5,0x57,0xe8,0x99,0x26,0x4a,0x2e,0x30,0x5b,0x2a,0xc6,0xd2,0x3e,0x19,0x1f,}, + {0xd2,0x63,0x8c,0xa9,0xe1,0x57,0x88,0xf5,0x15,0x66,0x99,0x6b,0x55,0x89,0x72,0xf4,0x5d,0x0e,0xe5,0x57,0xc6,0xda,0xce,0x63,0xb3,0xca,0x57,0x6d,0xca,0xe4,0x51,0x9e,0x9b,}, + {0xd2,0x2b,0xca,0xa5,0x5a,0x54,0x89,0x74,0xaf,0xa5,0xa0,0xee,0xac,0x4a,0x5a,0x9e,0xa9,0x32,0x2e,0xac,0xc8,0xcb,0x92,0xf1,0x26,0x15,0x57,0x28,0xb7,0x63,0x76,0xb6,0xe0,}, + {0xd2,0x2d,0xca,0x5d,0x23,0xad,0x63,0xf7,0x2c,0x5b,0xc4,0xd0,0x57,0x24,0x5e,0xa5,0x8e,0xea,0x8b,0xab,0x03,0x93,0xa4,0x92,0xc9,0xe1,0xab,0x63,0x91,0x34,0x76,0x39,0xea,}, + {0xd1,0xb6,0x98,0x6a,0xab,0xaf,0x25,0xc6,0x7d,0x4d,0xb9,0xaa,0xaa,0x82,0x22,0xd7,0x69,0x97,0x3e,0xa8,0xe2,0x41,0x05,0x8e,0x19,0x2d,0xad,0x22,0x34,0xa0,0x71,0xc6,0xe5,}, + {0xd1,0xb4,0xc1,0x59,0xab,0xab,0x23,0x5d,0x13,0x42,0xc7,0x23,0x57,0xc1,0xd6,0xd5,0x43,0x55,0x6c,0x57,0xc0,0xa3,0xc3,0xa7,0x53,0x1d,0xad,0x63,0x39,0x6c,0x34,0x3a,0xe5,}, + {0xd2,0x2c,0xca,0xe1,0x23,0xaf,0xa4,0xc8,0xed,0x69,0x40,0xec,0x57,0xc4,0x2f,0x1d,0xb1,0x44,0x24,0x57,0xe2,0xad,0x14,0xad,0x48,0x36,0x57,0x45,0x47,0x63,0x9a,0xb5,0x41,}, + {0xd2,0x2c,0xca,0x9d,0xa3,0xa9,0x24,0x2c,0x9e,0xa6,0x7e,0xde,0x57,0xa4,0xa3,0x1b,0x8a,0x1e,0xba,0x55,0x27,0xa1,0xd4,0xc3,0x37,0xa4,0x55,0x25,0xb4,0x22,0xb2,0x49,0x6b,}, + {0xd1,0xed,0xc1,0x2a,0xea,0xab,0x66,0xc4,0xe9,0xa9,0xb9,0xd3,0xa4,0xa4,0x26,0x47,0xa6,0x1a,0xfe,0xa4,0xe5,0x36,0xc5,0x8d,0xd6,0xfd,0xa8,0xc3,0x65,0x00,0x85,0x88,0x2a,}, + {0xd0,0xea,0xeb,0x65,0xe9,0x5c,0xc2,0xae,0x9a,0xb1,0xc7,0x5d,0xb0,0x61,0x5d,0x32,0x92,0x69,0xa2,0xb2,0x00,0xcd,0x2c,0xb6,0x4a,0xf6,0xa6,0xa0,0xba,0xe4,0x96,0xe7,0x2b,}, + {0xd0,0xd6,0x8b,0x65,0x1a,0xde,0xa0,0x47,0x7f,0x72,0x15,0x86,0xd1,0x40,0x3a,0xcc,0x2a,0x34,0x21,0xd7,0x60,0x44,0x43,0x46,0x1b,0x21,0xdc,0x80,0x1c,0x5d,0x71,0x25,0x0d,}, + {0xda,0x67,0xdb,0x2d,0xa3,0xe9,0x41,0x49,0x25,0xb6,0xdd,0xb7,0x51,0x22,0xff,0xbf,0xdf,0xed,0x59,0xee,0xc4,0x39,0x1b,0x49,0x24,0x40,0xad,0xb0,0x37,0xd2,0x69,0xb8,0x9b,}, + {0xda,0xac,0xc4,0x2d,0x68,0x5b,0x4e,0xb1,0x01,0x50,0xa6,0x51,0x5b,0x30,0xc5,0x03,0x90,0xa6,0xa0,0x54,0xb0,0x60,0x55,0x81,0x8a,0xa2,0x96,0xf0,0x08,0x92,0x4e,0xa8,0xd2,}, + {0xda,0xe8,0xd3,0x29,0x62,0xbe,0xf0,0xb7,0x05,0x69,0xb6,0xda,0xd1,0x2e,0x99,0x30,0x6a,0xda,0x22,0xba,0xef,0xd4,0xa8,0x55,0x94,0xf3,0xe6,0x8e,0xc2,0xb3,0x56,0x07,0xe4,}, + {0xda,0x26,0xea,0xa9,0xab,0x80,0x8d,0xe8,0x9e,0x1e,0x85,0x1d,0xce,0xac,0xc7,0x20,0xcf,0x26,0xe2,0xc0,0x8c,0xc8,0xd3,0x75,0x30,0xac,0x60,0xc9,0x16,0xe5,0xb9,0xba,0x45,}, + {0xd5,0x20,0x79,0x6e,0xa8,0x96,0xe8,0x7d,0x5f,0xb6,0xd2,0xe5,0x5a,0xa5,0x39,0x8d,0x51,0x71,0x99,0xe7,0xd1,0x49,0x24,0x92,0x28,0x87,0x56,0xce,0xb5,0x6c,0xb6,0xb8,0x20,}, + {0xd5,0x5e,0xaa,0xf1,0xe0,0x55,0x52,0xe6,0xe3,0x92,0x48,0xa0,0x55,0x2c,0xf3,0xbb,0x92,0x5d,0x29,0x57,0x2d,0x0e,0xdc,0x92,0x4b,0x58,0xab,0xb4,0x29,0x1a,0x72,0x29,0xd3,}, + {0xd5,0x26,0xaa,0xab,0x18,0x55,0x36,0x42,0x79,0x75,0xb7,0x5d,0x53,0x30,0xa0,0x06,0x8a,0xca,0xbc,0xa8,0xd4,0x34,0x15,0x72,0x48,0xfc,0xab,0x31,0x56,0x8b,0xe6,0xca,0xe5,}, + {0xd4,0x68,0xcb,0x22,0x98,0x57,0x2f,0x59,0x10,0x1c,0xc8,0xe3,0x53,0x10,0xf5,0x9b,0x0a,0x48,0xed,0xad,0x4d,0xde,0xe8,0x43,0x29,0x65,0xad,0x30,0x4d,0x2b,0x41,0x77,0x5c,}, + {0xd3,0xe0,0xdc,0xc2,0xaa,0x55,0x2a,0xad,0xf6,0x38,0xb4,0xc4,0xa8,0xed,0x39,0x95,0x54,0x4e,0x93,0xa9,0x4a,0xd7,0x4a,0x53,0x19,0xd5,0xa9,0xab,0x9b,0x2a,0xaa,0xca,0x1b,}, + {0xd3,0x27,0xca,0x16,0xa3,0x55,0xcc,0xc7,0x15,0xaa,0xba,0x97,0x55,0x2b,0x88,0xe4,0x96,0x34,0xcb,0xad,0x2b,0xa5,0x62,0xbe,0x34,0x81,0xab,0x4f,0x47,0x23,0x77,0x28,0xd8,}, + {0xd3,0xe3,0xea,0x5e,0x60,0x55,0xf0,0x72,0xd5,0x8d,0xcb,0x12,0x55,0xcc,0x19,0x3c,0x72,0x3e,0xb2,0x57,0xad,0x0d,0x4e,0x51,0xe4,0xa4,0x57,0xce,0x55,0x17,0x35,0x47,0x8d,}, + {0xd2,0xa8,0xba,0xe6,0xd1,0x53,0x4c,0xb0,0x5a,0x75,0xa7,0x8c,0xa4,0xec,0xa4,0x57,0x19,0xc5,0x74,0xaa,0xab,0x53,0x02,0xcb,0x48,0xee,0xaa,0xc9,0x73,0x00,0x31,0xd9,0x3f,}, + {0xd3,0x5c,0x82,0x6e,0x6a,0xac,0xeb,0x41,0x10,0x27,0x57,0x66,0xf0,0x8c,0xde,0xcd,0x48,0x8b,0x23,0x5f,0x0b,0x2d,0x13,0x7c,0x3e,0x66,0xb8,0xc9,0x65,0xd0,0x9c,0xb7,0x16,}, + {0xd8,0xa4,0x71,0x10,0x63,0xbf,0xac,0xb9,0x26,0x81,0x22,0x99,0x54,0xcf,0x4b,0xb7,0x98,0x61,0x0a,0x52,0xcf,0x41,0x1c,0xbb,0x28,0x9b,0x58,0xcc,0xc6,0xde,0x7d,0xd8,0x1a,}, + {0xd9,0xe9,0x88,0xe0,0x98,0xb8,0xae,0x31,0xcc,0xb2,0xdc,0x62,0xaf,0x2f,0x87,0x53,0xae,0x39,0x63,0x54,0xcd,0x60,0x6b,0x55,0xc8,0xb4,0xbc,0xa9,0xce,0x4c,0x29,0x68,0x4f,}, + {0xd7,0x5f,0x59,0x59,0x6b,0xc2,0x8d,0x3a,0x7a,0xae,0x45,0x0d,0xc7,0x2a,0x2b,0x28,0x91,0x8e,0xd5,0xac,0xeb,0xaa,0xb4,0xb2,0xa2,0x90,0x51,0x2c,0xc6,0xe7,0xde,0xa4,0xd9,}, + {0xd3,0x1c,0x84,0xbe,0xa0,0x62,0xae,0x91,0x6d,0xd1,0xcb,0x6a,0x58,0xb0,0x34,0xba,0x4d,0xbb,0xa4,0x5b,0x89,0x29,0x6b,0xf5,0xd5,0x27,0x59,0x2b,0xa4,0xa3,0x3c,0x55,0x2b,}, + {0xd4,0x55,0x9b,0xfd,0x99,0x61,0x4e,0xc5,0x24,0x45,0xae,0x2d,0xbf,0x2b,0xaf,0x54,0xb4,0x80,0x76,0x60,0xeb,0x56,0xfd,0xd5,0xc0,0x00,0x5f,0x8b,0x0e,0x95,0x47,0x55,0x4a,}, + {0xd4,0x14,0xac,0xfd,0x51,0x5b,0x27,0x81,0xd9,0xf1,0xe5,0xae,0xba,0xca,0x00,0x47,0x6b,0x37,0xe4,0xbf,0x47,0xd5,0x08,0x1c,0x5b,0x96,0xbd,0x08,0xe7,0x65,0xa5,0x10,0xf3,}, + {0xd3,0xcf,0xcd,0xf0,0xe2,0x5f,0x06,0x66,0x7c,0xb2,0x25,0x0f,0xbf,0x07,0x78,0x53,0x3a,0x46,0x64,0xbe,0x88,0x1f,0x63,0x6a,0x6b,0x24,0x5f,0x45,0x96,0xa4,0x7a,0x0b,0xe4,}, + {0xd4,0x4e,0xd5,0x6c,0xe3,0xbd,0x24,0x74,0xda,0x56,0x5f,0x0e,0xbd,0x46,0x3b,0x42,0x89,0x57,0x25,0xbf,0x26,0xd8,0xad,0x46,0x23,0xe5,0xbf,0xed,0xb9,0x1c,0x91,0xb6,0xe7,}, + {0xd4,0xd8,0x7b,0xfe,0x19,0x69,0xcc,0x55,0x1b,0x96,0x48,0xc2,0x5f,0x2d,0x91,0x94,0x8e,0x58,0xed,0x63,0xc9,0xa4,0xcc,0xec,0xc8,0xa7,0x61,0xcf,0x44,0xdc,0x93,0xa5,0x23,}, + {0xd5,0x9c,0x74,0x71,0xa0,0x5f,0xad,0x29,0x1c,0x90,0x96,0x36,0x5f,0xb0,0x36,0xe5,0x8d,0xc8,0x4f,0x5b,0x0e,0xb1,0x6c,0x6a,0xe9,0x64,0x61,0x33,0xbe,0x5d,0x75,0xac,0xa3,}, + {0xd4,0xea,0xcb,0x0e,0x18,0x60,0xd0,0x98,0x2d,0x1d,0x39,0x25,0xbe,0xcd,0xc6,0x59,0x5d,0xc9,0x16,0xf0,0xaf,0x55,0xaa,0x44,0x1e,0xdd,0xbf,0xaa,0xc3,0x1b,0xab,0xa4,0x87,}, + {0xd4,0xe8,0xd3,0x0e,0x58,0x5f,0x2a,0x3b,0xd3,0xd5,0xd8,0x11,0xbb,0xe8,0x85,0x79,0xd0,0xcb,0x30,0x5f,0xc8,0x96,0x97,0x56,0x2c,0xa6,0x5f,0xe7,0xed,0x61,0xae,0x29,0x87,}, + {0xd4,0xe8,0xc2,0x8d,0xd8,0xbf,0x2a,0x39,0x11,0x67,0xb7,0x63,0xbf,0x69,0x3c,0xd9,0x28,0xbf,0x1c,0xbf,0x28,0x63,0x9a,0xb4,0x46,0x04,0xbd,0x69,0x2b,0xa5,0x8b,0x3a,0xb0,}, + {0xd3,0xa8,0xb9,0xd5,0x89,0xbf,0x49,0x18,0xeb,0xf5,0x57,0x06,0x60,0x89,0x14,0x1f,0x5b,0x3b,0x2b,0xc0,0xaa,0x26,0x68,0x79,0xbd,0x1d,0xc6,0x8a,0xd6,0xe2,0x70,0x38,0xe5,}, + {0xd2,0xe1,0xa9,0xd9,0xe3,0xb4,0xc7,0xeb,0x2b,0x90,0x41,0x1b,0xb8,0xa4,0xa9,0x8b,0xea,0xb5,0x91,0x8c,0xc8,0x38,0xbd,0x7a,0x39,0x0b,0xcc,0xa5,0xb1,0xb8,0x99,0x47,0x22,}, + {0xd5,0x64,0xb0,0x65,0x52,0xbe,0xa3,0xb5,0x08,0xf0,0xf7,0x5c,0xcc,0xc2,0xb0,0xc0,0x22,0xec,0x7b,0xd9,0x05,0x58,0x9b,0x69,0x41,0x6a,0xbe,0xc2,0xc1,0x59,0x71,0xae,0x57,}, + {0xd5,0x60,0xda,0xa8,0x12,0x6e,0xa2,0x31,0xe1,0x6d,0x3a,0x93,0xc6,0x21,0x8a,0x6a,0x71,0xb7,0x1b,0xbc,0x00,0x37,0xaa,0xb9,0x4d,0x2d,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0x5d,0x9a,0x29,0x5a,0x74,0x00,0x49,0x24,0x71,0xc8,0xdb,0x80,0x40,0x38,0xdc,0x6d,0xc9,0x23,0xa0,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x39,0x24,0x92,0x49,0x24,}, + {0xd0,0x5e,0x7b,0xe1,0x9a,0xa6,0x00,0x47,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0xb2,0x00,0x49,0x23,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,}, + {0xd0,0xd9,0x92,0xa1,0x1a,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x50,0x00,0x49,0x24,0x92,0x49,0x24,0x54,0x00,0x49,0x24,0x92,0x49,0x24,}, +}; +const SayedTexts sayed_texts = { + .nula = { gsm_data_nula, 22 }, + .jedna = { gsm_data_jedna, 25 }, + .dva = { gsm_data_dva, 22 }, + .dve = { gsm_data_dve, 26 }, + .tri = { gsm_data_tri, 20 }, + .ctyri = { gsm_data_ctyri, 27 }, + .pet = { gsm_data_pet, 19 }, + .sest = { gsm_data_sest, 26 }, + .sedm = { gsm_data_sedm, 23 }, + .osm = { gsm_data_osm, 17 }, + .devet = { gsm_data_devet, 27 }, + .deset = { gsm_data_deset, 27 }, + .jedenact = { gsm_data_jedenact, 37 }, + .dvanact = { gsm_data_dvanact, 36 }, + .trinact = { gsm_data_trinact, 36 }, + .ctrnact = { gsm_data_ctrnact, 37 }, + .patnact = { gsm_data_patnact, 34 }, + .sestnact = { gsm_data_sestnact, 47 }, + .sedmnact = { gsm_data_sedmnact, 44 }, + .osmnact = { gsm_data_osmnact, 38 }, + .devatenact = { gsm_data_devatenact, 43 }, + .dvacet = { gsm_data_dvacet, 31 }, + .tricet = { gsm_data_tricet, 29 }, + .ctyricet = { gsm_data_ctyricet, 35 }, + .padesat = { gsm_data_padesat, 34 }, + .sedesat = { gsm_data_sedesat, 40 }, + .sedmdesat = { gsm_data_sedmdesat, 45 }, + .osmdesat = { gsm_data_osmdesat, 39 }, + .devadesat = { gsm_data_devadesat, 41 }, + .sto = { gsm_data_sto, 22 }, + .dveste = { gsm_data_dveste, 38 }, + .sta = { gsm_data_sta, 21 }, + .set = { gsm_data_set, 21 }, + .tisic = { gsm_data_tisic, 31 }, + .tisice = { gsm_data_tisice, 39 }, + .minus = { gsm_data_minus, 29 }, + .point = { gsm_data_point, 29 }, + .hafo = { gsm_data_hafo, 26 }, + .units = { gsm_data_units, 64 }, +}; diff --git a/V203/gsm/gsmdata.h b/V203/gsm/gsmdata.h new file mode 100644 index 0000000..2cc23ba --- /dev/null +++ b/V203/gsm/gsmdata.h @@ -0,0 +1,62 @@ +/* GENERATED FILE DO NOT EDIT !!! */ +#ifndef _GSM_DATA_H +#define _GSM_DATA_H +#include "gsm.h" +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus +typedef struct gsm_data_s { +#ifdef EXTROM + unsigned long frames; +#else + const gsm_frame * frames; +#endif + int no_frames; +} text_p; +typedef struct SayedTexts_s { + text_p nula; + text_p jedna; + text_p dva; + text_p dve; + text_p tri; + text_p ctyri; + text_p pet; + text_p sest; + text_p sedm; + text_p osm; + text_p devet; + text_p deset; + text_p jedenact; + text_p dvanact; + text_p trinact; + text_p ctrnact; + text_p patnact; + text_p sestnact; + text_p sedmnact; + text_p osmnact; + text_p devatenact; + text_p dvacet; + text_p tricet; + text_p ctyricet; + text_p padesat; + text_p sedesat; + text_p sedmdesat; + text_p osmdesat; + text_p devadesat; + text_p sto; + text_p dveste; + text_p sta; + text_p set; + text_p tisic; + text_p tisice; + text_p minus; + text_p point; + text_p hafo; + text_p units; + +} SayedTexts; +extern const SayedTexts sayed_texts; +#ifdef __cplusplus +}; +#endif // __cplusplus +#endif // _GSM_DATA_H diff --git a/V203/gsm/lib/gsm/inc/config.h b/V203/gsm/lib/gsm/inc/config.h new file mode 100644 index 0000000..ef8062a --- /dev/null +++ b/V203/gsm/lib/gsm/inc/config.h @@ -0,0 +1,39 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/*$Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/config.h,v 1.5 1996/07/02 11:26:20 jutta Exp $*/ + +#ifndef CONFIG_H +#define CONFIG_H + +/*efine SIGHANDLER_T int /* signal handlers are void */ +/*efine HAS_SYSV_SIGNAL 1 /* sigs not blocked/reset? */ + +#define HAS_STDLIB_H 1 /* /usr/include/stdlib.h */ +#define HAS_LIMITS_H 1 /* /usr/include/limits.h */ +#define HAS_FCNTL_H 1 /* /usr/include/fcntl.h */ +#define HAS_ERRNO_DECL 1 /* errno.h declares errno */ + +#define HAS_FSTAT 1 /* fstat syscall */ +#define HAS_FCHMOD 1 /* fchmod syscall */ +#define HAS_CHMOD 1 /* chmod syscall */ +#define HAS_FCHOWN 1 /* fchown syscall */ +#define HAS_CHOWN 1 /* chown syscall */ +/*efine HAS__FSETMODE 1 /* _fsetmode -- set file mode */ + +#define HAS_STRING_H 1 /* /usr/include/string.h */ +/*efine HAS_STRINGS_H 1 /* /usr/include/strings.h */ + +#define HAS_UNISTD_H 1 /* /usr/include/unistd.h */ +#define HAS_UTIME 1 /* POSIX utime(path, times) */ +/*efine HAS_UTIMES 1 /* use utimes() syscall instead */ +#define HAS_UTIME_H 1 /* UTIME header file */ +#define HAS_UTIMBUF 1 /* struct utimbuf */ +/*efine HAS_UTIMEUSEC 1 /* microseconds in utimbuf? */ + +#define assert(par) + +#endif /* CONFIG_H */ diff --git a/V203/gsm/lib/gsm/inc/gsm.h b/V203/gsm/lib/gsm/inc/gsm.h new file mode 100644 index 0000000..1ddaec3 --- /dev/null +++ b/V203/gsm/lib/gsm/inc/gsm.h @@ -0,0 +1,100 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/*$Header: /home/kbs/jutta/src/gsm/gsm-1.0/inc/RCS/gsm.h,v 1.11 1996/07/05 18:02:56 jutta Exp $*/ + +#ifndef GSM_H +#define GSM_H + +#ifdef __cplusplus +# define NeedFunctionPrototypes 1 +#endif + +#if __STDC__ +# define NeedFunctionPrototypes 1 +#endif + +#ifdef _NO_PROTO +# undef NeedFunctionPrototypes +#endif + +#ifdef NeedFunctionPrototypes +# include /* for FILE * */ +#endif + +#undef GSM_P +#if NeedFunctionPrototypes +# define GSM_P( protos ) protos +#else +# define GSM_P( protos ) ( /* protos */ ) +#endif + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus +/* + * Interface + */ + +typedef struct gsm_state * gsm; +typedef short gsm_signal; /* signed 16 bit */ +typedef unsigned char gsm_byte; +typedef gsm_byte gsm_frame[33]; /* 33 * 8 bits */ + +#define GSM_MAGIC 0xD /* 13 kbit/s RPE-LTP */ + +#define GSM_PATCHLEVEL 16 +#define GSM_MINOR 0 +#define GSM_MAJOR 1 + +#define GSM_OPT_VERBOSE 1 +#define GSM_OPT_FAST 2 +#define GSM_OPT_LTP_CUT 3 +#define GSM_OPT_WAV49 4 +#define GSM_OPT_FRAME_INDEX 5 +#define GSM_OPT_FRAME_CHAIN 6 + +extern gsm gsm_create GSM_P((void)); +extern void gsm_destroy GSM_P((gsm)); + +extern int gsm_print GSM_P((FILE *, gsm, gsm_byte *)); +extern int gsm_option GSM_P((gsm, int, int *)); + +extern void gsm_encode GSM_P((gsm, gsm_signal *, gsm_byte *)); +extern int gsm_decode GSM_P((gsm, gsm_byte *, gsm_signal *)); + +extern int gsm_explode GSM_P((gsm, gsm_byte *, gsm_signal *)); +extern void gsm_implode GSM_P((gsm, gsm_signal *, gsm_byte *)); + +#undef GSM_P + +#ifdef __cplusplus +}; +#include +extern "C" { + #include "private.h" +}; +class GsmStatic { +public: + GsmStatic () { + memset(&gst, 0, sizeof(gst)); + gst.nrp = 40; + } + void encode (gsm_signal * a, gsm_byte * b) { + gsm_encode (&gst, a, b); + } + int decode (gsm_byte * a, gsm_signal * b) { + return gsm_decode (&gst, a, b); + } + int option (int i, int * j) { + return gsm_option (&gst, i, j); + } +private: + struct gsm_state gst; +}; +#endif //__cplusplus + +#endif /* GSM_H */ diff --git a/V203/gsm/lib/gsm/inc/private.h b/V203/gsm/lib/gsm/inc/private.h new file mode 100644 index 0000000..0c94255 --- /dev/null +++ b/V203/gsm/lib/gsm/inc/private.h @@ -0,0 +1,269 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/*$Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/private.h,v 1.6 1996/07/02 10:15:26 jutta Exp $*/ + +#ifndef PRIVATE_H +#define PRIVATE_H + +typedef short word; /* 16 bit signed int */ +typedef long longword; /* 32 bit signed int */ + +typedef unsigned short uword; /* unsigned word */ +typedef unsigned long ulongword; /* unsigned longword */ + +struct gsm_state { + + word dp0[ 280 ]; + word e[ 50 ]; /* code.c */ + + word z1; /* preprocessing.c, Offset_com. */ + longword L_z2; /* Offset_com. */ + int mp; /* Preemphasis */ + + word u[8]; /* short_term_aly_filter.c */ + word LARpp[2][8]; /* */ + word j; /* */ + + word ltp_cut; /* long_term.c, LTP crosscorr. */ + word nrp; /* 40 */ /* long_term.c, synthesis */ + word v[9]; /* short_term.c, synthesis */ + word msr; /* decoder.c, Postprocessing */ + + char verbose; /* only used if !NDEBUG */ + char fast; /* only used if FAST */ + + char wav_fmt; /* only used if WAV49 defined */ + unsigned char frame_index; /* odd/even chaining */ + unsigned char frame_chain; /* half-byte to carry forward */ +}; + + +#define MIN_WORD (-32767 - 1) +#define MAX_WORD 32767 + +#define MIN_LONGWORD (-2147483647 - 1) +#define MAX_LONGWORD 2147483647 + +#ifdef SASR /* flag: >> is a signed arithmetic shift right */ +#undef SASR +#define SASR(x, by) ((x) >> (by)) +#else +#define SASR(x, by) ((x) >= 0 ? (x) >> (by) : (~(-((x) + 1) >> (by)))) +#endif /* SASR */ + +#include "proto.h" + +/* + * Prototypes from add.c + */ +extern word gsm_mult P((word a, word b)); +extern longword gsm_L_mult P((word a, word b)); +extern word gsm_mult_r P((word a, word b)); + +extern word gsm_div P((word num, word denum)); + +extern word gsm_add P(( word a, word b )); +extern longword gsm_L_add P(( longword a, longword b )); + +extern word gsm_sub P((word a, word b)); +extern longword gsm_L_sub P((longword a, longword b)); + +extern word gsm_abs P((word a)); + +extern word gsm_norm P(( longword a )); + +extern longword gsm_L_asl P((longword a, int n)); +extern word gsm_asl P((word a, int n)); + +extern longword gsm_L_asr P((longword a, int n)); +extern word gsm_asr P((word a, int n)); + +/* + * Inlined functions from add.h + */ + +/* + * #define GSM_MULT_R(a, b) (* word a, word b, !(a == b == MIN_WORD) *) \ + * (0x0FFFF & SASR(((longword)(a) * (longword)(b) + 16384), 15)) + */ +#define GSM_MULT_R(a, b) /* word a, word b, !(a == b == MIN_WORD) */ \ + (SASR( ((longword)(a) * (longword)(b) + 16384), 15 )) + +# define GSM_MULT(a,b) /* word a, word b, !(a == b == MIN_WORD) */ \ + (SASR( ((longword)(a) * (longword)(b)), 15 )) + +# define GSM_L_MULT(a, b) /* word a, word b */ \ + (((longword)(a) * (longword)(b)) << 1) + +# define GSM_L_ADD(a, b) \ + ( (a) < 0 ? ( (b) >= 0 ? (a) + (b) \ + : (utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1)) \ + >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)utmp-2 ) \ + : ((b) <= 0 ? (a) + (b) \ + : (utmp = (ulongword)(a) + (ulongword)(b)) >= MAX_LONGWORD \ + ? MAX_LONGWORD : utmp)) + +/* + * # define GSM_ADD(a, b) \ + * ((ltmp = (longword)(a) + (longword)(b)) >= MAX_WORD \ + * ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp) + */ +/* Nonportable, but faster: */ + +#define GSM_ADD(a, b) \ + ((ulongword)((ltmp = (longword)(a) + (longword)(b)) - MIN_WORD) > \ + MAX_WORD - MIN_WORD ? (ltmp > 0 ? MAX_WORD : MIN_WORD) : ltmp) + +# define GSM_SUB(a, b) \ + ((ltmp = (longword)(a) - (longword)(b)) >= MAX_WORD \ + ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp) + +# define GSM_ABS(a) ((a) < 0 ? ((a) == MIN_WORD ? MAX_WORD : -(a)) : (a)) + +/* Use these if necessary: + +# define GSM_MULT_R(a, b) gsm_mult_r(a, b) +# define GSM_MULT(a, b) gsm_mult(a, b) +# define GSM_L_MULT(a, b) gsm_L_mult(a, b) + +# define GSM_L_ADD(a, b) gsm_L_add(a, b) +# define GSM_ADD(a, b) gsm_add(a, b) +# define GSM_SUB(a, b) gsm_sub(a, b) + +# define GSM_ABS(a) gsm_abs(a) + +*/ + +/* + * More prototypes from implementations.. + */ +extern void Gsm_Coder P(( + struct gsm_state * S, + word * s, /* [0..159] samples IN */ + word * LARc, /* [0..7] LAR coefficients OUT */ + word * Nc, /* [0..3] LTP lag OUT */ + word * bc, /* [0..3] coded LTP gain OUT */ + word * Mc, /* [0..3] RPE grid selection OUT */ + word * xmaxc,/* [0..3] Coded maximum amplitude OUT */ + word * xMc /* [13*4] normalized RPE samples OUT */)); + +extern void Gsm_Long_Term_Predictor P(( /* 4x for 160 samples */ + struct gsm_state * S, + word * d, /* [0..39] residual signal IN */ + word * dp, /* [-120..-1] d' IN */ + word * e, /* [0..40] OUT */ + word * dpp, /* [0..40] OUT */ + word * Nc, /* correlation lag OUT */ + word * bc /* gain factor OUT */)); + +extern void Gsm_LPC_Analysis P(( + struct gsm_state * S, + word * s, /* 0..159 signals IN/OUT */ + word * LARc)); /* 0..7 LARc's OUT */ + +extern void Gsm_Preprocess P(( + struct gsm_state * S, + word * s, word * so)); + +extern void Gsm_Encoding P(( + struct gsm_state * S, + word * e, + word * ep, + word * xmaxc, + word * Mc, + word * xMc)); + +extern void Gsm_Short_Term_Analysis_Filter P(( + struct gsm_state * S, + word * LARc, /* coded log area ratio [0..7] IN */ + word * d /* st res. signal [0..159] IN/OUT */)); + +extern void Gsm_Decoder P(( + struct gsm_state * S, + word * LARcr, /* [0..7] IN */ + word * Ncr, /* [0..3] IN */ + word * bcr, /* [0..3] IN */ + word * Mcr, /* [0..3] IN */ + word * xmaxcr, /* [0..3] IN */ + word * xMcr, /* [0..13*4] IN */ + word * s)); /* [0..159] OUT */ + +extern void Gsm_Decoding P(( + struct gsm_state * S, + word xmaxcr, + word Mcr, + word * xMcr, /* [0..12] IN */ + word * erp)); /* [0..39] OUT */ + +extern void Gsm_Long_Term_Synthesis_Filtering P(( + struct gsm_state* S, + word Ncr, + word bcr, + word * erp, /* [0..39] IN */ + word * drp)); /* [-120..-1] IN, [0..40] OUT */ + +void Gsm_RPE_Decoding P(( + struct gsm_state *S, + word xmaxcr, + word Mcr, + word * xMcr, /* [0..12], 3 bits IN */ + word * erp)); /* [0..39] OUT */ + +void Gsm_RPE_Encoding P(( + struct gsm_state * S, + word * e, /* -5..-1][0..39][40..44 IN/OUT */ + word * xmaxc, /* OUT */ + word * Mc, /* OUT */ + word * xMc)); /* [0..12] OUT */ + +extern void Gsm_Short_Term_Synthesis_Filter P(( + struct gsm_state * S, + word * LARcr, /* log area ratios [0..7] IN */ + word * drp, /* received d [0...39] IN */ + word * s)); /* signal s [0..159] OUT */ + +extern void Gsm_Update_of_reconstructed_short_time_residual_signal P(( + word * dpp, /* [0...39] IN */ + word * ep, /* [0...39] IN */ + word * dp)); /* [-120...-1] IN/OUT */ + +/* + * Tables from table.c + */ +#ifndef GSM_TABLE_C + +extern word gsm_A[8], gsm_B[8], gsm_MIC[8], gsm_MAC[8]; +extern word gsm_INVA[8]; +extern word gsm_DLB[4], gsm_QLB[4]; +extern word gsm_H[11]; +extern word gsm_NRFAC[8]; +extern word gsm_FAC[8]; + +#endif /* GSM_TABLE_C */ + +/* + * Debugging + */ +#ifdef NDEBUG + +# define gsm_debug_words(a, b, c, d) /* nil */ +# define gsm_debug_longwords(a, b, c, d) /* nil */ +# define gsm_debug_word(a, b) /* nil */ +# define gsm_debug_longword(a, b) /* nil */ + +#else /* !NDEBUG => DEBUG */ + + extern void gsm_debug_words P((char * name, int, int, word *)); + extern void gsm_debug_longwords P((char * name, int, int, longword *)); + extern void gsm_debug_longword P((char * name, longword)); + extern void gsm_debug_word P((char * name, word)); + +#endif /* !NDEBUG */ + +#include "unproto.h" + +#endif /* PRIVATE_H */ diff --git a/V203/gsm/lib/gsm/inc/proto.h b/V203/gsm/lib/gsm/inc/proto.h new file mode 100644 index 0000000..2851c08 --- /dev/null +++ b/V203/gsm/lib/gsm/inc/proto.h @@ -0,0 +1,65 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/*$Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/proto.h,v 1.1 1992/10/28 00:11:08 jutta Exp $*/ + +#ifndef PROTO_H +#define PROTO_H + +#if __cplusplus +# define NeedFunctionPrototypes 1 +#endif + +#if __STDC__ +# define NeedFunctionPrototypes 1 +#endif + +#ifdef _NO_PROTO +# undef NeedFunctionPrototypes +#endif + +#undef P /* gnu stdio.h actually defines this... */ +#undef P0 +#undef P1 +#undef P2 +#undef P3 +#undef P4 +#undef P5 +#undef P6 +#undef P7 +#undef P8 + +#if NeedFunctionPrototypes + +# define P( protos ) protos + +# define P0() (void) +# define P1(x, a) (a) +# define P2(x, a, b) (a, b) +# define P3(x, a, b, c) (a, b, c) +# define P4(x, a, b, c, d) (a, b, c, d) +# define P5(x, a, b, c, d, e) (a, b, c, d, e) +# define P6(x, a, b, c, d, e, f) (a, b, c, d, e, f) +# define P7(x, a, b, c, d, e, f, g) (a, b, c, d, e, f, g) +# define P8(x, a, b, c, d, e, f, g, h) (a, b, c, d, e, f, g, h) + +#else /* !NeedFunctionPrototypes */ + +# define P( protos ) ( /* protos */ ) + +# define P0() () +# define P1(x, a) x a; +# define P2(x, a, b) x a; b; +# define P3(x, a, b, c) x a; b; c; +# define P4(x, a, b, c, d) x a; b; c; d; +# define P5(x, a, b, c, d, e) x a; b; c; d; e; +# define P6(x, a, b, c, d, e, f) x a; b; c; d; e; f; +# define P7(x, a, b, c, d, e, f, g) x a; b; c; d; e; f; g; +# define P8(x, a, b, c, d, e, f, g, h) x a; b; c; d; e; f; g; h; + +#endif /* !NeedFunctionPrototypes */ + +#endif /* PROTO_H */ diff --git a/V203/gsm/lib/gsm/inc/unproto.h b/V203/gsm/lib/gsm/inc/unproto.h new file mode 100644 index 0000000..eaf866f --- /dev/null +++ b/V203/gsm/lib/gsm/inc/unproto.h @@ -0,0 +1,23 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/*$Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/unproto.h,v 1.1 1992/10/28 00:11:08 jutta Exp $*/ + +#ifdef PROTO_H /* sic */ +#undef PROTO_H + +#undef P +#undef P0 +#undef P1 +#undef P2 +#undef P3 +#undef P4 +#undef P5 +#undef P6 +#undef P7 +#undef P8 + +#endif /* PROTO_H */ diff --git a/V203/gsm/lib/gsm/src/Makefile b/V203/gsm/lib/gsm/src/Makefile new file mode 100644 index 0000000..d840756 --- /dev/null +++ b/V203/gsm/lib/gsm/src/Makefile @@ -0,0 +1,42 @@ +FLAGS = -c -ggdb -Os +CPU ?= -march=rv32imac -mabi=ilp32 +CROSS = riscv64-unknown-elf- +FLAGS+= $(CPU) -I/usr/include/newlib +FLAGS+= -ffunction-sections -fdata-sections +FLAGS+= -mno-save-restore -fmessage-length=0 +FLAGS+= -I../inc +FLAGS+= -DNeedFunctionPrototypes=1 +FLAGS+= -DSASR +FLAGS+= -DWAV49 -DNDEBUG=1 +AS = $(CROSS)as +CC = $(CROSS)gcc +CC += $(FLAGS) +CXX = $(CROSS)g++ +CXX += $(FLAGS) -fno-exceptions -fno-rtti +AR = $(CROSS)ar + +CFILES = $(wildcard *.c) +CXFILES= $(wildcard *.cpp) + +OBJS = $(CFILES:%.c=%.o) +OBJS += $(CXFILES:%.cpp=%.o) + +DSTLIB = ../../libgsm.a + +%.o: %.S + $(AS) $< -o $@ +%.o: %.c + $(CC) $< -o $@ +%.o: %.cpp + $(CXX) $< -o $@ + +$(DSTLIB): $(OBJS) + $(AR) rcs $(DSTLIB) $(OBJS) + + +.PHONY: all clean + +all: $(DSTLIB) + +clean: + -rm -f *.o diff --git a/V203/gsm/lib/gsm/src/add.c b/V203/gsm/lib/gsm/src/add.c new file mode 100644 index 0000000..258a6fc --- /dev/null +++ b/V203/gsm/lib/gsm/src/add.c @@ -0,0 +1,235 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/add.c,v 1.6 1996/07/02 09:57:33 jutta Exp $ */ + +/* + * See private.h for the more commonly used macro versions. + */ + +#include +#include + +#include "private.h" +#include "gsm.h" +#include "proto.h" + +#define saturate(x) \ + ((x) < MIN_WORD ? MIN_WORD : (x) > MAX_WORD ? MAX_WORD: (x)) + +word gsm_add P2((a,b), word a, word b) +{ + longword sum = (longword)a + (longword)b; + return saturate(sum); +} + +word gsm_sub P2((a,b), word a, word b) +{ + longword diff = (longword)a - (longword)b; + return saturate(diff); +} + +word gsm_mult P2((a,b), word a, word b) +{ + if (a == MIN_WORD && b == MIN_WORD) return MAX_WORD; + else return SASR( (longword)a * (longword)b, 15 ); +} + +word gsm_mult_r P2((a,b), word a, word b) +{ + if (b == MIN_WORD && a == MIN_WORD) return MAX_WORD; + else { + longword prod = (longword)a * (longword)b + 16384; + prod >>= 15; + return prod & 0xFFFF; + } +} + +word gsm_abs P1((a), word a) +{ + return a < 0 ? (a == MIN_WORD ? MAX_WORD : -a) : a; +} + +longword gsm_L_mult P2((a,b),word a, word b) +{ + assert( a != MIN_WORD || b != MIN_WORD ); + return ((longword)a * (longword)b) << 1; +} + +longword gsm_L_add P2((a,b), longword a, longword b) +{ + if (a < 0) { + if (b >= 0) return a + b; + else { + ulongword A = (ulongword)-(a + 1) + (ulongword)-(b + 1); + return A >= MAX_LONGWORD ? MIN_LONGWORD :-(longword)A-2; + } + } + else if (b <= 0) return a + b; + else { + ulongword A = (ulongword)a + (ulongword)b; + return A > MAX_LONGWORD ? MAX_LONGWORD : A; + } +} + +longword gsm_L_sub P2((a,b), longword a, longword b) +{ + if (a >= 0) { + if (b >= 0) return a - b; + else { + /* a>=0, b<0 */ + + ulongword A = (ulongword)a + -(b + 1); + return A >= MAX_LONGWORD ? MAX_LONGWORD : (A + 1); + } + } + else if (b <= 0) return a - b; + else { + /* a<0, b>0 */ + + ulongword A = (ulongword)-(a + 1) + b; + return A >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)A - 1; + } +} + +static unsigned char const bitoff[ 256 ] = { + 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +word gsm_norm P1((a), longword a ) +/* + * the number of left shifts needed to normalize the 32 bit + * variable L_var1 for positive values on the interval + * + * with minimum of + * minimum of 1073741824 (01000000000000000000000000000000) and + * maximum of 2147483647 (01111111111111111111111111111111) + * + * + * and for negative values on the interval with + * minimum of -2147483648 (-10000000000000000000000000000000) and + * maximum of -1073741824 ( -1000000000000000000000000000000). + * + * in order to normalize the result, the following + * operation must be done: L_norm_var1 = L_var1 << norm( L_var1 ); + * + * (That's 'ffs', only from the left, not the right..) + */ +{ + assert(a != 0); + + if (a < 0) { + if (a <= -1073741824) return 0; + a = ~a; + } + + return a & 0xffff0000 + ? ( a & 0xff000000 + ? -1 + bitoff[ 0xFF & (a >> 24) ] + : 7 + bitoff[ 0xFF & (a >> 16) ] ) + : ( a & 0xff00 + ? 15 + bitoff[ 0xFF & (a >> 8) ] + : 23 + bitoff[ 0xFF & a ] ); +} + +longword gsm_L_asl P2((a,n), longword a, int n) +{ + if (n >= 32) return 0; + if (n <= -32) return -(a < 0); + if (n < 0) return gsm_L_asr(a, -n); + return a << n; +} + +word gsm_asl P2((a,n), word a, int n) +{ + if (n >= 16) return 0; + if (n <= -16) return -(a < 0); + if (n < 0) return gsm_asr(a, -n); + return a << n; +} + +longword gsm_L_asr P2((a,n), longword a, int n) +{ + if (n >= 32) return -(a < 0); + if (n <= -32) return 0; + if (n < 0) return a << -n; + +# ifdef SASR + return a >> n; +# else + if (a >= 0) return a >> n; + else return -(longword)( -(ulongword)a >> n ); +# endif +} + +word gsm_asr P2((a,n), word a, int n) +{ + if (n >= 16) return -(a < 0); + if (n <= -16) return 0; + if (n < 0) return a << -n; + +# ifdef SASR + return a >> n; +# else + if (a >= 0) return a >> n; + else return -(word)( -(uword)a >> n ); +# endif +} + +/* + * (From p. 46, end of section 4.2.5) + * + * NOTE: The following lines gives [sic] one correct implementation + * of the div(num, denum) arithmetic operation. Compute div + * which is the integer division of num by denum: with denum + * >= num > 0 + */ + +word gsm_div P2((num,denum), word num, word denum) +{ + longword L_num = num; + longword L_denum = denum; + word div = 0; + int k = 15; + + /* The parameter num sometimes becomes zero. + * Although this is explicitly guarded against in 4.2.5, + * we assume that the result should then be zero as well. + */ + + /* assert(num != 0); */ + + assert(num >= 0 && denum >= num); + if (num == 0) + return 0; + + while (k--) { + div <<= 1; + L_num <<= 1; + + if (L_num >= L_denum) { + L_num -= L_denum; + div++; + } + } + + return div; +} diff --git a/V203/gsm/lib/gsm/src/code.c b/V203/gsm/lib/gsm/src/code.c new file mode 100644 index 0000000..402f614 --- /dev/null +++ b/V203/gsm/lib/gsm/src/code.c @@ -0,0 +1,97 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/code.c,v 1.3 1996/07/02 09:59:05 jutta Exp $ */ + +#include "config.h" + + +#ifdef HAS_STRING_H +#include +#else +# include "proto.h" + extern char * memcpy P((char *, char *, int)); +#endif + +#include "private.h" +#include "gsm.h" +#include "proto.h" + +/* + * 4.2 FIXED POINT IMPLEMENTATION OF THE RPE-LTP CODER + */ + +void Gsm_Coder P8((S,s,LARc,Nc,bc,Mc,xmaxc,xMc), + + struct gsm_state * S, + + word * s, /* [0..159] samples IN */ + +/* + * The RPE-LTD coder works on a frame by frame basis. The length of + * the frame is equal to 160 samples. Some computations are done + * once per frame to produce at the output of the coder the + * LARc[1..8] parameters which are the coded LAR coefficients and + * also to realize the inverse filtering operation for the entire + * frame (160 samples of signal d[0..159]). These parts produce at + * the output of the coder: + */ + + word * LARc, /* [0..7] LAR coefficients OUT */ + +/* + * Procedure 4.2.11 to 4.2.18 are to be executed four times per + * frame. That means once for each sub-segment RPE-LTP analysis of + * 40 samples. These parts produce at the output of the coder: + */ + + word * Nc, /* [0..3] LTP lag OUT */ + word * bc, /* [0..3] coded LTP gain OUT */ + word * Mc, /* [0..3] RPE grid selection OUT */ + word * xmaxc,/* [0..3] Coded maximum amplitude OUT */ + word * xMc /* [13*4] normalized RPE samples OUT */ +) +{ + int k; + word * dp = S->dp0 + 120; /* [ -120...-1 ] */ + word * dpp = dp; /* [ 0...39 ] */ + + word so[160]; + + Gsm_Preprocess (S, s, so); + Gsm_LPC_Analysis (S, so, LARc); + Gsm_Short_Term_Analysis_Filter (S, LARc, so); + + for (k = 0; k <= 3; k++, xMc += 13) { + + Gsm_Long_Term_Predictor ( S, + so+k*40, /* d [0..39] IN */ + dp, /* dp [-120..-1] IN */ + S->e + 5, /* e [0..39] OUT */ + dpp, /* dpp [0..39] OUT */ + Nc++, + bc++); + + Gsm_RPE_Encoding ( S, + S->e + 5,/* e ][0..39][ IN/OUT */ + xmaxc++, Mc++, xMc ); + /* + * Gsm_Update_of_reconstructed_short_time_residual_signal + * ( dpp, S->e + 5, dp ); + */ + + { register int i; + register longword ltmp; + for (i = 0; i <= 39; i++) + dp[ i ] = GSM_ADD( S->e[5 + i], dpp[i] ); + } + dp += 40; + dpp += 40; + + } + (void)memcpy( (char *)S->dp0, (char *)(S->dp0 + 160), + 120 * sizeof(*S->dp0) ); +} diff --git a/V203/gsm/lib/gsm/src/debug.c b/V203/gsm/lib/gsm/src/debug.c new file mode 100644 index 0000000..a2a5136 --- /dev/null +++ b/V203/gsm/lib/gsm/src/debug.c @@ -0,0 +1,76 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/debug.c,v 1.2 1993/01/29 18:22:20 jutta Exp $ */ + +#include "private.h" + +#ifndef NDEBUG + +/* If NDEBUG _is_ defined and no debugging should be performed, + * calls to functions in this module are #defined to nothing + * in private.h. + */ + +#include +#include "proto.h" + +void gsm_debug_words P4( (name, from, to, ptr), + char * name, + int from, + int to, + word * ptr) +{ + int nprinted = 0; + + fprintf( stderr, "%s [%d .. %d]: ", name, from, to ); + while (from <= to) { + fprintf(stderr, "%d ", ptr[ from ] ); + from++; + if (nprinted++ >= 7) { + nprinted = 0; + if (from < to) putc('\n', stderr); + } + } + putc('\n', stderr); +} + +void gsm_debug_longwords P4( (name, from, to, ptr), + char * name, + int from, + int to, + longword * ptr) +{ + int nprinted = 0; + + fprintf( stderr, "%s [%d .. %d]: ", name, from, to ); + while (from <= to) { + + fprintf(stderr, "%ld ", ptr[ from ] ); + from++; + if (nprinted++ >= 7) { + nprinted = 0; + if (from < to) putc('\n', stderr); + } + } + putc('\n', stderr); +} + +void gsm_debug_longword P2( (name, value), + char * name, + longword value ) +{ + fprintf(stderr, "%s: %ld\n", name, (long)value ); +} + +void gsm_debug_word P2( (name, value), + char * name, + word value ) +{ + fprintf(stderr, "%s: %ld\n", name, (long)value); +} + +#endif diff --git a/V203/gsm/lib/gsm/src/decode.c b/V203/gsm/lib/gsm/src/decode.c new file mode 100644 index 0000000..d51c54a --- /dev/null +++ b/V203/gsm/lib/gsm/src/decode.c @@ -0,0 +1,63 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/decode.c,v 1.1 1992/10/28 00:15:50 jutta Exp $ */ + +#include + +#include "private.h" +#include "gsm.h" +#include "proto.h" + +/* + * 4.3 FIXED POINT IMPLEMENTATION OF THE RPE-LTP DECODER + */ + +static void Postprocessing P2((S,s), + struct gsm_state * S, + register word * s) +{ + register int k; + register word msr = S->msr; + register longword ltmp; /* for GSM_ADD */ + register word tmp; + + for (k = 160; k--; s++) { + tmp = GSM_MULT_R( msr, 28180 ); + msr = GSM_ADD(*s, tmp); /* Deemphasis */ + *s = GSM_ADD(msr, msr) & 0xFFF8; /* Truncation & Upscaling */ + } + S->msr = msr; +} + +void Gsm_Decoder P8((S,LARcr, Ncr,bcr,Mcr,xmaxcr,xMcr,s), + struct gsm_state * S, + + word * LARcr, /* [0..7] IN */ + + word * Ncr, /* [0..3] IN */ + word * bcr, /* [0..3] IN */ + word * Mcr, /* [0..3] IN */ + word * xmaxcr, /* [0..3] IN */ + word * xMcr, /* [0..13*4] IN */ + + word * s) /* [0..159] OUT */ +{ + int j, k; + word erp[40], wt[160]; + word * drp = S->dp0 + 120; + + for (j=0; j <= 3; j++, xmaxcr++, bcr++, Ncr++, Mcr++, xMcr += 13) { + + Gsm_RPE_Decoding( S, *xmaxcr, *Mcr, xMcr, erp ); + Gsm_Long_Term_Synthesis_Filtering( S, *Ncr, *bcr, erp, drp ); + + for (k = 0; k <= 39; k++) wt[ j * 40 + k ] = drp[ k ]; + } + + Gsm_Short_Term_Synthesis_Filter( S, LARcr, wt, s ); + Postprocessing(S, s); +} diff --git a/V203/gsm/lib/gsm/src/gsm_create.c b/V203/gsm/lib/gsm/src/gsm_create.c new file mode 100644 index 0000000..a0bf634 --- /dev/null +++ b/V203/gsm/lib/gsm/src/gsm_create.c @@ -0,0 +1,45 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +static char const ident[] = "$Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/gsm_create.c,v 1.4 1996/07/02 09:59:05 jutta Exp $"; + +#include "config.h" + +#ifdef HAS_STRING_H +#include +#else +# include "proto.h" + extern char * memset P((char *, int, int)); +#endif + +#ifdef HAS_STDLIB_H +# include +#else +# ifdef HAS_MALLOC_H +# include +# else + extern char * malloc(); +# endif +#endif + +#include + +#include "gsm.h" +#include "private.h" +#include "proto.h" + +gsm gsm_create P0() +{ + gsm r; + + r = (gsm)malloc(sizeof(struct gsm_state)); + if (!r) return r; + + memset((char *)r, 0, sizeof(*r)); + r->nrp = 40; + + return r; +} diff --git a/V203/gsm/lib/gsm/src/gsm_decode.c b/V203/gsm/lib/gsm/src/gsm_decode.c new file mode 100644 index 0000000..973c08b --- /dev/null +++ b/V203/gsm/lib/gsm/src/gsm_decode.c @@ -0,0 +1,361 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/gsm_decode.c,v 1.2 1996/07/02 09:59:05 jutta Exp $ */ + +#include "private.h" + +#include "gsm.h" +#include "proto.h" + +int gsm_decode P3((s, c, target), gsm s, gsm_byte * c, gsm_signal * target) +{ + word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4]; + +#ifdef WAV49 + if (s->wav_fmt) { + + uword sr = 0; + + s->frame_index = !s->frame_index; + if (s->frame_index) { + + sr = *c++; + LARc[0] = sr & 0x3f; sr >>= 6; + sr |= (uword)*c++ << 2; + LARc[1] = sr & 0x3f; sr >>= 6; + sr |= (uword)*c++ << 4; + LARc[2] = sr & 0x1f; sr >>= 5; + LARc[3] = sr & 0x1f; sr >>= 5; + sr |= (uword)*c++ << 2; + LARc[4] = sr & 0xf; sr >>= 4; + LARc[5] = sr & 0xf; sr >>= 4; + sr |= (uword)*c++ << 2; /* 5 */ + LARc[6] = sr & 0x7; sr >>= 3; + LARc[7] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 4; + Nc[0] = sr & 0x7f; sr >>= 7; + bc[0] = sr & 0x3; sr >>= 2; + Mc[0] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 1; + xmaxc[0] = sr & 0x3f; sr >>= 6; + xmc[0] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[1] = sr & 0x7; sr >>= 3; + xmc[2] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[3] = sr & 0x7; sr >>= 3; + xmc[4] = sr & 0x7; sr >>= 3; + xmc[5] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; /* 10 */ + xmc[6] = sr & 0x7; sr >>= 3; + xmc[7] = sr & 0x7; sr >>= 3; + xmc[8] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[9] = sr & 0x7; sr >>= 3; + xmc[10] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[11] = sr & 0x7; sr >>= 3; + xmc[12] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 4; + Nc[1] = sr & 0x7f; sr >>= 7; + bc[1] = sr & 0x3; sr >>= 2; + Mc[1] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 1; + xmaxc[1] = sr & 0x3f; sr >>= 6; + xmc[13] = sr & 0x7; sr >>= 3; + sr = *c++; /* 15 */ + xmc[14] = sr & 0x7; sr >>= 3; + xmc[15] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[16] = sr & 0x7; sr >>= 3; + xmc[17] = sr & 0x7; sr >>= 3; + xmc[18] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[19] = sr & 0x7; sr >>= 3; + xmc[20] = sr & 0x7; sr >>= 3; + xmc[21] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[22] = sr & 0x7; sr >>= 3; + xmc[23] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[24] = sr & 0x7; sr >>= 3; + xmc[25] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 4; /* 20 */ + Nc[2] = sr & 0x7f; sr >>= 7; + bc[2] = sr & 0x3; sr >>= 2; + Mc[2] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 1; + xmaxc[2] = sr & 0x3f; sr >>= 6; + xmc[26] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[27] = sr & 0x7; sr >>= 3; + xmc[28] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[29] = sr & 0x7; sr >>= 3; + xmc[30] = sr & 0x7; sr >>= 3; + xmc[31] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[32] = sr & 0x7; sr >>= 3; + xmc[33] = sr & 0x7; sr >>= 3; + xmc[34] = sr & 0x7; sr >>= 3; + sr = *c++; /* 25 */ + xmc[35] = sr & 0x7; sr >>= 3; + xmc[36] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[37] = sr & 0x7; sr >>= 3; + xmc[38] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 4; + Nc[3] = sr & 0x7f; sr >>= 7; + bc[3] = sr & 0x3; sr >>= 2; + Mc[3] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 1; + xmaxc[3] = sr & 0x3f; sr >>= 6; + xmc[39] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[40] = sr & 0x7; sr >>= 3; + xmc[41] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; /* 30 */ + xmc[42] = sr & 0x7; sr >>= 3; + xmc[43] = sr & 0x7; sr >>= 3; + xmc[44] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[45] = sr & 0x7; sr >>= 3; + xmc[46] = sr & 0x7; sr >>= 3; + xmc[47] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[48] = sr & 0x7; sr >>= 3; + xmc[49] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[50] = sr & 0x7; sr >>= 3; + xmc[51] = sr & 0x7; sr >>= 3; + + s->frame_chain = sr & 0xf; + } + else { + sr = s->frame_chain; + sr |= (uword)*c++ << 4; /* 1 */ + LARc[0] = sr & 0x3f; sr >>= 6; + LARc[1] = sr & 0x3f; sr >>= 6; + sr = *c++; + LARc[2] = sr & 0x1f; sr >>= 5; + sr |= (uword)*c++ << 3; + LARc[3] = sr & 0x1f; sr >>= 5; + LARc[4] = sr & 0xf; sr >>= 4; + sr |= (uword)*c++ << 2; + LARc[5] = sr & 0xf; sr >>= 4; + LARc[6] = sr & 0x7; sr >>= 3; + LARc[7] = sr & 0x7; sr >>= 3; + sr = *c++; /* 5 */ + Nc[0] = sr & 0x7f; sr >>= 7; + sr |= (uword)*c++ << 1; + bc[0] = sr & 0x3; sr >>= 2; + Mc[0] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 5; + xmaxc[0] = sr & 0x3f; sr >>= 6; + xmc[0] = sr & 0x7; sr >>= 3; + xmc[1] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[2] = sr & 0x7; sr >>= 3; + xmc[3] = sr & 0x7; sr >>= 3; + xmc[4] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[5] = sr & 0x7; sr >>= 3; + xmc[6] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; /* 10 */ + xmc[7] = sr & 0x7; sr >>= 3; + xmc[8] = sr & 0x7; sr >>= 3; + xmc[9] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[10] = sr & 0x7; sr >>= 3; + xmc[11] = sr & 0x7; sr >>= 3; + xmc[12] = sr & 0x7; sr >>= 3; + sr = *c++; + Nc[1] = sr & 0x7f; sr >>= 7; + sr |= (uword)*c++ << 1; + bc[1] = sr & 0x3; sr >>= 2; + Mc[1] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 5; + xmaxc[1] = sr & 0x3f; sr >>= 6; + xmc[13] = sr & 0x7; sr >>= 3; + xmc[14] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; /* 15 */ + xmc[15] = sr & 0x7; sr >>= 3; + xmc[16] = sr & 0x7; sr >>= 3; + xmc[17] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[18] = sr & 0x7; sr >>= 3; + xmc[19] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[20] = sr & 0x7; sr >>= 3; + xmc[21] = sr & 0x7; sr >>= 3; + xmc[22] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[23] = sr & 0x7; sr >>= 3; + xmc[24] = sr & 0x7; sr >>= 3; + xmc[25] = sr & 0x7; sr >>= 3; + sr = *c++; + Nc[2] = sr & 0x7f; sr >>= 7; + sr |= (uword)*c++ << 1; /* 20 */ + bc[2] = sr & 0x3; sr >>= 2; + Mc[2] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 5; + xmaxc[2] = sr & 0x3f; sr >>= 6; + xmc[26] = sr & 0x7; sr >>= 3; + xmc[27] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[28] = sr & 0x7; sr >>= 3; + xmc[29] = sr & 0x7; sr >>= 3; + xmc[30] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[31] = sr & 0x7; sr >>= 3; + xmc[32] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[33] = sr & 0x7; sr >>= 3; + xmc[34] = sr & 0x7; sr >>= 3; + xmc[35] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; /* 25 */ + xmc[36] = sr & 0x7; sr >>= 3; + xmc[37] = sr & 0x7; sr >>= 3; + xmc[38] = sr & 0x7; sr >>= 3; + sr = *c++; + Nc[3] = sr & 0x7f; sr >>= 7; + sr |= (uword)*c++ << 1; + bc[3] = sr & 0x3; sr >>= 2; + Mc[3] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 5; + xmaxc[3] = sr & 0x3f; sr >>= 6; + xmc[39] = sr & 0x7; sr >>= 3; + xmc[40] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[41] = sr & 0x7; sr >>= 3; + xmc[42] = sr & 0x7; sr >>= 3; + xmc[43] = sr & 0x7; sr >>= 3; + sr = *c++; /* 30 */ + xmc[44] = sr & 0x7; sr >>= 3; + xmc[45] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[46] = sr & 0x7; sr >>= 3; + xmc[47] = sr & 0x7; sr >>= 3; + xmc[48] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[49] = sr & 0x7; sr >>= 3; + xmc[50] = sr & 0x7; sr >>= 3; + xmc[51] = sr & 0x7; sr >>= 3; + } + } + else +#endif + { + /* GSM_MAGIC = (*c >> 4) & 0xF; */ + + if (((*c >> 4) & 0x0F) != GSM_MAGIC) return -1; + + LARc[0] = (*c++ & 0xF) << 2; /* 1 */ + LARc[0] |= (*c >> 6) & 0x3; + LARc[1] = *c++ & 0x3F; + LARc[2] = (*c >> 3) & 0x1F; + LARc[3] = (*c++ & 0x7) << 2; + LARc[3] |= (*c >> 6) & 0x3; + LARc[4] = (*c >> 2) & 0xF; + LARc[5] = (*c++ & 0x3) << 2; + LARc[5] |= (*c >> 6) & 0x3; + LARc[6] = (*c >> 3) & 0x7; + LARc[7] = *c++ & 0x7; + Nc[0] = (*c >> 1) & 0x7F; + bc[0] = (*c++ & 0x1) << 1; + bc[0] |= (*c >> 7) & 0x1; + Mc[0] = (*c >> 5) & 0x3; + xmaxc[0] = (*c++ & 0x1F) << 1; + xmaxc[0] |= (*c >> 7) & 0x1; + xmc[0] = (*c >> 4) & 0x7; + xmc[1] = (*c >> 1) & 0x7; + xmc[2] = (*c++ & 0x1) << 2; + xmc[2] |= (*c >> 6) & 0x3; + xmc[3] = (*c >> 3) & 0x7; + xmc[4] = *c++ & 0x7; + xmc[5] = (*c >> 5) & 0x7; + xmc[6] = (*c >> 2) & 0x7; + xmc[7] = (*c++ & 0x3) << 1; /* 10 */ + xmc[7] |= (*c >> 7) & 0x1; + xmc[8] = (*c >> 4) & 0x7; + xmc[9] = (*c >> 1) & 0x7; + xmc[10] = (*c++ & 0x1) << 2; + xmc[10] |= (*c >> 6) & 0x3; + xmc[11] = (*c >> 3) & 0x7; + xmc[12] = *c++ & 0x7; + Nc[1] = (*c >> 1) & 0x7F; + bc[1] = (*c++ & 0x1) << 1; + bc[1] |= (*c >> 7) & 0x1; + Mc[1] = (*c >> 5) & 0x3; + xmaxc[1] = (*c++ & 0x1F) << 1; + xmaxc[1] |= (*c >> 7) & 0x1; + xmc[13] = (*c >> 4) & 0x7; + xmc[14] = (*c >> 1) & 0x7; + xmc[15] = (*c++ & 0x1) << 2; + xmc[15] |= (*c >> 6) & 0x3; + xmc[16] = (*c >> 3) & 0x7; + xmc[17] = *c++ & 0x7; + xmc[18] = (*c >> 5) & 0x7; + xmc[19] = (*c >> 2) & 0x7; + xmc[20] = (*c++ & 0x3) << 1; + xmc[20] |= (*c >> 7) & 0x1; + xmc[21] = (*c >> 4) & 0x7; + xmc[22] = (*c >> 1) & 0x7; + xmc[23] = (*c++ & 0x1) << 2; + xmc[23] |= (*c >> 6) & 0x3; + xmc[24] = (*c >> 3) & 0x7; + xmc[25] = *c++ & 0x7; + Nc[2] = (*c >> 1) & 0x7F; + bc[2] = (*c++ & 0x1) << 1; /* 20 */ + bc[2] |= (*c >> 7) & 0x1; + Mc[2] = (*c >> 5) & 0x3; + xmaxc[2] = (*c++ & 0x1F) << 1; + xmaxc[2] |= (*c >> 7) & 0x1; + xmc[26] = (*c >> 4) & 0x7; + xmc[27] = (*c >> 1) & 0x7; + xmc[28] = (*c++ & 0x1) << 2; + xmc[28] |= (*c >> 6) & 0x3; + xmc[29] = (*c >> 3) & 0x7; + xmc[30] = *c++ & 0x7; + xmc[31] = (*c >> 5) & 0x7; + xmc[32] = (*c >> 2) & 0x7; + xmc[33] = (*c++ & 0x3) << 1; + xmc[33] |= (*c >> 7) & 0x1; + xmc[34] = (*c >> 4) & 0x7; + xmc[35] = (*c >> 1) & 0x7; + xmc[36] = (*c++ & 0x1) << 2; + xmc[36] |= (*c >> 6) & 0x3; + xmc[37] = (*c >> 3) & 0x7; + xmc[38] = *c++ & 0x7; + Nc[3] = (*c >> 1) & 0x7F; + bc[3] = (*c++ & 0x1) << 1; + bc[3] |= (*c >> 7) & 0x1; + Mc[3] = (*c >> 5) & 0x3; + xmaxc[3] = (*c++ & 0x1F) << 1; + xmaxc[3] |= (*c >> 7) & 0x1; + xmc[39] = (*c >> 4) & 0x7; + xmc[40] = (*c >> 1) & 0x7; + xmc[41] = (*c++ & 0x1) << 2; + xmc[41] |= (*c >> 6) & 0x3; + xmc[42] = (*c >> 3) & 0x7; + xmc[43] = *c++ & 0x7; /* 30 */ + xmc[44] = (*c >> 5) & 0x7; + xmc[45] = (*c >> 2) & 0x7; + xmc[46] = (*c++ & 0x3) << 1; + xmc[46] |= (*c >> 7) & 0x1; + xmc[47] = (*c >> 4) & 0x7; + xmc[48] = (*c >> 1) & 0x7; + xmc[49] = (*c++ & 0x1) << 2; + xmc[49] |= (*c >> 6) & 0x3; + xmc[50] = (*c >> 3) & 0x7; + xmc[51] = *c & 0x7; /* 33 */ + } + + Gsm_Decoder(s, LARc, Nc, bc, Mc, xmaxc, xmc, target); + + return 0; +} diff --git a/V203/gsm/lib/gsm/src/gsm_destroy.c b/V203/gsm/lib/gsm/src/gsm_destroy.c new file mode 100644 index 0000000..03c8659 --- /dev/null +++ b/V203/gsm/lib/gsm/src/gsm_destroy.c @@ -0,0 +1,26 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/gsm_destroy.c,v 1.3 1994/11/28 19:52:25 jutta Exp $ */ + +#include "gsm.h" +#include "config.h" +#include "proto.h" + +#ifdef HAS_STDLIB_H +# include +#else +# ifdef HAS_MALLOC_H +# include +# else + extern void free(); +# endif +#endif + +void gsm_destroy P1((S), gsm S) +{ + if (S) free((char *)S); +} diff --git a/V203/gsm/lib/gsm/src/gsm_encode.c b/V203/gsm/lib/gsm/src/gsm_encode.c new file mode 100644 index 0000000..51bc556 --- /dev/null +++ b/V203/gsm/lib/gsm/src/gsm_encode.c @@ -0,0 +1,451 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/gsm_encode.c,v 1.2 1996/07/02 09:59:05 jutta Exp $ */ + +#include "private.h" +#include "gsm.h" +#include "proto.h" + +void gsm_encode P3((s, source, c), gsm s, gsm_signal * source, gsm_byte * c) +{ + word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4]; + + Gsm_Coder(s, source, LARc, Nc, bc, Mc, xmaxc, xmc); + + + /* variable size + + GSM_MAGIC 4 + + LARc[0] 6 + LARc[1] 6 + LARc[2] 5 + LARc[3] 5 + LARc[4] 4 + LARc[5] 4 + LARc[6] 3 + LARc[7] 3 + + Nc[0] 7 + bc[0] 2 + Mc[0] 2 + xmaxc[0] 6 + xmc[0] 3 + xmc[1] 3 + xmc[2] 3 + xmc[3] 3 + xmc[4] 3 + xmc[5] 3 + xmc[6] 3 + xmc[7] 3 + xmc[8] 3 + xmc[9] 3 + xmc[10] 3 + xmc[11] 3 + xmc[12] 3 + + Nc[1] 7 + bc[1] 2 + Mc[1] 2 + xmaxc[1] 6 + xmc[13] 3 + xmc[14] 3 + xmc[15] 3 + xmc[16] 3 + xmc[17] 3 + xmc[18] 3 + xmc[19] 3 + xmc[20] 3 + xmc[21] 3 + xmc[22] 3 + xmc[23] 3 + xmc[24] 3 + xmc[25] 3 + + Nc[2] 7 + bc[2] 2 + Mc[2] 2 + xmaxc[2] 6 + xmc[26] 3 + xmc[27] 3 + xmc[28] 3 + xmc[29] 3 + xmc[30] 3 + xmc[31] 3 + xmc[32] 3 + xmc[33] 3 + xmc[34] 3 + xmc[35] 3 + xmc[36] 3 + xmc[37] 3 + xmc[38] 3 + + Nc[3] 7 + bc[3] 2 + Mc[3] 2 + xmaxc[3] 6 + xmc[39] 3 + xmc[40] 3 + xmc[41] 3 + xmc[42] 3 + xmc[43] 3 + xmc[44] 3 + xmc[45] 3 + xmc[46] 3 + xmc[47] 3 + xmc[48] 3 + xmc[49] 3 + xmc[50] 3 + xmc[51] 3 + */ + +#ifdef WAV49 + + if (s->wav_fmt) { + s->frame_index = !s->frame_index; + if (s->frame_index) { + + uword sr; + + sr = 0; + sr = sr >> 6 | LARc[0] << 10; + sr = sr >> 6 | LARc[1] << 10; + *c++ = sr >> 4; + sr = sr >> 5 | LARc[2] << 11; + *c++ = sr >> 7; + sr = sr >> 5 | LARc[3] << 11; + sr = sr >> 4 | LARc[4] << 12; + *c++ = sr >> 6; + sr = sr >> 4 | LARc[5] << 12; + sr = sr >> 3 | LARc[6] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | LARc[7] << 13; + sr = sr >> 7 | Nc[0] << 9; + *c++ = sr >> 5; + sr = sr >> 2 | bc[0] << 14; + sr = sr >> 2 | Mc[0] << 14; + sr = sr >> 6 | xmaxc[0] << 10; + *c++ = sr >> 3; + sr = sr >> 3 | xmc[0] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[1] << 13; + sr = sr >> 3 | xmc[2] << 13; + sr = sr >> 3 | xmc[3] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[4] << 13; + sr = sr >> 3 | xmc[5] << 13; + sr = sr >> 3 | xmc[6] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[7] << 13; + sr = sr >> 3 | xmc[8] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[9] << 13; + sr = sr >> 3 | xmc[10] << 13; + sr = sr >> 3 | xmc[11] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[12] << 13; + sr = sr >> 7 | Nc[1] << 9; + *c++ = sr >> 5; + sr = sr >> 2 | bc[1] << 14; + sr = sr >> 2 | Mc[1] << 14; + sr = sr >> 6 | xmaxc[1] << 10; + *c++ = sr >> 3; + sr = sr >> 3 | xmc[13] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[14] << 13; + sr = sr >> 3 | xmc[15] << 13; + sr = sr >> 3 | xmc[16] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[17] << 13; + sr = sr >> 3 | xmc[18] << 13; + sr = sr >> 3 | xmc[19] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[20] << 13; + sr = sr >> 3 | xmc[21] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[22] << 13; + sr = sr >> 3 | xmc[23] << 13; + sr = sr >> 3 | xmc[24] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[25] << 13; + sr = sr >> 7 | Nc[2] << 9; + *c++ = sr >> 5; + sr = sr >> 2 | bc[2] << 14; + sr = sr >> 2 | Mc[2] << 14; + sr = sr >> 6 | xmaxc[2] << 10; + *c++ = sr >> 3; + sr = sr >> 3 | xmc[26] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[27] << 13; + sr = sr >> 3 | xmc[28] << 13; + sr = sr >> 3 | xmc[29] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[30] << 13; + sr = sr >> 3 | xmc[31] << 13; + sr = sr >> 3 | xmc[32] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[33] << 13; + sr = sr >> 3 | xmc[34] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[35] << 13; + sr = sr >> 3 | xmc[36] << 13; + sr = sr >> 3 | xmc[37] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[38] << 13; + sr = sr >> 7 | Nc[3] << 9; + *c++ = sr >> 5; + sr = sr >> 2 | bc[3] << 14; + sr = sr >> 2 | Mc[3] << 14; + sr = sr >> 6 | xmaxc[3] << 10; + *c++ = sr >> 3; + sr = sr >> 3 | xmc[39] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[40] << 13; + sr = sr >> 3 | xmc[41] << 13; + sr = sr >> 3 | xmc[42] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[43] << 13; + sr = sr >> 3 | xmc[44] << 13; + sr = sr >> 3 | xmc[45] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[46] << 13; + sr = sr >> 3 | xmc[47] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[48] << 13; + sr = sr >> 3 | xmc[49] << 13; + sr = sr >> 3 | xmc[50] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[51] << 13; + sr = sr >> 4; + *c = sr >> 8; + s->frame_chain = *c; + } + else { + uword sr; + + sr = 0; + sr = sr >> 4 | s->frame_chain << 12; + sr = sr >> 6 | LARc[0] << 10; + *c++ = sr >> 6; + sr = sr >> 6 | LARc[1] << 10; + *c++ = sr >> 8; + sr = sr >> 5 | LARc[2] << 11; + sr = sr >> 5 | LARc[3] << 11; + *c++ = sr >> 6; + sr = sr >> 4 | LARc[4] << 12; + sr = sr >> 4 | LARc[5] << 12; + *c++ = sr >> 6; + sr = sr >> 3 | LARc[6] << 13; + sr = sr >> 3 | LARc[7] << 13; + *c++ = sr >> 8; + sr = sr >> 7 | Nc[0] << 9; + sr = sr >> 2 | bc[0] << 14; + *c++ = sr >> 7; + sr = sr >> 2 | Mc[0] << 14; + sr = sr >> 6 | xmaxc[0] << 10; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[0] << 13; + sr = sr >> 3 | xmc[1] << 13; + sr = sr >> 3 | xmc[2] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[3] << 13; + sr = sr >> 3 | xmc[4] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[5] << 13; + sr = sr >> 3 | xmc[6] << 13; + sr = sr >> 3 | xmc[7] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[8] << 13; + sr = sr >> 3 | xmc[9] << 13; + sr = sr >> 3 | xmc[10] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[11] << 13; + sr = sr >> 3 | xmc[12] << 13; + *c++ = sr >> 8; + sr = sr >> 7 | Nc[1] << 9; + sr = sr >> 2 | bc[1] << 14; + *c++ = sr >> 7; + sr = sr >> 2 | Mc[1] << 14; + sr = sr >> 6 | xmaxc[1] << 10; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[13] << 13; + sr = sr >> 3 | xmc[14] << 13; + sr = sr >> 3 | xmc[15] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[16] << 13; + sr = sr >> 3 | xmc[17] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[18] << 13; + sr = sr >> 3 | xmc[19] << 13; + sr = sr >> 3 | xmc[20] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[21] << 13; + sr = sr >> 3 | xmc[22] << 13; + sr = sr >> 3 | xmc[23] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[24] << 13; + sr = sr >> 3 | xmc[25] << 13; + *c++ = sr >> 8; + sr = sr >> 7 | Nc[2] << 9; + sr = sr >> 2 | bc[2] << 14; + *c++ = sr >> 7; + sr = sr >> 2 | Mc[2] << 14; + sr = sr >> 6 | xmaxc[2] << 10; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[26] << 13; + sr = sr >> 3 | xmc[27] << 13; + sr = sr >> 3 | xmc[28] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[29] << 13; + sr = sr >> 3 | xmc[30] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[31] << 13; + sr = sr >> 3 | xmc[32] << 13; + sr = sr >> 3 | xmc[33] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[34] << 13; + sr = sr >> 3 | xmc[35] << 13; + sr = sr >> 3 | xmc[36] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[37] << 13; + sr = sr >> 3 | xmc[38] << 13; + *c++ = sr >> 8; + sr = sr >> 7 | Nc[3] << 9; + sr = sr >> 2 | bc[3] << 14; + *c++ = sr >> 7; + sr = sr >> 2 | Mc[3] << 14; + sr = sr >> 6 | xmaxc[3] << 10; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[39] << 13; + sr = sr >> 3 | xmc[40] << 13; + sr = sr >> 3 | xmc[41] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[42] << 13; + sr = sr >> 3 | xmc[43] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[44] << 13; + sr = sr >> 3 | xmc[45] << 13; + sr = sr >> 3 | xmc[46] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[47] << 13; + sr = sr >> 3 | xmc[48] << 13; + sr = sr >> 3 | xmc[49] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[50] << 13; + sr = sr >> 3 | xmc[51] << 13; + *c++ = sr >> 8; + } + } + + else + +#endif /* WAV49 */ + { + + *c++ = ((GSM_MAGIC & 0xF) << 4) /* 1 */ + | ((LARc[0] >> 2) & 0xF); + *c++ = ((LARc[0] & 0x3) << 6) + | (LARc[1] & 0x3F); + *c++ = ((LARc[2] & 0x1F) << 3) + | ((LARc[3] >> 2) & 0x7); + *c++ = ((LARc[3] & 0x3) << 6) + | ((LARc[4] & 0xF) << 2) + | ((LARc[5] >> 2) & 0x3); + *c++ = ((LARc[5] & 0x3) << 6) + | ((LARc[6] & 0x7) << 3) + | (LARc[7] & 0x7); + *c++ = ((Nc[0] & 0x7F) << 1) + | ((bc[0] >> 1) & 0x1); + *c++ = ((bc[0] & 0x1) << 7) + | ((Mc[0] & 0x3) << 5) + | ((xmaxc[0] >> 1) & 0x1F); + *c++ = ((xmaxc[0] & 0x1) << 7) + | ((xmc[0] & 0x7) << 4) + | ((xmc[1] & 0x7) << 1) + | ((xmc[2] >> 2) & 0x1); + *c++ = ((xmc[2] & 0x3) << 6) + | ((xmc[3] & 0x7) << 3) + | (xmc[4] & 0x7); + *c++ = ((xmc[5] & 0x7) << 5) /* 10 */ + | ((xmc[6] & 0x7) << 2) + | ((xmc[7] >> 1) & 0x3); + *c++ = ((xmc[7] & 0x1) << 7) + | ((xmc[8] & 0x7) << 4) + | ((xmc[9] & 0x7) << 1) + | ((xmc[10] >> 2) & 0x1); + *c++ = ((xmc[10] & 0x3) << 6) + | ((xmc[11] & 0x7) << 3) + | (xmc[12] & 0x7); + *c++ = ((Nc[1] & 0x7F) << 1) + | ((bc[1] >> 1) & 0x1); + *c++ = ((bc[1] & 0x1) << 7) + | ((Mc[1] & 0x3) << 5) + | ((xmaxc[1] >> 1) & 0x1F); + *c++ = ((xmaxc[1] & 0x1) << 7) + | ((xmc[13] & 0x7) << 4) + | ((xmc[14] & 0x7) << 1) + | ((xmc[15] >> 2) & 0x1); + *c++ = ((xmc[15] & 0x3) << 6) + | ((xmc[16] & 0x7) << 3) + | (xmc[17] & 0x7); + *c++ = ((xmc[18] & 0x7) << 5) + | ((xmc[19] & 0x7) << 2) + | ((xmc[20] >> 1) & 0x3); + *c++ = ((xmc[20] & 0x1) << 7) + | ((xmc[21] & 0x7) << 4) + | ((xmc[22] & 0x7) << 1) + | ((xmc[23] >> 2) & 0x1); + *c++ = ((xmc[23] & 0x3) << 6) + | ((xmc[24] & 0x7) << 3) + | (xmc[25] & 0x7); + *c++ = ((Nc[2] & 0x7F) << 1) /* 20 */ + | ((bc[2] >> 1) & 0x1); + *c++ = ((bc[2] & 0x1) << 7) + | ((Mc[2] & 0x3) << 5) + | ((xmaxc[2] >> 1) & 0x1F); + *c++ = ((xmaxc[2] & 0x1) << 7) + | ((xmc[26] & 0x7) << 4) + | ((xmc[27] & 0x7) << 1) + | ((xmc[28] >> 2) & 0x1); + *c++ = ((xmc[28] & 0x3) << 6) + | ((xmc[29] & 0x7) << 3) + | (xmc[30] & 0x7); + *c++ = ((xmc[31] & 0x7) << 5) + | ((xmc[32] & 0x7) << 2) + | ((xmc[33] >> 1) & 0x3); + *c++ = ((xmc[33] & 0x1) << 7) + | ((xmc[34] & 0x7) << 4) + | ((xmc[35] & 0x7) << 1) + | ((xmc[36] >> 2) & 0x1); + *c++ = ((xmc[36] & 0x3) << 6) + | ((xmc[37] & 0x7) << 3) + | (xmc[38] & 0x7); + *c++ = ((Nc[3] & 0x7F) << 1) + | ((bc[3] >> 1) & 0x1); + *c++ = ((bc[3] & 0x1) << 7) + | ((Mc[3] & 0x3) << 5) + | ((xmaxc[3] >> 1) & 0x1F); + *c++ = ((xmaxc[3] & 0x1) << 7) + | ((xmc[39] & 0x7) << 4) + | ((xmc[40] & 0x7) << 1) + | ((xmc[41] >> 2) & 0x1); + *c++ = ((xmc[41] & 0x3) << 6) /* 30 */ + | ((xmc[42] & 0x7) << 3) + | (xmc[43] & 0x7); + *c++ = ((xmc[44] & 0x7) << 5) + | ((xmc[45] & 0x7) << 2) + | ((xmc[46] >> 1) & 0x3); + *c++ = ((xmc[46] & 0x1) << 7) + | ((xmc[47] & 0x7) << 4) + | ((xmc[48] & 0x7) << 1) + | ((xmc[49] >> 2) & 0x1); + *c++ = ((xmc[49] & 0x3) << 6) + | ((xmc[50] & 0x7) << 3) + | (xmc[51] & 0x7); + + } +} diff --git a/V203/gsm/lib/gsm/src/gsm_explode.c b/V203/gsm/lib/gsm/src/gsm_explode.c new file mode 100644 index 0000000..ca48f9b --- /dev/null +++ b/V203/gsm/lib/gsm/src/gsm_explode.c @@ -0,0 +1,417 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/gsm_explode.c,v 1.2 1996/07/02 14:32:42 jutta Exp jutta $ */ + +#include "private.h" +#include "gsm.h" +#include "proto.h" + +int gsm_explode P3((s, c, target), gsm s, gsm_byte * c, gsm_signal * target) +{ +# define LARc target +# define Nc *((gsm_signal (*) [17])(target + 8)) +# define bc *((gsm_signal (*) [17])(target + 9)) +# define Mc *((gsm_signal (*) [17])(target + 10)) +# define xmaxc *((gsm_signal (*) [17])(target + 11)) + + +#ifdef WAV49 + if (s->wav_fmt) { + + uword sr = 0; + + if (s->frame_index == 1) { + + sr = *c++; + LARc[0] = sr & 0x3f; sr >>= 6; + sr |= (uword)*c++ << 2; + LARc[1] = sr & 0x3f; sr >>= 6; + sr |= (uword)*c++ << 4; + LARc[2] = sr & 0x1f; sr >>= 5; + LARc[3] = sr & 0x1f; sr >>= 5; + sr |= (uword)*c++ << 2; + LARc[4] = sr & 0xf; sr >>= 4; + LARc[5] = sr & 0xf; sr >>= 4; + sr |= (uword)*c++ << 2; /* 5 */ + LARc[6] = sr & 0x7; sr >>= 3; + LARc[7] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 4; + Nc[0] = sr & 0x7f; sr >>= 7; + bc[0] = sr & 0x3; sr >>= 2; + Mc[0] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 1; + xmaxc[0] = sr & 0x3f; sr >>= 6; +#undef xmc +#define xmc (target + 12) + xmc[0] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[1] = sr & 0x7; sr >>= 3; + xmc[2] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[3] = sr & 0x7; sr >>= 3; + xmc[4] = sr & 0x7; sr >>= 3; + xmc[5] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; /* 10 */ + xmc[6] = sr & 0x7; sr >>= 3; + xmc[7] = sr & 0x7; sr >>= 3; + xmc[8] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[9] = sr & 0x7; sr >>= 3; + xmc[10] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[11] = sr & 0x7; sr >>= 3; + xmc[12] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 4; + Nc[1] = sr & 0x7f; sr >>= 7; + bc[1] = sr & 0x3; sr >>= 2; + Mc[1] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 1; + xmaxc[1] = sr & 0x3f; sr >>= 6; +#undef xmc +#define xmc (target + 29 - 13) + + xmc[13] = sr & 0x7; sr >>= 3; + sr = *c++; /* 15 */ + xmc[14] = sr & 0x7; sr >>= 3; + xmc[15] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[16] = sr & 0x7; sr >>= 3; + xmc[17] = sr & 0x7; sr >>= 3; + xmc[18] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[19] = sr & 0x7; sr >>= 3; + xmc[20] = sr & 0x7; sr >>= 3; + xmc[21] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[22] = sr & 0x7; sr >>= 3; + xmc[23] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[24] = sr & 0x7; sr >>= 3; + xmc[25] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 4; /* 20 */ + Nc[2] = sr & 0x7f; sr >>= 7; + bc[2] = sr & 0x3; sr >>= 2; + Mc[2] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 1; + xmaxc[2] = sr & 0x3f; sr >>= 6; + +#undef xmc +#define xmc (target + 46 - 26) + + xmc[26] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[27] = sr & 0x7; sr >>= 3; + xmc[28] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[29] = sr & 0x7; sr >>= 3; + xmc[30] = sr & 0x7; sr >>= 3; + xmc[31] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[32] = sr & 0x7; sr >>= 3; + xmc[33] = sr & 0x7; sr >>= 3; + xmc[34] = sr & 0x7; sr >>= 3; + sr = *c++; /* 25 */ + xmc[35] = sr & 0x7; sr >>= 3; + xmc[36] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[37] = sr & 0x7; sr >>= 3; + xmc[38] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 4; + Nc[3] = sr & 0x7f; sr >>= 7; + bc[3] = sr & 0x3; sr >>= 2; + Mc[3] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 1; + xmaxc[3] = sr & 0x3f; sr >>= 6; +#undef xmc +#define xmc (target + 63 - 39) + + xmc[39] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[40] = sr & 0x7; sr >>= 3; + xmc[41] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; /* 30 */ + xmc[42] = sr & 0x7; sr >>= 3; + xmc[43] = sr & 0x7; sr >>= 3; + xmc[44] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[45] = sr & 0x7; sr >>= 3; + xmc[46] = sr & 0x7; sr >>= 3; + xmc[47] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[48] = sr & 0x7; sr >>= 3; + xmc[49] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[50] = sr & 0x7; sr >>= 3; + xmc[51] = sr & 0x7; sr >>= 3; + + s->frame_chain = sr & 0xf; + } + else { + sr = s->frame_chain; + sr |= (uword)*c++ << 4; /* 1 */ + LARc[0] = sr & 0x3f; sr >>= 6; + LARc[1] = sr & 0x3f; sr >>= 6; + sr = *c++; + LARc[2] = sr & 0x1f; sr >>= 5; + sr |= (uword)*c++ << 3; + LARc[3] = sr & 0x1f; sr >>= 5; + LARc[4] = sr & 0xf; sr >>= 4; + sr |= (uword)*c++ << 2; + LARc[5] = sr & 0xf; sr >>= 4; + LARc[6] = sr & 0x7; sr >>= 3; + LARc[7] = sr & 0x7; sr >>= 3; + sr = *c++; /* 5 */ + Nc[0] = sr & 0x7f; sr >>= 7; + sr |= (uword)*c++ << 1; + bc[0] = sr & 0x3; sr >>= 2; + Mc[0] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 5; + xmaxc[0] = sr & 0x3f; sr >>= 6; +#undef xmc +#define xmc (target + 12) + xmc[0] = sr & 0x7; sr >>= 3; + xmc[1] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[2] = sr & 0x7; sr >>= 3; + xmc[3] = sr & 0x7; sr >>= 3; + xmc[4] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[5] = sr & 0x7; sr >>= 3; + xmc[6] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; /* 10 */ + xmc[7] = sr & 0x7; sr >>= 3; + xmc[8] = sr & 0x7; sr >>= 3; + xmc[9] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[10] = sr & 0x7; sr >>= 3; + xmc[11] = sr & 0x7; sr >>= 3; + xmc[12] = sr & 0x7; sr >>= 3; + sr = *c++; + Nc[1] = sr & 0x7f; sr >>= 7; + sr |= (uword)*c++ << 1; + bc[1] = sr & 0x3; sr >>= 2; + Mc[1] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 5; + xmaxc[1] = sr & 0x3f; sr >>= 6; +#undef xmc +#define xmc (target + 29 - 13) + + xmc[13] = sr & 0x7; sr >>= 3; + xmc[14] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; /* 15 */ + xmc[15] = sr & 0x7; sr >>= 3; + xmc[16] = sr & 0x7; sr >>= 3; + xmc[17] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[18] = sr & 0x7; sr >>= 3; + xmc[19] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[20] = sr & 0x7; sr >>= 3; + xmc[21] = sr & 0x7; sr >>= 3; + xmc[22] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[23] = sr & 0x7; sr >>= 3; + xmc[24] = sr & 0x7; sr >>= 3; + xmc[25] = sr & 0x7; sr >>= 3; + sr = *c++; + Nc[2] = sr & 0x7f; sr >>= 7; + sr |= (uword)*c++ << 1; /* 20 */ + bc[2] = sr & 0x3; sr >>= 2; + Mc[2] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 5; + xmaxc[2] = sr & 0x3f; sr >>= 6; +#undef xmc +#define xmc (target + 46 - 26) + xmc[26] = sr & 0x7; sr >>= 3; + xmc[27] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[28] = sr & 0x7; sr >>= 3; + xmc[29] = sr & 0x7; sr >>= 3; + xmc[30] = sr & 0x7; sr >>= 3; + sr = *c++; + xmc[31] = sr & 0x7; sr >>= 3; + xmc[32] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[33] = sr & 0x7; sr >>= 3; + xmc[34] = sr & 0x7; sr >>= 3; + xmc[35] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; /* 25 */ + xmc[36] = sr & 0x7; sr >>= 3; + xmc[37] = sr & 0x7; sr >>= 3; + xmc[38] = sr & 0x7; sr >>= 3; + sr = *c++; + Nc[3] = sr & 0x7f; sr >>= 7; + sr |= (uword)*c++ << 1; + bc[3] = sr & 0x3; sr >>= 2; + Mc[3] = sr & 0x3; sr >>= 2; + sr |= (uword)*c++ << 5; + xmaxc[3] = sr & 0x3f; sr >>= 6; + +#undef xmc +#define xmc (target + 63 - 39) + + xmc[39] = sr & 0x7; sr >>= 3; + xmc[40] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[41] = sr & 0x7; sr >>= 3; + xmc[42] = sr & 0x7; sr >>= 3; + xmc[43] = sr & 0x7; sr >>= 3; + sr = *c++; /* 30 */ + xmc[44] = sr & 0x7; sr >>= 3; + xmc[45] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 2; + xmc[46] = sr & 0x7; sr >>= 3; + xmc[47] = sr & 0x7; sr >>= 3; + xmc[48] = sr & 0x7; sr >>= 3; + sr |= (uword)*c++ << 1; + xmc[49] = sr & 0x7; sr >>= 3; + xmc[50] = sr & 0x7; sr >>= 3; + xmc[51] = sr & 0x7; sr >>= 3; + } + } + else +#endif + { + /* GSM_MAGIC = (*c >> 4) & 0xF; */ + + if (((*c >> 4) & 0x0F) != GSM_MAGIC) return -1; + + LARc[0] = (*c++ & 0xF) << 2; /* 1 */ + LARc[0] |= (*c >> 6) & 0x3; + LARc[1] = *c++ & 0x3F; + LARc[2] = (*c >> 3) & 0x1F; + LARc[3] = (*c++ & 0x7) << 2; + LARc[3] |= (*c >> 6) & 0x3; + LARc[4] = (*c >> 2) & 0xF; + LARc[5] = (*c++ & 0x3) << 2; + LARc[5] |= (*c >> 6) & 0x3; + LARc[6] = (*c >> 3) & 0x7; + LARc[7] = *c++ & 0x7; + + Nc[0] = (*c >> 1) & 0x7F; + + bc[0] = (*c++ & 0x1) << 1; + bc[0] |= (*c >> 7) & 0x1; + + Mc[0] = (*c >> 5) & 0x3; + + xmaxc[0] = (*c++ & 0x1F) << 1; + xmaxc[0] |= (*c >> 7) & 0x1; + +#undef xmc +#define xmc (target + 12) + + xmc[0] = (*c >> 4) & 0x7; + xmc[1] = (*c >> 1) & 0x7; + xmc[2] = (*c++ & 0x1) << 2; + xmc[2] |= (*c >> 6) & 0x3; + xmc[3] = (*c >> 3) & 0x7; + xmc[4] = *c++ & 0x7; + xmc[5] = (*c >> 5) & 0x7; + xmc[6] = (*c >> 2) & 0x7; + xmc[7] = (*c++ & 0x3) << 1; /* 10 */ + xmc[7] |= (*c >> 7) & 0x1; + xmc[8] = (*c >> 4) & 0x7; + xmc[9] = (*c >> 1) & 0x7; + xmc[10] = (*c++ & 0x1) << 2; + xmc[10] |= (*c >> 6) & 0x3; + xmc[11] = (*c >> 3) & 0x7; + xmc[12] = *c++ & 0x7; + + Nc[1] = (*c >> 1) & 0x7F; + + bc[1] = (*c++ & 0x1) << 1; + bc[1] |= (*c >> 7) & 0x1; + + Mc[1] = (*c >> 5) & 0x3; + + xmaxc[1] = (*c++ & 0x1F) << 1; + xmaxc[1] |= (*c >> 7) & 0x1; + +#undef xmc +#define xmc (target + 29 - 13) + + xmc[13] = (*c >> 4) & 0x7; + xmc[14] = (*c >> 1) & 0x7; + xmc[15] = (*c++ & 0x1) << 2; + xmc[15] |= (*c >> 6) & 0x3; + xmc[16] = (*c >> 3) & 0x7; + xmc[17] = *c++ & 0x7; + xmc[18] = (*c >> 5) & 0x7; + xmc[19] = (*c >> 2) & 0x7; + xmc[20] = (*c++ & 0x3) << 1; + xmc[20] |= (*c >> 7) & 0x1; + xmc[21] = (*c >> 4) & 0x7; + xmc[22] = (*c >> 1) & 0x7; + xmc[23] = (*c++ & 0x1) << 2; + xmc[23] |= (*c >> 6) & 0x3; + xmc[24] = (*c >> 3) & 0x7; + xmc[25] = *c++ & 0x7; + + Nc[2] = (*c >> 1) & 0x7F; + + bc[2] = (*c++ & 0x1) << 1; /* 20 */ + bc[2] |= (*c >> 7) & 0x1; + + Mc[2] = (*c >> 5) & 0x3; + + xmaxc[2] = (*c++ & 0x1F) << 1; + xmaxc[2] |= (*c >> 7) & 0x1; + +#undef xmc +#define xmc (target + 46 - 26) + + xmc[26] = (*c >> 4) & 0x7; + xmc[27] = (*c >> 1) & 0x7; + xmc[28] = (*c++ & 0x1) << 2; + xmc[28] |= (*c >> 6) & 0x3; + xmc[29] = (*c >> 3) & 0x7; + xmc[30] = *c++ & 0x7; + xmc[31] = (*c >> 5) & 0x7; + xmc[32] = (*c >> 2) & 0x7; + xmc[33] = (*c++ & 0x3) << 1; + xmc[33] |= (*c >> 7) & 0x1; + xmc[34] = (*c >> 4) & 0x7; + xmc[35] = (*c >> 1) & 0x7; + xmc[36] = (*c++ & 0x1) << 2; + xmc[36] |= (*c >> 6) & 0x3; + xmc[37] = (*c >> 3) & 0x7; + xmc[38] = *c++ & 0x7; + + Nc[3] = (*c >> 1) & 0x7F; + + bc[3] = (*c++ & 0x1) << 1; + bc[3] |= (*c >> 7) & 0x1; + + Mc[3] = (*c >> 5) & 0x3; + + xmaxc[3] = (*c++ & 0x1F) << 1; + xmaxc[3] |= (*c >> 7) & 0x1; + +#undef xmc +#define xmc (target + 63 - 39) + + xmc[39] = (*c >> 4) & 0x7; + xmc[40] = (*c >> 1) & 0x7; + xmc[41] = (*c++ & 0x1) << 2; + xmc[41] |= (*c >> 6) & 0x3; + xmc[42] = (*c >> 3) & 0x7; + xmc[43] = *c++ & 0x7; /* 30 */ + xmc[44] = (*c >> 5) & 0x7; + xmc[45] = (*c >> 2) & 0x7; + xmc[46] = (*c++ & 0x3) << 1; + xmc[46] |= (*c >> 7) & 0x1; + xmc[47] = (*c >> 4) & 0x7; + xmc[48] = (*c >> 1) & 0x7; + xmc[49] = (*c++ & 0x1) << 2; + xmc[49] |= (*c >> 6) & 0x3; + xmc[50] = (*c >> 3) & 0x7; + xmc[51] = *c & 0x7; /* 33 */ + } + + return 0; +} diff --git a/V203/gsm/lib/gsm/src/gsm_implode.c b/V203/gsm/lib/gsm/src/gsm_implode.c new file mode 100644 index 0000000..6c5672b --- /dev/null +++ b/V203/gsm/lib/gsm/src/gsm_implode.c @@ -0,0 +1,521 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/gsm_implode.c,v 1.2 1996/07/02 14:32:43 jutta Exp jutta $ */ + +#include "private.h" + +#include "gsm.h" +#include "proto.h" + +void gsm_implode P3((s, source, c), gsm s, gsm_signal * source, gsm_byte * c) +{ + /* variable size index + + GSM_MAGIC 4 - + + LARc[0] 6 0 + LARc[1] 6 1 + LARc[2] 5 2 + LARc[3] 5 3 + LARc[4] 4 4 + LARc[5] 4 5 + LARc[6] 3 6 + LARc[7] 3 7 + + Nc[0] 7 8 + bc[0] 2 9 + Mc[0] 2 10 + xmaxc[0] 6 11 + xmc[0] 3 12 + xmc[1] 3 13 + xmc[2] 3 14 + xmc[3] 3 15 + xmc[4] 3 16 + xmc[5] 3 17 + xmc[6] 3 18 + xmc[7] 3 19 + xmc[8] 3 20 + xmc[9] 3 21 + xmc[10] 3 22 + xmc[11] 3 23 + xmc[12] 3 24 + + Nc[1] 7 25 + bc[1] 2 26 + Mc[1] 2 27 + xmaxc[1] 6 28 + xmc[13] 3 29 + xmc[14] 3 30 + xmc[15] 3 31 + xmc[16] 3 32 + xmc[17] 3 33 + xmc[18] 3 34 + xmc[19] 3 35 + xmc[20] 3 36 + xmc[21] 3 37 + xmc[22] 3 38 + xmc[23] 3 39 + xmc[24] 3 40 + xmc[25] 3 41 + + Nc[2] 7 42 + bc[2] 2 43 + Mc[2] 2 44 + xmaxc[2] 6 45 + xmc[26] 3 46 + xmc[27] 3 47 + xmc[28] 3 48 + xmc[29] 3 49 + xmc[30] 3 50 + xmc[31] 3 51 + xmc[32] 3 52 + xmc[33] 3 53 + xmc[34] 3 54 + xmc[35] 3 55 + xmc[36] 3 56 + xmc[37] 3 57 + xmc[38] 3 58 + + Nc[3] 7 59 + bc[3] 2 60 + Mc[3] 2 61 + xmaxc[3] 6 62 + xmc[39] 3 63 + xmc[40] 3 64 + xmc[41] 3 65 + xmc[42] 3 66 + xmc[43] 3 67 + xmc[44] 3 68 + xmc[45] 3 69 + xmc[46] 3 70 + xmc[47] 3 71 + xmc[48] 3 72 + xmc[49] 3 73 + xmc[50] 3 74 + xmc[51] 3 75 + */ + + /* There are 76 parameters per frame. The first eight are + * unique. The remaining 68 are four identical subframes of + * 17 parameters each. gsm_implode converts from a representation + * of these parameters as values in one array of signed words + * to the "packed" version of a GSM frame. + */ + +# define LARc source +# define Nc *((gsm_signal (*) [17])(source + 8)) +# define bc *((gsm_signal (*) [17])(source + 9)) +# define Mc *((gsm_signal (*) [17])(source + 10)) +# define xmaxc *((gsm_signal (*) [17])(source + 11)) + +#ifdef WAV49 + if (s->wav_fmt) { + + uword sr = 0; + if (s->frame_index) { + sr = sr >> 6 | LARc[0] << 10; + sr = sr >> 6 | LARc[1] << 10; + *c++ = sr >> 4; + sr = sr >> 5 | LARc[2] << 11; + *c++ = sr >> 7; + sr = sr >> 5 | LARc[3] << 11; + sr = sr >> 4 | LARc[4] << 12; + *c++ = sr >> 6; + sr = sr >> 4 | LARc[5] << 12; + sr = sr >> 3 | LARc[6] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | LARc[7] << 13; + sr = sr >> 7 | Nc[0] << 9; + *c++ = sr >> 5; + sr = sr >> 2 | bc[0] << 14; + sr = sr >> 2 | Mc[0] << 14; + sr = sr >> 6 | xmaxc[0] << 10; + *c++ = sr >> 3; +#undef xmc +#define xmc (source + 12) + + sr = sr >> 3 | xmc[0] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[1] << 13; + sr = sr >> 3 | xmc[2] << 13; + sr = sr >> 3 | xmc[3] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[4] << 13; + sr = sr >> 3 | xmc[5] << 13; + sr = sr >> 3 | xmc[6] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[7] << 13; + sr = sr >> 3 | xmc[8] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[9] << 13; + sr = sr >> 3 | xmc[10] << 13; + sr = sr >> 3 | xmc[11] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[12] << 13; + sr = sr >> 7 | Nc[1] << 9; + *c++ = sr >> 5; + sr = sr >> 2 | bc[1] << 14; + sr = sr >> 2 | Mc[1] << 14; + sr = sr >> 6 | xmaxc[1] << 10; + *c++ = sr >> 3; +#undef xmc +#define xmc (source + 29 - 13) + + sr = sr >> 3 | xmc[13] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[14] << 13; + sr = sr >> 3 | xmc[15] << 13; + sr = sr >> 3 | xmc[16] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[17] << 13; + sr = sr >> 3 | xmc[18] << 13; + sr = sr >> 3 | xmc[19] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[20] << 13; + sr = sr >> 3 | xmc[21] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[22] << 13; + sr = sr >> 3 | xmc[23] << 13; + sr = sr >> 3 | xmc[24] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[25] << 13; + sr = sr >> 7 | Nc[2] << 9; + *c++ = sr >> 5; + sr = sr >> 2 | bc[2] << 14; + sr = sr >> 2 | Mc[2] << 14; + sr = sr >> 6 | xmaxc[2] << 10; + *c++ = sr >> 3; +#undef xmc +#define xmc (source + 46 - 26) + + sr = sr >> 3 | xmc[26] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[27] << 13; + sr = sr >> 3 | xmc[28] << 13; + sr = sr >> 3 | xmc[29] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[30] << 13; + sr = sr >> 3 | xmc[31] << 13; + sr = sr >> 3 | xmc[32] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[33] << 13; + sr = sr >> 3 | xmc[34] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[35] << 13; + sr = sr >> 3 | xmc[36] << 13; + sr = sr >> 3 | xmc[37] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[38] << 13; + sr = sr >> 7 | Nc[3] << 9; + *c++ = sr >> 5; + sr = sr >> 2 | bc[3] << 14; + sr = sr >> 2 | Mc[3] << 14; + sr = sr >> 6 | xmaxc[3] << 10; + *c++ = sr >> 3; +#undef xmc +#define xmc (source + 63 - 39) + + sr = sr >> 3 | xmc[39] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[40] << 13; + sr = sr >> 3 | xmc[41] << 13; + sr = sr >> 3 | xmc[42] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[43] << 13; + sr = sr >> 3 | xmc[44] << 13; + sr = sr >> 3 | xmc[45] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[46] << 13; + sr = sr >> 3 | xmc[47] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[48] << 13; + sr = sr >> 3 | xmc[49] << 13; + sr = sr >> 3 | xmc[50] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[51] << 13; + sr = sr >> 4; + *c = sr >> 8; + s->frame_chain = *c; + } + else { + sr = sr >> 4 | s->frame_chain << 12; + sr = sr >> 6 | LARc[0] << 10; + *c++ = sr >> 6; + sr = sr >> 6 | LARc[1] << 10; + *c++ = sr >> 8; + sr = sr >> 5 | LARc[2] << 11; + sr = sr >> 5 | LARc[3] << 11; + *c++ = sr >> 6; + sr = sr >> 4 | LARc[4] << 12; + sr = sr >> 4 | LARc[5] << 12; + *c++ = sr >> 6; + sr = sr >> 3 | LARc[6] << 13; + sr = sr >> 3 | LARc[7] << 13; + *c++ = sr >> 8; + sr = sr >> 7 | Nc[0] << 9; + sr = sr >> 2 | bc[0] << 14; + *c++ = sr >> 7; + sr = sr >> 2 | Mc[0] << 14; + sr = sr >> 6 | xmaxc[0] << 10; + *c++ = sr >> 7; +#undef xmc +#define xmc (source + 12) + + sr = sr >> 3 | xmc[0] << 13; + sr = sr >> 3 | xmc[1] << 13; + sr = sr >> 3 | xmc[2] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[3] << 13; + sr = sr >> 3 | xmc[4] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[5] << 13; + sr = sr >> 3 | xmc[6] << 13; + sr = sr >> 3 | xmc[7] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[8] << 13; + sr = sr >> 3 | xmc[9] << 13; + sr = sr >> 3 | xmc[10] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[11] << 13; + sr = sr >> 3 | xmc[12] << 13; + *c++ = sr >> 8; + sr = sr >> 7 | Nc[1] << 9; + sr = sr >> 2 | bc[1] << 14; + *c++ = sr >> 7; + sr = sr >> 2 | Mc[1] << 14; + sr = sr >> 6 | xmaxc[1] << 10; + *c++ = sr >> 7; +#undef xmc +#define xmc (source + 29 - 13) + + sr = sr >> 3 | xmc[13] << 13; + sr = sr >> 3 | xmc[14] << 13; + sr = sr >> 3 | xmc[15] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[16] << 13; + sr = sr >> 3 | xmc[17] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[18] << 13; + sr = sr >> 3 | xmc[19] << 13; + sr = sr >> 3 | xmc[20] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[21] << 13; + sr = sr >> 3 | xmc[22] << 13; + sr = sr >> 3 | xmc[23] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[24] << 13; + sr = sr >> 3 | xmc[25] << 13; + *c++ = sr >> 8; + sr = sr >> 7 | Nc[2] << 9; + sr = sr >> 2 | bc[2] << 14; + *c++ = sr >> 7; + sr = sr >> 2 | Mc[2] << 14; + sr = sr >> 6 | xmaxc[2] << 10; + *c++ = sr >> 7; +#undef xmc +#define xmc (source + 46 - 26) + + sr = sr >> 3 | xmc[26] << 13; + sr = sr >> 3 | xmc[27] << 13; + sr = sr >> 3 | xmc[28] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[29] << 13; + sr = sr >> 3 | xmc[30] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[31] << 13; + sr = sr >> 3 | xmc[32] << 13; + sr = sr >> 3 | xmc[33] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[34] << 13; + sr = sr >> 3 | xmc[35] << 13; + sr = sr >> 3 | xmc[36] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[37] << 13; + sr = sr >> 3 | xmc[38] << 13; + *c++ = sr >> 8; + sr = sr >> 7 | Nc[3] << 9; + sr = sr >> 2 | bc[3] << 14; + *c++ = sr >> 7; + sr = sr >> 2 | Mc[3] << 14; + sr = sr >> 6 | xmaxc[3] << 10; + *c++ = sr >> 7; +#undef xmc +#define xmc (source + 63 - 39) + + sr = sr >> 3 | xmc[39] << 13; + sr = sr >> 3 | xmc[40] << 13; + sr = sr >> 3 | xmc[41] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[42] << 13; + sr = sr >> 3 | xmc[43] << 13; + *c++ = sr >> 8; + sr = sr >> 3 | xmc[44] << 13; + sr = sr >> 3 | xmc[45] << 13; + sr = sr >> 3 | xmc[46] << 13; + *c++ = sr >> 7; + sr = sr >> 3 | xmc[47] << 13; + sr = sr >> 3 | xmc[48] << 13; + sr = sr >> 3 | xmc[49] << 13; + *c++ = sr >> 6; + sr = sr >> 3 | xmc[50] << 13; + sr = sr >> 3 | xmc[51] << 13; + *c++ = sr >> 8; + } + } + else +#endif + { + + *c++ = ((GSM_MAGIC & 0xF) << 4) /* 1 */ + | ((LARc[0] >> 2) & 0xF); + *c++ = ((LARc[0] & 0x3) << 6) + | (LARc[1] & 0x3F); + *c++ = ((LARc[2] & 0x1F) << 3) + | ((LARc[3] >> 2) & 0x7); + *c++ = ((LARc[3] & 0x3) << 6) + | ((LARc[4] & 0xF) << 2) + | ((LARc[5] >> 2) & 0x3); + *c++ = ((LARc[5] & 0x3) << 6) + | ((LARc[6] & 0x7) << 3) + | (LARc[7] & 0x7); + + + *c++ = ((Nc[0] & 0x7F) << 1) + + + | ((bc[0] >> 1) & 0x1); + *c++ = ((bc[0] & 0x1) << 7) + + + | ((Mc[0] & 0x3) << 5) + + | ((xmaxc[0] >> 1) & 0x1F); + *c++ = ((xmaxc[0] & 0x1) << 7) + +#undef xmc +#define xmc (source + 12) + + | ((xmc[0] & 0x7) << 4) + | ((xmc[1] & 0x7) << 1) + | ((xmc[2] >> 2) & 0x1); + *c++ = ((xmc[2] & 0x3) << 6) + | ((xmc[3] & 0x7) << 3) + | (xmc[4] & 0x7); + *c++ = ((xmc[5] & 0x7) << 5) /* 10 */ + | ((xmc[6] & 0x7) << 2) + | ((xmc[7] >> 1) & 0x3); + *c++ = ((xmc[7] & 0x1) << 7) + | ((xmc[8] & 0x7) << 4) + | ((xmc[9] & 0x7) << 1) + | ((xmc[10] >> 2) & 0x1); + *c++ = ((xmc[10] & 0x3) << 6) + | ((xmc[11] & 0x7) << 3) + | (xmc[12] & 0x7); + + + *c++ = ((Nc[1] & 0x7F) << 1) + + + | ((bc[1] >> 1) & 0x1); + *c++ = ((bc[1] & 0x1) << 7) + + + | ((Mc[1] & 0x3) << 5) + + + | ((xmaxc[1] >> 1) & 0x1F); + *c++ = ((xmaxc[1] & 0x1) << 7) + +#undef xmc +#define xmc (source + 29 - 13) + + | ((xmc[13] & 0x7) << 4) + | ((xmc[14] & 0x7) << 1) + | ((xmc[15] >> 2) & 0x1); + *c++ = ((xmc[15] & 0x3) << 6) + | ((xmc[16] & 0x7) << 3) + | (xmc[17] & 0x7); + *c++ = ((xmc[18] & 0x7) << 5) + | ((xmc[19] & 0x7) << 2) + | ((xmc[20] >> 1) & 0x3); + *c++ = ((xmc[20] & 0x1) << 7) + | ((xmc[21] & 0x7) << 4) + | ((xmc[22] & 0x7) << 1) + | ((xmc[23] >> 2) & 0x1); + *c++ = ((xmc[23] & 0x3) << 6) + | ((xmc[24] & 0x7) << 3) + | (xmc[25] & 0x7); + + + *c++ = ((Nc[2] & 0x7F) << 1) /* 20 */ + + + | ((bc[2] >> 1) & 0x1); + *c++ = ((bc[2] & 0x1) << 7) + + + | ((Mc[2] & 0x3) << 5) + + + | ((xmaxc[2] >> 1) & 0x1F); + *c++ = ((xmaxc[2] & 0x1) << 7) + +#undef xmc +#define xmc (source + 46 - 26) + + | ((xmc[26] & 0x7) << 4) + | ((xmc[27] & 0x7) << 1) + | ((xmc[28] >> 2) & 0x1); + *c++ = ((xmc[28] & 0x3) << 6) + | ((xmc[29] & 0x7) << 3) + | (xmc[30] & 0x7); + *c++ = ((xmc[31] & 0x7) << 5) + | ((xmc[32] & 0x7) << 2) + | ((xmc[33] >> 1) & 0x3); + *c++ = ((xmc[33] & 0x1) << 7) + | ((xmc[34] & 0x7) << 4) + | ((xmc[35] & 0x7) << 1) + | ((xmc[36] >> 2) & 0x1); + *c++ = ((xmc[36] & 0x3) << 6) + | ((xmc[37] & 0x7) << 3) + | (xmc[38] & 0x7); + + + *c++ = ((Nc[3] & 0x7F) << 1) + + + | ((bc[3] >> 1) & 0x1); + *c++ = ((bc[3] & 0x1) << 7) + + + | ((Mc[3] & 0x3) << 5) + + + | ((xmaxc[3] >> 1) & 0x1F); + *c++ = ((xmaxc[3] & 0x1) << 7) + +#undef xmc +#define xmc (source + 63 - 39) + + | ((xmc[39] & 0x7) << 4) + | ((xmc[40] & 0x7) << 1) + | ((xmc[41] >> 2) & 0x1); + *c++ = ((xmc[41] & 0x3) << 6) /* 30 */ + | ((xmc[42] & 0x7) << 3) + | (xmc[43] & 0x7); + *c++ = ((xmc[44] & 0x7) << 5) + | ((xmc[45] & 0x7) << 2) + | ((xmc[46] >> 1) & 0x3); + *c++ = ((xmc[46] & 0x1) << 7) + | ((xmc[47] & 0x7) << 4) + | ((xmc[48] & 0x7) << 1) + | ((xmc[49] >> 2) & 0x1); + *c++ = ((xmc[49] & 0x3) << 6) + | ((xmc[50] & 0x7) << 3) + | (xmc[51] & 0x7); + } +} diff --git a/V203/gsm/lib/gsm/src/gsm_option.c b/V203/gsm/lib/gsm/src/gsm_option.c new file mode 100644 index 0000000..274b7b1 --- /dev/null +++ b/V203/gsm/lib/gsm/src/gsm_option.c @@ -0,0 +1,69 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/gsm_option.c,v 1.3 1996/07/02 09:59:05 jutta Exp $ */ + +#include "private.h" + +#include "gsm.h" +#include "proto.h" + +int gsm_option P3((r, opt, val), gsm r, int opt, int * val) +{ + int result = -1; + + switch (opt) { + case GSM_OPT_LTP_CUT: +#ifdef LTP_CUT + result = r->ltp_cut; + if (val) r->ltp_cut = *val; +#endif + break; + + case GSM_OPT_VERBOSE: +#ifndef NDEBUG + result = r->verbose; + if (val) r->verbose = *val; +#endif + break; + + case GSM_OPT_FAST: + +#if defined(FAST) && defined(USE_FLOAT_MUL) + result = r->fast; + if (val) r->fast = !!*val; +#endif + break; + + case GSM_OPT_FRAME_CHAIN: + +#ifdef WAV49 + result = r->frame_chain; + if (val) r->frame_chain = *val; +#endif + break; + + case GSM_OPT_FRAME_INDEX: + +#ifdef WAV49 + result = r->frame_index; + if (val) r->frame_index = *val; +#endif + break; + + case GSM_OPT_WAV49: + +#ifdef WAV49 + result = r->wav_fmt; + if (val) r->wav_fmt = !!*val; +#endif + break; + + default: + break; + } + return result; +} diff --git a/V203/gsm/lib/gsm/src/gsm_print.c b/V203/gsm/lib/gsm/src/gsm_print.c new file mode 100644 index 0000000..47f753b --- /dev/null +++ b/V203/gsm/lib/gsm/src/gsm_print.c @@ -0,0 +1,167 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/gsm_print.c,v 1.1 1992/10/28 00:15:50 jutta Exp $ */ + +#include + +#include "private.h" + +#include "gsm.h" +#include "proto.h" + +int gsm_print P3((f, s, c), FILE * f, gsm s, gsm_byte * c) +{ + word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4]; + + /* GSM_MAGIC = (*c >> 4) & 0xF; */ + + if (((*c >> 4) & 0x0F) != GSM_MAGIC) return -1; + + LARc[0] = (*c++ & 0xF) << 2; /* 1 */ + LARc[0] |= (*c >> 6) & 0x3; + LARc[1] = *c++ & 0x3F; + LARc[2] = (*c >> 3) & 0x1F; + LARc[3] = (*c++ & 0x7) << 2; + LARc[3] |= (*c >> 6) & 0x3; + LARc[4] = (*c >> 2) & 0xF; + LARc[5] = (*c++ & 0x3) << 2; + LARc[5] |= (*c >> 6) & 0x3; + LARc[6] = (*c >> 3) & 0x7; + LARc[7] = *c++ & 0x7; + + + Nc[0] = (*c >> 1) & 0x7F; + bc[0] = (*c++ & 0x1) << 1; + bc[0] |= (*c >> 7) & 0x1; + Mc[0] = (*c >> 5) & 0x3; + xmaxc[0] = (*c++ & 0x1F) << 1; + xmaxc[0] |= (*c >> 7) & 0x1; + xmc[0] = (*c >> 4) & 0x7; + xmc[1] = (*c >> 1) & 0x7; + xmc[2] = (*c++ & 0x1) << 2; + xmc[2] |= (*c >> 6) & 0x3; + xmc[3] = (*c >> 3) & 0x7; + xmc[4] = *c++ & 0x7; + xmc[5] = (*c >> 5) & 0x7; + xmc[6] = (*c >> 2) & 0x7; + xmc[7] = (*c++ & 0x3) << 1; /* 10 */ + xmc[7] |= (*c >> 7) & 0x1; + xmc[8] = (*c >> 4) & 0x7; + xmc[9] = (*c >> 1) & 0x7; + xmc[10] = (*c++ & 0x1) << 2; + xmc[10] |= (*c >> 6) & 0x3; + xmc[11] = (*c >> 3) & 0x7; + xmc[12] = *c++ & 0x7; + + Nc[1] = (*c >> 1) & 0x7F; + bc[1] = (*c++ & 0x1) << 1; + bc[1] |= (*c >> 7) & 0x1; + Mc[1] = (*c >> 5) & 0x3; + xmaxc[1] = (*c++ & 0x1F) << 1; + xmaxc[1] |= (*c >> 7) & 0x1; + xmc[13] = (*c >> 4) & 0x7; + xmc[14] = (*c >> 1) & 0x7; + xmc[15] = (*c++ & 0x1) << 2; + xmc[15] |= (*c >> 6) & 0x3; + xmc[16] = (*c >> 3) & 0x7; + xmc[17] = *c++ & 0x7; + xmc[18] = (*c >> 5) & 0x7; + xmc[19] = (*c >> 2) & 0x7; + xmc[20] = (*c++ & 0x3) << 1; + xmc[20] |= (*c >> 7) & 0x1; + xmc[21] = (*c >> 4) & 0x7; + xmc[22] = (*c >> 1) & 0x7; + xmc[23] = (*c++ & 0x1) << 2; + xmc[23] |= (*c >> 6) & 0x3; + xmc[24] = (*c >> 3) & 0x7; + xmc[25] = *c++ & 0x7; + + + Nc[2] = (*c >> 1) & 0x7F; + bc[2] = (*c++ & 0x1) << 1; /* 20 */ + bc[2] |= (*c >> 7) & 0x1; + Mc[2] = (*c >> 5) & 0x3; + xmaxc[2] = (*c++ & 0x1F) << 1; + xmaxc[2] |= (*c >> 7) & 0x1; + xmc[26] = (*c >> 4) & 0x7; + xmc[27] = (*c >> 1) & 0x7; + xmc[28] = (*c++ & 0x1) << 2; + xmc[28] |= (*c >> 6) & 0x3; + xmc[29] = (*c >> 3) & 0x7; + xmc[30] = *c++ & 0x7; + xmc[31] = (*c >> 5) & 0x7; + xmc[32] = (*c >> 2) & 0x7; + xmc[33] = (*c++ & 0x3) << 1; + xmc[33] |= (*c >> 7) & 0x1; + xmc[34] = (*c >> 4) & 0x7; + xmc[35] = (*c >> 1) & 0x7; + xmc[36] = (*c++ & 0x1) << 2; + xmc[36] |= (*c >> 6) & 0x3; + xmc[37] = (*c >> 3) & 0x7; + xmc[38] = *c++ & 0x7; + + Nc[3] = (*c >> 1) & 0x7F; + bc[3] = (*c++ & 0x1) << 1; + bc[3] |= (*c >> 7) & 0x1; + Mc[3] = (*c >> 5) & 0x3; + xmaxc[3] = (*c++ & 0x1F) << 1; + xmaxc[3] |= (*c >> 7) & 0x1; + + xmc[39] = (*c >> 4) & 0x7; + xmc[40] = (*c >> 1) & 0x7; + xmc[41] = (*c++ & 0x1) << 2; + xmc[41] |= (*c >> 6) & 0x3; + xmc[42] = (*c >> 3) & 0x7; + xmc[43] = *c++ & 0x7; /* 30 */ + xmc[44] = (*c >> 5) & 0x7; + xmc[45] = (*c >> 2) & 0x7; + xmc[46] = (*c++ & 0x3) << 1; + xmc[46] |= (*c >> 7) & 0x1; + xmc[47] = (*c >> 4) & 0x7; + xmc[48] = (*c >> 1) & 0x7; + xmc[49] = (*c++ & 0x1) << 2; + xmc[49] |= (*c >> 6) & 0x3; + xmc[50] = (*c >> 3) & 0x7; + xmc[51] = *c & 0x7; /* 33 */ + + fprintf(f, + "LARc:\t%2.2d %2.2d %2.2d %2.2d %2.2d %2.2d %2.2d %2.2d\n", + LARc[0],LARc[1],LARc[2],LARc[3],LARc[4],LARc[5],LARc[6],LARc[7]); + + fprintf(f, "#1: Nc %4.4d bc %d Mc %d xmaxc %d\n", + Nc[0], bc[0], Mc[0], xmaxc[0]); + fprintf(f, +"\t%.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d\n", + xmc[0],xmc[1],xmc[2],xmc[3],xmc[4],xmc[5],xmc[6], + xmc[7],xmc[8],xmc[9],xmc[10],xmc[11],xmc[12] ); + + fprintf(f, "#2: Nc %4.4d bc %d Mc %d xmaxc %d\n", + Nc[1], bc[1], Mc[1], xmaxc[1]); + fprintf(f, +"\t%.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d\n", + xmc[13+0],xmc[13+1],xmc[13+2],xmc[13+3],xmc[13+4],xmc[13+5], + xmc[13+6], xmc[13+7],xmc[13+8],xmc[13+9],xmc[13+10],xmc[13+11], + xmc[13+12] ); + + fprintf(f, "#3: Nc %4.4d bc %d Mc %d xmaxc %d\n", + Nc[2], bc[2], Mc[2], xmaxc[2]); + fprintf(f, +"\t%.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d\n", + xmc[26+0],xmc[26+1],xmc[26+2],xmc[26+3],xmc[26+4],xmc[26+5], + xmc[26+6], xmc[26+7],xmc[26+8],xmc[26+9],xmc[26+10],xmc[26+11], + xmc[26+12] ); + + fprintf(f, "#4: Nc %4.4d bc %d Mc %d xmaxc %d\n", + Nc[3], bc[3], Mc[3], xmaxc[3]); + fprintf(f, +"\t%.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d %.2d\n", + xmc[39+0],xmc[39+1],xmc[39+2],xmc[39+3],xmc[39+4],xmc[39+5], + xmc[39+6], xmc[39+7],xmc[39+8],xmc[39+9],xmc[39+10],xmc[39+11], + xmc[39+12] ); + + return 0; +} diff --git a/V203/gsm/lib/gsm/src/long_term.c b/V203/gsm/lib/gsm/src/long_term.c new file mode 100644 index 0000000..b2d2d3f --- /dev/null +++ b/V203/gsm/lib/gsm/src/long_term.c @@ -0,0 +1,949 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/long_term.c,v 1.6 1996/07/02 12:33:19 jutta Exp $ */ + +#include +#include + +#include "private.h" + +#include "gsm.h" +#include "proto.h" + +/* + * 4.2.11 .. 4.2.12 LONG TERM PREDICTOR (LTP) SECTION + */ + + +/* + * This module computes the LTP gain (bc) and the LTP lag (Nc) + * for the long term analysis filter. This is done by calculating a + * maximum of the cross-correlation function between the current + * sub-segment short term residual signal d[0..39] (output of + * the short term analysis filter; for simplification the index + * of this array begins at 0 and ends at 39 for each sub-segment of the + * RPE-LTP analysis) and the previous reconstructed short term + * residual signal dp[ -120 .. -1 ]. A dynamic scaling must be + * performed to avoid overflow. + */ + + /* The next procedure exists in six versions. First two integer + * version (if USE_FLOAT_MUL is not defined); then four floating + * point versions, twice with proper scaling (USE_FLOAT_MUL defined), + * once without (USE_FLOAT_MUL and FAST defined, and fast run-time + * option used). Every pair has first a Cut version (see the -C + * option to toast or the LTP_CUT option to gsm_option()), then the + * uncut one. (For a detailed explanation of why this is altogether + * a bad idea, see Henry Spencer and Geoff Collyer, ``#ifdef Considered + * Harmful''.) + */ + +#ifndef USE_FLOAT_MUL + +#ifdef LTP_CUT + +static void Cut_Calculation_of_the_LTP_parameters P5((st, d,dp,bc_out,Nc_out), + + struct gsm_state * st, + + register word * d, /* [0..39] IN */ + register word * dp, /* [-120..-1] IN */ + word * bc_out, /* OUT */ + word * Nc_out /* OUT */ +) +{ + register int k, lambda; + word Nc, bc; + word wt[40]; + + longword L_result; + longword L_max, L_power; + word R, S, dmax, scal, best_k; + word ltp_cut; + + register word temp, wt_k; + + /* Search of the optimum scaling of d[0..39]. + */ + dmax = 0; + for (k = 0; k <= 39; k++) { + temp = d[k]; + temp = GSM_ABS( temp ); + if (temp > dmax) { + dmax = temp; + best_k = k; + } + } + temp = 0; + if (dmax == 0) scal = 0; + else { + assert(dmax > 0); + temp = gsm_norm( (longword)dmax << 16 ); + } + if (temp > 6) scal = 0; + else scal = 6 - temp; + assert(scal >= 0); + + /* Search for the maximum cross-correlation and coding of the LTP lag + */ + L_max = 0; + Nc = 40; /* index for the maximum cross-correlation */ + wt_k = SASR(d[best_k], scal); + + for (lambda = 40; lambda <= 120; lambda++) { + L_result = (longword)wt_k * dp[best_k - lambda]; + if (L_result > L_max) { + Nc = lambda; + L_max = L_result; + } + } + *Nc_out = Nc; + L_max <<= 1; + + /* Rescaling of L_max + */ + assert(scal <= 100 && scal >= -100); + L_max = L_max >> (6 - scal); /* sub(6, scal) */ + + assert( Nc <= 120 && Nc >= 40); + + /* Compute the power of the reconstructed short term residual + * signal dp[..] + */ + L_power = 0; + for (k = 0; k <= 39; k++) { + + register longword L_temp; + + L_temp = SASR( dp[k - Nc], 3 ); + L_power += L_temp * L_temp; + } + L_power <<= 1; /* from L_MULT */ + + /* Normalization of L_max and L_power + */ + + if (L_max <= 0) { + *bc_out = 0; + return; + } + if (L_max >= L_power) { + *bc_out = 3; + return; + } + + temp = gsm_norm( L_power ); + + R = SASR( L_max << temp, 16 ); + S = SASR( L_power << temp, 16 ); + + /* Coding of the LTP gain + */ + + /* Table 4.3a must be used to obtain the level DLB[i] for the + * quantization of the LTP gain b to get the coded version bc. + */ + for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; + *bc_out = bc; +} + +#endif /* LTP_CUT */ + +static void Calculation_of_the_LTP_parameters P4((d,dp,bc_out,Nc_out), + register word * d, /* [0..39] IN */ + register word * dp, /* [-120..-1] IN */ + word * bc_out, /* OUT */ + word * Nc_out /* OUT */ +) +{ + register int k, lambda; + word Nc, bc; + word wt[40]; + + longword L_max, L_power; + word R, S, dmax, scal; + register word temp; + + /* Search of the optimum scaling of d[0..39]. + */ + dmax = 0; + + for (k = 0; k <= 39; k++) { + temp = d[k]; + temp = GSM_ABS( temp ); + if (temp > dmax) dmax = temp; + } + + temp = 0; + if (dmax == 0) scal = 0; + else { + assert(dmax > 0); + temp = gsm_norm( (longword)dmax << 16 ); + } + + if (temp > 6) scal = 0; + else scal = 6 - temp; + + assert(scal >= 0); + + /* Initialization of a working array wt + */ + + for (k = 0; k <= 39; k++) wt[k] = SASR( d[k], scal ); + + /* Search for the maximum cross-correlation and coding of the LTP lag + */ + L_max = 0; + Nc = 40; /* index for the maximum cross-correlation */ + + for (lambda = 40; lambda <= 120; lambda++) { + +# undef STEP +# define STEP(k) (longword)wt[k] * dp[k - lambda] + + register longword L_result; + + L_result = STEP(0) ; L_result += STEP(1) ; + L_result += STEP(2) ; L_result += STEP(3) ; + L_result += STEP(4) ; L_result += STEP(5) ; + L_result += STEP(6) ; L_result += STEP(7) ; + L_result += STEP(8) ; L_result += STEP(9) ; + L_result += STEP(10) ; L_result += STEP(11) ; + L_result += STEP(12) ; L_result += STEP(13) ; + L_result += STEP(14) ; L_result += STEP(15) ; + L_result += STEP(16) ; L_result += STEP(17) ; + L_result += STEP(18) ; L_result += STEP(19) ; + L_result += STEP(20) ; L_result += STEP(21) ; + L_result += STEP(22) ; L_result += STEP(23) ; + L_result += STEP(24) ; L_result += STEP(25) ; + L_result += STEP(26) ; L_result += STEP(27) ; + L_result += STEP(28) ; L_result += STEP(29) ; + L_result += STEP(30) ; L_result += STEP(31) ; + L_result += STEP(32) ; L_result += STEP(33) ; + L_result += STEP(34) ; L_result += STEP(35) ; + L_result += STEP(36) ; L_result += STEP(37) ; + L_result += STEP(38) ; L_result += STEP(39) ; + + if (L_result > L_max) { + + Nc = lambda; + L_max = L_result; + } + } + + *Nc_out = Nc; + + L_max <<= 1; + + /* Rescaling of L_max + */ + assert(scal <= 100 && scal >= -100); + L_max = L_max >> (6 - scal); /* sub(6, scal) */ + + assert( Nc <= 120 && Nc >= 40); + + /* Compute the power of the reconstructed short term residual + * signal dp[..] + */ + L_power = 0; + for (k = 0; k <= 39; k++) { + + register longword L_temp; + + L_temp = SASR( dp[k - Nc], 3 ); + L_power += L_temp * L_temp; + } + L_power <<= 1; /* from L_MULT */ + + /* Normalization of L_max and L_power + */ + + if (L_max <= 0) { + *bc_out = 0; + return; + } + if (L_max >= L_power) { + *bc_out = 3; + return; + } + + temp = gsm_norm( L_power ); + + R = SASR( L_max << temp, 16 ); + S = SASR( L_power << temp, 16 ); + + /* Coding of the LTP gain + */ + + /* Table 4.3a must be used to obtain the level DLB[i] for the + * quantization of the LTP gain b to get the coded version bc. + */ + for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; + *bc_out = bc; +} + +#else /* USE_FLOAT_MUL */ + +#ifdef LTP_CUT + +static void Cut_Calculation_of_the_LTP_parameters P5((st, d,dp,bc_out,Nc_out), + struct gsm_state * st, /* IN */ + register word * d, /* [0..39] IN */ + register word * dp, /* [-120..-1] IN */ + word * bc_out, /* OUT */ + word * Nc_out /* OUT */ +) +{ + register int k, lambda; + word Nc, bc; + word ltp_cut; + + float wt_float[40]; + float dp_float_base[120], * dp_float = dp_float_base + 120; + + longword L_max, L_power; + word R, S, dmax, scal; + register word temp; + + /* Search of the optimum scaling of d[0..39]. + */ + dmax = 0; + + for (k = 0; k <= 39; k++) { + temp = d[k]; + temp = GSM_ABS( temp ); + if (temp > dmax) dmax = temp; + } + + temp = 0; + if (dmax == 0) scal = 0; + else { + assert(dmax > 0); + temp = gsm_norm( (longword)dmax << 16 ); + } + + if (temp > 6) scal = 0; + else scal = 6 - temp; + + assert(scal >= 0); + ltp_cut = (longword)SASR(dmax, scal) * st->ltp_cut / 100; + + + /* Initialization of a working array wt + */ + + for (k = 0; k < 40; k++) { + register word w = SASR( d[k], scal ); + if (w < 0 ? w > -ltp_cut : w < ltp_cut) { + wt_float[k] = 0.0; + } + else { + wt_float[k] = w; + } + } + for (k = -120; k < 0; k++) dp_float[k] = dp[k]; + + /* Search for the maximum cross-correlation and coding of the LTP lag + */ + L_max = 0; + Nc = 40; /* index for the maximum cross-correlation */ + + for (lambda = 40; lambda <= 120; lambda += 9) { + + /* Calculate L_result for l = lambda .. lambda + 9. + */ + register float *lp = dp_float - lambda; + + register float W; + register float a = lp[-8], b = lp[-7], c = lp[-6], + d = lp[-5], e = lp[-4], f = lp[-3], + g = lp[-2], h = lp[-1]; + register float E; + register float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0, + S5 = 0, S6 = 0, S7 = 0, S8 = 0; + +# undef STEP +# define STEP(K, a, b, c, d, e, f, g, h) \ + if ((W = wt_float[K]) != 0.0) { \ + E = W * a; S8 += E; \ + E = W * b; S7 += E; \ + E = W * c; S6 += E; \ + E = W * d; S5 += E; \ + E = W * e; S4 += E; \ + E = W * f; S3 += E; \ + E = W * g; S2 += E; \ + E = W * h; S1 += E; \ + a = lp[K]; \ + E = W * a; S0 += E; } else (a = lp[K]) + +# define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h) +# define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a) +# define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b) +# define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c) +# define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d) +# define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e) +# define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f) +# define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g) + + STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3); + STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7); + + STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11); + STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15); + + STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19); + STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23); + + STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27); + STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31); + + STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35); + STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39); + + if (S0 > L_max) { L_max = S0; Nc = lambda; } + if (S1 > L_max) { L_max = S1; Nc = lambda + 1; } + if (S2 > L_max) { L_max = S2; Nc = lambda + 2; } + if (S3 > L_max) { L_max = S3; Nc = lambda + 3; } + if (S4 > L_max) { L_max = S4; Nc = lambda + 4; } + if (S5 > L_max) { L_max = S5; Nc = lambda + 5; } + if (S6 > L_max) { L_max = S6; Nc = lambda + 6; } + if (S7 > L_max) { L_max = S7; Nc = lambda + 7; } + if (S8 > L_max) { L_max = S8; Nc = lambda + 8; } + + } + *Nc_out = Nc; + + L_max <<= 1; + + /* Rescaling of L_max + */ + assert(scal <= 100 && scal >= -100); + L_max = L_max >> (6 - scal); /* sub(6, scal) */ + + assert( Nc <= 120 && Nc >= 40); + + /* Compute the power of the reconstructed short term residual + * signal dp[..] + */ + L_power = 0; + for (k = 0; k <= 39; k++) { + + register longword L_temp; + + L_temp = SASR( dp[k - Nc], 3 ); + L_power += L_temp * L_temp; + } + L_power <<= 1; /* from L_MULT */ + + /* Normalization of L_max and L_power + */ + + if (L_max <= 0) { + *bc_out = 0; + return; + } + if (L_max >= L_power) { + *bc_out = 3; + return; + } + + temp = gsm_norm( L_power ); + + R = SASR( L_max << temp, 16 ); + S = SASR( L_power << temp, 16 ); + + /* Coding of the LTP gain + */ + + /* Table 4.3a must be used to obtain the level DLB[i] for the + * quantization of the LTP gain b to get the coded version bc. + */ + for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; + *bc_out = bc; +} + +#endif /* LTP_CUT */ + +static void Calculation_of_the_LTP_parameters P4((d,dp,bc_out,Nc_out), + register word * d, /* [0..39] IN */ + register word * dp, /* [-120..-1] IN */ + word * bc_out, /* OUT */ + word * Nc_out /* OUT */ +) +{ + register int k, lambda; + word Nc, bc; + + float wt_float[40]; + float dp_float_base[120], * dp_float = dp_float_base + 120; + + longword L_max, L_power; + word R, S, dmax, scal; + register word temp; + + /* Search of the optimum scaling of d[0..39]. + */ + dmax = 0; + + for (k = 0; k <= 39; k++) { + temp = d[k]; + temp = GSM_ABS( temp ); + if (temp > dmax) dmax = temp; + } + + temp = 0; + if (dmax == 0) scal = 0; + else { + assert(dmax > 0); + temp = gsm_norm( (longword)dmax << 16 ); + } + + if (temp > 6) scal = 0; + else scal = 6 - temp; + + assert(scal >= 0); + + /* Initialization of a working array wt + */ + + for (k = 0; k < 40; k++) wt_float[k] = SASR( d[k], scal ); + for (k = -120; k < 0; k++) dp_float[k] = dp[k]; + + /* Search for the maximum cross-correlation and coding of the LTP lag + */ + L_max = 0; + Nc = 40; /* index for the maximum cross-correlation */ + + for (lambda = 40; lambda <= 120; lambda += 9) { + + /* Calculate L_result for l = lambda .. lambda + 9. + */ + register float *lp = dp_float - lambda; + + register float W; + register float a = lp[-8], b = lp[-7], c = lp[-6], + d = lp[-5], e = lp[-4], f = lp[-3], + g = lp[-2], h = lp[-1]; + register float E; + register float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0, + S5 = 0, S6 = 0, S7 = 0, S8 = 0; + +# undef STEP +# define STEP(K, a, b, c, d, e, f, g, h) \ + W = wt_float[K]; \ + E = W * a; S8 += E; \ + E = W * b; S7 += E; \ + E = W * c; S6 += E; \ + E = W * d; S5 += E; \ + E = W * e; S4 += E; \ + E = W * f; S3 += E; \ + E = W * g; S2 += E; \ + E = W * h; S1 += E; \ + a = lp[K]; \ + E = W * a; S0 += E + +# define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h) +# define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a) +# define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b) +# define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c) +# define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d) +# define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e) +# define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f) +# define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g) + + STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3); + STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7); + + STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11); + STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15); + + STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19); + STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23); + + STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27); + STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31); + + STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35); + STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39); + + if (S0 > L_max) { L_max = S0; Nc = lambda; } + if (S1 > L_max) { L_max = S1; Nc = lambda + 1; } + if (S2 > L_max) { L_max = S2; Nc = lambda + 2; } + if (S3 > L_max) { L_max = S3; Nc = lambda + 3; } + if (S4 > L_max) { L_max = S4; Nc = lambda + 4; } + if (S5 > L_max) { L_max = S5; Nc = lambda + 5; } + if (S6 > L_max) { L_max = S6; Nc = lambda + 6; } + if (S7 > L_max) { L_max = S7; Nc = lambda + 7; } + if (S8 > L_max) { L_max = S8; Nc = lambda + 8; } + } + *Nc_out = Nc; + + L_max <<= 1; + + /* Rescaling of L_max + */ + assert(scal <= 100 && scal >= -100); + L_max = L_max >> (6 - scal); /* sub(6, scal) */ + + assert( Nc <= 120 && Nc >= 40); + + /* Compute the power of the reconstructed short term residual + * signal dp[..] + */ + L_power = 0; + for (k = 0; k <= 39; k++) { + + register longword L_temp; + + L_temp = SASR( dp[k - Nc], 3 ); + L_power += L_temp * L_temp; + } + L_power <<= 1; /* from L_MULT */ + + /* Normalization of L_max and L_power + */ + + if (L_max <= 0) { + *bc_out = 0; + return; + } + if (L_max >= L_power) { + *bc_out = 3; + return; + } + + temp = gsm_norm( L_power ); + + R = SASR( L_max << temp, 16 ); + S = SASR( L_power << temp, 16 ); + + /* Coding of the LTP gain + */ + + /* Table 4.3a must be used to obtain the level DLB[i] for the + * quantization of the LTP gain b to get the coded version bc. + */ + for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break; + *bc_out = bc; +} + +#ifdef FAST +#ifdef LTP_CUT + +static void Cut_Fast_Calculation_of_the_LTP_parameters P5((st, + d,dp,bc_out,Nc_out), + struct gsm_state * st, /* IN */ + register word * d, /* [0..39] IN */ + register word * dp, /* [-120..-1] IN */ + word * bc_out, /* OUT */ + word * Nc_out /* OUT */ +) +{ + register int k, lambda; + register float wt_float; + word Nc, bc; + word wt_max, best_k, ltp_cut; + + float dp_float_base[120], * dp_float = dp_float_base + 120; + + register float L_result, L_max, L_power; + + wt_max = 0; + + for (k = 0; k < 40; ++k) { + if ( d[k] > wt_max) wt_max = d[best_k = k]; + else if (-d[k] > wt_max) wt_max = -d[best_k = k]; + } + + assert(wt_max >= 0); + wt_float = (float)wt_max; + + for (k = -120; k < 0; ++k) dp_float[k] = (float)dp[k]; + + /* Search for the maximum cross-correlation and coding of the LTP lag + */ + L_max = 0; + Nc = 40; /* index for the maximum cross-correlation */ + + for (lambda = 40; lambda <= 120; lambda++) { + L_result = wt_float * dp_float[best_k - lambda]; + if (L_result > L_max) { + Nc = lambda; + L_max = L_result; + } + } + + *Nc_out = Nc; + if (L_max <= 0.) { + *bc_out = 0; + return; + } + + /* Compute the power of the reconstructed short term residual + * signal dp[..] + */ + dp_float -= Nc; + L_power = 0; + for (k = 0; k < 40; ++k) { + register float f = dp_float[k]; + L_power += f * f; + } + + if (L_max >= L_power) { + *bc_out = 3; + return; + } + + /* Coding of the LTP gain + * Table 4.3a must be used to obtain the level DLB[i] for the + * quantization of the LTP gain b to get the coded version bc. + */ + lambda = L_max / L_power * 32768.; + for (bc = 0; bc <= 2; ++bc) if (lambda <= gsm_DLB[bc]) break; + *bc_out = bc; +} + +#endif /* LTP_CUT */ + +static void Fast_Calculation_of_the_LTP_parameters P4((d,dp,bc_out,Nc_out), + register word * d, /* [0..39] IN */ + register word * dp, /* [-120..-1] IN */ + word * bc_out, /* OUT */ + word * Nc_out /* OUT */ +) +{ + register int k, lambda; + word Nc, bc; + + float wt_float[40]; + float dp_float_base[120], * dp_float = dp_float_base + 120; + + register float L_max, L_power; + + for (k = 0; k < 40; ++k) wt_float[k] = (float)d[k]; + for (k = -120; k < 0; ++k) dp_float[k] = (float)dp[k]; + + /* Search for the maximum cross-correlation and coding of the LTP lag + */ + L_max = 0; + Nc = 40; /* index for the maximum cross-correlation */ + + for (lambda = 40; lambda <= 120; lambda += 9) { + + /* Calculate L_result for l = lambda .. lambda + 9. + */ + register float *lp = dp_float - lambda; + + register float W; + register float a = lp[-8], b = lp[-7], c = lp[-6], + d = lp[-5], e = lp[-4], f = lp[-3], + g = lp[-2], h = lp[-1]; + register float E; + register float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0, + S5 = 0, S6 = 0, S7 = 0, S8 = 0; + +# undef STEP +# define STEP(K, a, b, c, d, e, f, g, h) \ + W = wt_float[K]; \ + E = W * a; S8 += E; \ + E = W * b; S7 += E; \ + E = W * c; S6 += E; \ + E = W * d; S5 += E; \ + E = W * e; S4 += E; \ + E = W * f; S3 += E; \ + E = W * g; S2 += E; \ + E = W * h; S1 += E; \ + a = lp[K]; \ + E = W * a; S0 += E + +# define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h) +# define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a) +# define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b) +# define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c) +# define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d) +# define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e) +# define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f) +# define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g) + + STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3); + STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7); + + STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11); + STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15); + + STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19); + STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23); + + STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27); + STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31); + + STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35); + STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39); + + if (S0 > L_max) { L_max = S0; Nc = lambda; } + if (S1 > L_max) { L_max = S1; Nc = lambda + 1; } + if (S2 > L_max) { L_max = S2; Nc = lambda + 2; } + if (S3 > L_max) { L_max = S3; Nc = lambda + 3; } + if (S4 > L_max) { L_max = S4; Nc = lambda + 4; } + if (S5 > L_max) { L_max = S5; Nc = lambda + 5; } + if (S6 > L_max) { L_max = S6; Nc = lambda + 6; } + if (S7 > L_max) { L_max = S7; Nc = lambda + 7; } + if (S8 > L_max) { L_max = S8; Nc = lambda + 8; } + } + *Nc_out = Nc; + + if (L_max <= 0.) { + *bc_out = 0; + return; + } + + /* Compute the power of the reconstructed short term residual + * signal dp[..] + */ + dp_float -= Nc; + L_power = 0; + for (k = 0; k < 40; ++k) { + register float f = dp_float[k]; + L_power += f * f; + } + + if (L_max >= L_power) { + *bc_out = 3; + return; + } + + /* Coding of the LTP gain + * Table 4.3a must be used to obtain the level DLB[i] for the + * quantization of the LTP gain b to get the coded version bc. + */ + lambda = L_max / L_power * 32768.; + for (bc = 0; bc <= 2; ++bc) if (lambda <= gsm_DLB[bc]) break; + *bc_out = bc; +} + +#endif /* FAST */ +#endif /* USE_FLOAT_MUL */ + + +/* 4.2.12 */ + +static void Long_term_analysis_filtering P6((bc,Nc,dp,d,dpp,e), + word bc, /* IN */ + word Nc, /* IN */ + register word * dp, /* previous d [-120..-1] IN */ + register word * d, /* d [0..39] IN */ + register word * dpp, /* estimate [0..39] OUT */ + register word * e /* long term res. signal [0..39] OUT */ +) +/* + * In this part, we have to decode the bc parameter to compute + * the samples of the estimate dpp[0..39]. The decoding of bc needs the + * use of table 4.3b. The long term residual signal e[0..39] + * is then calculated to be fed to the RPE encoding section. + */ +{ + register int k; + register longword ltmp; + +# undef STEP +# define STEP(BP) \ + for (k = 0; k <= 39; k++) { \ + dpp[k] = GSM_MULT_R( BP, dp[k - Nc]); \ + e[k] = GSM_SUB( d[k], dpp[k] ); \ + } + + switch (bc) { + case 0: STEP( 3277 ); break; + case 1: STEP( 11469 ); break; + case 2: STEP( 21299 ); break; + case 3: STEP( 32767 ); break; + } +} + +void Gsm_Long_Term_Predictor P7((S,d,dp,e,dpp,Nc,bc), /* 4x for 160 samples */ + + struct gsm_state * S, + + word * d, /* [0..39] residual signal IN */ + word * dp, /* [-120..-1] d' IN */ + + word * e, /* [0..39] OUT */ + word * dpp, /* [0..39] OUT */ + word * Nc, /* correlation lag OUT */ + word * bc /* gain factor OUT */ +) +{ + assert( d ); assert( dp ); assert( e ); + assert( dpp); assert( Nc ); assert( bc ); + +#if defined(FAST) && defined(USE_FLOAT_MUL) + if (S->fast) +#if defined (LTP_CUT) + if (S->ltp_cut) + Cut_Fast_Calculation_of_the_LTP_parameters(S, + d, dp, bc, Nc); + else +#endif /* LTP_CUT */ + Fast_Calculation_of_the_LTP_parameters(d, dp, bc, Nc ); + else +#endif /* FAST & USE_FLOAT_MUL */ +#ifdef LTP_CUT + if (S->ltp_cut) + Cut_Calculation_of_the_LTP_parameters(S, d, dp, bc, Nc); + else +#endif + Calculation_of_the_LTP_parameters(d, dp, bc, Nc); + + Long_term_analysis_filtering( *bc, *Nc, dp, d, dpp, e ); +} + +/* 4.3.2 */ +void Gsm_Long_Term_Synthesis_Filtering P5((S,Ncr,bcr,erp,drp), + struct gsm_state * S, + + word Ncr, + word bcr, + register word * erp, /* [0..39] IN */ + register word * drp /* [-120..-1] IN, [-120..40] OUT */ +) +/* + * This procedure uses the bcr and Ncr parameter to realize the + * long term synthesis filtering. The decoding of bcr needs + * table 4.3b. + */ +{ + register longword ltmp; /* for ADD */ + register int k; + word brp, drpp, Nr; + + /* Check the limits of Nr. + */ + Nr = Ncr < 40 || Ncr > 120 ? S->nrp : Ncr; + S->nrp = Nr; + assert(Nr >= 40 && Nr <= 120); + + /* Decoding of the LTP gain bcr + */ + brp = gsm_QLB[ bcr ]; + + /* Computation of the reconstructed short term residual + * signal drp[0..39] + */ + assert(brp != MIN_WORD); + + for (k = 0; k <= 39; k++) { + drpp = GSM_MULT_R( brp, drp[ k - Nr ] ); + drp[k] = GSM_ADD( erp[k], drpp ); + } + + /* + * Update of the reconstructed short term residual signal + * drp[ -1..-120 ] + */ + + for (k = 0; k <= 119; k++) drp[ -120 + k ] = drp[ -80 + k ]; +} diff --git a/V203/gsm/lib/gsm/src/lpc.c b/V203/gsm/lib/gsm/src/lpc.c new file mode 100644 index 0000000..21b9faf --- /dev/null +++ b/V203/gsm/lib/gsm/src/lpc.c @@ -0,0 +1,341 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/lpc.c,v 1.5 1994/12/30 23:14:54 jutta Exp $ */ + +#include +#include + +#include "private.h" + +#include "gsm.h" +#include "proto.h" + +#undef P + +/* + * 4.2.4 .. 4.2.7 LPC ANALYSIS SECTION + */ + +/* 4.2.4 */ + + +static void Autocorrelation P2((s, L_ACF), + word * s, /* [0..159] IN/OUT */ + longword * L_ACF) /* [0..8] OUT */ +/* + * The goal is to compute the array L_ACF[k]. The signal s[i] must + * be scaled in order to avoid an overflow situation. + */ +{ + register int k, i; + + word temp, smax, scalauto; + +#ifdef USE_FLOAT_MUL + float float_s[160]; +#endif + + /* Dynamic scaling of the array s[0..159] + */ + + /* Search for the maximum. + */ + smax = 0; + for (k = 0; k <= 159; k++) { + temp = GSM_ABS( s[k] ); + if (temp > smax) smax = temp; + } + + /* Computation of the scaling factor. + */ + if (smax == 0) scalauto = 0; + else { + assert(smax > 0); + scalauto = 4 - gsm_norm( (longword)smax << 16 );/* sub(4,..) */ + } + + /* Scaling of the array s[0...159] + */ + + if (scalauto > 0) { + +# ifdef USE_FLOAT_MUL +# define SCALE(n) \ + case n: for (k = 0; k <= 159; k++) \ + float_s[k] = (float) \ + (s[k] = GSM_MULT_R(s[k], 16384 >> (n-1)));\ + break; +# else +# define SCALE(n) \ + case n: for (k = 0; k <= 159; k++) \ + s[k] = GSM_MULT_R( s[k], 16384 >> (n-1) );\ + break; +# endif /* USE_FLOAT_MUL */ + + switch (scalauto) { + SCALE(1) + SCALE(2) + SCALE(3) + SCALE(4) + } +# undef SCALE + } +# ifdef USE_FLOAT_MUL + else for (k = 0; k <= 159; k++) float_s[k] = (float) s[k]; +# endif + + /* Compute the L_ACF[..]. + */ + { +# ifdef USE_FLOAT_MUL + register float * sp = float_s; + register float sl = *sp; + +# define STEP(k) L_ACF[k] += (longword)(sl * sp[ -(k) ]); +# else + word * sp = s; + word sl = *sp; + +# define STEP(k) L_ACF[k] += ((longword)sl * sp[ -(k) ]); +# endif + +# define NEXTI sl = *++sp + + + for (k = 9; k--; L_ACF[k] = 0) ; + + STEP (0); + NEXTI; + STEP(0); STEP(1); + NEXTI; + STEP(0); STEP(1); STEP(2); + NEXTI; + STEP(0); STEP(1); STEP(2); STEP(3); + NEXTI; + STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); + NEXTI; + STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); + NEXTI; + STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); + NEXTI; + STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); STEP(7); + + for (i = 8; i <= 159; i++) { + + NEXTI; + + STEP(0); + STEP(1); STEP(2); STEP(3); STEP(4); + STEP(5); STEP(6); STEP(7); STEP(8); + } + + for (k = 9; k--; L_ACF[k] <<= 1) ; + + } + /* Rescaling of the array s[0..159] + */ + if (scalauto > 0) { + assert(scalauto <= 4); + for (k = 160; k--; *s++ <<= scalauto) ; + } +} + +#if defined(USE_FLOAT_MUL) && defined(FAST) + +static void Fast_Autocorrelation P2((s, L_ACF), + word * s, /* [0..159] IN/OUT */ + longword * L_ACF) /* [0..8] OUT */ +{ + register int k, i; + float f_L_ACF[9]; + float scale; + + float s_f[160]; + register float *sf = s_f; + + for (i = 0; i < 160; ++i) sf[i] = s[i]; + for (k = 0; k <= 8; k++) { + register float L_temp2 = 0; + register float *sfl = sf - k; + for (i = k; i < 160; ++i) L_temp2 += sf[i] * sfl[i]; + f_L_ACF[k] = L_temp2; + } + scale = MAX_LONGWORD / f_L_ACF[0]; + + for (k = 0; k <= 8; k++) { + L_ACF[k] = f_L_ACF[k] * scale; + } +} +#endif /* defined (USE_FLOAT_MUL) && defined (FAST) */ + +/* 4.2.5 */ + +static void Reflection_coefficients P2( (L_ACF, r), + longword * L_ACF, /* 0...8 IN */ + register word * r /* 0...7 OUT */ +) +{ + register int i, m, n; + register word temp; + register longword ltmp; + word ACF[9]; /* 0..8 */ + word P[ 9]; /* 0..8 */ + word K[ 9]; /* 2..8 */ + + /* Schur recursion with 16 bits arithmetic. + */ + + if (L_ACF[0] == 0) { + for (i = 8; i--; *r++ = 0) ; + return; + } + + assert( L_ACF[0] != 0 ); + temp = gsm_norm( L_ACF[0] ); + + assert(temp >= 0 && temp < 32); + + /* ? overflow ? */ + for (i = 0; i <= 8; i++) ACF[i] = SASR( L_ACF[i] << temp, 16 ); + + /* Initialize array P[..] and K[..] for the recursion. + */ + + for (i = 1; i <= 7; i++) K[ i ] = ACF[ i ]; + for (i = 0; i <= 8; i++) P[ i ] = ACF[ i ]; + + /* Compute reflection coefficients + */ + for (n = 1; n <= 8; n++, r++) { + + temp = P[1]; + temp = GSM_ABS(temp); + if (P[0] < temp) { + for (i = n; i <= 8; i++) *r++ = 0; + return; + } + + *r = gsm_div( temp, P[0] ); + + assert(*r >= 0); + if (P[1] > 0) *r = -*r; /* r[n] = sub(0, r[n]) */ + assert (*r != MIN_WORD); + if (n == 8) return; + + /* Schur recursion + */ + temp = GSM_MULT_R( P[1], *r ); + P[0] = GSM_ADD( P[0], temp ); + + for (m = 1; m <= 8 - n; m++) { + temp = GSM_MULT_R( K[ m ], *r ); + P[m] = GSM_ADD( P[ m+1 ], temp ); + + temp = GSM_MULT_R( P[ m+1 ], *r ); + K[m] = GSM_ADD( K[ m ], temp ); + } + } +} + +/* 4.2.6 */ + +static void Transformation_to_Log_Area_Ratios P1((r), + register word * r /* 0..7 IN/OUT */ +) +/* + * The following scaling for r[..] and LAR[..] has been used: + * + * r[..] = integer( real_r[..]*32768. ); -1 <= real_r < 1. + * LAR[..] = integer( real_LAR[..] * 16384 ); + * with -1.625 <= real_LAR <= 1.625 + */ +{ + register word temp; + register int i; + + + /* Computation of the LAR[0..7] from the r[0..7] + */ + for (i = 1; i <= 8; i++, r++) { + + temp = *r; + temp = GSM_ABS(temp); + assert(temp >= 0); + + if (temp < 22118) { + temp >>= 1; + } else if (temp < 31130) { + assert( temp >= 11059 ); + temp -= 11059; + } else { + assert( temp >= 26112 ); + temp -= 26112; + temp <<= 2; + } + + *r = *r < 0 ? -temp : temp; + assert( *r != MIN_WORD ); + } +} + +/* 4.2.7 */ + +static void Quantization_and_coding P1((LAR), + register word * LAR /* [0..7] IN/OUT */ +) +{ + register word temp; + longword ltmp; + + + /* This procedure needs four tables; the following equations + * give the optimum scaling for the constants: + * + * A[0..7] = integer( real_A[0..7] * 1024 ) + * B[0..7] = integer( real_B[0..7] * 512 ) + * MAC[0..7] = maximum of the LARc[0..7] + * MIC[0..7] = minimum of the LARc[0..7] + */ + +# undef STEP +# define STEP( A, B, MAC, MIC ) \ + temp = GSM_MULT( A, *LAR ); \ + temp = GSM_ADD( temp, B ); \ + temp = GSM_ADD( temp, 256 ); \ + temp = SASR( temp, 9 ); \ + *LAR = temp>MAC ? MAC - MIC : (tempfast) Fast_Autocorrelation (s, L_ACF ); + else +#endif + Autocorrelation (s, L_ACF ); + Reflection_coefficients (L_ACF, LARc ); + Transformation_to_Log_Area_Ratios (LARc); + Quantization_and_coding (LARc); +} diff --git a/V203/gsm/lib/gsm/src/preprocess.c b/V203/gsm/lib/gsm/src/preprocess.c new file mode 100644 index 0000000..fa16efe --- /dev/null +++ b/V203/gsm/lib/gsm/src/preprocess.c @@ -0,0 +1,113 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/preprocess.c,v 1.2 1994/05/10 20:18:45 jutta Exp $ */ + +#include +#include + +#include "private.h" + +#include "gsm.h" +#include "proto.h" + +/* 4.2.0 .. 4.2.3 PREPROCESSING SECTION + * + * After A-law to linear conversion (or directly from the + * Ato D converter) the following scaling is assumed for + * input to the RPE-LTP algorithm: + * + * in: 0.1.....................12 + * S.v.v.v.v.v.v.v.v.v.v.v.v.*.*.* + * + * Where S is the sign bit, v a valid bit, and * a "don't care" bit. + * The original signal is called sop[..] + * + * out: 0.1................... 12 + * S.S.v.v.v.v.v.v.v.v.v.v.v.v.0.0 + */ + + +void Gsm_Preprocess P3((S, s, so), + struct gsm_state * S, + word * s, + word * so ) /* [0..159] IN/OUT */ +{ + + word z1 = S->z1; + longword L_z2 = S->L_z2; + word mp = S->mp; + + word s1; + longword L_s2; + + longword L_temp; + + word msp, lsp; + word SO; + + longword ltmp; /* for ADD */ + ulongword utmp; /* for L_ADD */ + + register int k = 160; + + while (k--) { + + /* 4.2.1 Downscaling of the input signal + */ + SO = SASR( *s, 3 ) << 2; + s++; + + assert (SO >= -0x4000); /* downscaled by */ + assert (SO <= 0x3FFC); /* previous routine. */ + + + /* 4.2.2 Offset compensation + * + * This part implements a high-pass filter and requires extended + * arithmetic precision for the recursive part of this filter. + * The input of this procedure is the array so[0...159] and the + * output the array sof[ 0...159 ]. + */ + /* Compute the non-recursive part + */ + + s1 = SO - z1; /* s1 = gsm_sub( *so, z1 ); */ + z1 = SO; + + assert(s1 != MIN_WORD); + + /* Compute the recursive part + */ + L_s2 = s1; + L_s2 <<= 15; + + /* Execution of a 31 bv 16 bits multiplication + */ + + msp = SASR( L_z2, 15 ); + lsp = L_z2-((longword)msp<<15); /* gsm_L_sub(L_z2,(msp<<15)); */ + + L_s2 += GSM_MULT_R( lsp, 32735 ); + L_temp = (longword)msp * 32735; /* GSM_L_MULT(msp,32735) >> 1;*/ + L_z2 = GSM_L_ADD( L_temp, L_s2 ); + + /* Compute sof[k] with rounding + */ + L_temp = GSM_L_ADD( L_z2, 16384 ); + + /* 4.2.3 Preemphasis + */ + + msp = GSM_MULT_R( mp, -28180 ); + mp = SASR( L_temp, 15 ); + *so++ = GSM_ADD( mp, msp ); + } + + S->z1 = z1; + S->L_z2 = L_z2; + S->mp = mp; +} diff --git a/V203/gsm/lib/gsm/src/rpe.c b/V203/gsm/lib/gsm/src/rpe.c new file mode 100644 index 0000000..eda4f18 --- /dev/null +++ b/V203/gsm/lib/gsm/src/rpe.c @@ -0,0 +1,488 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/rpe.c,v 1.3 1994/05/10 20:18:46 jutta Exp $ */ + +#include +#include + +#include "private.h" + +#include "gsm.h" +#include "proto.h" + +/* 4.2.13 .. 4.2.17 RPE ENCODING SECTION + */ + +/* 4.2.13 */ + +static void Weighting_filter P2((e, x), + register word * e, /* signal [-5..0.39.44] IN */ + word * x /* signal [0..39] OUT */ +) +/* + * The coefficients of the weighting filter are stored in a table + * (see table 4.4). The following scaling is used: + * + * H[0..10] = integer( real_H[ 0..10] * 8192 ); + */ +{ + /* word wt[ 50 ]; */ + + register longword L_result; + register int k /* , i */ ; + + /* Initialization of a temporary working array wt[0...49] + */ + + /* for (k = 0; k <= 4; k++) wt[k] = 0; + * for (k = 5; k <= 44; k++) wt[k] = *e++; + * for (k = 45; k <= 49; k++) wt[k] = 0; + * + * (e[-5..-1] and e[40..44] are allocated by the caller, + * are initially zero and are not written anywhere.) + */ + e -= 5; + + /* Compute the signal x[0..39] + */ + for (k = 0; k <= 39; k++) { + + L_result = 8192 >> 1; + + /* for (i = 0; i <= 10; i++) { + * L_temp = GSM_L_MULT( wt[k+i], gsm_H[i] ); + * L_result = GSM_L_ADD( L_result, L_temp ); + * } + */ + +#undef STEP +#define STEP( i, H ) (e[ k + i ] * (longword)H) + + /* Every one of these multiplications is done twice -- + * but I don't see an elegant way to optimize this. + * Do you? + */ + +#ifdef STUPID_COMPILER + L_result += STEP( 0, -134 ) ; + L_result += STEP( 1, -374 ) ; + /* + STEP( 2, 0 ) */ + L_result += STEP( 3, 2054 ) ; + L_result += STEP( 4, 5741 ) ; + L_result += STEP( 5, 8192 ) ; + L_result += STEP( 6, 5741 ) ; + L_result += STEP( 7, 2054 ) ; + /* + STEP( 8, 0 ) */ + L_result += STEP( 9, -374 ) ; + L_result += STEP( 10, -134 ) ; +#else + L_result += + STEP( 0, -134 ) + + STEP( 1, -374 ) + /* + STEP( 2, 0 ) */ + + STEP( 3, 2054 ) + + STEP( 4, 5741 ) + + STEP( 5, 8192 ) + + STEP( 6, 5741 ) + + STEP( 7, 2054 ) + /* + STEP( 8, 0 ) */ + + STEP( 9, -374 ) + + STEP(10, -134 ) + ; +#endif + + /* L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x2) *) + * L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x4) *) + * + * x[k] = SASR( L_result, 16 ); + */ + + /* 2 adds vs. >>16 => 14, minus one shift to compensate for + * those we lost when replacing L_MULT by '*'. + */ + + L_result = SASR( L_result, 13 ); + x[k] = ( L_result < MIN_WORD ? MIN_WORD + : (L_result > MAX_WORD ? MAX_WORD : L_result )); + } +} + +/* 4.2.14 */ + +static void RPE_grid_selection P3((x,xM,Mc_out), + word * x, /* [0..39] IN */ + word * xM, /* [0..12] OUT */ + word * Mc_out /* OUT */ +) +/* + * The signal x[0..39] is used to select the RPE grid which is + * represented by Mc. + */ +{ + /* register word temp1; */ + register int /* m, */ i; + register longword L_result, L_temp; + longword EM; /* xxx should be L_EM? */ + word Mc; + + longword L_common_0_3; + + EM = 0; + Mc = 0; + + /* for (m = 0; m <= 3; m++) { + * L_result = 0; + * + * + * for (i = 0; i <= 12; i++) { + * + * temp1 = SASR( x[m + 3*i], 2 ); + * + * assert(temp1 != MIN_WORD); + * + * L_temp = GSM_L_MULT( temp1, temp1 ); + * L_result = GSM_L_ADD( L_temp, L_result ); + * } + * + * if (L_result > EM) { + * Mc = m; + * EM = L_result; + * } + * } + */ + +#undef STEP +#define STEP( m, i ) L_temp = SASR( x[m + 3 * i], 2 ); \ + L_result += L_temp * L_temp; + + /* common part of 0 and 3 */ + + L_result = 0; + STEP( 0, 1 ); STEP( 0, 2 ); STEP( 0, 3 ); STEP( 0, 4 ); + STEP( 0, 5 ); STEP( 0, 6 ); STEP( 0, 7 ); STEP( 0, 8 ); + STEP( 0, 9 ); STEP( 0, 10); STEP( 0, 11); STEP( 0, 12); + L_common_0_3 = L_result; + + /* i = 0 */ + + STEP( 0, 0 ); + L_result <<= 1; /* implicit in L_MULT */ + EM = L_result; + + /* i = 1 */ + + L_result = 0; + STEP( 1, 0 ); + STEP( 1, 1 ); STEP( 1, 2 ); STEP( 1, 3 ); STEP( 1, 4 ); + STEP( 1, 5 ); STEP( 1, 6 ); STEP( 1, 7 ); STEP( 1, 8 ); + STEP( 1, 9 ); STEP( 1, 10); STEP( 1, 11); STEP( 1, 12); + L_result <<= 1; + if (L_result > EM) { + Mc = 1; + EM = L_result; + } + + /* i = 2 */ + + L_result = 0; + STEP( 2, 0 ); + STEP( 2, 1 ); STEP( 2, 2 ); STEP( 2, 3 ); STEP( 2, 4 ); + STEP( 2, 5 ); STEP( 2, 6 ); STEP( 2, 7 ); STEP( 2, 8 ); + STEP( 2, 9 ); STEP( 2, 10); STEP( 2, 11); STEP( 2, 12); + L_result <<= 1; + if (L_result > EM) { + Mc = 2; + EM = L_result; + } + + /* i = 3 */ + + L_result = L_common_0_3; + STEP( 3, 12 ); + L_result <<= 1; + if (L_result > EM) { + Mc = 3; + EM = L_result; + } + + /**/ + + /* Down-sampling by a factor 3 to get the selected xM[0..12] + * RPE sequence. + */ + for (i = 0; i <= 12; i ++) xM[i] = x[Mc + 3*i]; + *Mc_out = Mc; +} + +/* 4.12.15 */ + +static void APCM_quantization_xmaxc_to_exp_mant P3((xmaxc,exp_out,mant_out), + word xmaxc, /* IN */ + word * exp_out, /* OUT */ + word * mant_out ) /* OUT */ +{ + word exp, mant; + + /* Compute exponent and mantissa of the decoded version of xmaxc + */ + + exp = 0; + if (xmaxc > 15) exp = SASR(xmaxc, 3) - 1; + mant = xmaxc - (exp << 3); + + if (mant == 0) { + exp = -4; + mant = 7; + } + else { + while (mant <= 7) { + mant = mant << 1 | 1; + exp--; + } + mant -= 8; + } + + assert( exp >= -4 && exp <= 6 ); + assert( mant >= 0 && mant <= 7 ); + + *exp_out = exp; + *mant_out = mant; +} + +static void APCM_quantization P5((xM,xMc,mant_out,exp_out,xmaxc_out), + word * xM, /* [0..12] IN */ + + word * xMc, /* [0..12] OUT */ + word * mant_out, /* OUT */ + word * exp_out, /* OUT */ + word * xmaxc_out /* OUT */ +) +{ + int i, itest; + + word xmax, xmaxc, temp, temp1, temp2; + word exp, mant; + + + /* Find the maximum absolute value xmax of xM[0..12]. + */ + + xmax = 0; + for (i = 0; i <= 12; i++) { + temp = xM[i]; + temp = GSM_ABS(temp); + if (temp > xmax) xmax = temp; + } + + /* Qantizing and coding of xmax to get xmaxc. + */ + + exp = 0; + temp = SASR( xmax, 9 ); + itest = 0; + + for (i = 0; i <= 5; i++) { + + itest |= (temp <= 0); + temp = SASR( temp, 1 ); + + assert(exp <= 5); + if (itest == 0) exp++; /* exp = add (exp, 1) */ + } + + assert(exp <= 6 && exp >= 0); + temp = exp + 5; + + assert(temp <= 11 && temp >= 0); + xmaxc = gsm_add( SASR(xmax, temp), exp << 3 ); + + /* Quantizing and coding of the xM[0..12] RPE sequence + * to get the xMc[0..12] + */ + + APCM_quantization_xmaxc_to_exp_mant( xmaxc, &exp, &mant ); + + /* This computation uses the fact that the decoded version of xmaxc + * can be calculated by using the exponent and the mantissa part of + * xmaxc (logarithmic table). + * So, this method avoids any division and uses only a scaling + * of the RPE samples by a function of the exponent. A direct + * multiplication by the inverse of the mantissa (NRFAC[0..7] + * found in table 4.5) gives the 3 bit coded version xMc[0..12] + * of the RPE samples. + */ + + + /* Direct computation of xMc[0..12] using table 4.5 + */ + + assert( exp <= 4096 && exp >= -4096); + assert( mant >= 0 && mant <= 7 ); + + temp1 = 6 - exp; /* normalization by the exponent */ + temp2 = gsm_NRFAC[ mant ]; /* inverse mantissa */ + + for (i = 0; i <= 12; i++) { + + assert(temp1 >= 0 && temp1 < 16); + + temp = xM[i] << temp1; + temp = GSM_MULT( temp, temp2 ); + temp = SASR(temp, 12); + xMc[i] = temp + 4; /* see note below */ + } + + /* NOTE: This equation is used to make all the xMc[i] positive. + */ + + *mant_out = mant; + *exp_out = exp; + *xmaxc_out = xmaxc; +} + +/* 4.2.16 */ + +static void APCM_inverse_quantization P4((xMc,mant,exp,xMp), + register word * xMc, /* [0..12] IN */ + word mant, + word exp, + register word * xMp) /* [0..12] OUT */ +/* + * This part is for decoding the RPE sequence of coded xMc[0..12] + * samples to obtain the xMp[0..12] array. Table 4.6 is used to get + * the mantissa of xmaxc (FAC[0..7]). + */ +{ + int i; + word temp, temp1, temp2, temp3; + longword ltmp; + + assert( mant >= 0 && mant <= 7 ); + + temp1 = gsm_FAC[ mant ]; /* see 4.2-15 for mant */ + temp2 = gsm_sub( 6, exp ); /* see 4.2-15 for exp */ + temp3 = gsm_asl( 1, gsm_sub( temp2, 1 )); + + for (i = 13; i--;) { + + assert( *xMc <= 7 && *xMc >= 0 ); /* 3 bit unsigned */ + + /* temp = gsm_sub( *xMc++ << 1, 7 ); */ + temp = (*xMc++ << 1) - 7; /* restore sign */ + assert( temp <= 7 && temp >= -7 ); /* 4 bit signed */ + + temp <<= 12; /* 16 bit signed */ + temp = GSM_MULT_R( temp1, temp ); + temp = GSM_ADD( temp, temp3 ); + *xMp++ = gsm_asr( temp, temp2 ); + } +} + +/* 4.2.17 */ + +static void RPE_grid_positioning P3((Mc,xMp,ep), + word Mc, /* grid position IN */ + register word * xMp, /* [0..12] IN */ + register word * ep /* [0..39] OUT */ +) +/* + * This procedure computes the reconstructed long term residual signal + * ep[0..39] for the LTP analysis filter. The inputs are the Mc + * which is the grid position selection and the xMp[0..12] decoded + * RPE samples which are upsampled by a factor of 3 by inserting zero + * values. + */ +{ + int i = 13; + + assert(0 <= Mc && Mc <= 3); + + switch (Mc) { + case 3: *ep++ = 0; + case 2: do { + *ep++ = 0; + case 1: *ep++ = 0; + case 0: *ep++ = *xMp++; + } while (--i); + } + while (++Mc < 4) *ep++ = 0; + + /* + + int i, k; + for (k = 0; k <= 39; k++) ep[k] = 0; + for (i = 0; i <= 12; i++) { + ep[ Mc + (3*i) ] = xMp[i]; + } + */ +} + +/* 4.2.18 */ + +/* This procedure adds the reconstructed long term residual signal + * ep[0..39] to the estimated signal dpp[0..39] from the long term + * analysis filter to compute the reconstructed short term residual + * signal dp[-40..-1]; also the reconstructed short term residual + * array dp[-120..-41] is updated. + */ + +#if 0 /* Has been inlined in code.c */ +void Gsm_Update_of_reconstructed_short_time_residual_signal P3((dpp, ep, dp), + word * dpp, /* [0...39] IN */ + word * ep, /* [0...39] IN */ + word * dp) /* [-120...-1] IN/OUT */ +{ + int k; + + for (k = 0; k <= 79; k++) + dp[ -120 + k ] = dp[ -80 + k ]; + + for (k = 0; k <= 39; k++) + dp[ -40 + k ] = gsm_add( ep[k], dpp[k] ); +} +#endif /* Has been inlined in code.c */ + +void Gsm_RPE_Encoding P5((S,e,xmaxc,Mc,xMc), + + struct gsm_state * S, + + word * e, /* -5..-1][0..39][40..44 IN/OUT */ + word * xmaxc, /* OUT */ + word * Mc, /* OUT */ + word * xMc) /* [0..12] OUT */ +{ + word x[40]; + word xM[13], xMp[13]; + word mant, exp; + + Weighting_filter(e, x); + RPE_grid_selection(x, xM, Mc); + + APCM_quantization( xM, xMc, &mant, &exp, xmaxc); + APCM_inverse_quantization( xMc, mant, exp, xMp); + + RPE_grid_positioning( *Mc, xMp, e ); + +} + +void Gsm_RPE_Decoding P5((S, xmaxcr, Mcr, xMcr, erp), + struct gsm_state * S, + + word xmaxcr, + word Mcr, + word * xMcr, /* [0..12], 3 bits IN */ + word * erp /* [0..39] OUT */ +) +{ + word exp, mant; + word xMp[ 13 ]; + + APCM_quantization_xmaxc_to_exp_mant( xmaxcr, &exp, &mant ); + APCM_inverse_quantization( xMcr, mant, exp, xMp ); + RPE_grid_positioning( Mcr, xMp, erp ); + +} diff --git a/V203/gsm/lib/gsm/src/short_term.c b/V203/gsm/lib/gsm/src/short_term.c new file mode 100644 index 0000000..f7829ba --- /dev/null +++ b/V203/gsm/lib/gsm/src/short_term.c @@ -0,0 +1,429 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/short_term.c,v 1.2 1994/05/10 20:18:47 jutta Exp $ */ + +#include +#include + +#include "private.h" + +#include "gsm.h" +#include "proto.h" + +/* + * SHORT TERM ANALYSIS FILTERING SECTION + */ + +/* 4.2.8 */ + +static void Decoding_of_the_coded_Log_Area_Ratios P2((LARc,LARpp), + word * LARc, /* coded log area ratio [0..7] IN */ + word * LARpp) /* out: decoded .. */ +{ + register word temp1 /* , temp2 */; + register long ltmp; /* for GSM_ADD */ + + /* This procedure requires for efficient implementation + * two tables. + * + * INVA[1..8] = integer( (32768 * 8) / real_A[1..8]) + * MIC[1..8] = minimum value of the LARc[1..8] + */ + + /* Compute the LARpp[1..8] + */ + + /* for (i = 1; i <= 8; i++, B++, MIC++, INVA++, LARc++, LARpp++) { + * + * temp1 = GSM_ADD( *LARc, *MIC ) << 10; + * temp2 = *B << 1; + * temp1 = GSM_SUB( temp1, temp2 ); + * + * assert(*INVA != MIN_WORD); + * + * temp1 = GSM_MULT_R( *INVA, temp1 ); + * *LARpp = GSM_ADD( temp1, temp1 ); + * } + */ + +#undef STEP +#define STEP( B, MIC, INVA ) \ + temp1 = GSM_ADD( *LARc++, MIC ) << 10; \ + temp1 = GSM_SUB( temp1, B << 1 ); \ + temp1 = GSM_MULT_R( INVA, temp1 ); \ + *LARpp++ = GSM_ADD( temp1, temp1 ); + + STEP( 0, -32, 13107 ); + STEP( 0, -32, 13107 ); + STEP( 2048, -16, 13107 ); + STEP( -2560, -16, 13107 ); + + STEP( 94, -8, 19223 ); + STEP( -1792, -8, 17476 ); + STEP( -341, -4, 31454 ); + STEP( -1144, -4, 29708 ); + + /* NOTE: the addition of *MIC is used to restore + * the sign of *LARc. + */ +} + +/* 4.2.9 */ +/* Computation of the quantized reflection coefficients + */ + +/* 4.2.9.1 Interpolation of the LARpp[1..8] to get the LARp[1..8] + */ + +/* + * Within each frame of 160 analyzed speech samples the short term + * analysis and synthesis filters operate with four different sets of + * coefficients, derived from the previous set of decoded LARs(LARpp(j-1)) + * and the actual set of decoded LARs (LARpp(j)) + * + * (Initial value: LARpp(j-1)[1..8] = 0.) + */ + +static void Coefficients_0_12 P3((LARpp_j_1, LARpp_j, LARp), + register word * LARpp_j_1, + register word * LARpp_j, + register word * LARp) +{ + register int i; + register longword ltmp; + + for (i = 1; i <= 8; i++, LARp++, LARpp_j_1++, LARpp_j++) { + *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 )); + *LARp = GSM_ADD( *LARp, SASR( *LARpp_j_1, 1)); + } +} + +static void Coefficients_13_26 P3((LARpp_j_1, LARpp_j, LARp), + register word * LARpp_j_1, + register word * LARpp_j, + register word * LARp) +{ + register int i; + register longword ltmp; + for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) { + *LARp = GSM_ADD( SASR( *LARpp_j_1, 1), SASR( *LARpp_j, 1 )); + } +} + +static void Coefficients_27_39 P3((LARpp_j_1, LARpp_j, LARp), + register word * LARpp_j_1, + register word * LARpp_j, + register word * LARp) +{ + register int i; + register longword ltmp; + + for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) { + *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 )); + *LARp = GSM_ADD( *LARp, SASR( *LARpp_j, 1 )); + } +} + + +static void Coefficients_40_159 P2((LARpp_j, LARp), + register word * LARpp_j, + register word * LARp) +{ + register int i; + + for (i = 1; i <= 8; i++, LARp++, LARpp_j++) + *LARp = *LARpp_j; +} + +/* 4.2.9.2 */ + +static void LARp_to_rp P1((LARp), + register word * LARp) /* [0..7] IN/OUT */ +/* + * The input of this procedure is the interpolated LARp[0..7] array. + * The reflection coefficients, rp[i], are used in the analysis + * filter and in the synthesis filter. + */ +{ + register int i; + register word temp; + register longword ltmp; + + for (i = 1; i <= 8; i++, LARp++) { + + /* temp = GSM_ABS( *LARp ); + * + * if (temp < 11059) temp <<= 1; + * else if (temp < 20070) temp += 11059; + * else temp = GSM_ADD( temp >> 2, 26112 ); + * + * *LARp = *LARp < 0 ? -temp : temp; + */ + + if (*LARp < 0) { + temp = *LARp == MIN_WORD ? MAX_WORD : -(*LARp); + *LARp = - ((temp < 11059) ? temp << 1 + : ((temp < 20070) ? temp + 11059 + : GSM_ADD( temp >> 2, 26112 ))); + } else { + temp = *LARp; + *LARp = (temp < 11059) ? temp << 1 + : ((temp < 20070) ? temp + 11059 + : GSM_ADD( temp >> 2, 26112 )); + } + } +} + + +/* 4.2.10 */ +static void Short_term_analysis_filtering P4((S,rp,k_n,s), + struct gsm_state * S, + register word * rp, /* [0..7] IN */ + register int k_n, /* k_end - k_start */ + register word * s /* [0..n-1] IN/OUT */ +) +/* + * This procedure computes the short term residual signal d[..] to be fed + * to the RPE-LTP loop from the s[..] signal and from the local rp[..] + * array (quantized reflection coefficients). As the call of this + * procedure can be done in many ways (see the interpolation of the LAR + * coefficient), it is assumed that the computation begins with index + * k_start (for arrays d[..] and s[..]) and stops with index k_end + * (k_start and k_end are defined in 4.2.9.1). This procedure also + * needs to keep the array u[0..7] in memory for each call. + */ +{ + register word * u = S->u; + register int i; + register word di, zzz, ui, sav, rpi; + register longword ltmp; + + for (; k_n--; s++) { + + di = sav = *s; + + for (i = 0; i < 8; i++) { /* YYY */ + + ui = u[i]; + rpi = rp[i]; + u[i] = sav; + + zzz = GSM_MULT_R(rpi, di); + sav = GSM_ADD( ui, zzz); + + zzz = GSM_MULT_R(rpi, ui); + di = GSM_ADD( di, zzz ); + } + + *s = di; + } +} + +#if defined(USE_FLOAT_MUL) && defined(FAST) + +static void Fast_Short_term_analysis_filtering P4((S,rp,k_n,s), + struct gsm_state * S, + register word * rp, /* [0..7] IN */ + register int k_n, /* k_end - k_start */ + register word * s /* [0..n-1] IN/OUT */ +) +{ + register word * u = S->u; + register int i; + + float uf[8], + rpf[8]; + + register float scalef = 3.0517578125e-5; + register float sav, di, temp; + + for (i = 0; i < 8; ++i) { + uf[i] = u[i]; + rpf[i] = rp[i] * scalef; + } + for (; k_n--; s++) { + sav = di = *s; + for (i = 0; i < 8; ++i) { + register float rpfi = rpf[i]; + register float ufi = uf[i]; + + uf[i] = sav; + temp = rpfi * di + ufi; + di += rpfi * ufi; + sav = temp; + } + *s = di; + } + for (i = 0; i < 8; ++i) u[i] = uf[i]; +} +#endif /* ! (defined (USE_FLOAT_MUL) && defined (FAST)) */ + +static void Short_term_synthesis_filtering P5((S,rrp,k,wt,sr), + struct gsm_state * S, + register word * rrp, /* [0..7] IN */ + register int k, /* k_end - k_start */ + register word * wt, /* [0..k-1] IN */ + register word * sr /* [0..k-1] OUT */ +) +{ + register word * v = S->v; + register int i; + register word sri, tmp1, tmp2; + register longword ltmp; /* for GSM_ADD & GSM_SUB */ + + while (k--) { + sri = *wt++; + for (i = 8; i--;) { + + /* sri = GSM_SUB( sri, gsm_mult_r( rrp[i], v[i] ) ); + */ + tmp1 = rrp[i]; + tmp2 = v[i]; + tmp2 = ( tmp1 == MIN_WORD && tmp2 == MIN_WORD + ? MAX_WORD + : 0x0FFFF & (( (longword)tmp1 * (longword)tmp2 + + 16384) >> 15)) ; + + sri = GSM_SUB( sri, tmp2 ); + + /* v[i+1] = GSM_ADD( v[i], gsm_mult_r( rrp[i], sri ) ); + */ + tmp1 = ( tmp1 == MIN_WORD && sri == MIN_WORD + ? MAX_WORD + : 0x0FFFF & (( (longword)tmp1 * (longword)sri + + 16384) >> 15)) ; + + v[i+1] = GSM_ADD( v[i], tmp1); + } + *sr++ = v[0] = sri; + } +} + + +#if defined(FAST) && defined(USE_FLOAT_MUL) + +static void Fast_Short_term_synthesis_filtering P5((S,rrp,k,wt,sr), + struct gsm_state * S, + register word * rrp, /* [0..7] IN */ + register int k, /* k_end - k_start */ + register word * wt, /* [0..k-1] IN */ + register word * sr /* [0..k-1] OUT */ +) +{ + register word * v = S->v; + register int i; + + float va[9], rrpa[8]; + register float scalef = 3.0517578125e-5, temp; + + for (i = 0; i < 8; ++i) { + va[i] = v[i]; + rrpa[i] = (float)rrp[i] * scalef; + } + while (k--) { + register float sri = *wt++; + for (i = 8; i--;) { + sri -= rrpa[i] * va[i]; + if (sri < -32768.) sri = -32768.; + else if (sri > 32767.) sri = 32767.; + + temp = va[i] + rrpa[i] * sri; + if (temp < -32768.) temp = -32768.; + else if (temp > 32767.) temp = 32767.; + va[i+1] = temp; + } + *sr++ = va[0] = sri; + } + for (i = 0; i < 9; ++i) v[i] = va[i]; +} + +#endif /* defined(FAST) && defined(USE_FLOAT_MUL) */ + +void Gsm_Short_Term_Analysis_Filter P3((S,LARc,s), + + struct gsm_state * S, + + word * LARc, /* coded log area ratio [0..7] IN */ + word * s /* signal [0..159] IN/OUT */ +) +{ + word * LARpp_j = S->LARpp[ S->j ]; + word * LARpp_j_1 = S->LARpp[ S->j ^= 1 ]; + + word LARp[8]; + +#undef FILTER +#if defined(FAST) && defined(USE_FLOAT_MUL) +# define FILTER (* (S->fast \ + ? Fast_Short_term_analysis_filtering \ + : Short_term_analysis_filtering )) + +#else +# define FILTER Short_term_analysis_filtering +#endif + + Decoding_of_the_coded_Log_Area_Ratios( LARc, LARpp_j ); + + Coefficients_0_12( LARpp_j_1, LARpp_j, LARp ); + LARp_to_rp( LARp ); + FILTER( S, LARp, 13, s); + + Coefficients_13_26( LARpp_j_1, LARpp_j, LARp); + LARp_to_rp( LARp ); + FILTER( S, LARp, 14, s + 13); + + Coefficients_27_39( LARpp_j_1, LARpp_j, LARp); + LARp_to_rp( LARp ); + FILTER( S, LARp, 13, s + 27); + + Coefficients_40_159( LARpp_j, LARp); + LARp_to_rp( LARp ); + FILTER( S, LARp, 120, s + 40); +} + +void Gsm_Short_Term_Synthesis_Filter P4((S, LARcr, wt, s), + struct gsm_state * S, + + word * LARcr, /* received log area ratios [0..7] IN */ + word * wt, /* received d [0..159] IN */ + + word * s /* signal s [0..159] OUT */ +) +{ + word * LARpp_j = S->LARpp[ S->j ]; + word * LARpp_j_1 = S->LARpp[ S->j ^=1 ]; + + word LARp[8]; + +#undef FILTER +#if defined(FAST) && defined(USE_FLOAT_MUL) + +# define FILTER (* (S->fast \ + ? Fast_Short_term_synthesis_filtering \ + : Short_term_synthesis_filtering )) +#else +# define FILTER Short_term_synthesis_filtering +#endif + + Decoding_of_the_coded_Log_Area_Ratios( LARcr, LARpp_j ); + + Coefficients_0_12( LARpp_j_1, LARpp_j, LARp ); + LARp_to_rp( LARp ); + FILTER( S, LARp, 13, wt, s ); + + Coefficients_13_26( LARpp_j_1, LARpp_j, LARp); + LARp_to_rp( LARp ); + FILTER( S, LARp, 14, wt + 13, s + 13 ); + + Coefficients_27_39( LARpp_j_1, LARpp_j, LARp); + LARp_to_rp( LARp ); + FILTER( S, LARp, 13, wt + 27, s + 27 ); + + Coefficients_40_159( LARpp_j, LARp ); + LARp_to_rp( LARp ); + FILTER(S, LARp, 120, wt + 40, s + 40); +} diff --git a/V203/gsm/lib/gsm/src/table.c b/V203/gsm/lib/gsm/src/table.c new file mode 100644 index 0000000..0ed6f70 --- /dev/null +++ b/V203/gsm/lib/gsm/src/table.c @@ -0,0 +1,63 @@ +/* + * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische + * Universitaet Berlin. See the accompanying file "COPYRIGHT" for + * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. + */ + +/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/table.c,v 1.1 1992/10/28 00:15:50 jutta Exp $ */ + +/* Most of these tables are inlined at their point of use. + */ + +/* 4.4 TABLES USED IN THE FIXED POINT IMPLEMENTATION OF THE RPE-LTP + * CODER AND DECODER + * + * (Most of them inlined, so watch out.) + */ + +#define GSM_TABLE_C +#include "private.h" +#include "gsm.h" + +/* Table 4.1 Quantization of the Log.-Area Ratios + */ +/* i 1 2 3 4 5 6 7 8 */ +word gsm_A[8] = {20480, 20480, 20480, 20480, 13964, 15360, 8534, 9036}; +word gsm_B[8] = { 0, 0, 2048, -2560, 94, -1792, -341, -1144}; +word gsm_MIC[8] = { -32, -32, -16, -16, -8, -8, -4, -4 }; +word gsm_MAC[8] = { 31, 31, 15, 15, 7, 7, 3, 3 }; + + +/* Table 4.2 Tabulation of 1/A[1..8] + */ +word gsm_INVA[8]={ 13107, 13107, 13107, 13107, 19223, 17476, 31454, 29708 }; + + +/* Table 4.3a Decision level of the LTP gain quantizer + */ +/* bc 0 1 2 3 */ +word gsm_DLB[4] = { 6554, 16384, 26214, 32767 }; + + +/* Table 4.3b Quantization levels of the LTP gain quantizer + */ +/* bc 0 1 2 3 */ +word gsm_QLB[4] = { 3277, 11469, 21299, 32767 }; + + +/* Table 4.4 Coefficients of the weighting filter + */ +/* i 0 1 2 3 4 5 6 7 8 9 10 */ +word gsm_H[11] = {-134, -374, 0, 2054, 5741, 8192, 5741, 2054, 0, -374, -134 }; + + +/* Table 4.5 Normalized inverse mantissa used to compute xM/xmax + */ +/* i 0 1 2 3 4 5 6 7 */ +word gsm_NRFAC[8] = { 29128, 26215, 23832, 21846, 20165, 18725, 17476, 16384 }; + + +/* Table 4.6 Normalized direct mantissa used to compute xM/xmax + */ +/* i 0 1 2 3 4 5 6 7 */ +word gsm_FAC[8] = { 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767 }; diff --git a/V203/gsm/main.cpp b/V203/gsm/main.cpp new file mode 100644 index 0000000..695ad63 --- /dev/null +++ b/V203/gsm/main.cpp @@ -0,0 +1,25 @@ +#include "pwmclass.h" +#include "fifo.h" +#include "player.h" +#include "GsmDecoder.h" +//////////////////////////////////////////////////////// +/* Demo, které jen počítá od 0 do 1000000. Výstup je PWM + * na pinech PA1/PA8 24kHz. Odvozeno a teploměru na + * https://github.com/Kizarm/TTSCP_Client/tree/main/kecal/stm + * + * Tohle se do CH32V003 prostě nevejde. + */ +//////////////////////////////////////////////////////// +static PwmClass pwm; +static FIFO fifo; +static TextPlayer player (fifo); +static GsmDecoder decoder(fifo); +int main () { + pwm.attach(decoder); + int pass = 0u; + for (;;) { + player.say(pass++); + pwm.delay (); + } + return 0; +} diff --git a/V203/gsm/player.cpp b/V203/gsm/player.cpp new file mode 100644 index 0000000..6af3482 --- /dev/null +++ b/V203/gsm/player.cpp @@ -0,0 +1,154 @@ +#include +#include "player.h" + +/******************************************************************/ +static constexpr int dmult (const int n) { + int r = 1; + for (int i=0; i 3) { out(m_t.hafo); return; } // meze 1..3 + if (number < 0) { + out (m_t.minus); say (-number, dnum); return; + } + const div_t dt = ::div (number, dmult(dnum)); + if (dt.quot) sre(dt.quot); + else out(m_t.nula); + out(m_t.point); + mil(dt.rem, dnum); +} +void TextPlayer::mil(const int number, const int dnum) { + if (number == 0) { out(m_t.nula); return; } + const int max = dmult(dnum - 1); + if (number < max) { + out(m_t.nula); + mil(number * 10, dnum); + return; + } + sre (strip_zeros(number)); +} + +void TextPlayer::sre(const int number) { + if (number < 0) { + out (m_t.minus); + sre (-number); + return; + } + if (number >= 1000000) { + out(m_t.hafo); + return; + } + if (number == 1000) { + out(m_t.tisic); + return; + } + if (number > 1000) { + const div_t dt = ::div (number, 1000); + sre (dt.quot); + const int ln = dt.quot % 10; + (ln < 2 or ln > 4) ? out(m_t.tisic) : out(m_t.tisice); + sre (dt.rem); + return; + } + if (number == 100) { + out(m_t.sto); + return; + } + if (number > 100) { + const div_t dt = ::div (number, 100); + const int ln = dt.quot % 10; + //printf ("stovky:%d ", ln); + hec (ln); + sre (dt.rem); + return; + } + if (number == 20) { + out(m_t.dvacet); + return; + } + if (number > 20) { + const div_t dt = ::div (number, 10); + const int ln = dt.quot % 10; + //printf ("desitky:%d ", ln); + dek (ln); + sre (dt.rem); + return; + } + if (number == 0) return; + // jednotky 1 .. 19 + // printf("jednotky:%d ", number); + one (number); +} +void TextPlayer::hec(const int number) { + switch (number) { + case 1: out (m_t.sto); break; + case 2: out (m_t.dveste); break; + case 3: + case 4: one(number); out (m_t.sta); break; + case 5: + case 6: + case 7: + case 8: + case 9: one(number); out (m_t.set); break; + default: break; + }; +} +void TextPlayer::dek(const int number) { + switch (number) { + case 2: out (m_t.dvacet); break; + case 3: out (m_t.tricet); break; + case 4: out (m_t.ctyricet); break; + case 5: out (m_t.padesat); break; + case 6: out (m_t.sedesat); break; + case 7: out (m_t.sedmdesat); break; + case 8: out (m_t.osmdesat); break; + case 9: out (m_t.devadesat); break; + default: break; + }; +} +void TextPlayer::one(const int number) { + // 1..19 + switch (number) { + case 1: out (m_t.jedna); break; + case 2: out (m_t.dva); break; + case 3: out (m_t.tri); break; + case 4: out (m_t.ctyri); break; + case 5: out (m_t.pet); break; + case 6: out (m_t.sest); break; + case 7: out (m_t.sedm); break; + case 8: out (m_t.osm); break; + case 9: out (m_t.devet); break; + case 10: out (m_t.deset); break; + case 11: out (m_t.jedenact); break; + case 12: out (m_t.dvanact); break; + case 13: out (m_t.trinact); break; + case 14: out (m_t.ctrnact); break; + case 15: out (m_t.patnact); break; + case 16: out (m_t.sestnact); break; + case 17: out (m_t.sedmnact); break; + case 18: out (m_t.osmnact); break; + case 19: out (m_t.devatenact); break; + default: break; + }; +} +void TextPlayer::out(const text_p & o) { + led << false; // led svítí, pokud to mluví + const int len = o.no_frames; + for (int n=0; n & fifo; + public: + explicit TextPlayer(FIFO & f) noexcept : led (GPIOA, 0u), m_t(sayed_texts), fifo(f) {} + void say (const int number); // celé číslo + void say (const int number, const int dnum); // celé číslo jako desetinné s dnum míst (1 .. 3) + void say (const text_p & o) { out (o); } // přetížení pro uživatelská slova + protected: + void sre (const int number); + void hec (const int number); + void dek (const int number); + void one (const int number); + void mil (const int number, const int dnum); + + void out (const text_p & o); +}; + +#endif // PLAYER_H diff --git a/V203/gsm/pwmclass.cpp b/V203/gsm/pwmclass.cpp new file mode 100644 index 0000000..51861f1 --- /dev/null +++ b/V203/gsm/pwmclass.cpp @@ -0,0 +1,111 @@ +#include "pwmclass.h" +#include "gpio.h" + +static PwmClass * pInstance = nullptr; +extern "C" void DMA1_Channel5_IRQHandler( void ) __attribute__((interrupt)); +void DMA1_Channel5_IRQHandler( void ) { + DMA1_Type::INTFR_DEF state (DMA1.INTFR); + DMA1.INTFCR.R = state.R; // clear all + if (!pInstance) return; + if (state.B.HTIF5 != RESET) pInstance->send(false); + else if (state.B.TCIF5 != RESET) pInstance->send(true); +} + +/* + * initialize TIM1 for PWM + */ +static inline void tim1pwm_init () noexcept { + // Enable GPIOA and TIM1 + RCC.APB2PCENR.modify([] (RCC_Type::APB2PCENR_DEF & r) -> auto { + r.B.IOPAEN = SET; + r.B.TIM1EN = SET; + r.B.AFIOEN = SET; + return r.R; + }); + AFIO.PCFR.modify([](AFIO_Type::PCFR_DEF & r) -> auto { + r.B.TIM1RM = 1u; + return r.R; + }); + // PA7 is T1CH1N, PA8 is T1CH1, 10MHz Output alt func, push-pull + GPIOA.CFGLR.modify([](GPIOA_Type::CFGLR_DEF & r) -> auto { + r.B.CNF7 = 2u; + r.B.MODE7 = 1u; + return r.R; + }); + GPIOA.CFGHR.modify([](GPIOA_Type::CFGHR_DEF & r) -> auto { + r.B.CNF8 = 2u; + r.B.MODE8 = 1u; + return r.R; + }); + // Reset TIM1 to init all regs + RCC.APB2PRSTR.B.TIM1RST = SET; + RCC.APB2PRSTR.B.TIM1RST = RESET; + // CTLR1: default is up, events generated, edge align + // SMCFGR: default clk input is CK_INT + // Prescaler + TIM1.PSC.R = 0u; + // Auto Reload - sets period + TIM1.ATRLR.R = MAXPWM - 1; + + TIM1.CCER.modify([](TIM1_Type::CCER_DEF & r) -> auto { + // Enable CH1N, CH1 output, positive pol + r.B.CC1NE = SET; + r.B.CC1E = SET; + /* + r.B.CC1NP = SET; // active Low + r.B.CC1P = SET; + */ + return r.R; + }); + // CH1 Mode is output, PWM1 (CC1S = 00, OC1M = 110) + TIM1.CHCTLR1_Output.modify([](TIM1_Type::CHCTLR1_Output_DEF & r) -> auto { + r.B.OC1M = 0x6u; + return r.R; + }); + // Enable TIM1 outputs + TIM1.BDTR.modify([](TIM1_Type::BDTR_DEF & r) -> auto { + r.B.MOE = SET; + r.B.DTG = 48u; // Dead time 1us + return r.R; + }); + + // Reload immediately + Trigger DMA + TIM1.SWEVGR.B.UG = SET; + TIM1.DMAINTENR.B.UDE = SET; + // Enable TIM1 + TIM1.CTLR1.B.CEN = SET; +} +typedef __SIZE_TYPE__ size_t; +static inline void dma1ch5_init (void * ptr) noexcept { + // Enable DMA + RCC.AHBPCENR.modify([](RCC_Type::AHBPCENR_DEF & r) -> auto { + r.B.SRAMEN = SET; + r.B.DMA1EN = SET; + return r.R; + }); + // DMA5 can be configured to attach to T1UP + // The system can only DMA out at ~2.2MSPS. 2MHz is stable. + DMA1.CNTR5 .R = FULL_LEN; + DMA1.MADDR5.R = reinterpret_cast(ptr); + DMA1.PADDR5.R = reinterpret_cast(& TIM1.CH1CVR); + NVIC.EnableIRQ (DMA1_Channel5_IRQn); + DMA1.CFGR5.modify([](DMA1_Type::CFGR5_DEF & r) -> auto { + r.B.DIR = SET; // MEM2PERIPHERAL + r.B.PL = 2u; // High priority. + r.B.PSIZE = 1u; // 16-bit peripheral + r.B.MSIZE = 1u; // 16-bit memory + r.B.MINC = SET; // Increase memory. + r.B.CIRC = SET; // Circular mode. + r.B.HTIE = SET; // Half-trigger + r.B.TCIE = SET; // Whole-trigger + // Enable DMA1 ch5 + r.B.EN = SET; + return r.R; + }); +} + +PwmClass::PwmClass() noexcept : count(0u), pL(buffer), pH(buffer + HALF_LEN), src(nullptr) { + pInstance = this; + tim1pwm_init (); + dma1ch5_init (buffer); +} diff --git a/V203/gsm/pwmclass.h b/V203/gsm/pwmclass.h new file mode 100644 index 0000000..7934791 --- /dev/null +++ b/V203/gsm/pwmclass.h @@ -0,0 +1,32 @@ +#ifndef PWMCLASS_H +#define PWMCLASS_H +#include "system.h" +#include "oneway.h" +static constexpr unsigned HALF_LEN = 3u * 160u; +static constexpr unsigned FULL_LEN = 2u * HALF_LEN; +static constexpr unsigned MAXPWM = 6000u; +/* Používá TIM1, PWM kanál 1, DMA1 kanál 5, přerušení DMA1_Channel5_IRQHandler */ +class PwmClass { + volatile unsigned count; + uint16_t * const pL; + uint16_t * const pH; + uint16_t buffer [FULL_LEN]; + OneWay * src; + public: + explicit PwmClass () noexcept; + void attach (OneWay & s) { src = & s; } + void send (const bool b) { + if (!src) return; + if (b) src->Send (pH, HALF_LEN); + else src->Send (pL, HALF_LEN); + if (count) count -= 1u; + } + void delay (const unsigned frames = 50u) { + count = frames; + while (count) { + asm volatile ("nop"); + } + } +}; + +#endif // PWMCLASS_H diff --git a/V203/gsm/wrap.c b/V203/gsm/wrap.c new file mode 100644 index 0000000..bb42b02 --- /dev/null +++ b/V203/gsm/wrap.c @@ -0,0 +1,22 @@ +/* Funkce z newlib, použité ve zdrojácích. + * Velmi zjednodušeno. + */ +typedef struct { + int quot, rem; +} div_t; +typedef __SIZE_TYPE__ size_t; +div_t div (int numerator, int denominator) { + const div_t result = { numerator / denominator, numerator % denominator }; + return result; +} +void * memset(void * s, int c, size_t n) { + char * p = (char*) s; + for (unsigned i=0u; i