B.3 Implementation

07.103GPPTerminal Equipment to Mobile Station (TE-MS) multiplexer protocolTS

Implementation is very simple because the FCS will be as wide as the lookup table (8 bits). To avoid having to reverse all bits in the octets all the octets in the crc table is reversed instead.

The termcorresponds to initialising the FCS with 0xFF.

B.3.1 Calculate FCS for the example given earlier

First initiliaze the crc:

FCS=0xFF

Add first byte:

FCS=table[0xFF^0x07]=table[0xF8]=0xBA

Add second byte:

FCS=table[0xBA^0x3F]=table[0x85]=0x76

Ones complement the FCS:

FCS=0xFF-FCS=0xFF-0x76=0x89 (10001001)

Transmit this FCS, this will be the same as the one calculated previous after the uart has reversed the bits.

B.3.2 Check FCS for the example given earlier

First initiliaze the crc:

FCS=0xFF

Add first byte:

FCS=table[0xFF^0x07]=table[0xF8]=0xBA

Add second byte:

FCS=table[0xBA^0x3F]=table[0x85]=0x76

Add FCS:

FCS=table[0x76^0x89]=table[0xFF]=0xCF

0xCF is the reversed order of 11110011, the checksum is valid

B.3.3 The transmitter code

/*Init*/

unsigned char FCS=0xFF;

unsigned char len;

unsigned char p;

/*len is the number of bytes in the message, p points to message*/

while (len–) {

FCS=crctable[FCS^*p++];

}

/*Ones complement*/

FCS=0xFF-FCS;

B.3.4 The receiver code

/*Init*/

unsigned char FCS=0xFF;

unsigned char len;

unsigned char p;

/*len is the number of bytes in the message, p points to message*/

while (len–) {

FCS=crctable[FCS^*p++];

}

/*Ones complement*/

FCS=crctable[FCS^"received FCS"];

/*0xCF is the reversed order of 11110011.*/

if (FCS==0xCF) {

/*FCS is OK*/

}

else {

/*FCS is not OK*/

}

B.3.5 Reversed CRC table

const unsigned char crctable[256] = { //reversed, 8-bit, poly=0x07

0x00, 0x91, 0xE3, 0x72, 0x07, 0x96, 0xE4, 0x75, 0x0E, 0x9F, 0xED, 0x7C, 0x09, 0x98, 0xEA, 0x7B,

0x1C, 0x8D, 0xFF, 0x6E, 0x1B, 0x8A, 0xF8, 0x69, 0x12, 0x83, 0xF1, 0x60, 0x15, 0x84, 0xF6, 0x67,

0x38, 0xA9, 0xDB, 0x4A, 0x3F, 0xAE, 0xDC, 0x4D, 0x36, 0xA7, 0xD5, 0x44, 0x31, 0xA0, 0xD2, 0x43,

0x24, 0xB5, 0xC7, 0x56, 0x23, 0xB2, 0xC0, 0x51, 0x2A, 0xBB, 0xC9, 0x58, 0x2D, 0xBC, 0xCE, 0x5F,

0x70, 0xE1, 0x93, 0x02, 0x77, 0xE6, 0x94, 0x05, 0x7E, 0xEF, 0x9D, 0x0C, 0x79, 0xE8, 0x9A, 0x0B,

0x6C, 0xFD, 0x8F, 0x1E, 0x6B, 0xFA, 0x88, 0x19, 0x62, 0xF3, 0x81, 0x10, 0x65, 0xF4, 0x86, 0x17,

0x48, 0xD9, 0xAB, 0x3A, 0x4F, 0xDE, 0xAC, 0x3D, 0x46, 0xD7, 0xA5, 0x34, 0x41, 0xD0, 0xA2, 0x33,

0x54, 0xC5, 0xB7, 0x26, 0x53, 0xC2, 0xB0, 0x21, 0x5A, 0xCB, 0xB9, 0x28, 0x5D, 0xCC, 0xBE, 0x2F,

0xE0, 0x71, 0x03, 0x92, 0xE7, 0x76, 0x04, 0x95, 0xEE, 0x7F, 0x0D, 0x9C, 0xE9, 0x78, 0x0A, 0x9B,

0xFC, 0x6D, 0x1F, 0x8E, 0xFB, 0x6A, 0x18, 0x89, 0xF2, 0x63, 0x11, 0x80, 0xF5, 0x64, 0x16, 0x87,

0xD8, 0x49, 0x3B, 0xAA, 0xDF, 0x4E, 0x3C, 0xAD, 0xD6, 0x47, 0x35, 0xA4, 0xD1, 0x40, 0x32, 0xA3,

0xC4, 0x55, 0x27, 0xB6, 0xC3, 0x52, 0x20, 0xB1, 0xCA, 0x5B, 0x29, 0xB8, 0xCD, 0x5C, 0x2E, 0xBF,

0x90, 0x01, 0x73, 0xE2, 0x97, 0x06, 0x74, 0xE5, 0x9E, 0x0F, 0x7D, 0xEC, 0x99, 0x08, 0x7A, 0xEB,

0x8C, 0x1D, 0x6F, 0xFE, 0x8B, 0x1A, 0x68, 0xF9, 0x82, 0x13, 0x61, 0xF0, 0x85, 0x14, 0x66, 0xF7,

0xA8, 0x39, 0x4B, 0xDA, 0xAF, 0x3E, 0x4C, 0xDD, 0xA6, 0x37, 0x45, 0xD4, 0xA1, 0x30, 0x42, 0xD3,

0xB4, 0x25, 0x57, 0xC6, 0xB3, 0x22, 0x50, 0xC1, 0xBA, 0x2B, 0x59, 0xC8, 0xBD, 0x2C, 0x5E, 0xCF

};

Annex C (informative):
Document Change History

SMG#

TDoc

VERS

NEW_VERS

CR

REV

REL

CAT

WORKITEM

SUBJECT

s26

98-293

6.0.0

6.1.0

A001

R97

F

MUX MS-TE

07.10 primitive description

s26

98-293

6.0.0

6.1.0

A002

R97

F

MUX MS-TE

Editorial corrections in length indication and priority table

s26

98-293

6.0.0

6.1.0

A003

R97

F

MUX MS-TE

Modem Control Signals

s26

98-293

6.0.0

6.1.0

A004

R97

F

MUX MS-TE

Service Negotiation Command

s26

98-293

6.0.0

6.1.0

A005

R97

F

MUX MS-TE

Port Parameter Command

s27

98-737

6.1.0

6.2.0

A006

R97

B

MUX MS-TE

Include the RPN and RLS commands

s27

98-737

6.1.0

6.2.0

A007

R97

F

MUX MS-TE

Editorial Corrections

s27

98-737

6.1.0

6.2.0

A008

R97

D

MUX MS-TE

Clarification of the DISC command

s27

98-737

6.1.0

6.2.0

A009

R97

D

MUX MS-TE

Clarification of the C/R bit

s27

98-737

6.1.0

6.2.0

A010

R97

D

MUX MS-TE

Clarification of the CRC

s27

98-737

6.1.0

6.2.0

A011

R97

D

MUX MS-TE

Clarification of the NSC command

s27

98-737

6.1.0

6.2.0

A012

R97

F

MUX MS-TE

Correction of the P/F bit

s27

98-737

6.1.0

6.2.0

A013

R97

C

MUX MS-TE

Improvements to the Remote Parameter Negotiation Command

s27

98-737

6.1.0

6.2.0

A014

R97

F

MUX MS-TE

Correction of BOFC and EOFC value.
Default assignment of DLC priority

s27

98-737

6.1.0

6.2.0

A015

R97

B

MUX MS-TE

XON/XOFF flow control in MSC modem signal

s28

99-060

6.2.0

6.3.0

A016

R97

D

MUX MS-TE

Correct the primitive names for the DLC Service Negotiation service

s28

99-060

6.2.0

6.3.0

A017

R97

D

MUX MS-TE

Correct the RTR Flow control figure

s29

99-482

6.3.0

7.0.0

A018

R98

F

MUX MS-TE

Editorial corrections

s29

99-482

6.3.0

7.0.0

A019

R98

D

MUX MS-TE

Clarification of how to handle the length field in basic mode

s30

99-675

7.0.0

7.1.0

A021

R98

A

TEI

Clarification of CR bit

s30

99-675

7.0.0

7.1.0

A023

R98

A

TEI

Correction of the bits in the start and close flags in the example of Annex B

T#15

TP-020014

7.1.0

7.2.0

A026

R98

A

TEI

Incorrect explanation of length indicator bit