Home | History | Annotate | Download | only in telephony
      1 /*
      2  * Copyright (C) 2006 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 /*
     18  * ISSUES:
     19  *
     20  */
     21 
     22 /**
     23  * TODO
     24  *
     25  *
     26  */
     27 
     28 
     29 #ifndef ANDROID_RIL_CDMA_SMS_H
     30 #define ANDROID_RIL_CDMA_SMS_H 1
     31 
     32 #include <stdlib.h>
     33 
     34 #ifdef __cplusplus
     35 extern "C" {
     36 #endif
     37 
     38 /* Used by RIL_REQUEST_CDMA_SEND_SMS and RIL_UNSOL_RESPONSE_CDMA_NEW_SMS */
     39 
     40 #define RIL_CDMA_SMS_ADDRESS_MAX     36
     41 #define RIL_CDMA_SMS_SUBADDRESS_MAX  36
     42 #define RIL_CDMA_SMS_BEARER_DATA_MAX 255
     43 
     44 typedef enum {
     45     RIL_CDMA_SMS_DIGIT_MODE_4_BIT = 0,     /* DTMF digits */
     46     RIL_CDMA_SMS_DIGIT_MODE_8_BIT = 1,
     47     RIL_CDMA_SMS_DIGIT_MODE_MAX32 = 0x10000000 /* Force constant ENUM size in structures */
     48 } RIL_CDMA_SMS_DigitMode;
     49 
     50 typedef enum {
     51     RIL_CDMA_SMS_NUMBER_MODE_NOT_DATA_NETWORK = 0,
     52     RIL_CDMA_SMS_NUMBER_MODE_DATA_NETWORK     = 1,
     53     RIL_CDMA_SMS_NUMBER_MODE_MAX32 = 0x10000000 /* Force constant ENUM size in structures */
     54 } RIL_CDMA_SMS_NumberMode;
     55 
     56 typedef enum {
     57     RIL_CDMA_SMS_NUMBER_TYPE_UNKNOWN                   = 0,
     58     RIL_CDMA_SMS_NUMBER_TYPE_INTERNATIONAL_OR_DATA_IP  = 1,
     59       /* INTERNATIONAL is used when number mode is not data network address.
     60        * DATA_IP is used when the number mode is data network address
     61        */
     62     RIL_CDMA_SMS_NUMBER_TYPE_NATIONAL_OR_INTERNET_MAIL = 2,
     63       /* NATIONAL is used when the number mode is not data network address.
     64        * INTERNET_MAIL is used when the number mode is data network address.
     65        * For INTERNET_MAIL, in the address data "digits", each byte contains
     66        * an ASCII character. Examples are "x (at) y.com,a (at) b.com - ref TIA/EIA-637A 3.4.3.3
     67        */
     68     RIL_CDMA_SMS_NUMBER_TYPE_NETWORK                   = 3,
     69     RIL_CDMA_SMS_NUMBER_TYPE_SUBSCRIBER                = 4,
     70     RIL_CDMA_SMS_NUMBER_TYPE_ALPHANUMERIC              = 5,
     71       /* GSM SMS: address value is GSM 7-bit chars */
     72     RIL_CDMA_SMS_NUMBER_TYPE_ABBREVIATED               = 6,
     73     RIL_CDMA_SMS_NUMBER_TYPE_RESERVED_7                = 7,
     74     RIL_CDMA_SMS_NUMBER_TYPE_MAX32 = 0x10000000 /* Force constant ENUM size in structures */
     75 } RIL_CDMA_SMS_NumberType;
     76 
     77 typedef enum {
     78     RIL_CDMA_SMS_NUMBER_PLAN_UNKNOWN     = 0,
     79     RIL_CDMA_SMS_NUMBER_PLAN_TELEPHONY   = 1,      /* CCITT E.164 and E.163, including ISDN plan */
     80     RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_2  = 2,
     81     RIL_CDMA_SMS_NUMBER_PLAN_DATA        = 3,      /* CCITT X.121 */
     82     RIL_CDMA_SMS_NUMBER_PLAN_TELEX       = 4,      /* CCITT F.69 */
     83     RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_5  = 5,
     84     RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_6  = 6,
     85     RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_7  = 7,
     86     RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_8  = 8,
     87     RIL_CDMA_SMS_NUMBER_PLAN_PRIVATE     = 9,
     88     RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_10 = 10,
     89     RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_11 = 11,
     90     RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_12 = 12,
     91     RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_13 = 13,
     92     RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_14 = 14,
     93     RIL_CDMA_SMS_NUMBER_PLAN_RESERVED_15 = 15,
     94     RIL_CDMA_SMS_NUMBER_PLAN_MAX32 = 0x10000000 /* Force constant ENUM size in structures */
     95 } RIL_CDMA_SMS_NumberPlan;
     96 
     97 typedef struct {
     98     RIL_CDMA_SMS_DigitMode digit_mode;
     99       /* Indicates 4-bit or 8-bit */
    100     RIL_CDMA_SMS_NumberMode number_mode;
    101       /* Used only when digitMode is 8-bit */
    102     RIL_CDMA_SMS_NumberType number_type;
    103       /* Used only when digitMode is 8-bit.
    104        * To specify an international address, use the following:
    105        * digitMode = RIL_CDMA_SMS_DIGIT_MODE_8_BIT
    106        * numberMode = RIL_CDMA_SMS_NOT_DATA_NETWORK
    107        * numberType = RIL_CDMA_SMS_NUMBER_TYPE_INTERNATIONAL_OR_DATA_IP
    108        * numberPlan = RIL_CDMA_SMS_NUMBER_PLAN_TELEPHONY
    109        * numberOfDigits = number of digits
    110        * digits = ASCII digits, e.g. '1', '2', '3'3, '4', and '5'
    111        */
    112     RIL_CDMA_SMS_NumberPlan number_plan;
    113       /* Used only when digitMode is 8-bit */
    114     unsigned char number_of_digits;
    115     unsigned char digits[ RIL_CDMA_SMS_ADDRESS_MAX ];
    116       /* Each byte in this array represnts a 40bit or 8-bit digit of address data */
    117 } RIL_CDMA_SMS_Address;
    118 
    119 typedef enum {
    120     RIL_CDMA_SMS_SUBADDRESS_TYPE_NSAP           = 0,    /* CCITT X.213 or ISO 8348 AD2 */
    121     RIL_CDMA_SMS_SUBADDRESS_TYPE_USER_SPECIFIED = 1,    /* e.g. X.25 */
    122     RIL_CDMA_SMS_SUBADDRESS_TYPE_MAX32 = 0x10000000 /* Force constant ENUM size in structures */
    123 } RIL_CDMA_SMS_SubaddressType;
    124 
    125 typedef struct {
    126     RIL_CDMA_SMS_SubaddressType subaddressType;
    127     /* 1 means the last byte's lower 4 bits should be ignored */
    128     unsigned char odd;
    129     unsigned char number_of_digits;
    130     /* Each byte respresents a 8-bit digit of subaddress data */
    131     unsigned char digits[ RIL_CDMA_SMS_SUBADDRESS_MAX ];
    132 } RIL_CDMA_SMS_Subaddress;
    133 
    134 typedef struct {
    135     int uTeleserviceID;
    136     unsigned char bIsServicePresent;
    137     int uServicecategory;
    138     RIL_CDMA_SMS_Address sAddress;
    139     RIL_CDMA_SMS_Subaddress sSubAddress;
    140     int uBearerDataLen;
    141     unsigned char aBearerData[ RIL_CDMA_SMS_BEARER_DATA_MAX ];
    142 } RIL_CDMA_SMS_Message;
    143 
    144 /* Used by RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE */
    145 
    146 typedef enum {
    147     RIL_CDMA_SMS_NO_ERROR       = 0,
    148     RIL_CDMA_SMS_ERROR          = 1,
    149     RIL_CDMA_SMS_ERROR_MAX32 = 0x10000000 /* Force constant ENUM size in structures */
    150 } RIL_CDMA_SMS_ErrorClass;
    151 
    152 typedef struct {
    153     RIL_CDMA_SMS_ErrorClass uErrorClass;
    154     int uSMSCauseCode;  /* As defined in N.S00005, 6.5.2.125.
    155                            Currently, only 35 (resource shortage) and
    156                            39 (other terminal problem) are reported. */
    157 } RIL_CDMA_SMS_Ack;
    158 
    159 /* Used by RIL_REQUEST_CDMA_SMS_GET_BROADCAST_CONFIG and
    160    RIL_REQUEST_CDMA_SMS_SET_BROADCAST_CONFIG */
    161 
    162 typedef struct {
    163     int service_category;
    164     int language;
    165     unsigned char selected;
    166 } RIL_CDMA_BroadcastSmsConfigInfo;
    167 
    168 /* Used by RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM */
    169 
    170 typedef struct {
    171     int status;     /* Status of message.  See TS 27.005 3.1, "<stat>": */
    172                   /*      0 = "REC UNREAD"    */
    173                   /*      1 = "REC READ"      */
    174                   /*      2 = "STO UNSENT"    */
    175                   /*      3 = "STO SENT"      */
    176 
    177     RIL_CDMA_SMS_Message message;
    178 } RIL_CDMA_SMS_WriteArgs;
    179 
    180 
    181 /* Used by RIL_REQUEST_ENCODE_CDMA_SMS and RIL_REQUEST_DECODE_CDMA_SMS*/
    182 
    183 #define RIL_CDMA_SMS_UDH_MAX_SND_SIZE           128
    184 #define RIL_CDMA_SMS_UDH_EO_DATA_SEGMENT_MAX    131 /* 140 - 3 - 6 */
    185 #define RIL_CDMA_SMS_MAX_UD_HEADERS         7
    186 #define RIL_CDMA_SMS_USER_DATA_MAX     229
    187 #define RIL_CDMA_SMS_ADDRESS_MAX            36
    188 #define RIL_CDMA_SMS_UDH_LARGE_PIC_SIZE     128
    189 #define RIL_CDMA_SMS_UDH_SMALL_PIC_SIZE     32
    190 #define RIL_CDMA_SMS_UDH_VAR_PIC_SIZE       134
    191 #define RIL_CDMA_SMS_UDH_ANIM_NUM_BITMAPS   4
    192 #define RIL_CDMA_SMS_UDH_LARGE_BITMAP_SIZE  32
    193 #define RIL_CDMA_SMS_UDH_SMALL_BITMAP_SIZE  8
    194 #define RIL_CDMA_SMS_UDH_OTHER_SIZE         226
    195 #define RIL_CDMA_SMS_IP_ADDRESS_SIZE        4
    196 
    197 /* ------------------- */
    198 /* ---- User Data ---- */
    199 /* ------------------- */
    200 typedef enum {
    201     RIL_CDMA_SMS_UDH_CONCAT_8         = 0x00,
    202     RIL_CDMA_SMS_UDH_SPECIAL_SM,
    203     /* 02 - 03    Reserved */
    204     RIL_CDMA_SMS_UDH_PORT_8           = 0x04,
    205     RIL_CDMA_SMS_UDH_PORT_16,
    206     RIL_CDMA_SMS_UDH_SMSC_CONTROL,
    207     RIL_CDMA_SMS_UDH_SOURCE,
    208     RIL_CDMA_SMS_UDH_CONCAT_16,
    209     RIL_CDMA_SMS_UDH_WCMP,
    210     RIL_CDMA_SMS_UDH_TEXT_FORMATING,
    211     RIL_CDMA_SMS_UDH_PRE_DEF_SOUND,
    212     RIL_CDMA_SMS_UDH_USER_DEF_SOUND,
    213     RIL_CDMA_SMS_UDH_PRE_DEF_ANIM,
    214     RIL_CDMA_SMS_UDH_LARGE_ANIM,
    215     RIL_CDMA_SMS_UDH_SMALL_ANIM,
    216     RIL_CDMA_SMS_UDH_LARGE_PICTURE,
    217     RIL_CDMA_SMS_UDH_SMALL_PICTURE,
    218     RIL_CDMA_SMS_UDH_VAR_PICTURE,
    219 
    220     RIL_CDMA_SMS_UDH_USER_PROMPT      = 0x13,
    221     RIL_CDMA_SMS_UDH_EXTENDED_OBJECT  = 0x14,
    222 
    223     /* 15 - 1F    Reserved for future EMS */
    224 
    225     RIL_CDMA_SMS_UDH_RFC822           = 0x20,
    226 
    227     /*  21 - 6F    Reserved for future use */
    228     /*  70 - 7f    Reserved for (U)SIM Toolkit Security Headers */
    229     /*  80 - 9F    SME to SME specific use */
    230     /*  A0 - BF    Reserved for future use */
    231     /*  C0 - DF    SC specific use */
    232     /*  E0 - FF    Reserved for future use */
    233 
    234     RIL_CDMA_SMS_UDH_OTHER            = 0xFFFF, /* For unsupported or proprietary headers */
    235     RIL_CDMA_SMS_UDH_ID_MAX32 = 0x10000000   /* Force constant ENUM size in structures */
    236 
    237 } RIL_CDMA_SMS_UdhId;
    238 
    239 typedef struct {
    240     /*indicates the reference number for a particular concatenated short message. */
    241     /*it is constant for every short message which makes up a particular concatenated short message*/
    242     unsigned char       msg_ref;
    243 
    244     /*indicates the total number of short messages within the concatenated short message.
    245      The value shall start at 1 and remain constant for every
    246      short message which makes up the concatenated short message.
    247      if it is 0 then the receiving entity shall ignore the whole Information Element*/
    248     unsigned char       total_sm;
    249 
    250     /*
    251      * it indicates the sequence number of a particular short message within the concatenated short
    252      * message. The value shall start at 1 and increment by one for every short message sent
    253      * within the concatenated short message. If the value is zero or the value is
    254      * greater than the value in octet 2 then the receiving
    255      * entity shall ignore the whole Information Element.
    256      */
    257     unsigned char      seq_num;
    258 } RIL_CDMA_SMS_UdhConcat8;
    259 
    260 /* GW message waiting actions
    261 */
    262 typedef enum {
    263     RIL_CDMA_SMS_GW_MSG_WAITING_NONE,
    264     RIL_CDMA_SMS_GW_MSG_WAITING_DISCARD,
    265     RIL_CDMA_SMS_GW_MSG_WAITING_STORE,
    266     RIL_CDMA_SMS_GW_MSG_WAITING_NONE_1111,
    267     RIL_CDMA_SMS_GW_MSG_WAITING_MAX32 = 0x10000000 /* Force constant ENUM size in structures */
    268 } RIL_CDMA_SMS_GWMsgWaiting;
    269 
    270 /* GW message waiting types
    271 */
    272 typedef enum {
    273     RIL_CDMA_SMS_GW_MSG_WAITING_VOICEMAIL,
    274     RIL_CDMA_SMS_GW_MSG_WAITING_FAX,
    275     RIL_CDMA_SMS_GW_MSG_WAITING_EMAIL,
    276     RIL_CDMA_SMS_GW_MSG_WAITING_OTHER,
    277     RIL_CDMA_SMS_GW_MSG_WAITING_KIND_MAX32 = 0x10000000   /* Force constant ENUM size in structures */
    278 } RIL_CDMA_SMS_GWMsgWaitingKind;
    279 
    280 typedef struct {
    281     RIL_CDMA_SMS_GWMsgWaiting                 msg_waiting;
    282     RIL_CDMA_SMS_GWMsgWaitingKind             msg_waiting_kind;
    283 
    284     /*it indicates the number of messages of the type specified in Octet 1 waiting.*/
    285     unsigned char                             message_count;
    286 } RIL_CDMA_SMS_UdhSpecialSM;
    287 
    288 typedef struct {
    289     unsigned char  dest_port;
    290     unsigned char  orig_port;
    291 } RIL_CDMA_SMS_UdhWap8;
    292 
    293 typedef struct {
    294     unsigned short  dest_port;
    295     unsigned short  orig_port;
    296 } RIL_CDMA_SMS_UdhWap16;
    297 
    298 typedef struct {
    299     unsigned short      msg_ref;
    300     unsigned char       total_sm;
    301     unsigned char       seq_num;
    302 
    303 } RIL_CDMA_SMS_UdhConcat16;
    304 
    305 typedef enum {
    306     RIL_CDMA_SMS_UDH_LEFT_ALIGNMENT = 0,
    307     RIL_CDMA_SMS_UDH_CENTER_ALIGNMENT,
    308     RIL_CDMA_SMS_UDH_RIGHT_ALIGNMENT,
    309     RIL_CDMA_SMS_UDH_DEFAULT_ALIGNMENT,
    310     RIL_CDMA_SMS_UDH_MAX_ALIGNMENT,
    311     RIL_CDMA_SMS_UDH_ALIGNMENT_MAX32 = 0x10000000   /* Force constant ENUM size in structures */
    312 } RIL_CDMA_SMS_UdhAlignment;
    313 
    314 typedef enum {
    315     RIL_CDMA_SMS_UDH_FONT_NORMAL = 0,
    316     RIL_CDMA_SMS_UDH_FONT_LARGE,
    317     RIL_CDMA_SMS_UDH_FONT_SMALL,
    318     RIL_CDMA_SMS_UDH_FONT_RESERVED,
    319     RIL_CDMA_SMS_UDH_FONT_MAX,
    320     RIL_CDMA_SMS_UDH_FONT_MAX32 = 0x10000000   /* Force constant ENUM size in structures */
    321 } RIL_CDMA_SMS_UdhFontSize;
    322 
    323 typedef enum {
    324     RIL_CDMA_SMS_UDH_TEXT_COLOR_BLACK          = 0x0,
    325     RIL_CDMA_SMS_UDH_TEXT_COLOR_DARK_GREY      = 0x1,
    326     RIL_CDMA_SMS_UDH_TEXT_COLOR_DARK_RED       = 0x2,
    327     RIL_CDMA_SMS_UDH_TEXT_COLOR_DARK_YELLOW    = 0x3,
    328     RIL_CDMA_SMS_UDH_TEXT_COLOR_DARK_GREEN     = 0x4,
    329     RIL_CDMA_SMS_UDH_TEXT_COLOR_DARK_CYAN      = 0x5,
    330     RIL_CDMA_SMS_UDH_TEXT_COLOR_DARK_BLUE      = 0x6,
    331     RIL_CDMA_SMS_UDH_TEXT_COLOR_DARK_MAGENTA   = 0x7,
    332     RIL_CDMA_SMS_UDH_TEXT_COLOR_GREY           = 0x8,
    333     RIL_CDMA_SMS_UDH_TEXT_COLOR_WHITE          = 0x9,
    334     RIL_CDMA_SMS_UDH_TEXT_COLOR_BRIGHT_RED     = 0xA,
    335     RIL_CDMA_SMS_UDH_TEXT_COLOR_BRIGHT_YELLOW  = 0xB,
    336     RIL_CDMA_SMS_UDH_TEXT_COLOR_BRIGHT_GREEN   = 0xC,
    337     RIL_CDMA_SMS_UDH_TEXT_COLOR_BRIGHT_CYAN    = 0xD,
    338     RIL_CDMA_SMS_UDH_TEXT_COLOR_BRIGHT_BLUE    = 0xE,
    339     RIL_CDMA_SMS_UDH_TEXT_COLOR_BRIGHT_MAGENTA = 0xF,
    340     RIL_CDMA_SMS_UDH_TEXT_COLOR_MAX32 = 0x10000000   /* Force constant ENUM size in structures */
    341 } RIL_CDMA_SMS_UdhTextColor;
    342 
    343 typedef struct {
    344     unsigned char              start_position;
    345     unsigned char              text_formatting_length;
    346     RIL_CDMA_SMS_UdhAlignment  alignment_type ;       /*bit 0 and  bit 1*/
    347     RIL_CDMA_SMS_UdhFontSize   font_size ;            /*bit 3 and  bit 2*/
    348     unsigned char              style_bold;            /*bit 4 */
    349     unsigned char              style_italic;          /*bit 5  */
    350     unsigned char              style_underlined;      /*bit 6 */
    351     unsigned char              style_strikethrough;   /*bit 7 */
    352 
    353     /* if FALSE, ignore the following color information */
    354     unsigned char              is_color_present;
    355     RIL_CDMA_SMS_UdhTextColor  text_color_foreground;
    356     RIL_CDMA_SMS_UdhTextColor  text_color_background;
    357 
    358 } RIL_CDMA_SMS_UdhTextFormating;
    359 
    360 /* Predefined sound
    361 */
    362 typedef struct {
    363     unsigned char       position;
    364     unsigned char       snd_number;
    365 } RIL_CDMA_SMS_UdhPreDefSound;
    366 
    367 /* User Defined sound
    368 */
    369 typedef struct {
    370     unsigned char       data_length;
    371     unsigned char       position;
    372     unsigned char       user_def_sound[RIL_CDMA_SMS_UDH_MAX_SND_SIZE];
    373 } RIL_CDMA_SMS_UdhUserDefSound;
    374 
    375 /* Large picture
    376 */
    377 typedef struct {
    378     unsigned char       position;
    379     unsigned char       data[RIL_CDMA_SMS_UDH_LARGE_PIC_SIZE];
    380 } RIL_CDMA_SMS_UdhLargePictureData;
    381 
    382 /* Small picture
    383 */
    384 typedef struct {
    385     unsigned char       position;
    386     unsigned char       data[RIL_CDMA_SMS_UDH_SMALL_PIC_SIZE];
    387 } RIL_CDMA_SMS_UdhSmallPictureData;
    388 
    389 /* Variable length picture
    390 */
    391 typedef struct {
    392     unsigned char       position;
    393     unsigned char       width;    /* Number of pixels - Should be a mutliple of 8 */
    394     unsigned char       height;
    395     unsigned char       data[RIL_CDMA_SMS_UDH_VAR_PIC_SIZE];
    396 } RIL_CDMA_SMS_UdhVarPicture;
    397 
    398 /* Predefined animation
    399 */
    400 typedef struct {
    401     unsigned char       position;
    402     unsigned char       animation_number;
    403 } RIL_CDMA_SMS_UdhPreDefAnim;
    404 
    405 /* Large animation
    406 */
    407 typedef struct {
    408     unsigned char       position;
    409     unsigned char       data[RIL_CDMA_SMS_UDH_ANIM_NUM_BITMAPS][RIL_CDMA_SMS_UDH_LARGE_BITMAP_SIZE];
    410 } RIL_CDMA_SMS_UdhLargeAnim;
    411 
    412 /* Small animation
    413 */
    414 typedef struct {
    415     unsigned char       position;
    416     unsigned char       data[RIL_CDMA_SMS_UDH_ANIM_NUM_BITMAPS][RIL_CDMA_SMS_UDH_SMALL_BITMAP_SIZE];
    417 } RIL_CDMA_SMS_UdhSmallAnim;
    418 
    419 /* User Prompt Indicator UDH
    420 */
    421 typedef struct {
    422     unsigned char       number_of_objects;
    423     /* Number of objects of the same kind that follow this header which will
    424     ** be stitched together by the applications. For example, 5 small pictures
    425     ** are to be stitched together horizontally, or 6 iMelody tones are to be
    426     ** connected together with intermediate iMelody header and footer ignored.
    427     ** Allowed objects to be stitched:
    428     **   - Images (small, large, variable)
    429     **   - User defined sounds
    430     */
    431 } RIL_CDMA_SMS_UdhUserPrompt;
    432 
    433 typedef struct {
    434     unsigned char         length;
    435 
    436     unsigned char         data[RIL_CDMA_SMS_UDH_EO_DATA_SEGMENT_MAX];
    437     /* RIL_CDMA_SMS_UDH_EO_VCARD: See http://www.imc.org/pdi/vcard-21.doc for payload */
    438     /* RIL_CDMA_SMS_UDH_EO_VCALENDAR: See http://www.imc.org/pdi/vcal-10.doc */
    439     /* Or: Unsupported/proprietary extended objects */
    440 
    441 } RIL_CDMA_SMS_UdhEoContent;
    442 
    443 /* Extended Object UDH
    444 */
    445 /* Extended Object IDs/types
    446 */
    447 typedef enum {
    448     RIL_CDMA_SMS_UDH_EO_VCARD                   = 0x09,
    449     RIL_CDMA_SMS_UDH_EO_VCALENDAR               = 0x0A,
    450     RIL_CDMA_SMS_UDH_EO_MAX32 = 0x10000000   /* Force constant ENUM size in structures */
    451 } RIL_CDMA_SMS_UdhEoId;
    452 
    453 typedef struct {
    454     /* Extended objects are to be used together with 16-bit concatenation
    455     ** UDH. The max number of segments supported for E.O. is 8 at least.
    456     */
    457     RIL_CDMA_SMS_UdhEoContent    content;
    458 
    459     unsigned char                                 first_segment;
    460     /* The following fields are only present in the first segment of a
    461     ** concatenated SMS message.
    462     */
    463    unsigned char                                   reference;
    464     /* Identify those extended object segments which should be linked together
    465     */
    466    unsigned short                                  length;
    467     /* Length of the whole extended object data
    468     */
    469     unsigned char                                   control;
    470     RIL_CDMA_SMS_UdhEoId                    type;
    471     unsigned short                                  position;
    472     /* Absolute position of the E.O. in the whole text after concatenation,
    473     ** starting from 1.
    474     */
    475 } RIL_CDMA_SMS_UdhEo;
    476 
    477 typedef struct {
    478     RIL_CDMA_SMS_UdhId  header_id;
    479     unsigned char               header_length;
    480     unsigned char              data[RIL_CDMA_SMS_UDH_OTHER_SIZE];
    481 } RIL_CDMA_SMS_UdhOther;
    482 
    483 typedef struct {
    484     unsigned char        header_length;
    485 } RIL_CDMA_SMS_UdhRfc822;
    486 
    487 typedef struct {
    488     RIL_CDMA_SMS_UdhId                header_id;
    489 
    490     union {
    491         RIL_CDMA_SMS_UdhConcat8             concat_8;       // 00
    492 
    493         RIL_CDMA_SMS_UdhSpecialSM           special_sm;     // 01
    494         RIL_CDMA_SMS_UdhWap8                wap_8;          // 04
    495         RIL_CDMA_SMS_UdhWap16               wap_16;         // 05
    496         RIL_CDMA_SMS_UdhConcat16            concat_16;      // 08
    497         RIL_CDMA_SMS_UdhTextFormating       text_formating; // 0a
    498         RIL_CDMA_SMS_UdhPreDefSound         pre_def_sound;  // 0b
    499         RIL_CDMA_SMS_UdhUserDefSound        user_def_sound; // 0c
    500         RIL_CDMA_SMS_UdhPreDefAnim          pre_def_anim;   // 0d
    501         RIL_CDMA_SMS_UdhLargeAnim           large_anim;     // 0e
    502         RIL_CDMA_SMS_UdhSmallAnim           small_anim;     // 0f
    503         RIL_CDMA_SMS_UdhLargePictureData    large_picture;  // 10
    504         RIL_CDMA_SMS_UdhSmallPictureData    small_picture;  // 11
    505         RIL_CDMA_SMS_UdhVarPicture          var_picture;    // 12
    506 
    507         RIL_CDMA_SMS_UdhUserPrompt          user_prompt;    // 13
    508         RIL_CDMA_SMS_UdhEo                  eo;             // 14
    509 
    510         RIL_CDMA_SMS_UdhRfc822              rfc822;         // 20
    511         RIL_CDMA_SMS_UdhOther               other;
    512 
    513     }u;
    514 } RIL_CDMA_SMS_Udh;
    515 
    516 /* ----------------------------- */
    517 /* -- User data encoding type -- */
    518 /* ----------------------------- */
    519 typedef enum {
    520     RIL_CDMA_SMS_ENCODING_OCTET        = 0,    /* 8-bit */
    521     RIL_CDMA_SMS_ENCODING_IS91EP,              /* varies */
    522     RIL_CDMA_SMS_ENCODING_ASCII,               /* 7-bit */
    523     RIL_CDMA_SMS_ENCODING_IA5,                 /* 7-bit */
    524     RIL_CDMA_SMS_ENCODING_UNICODE,             /* 16-bit */
    525     RIL_CDMA_SMS_ENCODING_SHIFT_JIS,           /* 8 or 16-bit */
    526     RIL_CDMA_SMS_ENCODING_KOREAN,              /* 8 or 16-bit */
    527     RIL_CDMA_SMS_ENCODING_LATIN_HEBREW,        /* 8-bit */
    528     RIL_CDMA_SMS_ENCODING_LATIN,               /* 8-bit */
    529     RIL_CDMA_SMS_ENCODING_GSM_7_BIT_DEFAULT,   /* 7-bit */
    530     RIL_CDMA_SMS_ENCODING_MAX32        = 0x10000000
    531 
    532 } RIL_CDMA_SMS_UserDataEncoding;
    533 
    534 /* ------------------------ */
    535 /* -- IS-91 EP data type -- */
    536 /* ------------------------ */
    537 typedef enum {
    538     RIL_CDMA_SMS_IS91EP_VOICE_MAIL         = 0x82,
    539     RIL_CDMA_SMS_IS91EP_SHORT_MESSAGE_FULL = 0x83,
    540     RIL_CDMA_SMS_IS91EP_CLI_ORDER          = 0x84,
    541     RIL_CDMA_SMS_IS91EP_SHORT_MESSAGE      = 0x85,
    542     RIL_CDMA_SMS_IS91EP_MAX32              = 0x10000000
    543 
    544 } RIL_CDMA_SMS_IS91EPType;
    545 
    546 typedef struct {
    547     /* NOTE: If message_id.udh_present == TRUE:
    548     **       'num_headers' is the number of User Data Headers (UDHs),
    549     **       and 'headers' include all those headers.
    550     */
    551     unsigned char                              num_headers;
    552     RIL_CDMA_SMS_Udh                     headers[RIL_CDMA_SMS_MAX_UD_HEADERS];
    553 
    554     RIL_CDMA_SMS_UserDataEncoding      encoding;
    555     RIL_CDMA_SMS_IS91EPType             is91ep_type;
    556 
    557     /*----------------------------------------------------------------------
    558      'data_len' indicates the valid number of bytes in the 'data' array.
    559 
    560      'padding_bits' (0-7) indicates how many bits in the last byte of 'data'
    561      are invalid bits. This parameter is only used for Mobile-Originated
    562      messages. There is no way for the API to tell how many padding bits
    563      exist in the received message. Instead, the application can find out how
    564      many padding bits exist in the user data when decoding the user data.
    565 
    566      'data' has the raw bits of the user data field of the SMS message.
    567      The client software should decode the raw user data according to its
    568      supported encoding types and languages.
    569 
    570      EXCEPTION 1: CMT-91 user data raw bits are first translated into BD fields
    571      (e.g. num_messages, callback, etc.) The translated user data field in
    572      VMN and Short Message is in the form of ASCII characters, each occupying
    573      a byte in the resulted 'data'.
    574 
    575      EXCEPTION 2: GSM 7-bit Default characters are decoded so that each byte
    576      has one 7-bit GSM character.
    577 
    578      'number_of_digits' is the number of digits/characters (7, 8, 16, or
    579      whatever bits) in the raw user data, which can be used by the client
    580      when decoding the user data according to the encoding type and language.
    581     -------------------------------------------------------------------------*/
    582     unsigned char                                data_len;
    583     unsigned char                                padding_bits;
    584     unsigned char                                data[ RIL_CDMA_SMS_USER_DATA_MAX ];
    585     unsigned char                                number_of_digits;
    586 
    587 } RIL_CDMA_SMS_CdmaUserData;
    588 
    589 /* -------------------- */
    590 /* ---- Message Id ---- */
    591 /* -------------------- */
    592 typedef enum {
    593     RIL_CDMA_SMS_BD_TYPE_RESERVED_0     = 0,
    594     RIL_CDMA_SMS_BD_TYPE_DELIVER,       /* MT only */
    595     RIL_CDMA_SMS_BD_TYPE_SUBMIT,        /* MO only */
    596     RIL_CDMA_SMS_BD_TYPE_CANCELLATION,  /* MO only */
    597     RIL_CDMA_SMS_BD_TYPE_DELIVERY_ACK,  /* MT only */
    598     RIL_CDMA_SMS_BD_TYPE_USER_ACK,      /* MT & MO */
    599     RIL_CDMA_SMS_BD_TYPE_READ_ACK,      /* MT & MO */
    600     RIL_CDMA_SMS_BD_TYPE_MAX32          = 0x10000000
    601 
    602 } RIL_CDMA_SMS_BdMessageType;
    603 
    604 typedef unsigned int  RIL_CDMA_SMS_MessageNumber;
    605 
    606 typedef struct {
    607     RIL_CDMA_SMS_BdMessageType   type;
    608     RIL_CDMA_SMS_MessageNumber      id_number;
    609     unsigned char                      udh_present;
    610     /* NOTE: if FEATURE_SMS_UDH is not defined,
    611     ** udh_present should be ignored.
    612     */
    613 } RIL_CDMA_SMS_MessageId;
    614 
    615 typedef unsigned char           RIL_CDMA_SMS_UserResponse;
    616 
    617 /* ------------------- */
    618 /* ---- Timestamp ---- */
    619 /* ------------------- */
    620 typedef struct {
    621     /* If 'year' is between 96 and 99, the actual year is 1900 + 'year';
    622        if 'year' is between 00 and 95, the actual year is 2000 + 'year'.
    623        NOTE: Each field has two BCD digits and byte arrangement is <MSB, ... ,LSB>
    624     */
    625     unsigned char      year;        /* 0x00-0x99 */
    626     unsigned char      month;       /* 0x01-0x12 */
    627     unsigned char      day;         /* 0x01-0x31 */
    628     unsigned char      hour;        /* 0x00-0x23 */
    629     unsigned char      minute;      /* 0x00-0x59 */
    630     unsigned char      second;      /* 0x00-0x59 */
    631     signed char      timezone;    /* +/-, [-48,+48] number of 15 minutes - GW only */
    632 } RIL_CDMA_SMS_Timestamp;
    633 
    634 /* ------------------ */
    635 /* ---- Priority ---- */
    636 /* ------------------ */
    637 typedef enum {
    638     RIL_CDMA_SMS_PRIORITY_NORMAL      = 0,
    639     RIL_CDMA_SMS_PRIORITY_INTERACTIVE,
    640     RIL_CDMA_SMS_PRIORITY_URGENT,
    641     RIL_CDMA_SMS_PRIORITY_EMERGENCY,
    642     RIL_CDMA_SMS_PRIORITY_MAX32       = 0x10000000
    643 
    644 } RIL_CDMA_SMS_Priority;
    645 
    646 /* ----------------- */
    647 /* ---- Privacy ---- */
    648 /* ----------------- */
    649 typedef enum {
    650     RIL_CDMA_SMS_PRIVACY_NORMAL      = 0,
    651     RIL_CDMA_SMS_PRIVACY_RESTRICTED,
    652     RIL_CDMA_SMS_PRIVACY_CONFIDENTIAL,
    653     RIL_CDMA_SMS_PRIVACY_SECRET,
    654     RIL_CDMA_SMS_PRIVACY_MAX32       = 0x10000000
    655 
    656 } RIL_CDMA_SMS_Privacy;
    657 
    658 /* ---------------------- */
    659 /* ---- Reply option ---- */
    660 /* ---------------------- */
    661 typedef struct {
    662     /* whether user ack is requested
    663     */
    664     unsigned char          user_ack_requested;
    665 
    666     /* whether delivery ack is requested.
    667        Should be FALSE for incoming messages.
    668     */
    669     unsigned char          delivery_ack_requested;
    670 
    671     /* Message originator requests the receiving phone to send back a READ_ACK
    672     ** message automatically when the user reads the received message.
    673     */
    674     unsigned char          read_ack_requested;
    675 
    676 } RIL_CDMA_SMS_ReplyOption;
    677 
    678 typedef enum {
    679     RIL_CDMA_SMS_ALERT_MODE_DEFAULT         = 0,
    680     RIL_CDMA_SMS_ALERT_MODE_LOW_PRIORITY    = 1,
    681     RIL_CDMA_SMS_ALERT_MODE_MEDIUM_PRIORITY = 2,
    682     RIL_CDMA_SMS_ALERT_MODE_HIGH_PRIORITY   = 3,
    683 
    684     /* For pre-IS637A implementations, alert_mode only has values of True/False:
    685     */
    686     RIL_CDMA_SMS_ALERT_MODE_OFF   = 0,
    687     RIL_CDMA_SMS_ALERT_MODE_ON    = 1
    688 
    689 } RIL_CDMA_SMS_AlertMode;
    690 
    691 /* ------------------ */
    692 /* ---- Language ---- */
    693 /* ------------------ */
    694 typedef enum {
    695     RIL_CDMA_SMS_LANGUAGE_UNSPECIFIED = 0,
    696     RIL_CDMA_SMS_LANGUAGE_ENGLISH,
    697     RIL_CDMA_SMS_LANGUAGE_FRENCH,
    698     RIL_CDMA_SMS_LANGUAGE_SPANISH,
    699     RIL_CDMA_SMS_LANGUAGE_JAPANESE,
    700     RIL_CDMA_SMS_LANGUAGE_KOREAN,
    701     RIL_CDMA_SMS_LANGUAGE_CHINESE,
    702     RIL_CDMA_SMS_LANGUAGE_HEBREW,
    703     RIL_CDMA_SMS_LANGUAGE_MAX32       = 0x10000000
    704 
    705 } RIL_CDMA_SMS_Language;
    706 
    707 /* ---------------------------------- */
    708 /* ---------- Display Mode ---------- */
    709 /* ---------------------------------- */
    710 typedef enum {
    711     RIL_CDMA_SMS_DISPLAY_MODE_IMMEDIATE   = 0,
    712     RIL_CDMA_SMS_DISPLAY_MODE_DEFAULT     = 1,
    713     RIL_CDMA_SMS_DISPLAY_MODE_USER_INVOKE = 2,
    714     RIL_CDMA_SMS_DISPLAY_MODE_RESERVED    = 3
    715 } RIL_CDMA_SMS_DisplayMode;
    716 
    717 /* IS-637B parameters/fields
    718 */
    719 
    720 /* ---------------------------------- */
    721 /* ---------- Delivery Status ------- */
    722 /* ---------------------------------- */
    723 typedef enum {
    724     RIL_CDMA_SMS_DELIVERY_STATUS_ACCEPTED              = 0,    /* ERROR_CLASS_NONE */
    725     RIL_CDMA_SMS_DELIVERY_STATUS_DEPOSITED_TO_INTERNET = 1,    /* ERROR_CLASS_NONE */
    726     RIL_CDMA_SMS_DELIVERY_STATUS_DELIVERED             = 2,    /* ERROR_CLASS_NONE */
    727     RIL_CDMA_SMS_DELIVERY_STATUS_CANCELLED             = 3,    /* ERROR_CLASS_NONE */
    728 
    729     RIL_CDMA_SMS_DELIVERY_STATUS_NETWORK_CONGESTION  = 4,    /* ERROR_CLASS_TEMP & PERM */
    730     RIL_CDMA_SMS_DELIVERY_STATUS_NETWORK_ERROR       = 5,    /* ERROR_CLASS_TEMP & PERM */
    731     RIL_CDMA_SMS_DELIVERY_STATUS_CANCEL_FAILED       = 6,    /* ERROR_CLASS_PERM */
    732     RIL_CDMA_SMS_DELIVERY_STATUS_BLOCKED_DESTINATION = 7,    /* ERROR_CLASS_PERM */
    733     RIL_CDMA_SMS_DELIVERY_STATUS_TEXT_TOO_LONG       = 8,    /* ERROR_CLASS_PERM */
    734     RIL_CDMA_SMS_DELIVERY_STATUS_DUPLICATE_MESSAGE   = 9,    /* ERROR_CLASS_PERM */
    735     RIL_CDMA_SMS_DELIVERY_STATUS_INVALID_DESTINATION = 10,   /* ERROR_CLASS_PERM */
    736     RIL_CDMA_SMS_DELIVERY_STATUS_MESSAGE_EXPIRED     = 13,   /* ERROR_CLASS_PERM */
    737 
    738     RIL_CDMA_SMS_DELIVERY_STATUS_UNKNOWN_ERROR       = 0x1F  /* ERROR_CLASS_PERM */
    739 
    740     /* All the other values are reserved */
    741 
    742 } RIL_CDMA_SMS_DeliveryStatusE;
    743 
    744 typedef struct {
    745     RIL_CDMA_SMS_ErrorClass       error_class;
    746     RIL_CDMA_SMS_DeliveryStatusE   status;
    747 } RIL_CDMA_SMS_DeliveryStatus;
    748 
    749 typedef struct {
    750     unsigned char               address[RIL_CDMA_SMS_IP_ADDRESS_SIZE];
    751     unsigned char             is_valid;
    752 } RIL_CDMA_SMS_IpAddress;
    753 
    754 /* This special parameter captures any unrecognized/proprietary parameters
    755 */
    756 typedef struct {
    757     unsigned char                         input_other_len;
    758     unsigned char                         desired_other_len; /* used during decoding */
    759     unsigned char                         * other_data;
    760 } RIL_CDMA_SMS_OtherParm;
    761 
    762 typedef struct {
    763     /* the mask indicates which fields are present in this message */
    764     unsigned int                        mask;
    765 
    766     RIL_CDMA_SMS_MessageId         message_id;
    767     RIL_CDMA_SMS_CdmaUserData     user_data;
    768     RIL_CDMA_SMS_UserResponse        user_response;
    769     RIL_CDMA_SMS_Timestamp          mc_time;
    770     RIL_CDMA_SMS_Timestamp          validity_absolute;
    771     RIL_CDMA_SMS_Timestamp          validity_relative;
    772     RIL_CDMA_SMS_Timestamp          deferred_absolute;
    773     RIL_CDMA_SMS_Timestamp          deferred_relative;
    774     RIL_CDMA_SMS_Priority           priority;
    775     RIL_CDMA_SMS_Privacy            privacy;
    776     RIL_CDMA_SMS_ReplyOption       reply_option;
    777     unsigned char                         num_messages;  /* the actual value; not BCDs */
    778     RIL_CDMA_SMS_AlertMode         alert_mode;
    779      /* For pre-IS-637A implementations, alert_mode is either Off or On. */
    780     RIL_CDMA_SMS_Language           language;
    781     RIL_CDMA_SMS_Address            callback;
    782     RIL_CDMA_SMS_DisplayMode       display_mode;
    783 
    784     RIL_CDMA_SMS_DeliveryStatus    delivery_status;
    785     unsigned int                        deposit_index;
    786 
    787     RIL_CDMA_SMS_IpAddress         ip_address;
    788     unsigned char                         rsn_no_notify;
    789 
    790     /* See function comments of wms_ts_decode() and
    791     ** wms_ts_decode_cdma_bd_with_other() for details regarding 'other' parameters
    792     */
    793     RIL_CDMA_SMS_OtherParm         other;
    794 
    795 } RIL_CDMA_SMS_ClientBd;
    796 
    797 typedef struct {
    798     unsigned char length;   /* length, in bytes, of the encoded SMS message */
    799     unsigned char * data;   /* the encoded SMS message (max 255 bytes) */
    800 } RIL_CDMA_Encoded_SMS;
    801 
    802 #ifdef __cplusplus
    803 }
    804 #endif
    805 
    806 #endif /*ANDROID_RIL_CDMA_SMS_H*/
    807