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
35extern "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
44typedef 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
50typedef 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
56typedef 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@y.com,a@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
77typedef 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
97typedef 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
119typedef 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
125typedef 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
134typedef 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
146typedef 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
152typedef 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
162typedef 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
170typedef 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/* ------------------- */
200typedef 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
239typedef 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*/
262typedef 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*/
272typedef 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
280typedef 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
288typedef struct {
289    unsigned char  dest_port;
290    unsigned char  orig_port;
291} RIL_CDMA_SMS_UdhWap8;
292
293typedef struct {
294    unsigned short  dest_port;
295    unsigned short  orig_port;
296} RIL_CDMA_SMS_UdhWap16;
297
298typedef struct {
299    unsigned short      msg_ref;
300    unsigned char       total_sm;
301    unsigned char       seq_num;
302
303} RIL_CDMA_SMS_UdhConcat16;
304
305typedef 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
314typedef 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
323typedef 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
343typedef 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*/
362typedef struct {
363    unsigned char       position;
364    unsigned char       snd_number;
365} RIL_CDMA_SMS_UdhPreDefSound;
366
367/* User Defined sound
368*/
369typedef 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*/
377typedef 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*/
384typedef 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*/
391typedef 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*/
400typedef struct {
401    unsigned char       position;
402    unsigned char       animation_number;
403} RIL_CDMA_SMS_UdhPreDefAnim;
404
405/* Large animation
406*/
407typedef 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*/
414typedef 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*/
421typedef 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
433typedef 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*/
447typedef 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
453typedef 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
477typedef 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
483typedef struct {
484    unsigned char        header_length;
485} RIL_CDMA_SMS_UdhRfc822;
486
487typedef 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/* ----------------------------- */
519typedef 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/* ------------------------ */
537typedef 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
546typedef 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/* -------------------- */
592typedef 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
604typedef unsigned int  RIL_CDMA_SMS_MessageNumber;
605
606typedef 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
615typedef unsigned char           RIL_CDMA_SMS_UserResponse;
616
617/* ------------------- */
618/* ---- Timestamp ---- */
619/* ------------------- */
620typedef 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/* ------------------ */
637typedef 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/* ----------------- */
649typedef 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/* ---------------------- */
661typedef 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
678typedef 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/* ------------------ */
694typedef 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/* ---------------------------------- */
710typedef 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/* ---------------------------------- */
723typedef 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
744typedef struct {
745    RIL_CDMA_SMS_ErrorClass       error_class;
746    RIL_CDMA_SMS_DeliveryStatusE   status;
747} RIL_CDMA_SMS_DeliveryStatus;
748
749typedef 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*/
756typedef 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
762typedef 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
797typedef 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