18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Copyright (C) 2007-2008 The Android Open Source Project 28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** 38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** This software is licensed under the terms of the GNU General Public 48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** License version 2, as published by the Free Software Foundation, and 58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** may be copied, distributed, and modified under those terms. 68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** 78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** This program is distributed in the hope that it will be useful, 88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** but WITHOUT ANY WARRANTY; without even the implied warranty of 98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** GNU General Public License for more details. 118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project*/ 128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef _android_gsm_h 138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define _android_gsm_h 148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** USEFUL TYPES 168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef unsigned char byte_t; 198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef byte_t* bytes_t; 208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef const byte_t* cbytes_t; 218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** BCD 238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a 8-bit value into the corresponding nibble-bcd byte */ 268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern byte_t gsm_int_to_bcdi( int value ); 278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a nibble-bcd byte into an int, invalid nibbles are silently converted to 0 */ 298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int gsm_int_from_bcdi( byte_t value ); 308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** HEX 328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* try to convert a hex string into a byte string, assumes 'dst' is properly sized, and hexlen is even. 358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * returns the number of bytes on exit, or -1 in case of badly formatted data */ 368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int gsm_hex_to_bytes ( cbytes_t hex, int hexlen, bytes_t dst ); 378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a hex string into a byte string, assumes 'dst' is properly sized, and hexlen is even. 398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * no checks are performed */ 408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void gsm_hex_to_bytes0 ( cbytes_t hex, int hexlen, bytes_t dst ); 418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a byte string into a hex string, assumes 'hex' is properly sized */ 438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void gsm_hex_from_bytes( char* hex, cbytes_t src, int srclen ); 448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a hexchar to an int, returns -1 on error */ 468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int gsm_hexchar_to_int( char c ); 478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a hexchar to an int, returns 0 on error */ 498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int gsm_hexchar_to_int0( char c ); 508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a 2-char hex value into an int, returns -1 on error */ 528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int gsm_hex2_to_byte( const char* hex ); 538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a 2-char hex value into an int, returns 0 on error */ 558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int gsm_hex2_to_byte0( const char* hex ); 568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a 4-char hex value into an int, returns -1 on error */ 588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int gsm_hex4_to_short( const char* hex ); 598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a 4-char hex value into an int, returns 0 on error */ 618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int gsm_hex4_to_short0( const char* hex ); 628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* write a byte to a 2-byte hex string */ 648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void gsm_hex_from_byte( char* hex, int val ); 658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void gsm_hex_from_short( char* hex, int val ); 678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** UTF-8 and GSM Alphabet 698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* check that a given utf8 string is well-formed, returns 1 on success, 0 otherwise */ 728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int utf8_check( cbytes_t utf8, int utf8len ); 738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* check that all characters in a given utf8 string can be encoded into the GSM alphabet. 758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project returns 1 if TRUE, 0 otherwise */ 768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int utf8_check_gsm7( cbytes_t utf8, int utf8len ); 778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* try to skip enough utf8 characters to generate gsm7len GSM septets */ 798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern cbytes_t utf8_skip_gsm7( cbytes_t utf8, cbytes_t utf8end, int gsm7len ); 808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a utf-8 string into a GSM septet string, assumes 'dst' is NULL or is properly sized, 828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project and that all characters are representable. 'offset' is the starting bit offset in 'dst'. 838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project non-representable characters are replaced by spaces. 848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project returns the number of septets, */ 858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int utf8_to_gsm7( cbytes_t utf8, int utf8len, bytes_t dst, int offset ); 868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a utf8 string into an array of 8-bit unpacked GSM septets, 888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * assumes 'dst' is NULL or is properly sized, returns the number of GSM bytes */ 898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int utf8_to_gsm8( cbytes_t utf8, int utf8len, bytes_t dst ); 908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a GSM septets string into a utf-8 byte string. assumes that 'utf8' is NULL or properly 928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project sized. 'offset' is the starting bit offset in 'src', 'count' is the number of input septets. 938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project return the number of utf8 bytes. */ 948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int utf8_from_gsm7( cbytes_t src, int offset, int count, bytes_t utf8 ); 958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert an unpacked 8-bit GSM septets string into a utf-8 byte string. assumes that 'utf8' 978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project is NULL or properly sized. 'count' is the number of input bytes. 988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project returns the number of utf8 bytes */ 998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int utf8_from_gsm8( cbytes_t src, int count, bytes_t utf8 ); 1008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** UCS-2 and GSM Alphabet 1038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ** 1048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ** Note that here, 'ucs2' really refers to non-aligned UCS2-BE, as used by the GSM standard 1058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 1068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* check that all characters in a given ucs2 string can be encoded into the GSM alphabet. 1088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project returns 1 if TRUE, 0 otherwise */ 1098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int ucs2_check_gsm7( cbytes_t ucs2, int ucs2len ); 1108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a ucs2 string into a GSM septet string, assumes 'dst' is NULL or properly sized, 1128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 'offset' is the starting bit offset in 'dst'. non-representable characters are replaced 1138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project by spaces. returns the number of septets */ 1148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int ucs2_to_gsm7( cbytes_t ucs2, int ucs2len, bytes_t dst, int offset ); 1158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a ucs2 string into a GSM septet string, assumes 'dst' is NULL or properly sized, 1178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project non-representable characters are replaced by spaces. returns the number of bytes */ 1188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int ucs2_to_gsm8( cbytes_t ucs2, int ucs2len, bytes_t dst ); 1198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a GSM septets string into a ucs2 string. assumes that 'ucs2' is NULL or 1218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project properly sized. 'offset' is the starting bit offset in 'src', 'count' is the number 1228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project of input septets. return the number of ucs2 characters (not bytes) */ 1238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int ucs2_from_gsm7( bytes_t ucs2, cbytes_t src, int offset, int count ); 1248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert an 8-bit unpacked GSM septets string into a ucs2 string. assumes that 'ucs2' 1268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project is NULL or properly sized. 'count' is the number of input septets. return the number 1278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project of ucs2 characters (not bytes) */ 1288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int ucs2_from_gsm8( bytes_t ucs2, cbytes_t src, int count ); 1298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** UCS2 to/from UTF8 1328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 1338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a ucs2 string into a utf8 byte string, assumes 'utf8' NULL or properly sized. 1358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project returns the number of utf8 bytes*/ 1368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int ucs2_to_utf8( cbytes_t ucs2, int ucs2len, bytes_t utf8 ); 1378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a utf8 byte string into a ucs2 string, assumes 'ucs2' NULL or properly sized. 1398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project returns the number of ucs2 chars */ 1408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int utf8_to_ucs2( cbytes_t utf8, int utf8len, bytes_t ucs2 ); 1418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* try to skip a given number of characters in a utf-8 byte string, return new position */ 1438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern cbytes_t utf8_skip( cbytes_t utf8, cbytes_t utf8end, int count); 1448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** Dial Numbers: TON byte + 'count' bcd numbers 1468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 1478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert a bcd-coded GSM dial number into an ASCII string (not zero-terminated) 1498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project assumes 'dst' is NULL or properly sized, returns 0 in case of success, -1 in case of error. 1508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 'num_digits' is the number of digits, not input bytes. a trailing 0xf0 is ignored automatically 1518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project return the number of ASCII chars */ 1528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int gsm_bcdnum_to_ascii ( cbytes_t bcd, int num_digits, bytes_t dst ); 1538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* convert an ASCII dial-number into a bcd-coded string, returns the number of 4-bit nibbles written, */ 1558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int gsm_bcdnum_from_ascii( cbytes_t ascii, int asciilen, bytes_t dst ); 1568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** ADN: Abbreviated Dialing Numbers 1588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 1598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SIM_ADN_MAX_ALPHA 20 /* maximum number of characters in ADN alpha tag */ 1608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SIM_ADN_MAX_NUMBER 20 /* maximum digits in ADN number */ 1618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct { 1638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project byte_t alpha [ SIM_ADN_MAX_ALPHA*3+1 ]; /* alpha tag in zero-terminated utf-8 */ 1648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project char number[ SIM_ADN_MAX_NUMBER+1 ]; /* dialing number in zero-terminated ASCII */ 1658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectSimAdnRec, *SimAdn; 1678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct { 1698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SimAdnRec adn; 1708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project byte_t ext_record; /* 0 or 0xFF means no extension */ 1718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectSimAdnRecordRec, *SimAdnRecord; 1738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int sim_adn_record_from_bytes( SimAdnRecord rec, cbytes_t data, int datalen ); 1758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int sim_adn_record_to_bytes ( SimAdnRecord rec, bytes_t data, int datalen ); 1768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/** ROPES 1788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project **/ 1798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct { 1818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project bytes_t data; 1828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int max; 1838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int pos; 1848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int error; 1858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project unsigned char data0[16]; 1868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} GsmRopeRec, *GsmRope; 1878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void gsm_rope_init( GsmRope rope ); 1898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void gsm_rope_init_alloc( GsmRope rope, int alloc ); 1908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int gsm_rope_done( GsmRope rope ); 1918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern bytes_t gsm_rope_done_acquire( GsmRope rope, int *psize ); 1928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void gsm_rope_add_c( GsmRope rope, char c ); 1938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void gsm_rope_add( GsmRope rope, const void* str, int len ); 1948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void* gsm_rope_reserve( GsmRope rope, int len ); 1958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 196a1b379c65f787fc85bd9c6f4a6d14d8a2bebc9d5Marc Petit-Huguenin#define PHONE_PREFIX "1555521" 197a1b379c65f787fc85bd9c6f4a6d14d8a2bebc9d5Marc Petit-Huguenin 1988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* _android_gsm_h */ 199