4 * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Kyeongchul Kim <kyeongchul.kim@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
25 #include "tapi_sms_util.h"
28 void reverse(char* x, int len)
32 for (i = 0; i < j; i++)
40 char* AcItoa(int n, char* str, int b)
45 str[i++] = "0123456789ABCDEF"[n%b];
56 return (('a' <= (ch) && (ch) <= 'z')? ((ch) - ('a'-'A')) : (ch));
59 char* SmsUtilUnpackGSMCode(char* szData, const char* pIn, int in_len )
65 /* If the number of fill bits != 0, then it would cause an additional shift */
74 for ( i = 0; i < in_len; i++, pos++ )
76 szData[i] = ( pIn[pos] << shift ) & 0x7F;
80 /* except the first byte, a character contains some bits
81 ** from the previous byte.
83 szData[i] |= pIn[pos-1] >> (8-shift);
92 /* a possible extra complete character is available */
94 szData[i] = pIn[pos] >> 1;
98 /* this is the end of the input, quit */
107 int SmsUtilPackGSMCode( TS_BYTE* pOut, const char* szData, int in_len )
114 // memset( out, 0, out_len_max );
116 /* pack the ASCII characters
123 for( pos = 0, i = 0; /*pos < out_len_max &&*/ i < in_len; pos++, i++ )
125 /* pack the low bits */
126 pOut[pos] = szData[i] >> shift;
128 if ( i + 1 < in_len )
130 /* pack the high bits using the low bits of the next character */
131 pOut[pos] |= szData[i+1] << ( 7 - shift );
148 void SmsUtilConvertBCD2Digit( char* pDigits, char* pBCD, int digitLen )
152 unsigned char higher, lower;
154 if ( pBCD == NULL || pDigits == NULL )
156 printf("__SmsConvertBCD2Digit: pBCD == NULL || pDigits == NULL. return.\n" );
162 //printf("__SmsConvertBCD2Digit: digitLen == 0. return.\n" );
170 bcdLen = digitLen / 2 + 1;
172 bcdLen = digitLen / 2;
174 memset( pDigits, 0, bcdLen * 2 );
176 for ( i = 0; i < bcdLen; i++ )
178 lower = pBCD[i] & 0x0F; // get low nibble
182 else if ( lower == 0x0B )
184 else if ( lower == 0x0C )
185 lower = 'p'; //DTMF Control pDigits seperator
186 else if ( lower == 0x0F )
190 AcItoa( lower, c, 16 );
191 lower = (char) AcToupper(c[0]);
194 higher = ( pBCD[i] >> 4 ) & 0x0F; // get high nibble
196 if ( higher == 0x0A )
197 higher = '*'; // =0x2A
198 else if ( higher == 0x0B )
199 higher = '#'; // =0x23
200 else if ( higher == 0x0C )
201 higher = 'p'; // =0x70, DTMF Control pDigits seperator
202 else if ( higher == 0x0F ) // if higher semi-octet is 0x0F, filled bits.
205 sprintf(pDigits + strlen(pDigits), "%c", lower);
206 pDigits[/*digitLen-1*/bcdLen*2-1] = '\0';
208 //printf("__SmsConvertBCD2Digit: pDigits [%s].\n", pDigits );
214 AcItoa(higher, c, 16);
215 higher = (char) AcToupper(c[0]);
218 //sprintf(pDigits, "%s%c%c", pDigits, lower, higher);
219 sprintf(pDigits + strlen(pDigits), "%c%c", lower, higher);
222 pDigits[digitLen] = '\0';
224 //printf("__SmsConvertBCD2Digit: pDigits [%s].\n", pDigits );
228 void SmsUtilConvertDigit2BCD( char* pBCD, char* pDigits, int digitLen )
232 unsigned char higher, lower;
234 if ( pBCD == NULL || pDigits == NULL )
237 // 0123456789 -> 1032547698
238 for ( i = 0, j = 0; i < digitLen; i = i + 2, j++ )
240 if ( pDigits[i] == '*' )
242 else if ( pDigits[i] == '#' )
244 else if ( AcToupper( pDigits[i] ) == 'P' )
247 digit = (int) ( pDigits[i] - '0' );
249 lower = digit & 0x0F;
251 if ( digitLen != i + 1 )
253 if ( pDigits[i+1] == '*' )
255 else if ( pDigits[i+1] == '#' )
257 else if ( AcToupper( pDigits[i+1] ) == 'P' )
260 digit = (int) ( pDigits[i+1] - '0' );
262 higher = digit & 0x0F;
269 pBCD[j] = ( higher << 4 ) | lower;
274 TmDateTime* SmsUtilDecodeTimeStamp(char * pTimeStamp, TmDateTime *tmDateTime )
276 //TmDateTime tmDateTime;
280 if ( pTimeStamp == NULL )
283 SmsUtilConvertBCD2Digit( szBuf, (char*) &pTimeStamp[0], 2 );
284 tmDateTime->year = atoi( szBuf ) + 2000;
285 if ( ( tmDateTime->year >= 1900 + MAX_YEAR )/* && ( tmDateTime->year < 2000 + BASE_YEAR )*/ )
286 tmDateTime->year -= 100;
287 SmsUtilConvertBCD2Digit( szBuf, (char*) &pTimeStamp[1], 2 );
288 tmDateTime->month = atoi( szBuf );
289 SmsUtilConvertBCD2Digit( szBuf, (char*) &pTimeStamp[2], 2 );
290 tmDateTime->day = atoi( szBuf );
291 SmsUtilConvertBCD2Digit( szBuf, (char*) &pTimeStamp[3], 2 );
292 tmDateTime->hour = atoi( szBuf );
293 SmsUtilConvertBCD2Digit( szBuf, (char*) &pTimeStamp[4], 2 );
294 tmDateTime->minute = atoi( szBuf );
295 SmsUtilConvertBCD2Digit( szBuf, (char*) &pTimeStamp[5], 2 );
296 tmDateTime->second = atoi( szBuf );
298 if ( ( tmDateTime->year < 1900 + BASE_YEAR ) || ( tmDateTime->year > 1900 + MAX_YEAR ) )
299 tmDateTime->year = 1900 + BASE_YEAR;
302 time = TmDateTimeToSeconds( &tmDateTime );
303 if ( time > MAX_SECONDS )
311 unsigned char* SmsUtilEncodeTimeStamp( TmDateTime* tmDateTime, unsigned char* pTimeStamp )
313 //TmDateTime tmDateTime;
317 if ( pTimeStamp == NULL )
320 memset( (void*) pTimeStamp, 0x00, sizeof ( unsigned char ) * 7 );
322 //TmSecondsToDateTime( timeStamp, &tmDateTime );
324 year = tmDateTime->year - 2000;
327 sprintf( szBuf, "%02d", year );
328 SmsUtilConvertDigit2BCD( (char*) &pTimeStamp[0], szBuf, 2 );
329 sprintf( szBuf, "%02d", tmDateTime->month );
330 SmsUtilConvertDigit2BCD( (char*) &pTimeStamp[1], szBuf, 2 );
331 sprintf( szBuf, "%02d", tmDateTime->day );
332 SmsUtilConvertDigit2BCD( (char*) &pTimeStamp[2], szBuf, 2 );
333 sprintf( szBuf, "%02d", tmDateTime->hour );
334 SmsUtilConvertDigit2BCD( (char*) &pTimeStamp[3], szBuf, 2 );
335 sprintf( szBuf, "%02d", tmDateTime->minute );
336 SmsUtilConvertDigit2BCD( (char*) &pTimeStamp[4], szBuf, 2 );
337 sprintf( szBuf, "%02d", tmDateTime->second );
338 SmsUtilConvertDigit2BCD( (char*) &pTimeStamp[5], szBuf, 2 );
341 /* ignore Time zone (assume it is using 0x00 as default)
342 timeZone = TmGetTimeZoneOffset() /15;
344 absTimeZone = -timeZone;
346 absTimeZone = timeZone;
349 sprintf( szBuf, "%02d", 0);
350 SmsUtilConvertDigit2BCD( (char*) &pTimeStamp[6], szBuf, 2 );
352 //if ( timeZone < 0 )
353 // pTimeStamp[6] |= 0x80;
360 int SmsUtilDecodeAddrField(char *diallingNum, char* pAddrField, int *result_ton, int *result_npi )
366 ton = ( pAddrField[index+1] & 0x70 ) >> 4;
367 npi = pAddrField[index+1] & 0x0F;
369 if ( ton != SIM_TON_ALPHA_NUMERIC )
371 // Origination/Destination address �ʵ忡���� length�� ���� address length
372 // origination/destination address �ʵ��� ��� length�� 0 �� ���� number type/plan �ʵ�� 0xFF ���� ���´�.
373 DialNumLen = pAddrField[index++];
377 DialNumLen = ( ( ( pAddrField[index++] + 1 ) / 2 ) * 8 ) / 7;
383 // SIM_SMSP_ADDRESS_LEN ���� address length �� ũ�� SIM_SMSP_ADDRESS_LEN ��Å�� ��ȯ�� �Ѵ�.
385 if ( DialNumLen > SIM_SMSP_ADDRESS_LEN )
387 DialNumLen = SIM_SMSP_ADDRESS_LEN;
390 printf(" DialNumLen = %d\n", DialNumLen );
392 index++; /* ignore Type of Address field */
394 if (ton != SIM_TON_ALPHA_NUMERIC )
396 SmsUtilConvertBCD2Digit( diallingNum, (char*) &pAddrField[index],DialNumLen );
400 SmsUtilUnpackGSMCode( diallingNum, &pAddrField[index],DialNumLen );
403 printf( "__SmsDecodeAddrField: diallingNum [%s].\n", (char*) diallingNum );
408 printf("ton %d npi %d\n",ton,npi);
415 int SmsUtilEncodeAddrField(unsigned char* pAddrField, char* diallingNum, int DialNumLen, int ton, int npi )
419 if ( diallingNum == NULL || pAddrField == NULL )
422 if ( ton != SIM_TON_ALPHA_NUMERIC )
424 // Origination/Destination address �ʵ忡���� length�� ���� address length
425 pAddrField[index++] = (unsigned char)DialNumLen;
426 //printf(" addr len packet: %d\n", pAddrField[index]);
430 pAddrField[index] = (unsigned char) ( ( ( DialNumLen * 7 + 7 ) / 8 ) * 2 );
432 // ������ ����Ʈ���� ���� 4��Ʈ�� ������ ������ length �ʵ尪�� -1�� �Ѵ�.
433 if ( ( ( DialNumLen * 7 ) % 8 ) <= 4 )
436 printf(" addr len packet: %d out of SIM_TON_ALPAHA\n", pAddrField[index]);
444 SET_TON_NPI( pAddrField[index], ton, npi );
446 index++; // SET_TON_NPI �� MACRO �̹Ƿ� ���ο��� ������Ű�� ����
448 if ( ton != SIM_TON_ALPHA_NUMERIC )
450 SmsUtilConvertDigit2BCD( (char*) &pAddrField[index], (char*) diallingNum, DialNumLen );
452 if ( DialNumLen % 2 )
453 index += DialNumLen / 2 + 1;
455 index += DialNumLen / 2;
459 index += SmsUtilPackGSMCode( &pAddrField[index], diallingNum, (int) DialNumLen );
464 int SmsUtilDecodeScAddrField( TelSmsAddressInfo_t* pSmsAddrField, TS_BYTE* pAddrField )
466 printf("SmsUtilDecodeScAddrField\n");
470 if ( pSmsAddrField == NULL || pAddrField == NULL )
472 printf( "SmsUtilDecodeScAddrField: pSimAddrField or pAddrField is NULL.\n" );
477 // Service Center address �ʵ忡���� length�� �ڿ� ������ byte�� ��
478 // -> ���� address ���̴� TON/API ����Ʈ�� �����ϰ� ������ ����Ʈ�� 2�� or 2�� - 1(���� ���̰� Ȧ���ΰ��)
479 length = pAddrField[index];
480 // ������ ���� �޽����� ��쿡�� service center address�� ���� ���� �ִ�.
481 // �� ��쿡 length �� 0 �̸� number type, plan �� ��� ���
482 // length �� 1 �̸� type, plan �� �ִ� ���
485 pSmsAddrField->DialNumLen = ( pAddrField[index++] - 1 ) * 2; // -1�� TON/API �ʵ�
487 // SIM_SMSP_ADDRESS_LEN ���� address length �� ũ�� SIM_SMSP_ADDRESS_LEN ��Å�� ��ȯ�� �Ѵ�.
488 if ( pSmsAddrField->DialNumLen > SIM_SMSP_ADDRESS_LEN )
490 pSmsAddrField->DialNumLen = SIM_SMSP_ADDRESS_LEN;
493 pSmsAddrField->Ton = ( pAddrField[index] & 0x70 ) >> 4;
494 pSmsAddrField->Npi = pAddrField[index] & 0x0F;
496 index++; /* ignore Type of Address field */
498 SmsUtilConvertBCD2Digit( (char*) pSmsAddrField->DialNumLen, (char*) &pAddrField[index], pSmsAddrField->DialNumLen );
500 printf( "SmsUtilDecodeScAddrField: diallingNum [%s].\n", (char*) pSmsAddrField->DialNumLen );
502 printf( "length=%d , ton %d, npi =%d\n",pSmsAddrField->DialNumLen, pSmsAddrField->Ton,pSmsAddrField->Npi );
508 int SmsUtilEncodeScAddrField( TS_BYTE* pAddrField, TelSmsAddressInfo_t * pSmsAddrField )
512 if ( pSmsAddrField == NULL || pAddrField == NULL )
515 // Service Center address �ʵ忡���� length�� �ڿ� ������ byte�� ��
516 // -> ���� address ���̴� TON/API ����Ʈ�� �����ϰ� ������ ����Ʈ�� 2�� or 2�� - 1(���� ���̰� Ȧ���ΰ��)
517 if ( pSmsAddrField->DialNumLen % 2 )
519 pAddrField[index++] = pSmsAddrField->DialNumLen / 2 + 1 + 1; // +1 �� TON/NPI �ʵ�, Ȧ������ ���� ������ ���߱� ���� �ѹ� �� +1
523 pAddrField[index++] = pSmsAddrField->DialNumLen / 2 + 1; // +1 �� TON/NPI �ʵ�
526 SET_TON_NPI( pAddrField[index], pSmsAddrField->Ton, pSmsAddrField->Npi );
528 index++; // SET_TON_NPI �� MACRO �̹Ƿ� ���ο��� ������Ű�� ���׹߻�
530 SmsUtilConvertDigit2BCD( (char*) &pAddrField[index], (char*) pSmsAddrField->DialNumLen, pSmsAddrField->DialNumLen );
532 if ( pSmsAddrField->DialNumLen % 2 )
533 index += pSmsAddrField->DialNumLen / 2 + 1;
535 index += pSmsAddrField->DialNumLen / 2;
540 void SmsUtilDecodeDCS( tapi_nettext_coding_scheme* pCodingScheme, unsigned char dcs )
542 assert( pCodingScheme != NULL );
544 memset( pCodingScheme, 0, sizeof ( tapi_nettext_coding_scheme ) );
546 if ( dcs < 0x40 ) // bits 7..4 = 00xx : general data coding indication
548 pCodingScheme->coding_group_type = TAPI_NETTEXT_CODGRP_SM_GENERAL_DCS;
550 if ( dcs & 0x20 ) // bit 5 = 1 : indicates the text is compressed
551 pCodingScheme->bCompressed = TRUE;
553 if ( dcs & 0x10 ) // bit 4 = 1 : indicates that bits 1 to 0 have a message class meaning
555 pCodingScheme->bmsg_class_set = TRUE;
557 switch ( dcs & 0x03 ) // bits 1 to 0 : message class
560 pCodingScheme->class_type = TAPI_NETTEXT_CLASS_0;
563 pCodingScheme->class_type = TAPI_NETTEXT_CLASS_1;
566 pCodingScheme->class_type = TAPI_NETTEXT_CLASS_2;
569 pCodingScheme->class_type = TAPI_NETTEXT_CLASS_3;
573 else // bit 4 = 0 : indicates that bits 1 to 0 are reserved and have no message class meaning
574 pCodingScheme->class_type = TAPI_NETTEXT_CLASS_NONE;
576 switch ( dcs & 0x0C ) // bits 4 to 3 : character set
579 pCodingScheme->alphabet_type = TAPI_NETTEXT_ALPHABET_DEFAULT;
582 pCodingScheme->alphabet_type = TAPI_NETTEXT_ALPHABET_8BIT;
585 pCodingScheme->alphabet_type = TAPI_NETTEXT_ALPHABET_UCS2;
588 pCodingScheme->alphabet_type = TAPI_NETTEXT_ALPHABET_MAX;
592 else if ( dcs >= 0x40 && dcs < 0x80 ) // bits 7..4 = 01xx : message marked for automatic deletion group. bits 5..0 are coded exactly the same as group 00xx
594 pCodingScheme->coding_group_type = TAPI_NETTEXT_CODGRP_SM_AUTO_DELETION;
596 if ( dcs & 0x20 ) // bit 5 = 1 : indicates the text is compressed
597 pCodingScheme->bCompressed = TRUE;
599 if ( dcs & 0x10 ) // bit 4 = 1 : indicates that bits 1 to 0 have a message class meaning
601 pCodingScheme->bmsg_class_set = TRUE;
603 switch ( dcs & 0x03 ) // bits 1 to 0 : message class
606 pCodingScheme->class_type = TAPI_NETTEXT_CLASS_0;
609 pCodingScheme->class_type = TAPI_NETTEXT_CLASS_1;
612 pCodingScheme->class_type = TAPI_NETTEXT_CLASS_2;
615 pCodingScheme->class_type = TAPI_NETTEXT_CLASS_3;
619 else // bit 4 = 0 : indicates that bits 1 to 0 are reserved and have no message class meaning
620 pCodingScheme->class_type = TAPI_NETTEXT_CLASS_NONE;
622 switch ( dcs & 0x0C ) // bits 4 to 3 : character set
625 pCodingScheme->alphabet_type = TAPI_NETTEXT_ALPHABET_DEFAULT;
628 pCodingScheme->alphabet_type = TAPI_NETTEXT_ALPHABET_8BIT;
631 pCodingScheme->alphabet_type = TAPI_NETTEXT_ALPHABET_UCS2;
634 pCodingScheme->alphabet_type = TAPI_NETTEXT_ALPHABET_MAX;
638 // bits 7..4 = 1000 ~ 1011 : reserved
639 else if ( dcs == 0xC0 ) // bits 7..4 = 1100 : message waiting indication group, discard message
641 pCodingScheme->coding_group_type = TAPI_NETTEXT_CODGRP_SM_WAITING_DISCARD;
643 else if ( dcs < 0xE0 )
645 pCodingScheme->coding_group_type = TAPI_NETTEXT_CODGRP_SM_WAITING_STORE;
648 pCodingScheme->bmsg_ind_active = TRUE;
650 switch ( dcs & 0x03 )
653 pCodingScheme->waiting_type = TAPI_NETTEXT_WAITING_VOICE_MSG;
656 pCodingScheme->waiting_type = TAPI_NETTEXT_WAITING_FAX_MSG;
659 pCodingScheme->waiting_type = TAPI_NETTEXT_WAITING_EMAIL_MSG;
662 pCodingScheme->waiting_type = TAPI_NETTEXT_WAITING_OTHER_MSG;
666 else if ( dcs < 0xF0 )
668 pCodingScheme->coding_group_type = TAPI_NETTEXT_CODGRP_SM_WAITING_STORE_UCS2;
671 pCodingScheme->bmsg_ind_active = TRUE;
673 switch ( dcs & 0x03 )
676 pCodingScheme->waiting_type = TAPI_NETTEXT_WAITING_VOICE_MSG;
679 pCodingScheme->waiting_type = TAPI_NETTEXT_WAITING_FAX_MSG;
682 pCodingScheme->waiting_type = TAPI_NETTEXT_WAITING_EMAIL_MSG;
685 pCodingScheme->waiting_type = TAPI_NETTEXT_WAITING_OTHER_MSG;
691 pCodingScheme->coding_group_type = TAPI_NETTEXT_CODGRP_SM_CLASS_CODING;
694 pCodingScheme->alphabet_type = TAPI_NETTEXT_ALPHABET_8BIT;
696 switch ( dcs & 0x03 )
699 pCodingScheme->class_type = TAPI_NETTEXT_CLASS_0;
702 pCodingScheme->class_type = TAPI_NETTEXT_CLASS_1;
705 pCodingScheme->class_type = TAPI_NETTEXT_CLASS_2;
708 pCodingScheme->class_type = TAPI_NETTEXT_CLASS_3;
714 void SmsUtilEncodeDCS( TS_BYTE* pDCS, tapi_nettext_coding_scheme* pCodingScheme )
716 printf("SmsUtilEncodeDCS Start\n");
719 assert( pCodingScheme != NULL );
721 if( pCodingScheme->coding_group_type == TAPI_NETTEXT_CODGRP_SM_GENERAL_DCS ) // bit 7..4 is 00xx
723 if ( pCodingScheme->bCompressed )
724 dcs |= 0x20; // bit 5 is 1
726 if ( pCodingScheme->bmsg_class_set )
728 dcs |= 0x10; // bit 4 is 1
730 if( pCodingScheme->class_type== TAPI_NETTEXT_CLASS_0 )
733 else if ( pCodingScheme->class_type == TAPI_NETTEXT_CLASS_1 )
736 else if ( pCodingScheme->class_type == TAPI_NETTEXT_CLASS_2 )
739 else if ( pCodingScheme->class_type == TAPI_NETTEXT_CLASS_3 )
743 switch ( pCodingScheme->alphabet_type )
745 case TAPI_NETTEXT_ALPHABET_DEFAULT: // bit 3..2 is 00
750 case TAPI_NETTEXT_ALPHABET_8BIT: // bit 3..2 is 01
755 case TAPI_NETTEXT_ALPHABET_UCS2: // bit 3..2 is 10
760 default: // bit 3..2 is 11
767 else if ( pCodingScheme->coding_group_type == TAPI_NETTEXT_CODGRP_SM_WAITING_DISCARD ) // bit 7..4 is 1100
771 else if ( pCodingScheme->coding_group_type == TAPI_NETTEXT_CODGRP_SM_WAITING_STORE ) // bit 7..4 is 1101
775 if ( pCodingScheme->bmsg_ind_active ) // bit 3..2 is 10
778 else if( pCodingScheme->waiting_type == TAPI_NETTEXT_WAITING_VOICE_MSG)
781 else if( pCodingScheme->waiting_type == TAPI_NETTEXT_WAITING_FAX_MSG)
784 else if( pCodingScheme->waiting_type == TAPI_NETTEXT_WAITING_EMAIL_MSG) // bit 1..0 is 10
787 else if( pCodingScheme->waiting_type == TAPI_NETTEXT_WAITING_OTHER_MSG) // bit 1..0 is 11
791 else if ( pCodingScheme->coding_group_type == TAPI_NETTEXT_CODGRP_SM_WAITING_STORE_UCS2 ) // bit 7..4 is 1110
795 if ( pCodingScheme->bmsg_ind_active ) // bit 3..2 is 10
798 if( pCodingScheme->waiting_type == TAPI_NETTEXT_WAITING_VOICE_MSG ) // bit 1..0 is 00
801 else if( pCodingScheme->waiting_type == TAPI_NETTEXT_WAITING_FAX_MSG )
804 else if( pCodingScheme->waiting_type == TAPI_NETTEXT_WAITING_EMAIL_MSG )
807 else if( pCodingScheme->waiting_type == TAPI_NETTEXT_WAITING_OTHER_MSG )
810 else if ( pCodingScheme->coding_group_type == TAPI_NETTEXT_CODGRP_SM_CLASS_CODING ) // bit 7..4 is 1111
814 if( pCodingScheme->alphabet_type == TAPI_NETTEXT_ALPHABET_DEFAULT ) // bit 2 is 0
816 else if( pCodingScheme->alphabet_type == TAPI_NETTEXT_ALPHABET_8BIT ) // bit 2 is 1
819 if( pCodingScheme->class_type == TAPI_NETTEXT_CLASS_0) // bit 1..0 is 00
822 else if( pCodingScheme->class_type == TAPI_NETTEXT_CLASS_1) // bit 1..0 is 01
825 else if( pCodingScheme->class_type == TAPI_NETTEXT_CLASS_2) // bit 1..0 is 10
828 else if( pCodingScheme->class_type == TAPI_NETTEXT_CLASS_3) // bit 1..0 is 11
832 memcpy( pDCS, &dcs, sizeof ( TS_BYTE ) );
834 printf("SmsUtilEncodeDCS End\n");
837 TS_UINT8 SmsUtilEncodeValidity( TS_BYTE* pValidity, tapi_nettext_vp* pVP )
841 switch( pVP->vp_type )
843 case TAPI_NETTEXT_VP_NOT_USED:
846 case TAPI_NETTEXT_VP_RELATIVE:
847 pValidity[pos] = (TS_UINT8) pVP->vpValue;
851 case TAPI_NETTEXT_VP_ABSOLUTE:
853 //SmsUtilEncodeTimeStamp( pValidity, pVP->vpValue );
857 case TAPI_NETTEXT_VP_ENHANCED: